Files
viktor b5a8e92e45 DMR-данные (SMS) на TYT MD-UV380 под OpenGD77
Восстановлено из транскрипта сессии после потери рабочего дерева на сервере сборки.

Что внутри:
- четыре новых модуля прошивки (приём, сборка исходящего, меню Messages);
- правки существующих файлов в виде скриптов, с порядком применения;
- инструменты стенда: снятие экрана рации по USB, дамп кадров, эталонная сборка пакета;
- NOTES.md: что проверено в эфире, что не доделано, где грабли.

Работало в эфире в августе 2026: данные ходят в обе стороны в режиме хотспота,
рация принимает SMS и показывает на экране. Отправка собрана и сверена с эталоном
сервера побайтово, но в эфире не проверялась.

Claude-Session: https://claude.ai/code/session_01GJtvG5WwqYNe1b7s9LLtgy
2026-09-11 02:39:24 +09:00

6.8 KiB

OpenGD77 для TYT MD-UV380: DMR-данные (SMS)

Доработка прошивки OpenGD77, которая учит рацию передавать и принимать текстовые сообщения DMR. В апстриме этого нет - в официальном README прямо сказано, что отправка и приём SMS не поддерживаются.

Базовый исходник: официальный релиз R20260131, ветка MDUV380_DM1701, скачивается с opengd77.com/downloads/releases/MDUV380_DM1701/R20260131/

Подробное описание - что сделано, что проверено в эфире, где ловушки - в NOTES.md. Прочитать до начала работы, там собраны грабли, на которые ушла большая часть времени.

Важно про состояние этого репозитория

Рабочее дерево с уже применёнными правками было утрачено (сервер сборки почистили через месяц после работы). Здесь лежит восстановленное: новые модули целиком плюс правки существующих файлов в виде скриптов. Собранной прошивки в репозитории нет, её нужно получить, применив правки к официальному релизу.

Код проверялся в эфире в августе 2026 и работал. После восстановления сборка заново не проверялась - это первое, что стоит сделать.

Что где лежит

firmware/application/source/functions/sms.c          новый модуль: приём, разбор, хранение
firmware/application/include/functions/sms.h         его заголовок
firmware/application/source/functions/smsSend.c      сборка исходящего пакета
firmware/application/source/user_interface/menuMessages.c   экраны меню Messages
patches/                правки существующих файлов прошивки
tools/                  вспомогательные инструменты для стенда
docs/memory/            рабочие заметки по ходу разработки

Как применить к чистому релизу

Распаковать официальный релиз, положить четыре новых файла по указанным путям, затем прогнать скрипты из patches/ по порядку. Каждый скрипт содержит описание того, что и зачем меняет, и проверяет, что правка ещё не применена.

Порядок важен, часть правок опирается на предыдущие:

  1. 00-inline-edits.md - правки, сделанные командами (передача данных в режиме хотспота, приём данных с чипа, типы кадров, слияние кодека). Это не скрипт, а список команд с пояснениями, применять вручную по порядку.
  2. patch_rx1.py, patch_rx2.py, patch_rx3.py - приём данных в режиме хотспота и отдача их управляющей программе.
  3. patch_txclean.py - убрать голосовые заголовки перед кадрами данных.
  4. patch_notimeout.py - не выходить из режима модема по молчанию хоста.
  5. patch_txfix.py - обязательно, иначе ломается обычная голосовая передача. Подробности в NOTES.md, раздел про правку передачи.
  6. patch_sms1.py - захват кадров данных в обычном режиме рации.
  7. patch_sms2.py - запуск сборщика из главного цикла.
  8. patch_store.py - хранилище Inbox/Outbox.
  9. patch_show.py - показ принятого сообщения на экране (заменяет patch_sms3.py, который использовал ненадёжный способ вывода).
  10. patch_menufix.py - меню Messages целиком (переписывает menuMessages.c на штатную навигацию, исправляет номер языковой строки).
  11. patch_tx.py - очередь передачи и отправка данных в обычном режиме.
  12. patch_ui_send.py - пункт New msg и кнопка «Ответить».
  13. patch_usbexit.py - выход из режима модема при отсоединении USB.

Отладочные, применять по необходимости: patch_diag.py (счётчики на экране, мешают показу сообщений), patch_diag4.py (счётчики в память, читаются по USB - этот вариант надёжнее).

Сборка и прошивка описаны в NOTES.md.

Инструменты

tools/screen_grab.py снимает экран рации по USB и сохраняет PNG. Удобно, когда нужно увидеть, что показала рация, а рядом никого нет. Осторожно с частотой опроса: частые запросы подпирают главный цикл прошивки и мешают приёму.

tools/dmr_dump.py слушает порт рации в режиме модема и печатает каждый принятый кадр целиком, в шестнадцатеричном виде. Нужен, когда надо понять, что реально пришло из эфира, а не что показал разбор.

tools/sms_build_test.py - эталонная сборка исходящего пакета на Python. Ею проверялась реализация на C: оба варианта дают байт в байт то же, что сервер. Если будете менять формат, сверяйтесь этим скриптом.

Лицензия

Исходный код OpenGD77 распространяется под лицензией авторов проекта: BSD-подобная, но пункт 4 прямо запрещает коммерческое использование и включение в проекты, которые такое использование допускают. Эти правки - производная работа с теми же условиями.