summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-10-26 10:12:40 -0700
committerGary E. Miller <gem@rellim.com>2018-10-26 10:12:40 -0700
commitd685ab05952d7eadf012fc054032f0190cf2abda (patch)
tree3177eb23532b3435c832a0375c651fefa784579b
parent2693f84752e8337d92d0245733dc0fda025d48c1 (diff)
downloadgpsd-d685ab05952d7eadf012fc054032f0190cf2abda.tar.gz
driver_ubx: Save UBX-RXM-RAWX data in rawdate_t.
A step in getting u-blox 8 raw data into the new RAW JSON message.
-rw-r--r--driver_ubx.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/driver_ubx.c b/driver_ubx.c
index 585b2b96..0dccddff 100644
--- a/driver_ubx.c
+++ b/driver_ubx.c
@@ -813,6 +813,7 @@ static gps_mask_t ubx_rxm_rawx(struct gps_device_t *session,
int8_t leapS;
uint8_t numMeas;
uint8_t recStat;
+ int i;
if (16 > data_len) {
gpsd_log(&session->context->errout, LOG_WARN,
@@ -830,29 +831,51 @@ static gps_mask_t ubx_rxm_rawx(struct gps_device_t *session,
"UBX_RXM_RAWX: rcvTow %f week %u leapS %d numMeas %u recStat %d\n",
rcvTow, week, leapS, numMeas, recStat);
- for (int i = 0; i < numMeas; i++) {
+ for (i = 0; i < numMeas; i++) {
int off = 32 * i;
+ /* psuedorange in meters */
double prMes = getled64((const char *)buf, off + 16);
+ /* carrier phase in cycles */
double cpMes = getled64((const char *)buf, off + 24);
+ /* doppler in Hz, positive towards sat */
double doMes = getlef32((const char *)buf, off + 32);
uint8_t gnssId = getub(buf, off + 36);
uint8_t svId = getub(buf, off + 37);
+ /* GLONASS frequency slot */
uint8_t freqId = getub(buf, off + 39);
+ /* carrier phase locktime in ms, max 64500ms */
uint16_t locktime = getleu16(buf, off + 40);
+ /* carrier-to-noise density ratio dB-Hz */
uint8_t cno = getub(buf, off + 42);
uint8_t prStdev = getub(buf, off + 43);
uint8_t cpStdev = getub(buf, off + 44);
uint8_t doStdev = getub(buf, off + 45);
+ /* tracking stat
+ * bit 0 - prMes valid
+ * bit 1 - cpMes valid
+ * bit 2 - halfCycle valid
+ * bit 3 - halfCycle subtracted from phase
+ */
uint8_t trkStat = getub(buf, off + 46);
gpsd_log(&session->context->errout, LOG_DATA,
"%u:%u:%u prMes %f cpMes %f doMes %f locktime %u\n"
"cno %u prStdev %u cpStdev %u doStdev %u rtkStat %u\n",
gnssId, svId, freqId, prMes, cpMes, doMes, locktime,
cno, prStdev, cpStdev, doStdev, trkStat);
+
+ session->gpsdata.raw[i].gnssid = gnssId;
+ session->gpsdata.raw[i].svid = svId;
+ session->gpsdata.raw[i].snr = cno;
+ session->gpsdata.raw[i].satstat = trkStat;
+ session->gpsdata.raw[i].pseudorange = prMes;
+ session->gpsdata.raw[i].carrierphase = cpMes;
+ session->gpsdata.raw[i].doppler = doMes;
+ session->gpsdata.raw[i].mtime = 1; /* time? */
+ session->gpsdata.raw[i].codephase = NAN;
+ session->gpsdata.raw[i].deltarange = NAN;
}
- /* TODO: no place to put this data, yet */
- return 0;
+ return RAW_IS;
}
/*