Три формата DMR-SMS: Motorola TMS, Hytera и ETSI UDT
Текстовые сообщения в DMR — одна из тех функций, где «работает у соседа, не работает у меня» встречается чаще всего. Причина не в настройках и не в сети: в эфире сосуществуют три несовместимых формата, и рации разных вендоров говорят на разных. Разберём, чем они отличаются и что из этого следует на практике.
Коротко: три мира
| Формат | Кто использует | Транспорт |
|---|---|---|
| Motorola TMS | Motorola и большинство любительских сетей | IP/UDP внутри DMR, порт 4007 |
| Hytera | рации Hytera | собственный стек протоколов |
| ETSI UDT | стандартный путь, встречается реже | штатные блоки данных DMR |
Де-факто стандартом у радиолюбителей стал первый: сети, шлюзы и открытые прошивки ориентируются на него.
Motorola TMS: как устроено сообщение
Сообщение едет как обычный UDP-пакет на порт 4007 внутри радиоканала. Полезная нагрузка разбирается так:
| Смещение | Поле | Смысл |
|---|---|---|
| 0–1 | Длина | два байта, старший первым |
| 2 | Тип и флаги | младшие пять бит — тип; бит 0x40 — «нужно подтверждение» |
| 3 | Резерв | для текста ноль |
| 4 | Идентификатор | младшие пять бит — номер, по нему сопоставляется подтверждение |
| 5 | Длина префикса | сколько байт пропустить до текста |
| 6+ | Текст | UTF-16, младший байт первым |
Тип 0x00 — обычный текст, 0x1F — подтверждение доставки. Само подтверждение короткое, пять байт: длина, тип и номер сообщения, на которое отвечаем.
Подтверждения: почему «доставлено» не всегда правда
Флаг «нужно подтверждение» ставит отправитель. Если рация-получатель приняла сообщение, она отвечает коротким подтверждением с тем же номером. Но:
- подтверждение означает «принято радиостанцией», а не «прочитано человеком»;
- если получателя нет в эфире, сообщение просто не доходит: очереди в стандарте нет;
- групповые сообщения не подтверждаются в принципе — некому.
Именно поэтому в DMRhub входящие складываются в диалоги в приложении и кабинете: даже если рация была выключена, текст не теряется и его видно позже.
ETSI UDT: стандартный путь
В стандарте для коротких данных предусмотрен механизм UDT, где четыре бита задают формат содержимого. Поддерживаются, в частности: двоичные данные, адрес абонента или группы, двоично-десятичный код, семибитная и восьмибитная кодировки, координаты в формате NMEA, IP-адрес, шестнадцатибитный Unicode и протокол определения местоположения.
Ограничения: заголовок занимает 10 октетов, к нему добавляется не более четырёх блоков данных. То есть одно UDT-сообщение — это сотни бит, а не килобайты: длинный текст всё равно придётся резать.
Hytera: свой стек
У Hytera собственная многоуровневая обвязка со своими протоколами регистрации, местоположения, телеметрии, управления радиостанцией и текстовых сообщений. С Motorola TMS она несовместима напрямую, и мосты между ними делаются отдельным преобразованием. Для владельца это означает простую вещь: Hytera и Anytone в одной сети могут прекрасно слышать друг друга голосом и при этом не обмениваться сообщениями.
Что делать на практике
- Сообщения не уходят вообще. Проверьте, что в кодплаге прописан правильный контакт получателя и рация настроена на приватные сообщения, а не на групповые. Разбор ошибок кодплага — в отдельной статье.
- Уходят, но не приходят адресату. Скорее всего, вы в разных форматах: сверьте вендоров и посмотрите, поддерживает ли сеть преобразование.
- Приходит нечитаемое. Дело в кодировке UTF-16 на стороне шлюза, а не в рации.
- Нужна гарантия доставки. В радиоканале её нет. Сети с серверной частью решают это хранением сообщений — как в DMRhub, где переписка живёт в кабинете и приложении.
Сообщения, которые не теряются
В DMRhub SMS с рации попадают в диалог и остаются там: их видно в приложении и в кабинете, даже если рация была выключена. Отвечать можно с телефона или из браузера — на рацию придёт обычное DMR-сообщение.
Источники
- Разбор формата Motorola TMS по полям и подтверждениям — wiki.ipsc3.net
- ETSI TS 102 361-4 V1.12.1, форматы UDT и структура заголовка — dmrassociation.org
- Реализация текстовых сообщений в OpenGD77 (порт 4007, двухбайтный текст) — opengd77.com
- ok-dmrlib: разбор Motorola TMS и стека Hytera — github.com/OK-DMR/ok-dmrlib
- Поддержка Motorola IP/UDP текстовых сообщений на порту 4007 в SDRTrunk — github.com/DSheirer/sdrtrunk
Настроили рацию — заходите в эфир: свой мастер, хотспоты и приложение с DMR прямо в телефоне.
Войти в портал