Salta ai contenuti

Specifiche Tecniche

Principio di Progettazione

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.

Il sistema comunica con l’hardware utilizzando i seguenti endpoint HTTP:

MetodoEndpointDescrizione
GET/configRecupera la configurazione corrente del dispositivo in formato JSON.
POST/options.jsonAggiorna le opzioni di runtime modificabili (SSID, Password, ecc.).
POST/configAggiorna i parametri hardware principali e le mappature PWM.
POST/rebootAttiva un reset hardware per applicare le modifiche.

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

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.

Le seguenti tabelle definiscono la mappatura tra gli identificatori interi utilizzati nell’API e i loro equivalenti leggibili dall’uomo.

IDEtichettaDescrizione
0AU915Australia/Nuova Zelanda 915MHz
1FCC915Nord America 915MHz
2EU868Europeo 868MHz
3IN866Indiano 866MHz
4AU433Australia 433MHz
5EU433Europeo 433MHz
6US433Nord America 433MHz
7US433-WideNord America Wide 433MHz

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.

Il sistema implementa una strategia di persistenza a doppio strato:

  • SharedPreferences: Utilizzato tramite PersistenceService per 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.