LRRP: как рация отдаёт координаты по DMR
Точка на карте сети берётся не из воздуха: рация отправляет координаты служебным протоколом. У Motorola и совместимых это LRRP — Location Request Response Protocol. Официальной публичной спецификации у него нет, поэтому разберём по тому, что видно в эфире: какие порты, какие типы пакетов и как читать сами координаты.
Четыре служебных порта Motorola
Данные поверх DMR у Motorola едут как обычный IP/UDP внутри радиоканала. Каждому сервису отведён свой порт:
| Порт | Сервис | Зачем |
|---|---|---|
| 4001 | LRRP | запрос и передача координат |
| 4005 | ARS | регистрация рации в сети, «я включилась» |
| 4007 | TMS | текстовые сообщения |
| 4012 | BMS | служебное обнаружение возможностей |
Как выглядит обмен целиком
- Рация включилась и зарегистрировалась по ARS на служебный идентификатор сервера.
- Сервер подтвердил регистрацию и сразу отправил немедленный запрос позиции.
- Дальше сервер либо опрашивает периодически, либо ставит триггер: «шли сам каждые N секунд».
- Рация отвечает пакетами с координатами; когда фикса ещё нет — отвечает, но без позиции.
Типовой интервал опроса в готовых серверных решениях — 600 секунд, с небольшим «тихим окном» перед отправкой, чтобы не влезть в чужую передачу. Это важный момент: GPS-трафик конкурирует с голосом за таймслот, и слишком частый опрос парка рацией съедает эфир.
Типы пакетов LRRP
Первый байт полезной нагрузки — тип, второй — длина, дальше идут токены.
| Значение | Смысл |
|---|---|
| 0x09 | запрос позиции (немедленный или установка триггера) |
| 0x0F | остановить триггер |
| 0x07 | ответ на немедленный запрос |
| 0x0B | подтверждение запуска триггера |
| 0x0D | плановый отчёт по триггеру — то, что чаще всего видно в эфире |
| 0x11 | подтверждение остановки триггера |
| 0x15 | версия и состояние |
Токены: что лежит внутри ответа
Полезные данные — последовательность «токен + значение». Основные:
| Токен | Содержимое |
|---|---|
| 0x22 | идентификатор запроса (кодируется как 22 03 + 3 байта) |
| 0x34 | метка времени |
| 0x51 | широта, долгота и радиус погрешности |
| 0x55 | то же плюс высота |
| 0x56 | курс (в готовых реализациях трактуется с шагом 2°) |
| 0x66 | только широта и долгота |
| 0x69 | широта, долгота и высота |
| 0x6C | горизонтальная скорость |
Широта и долгота — 32-битные масштабированные целые, а не привычные градусы с точкой. Поэтому в сыром дампе координаты выглядят как большие числа, и без пересчёта в них ничего не узнать.
Как это упаковано в радиоканал
Вокруг IP-пакета выстраивается обвязка DMR: кадры-преамбулы, заголовок неподтверждаемых данных, затем один или несколько блоков rate ½ с вложенным пакетом, и в конце контрольная сумма по вложенным данным. То есть на уровне эфира это обычная передача данных, просто с известным содержимым.
Как устроены сами блоки данных и почему их так защищают — в статье про помехоустойчивое кодирование.
Другие способы передать координаты
LRRP — не единственный путь, и это причина, почему «GPS работает не у всех со всеми».
- Штатный ETSI-способ: поле GPS Info во встроенном Link Control прямо во время голосового вызова. Формат жёсткий: три бита оценки погрешности, 25 бит долготы и 24 бита широты.
- Через Talker Alias: открытая прошивка OpenGD77 умеет вкладывать координаты в поле позывного, и они приезжают вместе с голосом.
- APRS поверх DMR: приватные данные в вендорском формате, популярно у Anytone.
- Hytera: собственный стек протоколов, несовместимый с Motorola.
- UDT с форматом NMEA или LIP: стандартный, но встречается реже.
Практический вывод простой: если координаты не появляются на карте, сначала выясните, каким именно способом их шлёт ваша рация, — а уже потом ищите проблему в сети.
Ваша точка — только по вашему решению
DMRhub принимает координаты от рации и показывает их на карте сети, но включение и выключение — на вашей стороне. В настройках кабинета один переключатель, и вас на карте нет.
Источники
- Разбор LRRP: порты, типы пакетов и токены — wiki.ipsc3.net
- ETSI TS 102 361-2 V2.5.1, поле GPS Info во встроенном Link Control — etsi.org
- ok-dmrlib: разбор Motorola LRRP и ARS на Python — github.com/OK-DMR/ok-dmrlib
- dsd-fme: декодирование LRRP и построение треков — github.com/lwvmobile/dsd-fme
Настроили рацию — заходите в эфир: свой мастер, хотспоты и приложение с DMR прямо в телефоне.
Войти в портал