diff options
author | Michael Tatarinov <kukabu@gmail.com> | 2011-10-25 14:17:31 +0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2011-10-25 06:23:00 -0400 |
commit | 0254ac8e5be806a97a71c64282b6b1a283c28422 (patch) | |
tree | 81bfe05bf9b1414b92214f7bb0ed57c31758d1f5 | |
parent | f39e9a41f91416a09d531da886094e6db419fbee (diff) | |
download | gpsd-0254ac8e5be806a97a71c64282b6b1a283c28422.tar.gz |
Garmin binary driver. Fixed bug in getting leap seconds.
Signed-off-by: Eric S. Raymond <esr@thyrsus.com>
-rw-r--r-- | driver_garmin.c | 6 | ||||
-rw-r--r-- | gpsd.h-tail | 7 | ||||
-rw-r--r-- | monitor_garmin.c | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/driver_garmin.c b/driver_garmin.c index da09f9d6..fc03775d 100644 --- a/driver_garmin.c +++ b/driver_garmin.c @@ -368,8 +368,8 @@ gps_mask_t PrintSERPacket(struct gps_device_t *session, unsigned char pkt_id, // 631065600, unix seconds for 31 Dec 1989 Zulu time_l = (time_t) (631065600 + (GPSD_LE32TOH(pvt->grmn_days) * 86400)); // TODO, convert grmn_days to context->gps_week - time_l -= GPSD_LE16TOH(pvt->leap_sec); - session->context->leap_seconds = (int)GPSD_LE16TOH(pvt->leap_sec); + time_l -= GPSD_LE16TOH(pvt->leap_sec) + TAI_GPS_OFFSET; + session->context->leap_seconds = (int)GPSD_LE16TOH(pvt->leap_sec) + TAI_GPS_OFFSET; session->context->valid = LEAP_SECOND_VALID; // gps_tow is always like x.999 or x.998 so just round it time_l += (time_t) round(pvt->gps_tow); @@ -472,7 +472,7 @@ gps_mask_t PrintSERPacket(struct gps_device_t *session, unsigned char pkt_id, pvt->alt, pvt->epe, pvt->eph, pvt->epv, GPSD_LE16TOH(pvt->fix), pvt->gps_tow, session->newdata.latitude, session->newdata.longitude, pvt->lon_vel, pvt->lat_vel, - pvt->alt_vel, pvt->msl_hght, GPSD_LE16TOH(pvt->leap_sec), + pvt->alt_vel, pvt->msl_hght, GPSD_LE16TOH(pvt->leap_sec) + TAI_GPS_OFFSET, GPSD_LE32TOH(pvt->grmn_days)); if (session->newdata.mode > MODE_NO_FIX) { diff --git a/gpsd.h-tail b/gpsd.h-tail index acff12f4..7b457642 100644 --- a/gpsd.h-tail +++ b/gpsd.h-tail @@ -89,6 +89,13 @@ enum isgpsstat_t { */ #define GPS_EPOCH 315964800 /* 6 Jan 1981 00:00:00 UTC */ +/* + * TAI - GPS = 19 seconds. + * Needed because some devices (notably Garmin binary GPSes) + * report GPS - UTC offset. + */ +#define TAI_GPS_OFFSET 19 + struct gps_packet_t { /* packet-getter internals */ int type; diff --git a/monitor_garmin.c b/monitor_garmin.c index a3cfc736..10489909 100644 --- a/monitor_garmin.c +++ b/monitor_garmin.c @@ -177,7 +177,7 @@ static void garmin_bin_update(uint16_t pkt_id, uint32_t pkt_size UNUSED, unsigne display(mid51win, 4, 8, "%8.2f", pvt->alt + pvt->msl_hght); display(mid51win, 5, 9, "%5.1f", hypot(pvt->lon_vel, pvt->lat_vel)); display(mid51win, 6, 9, "%5.1f", pvt->alt_vel); - display(mid51win, 7, 8, "%d", (int)GPSD_LE16TOH(pvt->leap_sec)); + display(mid51win, 7, 8, "%d", (int)GPSD_LE16TOH(pvt->leap_sec) + TAI_GPS_OFFSET); display(mid51win, 8, 7, "%6.2f", pvt->epe); display(mid51win, 9, 7, "%6.2f", pvt->eph); display(mid51win, 10, 7, "%6.2f", pvt->epv); |