summaryrefslogtreecommitdiff
path: root/devtools/ais.py
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2010-05-11 16:20:27 -0400
committerEric S. Raymond <esr@thyrsus.com>2010-05-11 16:20:27 -0400
commitc794ff4bd37d66cc44a7280d474843bc1c391092 (patch)
treeeae4b527019bbeff4890312023a9c94457c4f1f3 /devtools/ais.py
parent99809e13b36cf6b282b82b746b1b5cca47ecc6fb (diff)
downloadgpsd-c794ff4bd37d66cc44a7280d474843bc1c391092.tar.gz
Refactoring step.
Diffstat (limited to 'devtools/ais.py')
-rwxr-xr-xdevtools/ais.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/devtools/ais.py b/devtools/ais.py
index 3afc304d..8bc2f9f8 100755
--- a/devtools/ais.py
+++ b/devtools/ais.py
@@ -851,11 +851,10 @@ def aivdm_unpack(lc, data, offset, values, instructions):
cooked.append([inst, value])
return cooked
-def parse_ais_messages(source, scaled=False, skiperr=False, verbose=0):
- "Generator code - read forever from source stream, parsing AIS messages."
+def packet_scanner(source):
+ "Get a span of AIVDM packets with contiguous fragment numbers."
payloads = {'A':'', 'B':''}
raw = ''
- values = {}
well_formed = False
lc = 0
while True:
@@ -910,6 +909,12 @@ def parse_ais_messages(source, scaled=False, skiperr=False, verbose=0):
# Render assembled payload to packed bytes
bits = BitVector()
bits.from_sixbit(payloads[channel], pad)
+ yield (lc, raw, bits)
+
+def parse_ais_messages(source, scaled=False, skiperr=False, verbose=0):
+ "Generator code - read forever from source stream, parsing AIS messages."
+ values = {}
+ for (lc, raw, bits) in packet_scanner(source):
values['length'] = bits.bitlen
# Magic recursive unpacking operation
try:
@@ -964,7 +969,7 @@ def parse_ais_messages(source, scaled=False, skiperr=False, verbose=0):
raise e
except:
(exc_type, exc_value, exc_traceback) = sys.exc_info()
- sys.stderr.write("Unknown exception on: %s\n" % (line))
+ sys.stderr.write("Unknown exception on line %d\n" % lc)
if skiperr:
continue
else: