Specifiche Tecniche
Panoramica dell’Architettura
Sezione intitolata “Panoramica dell’Architettura”L'applicazione è sviluppata utilizzando Flutter e sfrutta il framework di gestione dello stato Riverpod. Interagisce con l'hardware ELRS tramite un'API RESTful esposta dal modulo WiFi integrato nel dispositivo, garantendo comunicazioni a bassa latenza e sincronizzazione dello stato in tempo reale.
Livello Dati
Sezione intitolata “Livello Dati”Endpoint API
Sezione intitolata “Endpoint API”Il sistema comunica con l’hardware utilizzando i seguenti endpoint HTTP:
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | /config | Recupera la configurazione corrente del dispositivo in formato JSON. |
POST | /options.json | Aggiorna le opzioni di runtime modificabili (SSID, Password, ecc.). |
POST | /config | Aggiorna i parametri hardware principali e le mappature PWM. |
POST | /reboot | Attiva un reset hardware per applicare le modifiche. |
JSON Schema
Sezione intitolata “JSON Schema”Il modello RuntimeConfig sfrutta la struttura ELRS 4.x, che separa i parametri in tre nodi principali:
settings: identificatori hardware di sola lettura e stringhe di versione.options: preferenze utente modificabili e credenziali di rete.config: configurazioni hardware di basso livello (Protocols, PWM Arrays).
Esempio di struttura 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} ] }}Gestione dello Stato
Sezione intitolata “Gestione dello Stato”Il sistema impiega un’architettura reattiva:
ConfigViewModel: Gestisce lo stato della connessione in tempo reale, la logica heartbeat e la scoperta IP.DeviceEditorViewModel: Contiene lo stato di bozza della configurazione di un dispositivo, consentendo modifiche a più passaggi con logica finale di “salva/annulla”.FlashingController: Orchestra i download del firmware, il patching binario locale e il processo di caricamento XH-over-HTTP.
Livello di Mappatura
Sezione intitolata “Livello di Mappatura”Le seguenti tabelle definiscono la mappatura tra gli identificatori interi utilizzati nell’API e i loro equivalenti leggibili dall’uomo.
Domini Normativi
Sezione intitolata “Domini Normativi”| ID | Etichetta | Descrizione |
|---|---|---|
| 0 | AU915 | Australia/Nuova Zelanda 915MHz |
| 1 | FCC915 | Nord America 915MHz |
| 2 | EU868 | Europeo 868MHz |
| 3 | IN866 | Indiano 866MHz |
| 4 | AU433 | Australia 433MHz |
| 5 | EU433 | Europeo 433MHz |
| 6 | US433 | Nord America 433MHz |
| 7 | US433-Wide | Nord America Wide 433MHz |
Mappature Avanzate
Sezione intitolata “Mappature Avanzate”VBind (Memorizzazione del Binding)
Sezione intitolata “VBind (Memorizzazione del Binding)”Determina come la binding phrase viene memorizzata sul dispositivo.
- 0: Persistent: Salva nella memoria flash (standard).
- 1: Volatile: Cancellato al ciclo di alimentazione.
- 2: Returnable: Usato per attrezzatura in prestito.
- 3: Administered: Usato in ambienti di flotte multi-pilota.
Livello di Persistenza
Sezione intitolata “Livello di Persistenza”Il sistema implementa una strategia di persistenza a doppio strato:
SharedPreferences: Utilizzato tramitePersistenceServiceper dati non sensibili come i WiFi SSID e le preferenze generali dell’app.FlutterSecureStorage: Utilizzato per dati sensibili, inclusi le Binding Phrases e le WiFi Passwords, garantendo la crittografia a livello di sistema operativo.