[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gpsd-dev] [PATCH 1/3] Check valid flags in NAV-TIMEGPS
From: |
Clark Li |
Subject: |
[gpsd-dev] [PATCH 1/3] Check valid flags in NAV-TIMEGPS |
Date: |
Sun, 17 Sep 2017 04:02:12 +0000 |
Split 22a020ec1c2bc85eff681ecacc6d2bb79fdddc9c Support UBX NAV-PVT
---
driver_ubx.c | 32 ++++++++++++++++++++++----------
driver_ubx.h | 4 ++++
2 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/driver_ubx.c b/driver_ubx.c
index 88be6c0..e0055af 100644
--- a/driver_ubx.c
+++ b/driver_ubx.c
@@ -292,24 +292,36 @@ static gps_mask_t
ubx_msg_nav_timegps(struct gps_device_t *session, unsigned char *buf,
size_t data_len)
{
- unsigned int gw, tow, flags;
+ unsigned int gw, iTOW, flags;
+ int fTOW;
+ gps_mask_t mask = 0;
if (data_len != 16)
return 0;
- tow = (unsigned int)getleu32(buf, 0);
- gw = (unsigned int)getles16(buf, 8);
flags = (unsigned int)getub(buf, 11);
- if ((flags & 0x7) != 0)
+ // Valid leap seconds
+ if ((flags & UBX_TIMEGPS_VALID_LEAP_SECOND) ==
UBX_TIMEGPS_VALID_LEAP_SECOND)
session->context->leap_seconds = (int)getub(buf, 10);
- session->newdata.time = gpsd_gpstime_resolve(session,
- (unsigned short int)gw,
- (double)tow / 1000.0);
+ // Valid GPS time of week and week number
+#define VALID_TIME (UBX_TIMEGPS_VALID_TIME | UBX_TIMEGPS_VALID_WEEK)
+ if ((flags & VALID_TIME) == VALID_TIME)
+#undef VALID_TIME
+ {
+ iTOW = (unsigned int)getleu32(buf, 0);
+ fTOW = (int)getles32(buf, 4);
+ gw = (unsigned int)getles16(buf, 8);
+ session->newdata.time =
+ gpsd_gpstime_resolve(session,
+ (unsigned short int)gw,
+ ((double)iTOW * 1e-3));
+ mask |= (TIME_SET | NTPTIME_IS);
+ }
gpsd_log(&session->context->errout, LOG_DATA,
- "TIMEGPS: time=%.2f leap=%d, mask={TIME}\n",
- session->newdata.time, session->context->leap_seconds);
- return TIME_SET | NTPTIME_IS;
+ "TIMEGPS: time=%.2f mask={TIME}\n",
+ session->newdata.time);
+ return mask;
}
/**
diff --git a/driver_ubx.h b/driver_ubx.h
index c23efdf..c4e28fe 100644
--- a/driver_ubx.h
+++ b/driver_ubx.h
@@ -102,6 +102,10 @@ typedef enum {
#define UBX_SOL_VALID_WEEK 0x04
#define UBX_SOL_VALID_TIME 0x08
+#define UBX_TIMEGPS_VALID_TIME 0x01
+#define UBX_TIMEGPS_VALID_WEEK 0x02
+#define UBX_TIMEGPS_VALID_LEAP_SECOND 0x04
+
/* from UBX_NAV_SVINFO */
#define UBX_SAT_USED 0x01
#define UBX_SAT_DGPS 0x02
--
2.7.4
- [gpsd-dev] [PATCH 1/3] Check valid flags in NAV-TIMEGPS,
Clark Li <=