summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2010-02-01 05:04:10 +0000
committerEric S. Raymond <esr@thyrsus.com>2010-02-01 05:04:10 +0000
commit3c50613200e58814ac843ae4d5ca9ef4dbfbd631 (patch)
tree22406517100ad786d2d690bdc95b687038df5236
parent2ded269072c45d8867d61f76a99b03eda6c6c740 (diff)
downloadgpsd-3c50613200e58814ac843ae4d5ca9ef4dbfbd631.tar.gz
Make the decoders use the pad fields as seems to be intended.
-rwxr-xr-xdevtools/ais.py3
-rw-r--r--driver_aivdm.c2
-rw-r--r--test/sample.aivdm2
-rw-r--r--test/sample.aivdm.chk2
4 files changed, 5 insertions, 4 deletions
diff --git a/devtools/ais.py b/devtools/ais.py
index 20f8a8aa..10bf8811 100755
--- a/devtools/ais.py
+++ b/devtools/ais.py
@@ -755,7 +755,7 @@ class BitVector:
self.bitlen = length
def from_sixbit(self, data, pad=0):
"Initialize bit vector from AIVDM-style six-bit armoring."
- self.bits.extend([0] * (len(data) + pad))
+ self.bits.extend([0] * len(data))
for ch in data:
ch = ord(ch) - 48
if ch > 40:
@@ -764,6 +764,7 @@ class BitVector:
if (ch >> i) & 0x01:
self.bits[self.bitlen/8] |= (1 << (7 - self.bitlen % 8))
self.bitlen += 1
+ self.bitlen -= pad
def ubits(self, start, width):
"Extract a (zero-origin) bitfield from the buffer as an unsigned int."
fld = 0
diff --git a/driver_aivdm.c b/driver_aivdm.c
index 10522b78..ad8e906f 100644
--- a/driver_aivdm.c
+++ b/driver_aivdm.c
@@ -134,7 +134,7 @@ bool aivdm_decode(const char *buf, size_t buflen,
/*@ +shiftnegative @*/
}
if (isdigit(pad))
- ais_context->bitlen += (pad - '0'); /* ASCII assumption */
+ ais_context->bitlen -= (pad - '0'); /* ASCII assumption */
/*@ -charint @*/
/* time to pass buffered-up data to where it's actually processed? */
diff --git a/test/sample.aivdm b/test/sample.aivdm
index 970587dd..092c6ce7 100644
--- a/test/sample.aivdm
+++ b/test/sample.aivdm
@@ -151,7 +151,7 @@
# RetransmitFlag: False
# Spare: 0
# ApplicationID: 42827
-# Data: 50:3acbc463dffc4
+# Data: 48:eb2f118f7ff1
#
# Type 7:
# From Kurt Schwehr
diff --git a/test/sample.aivdm.chk b/test/sample.aivdm.chk
index 9054cc50..60470d4e 100644
--- a/test/sample.aivdm.chk
+++ b/test/sample.aivdm.chk
@@ -4,7 +4,7 @@
3,0,563808000,5,0,0,1,-45796520,22146000,2520,352,35,0x0,0,0x0
4,0,003669702,2007:05:14T19:57:39Z,1,-45811417,22130260,7,0,0x105df
5,0,351759000,9134270,0,3FOF8,EVER DIADEM,70,225,70,1,31,1,05-15T14:00Z,122,NEW YORK,0
-6,1,150834090,3,313240222,0,42827,52:eb2f118f7ff100
+6,1,150834090,3,313240222,0,42827,48:eb2f118f7ff1
7,1,655901842,158483613,321823389,836359488,0
7,2,537411077,43101326,717096664,76161024,0
8,0,366999712,23480,256:3a53dbb7be4a773137f87d7b0445f040dea05d93f593783194ae9b9d9dbe05fb