Hack to utilise the serial port. Needs cleaning up.
[uccvend-vendserver.git] / sql-edition / servers / SerialClient.py
diff --git a/sql-edition/servers/SerialClient.py b/sql-edition/servers/SerialClient.py
new file mode 100644 (file)
index 0000000..d17b764
--- /dev/null
@@ -0,0 +1,51 @@
+import os, termios
+from time import sleep
+import logging
+
+class SerialClientException(Exception): pass
+
+class SerialClient:
+       BaudRates = {
+               110: termios.B110,
+               300: termios.B300,
+               600: termios.B600,
+               1200: termios.B1200,
+               2400: termios.B2400,
+               4800: termios.B4800,
+               9600: termios.B9600,
+               19200: termios.B19200,
+               38400: termios.B38400,
+               57600: termios.B57600,
+               115200: termios.B115200,
+       }
+
+       def __init__(self, port = '/dev/ttyS0', baud = 9600):
+               self.port = port
+               self.baud = baud
+               try:
+                       self.handle = os.open(port, os.O_RDWR)
+               except:
+                       raise SerialClientException('Unable to open port')
+               self.oldmode = termios.tcgetattr(self.handle)
+               cc = [0]*len(self.oldmode[6])
+               cc[termios.VMIN] = 1
+               cc[termios.VTIME] = 0
+               termios.tcsetattr(self.handle, termios.TCSANOW,
+                       [
+                       termios.IGNPAR, # c_iflag
+                       0, # c_oflag
+                       termios.CS8|termios.CLOCAL|termios.CREAD, # c_cflag
+                       0, # c_lflag
+                       self.BaudRates[self.baud], # c_ispeed
+                       self.BaudRates[self.baud], # c_ospeed
+                       cc])
+               self.rfh = os.fdopen(self.handle, 'r')
+               self.wfh = os.fdopen(self.handle, 'w')
+               self.wfh.write('B\n')
+
+       def get_fh(self):
+               return (self.rfh, self.wfh)
+
+       def __del__(self):
+           pass
+

UCC git Repository :: git.ucc.asn.au