diff options
-rw-r--r-- | driver_evermore.c | 16 | ||||
-rw-r--r-- | driver_italk.c | 15 | ||||
-rw-r--r-- | driver_navcom.c | 22 | ||||
-rw-r--r-- | driver_proto.c | 4 | ||||
-rw-r--r-- | driver_sirf.c | 9 | ||||
-rw-r--r-- | driver_tsip.c | 27 | ||||
-rw-r--r-- | driver_ubx.c | 10 | ||||
-rw-r--r-- | driver_zodiac.c | 3 |
8 files changed, 67 insertions, 39 deletions
diff --git a/driver_evermore.c b/driver_evermore.c index 1f8b705b..c8136e28 100644 --- a/driver_evermore.c +++ b/driver_evermore.c @@ -184,11 +184,11 @@ gps_mask_t evermore_parse(struct gps_device_t * session, unsigned char *buf, switch (type) { case 0x02: /* Navigation Data Output */ session->context->gps_week = getleuw(buf2, 2); + session->context->gps_tow = getleul(buf2, 4) * 0.01; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = gpstime_to_unix(session->context->gps_week, - getleul(buf2, - 4) * 0.01) - + session->context->gps_tow) - session->context->leap_seconds; /*@ end @*/ ecef_to_wgs84fix(&session->newdata, &session->gpsdata.separation, @@ -224,11 +224,11 @@ gps_mask_t evermore_parse(struct gps_device_t * session, unsigned char *buf, case 0x04: /* DOP Data Output */ session->context->gps_week = getleuw(buf2, 2); + session->context->gps_tow = getleul(buf2, 4) * 0.01; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = gpstime_to_unix(session->context->gps_week, - getleul(buf2, - 4) * 0.01) - + session->context->gps_tow) - session->context->leap_seconds; /*@ end @*/ clear_dop(&session->gpsdata.dop); @@ -268,11 +268,11 @@ gps_mask_t evermore_parse(struct gps_device_t * session, unsigned char *buf, case 0x06: /* Channel Status Output */ session->context->gps_week = getleuw(buf2, 2); + session->context->gps_tow = getleul(buf2, 4) * 0.01; /*@ ignore @*//*@ splint is confused @ */ session->gpsdata.skyview_time = gpstime_to_unix(session->context->gps_week, - getleul(buf2, - 4) * 0.01) - + session->context->gps_tow) - session->context->leap_seconds; /*@ end @*/ session->gpsdata.satellites_visible = (int)getub(buf2, 8); @@ -328,11 +328,11 @@ gps_mask_t evermore_parse(struct gps_device_t * session, unsigned char *buf, /* clock offset is a manufacturer diagnostic */ /* (int)getleuw(buf2, 8); clock offset, 29000..29850 ?? */ session->context->gps_week = getleuw(buf2, 2); + session->context->gps_tow = getleul(buf2, 4) * 0.01; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = gpstime_to_unix(session->context->gps_week, - getleul(buf2, - 4) * 0.01) - + session->context->gps_tow) - session->context->leap_seconds; /*@ end @*/ visible = (unsigned char)getub(buf2, 10); diff --git a/driver_italk.c b/driver_italk.c index 4933164c..c21838f7 100644 --- a/driver_italk.c +++ b/driver_italk.c @@ -63,8 +63,9 @@ static gps_mask_t decode_itk_navfix(struct gps_device_t *session, gps_week = (ushort) getlesw(buf, 7 + 82); session->context->gps_week = gps_week; tow = (uint) getleul(buf, 7 + 84); - t = gpstime_to_unix((int)gps_week, - tow / 1000.0) - session->context->leap_seconds; + session->context->gps_tow = tow / 1000.0; + t = gpstime_to_unix((int)gps_week,session->context->gps_tow) + - session->context->leap_seconds; session->newdata.time = t; mask |= TIME_IS; @@ -138,8 +139,9 @@ static gps_mask_t decode_itk_prnstatus(struct gps_device_t *session, gps_week = (ushort) getleuw(buf, 7 + 4); session->context->gps_week = gps_week; tow = (uint) getleul(buf, 7 + 6); - t = gpstime_to_unix((int)gps_week, - tow / 1000.0) - session->context->leap_seconds; + session->context->gps_tow = tow / 1000.0; + t = gpstime_to_unix((int)gps_week,session->context->gps_tow) + - session->context->leap_seconds; session->gpsdata.skyview_time = t; gpsd_zero_satellites(&session->gpsdata); @@ -202,8 +204,9 @@ static gps_mask_t decode_itk_utcionomodel(struct gps_device_t *session, gps_week = (ushort) getleuw(buf, 7 + 36); session->context->gps_week = gps_week; tow = (uint) getleul(buf, 7 + 38); - t = gpstime_to_unix((int)gps_week, - tow / 1000.0) - session->context->leap_seconds; + session->context->gps_tow = tow / 1000.0; + t = gpstime_to_unix((int)gps_week,session->context->gps_tow) + - session->context->leap_seconds; session->newdata.time = t; gpsd_report(LOG_DATA, diff --git a/driver_navcom.c b/driver_navcom.c index 9fb75624..94ef0b0a 100644 --- a/driver_navcom.c +++ b/driver_navcom.c @@ -416,9 +416,10 @@ static gps_mask_t handle_0xb1(struct gps_device_t *session) week = (uint16_t) getleuw(buf, 3); session->context->gps_week = week; tow = (uint32_t) getleul(buf, 5); + session->context->gps_tow = tow / 1000.0; session->newdata.time = - gpstime_to_unix((int)week, - tow / 1000.0) - session->context->leap_seconds; + gpstime_to_unix((int)week, session->context->gps_tow) + - session->context->leap_seconds; /* Satellites used */ sats_used = (uint32_t) getleul(buf, 9); @@ -656,7 +657,9 @@ static gps_mask_t handle_0x81(struct gps_device_t *session) /*@ +predboolothers @*/ char time_str[24]; session->context->gps_week = wn; - (void)unix_to_iso8601(gpstime_to_unix((int)wn, (double)(toc * SF_TOC)), + session->context->gps_tow = (double)(toc * SF_TOC); + /* leap second? */ + (void)unix_to_iso8601(gpstime_to_unix((int)wn, session->context->gps_tow), time_str, sizeof(time_str)); gpsd_report(LOG_PROG, @@ -737,10 +740,11 @@ static gps_mask_t handle_0x86(struct gps_device_t *session) /* Timestamp and PDOP */ session->context->gps_week = week; + session->context->gps_tow = tow / 1000.0f; /*@ ignore @*//*@ splint is confused @ */ session->gpsdata.skyview_time = - gpstime_to_unix((int)week, - tow / 1000.0f) - session->context->leap_seconds; + gpstime_to_unix((int)week, session->context->gps_tow) + - session->context->leap_seconds; /*@ end @*/ /* Give this driver a single point of truth about DOPs */ //session->gpsdata.dop.pdop = (int)pdop / 10.0; @@ -839,7 +843,8 @@ static gps_mask_t handle_0xb0(struct gps_device_t *session) char time_str[24]; session->context->gps_week = week; - (void)unix_to_iso8601(gpstime_to_unix((int)week, (double)tow / 1000.0), + session->context->gps_tow = (double)tow / 1000.0; + (void)unix_to_iso8601(gpstime_to_unix((int)week, session->context->gps_tow), time_str, sizeof(time_str)); gpsd_report(LOG_PROG, @@ -932,10 +937,11 @@ static gps_mask_t handle_0xb5(struct gps_device_t *session) mask |= (HERR_IS | VERR_IS); #endif /* __UNUSED__ */ session->context->gps_week = week; + session->context->gps_tow = tow / 1000.0f; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = - gpstime_to_unix((int)week, - tow / 1000.0f) - session->context->leap_seconds; + gpstime_to_unix((int)week, session->context->gps_tow) + - session->context->leap_seconds; /*@ end @*/ gpsd_report(LOG_PROG, "Navcom: received packet type 0xb5 (Pseudorange Noise Statistics)\n"); diff --git a/driver_proto.c b/driver_proto.c index a140c640..79fa4b7b 100644 --- a/driver_proto.c +++ b/driver_proto.c @@ -156,8 +156,10 @@ _proto__msg_utctime(struct gps_device_t *session, unsigned char *buf, size_t dat gps_week = GET_WEEKNUMBER(); session->context->gps_week = gps_week; session->context->leap_seconds = GET_GPS_LEAPSECONDS(); + session->context->gps_tow = tow / 1000.0; - t = gpstime_to_unix(gps_week, tow/1000.0) - session->context->leap_seconds; + t = gpstime_to_unix(gps_week, session->context->gps_tow) + - session->context->leap_seconds; session->newdata.time = t; return TIME_IS | ONLINE_IS; diff --git a/driver_sirf.c b/driver_sirf.c index 6d426ab1..2d2d676a 100644 --- a/driver_sirf.c +++ b/driver_sirf.c @@ -471,12 +471,12 @@ static gps_mask_t sirf_msg_svinfo(struct gps_device_t *session, gpsd_zero_satellites(&session->gpsdata); session->context->gps_week = getbesw(buf, 1); + session->context->gps_tow = getbeul(buf, 3) * 1e-2; /*@ ignore @*//*@ splint is confused @ */ session->gpsdata.skyview_time = - gpstime_to_unix( session->context->gps_week, - getbeul(buf, - 3) * 1e-2) - session->context->leap_seconds; + gpstime_to_unix( session->context->gps_week, session->context->gps_tow) + - session->context->leap_seconds; /*@ end @*/ for (i = st = 0; i < SIRF_CHANNELS; i++) { int off = 8 + 15 * i; @@ -614,9 +614,10 @@ static gps_mask_t sirf_msg_navsol(struct gps_device_t *session, /* byte 20 is HDOP, see below */ /* byte 21 is "mode 2", not clear how to interpret that */ session->context->gps_week = getbesw(buf, 22); + session->context->gps_tow = getbeul(buf, 24) * 1e-2; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = - gpstime_to_unix(getbesw(buf, 22), getbeul(buf, 24) * 1e-2) - + gpstime_to_unix(session->context->gps_week, session->context->gps_tow) - session->context->leap_seconds; /*@ end @*/ #ifdef NTPSHM_ENABLE diff --git a/driver_tsip.c b/driver_tsip.c index 9d4109d0..1e82f18a 100644 --- a/driver_tsip.c +++ b/driver_tsip.c @@ -197,8 +197,10 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session) session->context->gps_week = s1; session->context->leap_seconds = (int)round(f2); session->context->valid |= LEAP_SECOND_VALID; + session->context->gps_tow = f1; - session->newdata.time = gpstime_to_unix((int)s1, f1) - f2; + session->newdata.time = gpstime_to_unix(session->context->gps_week + , session->context->gps_tow) - session->context->leap_seconds; mask |= TIME_IS; } gpsd_report(LOG_INF, "GPS Time %f %d %f\n", f1, s1, f2); @@ -290,10 +292,12 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session) session->newdata.altitude = getbef(buf, 8); f1 = getbef(buf, 12); /* clock bias */ f2 = getbef(buf, 16); /* time-of-fix */ + session->context->gps_tow = f2; if (session->context->gps_week) { session->newdata.time = gpstime_to_unix((int)session->context->gps_week, - f2) - session->context->leap_seconds; + session->context->gps_tow) + - session->context->leap_seconds; mask |= TIME_IS; } mask |= LATLON_IS | ALTITUDE_IS | CLEAR_IS | REPORT_IS; @@ -551,10 +555,12 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session) session->newdata.altitude = getbed(buf, 16); d1 = getbed(buf, 24); /* clock bias */ f1 = getbef(buf, 32); /* time-of-fix */ + session->context->gps_tow = f1; if (session->context->gps_week) { session->newdata.time = gpstime_to_unix((int)session->context->gps_week, - f1) - session->context->leap_seconds; + session->context->gps_tow) + - session->context->leap_seconds; mask |= TIME_IS; } gpsd_report(LOG_INF, "GPS DP LLA %f %f %f %f\n", @@ -649,10 +655,11 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session) session->context->valid |= LEAP_SECOND_VALID; } session->context->gps_week = s4; + session->context->gps_tow = ul1 * 1e-3; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = - gpstime_to_unix((int)s4, - ul1 * 1e-3) - session->context->leap_seconds; + gpstime_to_unix((int)s4, session->context->gps_tow) + - session->context->leap_seconds; /*@ end @*/ mask |= TIME_IS | LATLON_IS | ALTITUDE_IS | SPEED_IS | TRACK_IS | @@ -690,10 +697,12 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session) session->context->valid |= LEAP_SECOND_VALID; } session->context->gps_week = s1; + session->context->gps_tow = ul1 * 1e3; /*@ ignore @*//*@ splint is confused @ */ session->newdata.time = - gpstime_to_unix(session->context->gps_week, - ul1 * 1e-3) - session->context->leap_seconds; + gpstime_to_unix(session->context->gps_week, + session->context->gps_tow) + - session->context->leap_seconds; /*@ end @*/ session->gpsdata.status = STATUS_NO_FIX; session->newdata.mode = MODE_NO_FIX; @@ -758,8 +767,10 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session) session->context->valid |= LEAP_SECOND_VALID; session->context->gps_week = s1; + session->context->gps_tow = (double)ul1; session->newdata.time = - gpstime_to_unix((int)s1, (double)ul1) - (double)s2; + gpstime_to_unix((int)s1, session->context->gps_tow) + - (double)s2; mask |= TIME_IS; gpsd_report(LOG_DATA, "SP-TTS 0xab time=%.2f mask={TIME}\n", session->newdata.time); diff --git a/driver_ubx.c b/driver_ubx.c index 0bb61958..127f410f 100644 --- a/driver_ubx.c +++ b/driver_ubx.c @@ -73,9 +73,11 @@ ubx_msg_nav_sol(struct gps_device_t *session, unsigned char *buf, tow = (unsigned int)getleul(buf, 0); gw = (unsigned short)getlesw(buf, 8); session->context->gps_week = gw; + session->context->gps_tow = tow / 1000.0; - t = gpstime_to_unix((int)session->context->gps_week, - tow / 1000.0) - session->context->leap_seconds; + t = gpstime_to_unix((int)session->context->gps_week, + session->context->gps_tow) + - session->context->leap_seconds; session->newdata.time = t; mask |= TIME_IS; } @@ -179,8 +181,10 @@ ubx_msg_nav_timegps(struct gps_device_t *session, unsigned char *buf, if ((flags & 0x7) != 0) session->context->leap_seconds = (int)getub(buf, 10); + session->context->gps_tow = tow / 1000.0; t = gpstime_to_unix((int)session->context->gps_week, - tow / 1000.0) - session->context->leap_seconds; + session->context->gps_tow) + - session->context->leap_seconds; session->newdata.time = t; gpsd_report(LOG_DATA, "TIMEGPS: time=%.2f mask={TIME}\n", diff --git a/driver_zodiac.c b/driver_zodiac.c index 58537dc1..f2a8d496 100644 --- a/driver_zodiac.c +++ b/driver_zodiac.c @@ -241,8 +241,9 @@ static gps_mask_t handle1002(struct gps_device_t *session) } } session->context->gps_week = gps_week; + session->context->gps_tow = (double) gps_seconds; session->gpsdata.skyview_time = - gpstime_to_unix(gps_week, (double)gps_seconds); + gpstime_to_unix(gps_week, session->context->gps_tow); gpsd_report(LOG_DATA, "1002: visible=%d used=%d mask={SATELLITE|USED}\n", session->gpsdata.satellites_visible, session->gpsdata.satellites_used); |