# PyBusMonitor1553 - Project Roadmap

## Vision
Evolve from passive bus monitor to comprehensive radar simulation and control platform for GRIFO-F/TH integration testing.

---

## Phase 1: Bus Monitor ✅ (Current)

**Status**: Complete  
**Objective**: Passive monitoring of MIL-STD-1553 traffic

**Capabilities**:
- UDP packet reception/parsing
- Real-time message display (A1-A8, B1-B8)
- Traffic statistics and message rates
- Tkinter GUI with detail view

**Architecture Foundation**:
- Field descriptor pattern (BitField, EnumField, ScaledField)
- Multi-rate scheduler (50Hz, 25Hz, 6.25Hz)
- Thread-safe Queue-based updates
- Modular message definitions

---

## Phase 2: Command & Control (Next)

**Objective**: Active radar command generation and parameter injection

### 2.1 Command Interface
```python
# Public API for radar control
controller.set_master_mode(MasterMode.TWS)
controller.set_range(RangeScale.NM_80)
controller.set_scan_pattern(bars=BAR_4, azimuth=DEG_120)
controller.set_standby(False)
```

### 2.2 Navigation Data Injection
```python
# Simulate platform movement
controller.update_nav_data(
    altitude=8500.0,      # meters MSL
    velocity=(250, 45),   # m/s, heading degrees
    attitude=(5, -2, 180) # pitch, roll, yaw
)
```

### 2.3 GUI Enhancements
- **Control Panel**: Sliders/dropdowns for mode, range, scan parameters
- **Nav Data Input**: Real-time position/velocity entry
- **Command History**: Log of sent commands with timestamps

### Technical Requirements
- Validation layer for parameter ranges (per ICD limits)
- Command queuing for rate-limited transmission
- Feedback display (command sent ✓, acknowledged, rejected)

---

## Phase 3: Target Injection

**Objective**: Simulate radar returns by injecting synthetic targets

### 3.1 Track Management
```python
# Generate synthetic tracks
target_injector.create_track(
    track_id=1,
    position=(12000, 5000, 3000),  # x, y, z meters
    velocity=(150, 90),             # speed m/s, heading
    rcs=10.0                        # radar cross-section m²
)
```

### 3.2 Scenario Engine
- **Multi-target scenarios**: Formations, intercepts, evasion
- **Kinematic models**: Constant velocity, turning, acceleration
- **Playback mode**: Load pre-recorded scenarios

### 3.3 Message B Integration
- Populate MsgB1-B8 with synthetic track data
- Realistic track numbers, priorities, threat levels
- Coordinate with MsgA radar state (range/azimuth constraints)

### Technical Challenges
- Coordinate transformations (geodetic ↔ radar-relative)
- Track lifecycle (initiation, update, drop)
- Realistic timing (update rates per track quality)

---

## Phase 4: Integration Platform

**Objective**: Modular architecture for complex test scenarios

### 4.1 Plugin System
```
pybusmonitor1553/
  plugins/
    scenario_loader/   # Load JSON/XML scenario files
    telemetry_logger/  # Record all traffic to disk
    replay_engine/     # Playback recorded sessions
    external_sim/      # Interface to FlightGear, X-Plane
```

### 4.2 Scripting Interface
```python
# Python scripting for automated tests
from pybusmonitor1553 import RadarSim

sim = RadarSim()
sim.initialize_radar(mode=MasterMode.RWS, range=NM_40)
sim.inject_target(position=(10000, 0, 2000), velocity=(200, 0))
sim.run_for(seconds=30)
sim.assert_track_acquired(track_id=1)
```

### 4.3 Network Integration
- **Multi-client support**: Multiple radars on same network
- **Bridge mode**: Forward traffic between networks
- **Remote control**: Web API for external orchestration

---

## Phase 5: Advanced Features

### 5.1 Jamming & Countermeasures
- ECM simulation (noise, deception)
- Chaff/flare injection
- ECCM effectiveness testing

