DMR-данные (SMS) на TYT MD-UV380 под OpenGD77
Восстановлено из транскрипта сессии после потери рабочего дерева на сервере сборки. Что внутри: - четыре новых модуля прошивки (приём, сборка исходящего, меню Messages); - правки существующих файлов в виде скриптов, с порядком применения; - инструменты стенда: снятие экрана рации по USB, дамп кадров, эталонная сборка пакета; - NOTES.md: что проверено в эфире, что не доделано, где грабли. Работало в эфире в августе 2026: данные ходят в обе стороны в режиме хотспота, рация принимает SMS и показывает на экране. Отправка собрана и сверена с эталоном сервера побайтово, но в эфире не проверялась. Claude-Session: https://claude.ai/code/session_01GJtvG5WwqYNe1b7s9LLtgy
Этот коммит содержится в:
@@ -0,0 +1,3 @@
|
||||
- [Где лежат исходники OpenGD77](opengd77-sources-location.md) — не на GitHub, а zip'ами на сайте; для UV380 нужна ветка MDUV380_DM1701, не MK22.
|
||||
- [Почему хотспот не шлёт SMS](uv390-dmr-data-path.md) — диагноз в hotspot.c/HR-C6000.c и готовый рабочий образец передачи data-burst.
|
||||
- [Стенд для UV390](uv390-test-bench.md) — .200 сборка, .84 рация-модем + airtest, .85 эталонный приёмник.
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
name: opengd77-sources-location
|
||||
description: Где лежат исходники OpenGD77 и почему их нет на GitHub; какая ветка нужна для MD-UV380
|
||||
metadata:
|
||||
type: reference
|
||||
---
|
||||
|
||||
Исходники OpenGD77 публикуются ZIP-архивами на https://www.opengd77.com/downloads/releases/ , а НЕ на GitHub — авторы намеренно не выкладывают актуальный код в git (форки на GitHub вроде open-ham/OpenGD77 — устаревшие слепки).
|
||||
|
||||
Семейства раций разделены по каталогам:
|
||||
- `MK22/` — NXP MK22: GD-77, DM-1801, RD-5R. MD-UV380 там НЕТ.
|
||||
- `MDUV380_DM1701/` — STM32F405: **TYT MD-UV380/UV390**, DM-1701, RT-84. Это нужная ветка.
|
||||
|
||||
Релизы MDUV380_DM1701 и их GitID (зашит в .bin, виден в строке версии hotspot):
|
||||
- R20231231 — OpenGD77_HS v0.1.17, GitID #140939c
|
||||
- R20240908 — v0.1.18, #9947546
|
||||
- R20260131 — v0.1.18, #5797626 (самый свежий)
|
||||
|
||||
`GITVERSION` в сборке = `git rev-parse --short HEAD` дерева сборщика, поэтому чужой GitID (напр. #2dc33f6) в публичных репозиториях не ищется — это личный билд.
|
||||
|
||||
Лицензия — НЕ GPLv2. BSD-подобная, но пункт 4 прямо запрещает коммерческое использование и включение в проекты, допускающие коммерческое использование. Для личных раций ограничений нет.
|
||||
|
||||
Особенность сборки: исходник не содержит AMBE-кодек (мержится загрузчиком из официальной прошивки). Перед сборкой обязателен шаг `prepare` → `MDUV380_firmware/tools/codec_cleaner.Linux -C` → создаёт `application/source/linkerdata/codec_bin_section_1.bin`. Скрипт `prepare` идёт с CRLF-переносами и под Linux падает — вызывать codec_cleaner напрямую.
|
||||
|
||||
Связано: [[uv390-dmr-data-path]]
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: uv390-dmr-data-path
|
||||
description: Почему OpenGD77 в режиме хотспота не передаёт SMS/данные и где в коде это чинится
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
|
||||
Задача (с августа 2026): научить OpenGD77 на MD-UV380 в режиме хотспота проводить пакетные ДАННЫЕ (SMS, координаты), а не только голос. Рация досталась Виктору уже с прошивкой OpenGD77_HS v0.1.18 — он её не собирал.
|
||||
|
||||
Диагноз (дерево R20260131, `MDUV380_firmware/application/source/`):
|
||||
- `functions/hotspot.c:2071` `hotspotModeReceiveNetFrame` декодирует кадр ТОЛЬКО как голосовой LC. Всё нераспознанное (включая SMS) уходит в `else` → `storeNetFrame` (2026) → копируется в аудиобуфер как звук. Отсюда симптом «модем ACK'ает кадры, в эфире ничего».
|
||||
- В `hotspot.h` определены только `DT_VOICE_LC_HEADER` и `DT_TERMINATOR_WITH_LC` — типов данных нет как класса. В старой MK22-ветке был закомментированный switch по DT_*, в актуальной STM32-ветке он удалён совсем.
|
||||
- На приёме `hrc6000SysReceivedDataInt` (HR-C6000.c:939) классифицирует кадр по `reg_0x51` (`rxSyncClass` 2=data, `rxDataType`), но payload данных с чипа не читает вообще (для голоса читает 27 байт AMBE с page 0x03).
|
||||
|
||||
Ключ к решению — механизм передачи данных В ПРОШИВКЕ УЖЕ РАБОТАЕТ:
|
||||
`HR-C6000.c:1889` `DMR_STATE_REPEATER_WAKE_1` шлёт настоящий CSBK-burst:
|
||||
```
|
||||
SPI0WritePageRegByteArray(0x02, 0x00, payload, LC_DATA_LENGTH); // 12 байт на page 0x02
|
||||
SPI0WritePageRegByte(0x04, 0x50, 0x30); // reg 0x50 = селектор типа burst'а (DT<<4), 0x30 = CSBK
|
||||
SPI0WritePageRegByte(0x04, 0x41, 0x80); // передать в следующем слоте
|
||||
```
|
||||
Другие типы: Voice LC Header 0x10, Terminator 0x20, Data Header 0x60, rate 1/2 0x70, rate 3/4 0x90.
|
||||
Размерность сходится: CSBK, Data Header и rate 1/2 — все 96 бит = 12 байт = `LC_DATA_LENGTH`. Чип сам накладывает CRC/FEC.
|
||||
|
||||
Мост к MMDVM тоже уже есть: `BPTCencode`/`BPTCdecode` в `hotspot.c` (545/551). MMDVMHost шлёт полный 33-байтный burst, чипу нужны 12 байт:
|
||||
- TX: burst хоста → BPTCdecode → 12 байт → page 0x02 + reg 0x50
|
||||
- RX: 12 байт с чипа → BPTCencode → + slot type + sync → `MMDVM_DMR_DATA2` хосту
|
||||
|
||||
Главный нерешённый вопрос: с какой страницы/регистра C6000 читать ПРИНЯТЫЙ data-payload.
|
||||
|
||||
Связано: [[opengd77-sources-location]], [[uv390-test-bench]]
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
name: uv390-test-bench
|
||||
description: Машины и инструменты стенда для проверки прошивки UV390 (доступы, роли)
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
|
||||
Стенд для работы над DMR-данными на MD-UV380. Вход везде viktor / Adelina@2015 (ssh).
|
||||
|
||||
- **10.0.0.200** (ubuntu-server, x86_64) — машина сборки. Тулчейн `arm-none-eabi-gcc` 14.2.1 + objcopy/size/make. Исходники релизов в `~/ogd77rel/` (скачаны официальные zip), рабочее дерево `~/ogd77rel/uv_src/OpenGD77_MDUV380_DM1701_20260130`. Устаревший клон MK22-ветки — `~/OpenGD77` (НЕ то дерево, см. [[opengd77-sources-location]]).
|
||||
- **10.0.0.84** (pi5, aarch64) — к нему по USB подключена рация-модем (`/dev/ttyACM0`, USB id `1fc9:0094 OpenMDUV380`). Здесь же `~/airtest` — инструмент на Go: шлёт в модем голос и SMS-передачи, печатает ACK/NAK модема. Флаги: `--port --dst --src --cc --slot --rx --text --bursts --secs`, команды `sms`/`voice`/`listen`. Прошивать рацию можно прямо отсюда.
|
||||
- **10.0.0.85** (radiostar-hotspot, armv7l) — эталонный приёмник MMDVM_HS Dual с прошивкой RadioStar-HS: журналит каждый принятый кадр с типом. Панель на порту 8080 (снаружи может быть закрыт).
|
||||
|
||||
Условия эфирных опытов: DMO симплекс, 433.525 МГц, CC1, слот 2.
|
||||
|
||||
Прошивка рации: `MDUV380_firmware/tools/opengd77_stm32_firmware_loader.py` — работает через DFU и умеет ТОЛЬКО запись, чтения/бэкапа прошивки нет. Откат обеспечен официальным образом `OpenMDUV380.bin` из релиза. `python_tools.zip` с сайта содержит утилиты только для GD-77 (MK22), для STM32 они не подходят.
|
||||
|
||||
Виктор разрешил шить тестовые сборки свободно, но требует делать бэкап.
|
||||
|
||||
Соседние сессии по этому проекту: **DMRhub** (стенд и измерения), **nextdmr-81** (прошивка RadioStar-HS Dual — эталон поведения).
|
||||
|
||||
Связано: [[uv390-dmr-data-path]]
|
||||
Ссылка в новой задаче
Block a user