# HG changeset patch
# User Edouard Tisserant
# Date 1367140039 -32400
# Node ID b02a30880829bceed2082806aaa7f95599df4adb
# Parent  000de4f24ab22cde2925d794918e9cb7aca91d6d
Now Debug Buffer Unpacking happens in beremiz/typemapping.py, and not in copy-pasted-unsychronized code

diff -r 000de4f24ab2 -r b02a30880829 LPCconnector/LPCAppObject.py
--- a/LPCconnector/LPCAppObject.py	Wed Apr 24 17:29:26 2013 +0200
+++ b/LPCconnector/LPCAppObject.py	Sun Apr 28 18:07:19 2013 +0900
@@ -25,7 +25,7 @@
 import ctypes
 from LPCAppProto import *
 from LPCObject import *
-from targets.typemapping import  LogLevelsCount, SameEndianessTypeTranslator as TypeTranslator
+from targets.typemapping import  LogLevelsCount, TypeTranslator, UnpackDebugBuffer
 
 class LPCAppObject(LPCObject):
     def connect(self,comport):
@@ -94,7 +94,6 @@
         """
         Return a list of variables, corresponding to the list of required idx
         """
-        offset = 0
         strbuf = self.HandleSerialTransaction(
                                      GET_TRACE_VARIABLETransaction())
         if strbuf is not None and len(strbuf) > 4 and self.PLCStatus == "Started":
@@ -104,22 +103,9 @@
             tick = ctypes.cast(ctick, ctypes.POINTER(ctypes.c_int)).contents
             cbuff = ctypes.create_string_buffer(strbuf[4:])
             buff = ctypes.cast(cbuff, ctypes.c_void_p)
-            for idx, iectype, forced in self._Idxs:
-                cursor = ctypes.c_void_p(buff.value + offset)
-                c_type,unpack_func, pack_func = TypeTranslator.get(iectype, (None,None,None))
-                if c_type is not None and offset < size:
-                    res.append(unpack_func(ctypes.cast(cursor,
-                                                       ctypes.POINTER(c_type)).contents))
-                    offset += ctypes.sizeof(c_type)
-                else:
-                    #if c_type is None:
-                        #PLCprint("Debug error - " + iectype + " not supported !")
-                    #if offset >= size:
-                        #PLCprint("Debug error - buffer too small !")
-                    break
-            if offset and offset == size:
+            TraceVariables = UnpackDebugBuffer(buff, size,  self._Idxs)
+            if TraceVariables is not None:
                 return self.PLCStatus, tick.value, res
-            #PLCprint("Debug error - wrong buffer unpack !")
         return self.PLCStatus, None, [] 
 
     def GetLogMessage(self, level, msgid):