diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2009-03-15 06:19:55 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2009-03-15 06:19:55 +0000 |
commit | b3f49700b7f032a4cd0fe5d15ef4b747ad580f9f (patch) | |
tree | a6dff368740da552ebb6982dd82bc439a58e58f2 | |
parent | 28bbf328a9eeec96bdbefd418fc5cda9ae715189 (diff) | |
download | gpsd-b3f49700b7f032a4cd0fe5d15ef4b747ad580f9f.tar.gz |
Sixbit decoding was slightly off.
-rw-r--r-- | driver_aivdm.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/driver_aivdm.c b/driver_aivdm.c index 7d577a4b..be766972 100644 --- a/driver_aivdm.c +++ b/driver_aivdm.c @@ -94,10 +94,9 @@ bool aivdm_decode(struct gps_device_t *session, struct ais_t *ais) /*@ +charint @*/ for (cp = data; cp < data + strlen((char *)data); cp++) { ch = *cp; - if (ch < 87) - ch = ch - 48; - else - ch = ch - 56; + ch -= 48; + if (ch >= 40) + ch -= 8; gpsd_report(LOG_RAW, "%c: %s\n", *cp, sixbits[ch]); for (i = 5; i >= 0; i--) { if ((ch >> i) & 0x01) { @@ -153,7 +152,7 @@ bool aivdm_decode(struct gps_device_t *session, struct ais_t *ais) ais->type123.utc_second); break; case 4: /* Base Station Report */ - ais->type4.year = UBITS(38, 41); + ais->type4.year = UBITS(38, 14); ais->type4.month = UBITS(52, 4); ais->type4.day = UBITS(56, 5); ais->type4.hour = UBITS(61, 5); |