INAV Web Serial: обзор, миксер, моторы, серво, PID, рейты, режимы, приёмник, порты, конфигурация, GPS, failsafe, OSD и питание

Обновлено: 2026-08-13 inav MSP Web Serial миксер моторы motor test серво servo PID PID-тюнинг рейты rates expo режимы modes aux arm приёмник receiver rx serialrx sbus crsf каналы полётный контроллер порты ports uart serial baud telemetry blackbox gps ublox sbas спутники фикс координаты features фичи конфигурация ориентация платы board alignment sensor alignment имя аппарата failsafe rxfail потеря связи RTH возврат домой osd видеосистема PAL NTSC HDZERO единицы алармы элементы раскладка питание батарея battery ёмкость capacity напряжение ток current vbat калибровка current sensor датчик тока cli консоль console terminal терминал diff all dump save eeprom история команд led led strip подсветка ws2811 пресеты ходовые огни arm state board-aware справочник плат рекомендации matek speedybee vsw video switch camera switch LED-пад выходы pinio pinio_box user1 user2 user3 user4 программируемые выходы импорт диффа разбор диффа разбивка на пресеты split зоны настроек osd grid osd-сетка osd layout osd_layout парсер view-only зоны scope по умолчанию is_default сетапы setup заморозка freeze снимок snapshot библиотека library мои пресеты мои сетапы калибровка calibration акселерометр accelerometer компас магнитометр compass magnetometer acc calibration mag calibration 6-точечная калибровка six-point calibration оптический поток optical flow opflow opflow_scale opflow calibration armed disarmed mission control mission миссия waypoint вейпойнт путевая точка wp MSP_WP MSP_WP_GETINFO MSP_SET_WP карта маршрута route map RTH jump set poi set heading hold time

INAV Web Serial: обзор, миксер, моторы, серво, PID, рейты, режимы, приёмник, порты, конфигурация, GPS, failsafe, OSD и питание

Инструмент /tools/inav-connect подключается к полётному контроллеру на прошивке
INAV прямо из браузера по USB (Web Serial) и общается с ним по протоколу
MSP. Ничего не устанавливается, никакие данные не уходят на сервер — весь
обмен идёт локально между вашим компьютером и платой (единственное
исключение — сохранение пресетов (см. «Мои пресеты» на вкладках «CLI» и
«Импорт диффа» ниже): это осознанное действие пользователя, полётника оно не
касается).

⚗️ Экспериментально · предальфа. Нужен десктопный Chrome или Edge,
открытый по HTTPS (Firefox, Safari и мобильные Web Serial не поддерживают).
Перед подключением закройте INAV/Betaflight Configurator — они держат COM-порт.

Инструмент реализован clean-room по открытому протоколу MSP (без кода
INAV/Betaflight Configurator): читаются и пишутся только MSP-кадры.

Навигация

Разделы открываются левой вертикальной панелью (иконка + подпись) — так же,
как в INAV Configurator: активный раздел подсвечен акцентной полосой слева. Над
содержимым — шапка инструмента, видимая на любой вкладке. На ноутбучных
ширинах (1366/1440/1536 px) панель НЕ сворачивается в иконки — подпись
остаётся видимой, сжимается только ширина панели и плотность шрифта пункта
(SFHD-88); на мобильных — превращается в горизонтальную прокручиваемую ленту
над содержимым.

На телефоне (≤720 px, AD-1286) плашка-заголовок перестроена: строка «путь»
(Главная / Инструменты / …) уступает место заголовку, сам заголовок занимает
строку целиком и переносится максимум на две (раньше от него оставалось «INA…»),
а кнопка «i» и бейдж «предальфа» уходят на свою строку. Кнопка связи в шапке
на телефоне — обычная кнопка 44×44 в правом верхнем углу шапки, а не полоса во
всю её высоту: шапка на узком экране переносится в несколько рядов, и её высота
больше не растягивает кнопку.

С клавиатуры (AD-982). Панель разделов — это список вкладок, и ведёт себя
как принято в интерфейсах: Tab приводит фокус сразу на текущий раздел (а
не проходит по всем семнадцати пунктам подряд) и следующим нажатием уводит в
содержимое; внутри панели работают ↑ / ↓ (по кругу) и Home / End
(первый / последний пункт). Стрелки только переводят фокус — раздел
открывается Enter или Пробелом. Так сделано намеренно: вход в раздел
останавливает тест моторов и серво и перезапускает живой опрос платы, поэтому
переключаться при простом «пролистывании» панели он не должен. Пункты
«Скоро» стрелки пропускают. Переключатели внутри разделов
(«Акселерометр / Магнитометр», «PID / Рейты», «Выходы / Серво») — тем же
правилом, только горизонтально: ← / →.

Редизайн — app-shell раскладка (AD-1086). Страница приведена к «оболочке»
INAV Configurator: верхняя плашка подключения и сенсоров растянута на всю
ширину
и всегда видна, левое меню разделов фиксировано (само не
скроллится), а скроллится только контент выбранного раздела (свой
вертикальный скролл). Это работает для всех вкладок. Прежний баннер-шапка
(хлебные крошки, вводная «i»-панель, бейдж «предальфа») демотирован в первый
блок скроллящегося контента — app-shell отдаёт максимум места рабочей области,
как в самом Configurator'е.

Редизайн — верхняя шапка (AD-913, SFHD-67, седьмой шаг). Прежняя тонкая
строка статуса стала полноценной шапкой в три зоны, как у INAV Configurator
(палитра/токены — по-прежнему Skyforge, НЕ копия синей INAV):

  • слева — лого и название инструмента, под ним строка версий: версия
    SkyForge, версия прошивки борта (когда прочитана по MSP) и плата (когда
    определена);
  • в центре — живые иконки всех восьми сенсоров (см. ниже), индикатор
    напряжения батареи, и переключатели Control-профиля/Battery-профиля:
    оба читаются вживую из MSP2_INAV_STATUS (тот же кадр, что и сенсоры) и
    применяются на борт сразу при выборе (простая однобайтовая MSP-команда,
    как переключение профиля в самом INAV Configurator; недоступно, пока
    полётник в режиме ARM — прошивка сама отклоняет запись под ARM). Mixer-
    профиль
    показан как «недоступно»: в кадре статуса он идёт СРАЗУ после
    поля переменной длины (зависит от числа режимов, скомпилированных в
    конкретную прошивку) — надёжного способа прочитать его без риска вернуть
    чужие данные в этом срезе нет; чтение/переключение мискер-профиля —
    следующий срез;
  • справа — кнопка связи (см. компактную версию AD-1098 ниже).

Не подключено → сенсоры/батарея/профили показывают нейтральный плейсхолдер
«—», а не пусто-битые/угаданные значения.

Компактный топбар (AD-1098). Фидбэк основателя после AD-1093: верхняя
плашка была слишком высокой. Теперь она вдвое ниже:

  • связь — одна кнопка-переключатель в правом углу, во всю высоту плашки.
    Клик подключает, когда отключено, и отключает, когда подключено — отдельных
    «Подключить»/«Отключить» и текста статуса больше нет. Цвет показывает
    действие по клику
    (AD-1312, как в INAV Configurator): зелёная
    отключено, клик подключит; красная — подключено, клик разорвёт связь;
    жёлтая — переход, кнопка временно заблокирована. До AD-1312 цвет кодировал
    состояние и читался пользователями как инвертированный. Действие
    озвучивается скринридеру
    (aria-label), а подробный статус (в т.ч. ошибки) — во всплывающей
    подсказке кнопки и в журнале вкладки «Обзор»;
  • список датчиков поднят в строку заголовка (на уровень
    «INAV Connect · SkyForge …»), а не отдельной строкой ниже;
  • версии и профили выстроены в одну строку (подпись слева от значения) —
    плашка держится в одну-две строки даже на ноутбуке 1366×768.

Финал редизайна (AD-905, SFHD-54) — меню ПЛОСКОЕ, как в реальном релизе
INAV Configurator 9.0.
Основатель прислал скриншот прод-версии
Configurator: там 24 пункта подряд, БЕЗ групп-заголовков, и «Calibration»
ЕДИНЫЙ пункт (компас — сабтаб внутри него, не отдельная вкладка). Срезы 1-2
ниже (грyппировка по 7 секциям + отдельный «Магнитометр») ориентировались на
dev-ветку INAV и разошлись с прод-версией — эта правка возвращает панель к
плоскому виду. Описание среза 1/2 ниже оставлено как история решения; текущий
вид панели — плоский список в порядке INAV 9.0:

Status, Calibration, Mixer, Outputs, Ports, Configuration, Failsafe, Tuning,
Advanced Tuning, Programming, JavaScript Programming, Receiver, Modes,
Adjustments, GPS, Alignment Tool, Mission Control, OSD, LED Strip,
Sensors, Tethered Logging, Blackbox, CLI, Search24 пункта,
где курсивом отмечены заглушки «скоро»: реальные разделы INAV 9.0, у
которых пока нет реализации в Skyforge (некликабельны, приглушены, тултип
«Coming soon» — для полного визуального сходства со скриншотом основателя,
без имитации функциональности). Внизу панели, под тонкой разделительной
чертой
— два пункта, которых у самого INAV Configurator нет вовсе:
Импорт диффа и Библиотека (наша ценность, не выпилены).

«Магнитометр» (компас) слит СЮДА, сабтабом внутри «Калибровки» (см. §
«Вкладка «Калибровка»» ниже, было отдельным пунктом среза 2). «Серво»
(конфигурация серв) слито сабтабом внутри «Выходов» (см. § «Вкладка
«Выходы»» ниже — в INAV 9.0 отдельного пункта Servo(s) в левом меню тоже
нет). Ярлыки реальных вкладок приведены к именам INAV Configurator (Status,
Mixer, Outputs, Ports, Configuration, Tuning, Advanced Tuning и т.д. — было
«Обзор», «Миксер / Моторы», «PID-тюнинг» и т.п.). Цвета/токены — по-прежнему
Skyforge, палитра самого INAV НЕ копируется.

Mission Control — слайс 1 (AD-944). Была последней из 9 заглушек «скоро»
в этом списке; теперь читает и показывает миссию, сохранённую на полётнике
(список вейпойнтов + карта маршрута) — ТОЛЬКО чтение, см. § «Вкладка
«Mission Control»» ниже. Редактирование и запись вейпойнтов
(MSP_SET_WP) — следующий срез.

Компактная панель + «?»-подсказки (AD-1043, SFHD-84). Фидбэк основателя:
левое меню было слишком высоким, а правые панели — перегружены длинными
поясняющими абзацами. Правка: (а) высота каждого пункта левой панели
уменьшена примерно вдвое (меньше вертикальный padding и иконка); список из
24+2 пунктов стал заметно компактнее, хотя на невысоком экране страница
по-прежнему может прокручиваться — список принципиально длинный (26
пунктов), а не подгоняется под конкретную высоту экрана; (б) на вкладках
«Миксер» и «Выходы» длинные поясняющие абзацы под заголовками карточек
свёрнуты в компактный значок «?» рядом с заголовком — текст никуда не
делся, он целиком во всплывающей подсказке (наведение/фокус). Остальные
вкладки со схожими длинными абзацами (PID/Рейты, Режимы, Приёмник, Порты,
Конфигурация и др.) пока не тронуты — кандидат на тот же паттерн будущим
срезом; предупреждения об опасности (motor test, ARM, failsafe и т.п.)
сознательно оставлены видимыми всегда, не свёрнуты в подсказку.

Вводный абзац → кнопка «i» (AD-1053, SFHD-84). Продолжение уточнения
основателя по AD-1043: длинный вводный абзац под заголовком страницы (полное
перечисление всех вкладок) убран из потока — вместо него компактная кнопка
«i» рядом с заголовком. В отличие от значков «?» выше (наведение/фокус —
текст короткий, без разметки), этот текст длинный и несёт разметку
(<code>/<strong>/кавычки) — нативная браузерная подсказка обрезала бы его
и потеряла форматирование, поэтому кнопка открывает панель по клику
(повторный клик, Esc или клик вне панели — закрывают). Сам текст не
сокращён, перенесён дословно.

Начиная со среза 1 редизайна (AD-837, SFHD-54) пункты панели были сгруппированы
по разделам
(история решения, замена — см. врезку выше) — состав и порядок
групп повторял структуру меню dev-ветки INAV Configurator (цвета и токены —
по-прежнему Skyforge, палитра самого INAV Configurator не копируется):

  1. Настройка и конфигурация — Обзор, Калибровка, Магнитометр, Конфигурация,
    Порты.
  2. Управление полётом — Миксер / Моторы, Выходы, Приёмник, Режимы / Aux,
    Failsafe.
  3. Тюнинг — PID-тюнинг, Расширенные («Рейты / Expo» — САБТАБ внутри
    «PID-тюнинга», см. срез 5 ниже, а не отдельный пункт этой группы).
  4. Навигация — GPS.
  5. Сенсоры и периферия — OSD, LED / подсветка, Серво.
  6. Инструменты — CLI.
  7. Инструменты SkyForge — концевая группа пунктов, которых у самого INAV
    Configurator нет: Импорт диффа, Библиотека.

Это была перегруппировка только левой панели — состав групп/порядок пунктов
менялся, а не место конкретного пункта в этом списке. Идентификаторы разделов,
переключение вкладок и вся логика на них — без изменений (и не поменялись
финальной правкой AD-905 тоже: id/aria-controls прежние, поменялся только
DOM-порядок и разметка).

Срез 2 (AD-837, SFHD-54) разделил единый пункт «Калибровка» на два — «Калибровка»
(акселерометр) и «Магнитометр» (компас) — как в dev-ветке INAV Configurator, где
эти два раздела были разными. AD-905 это решение отменил: реальный релиз 9.0
несёт единый пункт «Calibration», «Магнитометр» вернулся сабтабом (см. §
«Вкладка «Калибровка»» ниже). MSP-логика калибровки компаса не менялась —
переехала только разметка.

Срез 3 (AD-837, SFHD-54) привёл содержимое двух вкладок к структуре INAV
Configurator:

  • пункт «Питание / Батарея» убран из группы «Сенсоры и периферия» (была
    там четвёртым пунктом, теперь в группе три: OSD, LED / подсветка, Серво) —
    содержимое (ёмкость/пороги/источники/калибровка + живое состояние батареи)
    переехало внутрь вкладки «Конфигурация» отдельной секцией, как в INAV
    Configurator, где Battery — часть Configuration, а не отдельный
    top-level раздел (см. § «Вкладка «Конфигурация»» ниже);
  • наглядная схема ориентации платы (AD-834, SFHD-59) переехала из
    «Конфигурации» на «Обзор», который теперь работает как Setup-дашборд —
    как в INAV Configurator, где эта визуализация живёт на Setup, рядом со
    статусом связи и сенсоров (см. § «Вкладка «Обзор»» ниже). Редактируемые
    поля ориентации (крен/тангаж/рыскание, выравнивание компаса/opflow)
    остались на «Конфигурации» — переехала только картинка.

MSP-логика чтения/записи ни батареи, ни ориентации платы не менялась —
только расположение в разметке.

Срез 4 (AD-837, SFHD-54) привёл Mixer/Outputs/Серво к составу INAV
Configurator (там Mixer несёт и motor-, и servo-миксер; Outputs — маппинг
протоколов/пинов + motor test + тест хода серво вместе):

  • серво-миксер (smix) консолидирован на «Миксер» — карточка «Правила
    серво-миксера» на «Серво» была ДУБЛЕМ (AD-855 уже показывал те же данные на
    обеих вкладках) и убрана целиком; единственный источник показа smix теперь
    «Миксер» (см. § «Вкладка «Миксер»» ниже);
  • motor test и тест хода серво консолидированы на «Выходы» — вместе с
    картой «Выходы на моторы (маппинг)» (тоже переехала с «Миксера») это даёт
    единую вкладку «Outputs», как в INAV Configurator: протоколы/пины + оба
    теста в одном месте (см. § «Вкладка «Выходы»» ниже);
  • пункт «Серво» на этом срезе ещё НЕ убран — у него оставался уникальный
    контент (конфигурация серв: endpoints/центр/rate/направление), которого нет
    ни на «Миксере», ни на «Выходах» — по аналогии с отдельной вкладкой «Servos»
    в dev-версии INAV Configurator. AD-905 (финал редизайна) это решение
    отменил
    : реальный релиз 9.0 не несёт отдельного пункта Servo(s) в левом
    меню вовсе (серво — часть Outputs/Mixer) — карточка конфигурации серв стала
    сабтабом «Servo configuration» внутри «Выходов» (см. § «Вкладка «Выходы»»
    ниже), пункт «Серво» левого меню убран.

MSP-механика (mixer/servo/motor test — clean-room, iNavFlight/inav) не
менялась, только расположение в разметке. Единственное функциональное
изменение — safety-стоп при уходе со вкладки (applyTab(),
web/static/js/tools/inav_msp.js): раньше motor test/тест хода серво гасли
при уходе с 'mixer'/'servo', теперь — при уходе с 'outputs' (иначе уход с
«Выходов» на «Миксер»/«Серво» молча оставил бы активный тест).

Обновлено в AD-1545 (SFHD-97). Пока сабпанель «Выходов» была одна,
переключение сабтаба безопасности не касалось: спрятать работающий тест, не
уходя со вкладки, было нельзя. После разбиения на «Конфигурацию | Моторы |
Серво» такой способ появился, поэтому safety-стоп теперь стоит и на
переключении сабтаба (showOutputsSubtab()outputsSubtabStops()) — он
ДОБАВЛЕН к стопу уровня вкладки, а не заменяет его.

Срез 5 (AD-837, SFHD-54) убрал «Рейты / Expo» из левого меню — как в INAV
Configurator, где Rates & Expo не отдельный top-level раздел, а сабтаб
внутри «PID-тюнинга»
:

  • вкладка «PID-тюнинг» теперь несёт переключатель «PID» | «Рейты & Expo»
    прямо под заголовком (тот же паттерн горизонтальных под-вкладок, что уже
    используется на страницах «Компоненты»/«Модели»/«События» — новый CSS
    под это не заводили);
  • содержимое (интро, предупреждение «не менять в полёте», таблица рейтов и
    поля expo/throttle/TPA) переехало внутрь «PID-тюнинга» без изменений —
    переключение сабтаба не читает и не пишет ничего на полётнике, это чистый
    показ/скрытие уже отрисованного содержимого;
  • MSP-логика PID и рейтов (чтение/запись/дефолты, автоматическое чтение обоих
    блоков сразу после подключения) не менялась — переехала только разметка.

На срезе 5 группа «Тюнинг» левого меню несла 2 пункта вместо 3 (PID-тюнинг,
Расширенные) — сама группировка позже убрана AD-905 (см. врезку в начале
раздела), но состав реальных вкладок (без «Рейты / Expo» top-level) не
изменился.

В центре шапки — ряд иконок сенсоров (AD-832/AD-835, доработан иконками
AD-913): восемь пиктограмм GYRO/ACC/MAG/BARO/GPS/FLOW/SONAR/SPEED,
как в шапке INAV Configurator, но в цветах Skyforge. Активный сенсор подсвечен
зелёным, обнаруженный отсутствующим — приглушён; до подключения (или пока
полётник не ответил на статус) все пиктограммы в нейтральном состоянии «не
знаем». Наведение показывает всплывающую подсказку с полным названием сенсора
и его текущим статусом. Метки под иконками — технические латинские сокращения
(как Roll/Pitch/Yaw на вкладке «PID-тюнинг») и не переводятся ни в одной
локали. Источник данных — тот же best-effort MSP2_INAV_STATUS, что и поле
«Сенсоры (обнаружены)» на вкладке «Обзор» (см. § «Живые MSP-сигналы» ниже).
Ряд виден на любой вкладке и не имеет ручного тумблера, поэтому опрос стартует
автоматически сразу по подключению и держится весь сеанс связи (AD-835,
SFHD-57) — гасится на отключении или сворачивании вкладки браузера и
резюмируется сам при возврате в окно, если связь ещё жива.

Обновление вкладки при входе (AD-1329, SFHD-96)

Нажимать «Прочитать …» на каждой вкладке больше не нужно: при переходе на
вкладку инструмент сам перечитывает её данные с борта.

