# OpenGD77 для TYT MD-UV380: DMR-данные (SMS) Доработка прошивки OpenGD77, которая учит рацию передавать и принимать текстовые сообщения DMR. В апстриме этого нет - в официальном README прямо сказано, что отправка и приём SMS не поддерживаются. Базовый исходник: официальный релиз **R20260131**, ветка `MDUV380_DM1701`, скачивается с opengd77.com/downloads/releases/MDUV380_DM1701/R20260131/ Подробное описание - что сделано, что проверено в эфире, где ловушки - в [NOTES.md](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 прямо запрещает коммерческое использование и включение в проекты, которые такое использование допускают. Эти правки - производная работа с теми же условиями.