summaryrefslogtreecommitdiff
path: root/driver_ubx.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-04-04 20:38:16 -0700
committerGary E. Miller <gem@rellim.com>2019-04-04 20:38:16 -0700
commite650fd0e3247e6cfcf76b910e698d21e7dbd5837 (patch)
tree6ce820def56313598b407d45d3874cb1a8a02506 /driver_ubx.c
parent4965cd8ef81f650c2ee4450c76185e17f2c758f7 (diff)
downloadgpsd-e650fd0e3247e6cfcf76b910e698d21e7dbd5837.tar.gz
driver_ubx: Initial decode for UBX-TIM-TP.
Data partially decoded, but just goes to debug output.
Diffstat (limited to 'driver_ubx.c')
-rw-r--r--driver_ubx.c44
1 files changed, 40 insertions, 4 deletions
diff --git a/driver_ubx.c b/driver_ubx.c
index 5e2ac966..932d2680 100644
--- a/driver_ubx.c
+++ b/driver_ubx.c
@@ -68,7 +68,8 @@ static gps_mask_t ubx_msg_nav_posecef(struct gps_device_t *session,
unsigned char *buf, size_t data_len);
static gps_mask_t ubx_msg_nav_pvt(struct gps_device_t *session,
unsigned char *buf, size_t data_len);
-static void ubx_msg_sbas(struct gps_device_t *session, unsigned char *buf);
+static void ubx_msg_mon_ver(struct gps_device_t *session,
+ unsigned char *buf, size_t data_len);
static gps_mask_t ubx_msg_nav_sat(struct gps_device_t *session,
unsigned char *buf, size_t data_len);
static gps_mask_t ubx_msg_nav_sol(struct gps_device_t *session,
@@ -79,8 +80,9 @@ static gps_mask_t ubx_msg_nav_timegps(struct gps_device_t *session,
unsigned char *buf, size_t data_len);
static gps_mask_t ubx_msg_nav_velecef(struct gps_device_t *session,
unsigned char *buf, size_t data_len);
-static void ubx_msg_mon_ver(struct gps_device_t *session,
- unsigned char *buf, size_t data_len);
+static void ubx_msg_sbas(struct gps_device_t *session, unsigned char *buf);
+static gps_mask_t ubx_msg_tim_tp(struct gps_device_t *session,
+ unsigned char *buf, size_t data_len);
#ifdef RECONFIGURE_ENABLE
static void ubx_mode(struct gps_device_t *session, int mode);
#endif /* RECONFIGURE_ENABLE */
@@ -1108,6 +1110,40 @@ static void ubx_msg_inf(struct gps_device_t *session, unsigned char *buf,
return;
}
+/**
+ * Time Pulse Timedata - UBX-TIM-TP
+ */
+static gps_mask_t
+ubx_msg_tim_tp(struct gps_device_t *session, unsigned char *buf,
+ size_t data_len)
+{
+ gps_mask_t mask = ONLINE_SET;
+ uint32_t towMS;
+ uint32_t towSubMS;
+ int32_t qErr;
+ uint16_t week;
+ uint8_t flags;
+ uint8_t refInfo;
+
+ if (data_len < 16)
+ return 0;
+
+ towMS = getleu32(buf, 0);
+ towSubMS = getleu32(buf, 4);
+ qErr = getles32(buf, 8);
+ week = getleu16(buf, 12);
+ flags = buf[14];
+ refInfo = buf[15];
+
+ /* cast for 32 bit compatibility */
+ gpsd_log(&session->context->errout, LOG_DATA,
+ "TIM_TP: towMS %lu, towSubMS %lu, qErr %ld week %u\n"
+ " flags %#x, refInfo %#x\n",
+ (unsigned long)towMS, (unsigned long)towSubMS, (long)qErr,
+ week, flags, refInfo);
+ return mask;
+}
+
gps_mask_t ubx_parse(struct gps_device_t * session, unsigned char *buf,
size_t len)
{
@@ -1405,7 +1441,7 @@ gps_mask_t ubx_parse(struct gps_device_t * session, unsigned char *buf,
gpsd_log(&session->context->errout, LOG_DATA, "UBX_TIM_TM2\n");
break;
case UBX_TIM_TP:
- gpsd_log(&session->context->errout, LOG_DATA, "UBX_TIM_TP\n");
+ mask = ubx_msg_tim_tp(session, &buf[UBX_PREFIX_LEN], data_len);
break;
case UBX_TIM_TOS:
gpsd_log(&session->context->errout, LOG_DATA, "UBX_TIM_TOS\n");