┌─────────────────────────────────────────────────────────────┐
│ SwiftUI Views Layer │
├─────────────────────────────────────────────────────────────┤
│ ViewModels & Managers │
├─────────────────────────────────────────────────────────────┤
│ Business Logic Layer │
├─────────────────────────────────────────────────────────────┤
│ Data Models Layer │
├─────────────────────────────────────────────────────────────┤
│ Core Bluetooth Layer │
└─────────────────────────────────────────────────────────────┘
| Component | File(s) | Purpose |
|---|---|---|
| App entry point | FacettApp.swift |
Lifecycle, dependency injection, idle timer |
| BLE Manager | BLEManager.swift |
Discovery, connection, command sending, error recovery |
| Config Manager | CameraConfig.swift, ConfigManager.swift |
Camera presets, settings validation, sync |
| Group Manager | CameraGroup.swift, CameraGroupManager.swift |
Multi-camera groups, coordinated control |
| Crash Reporter | CrashReporter.swift |
Signal/exception handlers, error logging |
| Error Handler | ErrorHandler.swift |
Centralized logging with severity levels |
ContentView
├── ActiveSetSummaryView
│ ├── CameraStatusRow
│ ├── BatteryIndicator
│ └── SettingsMismatchIndicator
├── CameraGroupViews
│ ├── CameraListView
│ ├── CameraGroupRow
│ └── CameraDetailView
├── ConfigManagementView
│ ├── ConfigList
│ ├── ConfigEditor
│ └── SettingsValidator
└── ManagementButtons
├── ConnectAllButton
├── CameraGroupsButton
├── ConfigurationsButton
└── BugReportButton
| Model | Type | Role |
|---|---|---|
GoProSettings |
ObservableObject |
Live camera state with @Published properties |
GoProSettingsData |
Codable |
Persistent settings storage with defaults |
CameraConfig |
Identifiable, Codable |
Named preset (name, description, settings) |
CameraGroup |
Identifiable, Codable |
Group of cameras by serial (cameraSerials: Set<String>) |
CameraStatus |
enum |
Ready, Error, Recording, Disconnected, etc. |
GroupStatus |
struct |
Aggregate counts across a group |
- BLE_PROTOCOL.md — Packet formats, header encoding, TLV structure
- CRASH_REPORTING.md — Crash and error logging system