### 5.2 Environment Simulation
- Weather effects (rain, sea clutter)
- Terrain masking
- Multipath propagation

### 5.3 Analysis Tools
- Performance metrics (detection range, track accuracy)
- Scenario replay with annotations
- Report generation (PDF, CSV)

---

## Design Principles for Evolution

### 1. Backward Compatibility
- Bus monitor mode always available
- Existing message classes unchanged
- New features opt-in via configuration

### 2. Extensibility Points
**RadarController**:
- `apply_defaults()` → `apply_config(profile)`
- Add `validate_command()`, `queue_command()`

**MessageBase**:
- All fields settable via descriptors
- `pack()` method handles updated values
- No breaking changes to field definitions

**Scheduler**:
- Current tick-based design supports dynamic message addition
- `_build_schedule_table()` can accept runtime schedule changes

### 3. Separation of Concerns
```
core/
  controller.py      # Radar state (read-only in Phase 1)
  command_builder.py # NEW: Command generation & validation
  target_manager.py  # NEW: Track injection & kinematics
  scenario_engine.py # NEW: Script execution & orchestration
```

### 4. Configuration Management
```python
# config.yaml
mode: monitor  # monitor | control | inject | scenario

monitor:
  gui_enabled: true
  log_traffic: false

control:
  validation: strict  # strict | permissive
  command_rate_limit: 50  # Hz

inject:
  max_targets: 64
  coordinate_system: radar_relative
```

---

## Migration Path

### From Current (Monitor) to Control
1. **No code changes required** in `lib1553/` - all fields already writable
2. Add `core/command_builder.py` - validation layer
3. Extend `RadarController` with setter methods
4. GUI: add control panel tab

### From Control to Injection
1. Create `core/target_manager.py` - track kinematics
2. Implement coordinate transforms in `utils/coordinates.py`
3. Populate MsgB* with synthetic data
4. GUI: add target management panel

### Timeline Estimate
- **Phase 2**: 2-3 weeks (command interface + GUI controls)
- **Phase 3**: 3-4 weeks (target injection + kinematics)
- **Phase 4**: 4-6 weeks (plugin architecture + scripting)
- **Phase 5**: Long-term (research-driven features)

---

## Technical Debt Considerations

### Current Limitations
1. **Endianness handling**: Scattered pack/unpack logic
   - *Solution*: Centralize in `MessageBase._pack_word()`

2. **Error handling**: Limited validation on field assignments
   - *Solution*: Add `Field.validate()` hook

3. **Thread synchronization**: Queue-based but no explicit locking
   - *Solution*: Document threading model, add assertions

4. **Configuration**: Hardcoded network addresses
   - *Solution*: Move to `config.yaml` with environment overrides

### Refactoring Opportunities
- Extract UDP1553 frame handling to `lib1553/protocol.py`
- Split `MessageDispatcher` (RX) from `CommandDispatcher` (TX)
- Unify `packet_builder.py` and `packet_builder_simple.py`

---

## Success Metrics

### Phase 2 (Control)
- ✅ Radar mode change via GUI within 200ms
- ✅ All A-messages parameters modifiable
- ✅ Server MFD reflects commanded state

### Phase 3 (Injection)
- ✅ Inject 32 synthetic targets at 50Hz
- ✅ Tracks visible in server display
- ✅ Kinematic models accurate to <1% position error

### Phase 4 (Platform)
- ✅ Load/replay 10-minute scenario
- ✅ Python scripting executes 100-step test
- ✅ Plugin API documented with 3+ community plugins

---

## Conclusion

The field descriptor architecture and modular message design already support full parameter modification. Evolution to command & control requires **adding**, not **replacing**, existing code. The bus monitor remains the foundation—new capabilities layer on top as optional modes.

**Next Immediate Step**: Validate current radar initialization works correctly before adding control features.
