summaryrefslogtreecommitdiff
path: root/driver_greis.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-11-10 19:27:38 -0800
committerGary E. Miller <gem@rellim.com>2018-11-10 19:27:38 -0800
commitd4e08feaecf88fee5ef8f268d6dc63f27f1cc590 (patch)
tree943421d0615907dc5f19923b51f09b101530f632 /driver_greis.c
parent9bb0afeac71876dba31fdc77ee30194603f61049 (diff)
downloadgpsd-d4e08feaecf88fee5ef8f268d6dc63f27f1cc590.tar.gz
RAW: Save space in the JSON. Data from GREIS.
Diffstat (limited to 'driver_greis.c')
-rw-r--r--driver_greis.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/driver_greis.c b/driver_greis.c
index 663cbeb7..11b8b6d5 100644
--- a/driver_greis.c
+++ b/driver_greis.c
@@ -93,6 +93,7 @@ static gps_mask_t greis_msg_RT(struct gps_device_t *session,
}
session->driver.greis.rt_tod = getleu32(buf, 0);
+ memset(&session->gpsdata.raw, 0, sizeof(session->gpsdata.raw));
session->driver.greis.seen_rt = true;
session->driver.greis.seen_az = false;
@@ -164,6 +165,7 @@ static gps_mask_t greis_msg_UO(struct gps_device_t *session,
static gps_mask_t greis_msg_GT(struct gps_device_t *session,
unsigned char *buf, size_t len)
{
+ double t_intp;
uint32_t tow; /* Time of week [ms] */
uint16_t wn; /* GPS week number (modulo 1024) [dimensionless] */
@@ -188,6 +190,16 @@ static gps_mask_t greis_msg_GT(struct gps_device_t *session,
"GREIS: GT, tow: %u, wn: %u, time: %.2f\n", tow, wn,
session->newdata.time);
+ /* save raw.mtime, just in case */
+ session->gpsdata.raw.mtime.tv_nsec =
+ modf(session->newdata.time, &t_intp) * 1e9;
+ session->gpsdata.raw.mtime.tv_sec = (time_t)t_intp + \
+ session->context->leap_seconds;
+ gpsd_log(&session->context->errout, LOG_DATA,
+ "GREIS: GT, RAW @ %ld.%09ld\n",
+ (long)session->gpsdata.raw.mtime.tv_sec,
+ session->gpsdata.raw.mtime.tv_nsec);
+
return TIME_SET | NTPTIME_IS | ONLINE_SET;
}
@@ -202,7 +214,6 @@ static gps_mask_t greis_msg_PV(struct gps_device_t *session,
float vx, vy, vz; /* Cartesian velocities [m/s] */
float v_sigma; /* Velocity SEP [m/s] */
uint8_t solution_type;
- gps_mask_t mask;
if (len < 46) {
gpsd_log(&session->context->errout, LOG_WARN,
@@ -260,12 +271,8 @@ static gps_mask_t greis_msg_PV(struct gps_device_t *session,
session->newdata.longitude, session->newdata.altitude,
solution_type);
- mask = LATLON_SET | ALTITUDE_SET | CLIMB_SET | TRACK_SET | SPEED_SET |
+ return LATLON_SET | ALTITUDE_SET | CLIMB_SET | TRACK_SET | SPEED_SET |
MODE_SET | STATUS_SET | ECEF_SET | VECEF_SET;
- if (session->driver.greis.seen_raw) {
- mask |= RAW_SET;
- }
- return mask;
}
/**
@@ -402,6 +409,7 @@ static gps_mask_t greis_msg_SI(struct gps_device_t *session,
session->gpsdata.skyview[i].gnssid = 3;
session->gpsdata.skyview[i].svid = PRN - 210;
}
+ session->gpsdata.raw.meas[i].obs_code[0] = '\0';
session->gpsdata.raw.meas[i].gnssid =
session->gpsdata.skyview[i].gnssid;
session->gpsdata.raw.meas[i].svid =
@@ -694,7 +702,17 @@ static gps_mask_t greis_msg_ET(struct gps_device_t *session,
session->driver.greis.seen_el && session->driver.greis.seen_si)) {
/* Skyview seen, update it. Go even if no seen_ss or none visible */
mask |= SATELLITE_SET;
+
+ if (session->driver.greis.seen_raw) {
+ mask |= RAW_IS;
+ } else {
+ session->gpsdata.raw.mtime.tv_sec = 0;
+ session->gpsdata.raw.mtime.tv_nsec = 0;
+ }
+
} else {
+ session->gpsdata.raw.mtime.tv_sec = 0;
+ session->gpsdata.raw.mtime.tv_nsec = 0;
gpsd_log(&session->context->errout, LOG_WARN,
"GREIS: ET: missing satellite details in this epoch\n");
}