Przejdź do głównej zawartości

Specyfikacja Techniczna

Zasada projektowania

Aplikacja jest zbudowana przy użyciu Flutter i wykorzystuje framework zarządzania stanem Riverpod. Współdziała ze sprzętem ExpressLRS za pośrednictwem RESTful API 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 bieżącą konfigurację urządzenia w formacie JSON.
POST/options.jsonAktualizuje modyfikowalne opcje środowiska uruchomieniowego (WiFi SSID, hasło itp.).
POST/configAktualizuje podstawowe parametry sprzętowe i mapowania PWM.
POST/rebootWyzwala reset sprzętu w celu zastosowania zmian.

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

  • settings: Identyfikatory sprzętowe i ciągi wersji tylko do odczytu.
  • options: Modyfikowalne preferencje użytkownika i dane uwierzytelniające sieć.
  • config: Niskopoziomowe konfiguracje sprzętowe (Protocols, PWM Arrays).

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 połączenia na żywo, logiką pulsu i wykrywaniem IP.
  • DeviceEditorViewModel: Przechowuje stan roboczy konfiguracji urządzenia, umożliwiając wieloetapowe edycje z końcową logiką „zapisz/anuluj”.
  • FlashingController: Koordynuje pobieranie firmware’u, lokalne łatanie plików binarnych i proces przesyłania XH-over-HTTP.

Poniższe tabele definiują mapowanie między identyfikatorami całkowitymi używanymi w API a ich czytelnymi dla człowieka odpowiednikami.

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

Określa sposób przechowywania frazy wiązania na urządzeniu.

  • 0: Persistent: Zapisane w pamięci flash (standard).
  • 1: Volatile: Usunięte po cyklu zasilania.
  • 2: Returnable: Używane dla sprzętu wypożyczonego.
  • 3: Administered: Używane w środowiskach flotowych z wieloma pilotami.

System implementuje dwuwarstwową strategię persystencji:

  • SharedPreferences: Wykorzystywane za pośrednictwem PersistenceService do danych niepoufnych, takich jak WiFi SSID i ogólne preferencje aplikacji.
  • FlutterSecureStorage: Używane do danych poufnych, w tym fraz wiązania i haseł WiFi, zapewniając szyfrowanie na poziomie systemu operacyjnego.