diff --git a/lib/python/labcomm2014/LabComm.py b/lib/python/labcomm2014/LabComm.py index e5a347ff8a0966f0298c21b7901d981792f6b0e6..aae802e318ab305b78a7adcdea669ce2f8100683 100644 --- a/lib/python/labcomm2014/LabComm.py +++ b/lib/python/labcomm2014/LabComm.py @@ -693,7 +693,7 @@ class struct(type_decl): result = "labcomm.struct([" for (intentions, decl) in self.field: try: - name = intentions[''] + name = dict(intentions)[''] except: name = '(no name)' result += "%s\n ('%s', %s)" % (delim, name, decl) @@ -916,6 +916,10 @@ class Decoder(Codec): super(Decoder, self).__init__() self.reader = reader self.version = version + self.handlers = {} + + def register_handler(self, sig, handler): + self.handlers[str(sig)] = handler def unpack(self, format): size = packer.calcsize(format) @@ -945,6 +949,17 @@ class Decoder(Codec): else: raise Exception("Invalid type index %d" % index) + def runOne(self): + data,decl = self.decode() + if decl: + if data: + if str(decl) in self.handlers: + handler = self.handlers[str(decl)] + handler(data) + else: + print ("No handler for %s" % decl.name ) + + def decode(self): while True: index = self.decode_type_number()