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¶
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
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
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
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
Compatibilità firmware: la app implementa il fix v2.4.1 che impone
CFG_UART1OUTPROT_UBX = 1quando 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
DeviceTransporte ilTransportProviderSingleton 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
BluetoothSocketcon UUID standard SPP00001101-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
PipedInputStreamper 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