LPCconnector/LPCProto.py
changeset 0 51f5a3138405
child 45 786b12887e91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LPCconnector/LPCProto.py	Sun May 20 11:29:35 2012 +0200
@@ -0,0 +1,65 @@
+import serial
+import exceptions
+from threading import Lock
+import time
+
+class LPCProtoError(exceptions.Exception):
+        """Exception class"""
+        def __init__(self, msg):
+                self.msg = msg
+
+        def __str__(self):
+                return "Exception in PLC protocol : " + str(self.msg)
+
+class LPCProto:
+    def __init__(self, port, rate, timeout):
+        # serialize access lock
+        self.TransactionLock = Lock()
+        if BMZ_DBG:
+            # Debugging serial stuff
+            self._serialPort = serial.Serial( port, rate, timeout = timeout, writeTimeout = timeout )
+            class myser:
+                def readline(self_):
+                    res = self._serialPort.readline() 
+                    print 'Recv :"', res, '"' 
+                    return res
+
+                def read(self_,cnt):
+                    res = self._serialPort.read(cnt)
+                    if len(res) > 16:
+                        print "Recv :", map(hex,map(ord,res[:16])), "[...]"
+                    else:
+                        print "Recv :", map(hex,map(ord,res))
+                        
+                    return res
+                def write(self_, string):
+                    lstr=len(string)
+                    if lstr > 16:
+                        print "Send :", map(hex,map(ord,string[:16])), "[...]"
+                    else:
+                        print "Send :", map(hex,map(ord,string))
+                    return self._serialPort.write(string)
+                    # while len(string)>0:
+                    #     i = self._serialPort.write(string[:4096])
+                    #     print ".",
+                    #     string = string[i:]
+                    # print
+                    #return lstr
+                def flush(self_):
+                    return self._serialPort.flush()
+                def close(self_):
+                    self._serialPort.close()
+            self.serialPort = myser()
+        else:
+            # open serial port
+            self.serialPort = serial.Serial( port, rate, timeout = timeout )
+        # start with empty buffer
+        self.serialPort.flush()
+    
+    def __del__(self):
+        if self.serialPort:
+            self.serialPort.close()
+
+    def close(self):
+        self.serialPort.close()
+        self.serialPort = None