Edouard@0: import serial Edouard@0: import exceptions Edouard@0: from threading import Lock Edouard@0: import time Edouard@0: Edouard@0: class LPCProtoError(exceptions.Exception): Edouard@0: """Exception class""" Edouard@0: def __init__(self, msg): Edouard@0: self.msg = msg Edouard@0: Edouard@0: def __str__(self): Edouard@0: return "Exception in PLC protocol : " + str(self.msg) Edouard@0: Edouard@0: class LPCProto: Edouard@0: def __init__(self, port, rate, timeout): Edouard@0: # serialize access lock Edouard@0: if BMZ_DBG: Edouard@0: # Debugging serial stuff Edouard@0: self._serialPort = serial.Serial( port, rate, timeout = timeout, writeTimeout = timeout ) Edouard@0: class myser: Edouard@0: def readline(self_): Edouard@0: res = self._serialPort.readline() Edouard@0: print 'Recv :"', res, '"' Edouard@0: return res Edouard@0: Edouard@0: def read(self_,cnt): Edouard@0: res = self._serialPort.read(cnt) Edouard@0: if len(res) > 16: Edouard@0: print "Recv :", map(hex,map(ord,res[:16])), "[...]" Edouard@0: else: Edouard@0: print "Recv :", map(hex,map(ord,res)) Edouard@0: Edouard@0: return res Edouard@0: def write(self_, string): Edouard@0: lstr=len(string) Edouard@0: if lstr > 16: Edouard@0: print "Send :", map(hex,map(ord,string[:16])), "[...]" Edouard@0: else: Edouard@0: print "Send :", map(hex,map(ord,string)) Edouard@0: return self._serialPort.write(string) Edouard@0: # while len(string)>0: Edouard@0: # i = self._serialPort.write(string[:4096]) Edouard@0: # print ".", Edouard@0: # string = string[i:] Edouard@0: # print Edouard@0: #return lstr Edouard@0: def flush(self_): Edouard@0: return self._serialPort.flush() Edouard@0: def close(self_): Edouard@0: self._serialPort.close() Edouard@0: self.serialPort = myser() Edouard@0: else: Edouard@0: # open serial port Edouard@0: self.serialPort = serial.Serial( port, rate, timeout = timeout ) Edouard@0: # start with empty buffer Edouard@0: self.serialPort.flush() Edouard@0: Edouard@0: def __del__(self): Edouard@0: if self.serialPort: Edouard@0: self.serialPort.close() Edouard@0: Edouard@0: def close(self): Edouard@0: self.serialPort.close() Edouard@0: self.serialPort = None