diff options
author | Gary E. Miller <gem@rellim.com> | 2019-01-11 17:18:37 -0800 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-01-11 17:18:37 -0800 |
commit | a2d307dceefb0bb71ee7c01d540596e6d18a9cd2 (patch) | |
tree | f72e3a5282f99a28b50ec4f51c01b25619009efe /driver_sirf.c | |
parent | 50f3ed3cdf635ce02c9fe0125638ae815f12f34a (diff) | |
download | gpsd-a2d307dceefb0bb71ee7c01d540596e6d18a9cd2.tar.gz |
driver_sirf: Add support for extended ACK/NACK messages
Just shows up in better logging.
Diffstat (limited to 'driver_sirf.c')
-rw-r--r-- | driver_sirf.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/driver_sirf.c b/driver_sirf.c index c1170b25..0086b732 100644 --- a/driver_sirf.c +++ b/driver_sirf.c @@ -1842,14 +1842,34 @@ gps_mask_t sirf_parse(struct gps_device_t * session, unsigned char *buf, return sirf_msg_errors(session, buf, len); case 0x0b: /* Command Acknowledgement MID 11 */ - gpsd_log(&session->context->errout, LOG_PROG, - "SiRF: ACK 0x0b: %#02x\n", getub(buf, 1)); + if (2 > len) { + return 0; + } + if (2 == len) { + gpsd_log(&session->context->errout, LOG_PROG, + "SiRF: ACK 0x0b: %#02x\n", getub(buf, 1)); + } else { + /* SiRF III+, has ACK ID */ + gpsd_log(&session->context->errout, LOG_PROG, + "SiRF: ACK 0x0b: %#02x/%02x\n", + getub(buf, 1), getub(buf, 2)); + } session->driver.sirf.need_ack = 0; return 0; case 0x0c: /* Command NAcknowledgement MID 12 */ - gpsd_log(&session->context->errout, LOG_PROG, - "SiRF: NAK 0x0c: %#02x\n", getub(buf, 1)); + if (2 > len) { + return 0; + } + if (2 == len) { + gpsd_log(&session->context->errout, LOG_PROG, + "SiRF: NACK 0x0c: %#02x\n", getub(buf, 1)); + } else { + /* SiRF III+, has NACK ID */ + gpsd_log(&session->context->errout, LOG_PROG, + "SiRF: NACK 0x0c: %#02x/%02x\n", + getub(buf, 1), getub(buf, 2)); + } /* ugh -- there's no alternative but silent failure here */ session->driver.sirf.need_ack = 0; return 0; |