Pular para o conteúdo

Especificação Técnica

Princípio de Design

A aplicação é construída usando Flutter e aproveita o framework de gerenciamento de estado Riverpod. Ela interage com o hardware ELRS via uma RESTful API exposta pelo módulo WiFi integrado do dispositivo, garantindo comunicação de baixa latência e sincronização de estado em tempo real.

O sistema se comunica com o hardware usando os seguintes endpoints HTTP:

MétodoEndpointDescrição
GET/configRecupera a configuração atual do dispositivo em formato JSON.
POST/options.jsonAtualiza as opções de tempo de execução modificáveis (SSID, Password, etc.).
POST/configAtualiza os parâmetros essenciais de hardware e os mapeamentos PWM.
POST/rebootAciona uma reinicialização do hardware para aplicar as alterações.

O modelo RuntimeConfig aproveita a estrutura ELRS 4.x, que separa os parâmetros em três nós primários:

  • settings: Identificadores de hardware e strings de versão somente leitura.
  • options: Preferências do usu��rio e credenciais de rede modificáveis.
  • config: Configurações de hardware de baixo nível (Protocols, PWM Arrays).

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

O sistema emprega uma arquitetura reativa:

  • ConfigViewModel: Gerencia o estado da conexão em tempo real, lógica de heartbeat e descoberta de IP.
  • DeviceEditorViewModel: Abriga o estado de rascunho da configuração de um dispositivo, permitindo edições em várias etapas com lógica final de “salvar/cancelar”.
  • FlashingController: Orquestra downloads de firmware, patching binário local e o processo de upload XH-over-HTTP.

As tabelas a seguir definem o mapeamento entre os identificadores inteiros usados na API e seus equivalentes legíveis por humanos.

IDRótuloDescrição
0AU915Austrália/Nova Zelândia 915MHz
1FCC915América do Norte 915MHz
2EU868Europa 868MHz
3IN866Índia 866MHz
4AU433Austrália 433MHz
5EU433Europa 433MHz
6US433América do Norte 433MHz
7US433-WideAmérica do Norte Largo 433MHz

Determina como a frase de ligação é armazenada no dispositivo.

  • 0: Persistente: Salva na memória flash (padrão).
  • 1: Volátil: Limpada ao desligar e ligar.
  • 2: Retornável: Usado para equipamentos emprestados.
  • 3: Administrado: Usado em ambientes de frota multi-piloto.

O sistema implementa uma estratégia de persistência de camada dupla:

  • SharedPreferences: Utilizado via PersistenceService para dados não sensíveis, como WiFi SSIDs e preferências gerais do aplicativo.
  • FlutterSecureStorage: Usado para dados sensíveis, incluindo Binding Phrases e WiFi Passwords, garantindo criptografia no nível do OS.