diff options
author | Chris Kuethe <chris.kuethe@gmail.com> | 2008-12-02 06:36:01 +0000 |
---|---|---|
committer | Chris Kuethe <chris.kuethe@gmail.com> | 2008-12-02 06:36:01 +0000 |
commit | bc0cc45ff1d8733d5e2c6b83e866dc5497fd2f66 (patch) | |
tree | 6a71c0334276ddbc39b280c0ccdb7051daa4e72c /sirf.c | |
parent | f62200ebbf36752fc6403b0261b40bda9e8bc31b (diff) | |
download | gpsd-bc0cc45ff1d8733d5e2c6b83e866dc5497fd2f66.tar.gz |
fix parsing of geodetic navigation data, from Philip Derrin
Diffstat (limited to 'sirf.c')
-rw-r--r-- | sirf.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -492,14 +492,16 @@ static gps_mask_t sirf_msg_geodetic(struct gps_device_t *session, unsigned char session->gpsdata.fix.longitude = getbesl(buf, 27)*1e-7; /* skip 4 bytes of altitude from ellipsoid */ mask = TIME_SET | LATLON_SET | STATUS_SET | MODE_SET; - session->gpsdata.fix.altitude = getbesl(buf, 31)*1e-2; + session->gpsdata.fix.altitude = getbesl(buf, 35)*1e-2; /* skip 1 byte of map datum */ - session->gpsdata.fix.speed = getbesw(buf, 36)*1e-2; - session->gpsdata.fix.track = getbesw(buf, 38)*1e-2; + session->gpsdata.fix.speed = getbesw(buf, 40)*1e-2; + session->gpsdata.fix.track = getbesw(buf, 42)*1e-2; /* skip 2 bytes of magnetic variation */ - session->gpsdata.fix.climb = getbesw(buf, 42)*1e-2; + session->gpsdata.fix.climb = getbesw(buf, 46)*1e-2; /* HDOP should be available at byte 89, but in 231 it's zero. */ - mask |= SPEED_SET | TRACK_SET | CLIMB_SET | CYCLE_START_SET; + mask |= SPEED_SET | TRACK_SET | CYCLE_START_SET; + if (session->gpsdata.fix.mode == MODE_3D) + mask |= ALTITUDE_SET | CLIMB_SET; session->gpsdata.sentence_length = 91; (void)strlcpy(session->gpsdata.tag, "GND",MAXTAGLEN+1); } |