summaryrefslogtreecommitdiff
path: root/driver_italk.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-10-26 19:05:15 -0700
committerGary E. Miller <gem@rellim.com>2018-10-26 19:05:15 -0700
commit084db394dfab4c734196544f961a09a0b22ea3c3 (patch)
tree930ec43d121a0944132b9e66e3114d9e7192e3ea /driver_italk.c
parent65f9daadd1d82e7ba77510e5f3a193bbe6d32606 (diff)
downloadgpsd-084db394dfab4c734196544f961a09a0b22ea3c3.tar.gz
rawdata_t: convert mtime from timestamp_t to timespec_t.
One ns is important when measuring distance using time.
Diffstat (limited to 'driver_italk.c')
-rw-r--r--driver_italk.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/driver_italk.c b/driver_italk.c
index 294bd920..7e7101c9 100644
--- a/driver_italk.c
+++ b/driver_italk.c
@@ -238,6 +238,7 @@ static gps_mask_t decode_itk_pseudo(struct gps_device_t *session,
unsigned char *buf, size_t len)
{
unsigned short flags, n, i;
+ unsigned int tow; /* time of week, in ms */
n = (unsigned short) getleu16(buf, 7 + 4);
if ((n < 1) || (n > MAXCHANNELS)){
@@ -256,11 +257,13 @@ static gps_mask_t decode_itk_pseudo(struct gps_device_t *session,
if ((flags & 0x3) != 0x3)
return 0; // bail if measurement time not valid.
+ tow = (unsigned int)getleu32(buf, 7 + 38);
session->newdata.time = gpsd_gpstime_resolve(session,
- (unsigned short int)getleu16((char *)buf, 7 + 8),
- (unsigned int)getleu32(buf, 7 + 38) / 1000.0);
+ (unsigned short int)getleu16((char *)buf, 7 + 8), tow / 1000.0);
+
+ session->gpsdata.raw.mtime.tv_sec = (time_t)session->newdata.time;
+ session->gpsdata.raw.mtime.tv_nsec = (tow % 1000) * 1000000;
- session->gpsdata.raw.mtime = session->newdata.time;
/* this is so we can tell which never got set */
for (i = 0; i < MAXCHANNELS; i++)
session->gpsdata.raw.meas[i].svid = 0;