ubxconfig¶
ubxconfig — приложение для Android, созданное для простой настройки приёмника MS2 прямо со смартфона или планшета, без компьютера и u-center.
Оно позволяет:
- применить профиль Rover
- применить профиль Base (Survey-In или Fixed)
- применить профиль Base Caster (Survey-In или Fixed)
- включить вывод сырых данных (RAW: RXM-RAWX / RXM-SFRBX)
- следить за последовательным потоком в реальном времени и — что особенно важно — автоматически восстанавливать конфигурацию приёмника, если она была испорчена случайным сбросом к заводским настройкам (обычно после работы в u-center).
Приложение задумано как полевой инструмент: нужен только телефон, а в случае серьёзных неполадок — кабель USB-C OTG.
Главный экран¶
Главный экран приложения построен как одна карточка, охватывающая все шаги подключения и настройки.
Status: индикатор в правом верхнем углу с цветной точкой и подписью:
- Connected (зелёный) — соединение установлено и работает
- Connecting… (оранжевый, со счётчиком секунд 1..5) — идёт попытка. Если к концу пятой секунды соединение не установлено, приложение прекращает попытку и показывает Not found
- Not found (красный) — последняя попытка не удалась
- Not Connected (серый) — нейтральное состояние покоя
Mode: выпадающее меню выбора канала связи
- Bluetooth (Bluetooth Classic SPP) — обычный канал для повседневной работы. Использует устройства, уже сопряжённые в настройках Android. В списке показываются только приёмники, имя которых начинается с
MS2-XXXX - BLE Nordic (Bluetooth Low Energy с профилем Nordic UART Service) — энергоэкономичная альтернатива, каждый раз сканирует доступные устройства MS2. Выбор не сохраняется: сканирование всегда новое
Режим USB не вынесен в отдельный пункт Mode: это служебный канал, включаемый только для восстановления (см. USB Recovery ниже).
- Bluetooth (Bluetooth Classic SPP) — обычный канал для повседневной работы. Использует устройства, уже сопряжённые в настройках Android. В списке показываются только приёмники, имя которых начинается с
- Device: выпадающее меню устройства, зависящее от выбранного Mode
- В режиме Bluetooth перечисляются только уже сопряжённые приёмники с именем
MS2-… - В режиме BLE Nordic при нажатии запускается сканирование (5 с); если ничего не найдено, показывается Не найдено. Для каждой записи выводятся имя, MAC-адрес и RSSI в дБм
- В режиме Bluetooth перечисляются только уже сопряжённые приёмники с именем
- Receiver Configuration (видна только при активном соединении): карточка, ведущая к экрану настройки (Rover, Base Survey-In, Base Fixed, Загрузка своего файла)
- Serial Monitor (виден только при активном соединении): зелёная кнопка, открывающая экран терминала для просмотра потока NMEA/UBX от приёмника
- GNSS Status (видна только при активном соединении и после успешного чтения): карточка, автоматически заполняемая основными параметрами, прочитанными из приёмника через UBX-CFG-VALGET:
- Mode: ROVER, SURVEY-IN, FIXED BASE, UNKNOWN
- Rate: частота обновления в Гц
- UART1 / UART2: включённые выходные протоколы со скоростью в скобках
- Elev. Cutoff: минимальный угол возвышения спутников в градусах
- Communication Error (жёлтая карточка, видна при активном соединении, но с неполадками): появляется, когда приложение не может прочитать конфигурацию приёмника или обнаруживает на UART1 скорость, отличную от 115200. Текст предлагает подключить кабель USB OTG. После подключения карточка исчезает, а на её месте появляется оранжевая кнопка USB RECOVERY
В этом состоянии приложение подключено по Bluetooth, но обнаруживает проблему связи с приёмником — обычно несовпадение скорости после сброса к заводским настройкам из u-center. Для восстановления достаточно соединить телефон и MS2 кабелем USB-C OTG: жёлтая карточка исчезнет, а вместо неё появится оранжевая кнопка USB RECOVERY, описанная в отдельном разделе ниже.
- Connect / Disconnect: зелёная или красная кнопка внизу, открывающая или закрывающая соединение выбранного режима
Связь и скорость передачи¶
Модуль Bluetooth внутри MS2 настроен со стороны последовательного порта на 115200 бод, и для правильной связи с внутренним приёмником u-blox его UART1 тоже должен работать на 115200. Профиль Rover, применяемый приложением, задаёт именно эту скорость и, кроме того, включает UART1OUTPROT_UBX = 1 (это нужно, чтобы ответы UBX-CFG-VALGET — а значит и карточка GNSS Status — доходили до телефона по Bluetooth).
Если выполнить сброс к заводским настройкам приёмника из u-center, скорость изменится (по умолчанию у u-blox 38400, иногда 9600), и связь по Bluetooth нарушится: модуль BT на 115200 читает байты, снятые с неверной скоростью, и получается только мусор — ни NMEA, ни UBX прочитать нельзя. Именно для этого и существует USB Recovery.
USB Recovery¶
Разовая операция для восстановления связи, когда приёмник «выпал из синхронизации». Пользователь:
- Подключается по Bluetooth как обычно
- Видит жёлтую карточку Communication Error (признак неверной скорости приёмника)
- Соединяет телефон и MS2 кабелем USB OTG
- Жёлтая карточка сменяется оранжевой кнопкой USB RECOVERY
- Нажимает кнопку
После этого приложение автоматически, без участия пользователя, выполняет:
- Отключение активного соединения Bluetooth
- Открытие порта USB-C OTG (при первом подключении система запрашивает разрешение)
- Поиск действительной скорости приёмника: последовательно пробуются 9600 / 38400 / 115200 / 230400 / 460800 бод с отправкой запроса UBX-MON-VER для каждой
- После определения отправляется команда UBX-CFG-VALSET, устанавливающая
UART1_BAUDRATE = 115200в RAM и Flash, собственный порт переводится на новую скорость и ожидается подтверждение ACK - Проверка после изменения: отправляется второй MON-VER на 115200, чтобы убедиться, что приёмник отвечает
- Применяется вся конфигурация Rover (9 кадров UBX-CFG-VALSET, слои RAM+BBR+Flash) кадр за кадром, с ожиданием UBX-ACK-ACK между ними
- Закрытие порта USB
Во время всей операции по центру экрана отображается окно с текущим состоянием («Пробую X бод…», «Приёмник найден на X бод», «Применяю Rover N/9…»). По окончании появляется второе окно с итогом.
Пользователь нажимает OK, отсоединяет кабель USB, снова подключается по Bluetooth — и связь работает.
Важно: во время восстановления приложение не остаётся постоянно «подключённым по USB». Это неделимая операция: открыть, починить, закрыть. Режим USB даже не отображается в выпадающем меню Mode — это скрытая процедура за кнопкой Recovery.
Receiver Configuration¶
Экран открывается одноимённой карточкой на главном экране (видна при активном соединении). Он позволяет применить один из трёх основных профилей — Rover, Base Survey-In или Base Fixed — либо загрузить свой файл конфигурации UBX. Вид страницы автоматически подстраивается под режим, выбранный в выпадающем меню Receiver Mode вверху: показываются только поля, относящиеся к выбранному профилю.
В режиме Rover вид страницы самый простой: меню Receiver Mode = Rover, меню Frequency для выбора частоты обновления (1, 2, 5 или 10 Гц), затем сворачиваемая кнопка Advanced. Развернув её (зелёный значок шестерёнки, стрелка вверх), вы получаете доступ к менее употребительным параметрам — Cutoff (минимальный угол возвышения спутников, диапазон 0–40°, изменяется кнопками −/+ или вводом числа), переключатель RAW data (включает RXM-RAWX и RXM-SFRBX на UART1) и Save to Flash (окончательная запись во флеш-память, а не только в RAM). Внизу зелёная кнопка Send Configuration отправляет конфигурацию приёмнику.
При выборе Base в меню Receiver Mode экран меняется: появляется дополнительное меню Base Mode с двумя пунктами — Survey-In и Fixed Position. Режим Survey-In самый быстрый: приёмник постепенно определяет своё положение, накапливая измерения, пока одновременно не будут выполнены два условия — Minimum duration в секундах (по умолчанию 60 с) и Minimum accuracy в метрах (по умолчанию 5,0 м). Для точных установок, характерных для постоянных серверов NTRIP, эти значения имеет смысл существенно увеличить (например, 600 с и более и 1,0 м), чтобы получить положение базы с погрешностью менее метра.
Режим Fixed Position предназначен для установок, где координаты базовой точки уже известны — обычно из геодезического пункта, из ранее сохранённой Survey-In или из обычной съёмки. Меню Coordinates позволяет выбрать систему отсчёта: LLH (широта и долгота в десятичных градусах, высота в метрах), как на снимке экрана, либо ECEF (X/Y/Z в метрах, геоцентрическая прямоугольная система). После ввода трёх координат кнопка Send Configuration отправляет их приёмнику, который сразу переходит в TMODE = 2 (fixed) и начинает формировать поправки RTCM3 на настроенных каналах (по умолчанию UART2, а в режиме Caster — UART1).
Во всех режимах панель Advanced сворачивается автоматически при смене Receiver Mode: так страница не становится слишком длинной при переходе от компактного Rover к Base Fixed, где уже четыре видимых поля. При необходимости пользователь открывает Advanced вручную.
Rover
Профиль для работы подвижным приёмником с настраиваемой частотой (1, 2, 5, 10 Гц):
- Вывод NMEA на UART1 (GGA, GSA, GSV, RMC, GST, GNS включены; GLL и VTG выключены)
- UBX выключен (если не включён RAW — см. ниже)
- Все сообщения RTCM отключены на обоих UART
- TMODE выключен
- Угол отсечки 10°
- UART1_BAUDRATE = 115200, UART2_BAUDRATE = 57600
- Необязательный флажок RAW data: включает RXM-RAWX и RXM-SFRBX на UART1 и задаёт
UART1OUTPROT_UBX = 1(необходимо для потока UBX RAW)
Base Survey-In
Профиль базовой станции с постепенным определением положения:
- Минимальная продолжительность в секундах (настраивается)
- Целевая точность в мм (настраивается)
- Вывод RTCM3 (1005, 1077, 1087, 1097, 1127, 1230) на UART2 к радиомодему или NTRIP-кастеру
- Можно выбрать режим Caster: вывод RTCM переходит на UART1 вместо UART2 (удобно при работе через мост, публикующий данные на сервере NTRIP)
- Флажок RAW data — как в профиле Rover
Base Fixed
Профиль базовой станции с известными координатами (LLH или ECEF):
- Координаты вводятся вручную или берутся из последней Survey-In
- Схема RTCM3 та же, что и в Survey-In
Upload File
Загружает текстовый файл конфигурации UBX (
.txtс шестнадцатеричными парами «ключ-значение») и применяет команды к приёмнику. Удобно для собственных предустановок или файлов, полученных от поддержки SoluTOP.
Для каждого профиля пользователь выбирает целевой слой, в который записывается конфигурация:
- RAM — временно, теряется при перезагрузке
- BBR — память с батарейным питанием, переживает перезагрузку, но не отключение питания
- Flash — постоянно
- Все — RAM + BBR + Flash (рекомендуется для окончательных изменений)
Команды отправляются пакетами по 64 ключа с ожиданием ACK на каждый. Ход выполнения показывает индикатор.
Serial Monitor¶
Экран терминала, показывающий последовательный поток от приёмника в реальном времени. Три режима отображения:
- ASCII: только печатаемый текст, непечатаемые символы заменяются на
. - HEX: побайтово в шестнадцатеричном виде
- Auto (по умолчанию): распознаёт NMEA и UBX, показывает NMEA текстом, а UBX — в шестнадцатеричном виде с расшифрованным заголовком (
[UBX cls id])
Панель инструментов сверху:
- Назад (← закрывает экран и останавливает чтение)
- Pause / Play (приостанавливает и возобновляет поток)
- Clear (очищает буфер)
Строки окрашены по типу: зелёные — ACK UBX, красные — NAK, синие — прочие UBX, светло-серые — NMEA.
Автоматические обновления¶
Приложение автоматически — не чаще одного раза в 24 часа — проверяет через GitHub API, есть ли новая версия в открытом репозитории релизов. Время последней проверки сохраняется в SharedPreferences; в течение следующих 24 часов приложение к GitHub не обращается, поэтому запуск остаётся быстрым даже в медленной сети, а ограничение GitHub API соблюдается (60 запросов в час для неавторизованного IP-адреса).
Если найден тег новее, чем BuildConfig.VERSION_NAME, приложение показывает окно с номером доступной версии, примечаниями к выпуску (первые 300 символов) и двумя вариантами: Скачать (открывает загрузку APK из релиза) или Позже.
Ту же проверку можно в любой момент запустить вручную из окна About (значок ℹ︎ в правом верхнем углу) кнопкой Проверить обновления. Ручная проверка игнорирует ограничение частоты и всегда показывает результат (в том числе «Приложение обновлено» или ошибку сети).
Устойчивость к разрывам связи¶
Обнаружение непредвиденного физического разрыва связи (выключенный модуль BT, отсоединённый кабель USB, выход из зоны действия) на Android общеизвестно непросто: ядро не обновляет BluetoothSocket.isConnected при потере радиосвязи, а outputStream.write может незаметно буферизоваться. Приложение сочетает несколько механизмов, чтобы состояние интерфейса всегда соответствовало действительности:
Bluetooth SPP — три независимых механизма:
BroadcastReceiverдляACTION_ACL_DISCONNECTED, регистрируемый вconnect(): перехватывает системное событие сразу при потере радиосвязи (задержка около 1 с)- Контрольная запись в 256 байт (32 склеенных сообщения UBX-MON-VER) каждые 2,5 с в потоке опроса: она заполняет буфер ядра BlueZ и вызывает
Broken pipe, если модуль исчез - Детектор «замершего» потока: если
inputStream.available()остаётся равным 0 три цикла подряд (около 7,5 с) — хотя приёмник в состоянии Connected должен непрерывно выдавать NMEA, — сокет считается неработающим
Прежде чем приложение сменит состояние, нужны два подряд неудачных контрольных обмена (это исключает ложные срабатывания на кратковременных сбоях). Опрос выполняется в
Dispatchers.IO, поэтому продолжается и когда приложение свёрнуто.BLE —
BluetoothGattCallbackполучаетSTATE_DISCONNECTEDсразу при потере связи и обновляет интерфейсUSB — опрос каждые 1,5 с через
UsbManager.findDevice(). Если кабель физически отсоединён, приложение сбрасывает только состояние USB; карточка GNSS Status по Bluetooth остаётся видимой, если соединение BT ещё активноЗащита от сбоев — глобальный
Thread.UncaughtExceptionHandlerперехватывает исключенияIOExceptionтранспортов, ускользнувшие от try/catch отдельных менеджеров, и не даёт исключению завершить приложение. В циклах опроса тоже есть свои try/catch, чтобы они не прекращались молча при неожиданной ошибкеЧтение GNSS после подключения с экспоненциальной задержкой — при первом соединении приложение читает конфигурацию приёмника тремя попытками
UBX-CFG-VALGETс тайм-аутами 2 с / 3 с / 4,5 с и паузами 0 мс / 300 мс / 800 мс между ними. Это сглаживает кратковременные сбои Bluetooth (джиттер, поток NMEA, заполняющий буфер до ответа UBX): карточка GNSS Status заполняется даже при потере одного кадра, а жёлтая карточка Communication Error появляется, только если не удались все три попытки
Необходимые разрешения¶
При первом запуске приложение запрашивает:
BLUETOOTH_CONNECT— необходимо для подключения к сопряжённым устройствам (Android 12+)BLUETOOTH_SCAN— необходимо для сканирования BLEINTERNET— необходимо для проверки обновлений через GitHub API- Доступ к устройству USB OTG — запрашивается системой только при попытке USB Recovery
Установка
APK доступен здесь. В Android нужно разрешить установку из неизвестных источников для используемого браузера или файлового менеджера.
Видео
Полное руководство доступно здесь.









