Improvements on my GPS Logger

During this summer, I have improved the firmware of my GPS-Logger more than ever. Most important, the firmware as well as the RawRead-tool is now completely available on GitHub. By that, everyone can participate in making them even better. Here's what I have changed during the past weeks.


Basically, I have rewritten and improved nearly the whole code. Thanks to some great feedback I got, the code is now much faster and capable of processing more data. The main changes concern the GPS and NoFS libraries.

Starting with version 1.4, you are now able to choose which NMEA-messages you want to log instead of being only able to get $GPGGA sentences. The only thing you have to change are the parameters when calling gps_init(). Just pass a number of message types that you want to receive, joined by OR-operations. Furthermore, you can specify the frequency with which NMEA-messages should be logged. Currently, values of up to 4 Hz are supported, though (soon, you will be able to log with 10 Hz, the maximum output rate of the GPS module). Apart from that, incoming NMEA-messages are now checked for validity and several bugfixes have been applied.

As mentioned before, the NoFS-library has been improved, too. One of the problems was that the more data was already on the card, the longer it took to initialize the device because all the data had to be scanned for the current end of data. For example, using a memory card with about 1.4 MB data on it (that's about 5 hours of logging $GPGGA messages with 1 Hz), the initial scan used to take about 20 seconds. Now, the same amount of data is scanned in not even a second. Additionally, the device remembers up to which point the data has been scanned the last time, thus minimizing the amount of data has to be scanned (because the new end of data can only be after the old one). By that, the device has to scan through at most 10 hours of data (due to battery limitations). This leads to the fact that the device initialization will take at most two seconds from now on.


Parallel to the micro-controller firmware, I have completely rewritten the application for reading out the memory card. The main problem in the initial application was that it worked only on the Windows platform. Now, having written the new version in Python, the tool is platform independent and it's working on Windows, Mac and Linux operating systems. The tool is controlled via command line parameters now, so I suggest executing python -h on the first run to get an overview over available commands. Due to direct drive access, you have to run the tool with root-permissions!

An important improvement regarding security is the fact that I've implemented a check wether a given device has a NoFS or not. By that, it can't happen that your harddrive is overwritten by accident (unless you --force it to).

There's a known issue on Mac OS, though. Due to its pretty restrictive drive access policies, you can't create an entirely new device on a memory card, if the card already has another file system. Furthermore, as I don't own any Apple device (yet?), I cannot really work on this problem. But the project is open source, so if you know how to solve this issue, I'd be delighted if you participate!


I managed to make a lot improvements to the firmware and the tool and they both certainly got better, but that's not the end of it. For both projects, there are still open ideas and issues which I will address in the future. As the next semester of my studies begins coming Monday, I won't have much time to work on it, though. But I'm pretty sure that the left issues will be done at the end of this year. If you want to participate in this project, please do so! If you have any comments or suggestions, feel free to post them using my new commenting feature or by sending me an e-mail and I will get back to you as soon as I can.