From c794ff4bd37d66cc44a7280d474843bc1c391092 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Tue, 11 May 2010 16:20:27 -0400 Subject: Refactoring step. --- devtools/ais.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'devtools/ais.py') 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: -- cgit v1.2.1