Ir al contenido

Especificación Técnica

Principio de Diseño

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.

El sistema se comunica con el hardware utilizando los siguientes puntos de conexión HTTP:

MétodoEndpointDescripción
GET/configRecupera la configuración actual del dispositivo en formato JSON.
POST/options.jsonActualiza las opciones de tiempo de ejecución modificables (SSID, Contraseña, etc.).
POST/configActualiza los parámetros de hardware principales y las asignaciones PWM.
POST/rebootActiva un reinicio de hardware para aplicar los cambios.

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

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.

ElrsMappings.domains900 mapea el índice de dominio regulatorio de 900 MHz utilizado en la API a su etiqueta legible por humanos:

IDEtiquetaDescripción
0AU915Australia/Nueva Zelanda 915MHz
1FCC915Norteamérica 915MHz
2EU868Europa 868MHz
3IN866India 866MHz
4AU433Australia 433MHz
5EU433Europa 433MHz
6US433Norteamérica 433MHz
7US433-WideNorteamérica Ancho 433MHz

El sistema implementa una estrategia de persistencia de doble capa:

  • SharedPreferences: Utilizado a través de PersistenceService para 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.