Files
pi-pm3/REFACTORING_ROADMAP.md
michael 4f35df1781 Initial commit - Phase 3/4
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 13:46:22 -08:00

219 lines
8.1 KiB
Markdown

# Dangerous Pi - Refactoring Roadmap
**Last Updated:** 2025-12-30
**Overall Status:** ✅ 100% Complete - All Sprints Done
This document consolidates all refactoring efforts into a single source of truth.
---
## Executive Summary
| Refactor | Status | Details |
|----------|--------|---------|
| **Service Layer Pattern** | ✅ Complete | REST + BLE share 100% business logic |
| **BLE GATT Handlers** | ✅ Complete | 22+ characteristics, all handlers ready |
| **Multi-PM3 Device Manager** | ✅ Complete | Discovery, enumeration, status tracking |
| **Multi-PM3 API Endpoints** | ✅ Complete | 6 device management endpoints |
| **Multi-PM3 Frontend** | ✅ Complete | DeviceSelector component |
| **SessionManager Per-Device** | ✅ Complete | Per-device sessions working |
| **Switch to SWIG Worker** | ✅ Complete | SWIG bindings working on Pi |
| **BLE/BlueZ Integration** | ✅ Complete | bless library, BlueZGATTAdapter |
---
## Completed Work (Reference Only)
### 1. Service Layer Pattern ✅
**Completed:** 2025-11-26
All business logic centralized in service layer. Both REST API and BLE GATT use identical code paths.
**Files created:**
- `app/backend/services/pm3_service.py` - PM3 command execution
- `app/backend/services/system_service.py` - System operations
- `app/backend/services/wifi_service.py` - WiFi management
- `app/backend/services/update_service.py` - Software updates
- `app/backend/services/container.py` - Dependency injection
**Test coverage:** 115+ tests, 94% coverage
**See:** `docs/archive/REFACTORING_PLAN.md` for original design
### 2. BLE GATT Handlers ✅
**Completed:** 2025-11-26
All GATT characteristic handlers implemented as thin adapters calling service layer.
**Files created:**
- `app/backend/ble/gatt_server.py` - 22+ characteristic handlers
- `app/backend/ble/characteristics.py` - UUID definitions
**See:** `docs/archive/BLUETOOTH_REFACTORING_COMPLETE.md` for details
### 3. Multi-PM3 Device Manager ✅
**Completed:** 2025-11-26
Full device discovery, status tracking, and management.
**Files created:**
- `app/backend/managers/pm3_device_manager.py` - Device management
- `app/frontend/app/components/DeviceSelector.tsx` - UI component
- Database schema: `devices`, `sessions.device_id`, `firmware_flash_log` tables
**See:** `docs/archive/MULTI_PM3_REFACTORING_PLAN.md` for design decisions
---
## All Sprints Complete
All refactoring work has been completed. The following sections document what was done for reference.
### Sprint A: SessionManager Per-Device Support ✅
**Completed:** Per-device session isolation for multi-PM3 support.
### Sprint B: Switch to SWIG Worker ✅
**Completed:** SWIG bindings for faster PM3 communication.
### Sprint C: BLE/BlueZ Integration ✅
**Completed:** 2025-12-30
Full BLE GATT server operational with BlueZ via the `bless` library.
**Implementation:**
- Added `bless>=0.2.5` to requirements.txt
- Created `app/backend/ble/bluez_adapter.py` - BlueZGATTAdapter class using `add_gatt()` dictionary pattern
- Fixed UUID format in `characteristics.py` (was generating invalid 13-char segments)
- Integrated with existing `ble_manager.py` for seamless startup
- All 4 GATT services registered (PM3, WiFi, System, Update)
- Notification sending implemented via bless
- Automatic fallback to basic advertising if bless unavailable
**Tested:** Successfully started/stopped GATT server on local machine with BlueZ
**Service UUIDs:**
- PM3: `d4c3b2a1-0000-1000-8000-00805f9b0000`
- WiFi: `d4c3b2a1-0000-1000-8000-00805f9b0010`
- System: `d4c3b2a1-0000-1000-8000-00805f9b0020`
- Update: `d4c3b2a1-0000-1000-8000-00805f9b0030`
**Files created/modified:**
- `requirements.txt` - Added bless dependency
- `app/backend/ble/bluez_adapter.py` - New BlueZ adapter
- `app/backend/ble/characteristics.py` - Fixed UUID format
- `app/backend/ble/__init__.py` - Updated exports
- `app/backend/managers/ble_manager.py` - Integrated GATT adapter
---
## Hardware Testing Checklist
**Environment:** Raspberry Pi Zero 2 W with PM3 Easy (Iceman firmware)
### Basic Validation
- [ ] Device discovery: `curl http://localhost:8000/api/pm3/devices`
- [ ] Command execution: `curl -X POST http://localhost:8000/api/pm3/command -d '{"command":"hw version"}'`
- [ ] Session creation with device_id
- [ ] Session timeout and auto-release
### LED Identification
- [ ] Test `hw led --led a --brightness 100` on real hardware
- [ ] Verify LED control works for device identification
- [ ] Document any firmware-specific quirks
### BLE Testing
**Local Testing (completed on dev machine):**
- [x] GATT server starts successfully with bless library
- [x] All 4 services registered (PM3, WiFi, System, Update)
- [x] Server stops cleanly
- [x] BlueZ D-Bus integration working
**Pi Hardware Testing (2025-12-30):**
- [x] bless library installed on Pi (v0.3.0)
- [x] Standalone bless test script runs successfully (30s advertising, no errors)
- [x] GATT services registered in BlueZ (visible via `bluetoothctl show`)
- [x] BLE manager integrated with dangerous-pi service
- [x] Bluetooth auto-enable configured in `/etc/bluetooth/main.conf`
- [x] Scan from nearby phone/laptop to verify discovery (confirmed via Ubuntu BT settings)
- [x] Connect via gatttool and browse GATT services - all 4 services discovered
- [x] Read characteristics successfully (PM3 STATUS, WiFi MODE, etc.)
- [x] Write to PM3 COMMAND characteristic successfully
- [ ] Receive notification with command result (requires PM3 attached)
- [ ] Test with actual PM3 device attached
**API Compatibility Fixes (2025-12-30):**
- bless 0.3.0 changed callback registration: `on_read``read_request_func`, `on_write``write_request_func`
- bless 0.3.0 changed `update_value()` from async to sync
- Fixed UUID case sensitivity (UUIDs must be lowercase to match our definitions)
- Fixed async deadlock: BLE callbacks cannot block on event loop, so reads return cached values
- Fixed GATT handler to handle multi-device PM3 response format
**Known Issues:**
- Bluetooth was blocked by rfkill on first boot; fixed by adding `AutoEnable=true` to BlueZ config
- Pi Zero 2 W has limited BLE range (~5-10m indoors) - ensure proximity during testing
- Standard `bluetoothctl connect` tries classic Bluetooth, not BLE - use `gatttool` for LE connections
---
## Quick Reference: Key Files
### Service Layer
- `app/backend/services/pm3_service.py`
- `app/backend/services/container.py`
### Device Management
- `app/backend/managers/pm3_device_manager.py`
- `app/backend/managers/session_manager.py`
### BLE (full GATT server)
- `app/backend/ble/gatt_server.py` - GATT handlers
- `app/backend/ble/bluez_adapter.py` - bless integration
- `app/backend/managers/ble_manager.py` - startup/lifecycle
### API Endpoints
- `app/backend/api/pm3.py`
### Database
- `app/backend/models/database.py`
---
## Configuration Decisions
Recorded from user during planning session:
| Decision | Choice | Rationale |
|----------|--------|-----------|
| PM3 Worker Type | SWIG Bindings | Faster, direct hardware access |
| Session Model | Per-device | Allow concurrent use of multiple PM3s |
| BLE Priority | High | Mobile app and field use without WiFi |
| PM3 Firmware | Iceman/RRG | Has `hw led` commands for identification |
---
## Archived Documents
Moved to `docs/archive/` - can be deleted when no longer needed:
| Document | Content |
|----------|---------|
| `docs/archive/REFACTORING_PLAN.md` | Service layer design |
| `docs/archive/REFACTORING_SUMMARY.md` | Service layer summary |
| `docs/archive/BLUETOOTH_REFACTORING_COMPLETE.md` | BLE handlers details |
| `docs/archive/MULTI_PM3_REFACTORING_PLAN.md` | Multi-PM3 design (86KB) |
| `docs/archive/MULTI_PM3_PROGRESS.md` | Old progress tracker |
---
## Version History
| Date | Changes |
|------|---------|
| 2025-12-30 | Deployed and tested BLE on Pi hardware; bless works, configured auto-enable |
| 2025-12-30 | Fixed UUID format in characteristics.py, tested BLE server locally |
| 2025-12-30 | Sprint C complete: BLE/BlueZ integration with bless library |
| 2025-12-30 | Created unified roadmap, consolidated 5 documents |
| 2025-11-26 | Service layer + BLE handlers completed |
| 2025-11-26 | Multi-PM3 device manager + API completed |