Files
FTC-Project-Gen/linux/templates

# {{PROJECT_NAME}}

FTC robot project generated by FTC Project Generator v{{GENERATOR_VERSION}}.

## Quick Start

```bash
# Run tests
./gradlew test

# Watch tests (auto-rerun)
./gradlew test --continuous

# Build and check
./build.sh

# Deploy to robot
./deploy-to-robot.sh
```

## Project Structure

```
{{PROJECT_NAME}}/
├── src/main/java/robot/
│   ├── subsystems/      Your robot logic (tested on PC)
│   ├── hardware/        FTC hardware implementations
│   └── opmodes/         FTC OpModes for Control Hub
└── src/test/java/robot/ Unit tests (run without robot)
```

## Development Workflow

1. **Write code** in `src/main/java/robot/`
2. **Write tests** in `src/test/java/robot/`
3. **Run tests** with `./gradlew test --continuous`
4. **Tests pass** → You're good!

## Deployment to Robot

When ready to test on actual hardware:

1. **Uncomment FTC imports** in:
   - `src/main/java/robot/hardware/MecanumDrive.java`
   - `src/main/java/robot/opmodes/TeleOp.java`

2. **Run deployment script:**
   ```bash
   ./deploy-to-robot.sh
   ```

The script will:
- Deploy your code to SDK TeamCode
- Build APK
- Install to Control Hub (via USB or WiFi)

### Connection Methods

- **USB**: Just plug in and run (recommended)
- **WiFi**: Connect to 'FIRST-xxxx-RC' network (IP: 192.168.43.1)
- **Custom**: `./deploy-to-robot.sh -i 192.168.1.x`

## Adding New Subsystems

Follow the pattern:

1. **Create subsystem** with inner Hardware interface:
   ```java
   public class MySubsystem {
       public interface Hardware {
           void doThing();
       }
   }
   ```

2. **Create test** with inline mock:
   ```java
   class MySubsystemTest {
       static class MockHardware implements MySubsystem.Hardware {
           boolean didThing = false;
           public void doThing() { didThing = true; }
       }
   }
   ```

3. **Create hardware impl** for robot (keep FTC imports commented during dev)

## Tips

- Keep FTC imports commented during development
- Write tests for everything - they run instantly on PC
- Use `./gradlew test --continuous` for fast iteration
- Multiple projects can share the same FTC SDK

## Commands

```bash
# Development (on PC)
./gradlew test                  Run all tests
./gradlew test --continuous     Watch mode

# Before deployment
./build.sh                      Check for compile errors
./build.sh --clean              Clean build

# Deploy to robot
./deploy-to-robot.sh            Full deployment
./deploy-to-robot.sh --help     Show options

# Other
./gradlew clean                 Clean build artifacts
./gradlew tasks                 List available tasks
```

## Upgrading

To upgrade this project to a newer version of the generator:

```bash
# From parent directory
ftc-new-project {{PROJECT_NAME}} --upgrade
```

This will update build files and scripts while preserving your code.

## Generated by FTC Project Generator

This project structure separates your robot code from the FTC SDK,
making it easy to test on PC and deploy when ready.

Generator version: {{GENERATOR_VERSION}}
FTC SDK version: {{FTC_VERSION}}