Ga naar inhoud

Technische Specificatie

Ontwerpprincipe

De applicatie is gebouwd met Flutter en maakt gebruik van het Riverpod state management framework. Het communiceert met ELRS-hardware via een RESTful API die wordt blootgesteld door de ingebouwde WiFi-module van het apparaat, wat zorgt voor communicatie met lage latentie en real-time statussynchronisatie.

Het systeem communiceert met de hardware via de volgende HTTP-eindpunten:

MethodeEindpuntBeschrijving
GET/configHaalt de huidige apparaatconfiguratie op in JSON-formaat.
POST/options.jsonWerkt aanpasbare runtime-opties bij (SSID, Wachtwoord, enz.).
POST/configWerkt kernhardwareparameters en PWM-toewijzingen bij.
POST/rebootActiveert een hardware-reset om wijzigingen toe te passen.

Het RuntimeConfig-model maakt gebruik van de ELRS 4.x-structuur, die parameters scheidt in drie primaire knooppunten:

  • settings: Alleen-lezen hardware-identificatoren en versietekstreeksen.
  • options: Aanpasbare gebruikersvoorkeuren en netwerkreferenties.
  • config: Laag-niveau hardwareconfiguraties (Protocollen, PWM-arrays).

Voorbeeld JSON-structuur:

{
"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}
]
}
}

Het systeem maakt gebruik van een reactieve architectuur:

  • ConfigViewModel: Beheert de live verbindingsstatus, hartslaglogica en IP-detectie.
  • FlashingController: Coördineert firmware-downloads, lokale binaire patching en het XH-over-HTTP uploadproces.

ElrsMappings.domains900 koppelt de 900 MHz reguliere domeinindex die in de API wordt gebruikt aan het menselijk leesbare label:

IDLabelBeschrijving
0AU915Australië/Nieuw-Zeeland 915MHz
1FCC915Noord-Amerikaans 915MHz
2EU868Europees 868MHz
3IN866Indiaas 866MHz
4AU433Australië 433MHz
5EU433Europees 433MHz
6US433Noord-Amerikaans 433MHz
7US433-WideNoord-Amerikaans Breed 433MHz

Het systeem implementeert een tweeledige persistentie-strategie:

  • SharedPreferences: Gebruikt via PersistenceService voor niet-gevoelige gegevens zoals WiFi SSIDs en algemene app-voorkeuren.
  • FlutterSecureStorage: Gebruikt voor gevoelige gegevens, waaronder bindingszinnen en WiFi-wachtwoorden, wat encryptie op OS-niveau garandeert.