ubxconfig

ubxconfig è l’applicazione Android sviluppata per configurare i ricevitori GNSS MS2 direttamente da smartphone o tablet, senza necessità di PC e u-center. Permette di applicare i profili:

  • Rover
  • Base (Survey-In o Fixed)
  • abilitare l’output dei dati grezzi (RAW: RXM-RAWX/RXM-SFRBX)
  • monitorare in tempo reale lo stato del ricevitore

Funzionalità principali

  1. Connessione multi-trasporto: la app può dialogare col ricevitore tramite tre canali distinti, selezionabili dal menù a tendina Mode nella schermata Home

    • Bluetooth (SPP): classico Bluetooth seriale, usato tipicamente con moduli HC-05 / HC-06 abbinati al ricevitore. Richiede il pairing preventivo dal menù Bluetooth di Android
    • BLE Nordic: Bluetooth Low Energy con profilo Nordic UART Service (NUS). La scansione viene avviata ogni volta dall’app, non viene memorizzato nulla — il dispositivo va selezionato a ogni utilizzo
    • USB: connessione diretta tramite cavo USB OTG. Include un meccanismo di recovery automatico del baudrate che rileva il rate corrente del ricevitore (9600, 38400, 115200, 230400) e lo riporta a 115200 in RAM+Flash
  2. Configurazione Rover: applica il profilo per uso come ricevitore mobile

    • Output NMEA su UART1 (GGA, GSA, GSV, RMC, GST, GNS) a 1 Hz
    • Tutti i messaggi RTCM disabilitati
    • TMODE off (no Survey-In, no Fixed)
    • Cutoff elevation 10°
    • Flag opzionale RAW data che abilita RXM-RAWX e RXM-SFRBX su UART1 in protocollo UBX
  3. Configurazione Base Survey-In: applica il profilo per stazione base con auto-posizionamento

    • Durata minima e accuratezza target configurabili dall’utente
    • Output RTCM3 (1005, 1077, 1087, 1097, 1127, 1230) su UART2 verso radio o NTRIP caster
    • Modalità Caster selezionabile per inviare RTCM su UART1 anziché UART2 (per integrazione con bridge che ripubblica su NTRIP server)
    • Flag RAW data come per Rover
  4. Monitor in tempo reale: schermata dedicata che mostra

    • Stato del fix GNSS (No Fix / 2D / 3D / RTK Float / RTK Fixed)
    • Numero di satelliti per costellazione
    • Coordinate in tempo reale (Lat/Lon/H, ECEF)
    • HDOP / VDOP / PDOP
    • Survey-In progress (durata trascorsa, accuratezza corrente, completamento)
    • Stream NMEA / UBX raw per debug
  5. Compatibilità firmware: la app implementa il fix v2.4.1 che impone CFG_UART1OUTPROT_UBX = 1 quando il flag RAW è attivo, condizione necessaria perché RXM-RAWX e RXM-SFRBX vengano effettivamente emessi dal ricevitore (l’ACK al CFG-VALSET arriva comunque ma senza questa flag il flusso UBX è silenziato)

Come la scarico?

  • Installazione:
    • L’APK è disponibile qui
    • Su Android occorre abilitare l’installazione da origini sconosciute per il browser o il file manager utilizzato
    • Al primo avvio la app richiede i permessi BLUETOOTH_CONNECT, BLUETOOTH_SCAN e l’accesso alla periferica USB

Come si usa?

  • Connessione iniziale:
    • Aprire l’app: nella schermata Home selezionare il transport desiderato dal menù Mode
    • Modalità Bluetooth: appare l’elenco dei dispositivi già abbinati. Toccare quello desiderato e premere CONNECT
    • Modalità BLE Nordic: aprire il dropdown dei dispositivi per avviare una nuova scansione (durata ~8 s). Selezionare il ricevitore dalla lista (mostra nome, MAC e RSSI) e premere CONNECT
    • Modalità USB: collegare il cavo OTG. Se il ricevitore risponde a 115200 la connessione è immediata, altrimenti partirà il recovery automatico del baudrate
  • Applicazione configurazione:
    • Una volta connessi, scegliere il profilo Rover o Base
    • In modalità Base impostare durata e accuratezza del Survey-In, e attivare Caster solo se si usa un bridge che richiede RTCM su UART1
    • Spuntare RAW data se si vogliono registrare osservabili grezzi per post-processing
    • Premere APPLY: la app invia i CFG-VALSET in batch, attendendo ACK su ciascuno. Una progress bar mostra l’avanzamento
  • Monitor:
    • Dalla Home premere MONITOR per aprire la schermata di stato live
    • Nella stessa schermata è disponibile la console raw per ispezionare il flusso NMEA/UBX

Note operative

  • Il profilo Rover/Base non modifica il baudrate UART1 del ricevitore quando si è connessi via Bluetooth o BLE: il canale wireless transita per UART1, alterarlo durante l’invio della configurazione spezzerebbe il link a metà
  • Per i moduli HC-05 il baudrate seriale è fissato via comandi AT al pairing iniziale: deve combaciare col baudrate UART1 del ricevitore
  • Il path USB invece allinea autonomamente baud ricevitore e porta seriale, portando entrambi a 115200
  • L’app non memorizza i dispositivi BLE: la scansione è sempre effettuata al momento. I dispositivi SPP invece si appoggiano alla lista pairing di sistema di Android

Architettura

Il progetto è strutturato in moduli Kotlin con dependency injection Hilt:

core/transport/: Contiene l’interfaccia DeviceTransport e il TransportProvider Singleton che astrae il canale attivo (BLUETOOTH, BLE, USB, NONE). I sender UBX dialogano solo col provider, ignorando il trasporto sottostante.

core/bluetooth/BluetoothSppManager.kt: Gestisce il Bluetooth Classic SPP usando BluetoothSocket con UUID standard SPP 00001101-0000-1000-8000-00805f9b34fb.

core/bluetooth/BleNusManager.kt: Implementa il client Nordic UART Service via GATT: scansione filtrata per UUID, negoziazione MTU fino a 247 byte, frammentazione automatica delle write su payload ATT (MTU − 3), e bridging delle notifiche TX su un PipedInputStream per uniformità con gli altri trasporti.

core/usb/UsbSerialManager.kt + UsbRecoveryManager.kt: Gestione USB seriale tramite usb-serial-for-android, con recovery automatico del baudrate.

core/ubx/UbxCommands.kt: Costruzione dei frame UBX-CFG-VALSET con checksum Fletcher-8, definizione di tutte le chiavi u-blox usate (CFG-MSGOUT-, CFG-UART1-, CFG-TMODE-, CFG-RXM-, CFG-NAVSPG-, CFG-RTCM-).

core/ubx/UbxConfigSender.kt: Invia i batch CFG-VALSET, attende ACK/NAK con timeout 1.5 s e gestisce i casi di timeout con commit ottimistico.

ui/screens/home / monitor / bluetooth / usb: Composizioni Jetpack Compose con ViewModel Hilt per Home (selezione modalità + profilo), Monitor (stato live), Bluetooth (selezione SPP) e USB (connessione + recovery).

Nota

  • ubxconfig è un progetto distribuito come APK precompilato
  • per richieste di personalizzazione, integrazioni con flussi RTK proprietari o nuovi profili di configurazione scrivere a solutop@gmail.com
  • segnalazioni di bug e proposte di miglioramento possono essere aperte come issue su GitHub