Especificación Técnica
Visión General de la Arquitectura
Sección titulada «Visión General de la Arquitectura»La aplicación está construida usando Flutter y aprovecha el marco de gestión de estado Riverpod. Interactúa con el hardware de ELRS a través de una API RESTful expuesta por el módulo WiFi integrado del dispositivo, asegurando una comunicación de baja latencia y una sincronización de estado en tiempo real.
Capa de Datos
Sección titulada «Capa de Datos»Puntos de Conexión de la API
Sección titulada «Puntos de Conexión de la API»El sistema se comunica con el hardware utilizando los siguientes puntos de conexión HTTP:
| Método | Endpoint | Descripción |
|---|---|---|
GET | /config | Recupera la configuración actual del dispositivo en formato JSON. |
POST | /options.json | Actualiza las opciones de tiempo de ejecución modificables (SSID, Contraseña, etc.). |
POST | /config | Actualiza los parámetros de hardware principales y las asignaciones PWM. |
POST | /reboot | Activa un reinicio de hardware para aplicar los cambios. |
Esquema JSON
Sección titulada «Esquema JSON»El modelo RuntimeConfig aprovecha la estructura de ELRS 4.x, que separa los parámetros en tres nodos principales:
settings: Identificadores de hardware de solo lectura y cadenas de versión.options: Preferencias de usuario modificables y credenciales de red.config: Configuraciones de hardware de bajo nivel (Protocolos, Arrays PWM).
Ejemplo de estructura 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} ] }}Gestión de Estado
Sección titulada «Gestión de Estado»El sistema emplea una arquitectura reactiva:
ConfigViewModel: Gestiona el estado de conexión en vivo, la lógica de latido (heartbeat) y el descubrimiento de IP.FlashingController: Orquesta las descargas de firmware, la aplicación de parches binarios locales y el proceso de carga XH-over-HTTP.
Capa de Mapeo
Sección titulada «Capa de Mapeo»ElrsMappings.domains900 mapea el índice de dominio regulatorio de 900 MHz utilizado en la API a su etiqueta legible por humanos:
| ID | Etiqueta | Descripción |
|---|---|---|
| 0 | AU915 | Australia/Nueva Zelanda 915MHz |
| 1 | FCC915 | Norteamérica 915MHz |
| 2 | EU868 | Europa 868MHz |
| 3 | IN866 | India 866MHz |
| 4 | AU433 | Australia 433MHz |
| 5 | EU433 | Europa 433MHz |
| 6 | US433 | Norteamérica 433MHz |
| 7 | US433-Wide | Norteamérica Ancho 433MHz |
Capa de Persistencia
Sección titulada «Capa de Persistencia»El sistema implementa una estrategia de persistencia de doble capa:
SharedPreferences: Utilizado a través dePersistenceServicepara datos no sensibles como los WiFi SSIDs y las preferencias generales de la aplicación.FlutterSecureStorage: Utilizado para datos sensibles, incluyendo frases de enlace (Binding Phrases) y contraseñas WiFi, asegurando el cifrado a nivel del sistema operativo.