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 del dispositivo, garantendo una comunicazione a bassa latenza e la 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. |
Schema JSON
Sezione intitolata “Schema JSON”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 (Protocolli, Array PWM).
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 dell’heartbeat e la scoperta IP.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”ElrsMappings.domains900 mappa l’indice del dominio normativo a 900 MHz utilizzato nell’API alla sua etichetta leggibile dall’uomo:
| ID | Etichetta | Descrizione |
|---|---|---|
| 0 | AU915 | Australia/Nuova Zelanda 915MHz |
| 1 | FCC915 | Nord America 915MHz |
| 2 | EU868 | Europa 868MHz |
| 3 | IN866 | India 866MHz |
| 4 | AU433 | Australia 433MHz |
| 5 | EU433 | Europa 433MHz |
| 6 | US433 | Nord America 433MHz |
| 7 | US433-Wide | Nord America Wide 433MHz |
Livello di Persistenza
Sezione intitolata “Livello di Persistenza”Il sistema implementa una strategia di persistenza a doppio livello:
SharedPreferences: Utilizzato tramitePersistenceServiceper dati non sensibili come WiFi SSIDs e preferenze generali dell’app.FlutterSecureStorage: Utilizzato per dati sensibili, inclusi Binding Phrases e WiFi Passwords, garantendo la crittografia a livello di sistema operativo.