Кнопок «Прочитать …» на вкладках больше нет (AD-1389). Кнопка, которую в
нормальной работе не нужно нажимать никогда, занимала первое место в панели
действий и предлагала сделать уже сделанное. Способ повторить остался ровно
там, где он нужен: если чтение не удалось, рядом с текстом ошибки появляется
кнопка «Повторить чтение» — она зовёт то же самое чтение, не уходя со
вкладки и обратно. Удалось — кнопки нет.

Что важно знать про это обновление:

  • Читается только та вкладка, на которую вы перешли. Соседние вкладки не
    предзагружаются, никакого фонового опроса не появилось: одно чтение на один
    переход. Повторный клик по уже открытой вкладке чтение не запускает.
  • Поверх несохранённых правок чтение не идёт. Если на вкладке остались
    неотправленные изменения, автоматическое обновление пропускается — иначе
    ответ борта затёр бы ваш ввод. Предупреждение о несохранённых правках
    работает как раньше (см. следующий раздел).
  • Пока идёт первичная вычитка после подключения, переключение вкладок
    чтения не добавляет: connect и так читает все разделы по очереди.
  • Три вкладки обновляются только по кнопке — по существу, а не по забывчивости:
    «Обзор» и так живой (его ведёт постоянный опрос статуса, отдельного снимка у
    него нет); «Mission Control» — чтение миссии не снимок, а закачка точек
    по одной, и оно затёрло бы маршрут, который вы спланировали в браузере;
    «CLI» занимает порт консолью, где MSP-ответов не бывает вовсе. По той же
    причине на вкладке «Выходы» автоматически обновляются конфигурация выходов и
    серво, а «Прочитать выходы» (pinio_box) остаётся ручной: эта кнопка
    уводит борт в CLI на несколько секунд. Это одна из ДВУХ кнопок чтения,
    оставленных на экране осознанно, — вторая «Прочитать миссию».
  • Тесты моторов и хода серво автоматическое чтение не трогает: на вход на
    вкладку они заведомо остановлены, а само чтение ничего не двигает.

Включатели — тумблеры (AD-1389)

Всё, что на экране означает включено/выключено, выглядит одинаково — общим
тумблером Skyforge (тот же, что на вкладке «GPS» с AD-1092): функции портов в
таблице, фичи платы на «Конфигурации», реверс мотора и motorstop на «Миксере»,
запись статистики полётов на «Расширенных», показ элемента OSD. Раньше часть
из них рисовалась обычными галочками — инструмент выглядел иначе, чем остальной
продукт, при том же поведении.

Изменился только вид: что и когда уходит на борт, гейты по ARM, подтверждения и
предупреждения про винты остались прежними. Тумблер по-прежнему обычный
переключатель для клавиатуры и скринридера, а пока борт не подключён — он
серый и недоступен, как и был.

Галочками сознательно остались подтверждения риска — «винты сняты, риск
принимаю», «поверхности свободны», «понимаю, что save перезапишет EEPROM и
перезагрузит борт», — и выбор групп настроек при сохранении пресета из диффа.
Это отметка «я подтверждаю» и «взять вот эти», а не положение прибора: тумблер
на их месте читался бы как ещё одна настройка борта.

Несохранённые изменения (AD-852, SFHD-66)

Если на какой-то вкладке вы отредактировали поля (миксер, серво, PID, рейты,
режимы/aux, приёмник, порты, конфигурация, GPS, failsafe, OSD, питание,
расширенные), но ещё не нажали «Записать…» для этих правок — инструмент
предупреждает, прежде чем дать их потерять:

  • Уход со страницы (закрытие вкладки браузера, переход по ссылке в другой
    раздел Skyforge, обновление страницы, кнопка «назад») — стандартный диалог
    браузера («покинуть страницу?»); текст диалога браузеры игнорируют с 2011
    года (защита от фишинга), но сам диалог появляется.
  • Переключение между вкладками самого инструмента (клик по разделу в
    левой панели) — своё окно с тремя вариантами: «Записать на борт»
    (отправляет несохранённые правки по MSP, как обычная кнопка записи на
    вкладке), «Уйти без сохранения» (правки отбрасываются, предупреждение
    снимается) и «Отмена» (остаться на текущей вкладке).

«Записать на борт» здесь означает то же самое, что кнопка «Записать…» на
каждой вкладке — MSP-команда SET_* уходит в ОЗУ полётника немедленно;
чтобы правки пережили выключение питания, всё ещё нужен отдельный save (см.
предупреждения msgXxxWritten на каждой вкладке и вкладку «CLI»). Это НЕ про
EEPROM — про факт «ушло ли редактирование на борт вообще», отдельно от
долговечности записи.

Отключение от полётника (повторный клик по кнопке связи, когда она красная)
снимает предупреждение по всем вкладкам — писать уже некуда, до нового
подключения и повторного чтения.

Индикатор «Не синхронизировано» (AD-686). Пока хотя бы одна правка не ушла
на борт, в шапке инструмента, слева от кнопки связи, горит жёлтый бейдж
«Не синхронизировано». Раньше о расхождении с бортом сообщали только два
предупреждения выше — то есть уже в момент, когда вы собрались уходить; теперь
состояние видно постоянно. Бейдж и предупреждения питаются одним и тем же
состоянием, поэтому «бейдж погас, а диалог всё равно вылез» невозможно. Гаснет
он, как только правки записаны на борт. Напоминание про долговечность записи
остаётся прежним: SET_* кладёт значения в ОЗУ полётника, а чтобы они пережили
выключение питания, нужен save на вкладке «CLI».

Порт запоминается, связь возвращается сама (AD-686)

  • Разрешение на COM-порт спрашивается один раз. Браузер запоминает, к
    какому порту вы дали доступ этому сайту, и при следующем подключении
    инструмент берёт его молча — системного диалога выбора порта больше нет.
    Диалог возвращается ровно в двух случаях: разрешения ещё нет вовсе, либо
    разрешённых устройств несколько и однозначно опознать полётник нельзя
    (например, рядом разрешён программатор регуляторов). Гадать инструмент не
    станет: открыть чужое устройство и слать в него MSP хуже, чем лишний раз
    спросить.
  • После перезагрузки борта связь поднимается сама. save на вкладке «CLI»
    перезагружает полётник, и он на секунду пропадает с USB-шины. Инструмент
    замечает это по событию браузера (не опросом по таймеру), а когда борт
    возвращается — переподключается и заново вычитывает настройки. Активную
    вкладку он при этом не меняет
    : вы остаётесь там, где работали.
  • Открыть порт сразу после перезагрузки удаётся не всегда — операционная
    система может ещё держать устройство. Инструмент делает несколько попыток
    подряд и, если не вышло, честно пишет об этом в подсказке кнопки связи и в
    журнал: «переподключиться автоматически не удалось, подключитесь вручную».
    Бесконечно он не ждёт и повторять по кругу не будет.
  • Если на экране есть несохранённые правки, инструмент сознательно НЕ
    переподключается сам.
    Подключение запускает вычитку настроек с борта, и она
    перезаписала бы поля, которые вы правили. Вместо этого он сообщает: «борт
    снова на связи, подключитесь вручную, чтобы правки не были затёрты» —
    решение остаётся за вами.
  • Связь, разорванную вами вручную, инструмент сам не восстанавливает — это
    было бы отменой вашего действия.
  • Если ваш браузер не поддерживает Web Serial (Firefox, Safari, мобильные),
    ничего из этого не работает и кнопка связи заблокирована — на странице
    показано, почему и что нужно (десктопный Chrome или Edge по HTTPS).

Видно, что происходит при подключении (AD-1396)

  • Рядом с кнопкой связи показывается текущий шаг: «выберите COM-порт в
    диалоге», «открываю порт (115200)», «порт открыт, опрашиваю по MSP»,
    «переподключаюсь после перезагрузки борта». Эти состояния занимают разное
    время и требуют разных действий от вас, а одним цветом кнопки они не
    различаются.
  • Ошибка видна на экране и не исчезает сама — до следующей попытки
    подключения. Раньше упавшее подключение выглядело просто как «кнопка снова
    позеленела», а причина оставалась в подсказке при наведении.
  • В обычных состояниях (подключено / отключено) шапка не растёт — текст
    показывается только во время перехода и при ошибке. Озвучивание для
    скринридера и запись в журнал внизу вкладки «Обзор» сохранены полностью.

Канал связи выбираете вы: «Кабель» или «По воздуху» (AD-1395)

  • В шапке инструмента, рядом с кнопкой связи, стоит переключатель канала.
    «Кабель» — обычное USB-подключение, «По воздуху» — Bluetooth через
    UART-мост на борту (HM-10/HC-08, встроенный мост SpeedyBee, DIY на ESP32).
    Вариант «По воздуху» появляется только там, где браузер умеет Web Bluetooth
    (десктопные Chrome/Edge, Chrome на Android); если он не умеет, выбора нет и
    проводной путь работает как раньше.
  • Выбор не запоминается между подключениями — после отключения
    переключатель возвращается на «Кабель». Это сознательно: унесли борт на стол
    с проводом — инструмент не должен молча искать Bluetooth.
  • Кнопка «Порт…» показывает диалог выбора порта принудительно, даже если
    разрешение уже выдано. Она нужна, когда открывается не то устройство:
    разрешение переживает перезагрузку страницы, и иначе сменить порт можно было
    бы только через настройки сайта в браузере. У беспроводного канала такой
    кнопки нет — браузер и так спрашивает про устройство каждый раз.
  • Единственный разрешённый порт больше не открывается молча, если он не
    USB.
    Реальный случай: борт, спаренный по Bluetooth, добавляет в систему
    Bluetooth-порт, и он виден наравне с кабельными. Раз он оказывался
    единственным разрешённым, инструмент открывал его — а полётник в это время
    висел на кабеле, и подключение выглядело зависшим. Теперь такой порт молча не
    берётся: показывается диалог выбора.
  • Что по воздуху НЕ делается — видно ДО попытки. Пункты «CLI» и «Blackbox»
    в меню помечаются, внутри вкладок появляется объяснение, а кнопки
    недоступны: консоль (построчная запись, save) и вычитка лога требуют
    провода — обрыв беспроводной связи посреди такой операции оставил бы борт с
    половиной конфигурации либо обрезанный лог. Если операция всё же вызвана,
    инструмент честно отказывает и просит подключить кабель, а не показывает
    зависший прогресс.
  • Мост, который не подтверждает доставку, работает только на чтение.
    У части мостов (в том числе встроенного в SpeedyBee) нет подтверждения
    доставки — потерянный кадр настройки неотличим от применённого. В шапке
    появляется пометка «Только чтение», а запись настроек по такому каналу
    отклоняется с объяснением. Чтение — обзор, датчики, версии, настройки —
    работает полностью.

Вкладка «Обзор» (Setup)

Срез 3 (AD-837, SFHD-54) превратил «Обзор» в полноценный Setup-дашборд
как в INAV Configurator: с этого экрана видно, жив ли аппарат, не заходя
на другие вкладки.

Раскладка (AD-1313, SFHD-90) — две колонки, как в INAV Configurator.
Справа отдельной колонкой идёт живой статус борта: Pre-arming checks,
батарея и питание, GPS — то, ради чего на «Обзор» заходят перед
вылетом, теперь в первом экране. По центру — положение полётника (схема
ориентации осей и живой аттитюд), под ним остальные карточки раздела
(рекомендации по борту, лог MSP; blackbox-хранилище переехало отсюда на свою
вкладку «Blackbox», AD-943). Раньше всё шло одной
колонкой сверху вниз, и до pre-arming приходилось прокручивать. На узком окне
(≤900px) колонки схлопываются в одну — правая уходит вниз, ничего не
пропадает.

Подключение и чтение (только чтение):

  • вариант и версия прошивки, плата, имя аппарата, уникальный UID платы;
  • схема ориентации платы и рамы (см. ниже) — переехала сюда из
    «Конфигурации»;
  • сырой лог MSP-обмена в hex — чтобы видеть, что связь живая.

Нажмите кнопку связи (зелёную, в правом углу верхней плашки), выберите
COM-порт полётника — данные подтянутся автоматически, кнопка станет красной
(клик по ней теперь отключит борт).
Живой статус подключения (плата, прошивка, напряжение батареи) и статус
сенсоров (восемь пилюль GYRO/ACC/MAG/BARO/GPS/FLOW/SONAR/SPEED)
уже показаны в верхней плашке над содержимым (см. § «Навигация» выше) —
это ЕДИНЫЙ источник этих сигналов для любой вкладки, «Обзор» их не дублирует
собственной копией.

Схема ориентации платы

Наглядная схема осей (AD-834, SFHD-59, переехала сюда из «Конфигурации»
срезом 3): пунктирный контур рамы (нос вверху), плата в центре и три
подписанные оси — X · Roll (вперёд, к носу), Y · Pitch (вправо от
носа) и Z · Yaw (вертикальная ось, вниз через плату — от наблюдателя,
если смотреть сверху; это стандартный правый Front-Right-Down борт-фрейм, на
котором строится математика ориентации в прошивках полётников). Схема
статична и показывает референсный случай — плата не повёрнута относительно
рамы (roll = pitch = yaw = 0). Собственный SVG (не ассет из INAV
Configurator — только референс по визуалу, без GPLv3-атрибуции).

AD-1363 — почему схема была чёрно-белой. Оси красились переменными
--c-green/--c-blue/--c-purple из web/static/css/style.css — листа
СТАРОЙ базы сайта, который страница инструмента не подключает. Браузер
отбрасывает такое объявление молча, и fill откатывался на начальное
значение — чёрный: цветовая кодировка осей, ради которой схема и рисовалась,
на тёмной подложке не работала совсем. Теперь цвета осей объявлены
собственными токенами схемы (--inav-axis-x/y/z в
web/static/css/tools/inav_connect.css), а весь класс дефекта сторожит
tests/test_css_token_scope.py.

Если физическая плата установлена боком/вверх ногами/под углом — компенсация
делается числовыми полями на вкладке «Конфигурация» (см. § «Ориентация
платы и сенсоры» ниже); схема на «Обзоре» — только наглядный референс, она не
реагирует на введённые градусы.

Живая ориентация (AD-916)

Рядом со схемой — живой readout углов Roll / Pitch / Heading
(градусы), которые борт репортует прямо сейчас (MSP_ATTITUDE), плюс два
маленьких визуальных индикатора: мини-горизонт (крен/тангаж) и стрелка
компаса (курс). Это не полноценная 3D-модель (в тикете это и не требовалось) —
просто наглядный «пульс» ориентации без переключения на другие вкладки.
Обновляется тем же 1 Гц session-опросом, что и строка сенсоров/пилюли в шапке
(своего таймера не заводит); нет связи или борт не ответил на MSP_ATTITUDE
readout и индикаторы честно показывают «—» / приглушены, не нулевые градусы.

Pre-arming checks (AD-916)

Живой чек-лист причин, которые прошивка учитывает перед разрешением
арминга
— источник тот же MSP2_INAV_STATUS, что и остальной статус борта
(поле armingFlags, уже частично использовалось для гейта motor test/
калибровки, AD-830/AD-848). Каждая строка — один бит armingFlag_e
(ARMING_DISABLED_*) из открытого протокола INAV: уровень борта, калибровка
сенсоров, загрузка CPU, безопасность навигации, калибровка компаса/акселя,
валидность настроек, аппаратные сбои, geozone, failsafe-система, положение
свитча арминга, RC-линк, положение газа, открытые CLI/CMS/OSD-меню, центровка
стиков, автотрим серв, память, ошибки выходов, prearm-свитч, DShot-бипер,
детект посадки — 24 проверки, ровно столько, сколько реально существует в
прошивке (ничего не выдумано сверху).

✓ — проверка пройдена (эта причина СЕЙЧАС не блокирует арминг); ✕ — проверка
провалена (блокирует арминг прямо сейчас); «—» — не подключено, либо старая
прошивка не прислала armingFlags в ответе — честно «не знаем» для КАЖДОЙ
строки, а не молчаливое «всё ок». Это ARMED/WAS_EVER_ARMED в чек-лист не
входят — они уже показаны шапкой (индикатор связи, гейты motor test/
калибровки), это состояния борта, а не «проверки».

Info: батарея / ток / RSSI (AD-916)

Живая телеметрия питания: число банок, напряжение, остаток заряда в %,
расчётная ёмкость аккумулятора, ток потребления, мощность и RSSI (если
прошивка его отдаёт). Источник — MSP2_INAV_ANALOG (актуальная команда для
INAV ≥ 9.1, один кадр несёт всё сразу, включая уже готовый percentage и
RSSI); на более старых прошивках инструмент честно откатывается на legacy
MSP_BATTERY_STATE (те же данные, что показывает блок «Батарея» на вкладке
«Конфигурация», см. § «Батарея» ниже) — тогда остаток %
считается из ёмкости/потреблённых мАч, а RSSI показывает «—» (этот старый
кадр его не несёт). Не подключено — все плитки «—», не 0.

GPS-панель на дашборде (AD-916)

Fix / число спутников / координаты — тот же живой снимок MSP_RAW_GPS, что и
вкладка «GPS» (см. ниже), просто зеркалом прямо на «Обзоре». Живой опрос
стартует сам, пока открыт «Обзор» ИЛИ «GPS» (тот же таймер на двоих — переход
между этими двумя вкладками не мигает стоп/старт). Нет GPS-модуля или ещё нет
фикса — нейтральный placeholder, догадок про координаты нет.

Рекомендации по борту (board-aware, AD-705)

После полного опроса борта появляется ненавязчивый блок «Рекомендации по
борту»
— персональные подсказки под КОНКРЕТНУЮ модель платы (LED-пад,
выделенный видео/камера-свитч, свободный UART под GPS). Пока не подключались
или для платы ничего не нашлось — блок пуст, инструмент честно молчит, а не
гадает.

Модель разрешения возможности — 3 яруса:

  1. живой MSP-сигнал — когда его можно дёшево извлечь из уже читаемых команд
    (для ledPad/vsw конкретной платы сегодня пуст — см. § «Возможности
    платы» ниже; но для «реально обнаруженных сенсоров» живой сигнал ЕСТЬ,
    см. § «Живые MSP-сигналы»);
  2. статический справочник конкретных плат
    (web/static/js/tools/inav_boards.js) — собран по публичным исходникам
    INAV (target-файлы конкретных таргетов), clean-room, каждая запись несёт
    ссылку на источник и дату сверки;
  3. честный null («не знаем») — если платы нет в справочнике и живого
    сигнала тоже нет, инструмент не утверждает ни да, ни нет.

Возможности платы (board-aware)

Раздел объясняет механику подсказок из «Обзора» и третье состояние вкладок
«LED / подсветка» и «Выходы» (см. ниже).

Справочник плат

web/static/js/tools/inav_boards.js — clean-room данные по нескольким
популярным платам (Matek H743, Matek F405-WING/SE, Matek F405-TE, Matek
F722-WING/SE, SpeedyBee F405 WING/V3/V4): выделенный пин видео/камера-свитча
(VSW), пин camera-switch (где есть), физическое наличие LED-пада (WS2811),
наличие SD-карты и известные особенности/предупреждения (например — на
SpeedyBee F405 V4, в отличие от V3, тот же физический вывод по
умолчанию занят под арминг
, а не свободен под видео-свитч; на Matek
F405-WING/SE видео-свитч и обычный UART6 — взаимоисключающие
firmware-варианты, MSP не может отличить, какой из них установлен). Каждая
запись несёт source (ссылка на файл в исходниках INAV) и verified (дату
сверки) — подробности и полный список источников: docs/research/inav-board-capabilities.md.

Плата ищется по имени таргета из MSP_BOARD_INFO (полному или короткому
коду) — так же, как сверка платы/прошивки бэкапа (AD-625/627). Неизвестная
плата → null, справочник не изобретает данные.

Рекомендации-правила

Четыре правила (движок — RECOMMENDATION_RULES/evaluateRecommendations в
inav_msp.js, чистые функции от уже разрешённых флагов, не от сырых байт):

