diff -r 697d8b77d716 -r 401e44bae7c0 runtime/PLCObject.py --- a/runtime/PLCObject.py Tue Jan 29 23:41:00 2013 +0100 +++ b/runtime/PLCObject.py Wed Jan 30 18:54:12 2013 +1100 @@ -25,7 +25,8 @@ import Pyro.core as pyro from threading import Timer, Thread, Lock, Semaphore import ctypes, os, commands, types, sys -from targets.typemapping import SameEndianessTypeTranslator as TypeTranslator +from targets.typemapping import LogLevelsDefault, LogLevelsCount, SameEndianessTypeTranslator as TypeTranslator + if os.name in ("nt", "ce"): from _ctypes import LoadLibrary as dlopen @@ -80,25 +81,29 @@ if self.statuschange is not None: self.statuschange(self.PLCStatus) - def LogMessage(self, msg): - return self._LogMessage(msg, len(msg)) - - - def GetLogCount(self): + def LogMessage(self, *args): + if len(args) == 2: + level, msg = args + else: + level = LogLevelsDefault + msg, = args + return self._LogMessage(level, msg, len(msg)) + + + def GetLogCount(self, level): if self._GetLogCount is not None : - return int(self._GetLogCount()) - elif self._loading_error is not None: + return int(self._GetLogCount(level)) + elif self._loading_error is not None and level==0: return 1; - - def GetLogMessage(self, msgid): + def GetLogMessage(self, level, msgid): if self._GetLogMessage is not None: maxsz = len(self._log_read_buffer)-1 - sz = self._GetLogMessage(msgid, self._log_read_buffer, maxsz) + sz = self._GetLogMessage(level, msgid, self._log_read_buffer, maxsz) if sz and sz <= maxsz: self._log_read_buffer[sz] = '\x00' return self._log_read_buffer.value - elif self._loading_error is not None : + elif self._loading_error is not None and level==0: return self._loading_error return None @@ -171,15 +176,16 @@ self._GetLogCount = self.PLClibraryHandle.GetLogCount self._GetLogCount.restype = ctypes.c_uint32 + self._GetLogCount.argtypes = [ctypes.c_uint8] self._LogMessage = self.PLClibraryHandle.LogMessage self._LogMessage.restype = ctypes.c_int - self._LogMessage.argtypes = [ctypes.c_char_p, ctypes.c_uint32] + self._LogMessage.argtypes = [ctypes.c_uint8, 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] + self._GetLogMessage.argtypes = [ctypes.c_uint8, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32] self._loading_error = None return True @@ -206,7 +212,7 @@ self._resumeDebug = lambda:None self._PythonIterator = lambda:"" self._GetLogCount = None - self._LogMessage = lambda m,s:PLCprint("OFF LOG :"+m) + self._LogMessage = lambda l,m,s:PLCprint("OFF LOG :"+m) self._GetLogMessage = None self.PLClibraryHandle = None # Unload library explicitely @@ -293,8 +299,6 @@ self.evaluator(self.FinishRuntimePy) 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 @@ -304,14 +308,15 @@ self.PythonThread = Thread(target=self.PythonThreadProc) self.PythonThread.start() self.StartSem.acquire() + self.LogMessage("PLC started") else: - PLCprint(_("Problem starting PLC : error %d" % res)) + self.LogMessage(_("Problem starting PLC : error %d" % res)) self.PLCStatus = "Broken" self.StatusChange() def StopPLC(self): - PLCprint("StopPLC") if self.PLCStatus == "Started": + self.LogMessage("PLC stopped") self._stopPLC() self.PythonThread.join() return True @@ -330,10 +335,10 @@ return True def GetPLCstatus(self): - return self.PLCStatus, self.GetLogCount() + return self.PLCStatus, map(self.GetLogCount,xrange(LogLevelsCount)) def NewPLC(self, md5sum, data, extrafiles): - PLCprint("NewPLC (%s)"%md5sum) + self.LogMessage("NewPLC (%s)"%md5sum) if self.PLCStatus in ["Stopped", "Empty", "Broken"]: NewFileName = md5sum + lib_ext extra_files_log = os.path.join(self.workingdir,"extra_files.txt") @@ -451,10 +456,10 @@ self._FreeDebugData() self.PLClibraryLock.release() if offset and offset == size.value: - return self.PLCStatus, self.GetLogCount(), tick.value, res + return self.PLCStatus, 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, None, [] def RemoteExec(self, script, **kwargs): try: