From f1344151085131de7765ce37c9e5dab40c43e56d Mon Sep 17 00:00:00 2001 From: "Gary E. Miller" Date: Wed, 24 Oct 2018 15:32:24 -0700 Subject: rawdata_t: Change data structure. The rawdata_t structure was written into, but never read from. So a change to it is low impact. Reorder it to simplify pointer arithmetic. In preparation for more changes. --- NEWS | 1 + SConstruct | 2 +- driver_evermore.c | 20 ++++++++++++-------- driver_italk.c | 28 ++++++++++++++++++---------- driver_proto.c | 17 ++++++++++------- driver_superstar2.c | 19 ++++++++++++------- gps.h | 16 ++++++++-------- 7 files changed, 62 insertions(+), 41 deletions(-) diff --git a/NEWS b/NEWS index 96076222..a2e2938b 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ GPSD project news 3.19: not released yet + Rearrange rawdata_t. Bump the API because gps_data_t changed. 3.18.1: 2018-10-19 (Gary E. Miller ) Fix some installation issues. diff --git a/SConstruct b/SConstruct index b2b6526e..0fc36141 100644 --- a/SConstruct +++ b/SConstruct @@ -55,7 +55,7 @@ from leapsecond import conditional_leapsecond_fetch gpsd_version = "3.19-dev" # client library version -libgps_version_current = 24 +libgps_version_current = 25 libgps_version_revision = 0 libgps_version_age = 0 diff --git a/driver_evermore.c b/driver_evermore.c index 0566f567..51c4d603 100644 --- a/driver_evermore.c +++ b/driver_evermore.c @@ -336,16 +336,20 @@ gps_mask_t evermore_parse(struct gps_device_t * session, unsigned char *buf, int prn = (int)UBITS(k, 4, 5); /* this is so we can tell which never got set */ for (j = 0; j < MAXCHANNELS; j++) - session->gpsdata.raw.mtime[j] = 0; + session->gpsdata.raw[j].mtime = 0; for (j = 0; j < MAXCHANNELS; j++) { if (session->gpsdata.PRN[j] == prn) { - session->gpsdata.raw.codephase[j] = NAN; - session->gpsdata.raw.carrierphase[j] = NAN; - session->gpsdata.raw.mtime[j] = session->newdata.time; - session->gpsdata.raw.satstat[j] = (unsigned)UBITS(k, 24, 8); - session->gpsdata.raw.pseudorange[j] = (double)SBITS(k,40,32); - session->gpsdata.raw.deltarange[j] = (double)SBITS(k,72,32); - session->gpsdata.raw.doppler[j] = (double)SBITS(k, 104, 16); + session->gpsdata.raw[j].codephase = NAN; + session->gpsdata.raw[j].carrierphase = NAN; + session->gpsdata.raw[j].mtime = session->newdata.time; + session->gpsdata.raw[j].satstat = \ + (unsigned)UBITS(k, 24, 8); + session->gpsdata.raw[j].pseudorange = \ + (double)SBITS(k,40,32); + session->gpsdata.raw[j].deltarange = \ + (double)SBITS(k,72,32); + session->gpsdata.raw[j].doppler = \ + (double)SBITS(k, 104, 16); } } } diff --git a/driver_italk.c b/driver_italk.c index b0facb84..dfcd1874 100644 --- a/driver_italk.c +++ b/driver_italk.c @@ -260,17 +260,25 @@ static gps_mask_t decode_itk_pseudo(struct gps_device_t *session, (unsigned short int)getleu16((char *)buf, 7 + 8), (unsigned int)getleu32(buf, 7 + 38) / 1000.0); + /* this is so we can tell which never got set */ + for (i = 0; i < MAXCHANNELS; i++) + session->gpsdata.raw[i].mtime = 0; for (i = 0; i < n; i++){ - session->gpsdata.skyview[i].PRN = getleu16(buf, 7 + 26 + (i*36)) & 0xff; - session->gpsdata.skyview[i].ss = getleu16(buf, 7 + 26 + (i*36 + 2)) & 0x3f; - session->gpsdata.raw.satstat[i] = getleu32(buf, 7 + 26 + (i*36 + 4)); - session->gpsdata.raw.pseudorange[i] = getled64((char *)buf, 7 + 26 + (i*36 + 8)); - session->gpsdata.raw.doppler[i] = getled64((char *)buf, 7 + 26 + (i*36 + 16)); - session->gpsdata.raw.carrierphase[i] = getleu16(buf, 7 + 26 + (i*36 + 28)); - - session->gpsdata.raw.mtime[i] = session->newdata.time; - session->gpsdata.raw.codephase[i] = NAN; - session->gpsdata.raw.deltarange[i] = NAN; + session->gpsdata.skyview[i].PRN = \ + getleu16(buf, 7 + 26 + (i*36)) & 0xff; + session->gpsdata.skyview[i].ss = \ + getleu16(buf, 7 + 26 + (i*36 + 2)) & 0x3f; + session->gpsdata.raw[i].satstat = getleu32(buf, 7 + 26 + (i*36 + 4)); + session->gpsdata.raw[i].pseudorange = \ + getled64((char *)buf, 7 + 26 + (i*36 + 8)); + session->gpsdata.raw[i].doppler = \ + getled64((char *)buf, 7 + 26 + (i*36 + 16)); + session->gpsdata.raw[i].carrierphase = \ + getleu16(buf, 7 + 26 + (i*36 + 28)); + + session->gpsdata.raw[i].mtime = session->newdata.time; + session->gpsdata.raw[i].codephase = NAN; + session->gpsdata.raw[i].deltarange = NAN; } return RAW_IS; } diff --git a/driver_proto.c b/driver_proto.c index f3b03e85..8993e26c 100644 --- a/driver_proto.c +++ b/driver_proto.c @@ -260,16 +260,19 @@ _proto__msg_raw(struct gps_device_t *session, unsigned char *buf, size_t data_le return 0; } + /* this is so we can tell which never got set */ + for (i = 0; i < MAXCHANNELS; i++) + session->gpsdata.raw[i].mtime = 0; for (i = 0; i < n; i++){ session->gpsdata.PRN[i] = GET_PRN(); session->gpsdata.ss[i] = GET_SIGNAL() - session->gpsdata.raw.satstat[i] = GET_FLAGS(); - session->gpsdata.raw.pseudorange[i] = GET_PSEUDORANGE(); - session->gpsdata.raw.doppler[i] = GET_DOPPLER(); - session->gpsdata.raw.carrierphase[i] = GET_CARRIER_PHASE(); - session->gpsdata.raw.mtime[i] = GET_MEASUREMENT_TIME(); - session->gpsdata.raw.codephase[i] = GET_CODE_PHASE(); - session->gpsdata.raw.deltarange[i] = GET_DELTA_RANGE(); + session->gpsdata.raw[i].satstat = GET_FLAGS(); + session->gpsdata.raw[i].pseudorange = GET_PSEUDORANGE(); + session->gpsdata.raw[i].doppler = GET_DOPPLER(); + session->gpsdata.raw[i].carrierphase = GET_CARRIER_PHASE(); + session->gpsdata.raw[i].mtime = GET_MEASUREMENT_TIME(); + session->gpsdata.raw[i].codephase = GET_CODE_PHASE(); + session->gpsdata.raw[i].deltarange = GET_DELTA_RANGE(); } return RAW_IS; } diff --git a/driver_superstar2.c b/driver_superstar2.c index 79e186f1..fb832c9f 100644 --- a/driver_superstar2.c +++ b/driver_superstar2.c @@ -297,18 +297,23 @@ superstar2_msg_measurement(struct gps_device_t *session, unsigned char *buf, return 0; } t = getled64((char *)buf, 7); /* measurement time */ + /* this is so we can tell which never got set */ + for (i = 0; i < MAXCHANNELS; i++) + session->gpsdata.raw[i].mtime = 0; for (i = 0; i < n; i++) { unsigned long ul; - session->gpsdata.raw.mtime[i] = t; - session->gpsdata.skyview[i].PRN = (short)(getub(buf, 11 * i + 15) & 0x1f); - session->gpsdata.skyview[i].ss = (double)getub(buf, 11 * i * 15 + 1) / 4.0; - session->gpsdata.raw.codephase[i] = + session->gpsdata.raw[i].mtime = t; + session->gpsdata.skyview[i].PRN = \ + (short)(getub(buf, 11 * i + 15) & 0x1f); + session->gpsdata.skyview[i].ss = \ + (double)getub(buf, 11 * i * 15 + 1) / 4.0; + session->gpsdata.raw[i].codephase = (double)getleu32(buf, 11 * i * 15 + 2); ul = (unsigned long)getleu32(buf, 11 * i * 15 + 6); - session->gpsdata.raw.satstat[i] = (unsigned int)(ul & 0x03L); - session->gpsdata.raw.carrierphase[i] = (double)((ul >> 2) & 0x03ffL); - session->gpsdata.raw.pseudorange[i] = (double)(ul >> 12); + session->gpsdata.raw[i].satstat = (unsigned int)(ul & 0x03L); + session->gpsdata.raw[i].carrierphase = (double)((ul >> 2) & 0x03ffL); + session->gpsdata.raw[i].pseudorange = (double)(ul >> 12); } mask |= RAW_IS; diff --git a/gps.h b/gps.h index abba75c6..a4e6ed12 100644 --- a/gps.h +++ b/gps.h @@ -1901,13 +1901,13 @@ struct dop_t { struct rawdata_t { /* raw measurement data */ - double codephase[MAXCHANNELS]; /* meters */ - double carrierphase[MAXCHANNELS]; /* meters */ - double pseudorange[MAXCHANNELS]; /* meters */ - double deltarange[MAXCHANNELS]; /* meters/sec */ - double doppler[MAXCHANNELS]; /* Hz */ - double mtime[MAXCHANNELS]; /* sec */ - unsigned satstat[MAXCHANNELS]; /* tracking status */ + double codephase; /* meters */ + double carrierphase; /* meters */ + double pseudorange; /* meters */ + double deltarange; /* meters/sec */ + double doppler; /* Hz */ + double mtime; /* sec */ + unsigned satstat; /* tracking status */ #define SAT_ACQUIRED 0x01 /* satellite acquired */ #define SAT_CODE_TRACK 0x02 /* code-tracking loop acquired */ #define SAT_CARR_TRACK 0x04 /* carrier-tracking loop acquired */ @@ -2100,7 +2100,7 @@ struct gps_data_t { struct ais_t ais; struct attitude_t attitude; struct navdata_t navdata; - struct rawdata_t raw; + struct rawdata_t raw[MAXCHANNELS]; struct gst_t gst; struct oscillator_t osc; /* "artificial" structures for various protocol responses */ -- cgit v1.2.1