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