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

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

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

Приложение создано с использованием 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: Низкоуровневые аппаратные конфигурации (Protocols, PWM Arrays).

Пример 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.
  • DeviceEditorViewModel: Содержит черновик состояния конфигурации устройства, обеспечивая многошаговое редактирование с окончательной логикой “сохранить/отменить”.
  • FlashingController: Организует загрузку прошивки, локальное патчирование бинарных файлов и процесс загрузки XH-over-HTTP.

Следующие таблицы определяют сопоставление между целочисленными идентификаторами, используемыми в API, и их удобочитаемыми эквивалентами.

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

Определяет, как фраза привязки хранится на устройстве.

  • 0: Persistent (постоянное): Сохраняется во флэш-памяти (стандарт).
  • 1: Volatile (временное): Удаляется при выключении питания.
  • 2: Returnable (возвращаемое): Используется для арендованного оборудования.
  • 3: Administered (управляемое): Используется в средах с несколькими пилотами.

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

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