summaryrefslogtreecommitdiff
path: root/driver_ubx.c
diff options
context:
space:
mode:
authorChris Kuethe <chris.kuethe@gmail.com>2009-07-09 03:19:37 +0000
committerChris Kuethe <chris.kuethe@gmail.com>2009-07-09 03:19:37 +0000
commit978cc1ebbf480ad10f645978a1fc93dd4fc55fe2 (patch)
tree6744308e680b353b6ff4b5084e07f02171beba25 /driver_ubx.c
parentef1fbbaa29a95216f117288eaf4683bbe538363d (diff)
downloadgpsd-978cc1ebbf480ad10f645978a1fc93dd4fc55fe2.tar.gz
pass raw subframes to the raw subframe decoder
Diffstat (limited to 'driver_ubx.c')
-rw-r--r--driver_ubx.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/driver_ubx.c b/driver_ubx.c
index 580bd90d..83b684ce 100644
--- a/driver_ubx.c
+++ b/driver_ubx.c
@@ -234,6 +234,30 @@ ubx_msg_sbas(unsigned char *buf)
sbas_in_use = getub(buf, 4);
}
+/*
+ * Raw Subframes
+ */
+static void
+ubx_msg_sfrb(struct gps_device_t *session, unsigned char *buf)
+{
+ unsigned int words[10], chan, svid;
+
+ gpsd_report(LOG_PROG, "UBX_RXM_SFRB\n");
+ chan = (unsigned int)getub(buf, 0);
+ svid = (unsigned int)getub(buf, 1);
+ words[0] = (unsigned int)getleul(buf, 2) & 0xffffff;
+ words[1] = (unsigned int)getleul(buf, 6) & 0xffffff;
+ words[2] = (unsigned int)getleul(buf, 10) & 0xffffff;
+ words[3] = (unsigned int)getleul(buf, 14) & 0xffffff;
+ words[4] = (unsigned int)getleul(buf, 18) & 0xffffff;
+ words[5] = (unsigned int)getleul(buf, 22) & 0xffffff;
+ words[6] = (unsigned int)getleul(buf, 26) & 0xffffff;
+ words[7] = (unsigned int)getleul(buf, 30) & 0xffffff;
+ words[8] = (unsigned int)getleul(buf, 34) & 0xffffff;
+ words[9] = (unsigned int)getleul(buf, 38) & 0xffffff;
+ gpsd_interpret_subframe(session, words);
+}
+
static void
ubx_msg_inf(unsigned char *buf, size_t data_len)
{
@@ -338,7 +362,7 @@ gps_mask_t ubx_parse(struct gps_device_t *session, unsigned char *buf, size_t le
gpsd_report(LOG_IO, "UBX_RXM_RAW\n");
break;
case UBX_RXM_SFRB:
- gpsd_report(LOG_IO, "UBX_RXM_SFRB\n");
+ ubx_msg_sfrb(session, &buf[6]);
break;
case UBX_RXM_SVSI:
gpsd_report(LOG_PROG, "UBX_RXM_SVSI\n");