Especificação Técnica
Visão Geral da Arquitetura
Seção intitulada “Visão Geral da Arquitetura”O aplicativo é construído usando Flutter e aproveita o framework de gerenciamento de estado **Riverpod**. Ele interage com o hardware ELRS via uma API RESTful exposta pelo módulo WiFi integrado do dispositivo, garantindo comunicação de baixa latência e sincronização de estado em tempo real.
Camada de Dados
Seção intitulada “Camada de Dados”Endpoints da API
Seção intitulada “Endpoints da API”O sistema se comunica com o hardware usando os seguintes endpoints HTTP:
| Método | Endpoint | Descrição |
|---|---|---|
GET | /config | Recupera a configuração atual do dispositivo em formato JSON. |
POST | /options.json | Atualiza opções de tempo de execução modificáveis (SSID, Password, etc.). |
POST | /config | Atualiza parâmetros de hardware essenciais e mapeamentos PWM. |
POST | /reboot | Aciona um reset de hardware para aplicar as mudanças. |
Esquema JSON
Seção intitulada “Esquema JSON”O modelo RuntimeConfig aproveita a estrutura ExpressLRS 4.x, que separa os parâmetros em três nós principais:
settings: Identificadores de hardware e strings de versão somente leitura.options: Preferências do usuário modificáveis e credenciais de rede.config: Configurações de hardware de baixo nível (Protocolos, Arrays PWM).
Exemplo de estrutura 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} ] }}Gerenciamento de Estado
Seção intitulada “Gerenciamento de Estado”O sistema emprega uma arquitetura reativa:
ConfigViewModel: Gerencia o estado da conexão em tempo real, lógica de heartbeat e descoberta de IP.FlashingController: Orquestra downloads de firmware, patch binário local e o processo de upload XH-over-HTTP.
Camada de Mapeamento
Seção intitulada “Camada de Mapeamento”ElrsMappings.domains900 mapeia o índice do domínio regulatório de 900 MHz usado na API para seu rótulo legível por humanos:
| ID | Rótulo | Descrição |
|---|---|---|
| 0 | AU915 | Austrália/Nova Zelândia 915MHz |
| 1 | FCC915 | América do Norte 915MHz |
| 2 | EU868 | Europeu 868MHz |
| 3 | IN866 | Indiano 866MHz |
| 4 | AU433 | Austrália 433MHz |
| 5 | EU433 | Europeu 433MHz |
| 6 | US433 | América do Norte 433MHz |
| 7 | US433-Wide | América do Norte Ampla 433MHz |
Camada de Persistência
Seção intitulada “Camada de Persistência”O sistema implementa uma estratégia de persistência de duas camadas:
SharedPreferences: Utilizado viaPersistenceServicepara dados não sensíveis, como SSIDs WiFi e preferências gerais do aplicativo.FlutterSecureStorage: Usado para dados sensíveis, incluindo Binding Phrases e Senhas WiFi, garantindo criptografia no nível do sistema operacional.