From e8ec65e67b0790ba57e9020e8e5af49e08854258 Mon Sep 17 00:00:00 2001 From: Sven Gestegard Robertz <sven.robertz@cs.lth.se> Date: Thu, 2 Jul 2015 00:39:44 +0200 Subject: [PATCH] added handler callbacks to python decoder --- lib/python/labcomm2014/LabComm.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/python/labcomm2014/LabComm.py b/lib/python/labcomm2014/LabComm.py index e5a347f..aae802e 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() -- GitLab