Правило Условие Гейт
LED-пад не используется справочник подтверждает физический LED-пад, а фича LED_STRIP выключена
Есть видео/камера-свитч справочник подтверждает выделенный VSW-пин только platformType = «Самолёт» (конвенция FPV-крыльев — на мультикоптере неприменимо); ведёт на вкладку «Выходы» (AD-704)
Свободный UART под GPS есть аппаратный UART (не USB/softserial) без назначенной функции, а фича GPS выключена
Есть свободные USERx-выходы справочник подтверждает документированные USERx-пины, а прочитанный pinio_box (кнопка «Прочитать выходы») полностью свободен (все 4 слота 255) не срабатывает, пока pinio_box не прочитан — «пока не знаем» ≠ «не назначено»

Живые MSP-сигналы (best-effort)

  • MSP2_INAV_STATUS (0x2000) — маска реально обнаруженных сенсоров
    (акселерометр/баро/компас/GPS/дальномер/optical flow/pitot). Первый снимок —
    сразу после «Расширенных» на вкладке «Обзор»; дальше опрашивается сам, раз в
    секунду, весь сеанс связи (AD-835, SFHD-57 — строка индикаторов видна на
    любой вкладке и не имеет своего тумблера, поэтому не может ждать «входа на
    вкладку», как «Режимы»/«Приёмник»/GPS). Показывается ДВАЖДЫ из одного и
    того же снимка: строкой «Сенсоры (обнаружены)» в карточке «Полётник»
    (список технических токенов — ACC, BARO, …, через запятую; ни одного
    обнаруженного → «ни один датчик не обнаружен»; прошивка не ответила/сбой
    чтения → , честное «не знаем», а НЕ «сенсоров нет») и строкой
    индикаторов сенсоров
    в верхней строке статуса (AD-832, см. § «Навигация»
    выше) — восемь пилюль GYRO/ACC/MAG/BARO/GPS/FLOW/SONAR/SPEED,
    видимых на любой вкладке. GYRO протоколом отдельным битом не кодируется
    (гироскоп считается всегда присутствующим) — пилюля активна, как только
    статус вообще прочитан. Сигнал используется ТОЛЬКО для показа — в 3-ярусное
    разрешение ledPad/vsw (и в правила-рекомендации) он не участвует.
  • AD-848 — тот же MSP2_INAV_STATUS несёт armingFlags (u32 на смещении
    9): бит ARMED — гейт ОБОИХ сабтабов «Калибровки» (Accelerometer и
    Magnetometer — полётник отклоняет команды калибровки под ARM, свой гейт на
    каждом сабтабе, AD-905/было AD-837 слайс 2); бит
    ARMING_DISABLED_SENSORS_CALIBRATING — вспомогательная подсказка «полётник
    сообщает: калибровка сенсоров ещё идёт…» рядом с обратным отсчётом
    калибровки компаса (см. § «Вкладка «Калибровка»» → сабтаб «Magnetometer»).
  • MSP2_INAV_OUTPUT_MAPPING_EXT2 (0x210D, физический LED-пад по
    таймер-слоту) — отложен: байтовая раскладка serialize-функции не
    выведена уверенно из публичных исходников без риска угадывания. Честность
    важнее охвата — до появления проверенного источника ярус 1 для LED-пада
    пуст, разрешение падает на справочник (ярус 2).
  • AD-913 (SFHD-67) — тот же MSP2_INAV_STATUS несёт profile-байт на
    смещении 8 (ДО armingFlags): младшая тетрада — текущий Control-профиль
    (PID/rate, 0..2), старшая — текущий Battery-профиль (0..2). Фиксированное
    смещение — читается всегда, когда в ответе есть 9+ байт, показывается в
    шапке инструмента (см. § «Навигация» выше) с функциональным переключением.
    Mixer-профиль тем же кадром идёт СРАЗУ после armingFlags и поля
    переменной длины (список активных режимов — зависит от прошивки/сборки) —
    фиксированного смещения нет, поэтому в этом срезе он НЕ читается (риск
    вернуть чужой байт на другой сборке); шапка честно показывает «недоступно».

Вкладка «Калибровка»

Калибровка акселерометра как в INAV Configurator (6-точечная), через прямую
MSP-команду-триггер (без пресетов/настроек — только запуск процесса на
борту). Появляется сразу после «Обзора», второй вкладкой.

Вкладка несёт три сабтаба«Accelerometer» (по умолчанию),
«Magnetometer» (компас) и «Optical flow» (оптический поток, AD-1315);
последние два описаны отдельными подразделами ниже — тот же
переключатель .tabs/.tab, что уже используется на «PID-тюнинге» («PID» |
«Рейты & Expo»). Переключение сабтаба чисто визуальное, ничего не перечитывает
и не переписывает.

Калибровка возможна только на разоруженном (disarmed) борте — прошивка
сама отклоняет команду-триггер, пока полётник ARMED
(fc_msp.c: if (!ARMING_FLAG(ARMED)) … else return MSP_RESULT_ERROR).
Кнопка заблокирована, пока живой статус (MSP2_INAV_STATUS, тот же 1 Гц
опрос, что и строка индикаторов сенсоров) подтверждает armed:true; видна
и явная текстовая подсказка. Статус armed ещё не прочитан/старая прошивка
(null) кнопку НЕ блокирует — как и гейт motor test на вкладке «Выходы».

AD-905 (ФИНАЛ редизайна, отменяет AD-837 слайс 2) — основатель прислал
эталон реального INAV Configurator 9.0: там «Calibration» ЕДИНЫЙ пункт
(компас — сабтаб, не отдельная top-level вкладка). Слайс 2 эпика AD-837
(ниже, история решения) ориентировался на dev-ветку INAV и вывел компас
ОТДЕЛЬНЫМ пунктом левого меню — эта правка вернула его сюда сабтабом.
MSP-команды, гейт по ARMED и вся логика калибровки НЕ менялись — только
разметка/навигация.

Акселерометр (6-точечная калибровка)

Команда MSP_ACC_CALIBRATION (205) — без параметров: полётник сам
определяет текущее положение борта по показаниям акселерометра (программе
выбирать положение не нужно). Полная калибровка требует зафиксировать
6 положений — обычно горизонтально, вверх дном и на каждый из 4 боков/
торцов (нос вверх/вниз, левое/правое крыло вниз):

  1. Разместите борт в одном из положений и нажмите «Зафиксировать текущее
    положение»
    — держите борт неподвижно ~2 секунды, пока полётник усредняет
    показания.
  2. Переверните в следующее положение и повторите. Начинать нужно с ровного
    положения — оно сбрасывает прогресс прошлой попытки, если она была
    незавершённой (acceleration.c: accStartCalibration() — сброс всех
    позиций только при старте с «ровно»).
  3. Счётчик «Зафиксировано положений» и 6 индикаторов ниже кнопки честно
    отражают прогресс — читается через MSP_CALIBRATION_DATA (14, байт
    accCalibAxisFlags: бит на каждую из 6 позиций, 0x3F = все зафиксированы).
    Это НЕ таймер-оценка — данные приходят прямо с борта.
  4. По завершении (6/6) полётник сам сохраняет результат в EEPROM
    (saveConfigAndNotify() в прошивке) — отдельная команда save не нужна.
    Если счётчик неожиданно сбросился на 0 после 6/6 — калибровка математически
    не сошлась (борт эту попытку не принял), начните заново с ровного положения.

Сырые данные калибровки

Справочный блок (кнопка «Обновить») — смещение и коэффициент усиления по
осям акселя, как их видит полётник (MSP_CALIBRATION_DATA). Полезно для
проверки на реальном железе — эти данные не редактируются из инструмента.
Компас-часть этого блока — на сабтабе «Magnetometer» (см. ниже).

Выравнивание платы/сенсоров (произвольный поворот в градусах) и «уровень»
— это ОТДЕЛЬНЫЕ MSP-команды (MSP_BOARD_ALIGNMENT/MSP_SENSOR_ALIGNMENT),
они живут на вкладке «Конфигурация» (см. ниже), не здесь.

Сабтаб «Magnetometer» (внутри «Калибровки»)

Калибровка компаса вращением — сабтаб «Калибровки», сразу после
«Accelerometer» (AD-905, ФИНАЛ редизайна: до этой правки жила ОТДЕЛЬНЫМ
пунктом левого меню, AD-837, SFHD-54, слайс 2 — тот срез ориентировался
на dev-ветку INAV; реальный релиз 9.0 несёт «Calibration» единым пунктом,
компас в нём — сабтаб, не отдельная top-level вкладка).

Калибровка возможна только на разоруженном (disarmed) борте — тот же
гейт по ARMED, что и у акселерометра (fc_msp.c). Кнопка заблокирована,
пока живой статус подтверждает armed:true; видна и явная текстовая
подсказка (свой элемент разметки, тот же текст, что на «Калибровке»).

Компас (магнитометр)

Команда MSP_MAG_CALIBRATION (206) — без параметров: запускает на борту
таймер вращения. У протокола нет отдельной команды для точного прогресса
калибровки компаса, поэтому инструмент показывает обратный отсчёт по
умолчанию — 30 секунд
(mag_calibration_time в CLI, диапазон 20–120 с;
если на вашем борте значение изменено — калибровка продолжится и после
локального «0 с», отсюда вспомогательная подсказка «полётник сообщает:
калибровка сенсоров ещё идёт…», см. § «Живые MSP-сигналы» выше).

  1. Уберите борт подальше от металла и работающих моторов.
  2. Нажмите «Начать калибровку компаса» и медленно вращайте аппарат по
    всем трём осям (крен, тангаж, рыскание), пока идёт отсчёт.
  3. По истечении отсчёта прошивка сама сохраняет результат в EEPROM — save
    не требуется.

Сырые данные магнитометра

Справочный блок (своя кнопка «Обновить», та же MSP-команда
MSP_CALIBRATION_DATA) — смещение и коэффициент усиления по осям компаса,
как их видит полётник. Полезно для проверки на реальном железе — эти данные
не редактируются из инструмента.

Сабтаб «Optical flow» (внутри «Калибровки»)

Калибровка датчика оптического потока (AD-1315) — третий сабтаб
«Калибровки», после «Magnetometer». Та же природа, что аксель и компас:
разовая команда-триггер, дальше всё считает прошивка.

Команда MSP2_INAV_OPFLOW_CALIBRATION (0x2032) — без параметров.
Прошивка отклоняет её под ARMED (fc_msp.c: if (!ARMING_FLAG(ARMED)) opflowStartCalibration(); else return MSP_RESULT_ERROR;) — гейт по armed
тот же, что у акселерометра и компаса. Плюс собственный гейт: если живой
статус (MSP2_INAV_STATUS) сообщает, что датчика оптического потока на борту
нет, кнопка заблокирована и видна подсказка — калибровать нечего. Неизвестный
статус (null — не прочитан/старая прошивка) не блокирует ничего, как и везде
в этой туле.

Смысл процедуры: прошивка сопоставляет то, что видит датчик, с показаниями
гироскопа и выводит коэффициент opflow_scale. Моторы при этом не крутятся —
аппарат вращают руками над фактурной поверхностью.

  1. Поставьте аппарат над фактурной поверхностью (узорчатый пол, ковёр) на
    примерно рабочей высоте.
  2. Нажмите «Начать калибровку оптического потока» и подтвердите операцию
    в диалоге. Подтверждение обязательно: успешная калибровка безвозвратно
    перезаписывает текущий opflow_scale, и прошивка сама сохраняет новое
    значение в EEPROM (sensors/opflow.c: saveConfigAndNotify()). Гейт по
    armed проверяется дважды — до диалога и после него: пока окно открыто,
    борт может успеть заармиться, и команда на заармленный аппарат не уходит
    вовсе. Если диалог подтверждения на странице недоступен, калибровка не
    запускается молча — инструмент говорит об этом в статус-строке.
  3. Пока идёт отсчёт (30 секунд — компилируемая константа прошивки
    OPFLOW_CALIBRATE_TIME_MS, из CLI она НЕ настраивается, в отличие от
    mag_calibration_time у компаса), непрерывно вращайте аппарат по крену и
    тангажу — суммарно нужно набрать больше 3600° поворота, то есть около
    десяти полных оборотов.
  4. По истечении отсчёта инструмент перечитывает MSP_CALIBRATION_DATA и
    сравнивает opflow_scale со снимком, снятым перед стартом.

Почему итог определяется сравнением, а не ответом борта. Признака «идёт
калибровка opflow» в протоколе нет: opflow не входит в
areSensorsCalibrating() (fc/fc_core.c), поэтому бит
ARMING_DISABLED_SENSORS_CALIBRATING — который тула использует как
вспомогательную подсказку у компаса — здесь ничего не значит. Признака
«калибровка не сошлась» нет тоже: при недостаточном накопленном повороте
прошивка молча бросает попытку и оставляет прежний коэффициент. Отсюда
три честных исхода в статус-строке: значение изменилось (принято),
значение не изменилось (скорее всего не хватило вращения — ничего не
записано, повторите), данные не перечитались (нажмите «Обновить»).

Блок «Текущее значение» (своя кнопка «Обновить», та же MSP-команда
MSP_CALIBRATION_DATA) показывает opflow_scale, которым полётник
пользуется сейчас. Значение приходит по проводу как u16 = scale × 256
(fc_msp.c), то есть квантовано 1/256 — сравнение снимков точное, без
плавающей погрешности.

Выравнивание самого датчика (opflow_align) — отдельная MSP-команда
MSP_SENSOR_ALIGNMENT, она живёт на вкладке «Конфигурация», не здесь.

Вкладка «Миксер / Моторы»

Появляется после подключения на вкладке «Обзор». Motor test и маппинг
выходов на моторы (MSP_MOTOR) — срезом 4 (AD-837, SFHD-54) переехали на
вкладку «Выходы» (см. § «Вкладка «Выходы»» ниже) — единая вкладка
«Outputs», как в INAV Configurator.

Верхний ряд вкладки (AD-1544, обращение SFHD-93). «Тип миксера и
платформа» и справочник «Пресеты миксера INAV» стоят рядом, по половине
ширины: справочник фильтруется тем самым типом платформы, что выбран слева,
и раньше лежал в самом низу вкладки — то есть НИЖЕ правил mmix/smix, с
которыми его и сравнивают. Редакторы моторного и серво-миксера остались во
всю ширину: у их строк по пять числовых полей плюс кнопка удаления. На узком
окне (≤1100px) ряд схлопывается в одну колонку, справочник уходит под
карточку типа.

Тип миксера и платформа

Читается конфигурация миксера (MSP2_INAV_MIXER): тип платформы
(мультиротор / самолёт / вертолёт / трикоптер / ровер / лодка), применённый
пресет миксера, флаг реверса вращения моторов и motorstop.

  • Записать миксер (MSP2_INAV_SET_MIXER) — применить выбранный тип
    платформы и реверс.

Смена типа платформы/пресета вступает в силу после перезагрузки полётника
(в INAV Configurator или CLI: save). Полный набор правил mmix/smix
показан ниже: и моторный, и серво-микшер редактируются прямо здесь
(AD-1316, срезы 1 и 2); инструмент показывает и переключает тип платформы,
реверс и motorstop.

Моторный миксер (mmix) — AD-855, редактор — AD-1316

Правила смешивания по каждому мотору: коэффициенты throttle / roll / pitch /
yaw
(диапазон −2.0…2.0), читаются командой MSP2_COMMON_MOTOR_MIXER.
Заполняется автоматически тем же чтением миксера — отдельного
чтения не требуется. Показываются только реально используемые моторы
(throttle ≠ 0).

AD-1316 (обращение SFHD-93) — строки редактируются. Коэффициенты правятся
прямо в списке, кнопка «Добавить мотор» занимает первый свободный слот
правилом «только газ» (throttle 1.0, без вклада по осям — безопасная точка
старта), кнопка «Удалить» обнуляет правило своего мотора. Удаление НЕ
сдвигает соседей
: индекс правила — это номер физического выхода, сдвиг
переназначил бы моторы на другие пины.

Кнопка «Записать mmix» отправляет на борт только изменённые правила —
по одному кадру MSP2_COMMON_SET_MOTOR_MIXER на правило (index + четыре
коэффициента, ровно 9 байт) — и всегда спрашивает подтверждение. Запись идёт в
оперативную память: чтобы правила пережили снятие питания, сохраните их в
EEPROM.

⚠️ Микшер задаёт закон управления аппаратом — какой мотор как отвечает на
газ и на оси. Неверное правило означает, что аппарат не полетит или
перевернётся на взлёте. Правьте со снятыми винтами и проверяйте на стенде.

Проверено на синтетике (кадр собирается по раскладке fc_msp.c, включая
кодировку коэффициента (значение + 2.0) × 1000); на реальном борту редактор
не проверялся
— железа для проверки у нас нет.

Серво-миксер (smix) — AD-855, редактор — AD-1316 (срез 2)

Какой вход (стабилизация / RC-канал / флапы / …) управляет каким серво и с
каким rate. Пустые правила (rate = 0) не показываются. До среза 4 (AD-837,
SFHD-54) те же правила дублировались на вкладке «Серво» — с этого среза
«Миксер» их единственный источник показа (как единая вкладка «Микшер» в
INAV Configurator: моторы + сервы + пресеты вместе). Читаются актуальной
командой MSP2_INAV_SERVO_MIXER (апгрейд взамен устаревшей
MSP_SERVO_MIX_RULES, которая используется как fallback для прошивок до
INAV 9.1).

AD-1316 срез 2 — строки редактируются. В каждой строке: целевое серво,
источник (выпадающий список — коды inputSource_e прошивки), rate в
процентах (диапазон −1000…+1000, знак задаёт направление) и speed
ограничение скорости отработки (0 = без ограничения, предел
MAX_SERVO_SPEED = 255). Кнопка «Добавить правило» занимает первый
свободный слот (серво 1 ← Roll (stab.), rate 100 %), кнопка «Удалить»
обнуляет правило своего слота. Удаление НЕ сдвигает соседей — сдвиг
поменял бы порядок применения правил на борту.

Кнопка «Записать smix» отправляет только изменённые правила — по
одному кадру MSP2_INAV_SET_SERVO_MIXER на правило (index + targetChannel +
inputSource + rate(i16) + speed + conditionId, ровно 7 байт) — и всегда
спрашивает подтверждение. Запись идёт в оперативную память; чтобы правила
пережили снятие питания, сохраните их в EEPROM.

⚠️ Правило серво-миксера вступает в силу немедленно — сразу после
записи прошивка зовёт loadCustomServoMixer(), рули поедут без
перезагрузки. Правьте на разоруженном аппарате, на стенде, со снятыми
винтами, и проверяйте направление каждой поверхности после записи.

Два гейта записи, оба видны в интерфейсе:

  • ARM. Прошивка эти команды под ARMED не отклоняет сама (в отличие
    от команд калибровки), поэтому гейт целиком на стороне инструмента: кнопки
    записи обоих миксеров гаснут по факту арминга (тот же 1 Гц опрос статуса,
    что и у motor test), а сама запись проверяет состояние ещё раз после
    закрытия окна подтверждения — за время открытой модалки борт может успеть
    заармиться. Если состояние борта неизвестно (старая прошивка/статус ещё не
    прочитан), запись не блокируется — тот же контракт честной деградации, что
    у motor test и калибровок.
  • Прошивка без MSP2_INAV_SET_SERVO_MIXER. Команда появилась в INAV 9.1
    вместе с MSP2_INAV_SERVO_MIXER. Если правила пришлось читать устаревшей
    MSP_SERVO_MIX_RULES (то есть новой команды на борту нет), редактор
    остаётся только для чтения и честно об этом говорит, вместо кадров, на
    которые борт ответит ошибкой.

Привязка правила к логическому условию — AD-1547 (SFHD-93)

Последнее поле строки — логическое условие (conditionId, Programming
Framework INAV): правило серво-миксера работает, только пока выбранное условие
истинно. До AD-1547 это поле только читалось и записывалось обратно как есть —
выбрать его через интерфейс было нельзя.

