diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2010-05-11 16:20:27 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2010-05-11 16:20:27 -0400 |
commit | c794ff4bd37d66cc44a7280d474843bc1c391092 (patch) | |
tree | eae4b527019bbeff4890312023a9c94457c4f1f3 | |
parent | 99809e13b36cf6b282b82b746b1b5cca47ecc6fb (diff) | |
download | gpsd-c794ff4bd37d66cc44a7280d474843bc1c391092.tar.gz |
Refactoring step.
-rwxr-xr-x | devtools/ais.py | 13 |
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: |