Archive for the ‘gps’ Category

bluetooth gps receiver woes


I think maemo mapper is the killer app for the internet tablet. I use my 770 for lots of other things, but having a quick, zoomable copy of a street map and satellite map of where I live and drive and bike and hike on a handheld with this nice a screen is great. I downloaded all the maps for the island I live on from google maps. Even got a temporary ban from them after about 300 MiB (lots of .jpg files that were really html files saying “service unavailable at this time” or somesuch; had to write a script to delete the ones that weren’t images and wait about a week to download more). Since the new version of mapper, I’ve downloaded all the maps from virtual earth, too (street, satellite and hybrid). Now you might say that all this is somewhat silly, since the island isn’t that big and I rarely travel to the other (unknown) side of it, but I still like seeing what it all looks like from above.

After a few months, I got a bluetooth gps receiver as a present from my dad (it was a present because I’m poor due to the expensive island I live on) and it’s an excellent addition to the setup. Now it’s a quick, zoomable map centered here, wherever here happens to be.

Anyway, I was trying to figure out why maemo mapper wouldn’t connect properly to the gps the first time I tell mapper to connect to it after every time I power cycle the gps (bluetooth connection was okay, but it would never even parse the nmea sentences). Not really a terrible problem – all I had to do was uncheck and then recheck “enable gps” in the menu, but less than ideal. I asked around and found some help on internet tablet talk. Someone there suggested that it was in “sirf” mode instead of “nmea” mode when it came on initially. I checked it out some and found a utility to change a sirf gps receiver between sirf and nmea modes. It was a series of perl scripts and there was a hardcoded directory that had the developer’s home dir in it. I fixed that and then ran the script. This is where the tale turns sad. I still don’t know exactly what the script did, but from then on, it would output the initial “this is a sirf star gps receiver running on such and such a frequency and at such-and-such a baud rate etc” and then about 3 or 4 blocks of nmea sentences and then just nothing or gibberish as if it had changed baud rate after that. I tried forcing the serial port on my computer into every baud rate I could remember back from the days of modems and 8n1 hoobajooba and it was always gibberish after about 50 lines of normal stuff.

That was about a month ago, so I’ve been without bluetooth gps since then. The gps part still seemed to work, I assumed because after being on for a couple minutes, the “I’ve gotten a gps fix light” was blinking as if it had found one.

Tonight, I decided to find out what the hell was wrong. I cracked that bitch open, got out the oscilloscope and found where the sirf ic was talking nmea sentences to the bluetooth ic. I found it. It’s pin 14 if you care. Feeling clever, I soldered a wire to it on a DB9 cable and plugged it in thinking I could at least tell that way if the gps receiver was generating nmea sentences correctly and getting a fix. cat’ing /dev/ttyS0 gave me nothing and after a quick look on the scope, I remembered the difference between rs232 and rs232c. The two ics were talking at 3.3V or 5V, but not at 12V (or was it +-12V? – I forget). Anyway, short of a transistor and a 12V power supply or a MAX233, this wasn’t gonna work.

I gave up on that idea, and decided I should do what I wanted to try a month ago when it first broke and I first opened it up. There’s a small watch battery inside that’s soldered into place to keep some data on the current gps info so it can do a warm start instead of a cold start. At least that’s what I assume it does. I unsoldered one battery lead, shorting the battery out a few times in the process because the wires are about a millimeter apart. Let it sit for a minute or so and soldered it back in. Turned the thing on, cat’ed /dev/ttyS0 and voila, nmea sentences that kept going. I put it back in its case and brought it and my 770 outside to get some satellite goodness and it got a gps fix. Took longer than usual to get a fix, corroborating the cold start / warm start theory. Hooray, problem solved. Lesson: If you fuck up your bluetooth gps receiver, just unsolder/resolder the little battery inside and you have another chance to play with it for a while before trying another random perl script you downloaded from the internets to fuck it up again. 🙂 I tried searching google for many hours trying to find the information contained in that last sentence, so hopefully google will find this page soon and some other idiots who mess with their new toys won’t be without their toys for as long as I was. Happy soldering.