Список условий читается с борта и стоит в выпадающем списке своим разбором,
а не голым номером: LC 2: HIGH(ch7, 1700) — то есть «условие 2: канал 7 в
верхнем положении». Условие, включённое кем-то через другое условие-активатор,
показывается со стрелкой: LC 5: AND(ch7, 1700) ← LC 2. Выключенное на борту
условие помечено отдельно — оно остаётся в списке (привязаться к нему можно,
просто прямо сейчас оно не срабатывает).

Читаются условия парой неустаревших команд: сначала маска настроенных
(MSP2_INAV_LOGIC_CONDITIONS_CONFIGURED), затем по одному
(MSP2_INAV_LOGIC_CONDITIONS_SINGLE) — с борта уезжает столько кадров, сколько
условий реально настроено, а не 64 подряд. Для прошивок, где этой пары ещё нет,
остался fallback на пакетную MSP2_INAV_LOGIC_CONDITIONS (на актуальных
прошивках она сама помечена deprecated и отвечает ошибкой).

Что показывается в пункте списка — операция и её операнды, а не полные имена
всех полётных величин: три справочника прошивки (около полусотни «полётных»
величин, режимы полёта, точки маршрута) — это редактор Programming Framework
целиком, отдельная задача. Для узнавания нужного условия в списке хватает
операции и вида операнда.

Прошивка без Programming Framework (условия не отдала) — выбор привязки
выключен, и карточка честно говорит почему. Прочитанный conditionId при этом,
как и раньше, сохраняется как есть и уходит обратно тем же значением:
подставить в это поле ноль означало бы молча привязать правило к нулевому
условию. По той же причине «нет условия» — это -1, а не 0.

Самих логических условий тула не редактирует и не записывает — только
читает, чтобы привязка была осмысленной; создаются и правятся они в INAV
Configurator.

Проверено на синтетике (байты кадров по раскладке fc_msp.c, round-trip
чтение↔запись, зажимы диапазонов); на реальном борту редактор не
проверялся
— железа для проверки у нас нет.

Пресеты миксера INAV (справочно) — AD-855 (SFHD-63), фильтр по платформе — AD-870

В оригинальном INAV Configurator раздел «Микшер» умеет подгружать встроенные
пресеты INAV
(Quad X, Tricopter, Flying Wing и т. п.) — это отдельный список
от наших пресетов платформы SkyForge (справочник моделей). Здесь — тот же
справочник, ~23 штатных пресета INAV; выбор показывает эталонные правила
mmix/smix пресета в двух таблицах — для сравнения с тем, что реально прочитано
с борта. На узком окне (≤1200px) эти две таблицы встают одна под другой:
карточка занимает половину ширины (AD-1544).

Выпадающий список отфильтрован по текущему типу платформы из карточки
«Тип миксера и платформа» — с AD-1544 (SFHD-93) она стоит СЛЕВА в том же
верхнем ряду, а не выше по странице (AD-870, фидбэк основателя на AD-855: все ~23
пресета вперемешку путали — самолётные smix-пресеты предлагались на
мультироторе и наоборот). Список пересобирается автоматически при смене типа
платформы — как явной (сразу же, до перезагрузки/save), так и после чтения
миксера с борта. Один dropdown, как в INAV Configurator — просто с актуальной
под платформу подборкой, а не два отдельных диалога. Для типов платформы без
готового набора правил в справочнике (Вертолёт) список честно пуст — с
подсказкой «Для этого типа платформы справочных пресетов нет», а не молча
подсовывает пресеты другого типа.

Выбор пресета НИЧЕГО не пишет на борт. Это справочник (работает даже без
подключения к полётнику) — применение пресета на борт делается в INAV
Configurator. Запись пресета из тулы SkyForge — в разработке (follow-up);
писать 4–12 правил mmix и до 36 правил smix по одному MSP-вызову на правило
рискованно без промежуточного подтверждения, поэтому в этом срезе — только
просмотр. Фильтр по платформе — чисто отображение (клиентский <select>),
не требует связи с бортом и не влияет на реальную смену типа платформы
(та по-прежнему требует перезагрузки полётника, см. выше).

Вкладка «PID-тюнинг»

Появляется после подключения на вкладке «Обзор»; PID-коэффициенты и рейты
читаются автоматически (оба блока сразу, независимо от того, какой сабтаб
сейчас открыт). Как в INAV Configurator, внутри этой вкладки — переключатель
«PID» | «Рейты & Expo» (AD-837, слайс 5, SFHD-54): «PID» открыт по
умолчанию, содержит коэффициенты стабилизации; «Рейты & Expo» описан отдельным
подразделом ниже. Переключение сабтаба — чисто визуальное, ничего не
перечитывает и не переписывает.

На сабтабе «PID» правятся основные оси стабилизации — Roll / Pitch / Yaw
(остальные петли INAV — позиционные, уровень, курс — редактируются в
INAV Configurator).

⚠️ Не меняйте PID в полёте. PID напрямую не крутят моторы, но неверные
коэффициенты делают аппарат неуправляемым и опасным в воздухе. Правьте PID
только на земле, при разоружённом (disarmed) полётнике, и проверяйте
изменения постепенно.

PID-коэффициенты по осям

Таблица коэффициентов по каждой оси (MSP2_PID):

  • P / I / D — пропорциональная, интегральная и дифференциальная составляющие;
  • FF — feed-forward (упреждение).

Все поля — целые в диапазоне 0–255 (значения вне диапазона зажимаются
предохранителем). Кнопка «Записать PID» (MSP2_SET_PID) отправляет
изменения.

При записи в полётник уходит весь PID-банк: инструмент берёт прочитанные
значения всех петель и подменяет только отредактированные оси, поэтому
позиционные/level/heading настройки не затрагиваются.

Запись применяется к полётнику сразу, но в EEPROM сохраняется только
командой save (в INAV Configurator/CLI). До save изменения живут в RAM и
сбрасываются перезагрузкой.

Legacy-команды MSP_PID/MSP_SET_PID удалены из INAV (в 9.1) — PID-тюнинг
идёт только через MSP v2-команды MSP2_PID/MSP2_SET_PID.

Сабтаб «Рейты & Expo» (внутри «PID-тюнинга»)

Открывается кнопкой «Рейты & Expo» на сабтаб-переключателе вкладки
«PID-тюнинг» (до AD-837 слайс 5 это была отдельная вкладка левого меню —
теперь, как в INAV Configurator, сабтаб PID Tuning). Рейты и expo читаются
автоматически ещё на «Обзоре» (одновременно с PID, вне зависимости от того,
какой сабтаб открыт). Правятся оси стабилизации Roll / Pitch / Yaw, RC
expo, throttle mid/expo и TPA — весь блок MSP_RC_TUNING.

⚠️ Не меняйте рейты в полёте. Рейты и expo сами по себе не крутят моторы,
но задают отклик аппарата на стики — резкая смена делает управление
непредсказуемым и опасным в воздухе. Правьте только на земле, при
разоружённом (disarmed) полётнике, и проверяйте изменения постепенно.

Рейты и expo по осям

Таблица рейтов по каждой оси (MSP_RC_TUNING):

  • Рейт — максимальная угловая скорость по оси. INAV хранит одно значение на
    ось (отдельных «RC rate» / «super rate», как в Betaflight, у INAV нет). Рядом
    показывается справочно ≈ °/с (значение × 10 — как в подсказке INAV: рейт 20
    ≈ 200 °/с). Диапазон Roll/Pitch — 4…180, Yaw — 1…180.

Ниже — общие поля:

  • RC expo (Roll/Pitch) и RC expo (Yaw) — сглаживание отклика у центра
    стика (0…100);
  • Throttle mid и Throttle expo — форма кривой газа (0…100);
  • TPA rate — снижение PID на высоком газу (0…200);
  • TPA breakpoint — точка газа (в µs, 1000…2000), с которой TPA включается.

Значения целые; вне диапазона зажимаются предохранителем. Кнопки: Прочитать
рейты
— обновить значения с полётника; Записать рейты (MSP_SET_RC_TUNING)
— отправить изменения.

При записи в полётник уходит весь блок рейтов: инструмент берёт прочитанные
значения и подменяет только отредактированные поля.

Запись применяется к полётнику сразу, но в EEPROM сохраняется только
командой save (в INAV Configurator/CLI). До save изменения живут в RAM и
сбрасываются перезагрузкой.

Legacy-команды MSP_RC_TUNING/MSP_SET_RC_TUNING в INAV 9.x сохранены
(в отличие от выпиленных MSP_PID) — рейты идут через них; байт rcRate8 в
начале кадра — устаревший плейсхолдер (INAV шлёт 100 и не использует).

Вкладка «Режимы / Aux»

Появляется после подключения на вкладке «Обзор»; список режимов и их диапазоны
читаются автоматически. Здесь настраивается активация режимов полёта
(ARM / ANGLE / HORIZON / NAV ALTHOLD / POSHOLD / RTH и т.д.) по диапазонам
aux-каналов приёмника.

⚠️ Осторожно с режимом ARM. ARM — это взвод: при поданном диапазоне и
наличии газа моторы могут запуститься. Меняйте диапазоны режимов только на
земле, при разоружённом (disarmed) полётнике и со снятыми пропеллерами.

Как это работает

Каждый режим активируется, когда значение назначенного aux-канала попадает в
заданный диапазон. Диапазон задаётся в микросекундах (µs) с шагом 25, от
900 до 2100 — так же, как в INAV Configurator.

Имена режимов и их постоянные идентификаторы читаются по MSP_BOXNAMES и
MSP_BOXIDS (эти два списка идут параллельно: имя ↔ id), диапазоны — по
MSP_MODE_RANGES.

Диапазоны

Для каждого диапазона показаны:

  • Режим — выпадающий список режимов, поддержанных полётником;
  • Канал — номер RC-канала приёмника, который управляет режимом (Канал 5…18).
    Внутри INAV это AUX1…AUX14 (auxChannelIndex 0…13 в MSP), но AUX1 у INAV
    всегда соответствует каналу 5 (после сток Roll/Pitch/Yaw/Throttle) —
    инструмент показывает сразу номер канала (AD-833/SFHD-56: понятнее и не
    надо в уме прибавлять 4); старое обозначение AUXn осталось в подсказке
    (наведите курсор на опцию);
  • Мин / Макс, µs — границы срабатывания.

Кнопки и действия:

  • Добавить диапазон — новая строка в первый свободный слот.
  • Авто (в строке) — определить номер канала автоматически шевелением
    переключателя на аппаратуре, без ручного подбора (см. ниже).
  • Записать (в строке) — отправить диапазон в полётник
    (MSP_SET_MODE_RANGE, по одному диапазону на команду).
  • Удалить (в строке) — очистить слот (записывается пустой диапазон, а
    ещё не записанный черновик просто убирается).

Запись применяется к полётнику сразу, но в EEPROM сохраняется только
командой save (в INAV Configurator/CLI). До save изменения живут в RAM и
сбрасываются перезагрузкой. Полный набор режимов и логических условий
редактируется в INAV Configurator — инструмент правит основные диапазоны aux.

Авто-детект канала (AD-836)

Не нужно вспоминать, на какой канал заведён нужный переключатель, — кнопка
«Авто» в строке диапазона определяет его сама, так же, как в INAV
Configurator:

  1. Выберите Режим (например, ARM) и нажмите «Авто» в этой строке.
  2. Инструмент снимает снимок текущих значений всех RC-каналов и начинает
    слушать — кнопка меняется на «Отмена», статус показывает «Слушаю
    переключатели…».
  3. Подвигайте на аппаратуре нужный переключатель (тумблер/3-позиционный
    свитч). Как только значение канала уйдёт от снятого снимка заметно
    (заведомо больше обычного дрожания стика/приёмника), инструмент подставит
    его номер в поле Канал этой строки и завершит прослушивание сам.
  4. Если ошиблись или передумали — нажмите «Отмена» в любой момент.

Пока идёт прослушивание одной строки, кнопки «Авто» остальных строк временно
недоступны (одна активная сессия за раз — иначе непонятно, какой строке отдать
найденный канал). Детект переиспользует тот же живой опрос MSP_RC, что и
подсветка активных режимов ниже (он уже идёт сам — см. следующий раздел; отдельного
опроса/поллинга сервера детект не заводит — то же локальное чтение порта, что и везде
в инструменте).

Живая подсветка активного режима

Опрос текущих значений каналов (MSP_RC) по USB стартует автоматически при
входе на вкладку «Режимы / Aux» (AD-835, SFHD-57) — подсвечивает диапазоны,
активные при текущих положениях переключателей (зелёная точка), и сводит имена
активных режимов в строку «Активны сейчас». Кнопка «Живой опрос активных»
остаётся — ей можно приостановить опрос самому, не выходя со вкладки. Это
локальное чтение порта — на сервер ничего не отправляется; опрос останавливается
сам при уходе со вкладки, сворачивании окна и отключении и резюмируется сам при
возврате в окно (если связь ещё жива и вы всё ещё на этой вкладке).

Вкладка «Приёмник»

Появляется после подключения на вкладке «Обзор»; тип приёмника, serialrx-провайдер
и раскладка каналов читаются автоматически. Здесь настраивается, как полётник
получает управление
от аппаратуры, и виден живой монитор RC-каналов.

Тип приёмника и протокол

Читается конфигурация приёмника (MSP_RX_CONFIG):

  • Тип приёмникаНет / Serial (последовательный: SBUS, CRSF, IBUS и т.д.) /
    MSP (управление по MSP/OSD) / SIM (симулятор);
  • Serialrx-провайдер — протокол последовательного приёмника (актуален только
    при типе Serial): SPEKTRUM, SBUS, SUMD, IBUS, JETIEXBUS, CRSF, FPORT, SRXL2,
    GHST, MAVLINK, FBUS, SBUS2 и др.;
  • Раскладка каналов (MSP_RX_MAP) — порядок сток-каналов AETR (Aileron/
    Roll, Elevator/Pitch, Throttle, Rudder/Yaw). Меняется, если аппаратура шлёт
    каналы в другом порядке (например TAER для части пультов Spektrum/JR);
  • mincheck / maxcheck и rx_min / rx_max — служебные пороги/эндпоинты
    приёмника (показаны справочно, читаются и сохраняются при записи без изменений).

Кнопка «Записать приёмник» отправляет тип приёмника и провайдер
(MSP_SET_RX_CONFIG) и раскладку каналов (MSP_SET_RX_MAP).

При записи конфига в полётник уходит весь блок MSP_RX_CONFIG (24 байта):
инструмент берёт прочитанные значения и подменяет только тип приёмника и
провайдер — служебные пороги/эндпоинты не затрагиваются. Раскладка каналов
проверяется на корректность (должна быть перестановкой букв A/E/R/T); невалидная
раскладка не отправляется.

Смена типа приёмника/провайдера вступает в силу после перезагрузки полётника
(в INAV Configurator/CLI: save). Полная настройка приёмника — в INAV
Configurator; инструмент показывает и переключает основное.

Живой монитор RC-каналов

Опрос текущих значений каналов (MSP_RC) по USB стартует автоматически при
входе на вкладку «Приёмник» (AD-835, SFHD-57) и показывает их барами: первые
четыре — сток Roll / Pitch / Yaw / Throttle, далее каналы по номеру (CH5, CH6…) —
та же нумерация, что на вкладке «Режимы / Aux» (AD-833: раньше здесь был
внутренний AUX-индекс, расходившийся с номером канала на соседней вкладке).
Подвигайте стики и переключатели на аппаратуре — бары должны реагировать (так
проверяется, что приёмник и раскладка настроены верно). Кнопка «Живой опрос
каналов»
остаётся — ей можно приостановить опрос самому.
Это локальное чтение порта — на сервер ничего не отправляется; опрос
останавливается сам при уходе со вкладки, сворачивании окна и отключении и
резюмируется сам при возврате в окно (если связь ещё жива и вы всё ещё на этой
вкладке).

Вкладка «Порты»

Появляется после подключения на вкладке «Обзор»; список портов полётника и
назначенные функции читаются автоматически. Здесь настраивается, какая функция
висит на каком UART/порту
и с какой скоростью (baud).

Конфигурация портов читается по MSP2_COMMON_SERIAL_CONFIG и записывается целым
блоком
по MSP2_COMMON_SET_SERIAL_CONFIG (обе — MSP v2). Legacy-команды
MSP_CF_SERIAL_CONFIG (54) / MSP_SET_CF_SERIAL_CONFIG (55) в INAV помечены
«Deprecated and not used» и обработчиков не имеют — инструмент их не использует.

Функции и скорости

Для каждого порта (UART1…UART8, USB VCP, SOFTSERIAL1/2) — строка с набором
функций и baud-скоростями. Колонки собраны в группы по функции: у шапки два
уровня — сверху группа (MSP, Serial RX, GPS, Телеметрия, Периферия), снизу её
подколонки («Включено»/«Протокол»/«Назначение» и «Скорость»); группы разделены
вертикальной линией, строки чередуются фоном — так строка порта читается
целиком, не сбиваясь на соседнюю.

  • MSP — управление/телеметрия по MSP (INAV Configurator, OSD, эта тула):
    переключатель и скорость;
  • Serial RX — последовательный приёмник (SBUS/CRSF/IBUS и т.д.; сам протокол —
    на вкладке «Приёмник»); только переключатель, своей скорости у него нет;
  • GPS — модуль GPS: переключатель и скорость;
  • Телеметрия — один протокол на порт (LTM, SmartPort, HoTT, MAVLink, iBUS,
    SIM) и его скорость;
  • Периферия — один элемент на порт (Blackbox по serial, ESC-сенсор, VTX
    SmartAudio/Tramp, RunCam, FrSky/DJI OSD, MSP DisplayPort) и его скорость
    (в старых прошивках эта колонка называлась «blackbox baud»).

Скорости — индексы baudRate_e: auto, 12002470000. baud-селект активен
только когда включена соответствующая функция.

Кнопка «Записать порты» отправляет весь блок портов.

При записи в полётник уходит весь блок портов: инструмент берёт прочитанную
конфигурацию и подменяет только отображаемые функции. Функции, которых нет в
таблице (оптический поток, дальномер, гимбал, servo-serial и др.), сохраняются
без изменений
— они не стираются. Прошивка принимает блок, только если его
размер кратен 9 байтам на порт и все идентификаторы портов валидны.

Смена назначения функций/скоростей вступает в силу после перезагрузки
полётника (в INAV Configurator/CLI: save).

Проверка конфликтов

Валидатор подсвечивает явные конфликты назначения (не блокируя запись — полётник
валидирует конфигурацию сам):

  • одна «уникальная» функция (Serial RX, GPS) назначена более чем на один порт;
  • ни на одном порту не включён MSP (можно потерять доступ к конфигуратору);
  • несколько протоколов телеметрии на одном порту (общий TX-выход).

Полная настройка портов — в INAV Configurator; инструмент показывает и переключает
основное.

Вкладка «Конфигурация»

Появляется после подключения на вкладке «Обзор»; фичи, ориентация платы,
выравнивание сенсоров и имя аппарата читаются автоматически. Здесь включаются
базовые возможности полётника и задаётся геометрия установки платы.

Фичи (features)

Включение/выключение возможностей полётника битовой маской
(MSP_FEATURE / MSP_SET_FEATURE, u32). Чекбоксами переключаются реальные
фичи INAV: VBAT (мониторинг напряжения), датчик тока, GPS,
Телеметрия, Blackbox, OSD, LED strip, VTX, AIR MODE,
Разрешить PWM-выходы, Автозапуск/Автотриммирование самолёта и другие.

При записи в полётник уходит вся маска фич: инструмент берёт прочитанную
маску и подменяет только отображаемые биты. Зарезервированные/служебные биты,
которых нет в списке, сохраняются без изменений — они не сбрасываются.

Ориентация платы и сенсоры

Наглядная схема осей (AD-834, SFHD-59) с версии среза 3 (AD-837,
SFHD-54) показывается на вкладке «Обзор» (Setup-дашборд), рядом со
статусом связи — как в INAV Configurator. Здесь, на «Конфигурации»,
остаются только редактируемые числовые поля.

  • Ориентация платы (MSP_BOARD_ALIGNMENT / MSP_SET_BOARD_ALIGNMENT) —
    произвольный поворот платы по осям крен/тангаж/рыскание в градусах (шаг
    0.1°; на проводе — деци-градусы, диапазон −180.0…360.0°). Позволяет учесть
    монтаж платы боком, вверх ногами или под углом без перепайки.
  • Выравнивание компаса (MSP_SENSOR_ALIGNMENT / MSP_SET_SENSOR_ALIGNMENT) —
    ориентация внешнего магнитометра одним из значений sensor_align_e:
    DEFAULT, CW 0/90/180/270° и те же с переворотом (+ flip). Рядом —
    выравнивание оптического потока (opflow), если он используется.

