diff options
author | Gary E. Miller <gem@rellim.com> | 2018-10-26 19:05:15 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2018-10-26 19:05:15 -0700 |
commit | 084db394dfab4c734196544f961a09a0b22ea3c3 (patch) | |
tree | 930ec43d121a0944132b9e66e3114d9e7192e3ea /driver_italk.c | |
parent | 65f9daadd1d82e7ba77510e5f3a193bbe6d32606 (diff) | |
download | gpsd-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.c | 9 |
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; |