My newish Treo 680 has blue teeth, which is better than a kick in selfsame (but not very much as shoddily as it was implemented by Palm). Being only a moderate gadgeteer (and far from rich) I've been lusting after a good/cheap/simple (yeah, I know RFC1925) navigation setup for the car - and cable-less as much as possible.

So I got a cheap Bluetooth GPS receiver which is branded "HP iPAQ Bluetooth GPS BTG-10H". Interestingly that model seems to have been orphaned by HP and is now sold under the name Siraya. $20 for a new 12-channel receiver with data logging, some other goodies and a car charger; not bad I think.

A bit of digging determined that it uses an iTrax03 GPS chip made by Fastrax, a Finnish company.

Now I don't know about Finnish attitudes towards the Dutch in general, but this Finnish piece of electronic wizardry absolutely killed the Dutch fount of navigational wisdom. (Apropos nothing in particular: the Dutch have a reputation as lousy drivers all across the mountainous parts of Europe.)

Tomtom Navigator 6 works quite well - when it works at all. Specifically Treos and Bluetooth receivers are well known sources of horrible interoperability problems. Same here: my receiver gets a fix moderately quickly and the TomTom shows the way, but after no more than 10 minutes the TomTom locks up my Treo completely - until the GPS is switched off or the BT connection is lost.

This obviously sucks, and is a tale of woe oft repeated elsewhere on the intertubes.

I am, however, really stubborn about fixing problems. So I started digging through all the horror stories, tried all kinds of suggested things, learned a bit about NMEA, to no avail - until the really simple, really stupid cause dawned on me: During a session with a serial terminal reading the NMEA data from the iTrax I realized that the volume of stuff it sends is quite..substantial.

The FasTrax docs about NMEA and their chips are quite good. NMEA has a bunch of required and optional messages, and I learned that for barebones navigation one only needs RMC messages as often as possible; if one also wants to know things like satellite positions and fix quality, one needs GSA and GSV.

Other GPSs seem to have configurable separate output rates for these messages; most tips I found mentioned setting RMC to 1/sec and GSA/GSV to once every 5 secs - which makes a lot of sense, because there will be multiple GSV messages depending on the number of satellites in view.

Not so with the iTrax: you can configure the output rate very precisely (up to 5Hz) but only one rate for all messages - and by default it spews its (nonstandard) figure-of-merit message as well as a full set of GSVs every second. At least on the Treo this overwhelms TomTom after a few minutes (which sounds like very shoddy programming to me) and everything locks up hard.

The fix? Get rid of the GSV messages: you do lose the per-satellite signal quality and azimuth/elevation info, but that's all. The satellite status screen simply shows blank bars with the satellite number and the GGA and GSA messages still tell the TomTom enough to know how many and which satellites are in use and how good the nav fix is, so all is well.

FasTrax has made configuring the iTrax very simple: you send it ascii (nonstandard-but-NMEA-formatted) commands over the serial/BT connection and it stores them persistently in flash, done. I used BT Serial on the Treo, which works very well.

The online docs have all the necessary configuration info and the only thing you'll actually have to do is send it this one message, once:

$PFST,CONF,22,$A002

22 is the SYS_NMEA_MASK parameter, controlling which messages you want, and A002 means "send only RMC, GGA and GSA". (The default mask is A023, which includes the above plus FOM and GSV. Sending $PFST,CONF,22 shows you the current value of that parameter.)

Wasn't that easy?

[ published on Wed 05.11.2008 00:00 | filed in brainfarts | ]
Debian Silver Server
© Alexander Zangerl