diff -r 915be999f3f0 -r 5c42cafaee15 connectors/LPC/LPCAppObject.py --- a/connectors/LPC/LPCAppObject.py Sat May 19 19:00:55 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -#This file is part of Beremiz, a Integrated Development Environment for -#programming IEC 61131-3 automates supporting plcopen standard and CanFestival. -# -#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD -# -#See COPYING file for copyrights details. -# -#This library is free software; you can redistribute it and/or -#modify it under the terms of the GNU General Public -#License as published by the Free Software Foundation; either -#version 2.1 of the License, or (at your option) any later version. -# -#This library is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -#General Public License for more details. -# -#You should have received a copy of the GNU General Public -#License along with this library; if not, write to the Free Software -#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import ctypes -from LPCAppProto import * -from LPCObject import * -from targets.typemapping import SameEndianessTypeTranslator as TypeTranslator - -class LPCAppObject(LPCObject): - def connect(self,comport): - self.SerialConnection = LPCAppProto(comport,#number - 115200, #speed - 2) #timeout - - def StartPLC(self, debug=False): - self.HandleSerialTransaction(STARTTransaction()) - - def StopPLC(self): - self.HandleSerialTransaction(STOPTransaction()) - return True - - def ResetPLC(self): - self.HandleSerialTransaction(RESETTransaction()) - return self.PLCStatus - - def GetPLCstatus(self): - self.HandleSerialTransaction(GET_PLCIDTransaction()) - return self.PLCStatus - - def MatchMD5(self, MD5): - data = self.HandleSerialTransaction(GET_PLCIDTransaction()) - if data is not None: - return data[:32] == MD5[:32] - return False - - def SetTraceVariablesList(self, idxs): - """ - Call ctype imported function to append - these indexes to registred variables in PLC debugger - """ - if idxs: - buff = "" - # keep a copy of requested idx - self._Idxs = idxs[:] - for idx,iectype,force in idxs: - idxstr = ctypes.string_at( - ctypes.pointer( - ctypes.c_uint32(idx)),4) - if force !=None: - c_type,unpack_func, pack_func = TypeTranslator.get(iectype, (None,None,None)) - forced_type_size = ctypes.sizeof(c_type) - forced_type_size_str = chr(forced_type_size) - forcestr = ctypes.string_at( - ctypes.pointer( - pack_func(c_type,force)), - forced_type_size) - buff += idxstr + forced_type_size_str + forcestr - else: - buff += idxstr + chr(0) - else: - buff = "" - self._Idxs = [] - - self.HandleSerialTransaction(SET_TRACE_VARIABLETransaction(buff)) - - def GetTraceVariables(self): - """ - 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": - res=[] - size = len(strbuf) - 4 - tick = ctypes.cast( - ctypes.c_char_p(strbuf[:4]), - ctypes.POINTER(ctypes.c_int)).contents - buff = ctypes.cast( - ctypes.c_char_p(strbuf[4:]), - 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: - return self.PLCStatus, tick.value, res - #PLCprint("Debug error - wrong buffer unpack !") - return self.PLCStatus, None, [] -