diff options
author | Gary E. Miller <gem@rellim.com> | 2019-04-13 21:00:17 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-04-13 21:00:17 -0700 |
commit | a3080f107bd29159bc81a1efccb7e3bea83f1757 (patch) | |
tree | 4a2a8ab7fa9c84776de6bc3d59c7f18a75617fa6 /driver_ubx.c | |
parent | b9d90b0d616ad7123d2e3d855c86dd4f500fdab8 (diff) | |
download | gpsd-a3080f107bd29159bc81a1efccb7e3bea83f1757.tar.gz |
driver_ubx: Use protver when deciding signals to en/disable.
u-blox 9 removed a lot of message types...
Diffstat (limited to 'driver_ubx.c')
-rw-r--r-- | driver_ubx.c | 95 |
1 files changed, 79 insertions, 16 deletions
diff --git a/driver_ubx.c b/driver_ubx.c index aa9575b8..ac8f2013 100644 --- a/driver_ubx.c +++ b/driver_ubx.c @@ -137,6 +137,7 @@ ubx_msg_mon_ver(struct gps_device_t *session, unsigned char *buf, if (NULL != cptr) { int protver = atoi(cptr + 8); if (9 < protver) { + /* protver 10, u-blox 5, is the oldest we know */ session->driver.ubx.protver = protver; } } @@ -830,7 +831,7 @@ ubx_msg_nav_sat(struct gps_device_t *session, unsigned char *buf, /** * GPS Satellite Info -- deprecated - UBX-NAV-SVINFO - * Not in u-blox 9 + * Not in u-blox 9, use UBX-NAV-SAT instead */ static gps_mask_t ubx_msg_nav_svinfo(struct gps_device_t *session, unsigned char *buf, @@ -1830,20 +1831,33 @@ static void ubx_cfg_prt(struct gps_device_t *session, (void)ubx_write(session, 0x06u, 0x01, msg, 3); /* UBX-NAV-SOL deprecated in u-blox 6, gone in u-blox 9. - * Use UBX-NAV-PVT instead */ + * UBX-NAV-PVT for later models. Turn both off */ msg[0] = 0x01; /* class */ msg[1] = 0x06; /* msg id = NAV-SOL */ msg[2] = 0x00; /* rate */ (void)ubx_write(session, 0x06u, 0x01, msg, 3); + + msg[0] = 0x01; /* class */ + msg[1] = 0x07; /* msg id = NAV-PVT */ + msg[2] = 0x00; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + msg[0] = 0x01; /* class */ msg[1] = 0x20; /* msg id = UBX_NAV_TIMEGPS */ msg[2] = 0x00; /* rate */ (void)ubx_write(session, 0x06u, 0x01, msg, 3); + + /* NAV-SVINFO became NAV-SAT */ msg[0] = 0x01; /* class */ msg[1] = 0x30; /* msg id = NAV-SVINFO */ msg[2] = 0x00; /* rate */ (void)ubx_write(session, 0x06u, 0x01, msg, 3); msg[0] = 0x01; /* class */ + msg[1] = 0x35; /* msg id = NAV-SAT */ + msg[2] = 0x00; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + + msg[0] = 0x01; /* class */ msg[1] = 0x32; /* msg id = NAV-SBAS */ msg[2] = 0x00; /* rate */ (void)ubx_write(session, 0x06u, 0x01, msg, 3); @@ -1904,24 +1918,73 @@ static void ubx_cfg_prt(struct gps_device_t *session, (void)ubx_write(session, 0x06u, 0x01, msg, 3); /* UBX-NAV-SOL deprecated in u-blox 6, gone in u-blox 9. - * Use UBX-NAV-PVT instead */ - msg[0] = 0x01; /* class */ - msg[1] = 0x06; /* msg id = NAV-SOL */ - msg[2] = 0x01; /* rate */ - (void)ubx_write(session, 0x06u, 0x01, msg, 3); + * Use UBX-NAV-PVT after u-blox 7 */ + if (10 > session->driver.ubx.protver) { + /* unknown version, enable both */ + msg[0] = 0x01; /* class */ + msg[1] = 0x06; /* msg id = NAV-SOL */ + msg[2] = 0x01; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + msg[0] = 0x01; /* class */ + msg[1] = 0x07; /* msg id = NAV-PVT */ + msg[2] = 0x01; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } else if (15 > session->driver.ubx.protver) { + /* before u-blox 8, just NAV-SOL */ + /* do not do both to avoid NACKs */ + msg[0] = 0x01; /* class */ + msg[1] = 0x06; /* msg id = NAV-SOL */ + msg[2] = 0x01; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } else { + /* u-blox 8 or later */ + msg[0] = 0x01; /* class */ + msg[1] = 0x07; /* msg id = NAV-PVT */ + msg[2] = 0x01; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } + /* UBX-NAV-TIMEGPS is a great cycle ender */ msg[0] = 0x01; /* class */ - msg[1] = 0x20; /* msg id = UBX_NAV_TIMEGPS */ + msg[1] = 0x20; /* msg id = UBX-NAV-TIMEGPS */ msg[2] = 0x01; /* rate */ (void)ubx_write(session, 0x06u, 0x01, msg, 3); - msg[0] = 0x01; /* class */ - msg[1] = 0x30; /* msg id = NAV-SVINFO */ - msg[2] = 0x0a; /* rate */ - (void)ubx_write(session, 0x06u, 0x01, msg, 3); - msg[0] = 0x01; /* class */ - msg[1] = 0x32; /* msg id = NAV-SBAS */ - msg[2] = 0x0a; /* rate */ - (void)ubx_write(session, 0x06u, 0x01, msg, 3); + + /* UBX-NAV-SVINFO deprecated in u-blox 8, gone in u-blox 9. + * Use UBX-NAV-SAT after u-blox 7 */ + if (10 > session->driver.ubx.protver) { + /* unknown version, enable both */ + msg[0] = 0x01; /* class */ + msg[1] = 0x30; /* msg id = NAV-SVINFO */ + msg[2] = 0x0a; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + msg[0] = 0x01; /* class */ + msg[1] = 0x35; /* msg id = NAV-SAT */ + msg[2] = 0x0a; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } else if (15 > session->driver.ubx.protver) { + /* before u-blox 8, just NAV-SVINFO */ + /* do not do both to avoid NACKs */ + msg[0] = 0x01; /* class */ + msg[1] = 0x30; /* msg id = NAV-SVINFO */ + msg[2] = 0x0a; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } else { + /* u-blox 8 or later */ + msg[0] = 0x01; /* class */ + msg[1] = 0x35; /* msg id = NAV-SAT */ + msg[2] = 0x0a; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } + + if (24 > session->driver.ubx.protver) { + /* Gone after u-blox 8 */ + msg[0] = 0x01; /* class */ + msg[1] = 0x32; /* msg id = NAV-SBAS */ + msg[2] = 0x0a; /* rate */ + (void)ubx_write(session, 0x06u, 0x01, msg, 3); + } + msg[0] = 0x01; /* class */ msg[1] = 0x01; /* msg id = UBX-NAV-POSECEF */ msg[2] = 0x01; /* rate */ |