Hoppa till innehåll

Teknisk specifikation

Designprincip

Applikationen är byggd med Flutter och använder **Riverpod** ramverket för tillståndshantering. Den interagerar med ELRS-hårdvara via ett RESTful API som exponeras av enhetens inbyggda WiFi-modul, vilket säkerställer kommunikation med låg latens och synkronisering av tillstånd i realtid.

Systemet kommunicerar med hårdvaran med följande HTTP-slutpunkter:

MetodSlutpunktBeskrivning
GET/configHämtar aktuell enhetskonfiguration i JSON-format.
POST/options.jsonUppdaterar ändringsbara körtidsalternativ (SSID, Password, etc.).
POST/configUppdaterar kärnhårdvaruparametrar och PWM-mappningar.
POST/rebootUtlöser en hårdvaruåterställning för att tillämpa ändringar.

RuntimeConfig-modellen utnyttjar ELRS 4.x-strukturen, som separerar parametrar i tre primära noder:

  • settings: Skrivskyddade hårdvaruidentifierare och versionssträngar.
  • options: Ändringsbara användarpreferenser och nätverksuppgifter.
  • config: Lågnivå hårdvarukonfigurationer (protokoll, PWM-arrayer).

Exempel på 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}
]
}
}

Systemet använder en reaktiv arkitektur:

  • ConfigViewModel: Hanterar live-anslutningsstatus, heartbeat-logik och IP-upptäckt.
  • FlashingController: Orkestrerar nedladdning av firmware, lokal binär patchning och XH-over-HTTP uppladdningsprocessen.

ElrsMappings.domains900 mappar det 900 MHz regleringsdomänindex som används i API:et till dess mänskligt läsbara etikett:

IDEtikettBeskrivning
0AU915Australien/Nya Zeeland 915MHz
1FCC915Nordamerika 915MHz
2EU868Europa 868MHz
3IN866Indien 866MHz
4AU433Australien 433MHz
5EU433Europa 433MHz
6US433Nordamerika 433MHz
7US433-WideNordamerika Bred 433MHz

Systemet implementerar en strategi för beständighet i två lager:

  • SharedPreferences: Används via PersistenceService för icke-känslig data som WiFi SSID och allmänna appinställningar.
  • FlutterSecureStorage: Används för känslig data, inklusive bindningsfraser och WiFi-lösenord, vilket säkerställer kryptering på OS-nivå.