View source for Hammerhead/Protocol
From Openmoko
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page:
Return to Hammerhead/Protocol.
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page:
Return to Hammerhead/Protocol.
Christian did some stracing on TomTom device, and result is great logs at http://www.maintech.de/download/hammerhead-strace.log .
GPS signals at wikipedia seems to be required reading for very basics, along with this page from University of Colorado for more in depth stuff.
From reading the published brief information sheets on global locates products, not the patents. The global locate chip has massively parallel correlators, and configurable integrators to integrate over a given time. I would expect it to do something like - in this case.
To keep to the datasheet of 1s position times, it cannot read the whole navigation message, but significantly under 50 bits of it. It must.
Were there by any chance 8 satellites overhead at the time that log was made?
The protocol appears to be oriented around 32-bit words (the single-byte markers notwithstanding.) I'm not absolutely certain, but I strongly suspect the byte order is LSB-first.
The first stream of 0x80's to the GPS is simply to synch up the UART in the GPS to the correct baudrate.
Packet format (same format in both directions):
For example:
ff 04fdc00c fc
(possibly followed by zeroes), is a request for a packet of type 0C, with length 20d ((4 + 1) * 4), and flags C0.
fe 04fdc00c 0025102a 45dbdd4e 36030000 4b260000 16010000 fc
would be an appropriate response.
Packet types:
Frequency | Type | Max length | Min length |
9 | 16 | 73 | 11 |
86 | 08 | 19 | 11 |
8 | e2 | 15 | 15 |
7 | 23 | 133 | 101 |
63 | 0a | 15 | 15 |
6 | 24 | 71 | 39 |
52 | 0b | 11 | 11 |
4 | 01 | 11 | 11 |
263 | 05 | 19 | 15 |
24 | 9d | 315 | 19 |
2 | 06 | 25 | 19 |
16 | e0 | 11 | 11 |
13 | 20 | 15 | 15 |
13 | 10 | 577 | 59 |
128 | 18 | 11 | 11 |
12 | 9e | 303 | 15 |
117 | 00 | 65 | 39 |
11 | 0c | 33 | 11 |
10 | 9f | 477 | 61 |
10 | 0e | 541 | 31 |
1 | e5 | 11 | 11 |
1 | 80 | 17 | 17 |
1 | 13 | 11 | 11 |
1 | 04 | 23 | 23 |
1 | 02 | 11 | 11 |
It is possible to translate NMEA messages into something readable using script like this:
#!/bin/bash grep -v gettimeofday | \ sed 's/read.3/read(GPS/' | \ sed 's/write.3/write(GPS/' | \ sed 's/write.5/write(NMEA/' | \ sed 's/\\/\\\\/g' | \ while read LINE; do if echo $LINE | grep write.NMEA; then echo -e $LINE else echo "$LINE" fi done
NMEA description is available at http://www.gpsinformation.org/dale/nmea.htm .
At this point:
256 write(GPS, "\xfe\x00\xfd\x40\x08\x40\x60\x00\x00\xfc", 10) = 10 256 write(GPS, "\xfe\x00\xfd\x40\x08\x40\x60\x00\x00\xfc", 10) = 10 256 write(NMEA, "\x24\x47\x50\x47\x47\x41\x2c\x31\x35\x34\x31\x30\x34\x2e\x39\x35\x2c\x34\x39\x34\x38\x2e\x39\x35\x30\x33\x33\x39\x2c\x4e\x2c\x30\x30\x39\x35\x37\x2e\x39\x35\x35\x39\x37\x39\x2c\x45\x2c\x31\x2c\x30\x36\x2c\x35\x2e\x30\x2c\x32\x32\x30\x2e\x30\x2c\x4d\x2c\x2d\x30\x2e\x35\x38\x31\x30\x31\x34\x2c\x4d\x2c\x2d\x30\x2e\x31\x39\x30\x30\x31\x39\x30\x2c\x2a\x34\x30\x0d\x0a", 91) = 91 256 write(NMEA, "$GPGGA,154104.95,4948.950339,N,00957.955979,E,1,06,5.0,220.0,M,-0.581014,M,-0.1900190,*40 ", 91) = 91
...6 satelitte GPS fix was obtained. (And yes, there's big read few lines before that in the log). As far as I can tell, only 5-6 sattelite were _used_ till the end of log.
GSA sentence looks interesting, too. It tells us satellites #02, #04, #08, #10, #13 and #27 were used at this point.
256 write(NMEA, "\x24\x47\x50\x47\x53\x41\x2c\x41\x2c\x33\x2c\x30\x32\x2c\x30\x34\x2c\x30\x38\x2c\x31\x30\x2c\x31\x33\x2c\x32\x37\x2c\x2c\x2c\x2c\x2c\x2c\x2c\x36\x2e\x37\x2c\x33\x2e\x30\x2c\x36\x2e\x30\x2a\x33\x45\x0d\x0a", 51) = 51 256 write(NMEA, "$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E
The whole log is
$GPGGA,154035.21,,,,,00,00,5.0,,M,-0.586099,M,-0.1700199,*6A $GPRMC,154035.24,V,,,,,,,240407,,*1A $GPGSA,A,1,,,,,,,,,,,,,11.2,5.0,10.0*36 $GPGGA,154035.61,,,,,00,00,5.0,,M,-0.586099,M,-0.1700199,*6E $GPRMC,154035.63,V,,,,,,,240407,,*19 $GPGSA,A,1,,,,,,,,,,,,,11.2,5.0,10.0*36 $GPGGA,154038.24,,,,,00,04,300.0,,M,-0.586099,M,0.0000199,*4B $GPRMC,154038.29,V,,,,,,,240407,,*1A $GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33 $GPGGA,154038.54,,,,,00,04,300.0,,M,-0.586099,M,0.0000199,*4C $GPRMC,154038.56,V,,,,,,,240407,,*12 $GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33 $GPGGA,154042.72,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*46 $GPRMC,154042.74,V,,,,,,,240407,,*1F $GPGSV,3,1,09,27,77,114,24,08,59,192,33,10,46,302,33,02,33,244,34*7E $GPGSV,3,2,09,04,18,206,33,13,42,076,25,29,11,271,29,24,243,352,*49 $GPGSV,3,3,09,23,14,085,*49 $GPGSA,A,1,02,04,08,10,27,,,,,,,,669.0,300.0,600.0*36 $GPGGA,154043.67,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*43 $GPRMC,154043.69,V,,,,,,,240407,,*12 $GPGSA,A,1,02,04,08,10,27,,,,,,,,669.0,300.0,600.0*36 $GPGGA,154046.89,,,,,00,06,300.0,,M,-0.587100,M,0.0000199,*47 $GPRMC,154046.93,V,,,,,,,240407,,*12 $GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33 $GPGGA,154047.14,,,,,00,06,300.0,,M,-0.587100,M,0.0000199,*42 $GPRMC,154047.19,V,,,,,,,240407,,*11 $GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33 $GPGGA,154050.07,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*47 $GPRMC,154050.10,V,,,,,,,240407,,*1E $GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39 $GPGGA,154050.45,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*41 $GPRMC,154050.47,V,,,,,,,240407,,*1C $GPGSV,3,1,09,27,77,114,24,08,59,192,26,10,46,302,25,13,42,076,16*78 $GPGSV,3,2,09,02,33,244,26,04,18,206,25,29,11,271,25,24,243,352,*44 $GPGSV,3,3,09,23,14,085,*49 $GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39 $GPGGA,154053.35,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*45 $GPRMC,154053.37,V,,,,,,,240407,,*18 $GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39 $GPGGA,154058.70,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*49 $GPRMC,154058.72,V,,,,,,,240407,,*12 $GPGSA,A,1,02,,,,,,,,,,,,669.0,300.0,600.0*3E $GPGGA,154058.97,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*40 $GPRMC,154058.98,V,,,,,,,240407,,*16 $GPGSA,A,1,02,,,,,,,,,,,,669.0,300.0,600.0*3E $GPGGA,154059.38,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*44 $GPRMC,154059.40,V,,,,,,,240407,,*12 $GPGSA,A,1,02,13,,,,,,,,,,,669.0,300.0,600.0*3C $GPGGA,154104.95,4948.950339,N,00957.955979,E,1,06,5.0,220.0,M,-0.581014,M,-0.1900190,*40 $GPRMC,154104.95,A,4948.950339,N,00957.955979,E,000.0,000.0,240407,,*3E $GPGSV,3,1,09,08,59,192,42,10,46,302,42,04,18,206,41,27,77,114,16*74 $GPGSV,3,2,09,13,42,076,18,02,33,244,18,29,11,271,40,24,243,352,*48 $GPGSV,3,3,09,23,14,085,*49 $GPGSA,A,3,04,08,10,,,,,,,,,,11.2,5.0,10.0*39 $GPGGA,154106.52,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.581025,M,-0.1900190,*4A $GPRMC,154111.60,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*35 $GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C $GPGGA,154122.94,,,,,00,06,3.0,,M,-0.581010,M,-0.1900190,*62 $GPRMC,154122.96,V,,,,,,,240407,,*14 $GPGSA,A,1,13,,,,,,,,,,,,6.7,3.0,6.0*36 $GPGGA,154119.10,4948.936977,N,00957.930742,E,1,05,3.0,245.0,M,-0.576004,M,-0.1870190,*4D $GPRMC,154119.10,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3A $GPGSA,A,3,04,08,10,27,,,,,,,,,6.7,3.0,6.0*3E $GPGGA,154128.15,4948.936977,N,00957.930742,E,1,06,5.0,245.0,M,-0.587003,M,-0.1860190,*47 $GPRMC,154128.15,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3D $GPGSV,3,1,09,27,77,114,22,08,59,192,39,10,46,302,39,02,33,244,40*7B $GPGSV,3,2,09,04,18,206,38,13,42,076,11,24,243,352,,23,14,085,*48 $GPGSV,3,3,09,29,11,271,*4F $GPGSA,A,3,02,04,08,10,27,,,,,,,,11.2,5.0,10.0*3E $GPGGA,154131.86,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.578004,M,-0.1860190,*44 $GPRMC,154131.86,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3F $GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E $GPGGA,154138.55,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.578000,M,-0.1860190,*47 $GPRMC,154138.55,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*38 $GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E $GPGGA,154141.69,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.583002,M,-0.1840190,*42 $GPRMC,154141.69,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*39 $GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C $GPGGA,154146.16,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.595000,M,-0.1830190,*4F $GPRMC,154146.16,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*36 $GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C $GPGGA,154151.34,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.587002,M,-0.1860190,*4D $GPRMC,154151.34,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*30 $GPGSV,3,1,09,27,77,114,26,08,59,192,42,10,46,302,41,13,42,076,25*7A $GPGSV,3,2,09,02,33,244,42,04,18,206,37,29,11,271,37,24,243,352,*46 $GPGSV,3,3,09,23,14,085,*49 $GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E $GPGGA,154200.05,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.587002,M,-0.1860190,*48 $GPRMC,154200.05,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*35 $GPGSA,A,3,,,,,,,,,,,,,6.7,3.0,6.0*36