🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
219 lines
8.1 KiB
Markdown
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 |
|