Zum Inhalt springen

Technische Spezifikation

Designprinzip

Die Anwendung basiert auf Flutter und nutzt das Riverpod State-Management-Framework. Sie interagiert mit der ELRS-Hardware über eine RESTful API, die vom integrierten WiFi-Modul des Geräts bereitgestellt wird, um eine Kommunikation mit geringer Latenz und Echtzeit-Statussynchronisierung zu gewährleisten.

Das System kommuniziert mit der Hardware über die folgenden HTTP-Endpunkte:

MethodeEndpunktBeschreibung
GET/configRuft die aktuelle Gerätekonfiguration im JSON-Format ab.
POST/options.jsonAktualisiert änderbare Laufzeitoptionen (SSID, Passwort usw.).
POST/configAktualisiert grundlegende Hardwareparameter und PWM-Zuordnungen.
POST/rebootLöst einen Hardware-Reset aus, um Änderungen anzuwenden.

Das RuntimeConfig-Modell nutzt die ELRS 4.x-Struktur, die Parameter in drei primäre Knoten unterteilt:

  • settings: Schreibgeschützte Hardware-Identifikatoren und Versionszeichenfolgen.
  • options: Änderbare Benutzereinstellungen und Netzwerkanmeldeinformationen.
  • config: Low-Level-Hardwarekonfigurationen (Protokolle, PWM-Arrays).

Beispiel für eine JSON-Struktur:

{
"product_name": "Test RX",
"settings": {
"version": "1.0.0",
"module-type": "RX"
},
"options": {
"bindPhrase": "example",
"wifi-ssid": "SSID",
"domain": 1
},
"config": {
"serial-protocol": 0,
"pwm": [
{"channel": 0, "mode": 5}
]
}
}

Das System verwendet eine reaktive Architektur:

  • ConfigViewModel: Verwaltet den Live-Verbindungsstatus, die Heartbeat-Logik und die IP-Erkennung.
  • FlashingController: Orchestriert Firmware-Downloads, lokale Binär-Patching und den XH-over-HTTP-Upload-Prozess.

ElrsMappings.domains900 ordnet den in der API verwendeten 900 MHz Regulierungsbereichsindex seinem menschenlesbaren Label zu:

IDLabelBeschreibung
0AU915Australien/Neuseeland 915MHz
1FCC915Nordamerika 915MHz
2EU868Europa 868MHz
3IN866Indien 866MHz
4AU433Australien 433MHz
5EU433Europa 433MHz
6US433Nordamerika 433MHz
7US433-WideNordamerika Wide 433MHz

Das System implementiert eine zweischichtige Persistenzstrategie:

  • SharedPreferences: Wird über PersistenceService für nicht-sensible Daten wie WiFi SSIDs und allgemeine App-Einstellungen verwendet.
  • FlutterSecureStorage: Wird für sensible Daten, einschließlich Binding Phrases und WiFi-Passwörter, verwendet, um die Verschlüsselung auf OS-Ebene zu gewährleisten.