Перейти к содержимому

Техническая спецификация

Принцип проектирования

Приложение создано с использованием Flutter и задействует фреймворк управления состоянием Riverpod. Оно взаимодействует с оборудованием ELRS через RESTful API, предоставляемый встроенным модулем WiFi устройства, обеспечивая связь с низкой задержкой и синхронизацию состояния в реальном времени.

Система взаимодействует с оборудованием, используя следующие HTTP конечные точки:

МетодКонечная точкаОписание
GET/configПолучает текущую конфигурацию устройства в формате JSON.
POST/options.jsonОбновляет изменяе��ые параметры выполнения (SSID, Password и т.д.).
POST/configОбновляет основные параметры оборудования и привязки PWM.
POST/rebootЗапускает аппаратный сброс для применения изменений.

Модель RuntimeConfig использует структуру ELRS 4.x, которая разделяет параметры на три основных узла:

  • settings: Идентификаторы оборудования и строки версии только для чтения.
  • options: Изменяемые пользовательские предпочтения и сетевые учетные данные.
  • config: Низкоуровневые конфигурации оборудования (Протоколы, Массивы PWM).

Пример структуры 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}
]
}
}

Система использует реактивную архитектуру:

  • ConfigViewModel: Управляет состоянием живого соединения, логикой пульса и обнаружением IP.
  • FlashingController: Организует загрузку прошивки, локальное двоичное патчирование и процесс загрузки XH-over-HTTP.

ElrsMappings.domains900 сопоставляет индекс регулируемого домена 900 МГц, используемый в API, с его удобочитаемой меткой:

IDМеткаОписание
0AU915Австралия/Новая Зеландия 915 МГц
1FCC915Северная Америка 915 МГц
2EU868Европа 868 МГц
3IN866Индия 866 МГц
4AU433Австралия 433 МГц
5EU433Европа 433 МГц
6US433Северная Америка 433 МГц
7US433-WideСеверная Америка Широкий 433 МГц

Система реализует двухслойную стратегию сохранения данных:

  • SharedPreferences: Используется через PersistenceService для нечувствительных данных, таких как WiFi SSID и общие настройки приложения.
  • FlutterSecureStorage: Используется для чувствительных данных, включая Binding Phrases и WiFi Passwords, обеспечивая шифрование на уровне ОС.