MioComm – caricare tracce GPS sul ciclocomputer Mio 105 H/HC

MioComm è un piccolo tool sviluppato in C# per l’importazione di tracce GPS arbitrarie (in formato Google Earth .kml) sul ciclocomputer Mio 105 H/HC. Le tracce importate possono poi essere ripercorse grazie alla modalità navi del Mio.

1348067046-Cyclo105_zoom

Ho deciso di sviluppare questo software per colmare quello che secondo me (e anche per molti altri utenti) è il più grande difetto di questo dispositivo ossia l’impossibilità di importare tracce GPS esterne.

Il software originale a corredo permette infatti solo l’esportazione delle tracce dal Mio al computer, la loro pubblicazione sul network  mioshare.com e la condivisione con gli altri utenti. I progettisti hanno dimenticato (?) o non hanno voluto prendere in considerazione il classico caso d’uso del GPS da bici:  prendere una traccia GPS scaricata da internet, caricarla sul dispositivo e ripercorrerla.

Il tool è frutto di un lungo lavoro di reverse engineering del protocollo seriale di comunicazione, fortunatamente abbastanza semplice e lineare: il classico protocollo half-duplex (botta e risposta) con pacchetto della forma command+size+payload+crc

Screen shot 2014-09-14 at 12.44.47 AM

Il tool permette fondamentalmente 3 operazioni:

  • Importazione di una traccia GPS arbitraria in formato Google Earth .kml
  • Elenco delle tracce memorizzate nel dispositivo
  • Esportazione in formato .kml delle tracce memorizzate

Screen shot 2014-09-14 at 12.15.35 AM

L’utilizzo è abbastanza semplice: basta collegare il Mio al PC tramite cavetto USB e premere “connect”. Il software inizierà il discovery del device su tutte le porte COM presenti (virtuali USB e non) e poi scaricherà e mostrerà l’elenco delle tracce correntemente in memoria. Il tasto “export” permette di esportare un traccia (selezionata dall’elenco), il tasto “import” permette invece di importare una.

Download

Download link: MioComm_ver1.1

Per il corretto funzionamento del tool sono necessari i driver STMicroelectronics della porta seriale virtuale scaricabili qui.

Per il momento il tool supporta solo il formato .kml (e anche .kmz: basti sapere che un file .kmz non è altro che una versione zippata di un kml). In futuro è prevista l’introduzione del formato Garmin .gpx e l’esportazione dei parametri non GPS della traccia (velocità, potenza, cadenza, battiti etc..).

Per chiarimenti, bug dell’ultimo minuto o miglioramenti non esitate a contattarmi!

Protocollo seriale – pacchetto

Una breve descrizione del protocollo seriale di comunicazione, per le persone interessate. Il protocollo è stato parizialmente reversato sniffando il traffico da e verso il Mio 105 H/HC. La comunicazione avviene ovviamente in half-duplex, il master (l’applicativo desktop) interroga il dispositivo, il dispositvo risponde. Se il dispositivo non risponde entro un certo timeout lo si considera assente o spento e la richiesta viene annullata. Ho notato alcune incongruenze nella codifica dei valori numerici, ad esempio il campo LENGTH e le coordinate GPS sono codificate big-endian mentre tutti gli altri valori numerici in little-endian.

A livello link il pacchetto si presenta nella classica forma CMD+LENGTH+PAYLOAD+CRC, più nello specifico:

packet

  • CMD: 1 byte, indica il codice comando del pacchetto.
  • L0 e L1, 2 byte in tutto. Indicano la dimensione del payload, espressa in bytes. Campo big-endian.
  • P0,P1…,PN-1: payload
  • CHECK: 1 byte. Non propriamente un codice ciclico CRC ma un semplice XOR di tutti i byte precedenti, escluso il byte CMD