Specyfikacja Techniczna
Architektura – przegląd
Dział zatytułowany „Architektura – przegląd”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.
Warstwa danych
Dział zatytułowany „Warstwa danych”Punkty końcowe API
Dział zatytułowany „Punkty końcowe API”System komunikuje się ze sprzętem za pomocą następujących punktów końcowych HTTP:
| Metoda | Punkt końcowy | Opis |
|---|---|---|
GET | /config | Pobiera bieżącą konfigurację urządzenia w formacie JSON. |
POST | /options.json | Aktualizuje modyfikowalne opcje środowiska uruchomieniowego (WiFi SSID, hasło itp.). |
POST | /config | Aktualizuje podstawowe parametry sprzętowe i mapowania PWM. |
POST | /reboot | Wyzwala reset sprzętu w celu zastosowania zmian. |
Schemat JSON
Dział zatytułowany „Schemat JSON”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} ] }}Zarządzanie stanem
Dział zatytułowany „Zarządzanie stanem”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.
Warstwa mapowania
Dział zatytułowany „Warstwa mapowania”Poniższe tabele definiują mapowanie między identyfikatorami całkowitymi używanymi w API a ich czytelnymi dla człowieka odpowiednikami.
Domeny regulacyjne
Dział zatytułowany „Domeny regulacyjne”| ID | Etykieta | Opis |
|---|---|---|
| 0 | AU915 | Australia/Nowa Zelandia 915MHz |
| 1 | FCC915 | Ameryka Północna 915MHz |
| 2 | EU868 | Europa 868MHz |
| 3 | IN866 | Indie 866MHz |
| 4 | AU433 | Australia 433MHz |
| 5 | EU433 | Europa 433MHz |
| 6 | US433 | Ameryka Północna 433MHz |
| 7 | US433-Wide | Ameryka Północna Szeroka 433MHz |
Zaawansowane mapowania
Dział zatytułowany „Zaawansowane mapowania”VBind (Przechowywanie wiązań)
Dział zatytułowany „VBind (Przechowywanie wiązań)”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.
Warstwa persystencji
Dział zatytułowany „Warstwa persystencji”System implementuje dwuwarstwową strategię persystencji:
SharedPreferences: Wykorzystywane za pośrednictwemPersistenceServicedo 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.