Przejdź do głównej zawartości

Specyfikacja Techniczna

Zasada Projektowania

Aplikacja została zbudowana przy użyciu Fluttera i wykorzystuje framework zarządzania stanem Riverpod. Komunikuje się ze sprzętem ELRS za pośrednictwem API RESTful udostępnianego przez wbudowany moduł WiFi urządzenia, zapewniając niskie opóźnienia komunikacji i synchronizację stanu w czasie rzeczywistym.

System komunikuje się ze sprzętem za pomocą następujących punktów końcowych HTTP:

MetodaPunkt KońcowyOpis
GET/configPobiera aktualną konfigurację urządzenia w formacie JSON.
POST/options.jsonAktualizuje modyfikowalne opcje wykonawcze (SSID, Hasło itp.).
POST/configAktualizuje podstawowe parametry sprzętowe i mapowania PWM.
POST/rebootWyzwala reset sprzętowy w celu zastosowania zmian.

Model RuntimeConfig wykorzystuje strukturę ELRS 4.x, która rozdziela parametry na trzy główne węzły:

  • settings: Identyfikatory sprzętowe tylko do odczytu i łańcuchy wersji.
  • options: Modyfikowalne preferencje użytkownika i dane uwierzytelniające sieciowe.
  • config: Niskopoziomowe konfiguracje sprzętowe (Protokoły, Tablice PWM).

Przykładowa struktura JSON:

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

System wykorzystuje architekturę reaktywną:

  • ConfigViewModel: Zarządza stanem aktywnego połączenia, logiką sygnału życia (heartbeat) i wykrywaniem IP.
  • FlashingController: Koordynuje pobieranie firmware’u, lokalne łatanie binarne i proces przesyłania XH-over-HTTP.

ElrsMappings.domains900 mapuje indeks domeny regulacyjnej 900 MHz używany w API do jej czytelnej dla człowieka etykiety:

IDEtykietaOpis
0AU915Australia/Nowa Zelandia 915MHz
1FCC915Ameryka Północna 915MHz
2EU868Europa 868MHz
3IN866Indie 866MHz
4AU433Australia 433MHz
5EU433Europa 433MHz
6US433Ameryka Północna 433MHz
7US433-WideAmeryka Północna Szeroka 433MHz

System implementuje dwuwarstwową strategię trwałości danych:

  • SharedPreferences: Wykorzystywane za pośrednictwem PersistenceService dla danych niewrażliwych, takich jak WiFi SSID i ogólne preferencje aplikacji.
  • FlutterSecureStorage: Używane dla danych wrażliwych, w tym Fraz Wiązania (Binding Phrases) i Haseł WiFi, zapewniając szyfrowanie na poziomie systemu operacyjnego.