DMR-данные (SMS) на TYT MD-UV380 под OpenGD77
Восстановлено из транскрипта сессии после потери рабочего дерева на сервере сборки. Что внутри: - четыре новых модуля прошивки (приём, сборка исходящего, меню Messages); - правки существующих файлов в виде скриптов, с порядком применения; - инструменты стенда: снятие экрана рации по USB, дамп кадров, эталонная сборка пакета; - NOTES.md: что проверено в эфире, что не доделано, где грабли. Работало в эфире в августе 2026: данные ходят в обе стороны в режиме хотспота, рация принимает SMS и показывает на экране. Отправка собрана и сверена с эталоном сервера побайтово, но в эфире не проверялась. Claude-Session: https://claude.ai/code/session_01GJtvG5WwqYNe1b7s9LLtgy
Этот коммит содержится в:
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
"""SMS step 3: show a received message on the screen and beep."""
|
||||
W = "/home/viktor/ogd77rel/uv_src/OpenGD77_MDUV380_DM1701_20260130/MDUV380_firmware/application"
|
||||
p = W + "/source/applicationMain.c"
|
||||
s = open(p).read()
|
||||
|
||||
if "smsGetLatest" in s:
|
||||
print("already showing messages")
|
||||
raise SystemExit(0)
|
||||
|
||||
old = "\t\tsmsTick();// turn received data bursts into messages\n"
|
||||
assert old in s, "smsTick call not found"
|
||||
|
||||
new = """\t\tsmsTick();// turn received data bursts into messages
|
||||
|
||||
\t\tif (smsHasUnread())
|
||||
\t\t{
|
||||
\t\t\tconst smsMessage_t *msg = smsGetLatest();
|
||||
|
||||
\t\t\tif (msg != NULL)
|
||||
\t\t\t{
|
||||
\t\t\t\tchar smsLine[SMS_MAX_TEXT_LENGTH + 16];
|
||||
|
||||
\t\t\t\tsnprintf(smsLine, sizeof(smsLine), "%u: %s", (unsigned int)msg->srcId, msg->text);
|
||||
\t\t\t\tuiNotificationShow(NOTIFICATION_TYPE_MESSAGE, NOTIFICATION_ID_MESSAGE, 10000, smsLine, true);
|
||||
\t\t\t\tsoundSetMelody(MELODY_ACK_BEEP);
|
||||
\t\t\t\tsmsMarkRead();
|
||||
\t\t\t}
|
||||
\t\t}
|
||||
"""
|
||||
|
||||
s = s.replace(old, new, 1)
|
||||
open(p, "w").write(s)
|
||||
print("applicationMain.c: incoming SMS is shown and beeps")
|
||||
Ссылка в новой задаче
Block a user