runtime/PLCObject.py
changeset 911 ffa24427396a
parent 906 de452d65865c
child 914 94436558f0ce
--- a/runtime/PLCObject.py	Thu Jan 24 17:44:44 2013 +1100
+++ b/runtime/PLCObject.py	Tue Jan 29 16:21:01 2013 +1100
@@ -79,6 +79,23 @@
         if self.statuschange is not None:
             self.statuschange(self.PLCStatus)
 
+    def LogMessage(self, msg):
+        return self._LogMessage(msg, len(msg))
+
+
+    def GetLogCount(self):
+        if self._GetLogCount is not None :
+            return int(self._GetLogCount())
+
+    def GetLogMessage(self, msgid):
+        maxsz = len(self._log_read_buffer)-1
+        sz = self._GetLogMessage(msgid, self._log_read_buffer, maxsz)
+        if sz and sz <= maxsz:
+            self._log_read_buffer[sz] = '\x00'
+            return self._log_read_buffer.value
+        else :
+            return None
+
     def _GetMD5FileName(self):
         return os.path.join(self.workingdir, "lasttransferedPLC.md5")
 
@@ -149,6 +166,15 @@
             self._GetLogCount = self.PLClibraryHandle.GetLogCount
             self._GetLogCount.restype = ctypes.c_uint32
 
+            self._LogMessage = self.PLClibraryHandle.LogMessage
+            self._LogMessage.restype = ctypes.c_int
+            self._LogMessage.argtypes = [ctypes.c_char_p, ctypes.c_uint32]
+            
+            self._log_read_buffer = ctypes.create_string_buffer(1<<14) #16K
+            self._GetLogMessage = self.PLClibraryHandle.GetLogMessage
+            self._GetLogMessage.restype = ctypes.c_uint32
+            self._GetLogMessage.argtypes = [ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32]
+
             return True
         except:
             PLCprint(traceback.format_exc())
@@ -171,7 +197,9 @@
         self._suspendDebug = lambda x:-1
         self._resumeDebug = lambda:None
         self._PythonIterator = lambda:""
-        self._GetLogCount = lambda:-1 
+        self._GetLogCount = None 
+        self._LogMessage = lambda m,s:PLCprint("OFF LOG :"+m)
+        self._GetLogMessage = lambda i,b,s:None
         self.PLClibraryHandle = None
         # Unload library explicitely
         if getattr(self,"_PLClibraryHandle",None) is not None:
@@ -258,6 +286,7 @@
     
     def StartPLC(self):
         PLCprint("StartPLC")
+        self.LogMessage("Hello Log")
         if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped":
             c_argv = ctypes.c_char_p * len(self.argv)
             error = None
@@ -293,7 +322,7 @@
         return True
 
     def GetPLCstatus(self):
-        return self.PLCStatus, self._GetLogCount()
+        return self.PLCStatus, self.GetLogCount()
     
     def NewPLC(self, md5sum, data, extrafiles):
         PLCprint("NewPLC (%s)"%md5sum)
@@ -414,10 +443,10 @@
                     self._FreeDebugData()
                 self.PLClibraryLock.release()
             if offset and offset == size.value:
-                return self.PLCStatus, self._GetLogCount(), tick.value, res
+                return self.PLCStatus, self.GetLogCount(), tick.value, res
             #elif size.value:
                 #PLCprint("Debug error - wrong buffer unpack ! %d != %d"%(offset, size.value))
-        return self.PLCStatus, self._GetLogCount(), None, []
+        return self.PLCStatus, self.GetLogCount(), None, []
 
     def RemoteExec(self, script, **kwargs):
         try: