Der Datenfluss ist unidirektional vom Android-System zum ESP32-HUD:
- Input:
MyBluetoothTtsService(fängt System-TTS-Events ab). - Processing:
MainActivity(filtert GPS-Speed, mittelt Werte, verwaltet BLE-Queue). - Output:
BluetoothLeService(schreibt in die UART-Charakteristik des C3).
| Schicht | Spezifikation |
|---|---|
| Profile | BLE GATT (Generic Attribute Profile) |
| MTU Size | 512 Bytes (angefordert durch Client) |
| Write Type | WRITE_TYPE_NO_RESPONSE (für minimale Latenz) |
| UUIDs | Service: ...DCCA9E, TX: ...DCCA9E (Nordic UART) |
Das UI basiert auf einem Tab-Switcher-Modell:
- State
isDevices: ZeigtcontainerDevices(Scan-Ergebnisse). - State
!isDevices: ZeigtcontainerLog(Echtzeit-Konsole). - Persistenz: Das Log wird beim Schreiben in
bike_log.txtgestreamt und beimonCreatevollständig in den Speicher geladen.
Zentrale Variablen für die Konsistenz zwischen XML und Kotlin:
bike_blue_active: Primäre Handlungsfarbe für Buttons und aktive Tabs.gray_inactive: Sekundärfarbe für inaktive Zustände.black: Hintergrundfarbe für das Log-Fenster (maximale Energieeffizienz bei OLED).
Die App fordert zur Laufzeit folgende kritische Rechte an:
ACCESS_FINE_LOCATION: Notwendig für GPS-Speed und BLE-Scanning.BLUETOOTH_SCAN/BLUETOOTH_CONNECT: (Ab Android 12) Für die Kommunikation.QUERY_ALL_PACKAGES: Um Organic Maps im TTS-Dienst zu identifizieren.
- BLE-Abbruch: Automatischer Null-Check der
writeCharacteristic. - GPS-Verlust: Letzter bekannter Speed wird gehalten, bis Timeout greift.
- Resource Linking: Synchronisierte
valuesundvalues-nightOrdner zur Vermeidung von Build-Abstürzen.