Architettura Tecnica
ELRS Mobile non è solo un web-wrapper; è un’implementazione nativa in Dart della pipeline di compilazione e configurazione di ExpressLRS.
Assemblaggio Firmware Unificato
Invece di affidarsi a un compilatore cloud remoto, l'app costruisce dinamicamente i binari localmente sul tuo dispositivo. Quando si flashano i target ESP32/ESP8285, il FirmwareAssembler esegue una precisa sequenza di modifiche a livello di bit:
Estrae il firmware generico di base dall'archivio firmware.zip in cache.
Rimuove il padding di base cercando la firma del magic byte 0xE9 di ESP.
Estrae pinout target specifici e configurazione di runtime da hardware.json.
Impacchetta direttamente nello stream binario il Nome Prodotto (128b), il Nome Lua (16b), options.json (512b) e hardware.json (2048b).
Comprime il payload finale in uno stream .gz se richiesto dalla piattaforma target (es. ESP8285 legacy).
Logica Periferica
Sezione intitolata “Logica Periferica”Iniettore Dominio Regolatorio
Sezione intitolata “Iniettore Dominio Regolatorio”L’app gestisce con precisione le complesse differenze tra le bande di frequenza. Per i dispositivi a 900MHz/Dual-Band, inietta attivamente il dominio scelto (es. FCC, EU868) nel payload JSON compilato. Per i target standard a 2.4GHz, utilizza un flag booleano per instradare silenziosamente il processo di estrazione alle cartelle del firmware base standard FCC/ o LBT/ europeo durante l’assemblaggio.
Caching e Sincronizzazione Firmware
Sezione intitolata “Caching e Sincronizzazione Firmware”Il flashing offline è reso possibile tramite un robusto sistema di caching locale. Quando un utente scarica una release tramite il Firmware Manager, il FirmwareCacheService recupera il firmware.zip generico e il hardware.zip specifico del dispositivo direttamente dall’Artifactory di ExpressLRS. Questi archivi sono gestiti e archiviati localmente sul dispositivo, garantendo che l’assemblaggio e il flashing possano avvenire istantaneamente sul campo senza alcuna connessione internet attiva.
Binding di Rete Nativo
I sistemi operativi mobili (specialmente Android e iOS) deprioritizzano le connessioni Wi-Fi prive di accesso a internet, instradando silenziosamente il traffico sulla rete cellulare. Questo impedisce alle app standard di raggiungere l'hardware ELRS all'indirizzo 10.0.0.1.
ELRS Mobile risolve questo problema tramite il NativeNetworkService. Quando viene rilevata una connessione hardware, l'app invoca un MethodChannel specifico della piattaforma per associare l'intero processo Flutter all'interfaccia Wi-Fi a livello di kernel del sistema operativo. Ciò garantisce che tutto il traffico HTTP e mDNS venga instradato correttamente all'hardware, indipendentemente dallo stato della rete cellulare.