LRRP: как рация отдаёт координаты по DMR

Категория: Данные: SMS, GPSСложность: ~10 мин

Точка на карте сети берётся не из воздуха: рация отправляет координаты служебным протоколом. У Motorola и совместимых это LRRP — Location Request Response Protocol. Официальной публичной спецификации у него нет, поэтому разберём по тому, что видно в эфире: какие порты, какие типы пакетов и как читать сами координаты.

Четыре служебных порта Motorola

Данные поверх DMR у Motorola едут как обычный IP/UDP внутри радиоканала. Каждому сервису отведён свой порт:

ПортСервисЗачем
4001LRRPзапрос и передача координат
4005ARSрегистрация рации в сети, «я включилась»
4007TMSтекстовые сообщения
4012BMSслужебное обнаружение возможностей
Зачем знать порты Если вы разбираете дамп и видите UDP на 4001 — это позиции, на 4007 — переписка. Дальше можно не гадать, а сразу разбирать полезную нагрузку по нужному формату.

Как выглядит обмен целиком

  1. Рация включилась и зарегистрировалась по ARS на служебный идентификатор сервера.
  2. Сервер подтвердил регистрацию и сразу отправил немедленный запрос позиции.
  3. Дальше сервер либо опрашивает периодически, либо ставит триггер: «шли сам каждые N секунд».
  4. Рация отвечает пакетами с координатами; когда фикса ещё нет — отвечает, но без позиции.

Типовой интервал опроса в готовых серверных решениях — 600 секунд, с небольшим «тихим окном» перед отправкой, чтобы не влезть в чужую передачу. Это важный момент: GPS-трафик конкурирует с голосом за таймслот, и слишком частый опрос парка рацией съедает эфир.

Типы пакетов LRRP

Первый байт полезной нагрузки — тип, второй — длина, дальше идут токены.

ЗначениеСмысл
0x09запрос позиции (немедленный или установка триггера)
0x0Fостановить триггер
0x07ответ на немедленный запрос
0x0Bподтверждение запуска триггера
0x0Dплановый отчёт по триггеру — то, что чаще всего видно в эфире
0x11подтверждение остановки триггера
0x15версия и состояние

Токены: что лежит внутри ответа

Полезные данные — последовательность «токен + значение». Основные:

ТокенСодержимое
0x22идентификатор запроса (кодируется как 22 03 + 3 байта)
0x34метка времени
0x51широта, долгота и радиус погрешности
0x55то же плюс высота
0x56курс (в готовых реализациях трактуется с шагом 2°)
0x66только широта и долгота
0x69широта, долгота и высота
0x6Cгоризонтальная скорость

Широта и долгота — 32-битные масштабированные целые, а не привычные градусы с точкой. Поэтому в сыром дампе координаты выглядят как большие числа, и без пересчёта в них ничего не узнать.

«Рация отвечает, а точки нет» Это нормальная ситуация: приёмник GPS ещё не поймал спутники, и рация честно отвечает пакетом без позиции. Грамотный сервер отличает такой ответ от отчёта с координатами и не затирает последнюю известную точку пустой. Если ваш трекер «телепортирует» абонента в нулевые координаты — скорее всего, он этого не различает.

Как это упаковано в радиоканал

Вокруг IP-пакета выстраивается обвязка DMR: кадры-преамбулы, заголовок неподтверждаемых данных, затем один или несколько блоков rate ½ с вложенным пакетом, и в конце контрольная сумма по вложенным данным. То есть на уровне эфира это обычная передача данных, просто с известным содержимым.

Как устроены сами блоки данных и почему их так защищают — в статье про помехоустойчивое кодирование.

Другие способы передать координаты

LRRP — не единственный путь, и это причина, почему «GPS работает не у всех со всеми».

  • Штатный ETSI-способ: поле GPS Info во встроенном Link Control прямо во время голосового вызова. Формат жёсткий: три бита оценки погрешности, 25 бит долготы и 24 бита широты.
  • Через Talker Alias: открытая прошивка OpenGD77 умеет вкладывать координаты в поле позывного, и они приезжают вместе с голосом.
  • APRS поверх DMR: приватные данные в вендорском формате, популярно у Anytone.
  • Hytera: собственный стек протоколов, несовместимый с Motorola.
  • UDT с форматом NMEA или LIP: стандартный, но встречается реже.

Практический вывод простой: если координаты не появляются на карте, сначала выясните, каким именно способом их шлёт ваша рация, — а уже потом ищите проблему в сети.

Приватность Координаты передаются в открытом виде и видны всей сети, а не только вам. В DMRhub показ на карте — добровольный: его можно выключить в настройках кабинета, и точка исчезнет у всех. Прежде чем включать постоянный маяк, подумайте, кому вы сообщаете, где находитесь.

Ваша точка — только по вашему решению

DMRhub принимает координаты от рации и показывает их на карте сети, но включение и выключение — на вашей стороне. В настройках кабинета один переключатель, и вас на карте нет.

Источники

  1. Разбор LRRP: порты, типы пакетов и токены — wiki.ipsc3.net
  2. ETSI TS 102 361-2 V2.5.1, поле GPS Info во встроенном Link Control — etsi.org
  3. ok-dmrlib: разбор Motorola LRRP и ARS на Python — github.com/OK-DMR/ok-dmrlib
  4. dsd-fme: декодирование LRRP и построение треков — github.com/lwvmobile/dsd-fme
В сети DMRhub

Настроили рацию — заходите в эфир: свой мастер, хотспоты и приложение с DMR прямо в телефоне.

Войти в портал