Гироскоп и акселерометр в современном INAV (9.x) по MSP не выравниваются:
их ориентацию задаёт таргет платы и общая ориентация платы выше. Инструмент это
учитывает — соответствующие байты команды сохраняются нетронутыми.

Имя аппарата

Имя борта (MSP_NAME / MSP_SET_NAME) — до 16 печатных латинских символов;
показывается в OSD и конфигураторе. Непечатаемые символы и лишние знаки
отсекаются автоматически.

Кнопка «Записать конфигурацию» отправляет фичи, ориентацию, выравнивание
и имя.

Значения применяются сразу, но в EEPROM сохраняются только по save (в INAV
Configurator/CLI). Смена фич и ориентации платы окончательно вступает в силу
после перезагрузки полётника.

Батарея

Срез 3 (AD-837, SFHD-54) свернул отдельную вкладку «Питание / Батарея» СЮДА,
отдельной секцией — как в INAV Configurator, где настройки батареи живут
внутри Configuration, а не отдельным top-level разделом. Ёмкость
аккумулятора и пороги предупреждений, напряжение отсечки на ячейку, источники
напряжения/тока и калибровка вольтметра и датчика тока. Появляется после
подключения на вкладке «Обзор»; конфигурация питания читается автоматически
сразу при подключении и при каждом входе на вкладку, вместе с остальной
конфигурацией. Запись — только
по вашему явному действию и после чтения (своя кнопка «Записать
питание», отдельная от «Записать конфигурацию»
выше — это разные MSP-команды).

Ёмкость, пороги, источники и калибровка

AD-903 (INAV 9.x): iNavFlight снял блочную команду MSP_BATTERY_CONFIG /
MSP_SET_BATTERY_CONFIG начиная как минимум с версии 9.1.0 (полётник
отвечает MSP-ошибкой на неизвестную команду). Инструмент это учитывает: блок
— необязательный быстрый путь для старых прошивок, а при его отсутствии
ёмкость/пороги/единица читаются и пишутся по имени, тем же механизмом,
что и остальные поля ниже. На вашей стороне разницы нет — поля заполняются
одинаково в обоих случаях; ошибка «не удалось прочитать питание» показывается,
только если не сработал вообще ни один путь (ни блок, ни одна настройка по
имени).

Ёмкость, предупреждения и единица — сначала пробуют блочную команду
MSP_BATTERY_CONFIG / MSP_SET_BATTERY_CONFIG (read-whole/write-override,
прошивки до депрекейта), при её отсутствии — по имени (MSP2_COMMON_SETTING /
MSP2_COMMON_SET_SETTING):

  • Ёмкость аккумулятора и единица (battery_capacity / battery_capacity_unit)
    mAh (миллиампер-часы) или mWh (милливатт-часы);
  • Предупреждение и критическая ёмкость — пороги остатка для алармов
    (battery_capacity_warning / battery_capacity_critical).

Точные пороги на ячейку, калибровка и источники — по имени
(MSP2_COMMON_SETTING / MSP2_COMMON_SET_SETTING): если настройки нет в вашей
прошивке, её поле остаётся выключенным и не пишется (graceful):

  • Порог на ячейкуvbat_min_cell_voltage / vbat_max_cell_voltage /
    vbat_warning_cell_voltage в сотых вольта (например, 330 = 3.30 В), полная
    точность 0.01 В (блок MSP несёт их лишь с шагом 0.1 В, поэтому пороги правятся по
    имени, а байты блока сохраняются как есть);
  • Источник напряженияvbat_meter_type (NONE / ADC / ESC);
  • Калибровка вольтметраvbat_scale;
  • Источник токаcurrent_meter_type (NONE / ADC / VIRTUAL / ESC);
  • Калибровка датчика токаcurrent_meter_scale и current_meter_offset
    (знаковые). См. отдельную статью Калибровка датчика тока iNav.

Изменения применяются сразу, но в EEPROM сохраняются только по save. Значения
зажимаются предохранителями в пределах settings.yaml INAV.

Текущее состояние батареи (только чтение)

Живое состояние по MSP_BATTERY_STATE — напряжение, ток, потраченные mAh, число
банок и состояние (OK / WARNING / CRITICAL / NOT PRESENT). Это только
индикатор
: сюда ничего не пишется. Обновляется по кнопке «Обновить состояние» —
без автоопроса (страница не опрашивает борт по таймеру): в отличие от «Режимы»/
«Приёмник»/GPS (AD-835), здесь опрос сознательно остался ручным.

Вкладка «GPS»

Настройка GPS-приёмника и живой контроль спутникового фикса. Связь настраивается
на вкладке «Обзор»; после подключения GPS-конфигурация читается автоматически.

Чтобы GPS заработал, включите фичу GPS (вкладка «Конфигурация») и назначьте
функцию GPS на UART, к которому подключён модуль (вкладка «Порты»).

