DMR-данные (SMS) на TYT MD-UV380 под OpenGD77
Восстановлено из транскрипта сессии после потери рабочего дерева на сервере сборки. Что внутри: - четыре новых модуля прошивки (приём, сборка исходящего, меню Messages); - правки существующих файлов в виде скриптов, с порядком применения; - инструменты стенда: снятие экрана рации по USB, дамп кадров, эталонная сборка пакета; - NOTES.md: что проверено в эфире, что не доделано, где грабли. Работало в эфире в августе 2026: данные ходят в обе стороны в режиме хотспота, рация принимает SMS и показывает на экране. Отправка собрана и сверена с эталоном сервера побайтово, но в эфире не проверялась. Claude-Session: https://claude.ai/code/session_01GJtvG5WwqYNe1b7s9LLtgy
Этот коммит содержится в:
@@ -0,0 +1,88 @@
|
||||
# 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 прямо запрещает коммерческое использование и включение в проекты, которые
|
||||
такое использование допускают. Эти правки - производная работа с теми же условиями.
|
||||
Ссылка в новой задаче
Block a user