Техническая спецификация
Обзор архитектуры
Заголовок раздела «Обзор архитектуры»Приложение создано с использованием Flutter и задействует фреймворк управления состоянием Riverpod. Оно взаимодействует с оборудованием ELRS через RESTful API, предоставляемый встроенным модулем WiFi устройства, обеспечивая связь с низкой задержкой и синхронизацию состояния в реальном времени.
Слой данных
Заголовок раздела «Слой данных»Конечные точки API
Заголовок раздела «Конечные точки API»Система взаимодействует с оборудованием, используя следующие HTTP-конечные точки:
| Метод | Конечная точка | Описание |
|---|---|---|
GET | /config | Получает текущую конфигурацию устройства в формате JSON. |
POST | /options.json | Обновляет изменяемые параметры времени выполнения (SSID, Password и т.д.). |
POST | /config | Обновляет основные аппаратные параметры и сопоставления PWM. |
POST | /reboot | Запускает аппаратный сброс для применения изменений. |
JSON-схема
Заголовок раздела «JSON-схема»Модель 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 | Метка | Описание |
|---|---|---|
| 0 | AU915 | Австралия/Новая Зеландия 915 МГц |
| 1 | FCC915 | Северная Америка 915 МГц |
| 2 | EU868 | Европа 868 МГц |
| 3 | IN866 | Индия 866 МГц |
| 4 | AU433 | Австралия 433 МГц |
| 5 | EU433 | Европа 433 МГц |
| 6 | US433 | Северная Америка 433 МГц |
| 7 | US433-Wide | Северная Америка Широкополосная 433 МГц |
Расширенные сопоставления
Заголовок раздела «Расширенные сопоставления»VBind (хранение привязки)
Заголовок раздела «VBind (хранение привязки)»Определяет, как фраза привязки хранится на устройстве.
- 0: Persistent (постоянное): Сохраняется во флэш-памяти (стандарт).
- 1: Volatile (временное): Удаляется при выключении питания.
- 2: Returnable (возвращаемое): Используется для арендованного оборудования.
- 3: Administered (управляемое): Используется в средах с несколькими пилотами.
Слой постоянства
Заголовок раздела «Слой постоянства»Система реализует двухслойную стратегию постоянства:
SharedPreferences: Используется черезPersistenceServiceдля нечувствительных данных, таких как WiFi SSID и общие настройки приложения.FlutterSecureStorage: Используется для чувствительных данных, включая Binding Phrases и WiFi Passwords, обеспечивая шифрование на уровне OS.