AD-1085 — редизайн под оригинальный INAV Configurator. Вкладка приведена к
виду GPS-таба Configurator'а: секция «Конфигурация» (тумблеры вместо галочек),
живые плашки «Позиция» и «Статистика», карта позиции (скрыта по умолчанию).
Часовой пояс логов и созвездия BeiDou/GLONASS демотированы сюда с вкладки
«Расширенные» (в Configurator'е они живут именно на GPS-табе).

Конфигурация GPS

В INAV, в отличие от Betaflight, нет отдельной команды MSP_GPS_CONFIG
GPS-настройки читаются и пишутся по имени через общий механизм настроек
(MSP2_COMMON_SETTING / MSP2_COMMON_SET_SETTING). Секция «Конфигурация»
показывает и переключает:

  • Тумблер GPS — включает фичу FEATURE_GPS (то же, что тумблер GPS на
    вкладке «Конфигурация»; оба держат друг друга в согласии);
  • Serial port и Baudrate — какой UART несёт функцию GPS и на какой
    скорости. Это тот же серийный конфиг (MSP2_COMMON_SERIAL_CONFIG), что рисует
    вкладка «Порты» — единый источник правды: запись на GPS-табе обновляет и «Порты»;
  • Протокол (gps_provider) — UBLOX, MSP (данные по MSP) или FAKE
    (симулятор);
  • Ground assistance / SBAS (gps_sbas_mode) — спутниковая коррекция:
    AUTO, EGNOS (Европа), WAAS (Сев. Америка), MSAS (Япония), GAGAN
    (Индия), SPAN или NONE (выкл.);
  • Модель динамики (gps_dyn_model) — PEDESTRIAN, AUTOMOTIVE,
    AIR_1G / AIR_2G / AIR_4G, SEA, MOWER;
  • Минимум спутников (gps_min_sats) — 5…10;
  • Тумблеры констелляцийGalileo / BeiDou / GLONASS
    (gps_ublox_use_galileo / _beidou / _glonass). Это ровно три
    созвездия, реально поддержанные INAV — ничего лишнего не выдумываем;
  • «Доп. параметры» (свёрнуто): автоконфигурация UBLOX (gps_auto_config),
    автоскорость (gps_auto_baud) и часовой пояс логов — смещение от UTC в
    минутах (tz_offset, выделенная команда MSP2_COMMON_TZ) + автопереход на
    летнее время (tz_automatic_dst).

Каждая настройка читается и пишется отдельным MSP-запросом по имени. Если
настройки нет в вашей прошивке, её поле остаётся выключенным и не пишется —
остальные применяются как обычно. Изменения применяются сразу, но в EEPROM
сохраняются только по save; смена провайдера/SBAS/порта/фичи окончательно
вступает в силу после перезагрузки полётника (тумблер GPS и порт/baud
пишутся только если вы их изменили — лишний ребут не провоцируем).

Плашка «Позиция» (live)

Опрос MSP_RAW_GPS и MSP_COMP_GPS по USB (локально, на сервер ничего не
уходит) стартует автоматически при входе на вкладку «GPS» (AD-835,
SFHD-57) и показывает: тип фикса (нет / 2D / 3D), высоту (м),
широту и долготу (раздельно, градусы), скорость (км/ч), число
спутников
и расстояние до дома.

Плашка «Статистика» (live)

MSP_GPSSTATISTICS — качество приёма: HDOP, оценки точности позиции
EPH/EPV (см), частота обновления (Гц, из интервала между сообщениями),
всего сообщений, ошибки и таймауты. Обновляется тем же «Живым
опросом», что и «Позиция».

Кнопка «Живой опрос статуса» приостанавливает/возобновляет опрос. Опрос
локальный, как монитор RC-каналов: останавливается при уходе со вкладки,
сворачивании окна и отключении, резюмируется сам при возврате. Для фикса модулю
нужен открытый обзор неба — в помещении спутников обычно не видно.

Карта позиции

Скрыта по умолчанию — тумблер «Показать карту» разворачивает её. Маркер
следует за живой позицией GPS (нужен валидный фикс). Та же связка Leaflet +
тайлы CARTO, что карта миссии и трек полёта — своей карт-библиотеки не заводим,
на сервер ничего не уходит.

Вкладка «Mission Control»

⚗️ Слайс 1 (AD-944) — только чтение. Показывает миссию, уже сохранённую
на полётнике. Редактирование и запись вейпойнтов (MSP_SET_WP) здесь не
реализованы
— следующий срез.

Связь настраивается на вкладке «Обзор». В отличие от GPS-конфига и других
быстро читаемых вкладок, миссия не читается автоматически при
подключении — кнопка «Прочитать миссию» запускает чтение сама: сначала
MSP_WP_GETINFO (ёмкость и текущее число вейпойнтов), затем MSP_WP по
каждому индексу от 1 до количества — по одному MSP-запросу на вейпойнт
(до 15 последовательных round-trip'ов, поэтому и не автоматически).

Список вейпойнтов

Таблица показывает по каждому прочитанному вейпойнту:

  • номер — индекс в миссии (1..N);
  • действие (action) — тип точки: Waypoint (обычная путевая точка),
    Hold time (зависание на время), Return to home (возврат домой),
    Set POI (точка интереса для камеры), Jump (переход на другой индекс),
    Set heading (задать курс), Land (посадка). Код действия, которого нет в
    этом списке (новее тула), показывается как «code N» — не теряется;
  • координаты (широта, долгота в градусах) и высота (м, из см на
    проводе);
  • P1 / P2 / P3 — параметры действия как есть (сырые числа): смысл
    зависит от типа действия (например, у Jump — целевой индекс и число
    повторов, у Hold time — время ожидания в секундах); в этом срезе тула их
    не расшифровывает по типу, показывает как есть.

Домашняя точка (WP#0) и служебные live-маркеры текущей/целевой позиции
(WP#254/255) в список не входят — это не часть редактируемой миссии
(протокол INAV резервирует эти индексы под спецназначение).

Карта маршрута

Прочитанные вейпойнты рисуются на карте (self-hosted Leaflet + тайлы CARTO
dark_all — та же связка, что трек полёта на карточке борта/события,
docs/hangar/flight-tracks.md) точками по порядку номеров, соединёнными
линией маршрута. Вейпойнт без валидных координат (0, 0 — пустой/незаполненный
слот) на карту не наносится, но остаётся в таблице списка выше (честный показ
данных борта как есть).

Вкладка «Failsafe»

Что делает борт при потере связи с передатчиком. Связь настраивается на вкладке
«Обзор»; после подключения failsafe-конфигурация и per-channel RX failsafe
читаются автоматически.

⚠️ Критично для безопасности. Неверный failsafe = потеря борта: улёт «в
стратосферу», падение на людей или невозврат. Инструмент ничего не пишет
автоматически
— только по кнопке «Записать». После записи обязательно
проверьте на стенде
(пропеллеры сняты): выключите передатчик и убедитесь, что
борт делает ровно то, что задумано. Failsafe — последний рубеж, а не «поставил и
забыл».

Поведение при потере связи

Процедура, задержки и throttle читаются и пишутся через MSP_FAILSAFE_CONFIG /
MSP_SET_FAILSAFE_CONFIG (весь 8-байтовый блок целиком, read-whole/write-override
— байт бывшего kill_switch сохраняется прочитанным):

  • Процедура при потере связи (failsafe_procedure) — что выполнить:
    LAND (авто-посадка), DROP (сброс газа), RTH (возврат домой) или NONE;
  • Задержка до failsafe (failsafe_delay) и задержка до выключения
    (failsafe_off_delay) — в десятых долях секунды (×0.1 с);
  • Throttle в failsafe (failsafe_throttle) — газ во время процедуры, µs;
  • Throttle-low delay (failsafe_throttle_low_delay) — время низкого газа до
    дизарма при уже идущей посадке (×0.1 с).

Настройки, которых нет в MSP_FAILSAFE_CONFIG, читаются и пишутся по имени
(MSP2_COMMON_SETTING, как GPS-конфиг): recovery delay
(failsafe_recovery_delay), порог движения стиков для выхода из failsafe
(failsafe_stick_motion_threshold), мин. дистанция (failsafe_min_distance,
см) и процедура ближе мин. дистанции (failsafe_min_distance_procedure). Если
настройки нет в вашей прошивке, её поле остаётся выключенным и не пишется —
остальные применяются как обычно.

Изменения применяются сразу, но в EEPROM сохраняются только по save. Значения
зажимаются предохранителями в пределах settings.yaml INAV.

Per-channel RX failsafe

Что подставляется на каждый канал при потере кадра приёмника
(MSP_RXFAIL_CONFIG / MSP_SET_RXFAIL_CONFIG). Режим по каналу:

  • AUTO — нейтраль для управляющих осей, газ = failsafe-throttle;
  • HOLD — удержать последнее принятое значение;
  • SET — подставить заданное значение (µs, шаг 25 — квантуется прошивкой).

Каждый канал пишется отдельной командой — кнопкой в строке или «Записать все
каналы». Значение имеет смысл только для режима SET.

Проверьте на стенде и это: RX failsafe срабатывает раньше «большого» failsafe и
определяет, какие значения увидят стабилизация и микшер в момент потери сигнала.

Вкладка «OSD»

Настройка бортового OSD (наложение телеметрии на видео). Связь настраивается на
вкладке «Обзор»; после подключения OSD-конфигурация читается автоматически. Если
OSD не собран в вашей прошивке (нет чипа/драйвера), настройки недоступны — тула
покажет об этом ноту и не будет ничего писать.

Видеосистема, единицы и алармы

Заголовок OSD-конфига читается и пишется через MSP_OSD_CONFIG /
MSP_SET_OSD_CONFIG (весь блок целиком, read-whole/write-override):

  • Видеосистема (osd_video_system) — AUTO (определить самому), PAL,
    NTSC или HD-варианты (HDZERO, DJIWTF, AVATAR, BF43COMPAT, BFHDCOMPAT,
    DJI_NATIVE). Смена вступает в силу после перезагрузки полётника;
  • Единицы измерения (osd_units) — IMPERIAL, METRIC, METRIC_MPH, UK, GA;
  • Пороги алармов — RSSI (%), предупреждение по ёмкости (mAh), время (мин),
    высота (м), дистанция (м) и отрицательная высота (м). Значения зажимаются
    предохранителями в пределах settings.yaml INAV.

Изменения применяются сразу, но в EEPROM сохраняются только по save.

Почему OSD раньше не читался вовсе — AD-1326 (обращение SFHD-96). Ответ
MSP_OSD_CONFIG — это заголовок 14 байт плюс позиция каждого элемента OSD
(OSD_ITEM_COUNT ≈ 202 в INAV 9.x), то есть около 418 байт. Поле размера
в MSP v1 однобайтовое, поэтому такие ответы прошивка отдаёт JUMBO-кадром:
в поле размера пишется маркер 255, а настоящая длина идёт следующими двумя
байтами (msp_serial.c, mspSerialEncode). Инструмент этого формата не знал
и разбирал такой ответ как мусор — вкладка показывала
Failed to read OSD: bad crc на исправном борте, а сообщение уводило
диагностику в сторону («шумит порт», «плохой кабель»). Дефект был не про OSD:
под него попадал ЛЮБОЙ ответ MSP v1 длиной от 255 байт. Теперь JUMBO-кадры
разбираются, а сам MSP_OSD_CONFIG запрашивается по протоколу v2, где размер
16-битный, а контрольная сумма — CRC8/DVB-S2 вместо однобайтового XOR.

Визуальный редактор раскладки (AD-1099)

После чтения OSD-конфига появляется визуальная сетка занятых позиций — та же
сетка, что и на вкладке «Импорт диффа» (см. ниже), только по данным, прочитанным
живьём с борта. Короткая метка в ячейке — распознанный элемент; наведите на неё
курсор — подсказка покажет полное имя, id и видимость (H/V). Размер сетки берётся
из прочитанной видеосистемы (osd_video_system).

Масштаб превью (AD-1358, обращение SFHD-99). Над сеткой — селектор
«Масштаб превью»: 100…300%, по умолчанию 150%. Раньше ячейка была ровно 22
пикселя при любом канвасе, и раскладка читалась с трудом: в такую плитку
полное название элемента не помещалось и обрезалось, поэтому подписи выглядели
набором кодов. Теперь в ячейке стоит короткая привычная для FPV подпись
(VBAT, TIME, ALT, HDG, SAT, DIST…), а кегль подбирается под размер
ячейки и длину подписи — она видна целиком, без многоточия, и растёт вместе с
масштабом. Полное название никуда не делось: оно осталось в подсказке по
наведению и в доступном имени для скринридера.

Масштаб — настройка ВИДА: он ничего не пишет на борт и не помечает вкладку
несохранённой. Перетаскивание при этом остаётся точным на любом масштабе:
размер ячейки считается один раз на отрисовку и им же считается попадание
курсора в знакоместо, поэтому элемент садится ровно туда, где его отпустили.
Выбранный масштаб живёт до перезагрузки страницы — между сессиями он пока не
запоминается.

Элементы двигаются прямо на сетке:

  • мышью или пальцем — возьмите элемент и перетащите. Он всегда ложится в
    ЦЕЛОЕ знакоместо экрана: сетка OSD жёсткая, промежуточных позиций у элемента
    не бывает, поэтому «примерно между ячейками» поставить нельзя (и не нужно);
  • стрелками клавиатуры — выберите элемент (клик или Tab) и двигайте по
    одной ячейке. Это точнее мыши, особенно на мелком масштабе;
  • за край экрана элемент не уходит — координаты зажимаются по РАЗМЕРУ ТЕКУЩЕЙ
    сетки, а он у PAL, NTSC и HD-канвасов разный;
  • приглушённые ячейки — скрытые элементы (H): позиция у них задана, но на
    очках они не рисуются. Снимите/поставьте галочку «Показывать» в строке
    элемента ниже.

Перетаскивание НЕ пишет на борт. Оно правит те же поля X/Y в «Раскладке
элементов» ниже — как если бы вы ввели числа руками. Чтобы изменения ушли на
полётник, нажмите «Записать» в строке элемента или «Записать все элементы».
Так сделано намеренно: вкладка никогда ничего не пишет сама, только по вашей
явной кнопке и только после чтения.

Сетка показывает ваши НЕЗАПИСАННЫЕ правки — и после перетаскивания, и после
ручного ввода X/Y в строке элемента, — поэтому на ней видно то, что вы
собираете, а не то, что сейчас на борту. Строка со свежей правкой помечается
как несохранённая, и тула предупредит при уходе со вкладки.

Двигать можно те элементы, у которых есть строка в «Раскладке элементов» ниже:
перетаскиваемая, но незаписываемая ячейка была бы обманом. Прошивка может
отдать позиции элементов, которых в списке нет, — они видны на сетке
(подпись #id), но не берутся мышью.

Раскладка элементов

Включение и позиция (X/Y, знакоместа экрана) ключевых элементов OSD: напряжение
батареи, ток, потраченные mAh, мощность, таймеры, режим полёта, имя аппарата,
throttle, прицел, горизонт, высота, курс, скорость/спутники GPS, дистанция и
направление до дома. Позиция каждого элемента пишется отдельной командой
(MSP_SET_OSD_CONFIG, адрес = индекс элемента) — кнопкой в строке или «Записать
все элементы».

  • X и Y — 0…63 (знакоместа); значения вне диапазона зажимаются;
  • при записи позиции неуправляемые биты (OSD-профиль/резерв) прочитанного
    значения сохраняются — тула не стирает то, что не показывает;
  • показан полезный набор элементов; список при необходимости расширяется.

Индексы и раскладка позиции (X — младшие биты, Y — средние, бит видимости)
реализованы по открытому протоколу MSP INAV (io/osd.h), clean-room.

Вкладка «LED / подсветка»

Настройка WS2811-ленты (срез №1): чтение текущего конфига + число настроенных
LED и статус фичи, применение одного из 4 готовых пресетов в один клик. Связь
настраивается на вкладке «Обзор»; после подключения конфигурация читается
автоматически.

⚗️ Экспериментально. LED-кодек реализован clean-room по публичному
протоколу MSP и не выверен на реальном полётнике — два места помечены как
допущения (см. таблицу MSP-команд ниже). Запись безопасна и обратима (живёт в
RAM до перезагрузки, полётник её не сохраняет сам), но проверьте результат
визуально
после применения пресета. В EEPROM изменения попадут только по
save (в INAV Configurator/CLI).

Чтение и статус

Основной путь чтения — MSP2_INAV_LED_STRIP_CONFIG_EX (весь список LED-конфигов
за один запрос). Если прошивка не отвечает на эту команду, тула пробует legacy
MSP_LED_STRIP_CONFIG только как сигнал «лента какая-то есть, но безопасная
запись недоступна» — сам legacy-формат тула не разбирает (он отличается от EX и
не подтверждён источниками, гадать по битам не будем). Отдельно читается палитра
MSP_LED_COLORS — только для показа, не для записи.

Показывается:

  • Фича LED_STRIP — включена ли соответствующая фича (FEATURE_LED_STRIP,
    вкладка «Конфигурация»);
  • Настроено LED — сколько LED в прочитанном списке несут ненулевой конфиг.

Если ленты не видно, тула объясняет причину и НЕ активирует запись:

Ситуация Сообщение Пресеты
Справочник плат (AD-705) подтверждает: физического LED-пада на этой модели НЕТ «Плата не имеет выделенного LED-пада — вкладка неприменима на этом железе» (таб приглушён) заблокированы
Справочник подтверждает LED-пад, но фича LED_STRIP выключена настойчивее нейтрального сообщения — «есть LED-пад, включите фичу на вкладке «Конфигурация»» заблокированы
Фича LED_STRIP выключена (справочник не знает про плату) «Включите на вкладке «Конфигурация» и сохраните» заблокированы
Фича включена, но все LED нулевые «Борт не сообщает о настроенных LED. Примените пресет» доступны — пресет создаст LED с нуля
EX не отвечает (и legacy тоже, либо только legacy) «Прошивка не сообщает о безопасной поддержке LED» заблокированы

Третье состояние (AD-705) — по справочнику плат inav_boards.js, ярус 2
модели «возможности платы» (см. § «Возможности платы» выше). Если платы нет
в справочнике — поведение не меняется (как до AD-705).

Пресеты

Один клик записывает пресет на всю ленту через
MSP2_INAV_SET_LED_STRIP_CONFIG_EX (по одному LED за вызов — так же, как
запись серво по одному индексу). LED сверх пресета (если ранее лента была
настроена на большее число LED) обнуляются, чтобы результат был
детерминирован — на ленте оказывается ровно то, что задаёт пресет, и ничего
лишнего от старой конфигурации.

Доступны 4 пресета (все ссылаются на дефолтные индексы палитры INAV — своя
палитра и per-LED редактор появятся в следующем срезе):

  • Ходовые огни — передняя половина ленты белая (навигационный нос), задняя
    красная (хвост);
  • Индикатор арминга — вся лента отражает состояние arm/disarm;
  • Низкий заряд — вся лента мигает при разряде батареи;
  • Ночной полёт — вся лента реагирует на текущий режим полёта.

Значения применяются сразу; в EEPROM сохранятся только по save (в INAV
Configurator/CLI).

Не входит в срез №1

Осознанно не реализовано (следующий срез): произвольный per-LED редактор,
live-превью подсветки, запись собственной палитры (MSP_SET_LED_COLORS) и
режимных цветов (MSP_SET_LED_STRIP_MODECOLOR) — пресеты используют только
дефолтные индексы палитры прошивки.

Вкладка «Выходы»

Программируемые выходы платы (PINIO): видео/камера-свитч (VSW) и
произвольные пользовательские боксы USER1–USER4. Срез №1 (PINIO) — только
просмотр и навигация
: какие выходы физически есть на этой модели (справочник
плат), к какому боксу они привязаны сейчас (pinio_box) и активируется ли этот
бокс каким-то диапазоном Aux. Запись pinio_box на борт в этом срезе не
делается
— она появится следующим срезом.

Срезом 4 (AD-837, SFHD-54) сюда же переехали маппинг выходов на моторы,
motor test (были на «Миксере») и тест хода серво (был на «Серво») —
единая вкладка «Outputs», как в INAV Configurator: протоколы/пины + оба теста
вместе (см. §§ ниже). Эти тесты, в отличие от pinio_box, действительно
пишут на борт
— но временно (RAM-only) и под собственными предохранителями
(см. § «Motor test» и § «Тест хода серво» ниже).

Три закладки вместо одной ленты (AD-1545, обращение SFHD-97). Вкладка
разбита так же, как в INAV Configurator:

  • «Конфигурация» — параметры выходов, возможности платы и текущая
    привязка pinio_box: всё, что ничего не двигает;
  • «Моторы» — текущие выходы, живой просмотр и motor test;
  • «Серво»тест хода серво и настройка серв (endpoints/центр/rate).

Раньше все шесть карточек шли одной лентой: справочные блоки платы стояли
вперемешку с органами, которые физически крутят винты, и до motor test
приходилось пролистывать три справочные карточки.

Переключение закладки гасит движение. Пока панель была одна, спрятать
работающий тест, не уходя со вкладки, было нельзя — а уход со вкладки его и
гасил. С закладками такой способ появился, поэтому уход с «Моторов»
останавливает motor test и живой просмотр, а уход с «Серво» — тест хода
серво: моторы не крутятся за скрытой панелью, где не видно красной кнопки
«СТОП ВСЕ». Предупреждение о том, что тесты вкладки шлют живые команды,
стоит над рядом закладок и видно на любой из них.

Раскладка по образцу INAV Configurator (AD-1345). Ползунки газа по
моторам и ползунок хода серво стоят вертикально, столбиками в ряд — все
восемь моторов видно разом, а соседние значения сравниваются по высоте
столбика, а не вычитанием чисел. Текущие значения выходов (карточка «Выходы
на моторы») показаны такими же столбиками с числом в микросекундах; столбик
только показывает прочитанное и на борт ничего не шлёт. Справочная часть
вводного текста (что такое PINIO, оговорка про срез №1) убрана под
«Подробнее». Предупреждения — про снятые винты, свободные поверхности и
про то, что тесты ниже действительно шлют команды на борт, — остались
видимыми всегда: под раскладку они не убираются никогда (то же правило,
что у «?»-подсказок AD-1043).

Конфигурация выходов (AD-1318)

Первый блок вкладки — «Конфигурация выходов». До AD-1318 (обращение
SFHD-91) его не было вовсе: протокол регулятора, частоту PWM и idle-газ
приходилось править в INAV Configurator или через CLI.

Поля блока — протокол ESC, частота PWM моторов, число полюсов
мотора
(нужно для расчёта оборотов по телеметрии ESC), idle-газ в
процентах диапазона
и throttle scale. Читаются и пишутся по имени
настройки
через общий механизм MSP (MSP2_COMMON_SETTING /
MSP2_COMMON_SET_SETTING) — тот же, что у вкладок «Расширенные» и «GPS».
Настройка, которой в этой прошивке нет, честно помечается «недоступно», а
не подставляется значением по умолчанию и не затирается при записи.

  • Блок читается автоматически при подключении и при входе на вкладку.
  • «Записать на борт (RAM)» — отправить только изменённые поля. Как и
    на остальных вкладках, это правка в оперативной памяти: без сохранения она
    не переживёт снятие питания.
  • «Сохранить и перезагрузить» — записать изменения, сохранить их в EEPROM и
    перезагрузить полётник. Смена протокола ESC вступает в силу только после
    перезагрузки.

⚠️ Протокол регулятора меняйте со снятыми винтами. Протокол, который
регулятор не понимает, означает, что моторы не запустятся — или запустятся
неожиданно. Перед записью нового протокола инструмент отдельно спрашивает
подтверждение и называет, с какого протокола на какой переходит.

Проверено на синтетике (кодек кладёт байты, описанные протоколом INAV:
src/main/fc/settings.yaml — имена, типы и диапазоны, src/main/fc/fc_msp.c
формат значения, включая 4-байтовый IEEE-754 float у throttle_scale).
На реальном борту блок не проверялся — железа для проверки у нас нет.

Вкладка несёт два сабтаба (AD-905, ФИНАЛ редизайна) — «Outputs» (по
умолчанию, весь контент этого раздела ниже) и «Servo configuration»
(конфигурация серв, описана отдельным подразделом дальше) — тот же переключатель
.tabs/.tab, что на «Калибровке»/«PID-тюнинге». В реальном релизе INAV
Configurator 9.0 отдельного пункта Servo(s) в левом меню нет вовсе (серво —
часть Outputs/Mixer); карточка конфигурации серв раньше жила на СВОЕЙ вкладке
«Серво» (до AD-905 это был единственный остававшийся top-level пункт после
среза 4) — теперь она сабтаб этой вкладки. Переключение сабтаба ВНУТРИ
«Выходов» — чисто визуальное, safety-стоп motor test/тест хода серво (см.
applyTab() в web/static/js/tools/inav_msp.js) его не трогает.

INAV поддерживает до 4 программируемых пинов (PINIO_COUNT). Каждый
привязывается к боксу по permanent-id параметром-массивом pinio_box
(4 значения, 255 = слот свободен). Например pinio_box = 47,255,255,255
означает: PINIO1 → бокс с permanent-id 47 (USER1), остальные три слота
свободны. Некоторые из известных permanent-id: USER1=47, USER2=48,
USER3=57, USER4=58, ARM=0.

Возможности платы

Пины, дефолтные боксы и предупреждения — из того же clean-room справочника
конкретных плат, что и вкладка «LED / подсветка» (см. § «Возможности платы»
выше): static.vsw (пин + noteKey — i18n-ключ, текст — в
data-msg-board-note-* вкладки, AD-1039), static.cameraSwitch (пин) и
static.userOutputs (список {pin, defaultBox} по каждому документированному
PINIO-слоту). Три честных состояния — как у LED-таба:

Ситуация Сообщение Вкладка
Плата известна и есть хотя бы одна возможность (vsw/cameraSwitch/userOutputs) сводка возможностей платы активна
Плата известна, но справочник не заявляет ни одной возможности «На этой плате (по справочнику) программируемых выходов не найдено» приглушена (data-inapplicable)
Плата не в справочнике вовсе «Плата не в справочнике — не знаем...» приглушена, но привязку pinio_box всё равно можно прочитать

Предупреждения записи (caveats) показываются всегда, когда плата
известна, — даже если возможностей формально «нет». Пример — SpeedyBee F405
V4: тот же физический вывод, что на V3 свободен под VSW, здесь по
умолчанию занят под арминг
(BOXARM), поэтому справочник намеренно НЕ
заявляет vsw для V4 (переключать «камеру» на самом деле означало бы
армить/разармить борт) — вместо этого caveat честно объясняет, что пин
физически есть, но занят другим боксом.

Второй пример того же паттерна (AD-854, багрепорт SFHD-61) — Matek
F405-Wing (SE), она же продаётся как «F405-Wing V2/V3»
: VSW/camera-switch
(PC6/PC7) в прошивке INAV собраны только в отдельном firmware-варианте
MATEKF405SE_PINIO; базовая прошивка, которую качает подавляющее
большинство владельцев, держит те же пины как обычный UART6, а MSP не может
сказать, какой вариант установлен на конкретном борте. Справочник поэтому НЕ
заявляет vsw/cameraSwitch/userOutputs для этой платы «по умолчанию» —
подробности в caveat и в
research/inav-board-capabilities.md § 6.

Текущая привязка (pinio_box)

Кнопка «Прочитать выходы» читает pinio_box через CLI (get pinio_box) — MSP-команды для этого параметра в открытых источниках не
нашлось (см. research/inav-board-capabilities.md).
Это чтение (get, не set): инструмент временно и незаметно для вас
входит в CLI-режим (как вкладка «CLI»), отправляет ровно одну команду, честно
выходит (exit, без save/перезагрузки) и возвращает MSP-режим —
транскрипт интерактивной консоли вкладки «CLI» при этом не затирается.

Для каждого из 4 PINIO-слотов показывается:

  • слот свободенpinio_box[i] == 255;
  • привязан, назначен на Aux — бокс сшивается с уже прочитанными диапазонами
    вкладки «Режимы / Aux»: PINIO1 (PD10) → USER1 → Канал 7, 1700–2100 µs
    (номер канала, AD-833 — тот же, что на вкладке «Режимы»); прочитайте
    «Режимы», если сшивка не находится, — тула ничего не запоминает между
    вкладками сама;
  • привязан, но не назначен на Aux — бокс задан, но ни один диапазон Aux на
    него не ссылается (или вкладка «Режимы» ещё не читалась) — сообщение прямо
    предлагает настроить канал там.

Если полётник отверг get pinio_box (старая прошивка/сборка без PINIO) —
честное «не поддерживается», не пустой список. Если ответ пришёл, но в
неожиданном формате, — «не удалось разобрать», парсер не гадает.

Кнопка «Назначить канал»чистая навигация на вкладку «Режимы / Aux»
(writer диапазонов там уже реализован, AD-653); сама вкладка «Выходы» кнопки
записи не несёт.

Выходы на моторы

Текущие значения на выходах (MSP_MOTOR, в микросекундах) — кнопка
«Обновить выходы» (переехала сюда с «Миксера» срезом 4, AD-837, SFHD-54;
id/MSP-механика не менялись). Это фактический порядок: «Выход 1» — первый
мотор миксера и т.д. Переназначение выходов делается в INAV Configurator —
инструмент показывает раскладку. Заполняется и этой кнопкой, и автоматически
при «Прочитать миксер» на вкладке «Миксер» (общая точка чтения, дубля
MSP-вызова нет).

Живой просмотр выходов (AD-1317)

Рядом с «Обновить выходы» — кнопка «Живой просмотр». Пока режим включён,
инструмент раз в четверть секунды перечитывает с борта текущие значения на
выходах моторов (MSP_MOTOR) и на сервах (MSP_SERVO): видно, как выходы
меняются от стиков и полётных режимов, без нажатия «Обновить» на каждый
чих. Пока режим включён, рядом горит пометка «идёт живой просмотр»
опрос порта не идёт незаметно.

Обращение SFHD-94 просило сделать живой режим постоянно включённым;
решение основателя — явная кнопка. Причина предметная: это единственная
вкладка, где рядом физически крутятся моторы, а порт у полётника один и
MSP отвечает строго по одному запросу — постоянный фоновый опрос конкурировал
бы с кадрами motor test.

Границы режима (они же — предохранители):

  • режим сам выключается, когда вы уходите с вкладки «Выходы», сворачиваете
    или прячете окно браузера, либо отключаетесь от платы. Фонового опроса вне
    режима нет вовсе;
  • режим и тесты взаимоисключающи. Включить живой просмотр поверх
    запущенного motor test или теста хода серво нельзя — инструмент скажет,
    почему; а старт любого из тестов гасит живой просмотр сам. Тесты ведут выход
    сами, и «текущее» значение поверх задаваемого при крутящихся винтах читалось
    бы двусмысленно;
  • режим только читает. Он ничего не двигает и не смягчает требований
    motor test: пропеллеры по-прежнему надо снять, а под ARM тест по-прежнему
    заблокирован.

Живой просмотр не отменяет и не дублирует автоматическое чтение вкладки при
входе (AD-1329): то — один снимок на один вход, этот — продолжение чтения по
вашей явной просьбе.

Motor test

Слайдеры газа по моторам (MSP_SET_MOTOR) — переехали сюда с «Миксера»
срезом 4 (AD-837, SFHD-54; id/предохранители не менялись). Раздел
опасный
— при вращении мотора установленный пропеллер травмирует. Поэтому
motor test защищён:

Рядом со слайдерами газа — живые напряжение (V) и ток (A) батареи,
«так же как в INAV Configurator» (AD-1049, SFHD-83): удобно следить за
потреблением прямо во время теста, не переключаясь на «Обзор». Источник —
тот же опрос батареи (MSP2_INAV_ANALOG, фолбэк на legacy
MSP_BATTERY_STATE), что панель «Battery & power» на «Обзоре» — отдельного
MSP-запроса/таймера это не заводит. Не подключено или нет данных — нейтральный
«—», не 0.

  1. Подтверждение «пропеллеры сняты». Пока галочка не стоит, слайдеры и
    кнопка запуска заблокированы.
  2. Лимит газа (по умолчанию 20 %). Ползунок-предохранитель: даже 100 % на
    слайдере мотора не даст газ выше лимита.
  3. Общий СТОП — красная кнопка мгновенно останавливает все моторы, сбрасывает
    слайдеры и выключает тест. Доступна всё время, пока есть связь.
  4. Автостоп срабатывает при потере связи, сворачивании вкладки/окна, уходе с
    раздела и при длительном бездействии — моторы глушатся сами.
  5. Гейт по ARM (AD-830, SFHD-52). Значения газа применяются только когда
    полётник разоружён (disarmed) — это протокольное поведение прошивки
    INAV, не ограничение тулы: под ARM выходы моторов ведёт обычный
    миксер/RC-приёмник, а MSP_SET_MOTOR из теста молча игнорируется (без
    ошибки в MSP-обмене). Инструмент читает флаг ARM из живого статуса
    (MSP2_INAV_STATUS, тот же опрос, что и строка индикаторов сенсоров) и,
    пока борт armed, блокирует кнопку «Включить motor test» с явным
    предупреждением вместо тихого «ничего не происходит». Если заармили
    ПОСЛЕ старта теста — тест автоматически останавливается на ближайшем
    тике живого статуса (≤1 c).

Порядок безопасного motor test:

  1. Снимите пропеллеры и надёжно закрепите аппарат.
  2. Убедитесь, что полётник разоружён (если статус показывает ARM —
    разоружите: снимите с предохранителя/переключите свитч ARM на аппаратуре).
  3. Поставьте галочку «Пропеллеры сняты…».
  4. Задайте лимит газа (начните с малого).
  5. Укажите число моторов и нажмите «Включить motor test».
  6. Плавно двигайте слайдер нужного мотора — проверьте, что крутится тот мотор
    и в ту сторону, что ожидаете.
  7. По окончании — «Общий СТОП» или снимите галочку.

Тест хода серво

Слайдер двигает выбранное серво, временно меняя его центр
(MSP_SET_SERVO_CONFIGURATION) — так же, как это делает «живой» режим
серво-вкладки INAV Configurator. Переехал сюда с «Серво» срезом 4 (AD-837,
SFHD-54; id/предохранители не менялись). Раздел с движением — под
защитой:

  1. Подтверждение «поверхности/линкейджи свободны». Пока галочка не стоит,
    слайдер и кнопка запуска заблокированы.
  2. Ход ограничен endpoints выбранного серво (Min…Max, читаются с сабтаба
    «Servo configuration» ниже) — слайдер не выведет серво за настроенные пределы.
  3. Возврат центра — красная кнопка «ВЕРНУТЬ ЦЕНТР» возвращает серво в исходный
    центр и выключает тест. Доступна всё время, пока есть связь.
  4. Автовозврат срабатывает при потере связи, сворачивании вкладки/окна и уходе
    с раздела — серво возвращается в исходный центр само.

Меняется только центр серво и только временно (в RAM); в EEPROM ничего не пишется.

Сабтаб «Servo configuration» (внутри «Выходов»)

Появляется после подключения на вкладке «Обзор»; конфиги серв читаются
автоматически. Показаны серво 1–8 (INAV поддерживает до 18 — расширенные каналы
редактируются в INAV Configurator). Правила серво-миксера показаны на вкладке
«Миксер» (§ «Серво-миксер (smix)» выше); тест хода серво — на сабтабе
«Outputs» выше (эта карточка — единственное, что отличает сабтаб «Servo
configuration»). AD-905 (ФИНАЛ редизайна) — до этой правки жила СВОЕЙ
вкладкой «Серво» (единственный top-level пункт, оставшийся после консолидации
среза 4, AD-837, SFHD-54 — по аналогии с отдельной вкладкой «Servos» в
dev-версии INAV Configurator); реальный релиз 9.0 не несёт отдельного пункта
Servo(s) в левом меню вовсе — эта карточка стала сабтабом «Выходов».

Конфигурация серв

Таблица параметров по каждому серво (MSP_SERVO_CONFIGURATIONS):

  • Min / Center / Max — endpoints и центр в микросекундах (предел хода
    500–2500 µs, значения вне диапазона зажимаются предохранителем);
  • Rate — норма хода [-125…125]; знак задаёт направление: «+» прямое,
    «−» реверс (колонка «Напр.» показывает это словами);
  • Выход — текущее значение на серво по MSP (MSP_SERVO, только чтение).

Кнопки «Записать» (в строке серво) и «Записать все» отправляют конфиги
(MSP_SET_SERVO_CONFIGURATION, по одному серво на команду).

Запись применяется к полётнику сразу, но в EEPROM сохраняется только
командой save (в INAV Configurator/CLI). До save изменения живут в RAM и
сбрасываются перезагрузкой.

Не входит в срез №1

Осознанно не реализовано (следующий срез): запись pinio_box (CLI set +
save + перезагрузка), редактор pinio_config (полярность/режим пина) и
logic conditions/GVAR. Мутации борта с pinio-контента этой вкладки в этом
срезе отсутствуют (motor test и тест хода серво выше — отдельная,
временная RAM-only механика, к pinio_box отношения не имеет).

Вкладка «Blackbox» (AD-943)

Была заглушкой «скоро» — стала реальной вкладкой. Читает состояние
blackbox-хранилища
(карточка AD-618 переехала сюда с «Обзора»: SD-карта и
онбордовая SPI-flash, объём занятого/всего), показывает куда пишется лог и
с каким делителем частоты (MSP2_BLACKBOX_CONFIG, только чтение), скачивает
лог с онбордовой флешки
и стирает её.

Скачивание. Лог вычитывается кусками по 4 КБ (MSP_DATAFLASH_READ) от нуля
до занятого объёма и сохраняется файлом blackbox_<плата>_<дата>.bbl. Это
расширение уже принимает загрузка трека к борту (карточка борта → «Полёты»),
то есть скачанный файл сразу годится в существующий разбор
(web/services/blackbox.py, AD-676) — второго парсера в браузере нет и не
будет. Вычитка полной микросхемы — это минуты: под кнопкой идёт прогресс, а
кнопка «Прервать» останавливает процесс на ближайшем куске (недокачанный
лог не сохраняется — файл-обрубок хуже отсутствия файла).

Почему кусками и почему MSP v2: прошивка отдаёт на запрос address(u32) + length(u16) эхо адреса и сырые байты без поля длины, молча урезая ответ по
месту в буфере и по концу тома (fc_msp.c:serializeDataflashReadReply).
Двигаться по логу можно только на фактически полученную длину, а кусок в 4 КБ
(MSP_PORT_DATAFLASH_BUFFER_SIZE) в однобайтовый размер MSP v1 не влезает.

Лог на SD-карте по MSP не читается вовсе. MSP_DATAFLASH_READ обслуживает
только онбордовую flash-микросхему, а режима mass storage у INAV по MSP нет
(MSP_REBOOT принимает лишь «обычно/DFU») — MSC включается командой msc на
вкладке «CLI». Инструмент говорит это прямым текстом, а не делает вид, что
качает любой лог.

Стирание необратимо. MSP_DATAFLASH_ERASE стирает микросхему целиком —
все логи на ней. Кнопка спрашивает подтверждение (общий диалог SkyforgeConfirm)
и заблокирована, пока полётник ARMED: прошивка отклоняет команду, пока
пишется лог (blackbox.c:blackboxMayEditConfig), и отправлять её вслепую
означало бы показать пользователю «msp error» вместо внятной причины. Само
стирание чипа идёт секундами: после подтверждения инструмент ждёт и один раз
перечитывает состояние; если флешка ещё занята, об этом сказано прямо и
предложено зайти на вкладку ещё раз (цикла ожидания нет —
это был бы запрещённый таймерный опрос).

Что сознательно НЕ сделано в этом срезе: запись настроек логирования
(MSP2_SET_BLACKBOX_CONFIG) — вкладка их только показывает; автоматическая
отправка скачанного лога в разбор трека без участия человека (файл нужно
загрузить на карточку борта — привязки борта у инструмента в общем случае нет).

Вкладка «Датчики» (AD-1377)

Была заглушкой «скоро» — стала реальной вкладкой. Показывает живые показания
акселерометра, гироскопа и компаса (MSP_RAW_IMU), барометра и
вариометра
(MSP_ALTITUDE) и, если GPS на борту есть, короткую строку
состояния приёмника (MSP_RAW_GPS). Вкладка только читает: ни одной
write-команды на ней нет, калибровка датчиков живёт на «Калибровке» и отсюда не
запускается.

Единицы — главная ловушка этой вкладки, и она несимметричная. Сырые числа
MSP не являются ни G, ни градусами в секунду «сами по себе»:

Датчик Что на проводе Что показываем
Акселерометр accADCf * 512, знаковый int16 делим на 512 → G
Гироскоп gyroRateDps(), знаковый int16 не делим вовсе — это уже °/с
Компас magADC, знаковый int16 счётчики датчика, единицы нет
Барометр / вариометр сантиметры и см/с, MSP_ALTITUDE делим на 100 → м и м/с

Три отдельные грабли, каждую сторожит свой тест (tests/test_inav_msp.js):
множитель 512 зашит в MSP и не равен acc_1G конкретного датчика (тот
бывает 256) — делить на acc_1G было бы ошибкой; гироскоп прошивка отдаёт уже
в °/с, и «на всякий случай» разделить его на чувствительность значило бы занизить
показания на порядок; у компаса физической единицы нет — калибровка лишь
нормирует шкалу оси примерно к 1024, поэтому подписать счётчики микротеслами
значило бы выдумать единицу. Плюс все девять значений — знаковые int16 в
обёртке sbufWriteU16: чтение без знака превратило бы −536 в 65000.

Датчик, которого борт не объявил, показывает «нет датчика», а не нули. При
отсутствующем компасе прошивка кладёт в кадр нули (#else sbufWriteU16(dst, 0)),
и выдать их за показания значило бы соврать «компас видит ноль». Источник правды
о наличии — маска sensorStatus из MSP2_INAV_STATUS. Если статус ещё не
прочитан (или прошивка старая), это честное «не знаем» — показания выводятся:
прятать реальные данные из-за непрочитанного статуса хуже, чем показать лишнее.

Живой просмотр — явный режим, тем же приёмом, что на «Выходах» (AD-1317).
Кнопка-тумблер, видимый индикатор «идёт опрос», автовыключение при уходе со
вкладки, при скрытии окна и на разрыве связи. Второго механизма не заведено и
нового исключения из запрета фонового опроса (AD-441) не создано: вкладка
sensors сознательно не входит в AUTO_LIVE_TABS — режим включает человек,
код его сам не включает никогда. Вне режима вкладка получает один снимок при
входе (AD-1329) — это не таймер.

Барометрическая высота и слитая оценка высоты показаны разными строками
намеренно: вторая — результат навигационного фильтра (баро + GPS + акселерометр),
и они обязаны различаться.

Вкладка «CLI»

Интерактивная консоль полётника — как одноимённая вкладка в INAV
Configurator
. В отличие от остальных вкладок инструмента (которые говорят с
платой по протоколу MSP), здесь порт переключается в текстовый режим: вы
набираете команды CLI INAV/Betaflight и видите сырой вывод прошивки как в
терминале.

⚠️ Опасно. В CLI команды уходят полётнику напрямую и не проверяются
тулой
— часть из них меняет конфигурацию немедленно. Команда save
записывает EEPROM и перезагружает полётник — связь по Serial при этом
обрывается. Не запускайте save/defaults не понимая, что делаете.

Вход и выход

  • «Войти в CLI» — единственный способ начать сессию (требует подключения на
    вкладке «Обзор»). Кнопка отправляет байт # — так INAV/Betaflight
    переключаются в CLI; тула ждёт приглашение (строку #) и открывает консоль.
    Пока CLI активна, остальные вкладки временно не читают и не пишут MSP
    (порт занят текстовым протоколом) — они просто ничего не делают до выхода,
    ошибка честная, а не тихое зависание.
  • Выход — любое из трёх: команда exit (в поле ввода), кнопка «Выйти из
    CLI» или уход с вкладки «CLI» на любую другую. Все три восстанавливают
    MSP-режим одинаково.
  • Отключение связи (кнопка «Отключить», обрыв USB, реакция на save) тоже
    гарантированно возвращает инструмент в исходное состояние — зависших
    «полу-CLI» сессий не остаётся.

Консоль

Монопространственный прокручиваемый вывод + поле ввода: Enter отправляет
команду, ↑/↓ листают историю введённых команд текущей сессии (без
дублирования подряд идущих повторов). Кнопка «Отправить» дублирует Enter для
доступности.

Хелперы отправляют готовые команды одним кликом:

  • diff all — показать несовпадающие с дефолтом настройки (полный бэкап
    конфигурации в текстовом виде);
  • dump — полный дамп текущей конфигурации;
  • saveза отдельным чекбоксом подтверждения («Понимаю: save
    запишет EEPROM и перезагрузит полётник...») — кнопка неактивна, пока чекбокс
    не отмечен. После отправки инструмент сам закрывает порт (не дожидаясь
    события от браузера) — соединение и так обрывается перезагрузкой FC, честнее
    сразу вернуть интерфейс в состояние «отключено», чем показывать «на связи» с
    мёртвым портом. Если вы наберёте save вручную в поле ввода — сработает та
    же честная логика;
  • «Скачать вывод» — сохраняет весь транскрипт консоли в .txt-файл
    (Blob → локальное скачивание браузером);
  • «Очистить» — чистит только то, что показано на экране; на связь и режим
    CLI не влияет.

Отличие от тикета AD-709 (сознательное упрощение v1). В постановке
предполагалось «сохранить к борту» (запись бэкапа diff all в БД, привязка к
карточке борта в Ангаре). Инструмент /tools/inav-connect намеренно
serverless
— без единого обращения к бэкенду (BД/сторам), поэтому в v1
«сохранить к борту» заменено на локальное «скачать вывод» (файл на диск
пользователя). Привязка бэкапа к борту уже реализована в другом месте —
карточка борта в Ангаре (fc_backup.js/fc_restore.js, тикеты AD-619/623) —
и работает независимо от этой вкладки.

Сохранение как пресет (AD-853, SFHD-62)

До этого обновления сохранить пресет (см. «Мои пресеты» на вкладке
«Импорт диффа» ниже) можно было ТОЛЬКО вставив текст диффа вручную на другой
вкладке — неудобно, если вы и так уже смотрите на вывод CLI. Две кнопки рядом
с хелперами diff all/dump открывают ту же модалку «Сохранить как пресет»
(общий компонент, web/static/js/tools/inav_preset_save.js) прямо отсюда:

  • «Сохранить как пресет» — источник: то, что УЖЕ показано в консоли выше
    (например, вы только что нажали diff all/dump, или это остаток прошлой
    команды в этой же сессии). Работает и после отключения связи — как
    «Скачать вывод», пока транскрипт не очищен кнопкой «Очистить».
  • «Сохранить текущие настройки» — снимает свежий diff all с борта
    ПРЯМО СЕЙЧАС, одним кликом (без похода к хелперу diff all и обратно) —
    доступна только при активной CLI-сессии («Войти в CLI»).

В обеих модалка предлагает имя по умолчанию («Дамп с борта <дата>»), автоматически
не конфликтующее с уже сохранёнными именами (первое свободное «имя (N)»); имя
можно поменять перед сохранением. В отличие от «Мои пресеты» вкладки «Импорт
диффа» (которая сохраняет ТОЛЬКО секцию osd_layout — она же единственное, что
эта вкладка визуально показывает), отсюда сохраняются все секции, которые
CLI смогла разобрать (feature, pid/profile, mixer_profile, aux,
serial и т. д.) — категории видны в предпросмотре модалки. Служебные строки
(save/exit/defaults/batch start/batch end) и комментарии-заголовки
(# version, …) в пресет не попадают — тот же фильтр, что уже использует
восстановление из бэкапа (InavMsp.parseDiffCommands, AD-623).

Вкладка «Импорт диффа»

Просмотр разобранного CLI-диффа/дампа настроек — view-only, никакой связи
с полётником не требуется (и никакая связь по Web Serial здесь не открывается).
Вставьте текст, полученный командой diff all или dump (например, скачанный
на вкладке «CLI»), и нажмите «Разобрать» — весь разбор выполняется
полностью в браузере: ничего не отправляется на сервер, запись на плату не
выполняется. Единственное исключение — необязательное сохранение результата
как пресета (см. «Мои пресеты» ниже): оно осознанно отправляет пресет
на сервер SkyForge, полётника при этом не касается.

Пустое поле при нажатии «Разобрать» — мягкое сообщение (вставьте текст), не
ошибка.

Заголовок результата

Если в тексте нашлась строка версии (# INAV/<плата> <версия>), над результатом
показывается плата и версия прошивки.

OSD-раскладка

Строки osd_layout <профиль> <id> <x> <y> <H|V> собираются в визуальную сетку
строк×колонок — единственная секция результата, РАЗВЁРНУТАЯ по умолчанию
(основной интерес показа; остальные секции ниже свёрнуты, см. § «Таблицы
секций»):

  • Переключатель профиля — ВЫПАДАЮЩИЙ список (AD-805; было — кнопки),
    показывает только профили, РЕАЛЬНО присутствующие в дифф-тексте (не жёстко
    0/1 — прошивка может нести один профиль или больше двух); выбор в списке
    сразу перерисовывает сетку этого профиля;
  • Размер сетки — по видеосистеме (AD-805): читается osd_video_system из
    секции master дифф-текста (set osd_video_system = …) — PAL → 30×16,
    NTSC → 30×13, HDZERO/AVATAR/BFHDCOMPAT/BF43COMPAT → 53×20,
    DJI/DJIWTF/DJI_NATIVE → 60×22; видеосистема неизвестна/не прочитана —
    фолбэк по факту координат (max(x)+1 × max(y)+1, минимум 30×16), чтобы
    сетка не схлопывалась в крошечный прямоугольник, когда все элементы жмутся
    в один угол;
  • Метка ячейки — короткое имя элемента из справочника OSD_ELEMENTS
    (web/static/js/tools/inav_msp.js, тот же список, что у вкладки «OSD»); для
    элемента, которого нет в справочнике, — код #id (данные не теряются).
    Показ РЕАЛЬНЫХ глифов элементов (не только текстовой метки) — не входит в
    этот срез, возможное развитие;
  • Наведите курсор на ячейку — подсказка (title) покажет полное название,
    id и ориентацию (H/V);
  • Сетка моноширинная, на тёмной «экранной» подложке (CSS-градиент, симуляция
    кадра FPV-камеры — без внешней картинки-ассета, подложка всегда тёмная
    независимо от темы сайта), в собственном горизонтально прокручиваемом
    контейнере — широкая раскладка (до 60×22 у DJI-семейства) не раздувает
    страницу.

Сам рендер сетки (AD-1061) вынесен в общий модуль
web/static/js/tools/inav_osd_grid.js — та же сетка используется на вкладке
«OSD» для превью раскладки, прочитанной живьём с борта (см. § «Превью
раскладки» выше).

AD-1358. Оттуда же сюда приехали короткие подписи ячеек (VBAT, TIME,
ALT…) и укрупнённый масштаб по умолчанию — справочник элементов у обеих
вкладок ОДИН, и одна и та же раскладка не имеет права выглядеть на них
по-разному. Своего регулятора масштаба у «Импорта диффа» пока нет: он живёт
на вкладке «OSD», где раскладку редактируют.

Справка по настройке («?», AD-807)

В таблице Master / set рядом с именем каждой настройки стоит значок «?» —
он открывает справочник INAV той версии прошивки, что указана в дампе
(строка # INAV/<плата> <версия>), сразу на нужном параметре. Такой же значок
есть у карточки «OSD-раскладка» — он ведёт в раздел со списком элементов OSD.

  • Версия берётся из самого дампа, поэтому описание соответствует вашей
    прошивке, а не «вообще INAV»: параметры между релизами появляются, исчезают
    и меняют смысл.
  • Если версию в дампе определить не удалось, значок ведёт на актуальную
    документацию и прямо говорит об этом в подсказке — справка другой версии
    не выдаётся за вашу.
  • У элементов OSD ссылка ведёт на раздел целиком: в документации INAV они
    перечислены строками таблицы, и ссылки на отдельный элемент там не
    существует (подробности и разбор источников — docs/research/ad-807-inav-help-sources.md).

Таблицы секций

Остальные секции дифф-текста показываются компактными таблицами внутри
сворачиваемых блоков (details/summary) — свёрнуты по умолчанию сразу
после импорта (AD-805; разверните нужную кликом по заголовку); пустая секция
(в дифф-тексте её не было) не отображается вовсе:

Секция Колонки
Features имя, включено/выключено
Blackbox имя, включено/выключено
Servo сырая строка servo …
Serial / порты сырая строка serial …
Aux / режимы сырая строка aux …
Logic сырая строка logic …
Timer сырая строка timer_output_mode …
Temp sensor сырая строка temp_sensor …
Custom OSD elements сырая строка osd_custom_elements …
Профили миксера (mixer_profile) профиль, mmix, smix, значения set внутри профиля
Профили полёта (profile) профиль, значения set внутри профиля
Профили батареи (battery_profile) профиль, значения set внутри профиля
mmix/smix вне профиля сырая строка (редкий случай — дамп без явного mixer_profile)
Master / set имя, значение (set <имя> = <значение>, отсортировано по имени)

Строки, которые парсер не распознал (незнакомая команда, битый osd_layout,
set без =), не теряются — сворачиваемый блок «Не распознано (N)»
показывает их как есть, если список непуст.

Профили миксера/полёта/батареи (AD-805)

Реальные дампы несут несколько контекст-переключателей:
mixer_profile N / profile N / battery_profile N — каждый задаёт, к
какому профилю относятся последующие set/mmix/smix, до следующего
переключателя
. Раньше эти команды считались «не распознано»; теперь парсер
раскладывает их по профилям:

  • set до первого переключателя любого из трёх типов остаётся в общей
    секции Master / set, как и раньше;
  • set внутри profile N/battery_profile N относится к ЭТОМУ профилю,
    а не к общему master;
  • mmix/smix (включая mmix reset/smix reset) относятся к текущему
    mixer_profile; вне контекста mixer_profile (нестандартный/старый дамп) —
    показываются отдельной секцией «mmix/smix вне профиля»;
  • команда save в конце дампа (запись EEPROM/ребут) — служебный маркер, как
    batch start/defaults noreboot, парсером игнорируется.

Разбор текста выполняет категоризирующий парсер
web/static/js/tools/inav_diff.js (AD-799, доработан AD-805); эта вкладка —
только его визуализация (web/static/js/tools/inav_diff_view.js, AD-800,
доработана AD-805).

Разбить на пресеты (AD-779)

Дамп настроек несёт сразу всё — раскладку OSD, микшер, режимы, порты, профили.
Сохранять его одним куском неудобно: чтобы переиспользовать одну только
OSD-раскладку, пришлось бы тащить за ней всю остальную конфигурацию. Поэтому
после разбора появляется карточка «Разбить на пресеты»: разобранный дамп
раскладывается по зонам настроек, и каждая отмеченная зона сохраняется
отдельным пресетом со своим scope.

Зоны и что в них попадает:

Зона (scope) Что входит
OSD (osd) osd_layout, osd_custom_elements, настройки set osd_*
Микшер (mixer) mmix, smix, servo, блоки mixer_profile N
Режимы (modes) aux, adjrange
Порты (serial) serial
Функции (features) feature
Blackbox (blackbox) blackbox, настройки set blackbox_*
PID (pid) блоки profile N (в INAV это один контейнер и для PID, и для рейтов)
Остальное (master) прочие set, logic, timer_output_mode, temp_sensor, блоки battery_profile N

Как это работает:

  • OSD идёт первой — это основной интерес импорта; порядок в списке
    фиксированный, а не «как повезло».
  • Показываются только непустые зоны: чего в дампе не было, того в списке
    нет, и пресета из нуля строк не появится.
  • Все найденные зоны отмечены галочками по умолчанию — снимите лишние.
  • Введите название набора, и пресеты получат имена вида
    <название> — <зона>. Совпадение с уже существующим именем разводится
    суффиксом ((2), (3)), как и при сохранении с вкладки «CLI».
  • Разбивка — это разбиение, а не выборка: каждая распознанная строка дампа
    попадает ровно в одну зону, ничего не теряется и не задваивается (инвариант
    закреплён тестом tests/test_inav_diff_split.js).
  • Внутри зоны сохраняется порядок, важный для применения: команда
    переключения профиля (profile N, mixer_profile N, battery_profile N)
    всегда стоит ПЕРЕД своими set, а строки вне профиля — перед первым
    переключателем. Иначе значения при применении уехали бы в чужой профиль.
  • Нераспознанные строки в пресеты не попадают — это не готовые к отправке
    команды; их количество показано прямо в карточке, а сами строки видны в блоке
    «Не распознано (N)».
  • Зоны сохраняются последовательно. Если какая-то не сохранилась, серия
    останавливается, а сообщение честно говорит, что успело сохраниться до
    ошибки, — чтобы не сохранять повторно и не плодить дубли.

На плату по-прежнему ничего не пишется. Разбивка кладёт пресеты в вашу
библиотеку на сервере SkyForge; применение пресета на борт — отдельное
действие на вкладке «Библиотека».

Разбиение считает чистый модуль web/static/js/tools/inav_diff_split.js
поверх результата парсера AD-799/AD-805.

Мои пресеты

В отличие от остальной вкладки «Импорт диффа» (и всего инструмента в целом),
сохранение пресета обращается к серверу SkyForge — единственное место в
/tools/inav-connect, где данные уходят дальше вашего браузера. Полётник по
Web Serial при этом не трогается: пресет — это просто сохранённый текст,
привязанный к вашему аккаунту.

Эта вкладка — не единственная точка создания пресета: вкладка «CLI» несёт
свои собственные «Сохранить как пресет»/«Сохранить текущие настройки» (см.
§ «Сохранение как пресет (AD-853)» выше) — из дампа с борта или из текущих
настроек, без ручного copy/paste диффа сюда. Список ниже показывает
пресеты из ВСЕХ точек создания одинаково — сохранённый на вкладке «CLI»
появится здесь же (и наоборот).

  • Мои пресеты — список сохранённых пресетов (имя, плата — если была
    строка версии в дифф-тексте, дата создания) виден при открытии вкладки;
    кнопка «Удалить» убирает пресет насовсем (подтверждение).
  • Сохранить как пресет (эта вкладка) — появляется после успешного разбора
    диффа. Введите название и нажмите кнопку: сохраняются позиции OSD-раскладки
    (osd_layout) в виде тех же сырых CLI-строк, что были в дифф-тексте, —
    остальные секции (Features, Servo, Aux и т.д.) в эту кнопку не входят — она
    сохраняет ровно то, что вкладка показывает сеткой. Нужны остальные секции —
    это карточка «Разбить на пресеты» выше (по зонам, отдельными пресетами)
    или вкладка «CLI» (весь дамп одним пресетом). Пустое название или дифф без
    osd_layout — честное сообщение об ошибке, ничего не сохраняется.
  • Пресеты полностью приватны — видит и удаляет только владелец; чужой
    или несуществующий пресет по прямой ссылке/id — «не найдено».
  • Это НЕ применение на плату. Пресет — заготовка сырых CLI-строк, готовых
    к отправке в будущем срезе; отправка на полётник (CLI/MSP) в этом
    обновлении не реализована.

Зоны, «по умолчанию» и сетапы (AD-809)

Пресет и сетап несут два дополнительных понятия — управление ими на вкладке
«Библиотека» (см. ниже):

  • Пресет может нести зону (scope) — какому домену настроек он отвечает
    (osd, features, pid, rates, modes, serial, blackbox, mixer,
    master); пресеты без зоны (сохранённые до этого обновления, а также
    сохранённые целиком с вкладки «CLI» — дамп покрывает несколько зон сразу)
    продолжают работать как раньше. Зону проставляет «Разбить на пресеты»
    (см. выше): у куска дампа зона есть по существу, поэтому такие пресеты сразу
    попадают в нужные слоты «Библиотеки» и сетапов.
  • Пресет можно пометить «по умолчанию» для пары аккаунт+зона — на зону
    действует не более одного пресета по умолчанию одновременно (отметка
    нового «по умолчанию» снимает флаг с предыдущего).
  • Сетап — именованный набор пресетов по нескольким зонам сразу
    («моя связка OSD + PID + рейты»). Сетап живой по умолчанию: правка
    исходного пресета сразу видна при сборке строк сетапа. Заморозка
    фиксирует текущие строки снимком — дальнейшие правки исходных пресетов
    результат уже не меняют (полезно перед тем, как унести конфигурацию на
    другой борт той же платы).
  • Как и у пресетов, это только хранение — применение сетапа на плату
    (запись CLI-команд полётнику) не входит в этот срез эпика.

Хранение — модель web/models/inav_preset.py + стор
web/services/inav_preset_store.py, API POST/GET/PUT/PATCH/DELETE /api/inav/presets[/{id}] (web/routers/inav_presets.py, AD-804/AD-811/AD-935) и
модель web/models/inav_setup.py + стор web/services/inav_setup_store.py,
API POST/GET/PUT/PATCH/DELETE /api/inav/setups[/{id}] + POST .../freeze
(web/routers/inav_setups.py, AD-809/AD-935) — под тем же фича-флагом
inav_tools, что и вся страница.

Вкладка «Библиотека»

Управление сохранённой библиотекой пресетов и сетапов (AD-811, срез №2 эпика
AD-808/AD-779, поверх backend-фундамента AD-804/AD-809) — без применения на
плату
, только хранение и сборка. Список обновляется при каждом открытии
вкладки.

Мои пресеты

Список всех своих пресетов (имя, зона — чипом, дата создания; пресет без
зоны — чип «без зоны»):

  • Пресет с флагом «по умолчанию» несёт видимый бейдж «По умолчанию».
  • «Сделать дефолтным» — отмечает пресет по умолчанию для его зоны
    (POST /api/inav/presets/{id}/default) и снимает флаг с прежнего дефолта
    ТОЙ ЖЕ зоны; кнопка не показывается у уже-дефолтного пресета. Это
    единственный способ поменять флаг «по умолчанию» ПОСЛЕ создания пресета.
  • «Переименовать» (AD-935) — запрашивает новое имя и сохраняет его
    (PATCH /api/inav/presets/{id}) без удаления пресета: lines,
    categories, source и флаг «по умолчанию» не трогаются. До этого
    обновления правка сохранённого пресета означала удалить и пересоздать его
    заново, теряя сами строки — теперь это не нужно для простого
    переименования.
  • «Удалить» — убирает пресет насовсем (подтверждение).

Мои сетапы

Список всех своих сетапов (имя, число зон, дата создания; замороженный сетап
несёт бейдж «заморожен»):

  • «Показать состав» — запрашивает разрешённые строки по зонам
    (GET /api/inav/setups/{id}?resolved=1) и показывает их построчно; зона,
    чей исходный пресет удалён/недоступен, помечена бейджем «не найден»
    (пустые строки, без падения).
  • «Заморозить» — фиксирует текущие строки снимком
    (POST /api/inav/setups/{id}/freeze); бейдж «заморожен» появляется сразу.
  • «Переименовать» (AD-935) — запрашивает новое имя и сохраняет его
    (PATCH /api/inav/setups/{id}) без удаления сетапа: состав (items),
    заморозка и снимок (snapshot) не трогаются.
  • «Удалить» — убирает сетап насовсем (подтверждение).

Создать сетап

Форма ниже списка: название сетапа + по одному выпадающему списку на каждую
зону, у которой есть хотя бы один свой пресет (список пресетов зоны, дефолтный
пресет зоны предвыбран). Заполните нужные зоны (не обязательно все сразу) и
нажмите «Создать сетап» — сетап создаётся живым (POST /api/inav/setups),
заморозить его можно позже из списка выше.

Пришли сюда по ссылке «Создать новый сетап для этого борта…» с карточки
борта (AD-1048, SFHD-80) — вкладка открывается автоматически, а созданный
сетап сразу привязывается к этому борту (PUT /api/inav/aircraft/{id}/setup,
тот же вызов, что у селектора «Сетап» на карточке), после чего вы вернётесь
на карточку. Обычное создание «с нуля» (без прихода с карточки борта) не
меняется — сетап остаётся непривязанным, выбрать его на карточке борта можно
позже вручную.

MSP-команды

Команда Код Назначение
MSP_CALIBRATION_DATA 14 чтение прогресса/данных калибровки: флаги 6 позиций акселя + смещение/усиление акселя и компаса
MSP_ACC_CALIBRATION 205 запуск калибровки акселя для ТЕКУЩЕГО положения борта (без payload; отклоняется под ARM)
MSP_MAG_CALIBRATION 206 запуск калибровки компаса, таймер на борту (без payload; отклоняется под ARM)
MSP2_INAV_MIXER 0x2010 чтение конфига миксера (платформа, пресет, реверс, motorstop)
MSP2_INAV_SET_MIXER 0x2011 запись конфига миксера
MSP2_COMMON_MOTOR_MIXER 0x1005 чтение правил моторного миксера (mmix): throttle/roll/pitch/yaw по мотору, до 12 моторов (AD-855)
MSP2_COMMON_SET_MOTOR_MIXER 0x1006 запись ОДНОГО правила mmix: index + throttle/roll/pitch/yaw, ровно 9 байт (AD-1316)
MSP2_COMMON_SET_MOTOR_MIXER 0x1006 запись ОДНОГО правила mmix (index + 8 байт) — не используется в этом срезе, follow-up
MSP_MOTOR 104 чтение выходов на моторы (8×u16, µs)
MSP_SET_MOTOR 214 запись выходов на моторы — motor test (8×u16, µs)
MSP_SERVO 103 чтение текущих выходов серв (u16, µs)
MSP_SERVO_CONFIGURATIONS 120 чтение конфигов серв (min/max/middle/rate)
MSP_SET_SERVO_CONFIGURATION 212 запись конфига одного серво
MSP2_INAV_SERVO_MIXER 0x2020 чтение правил серво-миксера (smix) — актуальная команда, апгрейд взамен MSP_SERVO_MIX_RULES (AD-855)
MSP2_INAV_SET_SERVO_MIXER 0x2021 запись ОДНОГО правила smix (index + 6 байт) — не используется в этом срезе, follow-up
MSP_SERVO_MIX_RULES 241 чтение правил серво-миксера — DEPRECATED в INAV 9.1+ (используется как fallback для старых прошивок)
MSP2_INAV_LOGIC_CONDITIONS_CONFIGURED 0x203C маска настроенных логических условий (8 байт) — основной путь чтения условий (AD-1547)
MSP2_INAV_LOGIC_CONDITIONS_SINGLE 0x203B чтение ОДНОГО логического условия (index → 14 байт) — по номерам из маски (AD-1547)
MSP2_INAV_LOGIC_CONDITIONS 0x2022 пакетное чтение логических условий — DEPRECATED (fallback для прошивок без пары выше)
MSP2_PID 0x2030 чтение PID-банка (P/I/D/FF по группам, u8)
MSP2_SET_PID 0x2031 запись PID-банка (весь банк, PID_ITEM_COUNT×4 байта)
MSP_RC_TUNING 111 чтение рейтов/expo/throttle/TPA (11 байт)
MSP_SET_RC_TUNING 204 запись рейтов/expo/throttle/TPA (весь блок, 11 байт)
MSP_MODE_RANGES 34 чтение диапазонов активации режимов (4 байта/слот)
MSP_SET_MODE_RANGE 35 запись одного диапазона (index + 4 байта)
MSP_BOXNAMES 116 имена активных режимов (ARM/ANGLE/…, через ;)
MSP_BOXIDS 119 permanentId режимов (параллельно MSP_BOXNAMES)
MSP_RC 105 текущие значения RC-каналов (живая подсветка режима / монитор приёмника)
MSP_RX_CONFIG 44 чтение конфига приёмника (тип, serialrx-провайдер, пороги, 24 байта)
MSP_SET_RX_CONFIG 45 запись конфига приёмника (весь блок, ровно 24 байта)
MSP_RX_MAP 64 чтение раскладки сток-каналов (AETR, 4 байта)
MSP_SET_RX_MAP 65 запись раскладки сток-каналов (ровно 4 байта)
MSP2_COMMON_SERIAL_CONFIG 0x1009 чтение конфига портов (функции + baud, 9 байт/порт)
MSP2_COMMON_SET_SERIAL_CONFIG 0x100A запись конфига портов (весь блок, dataSize кратен 9)
MSP_FEATURE 36 чтение маски включённых фич (u32 LE)
MSP_SET_FEATURE 37 запись всей маски фич (u32 LE, dataSize == 4)
MSP_BOARD_ALIGNMENT 38 чтение ориентации платы (3× i16 деци-град: roll/pitch/yaw)
MSP_SET_BOARD_ALIGNMENT 39 запись ориентации платы (3× i16 деци-град, dataSize == 6)
MSP_SENSOR_ALIGNMENT 126 чтение выравнивания сенсоров (4× u8: gyro/acc/mag/opflow)
MSP_SET_SENSOR_ALIGNMENT 220 запись выравнивания (4× u8; gyro/acc в 9.x игнорируются, dataSize == 4)
MSP_NAME 10 чтение имени аппарата (ASCII)
MSP_SET_NAME 11 запись имени аппарата (ASCII, dataSize <= 16)
MSP2_COMMON_SETTING 0x1003 чтение настройки по имени (GPS-конфиг: gps_provider/gps_sbas_mode/…)
MSP2_COMMON_SET_SETTING 0x1004 запись настройки по имени (имя + NUL + байты значения)
MSP_RAW_GPS 106 живой статус GPS (fix, спутники, коорд., высота, скорость, курс, HDOP)
MSP_COMP_GPS 107 расстояние/направление до дома + GPS heartbeat
MSP_WP_GETINFO 20 чтение ёмкости/валидности/текущего числа вейпойнтов миссии (4 байта) — AD-944 слайс 1
MSP_WP 118 чтение ОДНОГО вейпойнта по индексу (index → wpNo/action/lat/lon/alt/p1/p2/p3/flag, 21 байт) — AD-944 слайс 1
MSP_SET_WP 209 запись вейпойнта — НЕ используется в этом срезе (AD-944 слайс 1: только чтение), следующий срез
MSP_SDCARD_SUMMARY 79 состояние SD-карты blackbox: флаги/состояние/ошибка/свободно/всего (11 байт) — AD-618
MSP_DATAFLASH_SUMMARY 70 состояние онбордовой SPI-flash: флаги/сектора/всего/занято, в БАЙТАХ (13 байт) — AD-618
MSP_DATAFLASH_READ 71 вычитка лога с онбордовой флешки: address(u32)+length(u16) → эхо адреса + сырые байты БЕЗ поля длины; MSP v2, кусок до 4 КБ — AD-943
MSP_DATAFLASH_ERASE 72 стирание онбордовой флешки целиком (без payload; прошивка отклоняет, пока пишется лог) — AD-943
MSP2_BLACKBOX_CONFIG 0x201A чтение настроек логирования: поддержка/устройство/rate_num/rate_denom/includeFlags — AD-943
MSP2_SET_BLACKBOX_CONFIG 0x201B запись настроек логирования — НЕ используется в этом срезе (AD-943: конфиг только читается)
MSP_RAW_IMU 102 живые показания акселерометра/гироскопа/компаса — 9 ЗНАКОВЫХ int16; акс. /512 → G, гироскоп уже °/с, компас — счётчики без единицы (AD-1377)
MSP_ALTITUDE 109 высота и вертикальная скорость: слитая оценка (i32, см) + вариометр (i16, см/с) + барометрическая высота (i32, см) — AD-1377
MSP_FAILSAFE_CONFIG 75 чтение failsafe-конфига (процедура, задержки, throttle, 8 байт)
MSP_SET_FAILSAFE_CONFIG 76 запись failsafe-конфига (весь блок, ровно 8 байт)
MSP_RXFAIL_CONFIG 77 чтение per-channel RX failsafe (N × [mode u8 + value u16 µs])
MSP_SET_RXFAIL_CONFIG 78 запись RX failsafe одного канала (index + mode + value, 4 байта)
MSP_OSD_CONFIG 84 чтение OSD-конфига (заголовок: видео/единицы/алармы, 14 байт + N×u16 позиций элементов)
MSP_SET_OSD_CONFIG 85 запись OSD: весь заголовок (addr 0xFF, 14 байт) или позиция одного элемента (addr = индекс + u16)
MSP_BATTERY_CONFIG 32 чтение конфига питания (пороги на ячейку ×0.1В, ёмкость/warn/crit, единица; 10 байт) — необязательный быстрый путь: снят в INAV начиная минимум с 9.1.0 (AD-903), при ошибке — фолбэк по имени (battery_capacity и др., ниже)
MSP_SET_BATTERY_CONFIG 33 запись конфига питания (весь блок, ровно 10 байт; пороги на ячейку сохраняются) — так же необязателен (AD-903), при отказе — запись по имени
MSP_BATTERY_STATE 130 чтение живого состояния батареи (напряжение, ток, mAh, банки, состояние) — только чтение
MSP2_INAV_LED_STRIP_CONFIG_EX 0x2048 чтение LED-конфигов (N×5 байт подряд, без индекса) — основной путь
MSP2_INAV_SET_LED_STRIP_CONFIG_EX 0x2049 запись одного LED (index + 5 байт) — основной путь записи (пресеты)
MSP_LED_STRIP_CONFIG 48 legacy read-only fallback — только сигнал наличия ленты, формат не разбирается
MSP_LED_COLORS 46 чтение палитры (16×4 байта: h/s/v) — только для показа
MSP2_INAV_STATUS 0x2000 board-aware (AD-705): маска реально обнаруженных сенсоров (sensorStatus, u16 на смещении 4); AD-848: armingFlags (u32 на смещении 9) — гейт калибровки/motor test по ARM + подсказка о калибровке сенсоров

⚗️ Допущения LED-кодека (не выверены на реальном железе): (1) led_function
реализован как прямой id (0=COLOR, 1=FLIGHT_MODE, 2=ARM_STATE, …), а не
битовая маска; (2) упаковка битфилда led_direction (6 бит) страдлит байты
b3/b4 EX-формата — это предположение о LSB-first аллокации битфилдов
GCC/ARM. Вся бит-упаковка изолирована в одной функции packLedConfig
(web/static/js/tools/inav_msp.js) — единственная точка правки, если формат
уточнится.

Точные пороги на ячейку (vbat_*_cell_voltage, сотые В), калибровка вольтметра
(vbat_scale) и датчика тока (current_meter_scale/current_meter_offset), а
также источники (vbat_meter_type/current_meter_type) читаются и пишутся по
имени через MSP2_COMMON_SETTING / MSP2_COMMON_SET_SETTING.

См. также