• v1.5.59 7ab06c1098

    danik released this 2026-08-03 17:38:11 +03:00 | 59 commits to main since this release

    Исправления:

    • Текст статусов и кнопок в шторке переведён на основной контрастный стиль уведомления; области нажатия остаются прозрачными и не затеняются.
    • Одна команда GPS ON/OFF теперь выполняет четыре ограниченных цикла по пять идемпотентных записей, то есть включает эквивалент повторного нажатия.
    • После команды по-прежнему выполняется автоматическая свежая проверка состояния GPS.

    APK SHA-256: 0dd91c6255f1711b1a1133725adcdd4194a95462970c3074f6c0eecbfbe5ba93

    Downloads
  • v1.5.58 23e6ec7ea2

    danik released this 2026-08-03 17:04:54 +03:00 | 61 commits to main since this release

    Что исправлено

    • Действия FCC и GPS в развёрнутом уведомлении больше не затемняются системной Material-подложкой DJI SystemUI.
    • Пять notification actions переведены с системных Button на прозрачные кликабельные подписи с notification text style.
    • ID, PendingIntent, расположение строк и логика команд FCC/GPS не менялись.

    Проверки

    • Локально прошли testDebugUnitTest, lintDebug, assembleDebug и assembleRelease.
    • GitHub Actions build, unit tests, Android lint и signed-release завершились успешно на exact commit 23e6ec7.
    • APK: com.freefcc.app, versionName 1.5.58, versionCode 75.
    • SHA-256 APK: 72410b5161c6472a7bf062557f8d5104378407bc9fdadf842313b1a95ce0c089.
    • Signing certificate SHA-256 совпадает с v1.5.57: 1e50efc760a23d71f5ec57f855af4b8c42c21fea6da9122889d59b3b23b890ce.

    Аппаратная проверка

    В этой сессии подключённого Android-пульта не было. Окончательно подтвердить отсутствие затемнения нужно после установки APK на контроллер.

    Downloads
  • v1.5.57 2f8f454139

    danik released this 2026-08-03 16:33:30 +03:00 | 63 commits to main since this release

    Что изменилось

    • GPS ON/OFF теперь дублирует полное срабатывание. Одно нажатие выполняет два bounded-цикла по пять 03:F9-записей с паузой 100 мс между записями и 250 мс между циклами. После обеих серий запускается одна fresh-port проверка статуса.
    • GPS ON/OFF добавлены в шторку. В развёрнутом постоянном уведомлении под режимами FCC появился второй ряд. После команды приложение автоматически делает до трёх fresh-port readback-попыток и показывает подтверждённое, неизвестное или несовпавшее состояние.
    • Новая иконка приложения. Launcher icon заменён на настоящий Skylab-логотип из проекта skylab_hub.
    • В README добавлены адреса добровольной поддержки автора.

    Проверки

    • Локально прошли testDebugUnitTest, lintDebug, assembleDebug и assembleRelease.
    • GitHub Actions: build, unit tests, Android lint и signed-release завершились успешно на exact commit 2f8f454.
    • APK: com.freefcc.app, versionName 1.5.57, versionCode 74.
    • SHA-256 APK: 7e968d39bdc8dbee641b3570f473e5f890c2ae655052594a20c01372816d8198.
    • Signing certificate SHA-256 совпадает с v1.5.56: 1e50efc760a23d71f5ec57f855af4b8c42c21fea6da9122889d59b3b23b890ce.

    Аппаратная проверка

    В этой сессии подключённого Android-пульта не было. Физическое срабатывание GPS OFF после двойного цикла и внешний вид развёрнутого уведомления нужно подтвердить на контроллере.

    Downloads
  • v1.5.56 4d91fabfa3

    danik released this 2026-07-28 16:46:03 +03:00 | 67 commits to main since this release

    Что изменилось

    Проверено на живом RC2 rc331 с Avata 360 через LAN-мост.

    Код модели больше не переживает смену дрона. Во вкладке Info висела пара DJI Avata 360 + WM169. Имя уже читалось верно, а код остался от предыдущей версии, где таблица укорачивала название до DJI Avata и подставляла код именно той модели. Запись пустого кода прежнюю запись не стирала.

    Теперь имя и код — одна пара. Сохранённый код удаляется, если он противоречит текущему имени или если имя сменилось, а нового кода не пришло.

    Название читается и внутри фразы. Подключено: DJI Avata 360 распознаётся целиком, а не только когда именем подписан весь элемент интерфейса.

    Таблица больше не может укоротить имя с экрана. DJI Avata не подставляется вместо DJI Avata 360.

    Кнопка Refresh aircraft identity больше не пишет «модель не найдена», когда имя уже прочитано с экрана, а пульт просто не публикует код.

    Что показала проверка на борту

    На RC2 rc331 кадр 00:82 публикует сам пульт (sender=0x0d, payload rc331), а борт свой product code в поток не отдаёт: ни пассивно на 40009/8901/40007, ни в ответ на read-only запросы 00:01 и 00:82. Серийник при этом читается штатно.

    Поэтому для Avata 360 на этом пульте код остаётся пустым — это правильное поведение, а не ошибка чтения: название берётся с экрана DJI Fly, и оно верное.

    Downloads
  • v1.5.55 c2f59a1505

    danik released this 2026-07-27 22:29:03 +03:00 | 68 commits to main since this release

    Что изменилось

    Название дрона берётся с экрана дословно. Раньше текст экрана сверялся со списком известных моделей, и дрон, которого в списке нет, отбрасывался — хотя его имя было прямо на экране. На Avata 360 это и произошло: кода WA530 в таблице нет, серийник считывался, а название оставалось пустым.

    Теперь принимается любое имя вида DJI … длиной до трёх слов, даже если приложение о такой модели никогда не слышало.

    Чтобы за модель не приняли посторонний текст, имя засчитывается в двух случаях: им целиком подписан элемент интерфейса, либо оно стоит в одной строке с product code. Продукты DJI, которые не являются дроном, отсеиваются по первому слову — Fly, Care, Store, Goggles, RC, Osmo и другие.

    Таблица кодов осталась запасным вариантом. Она даёт название, когда на экране виден только код, и восстанавливает код по однозначному названию.

    Порядок работы не изменился с 1.5.54: порты не открываются, пока экран не назовёт дрон; пассивное чтение 00:82/03:34 запускается один раз на модель, когда имя есть, а кода на экране нет.

    Downloads
  • v1.5.54 e90c4e4b6b

    danik released this 2026-07-26 23:46:40 +03:00 | 69 commits to main since this release

    Что изменилось

    Модель дрона берётся с экрана DJI-приложения. DJI Fly и Pilot 2 печатают и product code, и название, поэтому для заполнения вкладки Info не нужно открывать ни один DUML-порт.

    Приложение больше не опрашивает порты вслепую. Раньше при незнакомой модели фоновая служба каждые 5 секунд обходила шесть портов, включая 40007 под общим локом с LED, GPS и FCC. С выключенным дроном это продолжалось всё время, пока открыто DJI-приложение, хотя отвечать было некому. Теперь пассивное чтение 00:82/03:34 запускается только когда экран уже назвал дрон, но не показал его код, — и ровно один раз на модель. Кнопка Refresh aircraft identity работает как прежде, по требованию.

    Локальная таблица кодов вместо одной зашитой модели. Раньше в коде был единственный WM265T, остальные известные коды показывались без названия. Теперь:

    WA233 Air 3 · WA234 Air 3S · WA341 Mavic 4 Pro · WA140 Mini 4 Pro · WA150 Mini 5 Pro · WA141 Flip · WA520 Avata 2 · WA521 Neo · WM162 Mini 3 Pro · WM169 Avata · WM260 Mavic 3 · WM2605 Mavic 3 Classic · WM261 Mavic 3 Pro · WM265E/M/T Mavic 3E/3M/3T · WM240/245/246/247 — платформа Mavic 2.

    Таблица читается в обе стороны: код с экрана даёт название, а название — код, если оно однозначно. Общее имя DJI Mavic 2 намеренно не превращается обратно в код: их четыре.

    Совпадение по названию стало строгим. Выбирается самое длинное имя и только по границам слова, поэтому DJI Air 3S больше не определяется как DJI Air 3, а NEON на экране не превращается в DJI Neo.

    Экран Pilot 2 читается наравне с DJI Fly. Для WM265T на RM510 в документации зафиксировано, что 03:34 без активного Pilot 2 не приходит, поэтому название берётся с экрана или из таблицы по стабильному коду.

    Downloads
  • v1.5.53 7509f2430f

    danik released this 2026-07-26 23:03:04 +03:00 | 71 commits to main since this release

    • Определение любых безопасных product code модели дрона.
    • Info показывает точный код, если DJI Fly не передал название.
    Downloads
  • v1.5.51 6f998c7637

    danik released this 2026-07-26 21:29:28 +03:00 | 76 commits to main since this release

    Что изменилось

    Battery optimization. При первом запуске приложение один раз просит исключить себя из списка оптимизации батареи. Auto FCC и LAN-мост живут внутри процесса приложения, поэтому doze останавливал их молча. Запрос не повторяется: дальше разрешение выдаётся вручную из настроек Android.

    LAN Control Bridge выключен по умолчанию. Мост больше не поднимается сам при старте — включается только тумблером во вкладке Log. У тех, кто уже включал его раньше, сохранённое значение остаётся прежним.

    Что проверено на живом стенде

    Air 3S + RC Pro 2, read-only через wrapped порт 40007:

    • 03:E0 → в таблице 0 1513 параметров, формат 2017 (E0/E1/E2/E3);
    • 03:E1 возвращает имя парой — короткое и полное: forearm_led_ctrl|g_config.misc_cfg.forearm_lamp_ctrl;
    • 03:F7 по хешу lamp → def=0xEF, min=0, max=255, то есть 0xEF это заводской дефолт маски, а не «состояние ON»;
    • формат 2015 (03:F0) борт игнорирует.

    Индексный путь 03:E1/E2/E3 работает без хеша — это снимает зависимость от имени параметра, которое у разных моделей может отличаться. Разбор и LED-группа таблицы (индексы 361–366) — в docs/FLYC_PARAM_TABLE.md.

    Ни одной записи параметров при проверке не выполнялось.

    Downloads
  • v1.5.50 aa024985bf

    danik released this 2026-07-25 16:24:07 +03:00 | 90 commits to main since this release

    Что изменилось

    • FCC core сокращён с 17 до 14 DUML-кадров: удалены обе записи 06:72, которые на RC2 являются set stick value lock, и неподтверждённая установка максимальной высоты.
    • Удалены неподтверждённые CE restore profile/API/LAN action и устаревший keepalive-профиль.
    • Периодический режим теперь отправляет один 07:19 раз в 5 секунд и повторно применяет FCC-профиль только при фактическом несовпадении региона.
    • Добавлен regression-тест, запрещающий возвращение stick-lock и max-height кадров в FCC-профиль.
    • Документация синхронизирована с анализом прошивок RC2, RC Pro 2, RM510, WA234, WA341, WA530 и WM260; границы статических выводов по opaque-командам указаны явно.

    Проверка

    • testDebugUnitTest, Android lint и release/R8 сборка прошли в GitHub Actions.
    • APK подписан тем же сертификатом, что и v1.5.49, и устанавливается как обновление.
    • versionName=1.5.50, versionCode=67.
    Downloads
  • v1.5.49 ab6f3a2934

    danik released this 2026-07-24 21:35:21 +03:00 | 114 commits to main since this release

    Что изменилось

    • Country flow сначала читает 07:19 и отправляет 07:30=AU только при несовпадении.
    • Периодические логи теперь фиксируют изменения write/read completion и matching ACK.
    • README и справка по fcc_keepalive.json синхронизированы с фактической реализацией.

    APK собран GitHub Actions и подписан тем же сертификатом, что и предыдущие релизы.

    Downloads