summaryrefslogtreecommitdiff
path: root/sirf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sirf.c')
-rw-r--r--sirf.c82
1 files changed, 41 insertions, 41 deletions
diff --git a/sirf.c b/sirf.c
index 680eb515..37470db0 100644
--- a/sirf.c
+++ b/sirf.c
@@ -176,42 +176,42 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
/* fix status is byte 19 */
navtype = (unsigned short)getub(buf, 19);
session->gpsdata.status = STATUS_NO_FIX;
- session->gpsdata.fix.mode = MODE_NO_FIX;
+ session->gpsdata.newdata.mode = MODE_NO_FIX;
if ((navtype & 0x80) != 0)
session->gpsdata.status = STATUS_DGPS_FIX;
else if ((navtype & 0x07) > 0 && (navtype & 0x07) < 7)
session->gpsdata.status = STATUS_FIX;
if ((navtype & 0x07) == 4 || (navtype & 0x07) == 6)
- session->gpsdata.fix.mode = MODE_3D;
+ session->gpsdata.newdata.mode = MODE_3D;
else if (session->gpsdata.status != 0)
- session->gpsdata.fix.mode = MODE_2D;
- if (session->gpsdata.fix.mode == MODE_3D)
+ session->gpsdata.newdata.mode = MODE_2D;
+ if (session->gpsdata.newdata.mode == MODE_3D)
mask |= ALTITUDE_SET;
gpsd_report(4, "MND 0x02: Navtype = 0x%0x, Status = %d, mode = %d\n",
- navtype,session->gpsdata.status,session->gpsdata.fix.mode);
+ navtype,session->gpsdata.status,session->gpsdata.newdata.mode);
/* byte 20 is HDOP, see below */
/* byte 21 is "mode 2", not clear how to interpret that */
- session->gpsdata.fix.time = session->gpsdata.sentence_time
+ session->gpsdata.newdata.time = session->gpsdata.sentence_time
= gpstime_to_unix(getsw(buf, 22), getul(buf, 24)*1e-2) - session->context->leap_seconds;
#ifdef NTPSHM_ENABLE
- if (session->gpsdata.fix.mode > MODE_NO_FIX) {
+ if (session->gpsdata.newdata.mode > MODE_NO_FIX) {
if ((session->time_seen & TIME_SEEN_GPS_2) == 0)
gpsd_report(4, "valid time in message 0x02, seen=0x%02x\n",
session->time_seen);
session->time_seen |= TIME_SEEN_GPS_2;
if (IS_HIGHEST_BIT(session->time_seen,TIME_SEEN_GPS_2))
- (void)ntpshm_put(session, session->gpsdata.fix.time + 0.8);
+ (void)ntpshm_put(session, session->gpsdata.newdata.time + 0.8);
}
#endif /* NTPSHM_ENABLE */
/* fix quality data */
session->gpsdata.hdop = (double)getub(buf, 20)/5.0;
- session->gpsdata.pdop = session->gpsdata.vdop = 0.0;
+ session->gpsdata.pdop = session->gpsdata.vdop = NAN;
if (session->gpsdata.satellites > 0)
dop(session->gpsdata.satellites_used, &session->gpsdata);
- mask |= TIME_SET | LATLON_SET | TRACK_SET | SPEED_SET | STATUS_SET | MODE_SET | HDOP_SET | CYCLE_START_SET;
+ mask |= TIME_SET | LATLON_SET | TRACK_SET | SPEED_SET | STATUS_SET | MODE_SET | HDOP_SET;
}
- return mask;
+ return mask | CYCLE_START_SET;
case 0x04: /* Measured tracker data out */
gpsd_zero_satellites(&session->gpsdata);
@@ -480,18 +480,18 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
*/
navtype = (unsigned short)getuw(buf, 3);
session->gpsdata.status = STATUS_NO_FIX;
- session->gpsdata.fix.mode = MODE_NO_FIX;
+ session->gpsdata.newdata.mode = MODE_NO_FIX;
if (navtype & 0x80)
session->gpsdata.status = STATUS_DGPS_FIX;
else if ((navtype & 0x07) > 0 && (navtype & 0x07) < 7)
session->gpsdata.status = STATUS_FIX;
- session->gpsdata.fix.mode = MODE_NO_FIX;
+ session->gpsdata.newdata.mode = MODE_NO_FIX;
if ((navtype & 0x07) == 4 || (navtype & 0x07) == 6)
- session->gpsdata.fix.mode = MODE_3D;
+ session->gpsdata.newdata.mode = MODE_3D;
else if (session->gpsdata.status)
- session->gpsdata.fix.mode = MODE_2D;
+ session->gpsdata.newdata.mode = MODE_2D;
gpsd_report(4, "GNI 0x29: Navtype = 0x%0x, Status = %d, mode = %d\n",
- navtype, session->gpsdata.status, session->gpsdata.fix.mode);
+ navtype, session->gpsdata.status, session->gpsdata.newdata.mode);
/*
* UTC is left all zeros in 231 and older firmware versions,
* and misdocumented in the Protocol Reference (version 1.4).
@@ -511,36 +511,36 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
session->gpsdata.nmea_date.tm_min = (int)getub(buf, 16);
session->gpsdata.nmea_date.tm_sec = 0;
session->gpsdata.subseconds = getuw(buf, 17)*1e-3;
- session->gpsdata.fix.time = session->gpsdata.sentence_time
+ session->gpsdata.newdata.time = session->gpsdata.sentence_time
= (double)mktime(&session->gpsdata.nmea_date)+session->gpsdata.subseconds;
- gpsd_report(5, "MID 41 UTC: %lf\n", session->gpsdata.fix.time);
+ gpsd_report(5, "MID 41 UTC: %lf\n", session->gpsdata.newdata.time);
#ifdef NTPSHM_ENABLE
- if (session->gpsdata.fix.mode > MODE_NO_FIX && session->gpsdata.nmea_date.tm_year != 0) {
+ if (session->gpsdata.newdata.mode > MODE_NO_FIX && session->gpsdata.nmea_date.tm_year != 0) {
if ((session->time_seen & TIME_SEEN_UTC_1) == 0)
gpsd_report(4, "valid time in message 0x29, seen=0x%02x\n",
session->time_seen);
session->time_seen |= TIME_SEEN_UTC_1;
if (IS_HIGHEST_BIT(session->time_seen,TIME_SEEN_UTC_1))
- (void)ntpshm_put(session, session->gpsdata.fix.time + 0.8);
+ (void)ntpshm_put(session, session->gpsdata.newdata.time + 0.8);
}
#endif /* NTPSHM_ENABLE */
/* skip 4 bytes of satellite map */
- session->gpsdata.fix.latitude = getsl(buf, 23)*1e-7;
- session->gpsdata.fix.longitude = getsl(buf, 27)*1e-7;
+ session->gpsdata.newdata.latitude = getsl(buf, 23)*1e-7;
+ session->gpsdata.newdata.longitude = getsl(buf, 27)*1e-7;
/* skip 4 bytes of altitude from ellipsoid */
mask = TIME_SET | LATLON_SET | STATUS_SET | MODE_SET;
- session->gpsdata.fix.altitude = getsl(buf, 31)*1e-2;
+ session->gpsdata.newdata.altitude = getsl(buf, 31)*1e-2;
/* skip 1 byte of map datum */
- session->gpsdata.fix.speed = getsw(buf, 36)*1e-2;
- session->gpsdata.fix.track = getsw(buf, 38)*1e-2;
+ session->gpsdata.newdata.speed = getsw(buf, 36)*1e-2;
+ session->gpsdata.newdata.track = getsw(buf, 38)*1e-2;
/* skip 2 bytes of magnetic variation */
- session->gpsdata.fix.climb = getsw(buf, 42)*1e-2;
+ session->gpsdata.newdata.climb = getsw(buf, 42)*1e-2;
/* HDOP should be available at byte 89, but in 231 it's zero. */
mask |= SPEED_SET | TRACK_SET | CLIMB_SET;
session->gpsdata.sentence_length = 91;
strcpy(session->gpsdata.tag, "GND");
}
- return mask;
+ return mask | CYCLE_START_SET;
case 0x32: /* SBAS corrections */
return 0;
@@ -584,7 +584,7 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
session->time_seen);
session->time_seen |= TIME_SEEN_UTC_2;
if (IS_HIGHEST_BIT(session->time_seen,TIME_SEEN_UTC_2))
- (void)ntpshm_put(session, session->gpsdata.fix.time + 0.3);
+ (void)ntpshm_put(session, session->gpsdata.newdata.time + 0.3);
#endif /* NTPSHM_ENABLE */
mask |= TIME_SET;
}
@@ -594,27 +594,27 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
/* this packet is only sent by uBlox firmware from version 1.32 */
mask = LATLON_SET | ALTITUDE_SET | SPEED_SET | TRACK_SET | CLIMB_SET |
STATUS_SET | MODE_SET | HDOP_SET | VDOP_SET | PDOP_SET;
- session->gpsdata.fix.latitude = getsl(buf, 1) * RAD_2_DEG * 1e-8;
- session->gpsdata.fix.longitude = getsl(buf, 5) * RAD_2_DEG * 1e-8;
- session->gpsdata.separation = wgs84_separation(session->gpsdata.fix.latitude, session->gpsdata.fix.longitude);
- session->gpsdata.fix.altitude = getsl(buf, 9) * 1e-3 - session->gpsdata.separation;
- session->gpsdata.fix.speed = getsl(buf, 13) * 1e-3;
- session->gpsdata.fix.climb = getsl(buf, 17) * 1e-3;
- session->gpsdata.fix.track = getsl(buf, 21) * RAD_2_DEG * 1e-8;
+ session->gpsdata.newdata.latitude = getsl(buf, 1) * RAD_2_DEG * 1e-8;
+ session->gpsdata.newdata.longitude = getsl(buf, 5) * RAD_2_DEG * 1e-8;
+ session->gpsdata.separation = wgs84_separation(session->gpsdata.newdata.latitude, session->gpsdata.newdata.longitude);
+ session->gpsdata.newdata.altitude = getsl(buf, 9) * 1e-3 - session->gpsdata.separation;
+ session->gpsdata.newdata.speed = getsl(buf, 13) * 1e-3;
+ session->gpsdata.newdata.climb = getsl(buf, 17) * 1e-3;
+ session->gpsdata.newdata.track = getsl(buf, 21) * RAD_2_DEG * 1e-8;
navtype = (unsigned short)getub(buf, 25);
session->gpsdata.status = STATUS_NO_FIX;
- session->gpsdata.fix.mode = MODE_NO_FIX;
+ session->gpsdata.newdata.mode = MODE_NO_FIX;
if (navtype & 0x80)
session->gpsdata.status = STATUS_DGPS_FIX;
else if ((navtype & 0x07) > 0 && (navtype & 0x07) < 7)
session->gpsdata.status = STATUS_FIX;
if ((navtype & 0x07) == 4 || (navtype & 0x07) == 6)
- session->gpsdata.fix.mode = MODE_3D;
+ session->gpsdata.newdata.mode = MODE_3D;
else if (session->gpsdata.status)
- session->gpsdata.fix.mode = MODE_2D;
+ session->gpsdata.newdata.mode = MODE_2D;
gpsd_report(4, "EMND 0x62: Navtype = 0x%0x, Status = %d, mode = %d\n",
- navtype, session->gpsdata.status, session->gpsdata.fix.mode);
+ navtype, session->gpsdata.status, session->gpsdata.newdata.mode);
if (navtype & 0x40) { /* UTC corrected timestamp? */
mask |= TIME_SET;
@@ -625,7 +625,7 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
session->gpsdata.nmea_date.tm_min = (int)getub(buf, 31);
session->gpsdata.nmea_date.tm_sec = 0;
session->gpsdata.subseconds = ((unsigned short)getuw(buf, 32))*1e-3;
- session->gpsdata.fix.time = session->gpsdata.sentence_time
+ session->gpsdata.newdata.time = session->gpsdata.sentence_time
= (double)mkgmtime(&session->gpsdata.nmea_date)+session->gpsdata.subseconds;
#ifdef NTPSHM_ENABLE
if ((session->time_seen & TIME_SEEN_UTC_2) == 0)
@@ -633,7 +633,7 @@ gps_mask_t sirf_parse(struct gps_device_t *session, unsigned char *buf, size_t l
session->time_seen);
session->time_seen |= TIME_SEEN_UTC_2;
if (IS_HIGHEST_BIT(session->time_seen,TIME_SEEN_UTC_2))
- (void)ntpshm_put(session, session->gpsdata.fix.time + 0.8);
+ (void)ntpshm_put(session, session->gpsdata.newdata.time + 0.8);
#endif /* NTPSHM_ENABLE */
session->context->valid |= LEAP_SECOND_VALID;
}