summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2009-03-15 06:19:55 +0000
committerEric S. Raymond <esr@thyrsus.com>2009-03-15 06:19:55 +0000
commitb3f49700b7f032a4cd0fe5d15ef4b747ad580f9f (patch)
treea6dff368740da552ebb6982dd82bc439a58e58f2
parent28bbf328a9eeec96bdbefd418fc5cda9ae715189 (diff)
downloadgpsd-b3f49700b7f032a4cd0fe5d15ef4b747ad580f9f.tar.gz
Sixbit decoding was slightly off.
-rw-r--r--driver_aivdm.c9
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);