Hack to utilise the serial port. Needs cleaning up.
[zanchey/dispense2.git] / sql-edition / servers / SerialClient.py
1 import os, termios
2 from time import sleep
3 import logging
4
5 class SerialClientException(Exception): pass
6
7 class SerialClient:
8         BaudRates = {
9                 110: termios.B110,
10                 300: termios.B300,
11                 600: termios.B600,
12                 1200: termios.B1200,
13                 2400: termios.B2400,
14                 4800: termios.B4800,
15                 9600: termios.B9600,
16                 19200: termios.B19200,
17                 38400: termios.B38400,
18                 57600: termios.B57600,
19                 115200: termios.B115200,
20         }
21
22         def __init__(self, port = '/dev/ttyS0', baud = 9600):
23                 self.port = port
24                 self.baud = baud
25                 try:
26                         self.handle = os.open(port, os.O_RDWR)
27                 except:
28                         raise SerialClientException('Unable to open port')
29                 self.oldmode = termios.tcgetattr(self.handle)
30                 cc = [0]*len(self.oldmode[6])
31                 cc[termios.VMIN] = 1
32                 cc[termios.VTIME] = 0
33                 termios.tcsetattr(self.handle, termios.TCSANOW,
34                         [
35                         termios.IGNPAR, # c_iflag
36                         0, # c_oflag
37                         termios.CS8|termios.CLOCAL|termios.CREAD, # c_cflag
38                         0, # c_lflag
39                         self.BaudRates[self.baud], # c_ispeed
40                         self.BaudRates[self.baud], # c_ospeed
41                         cc])
42                 self.rfh = os.fdopen(self.handle, 'r')
43                 self.wfh = os.fdopen(self.handle, 'w')
44                 self.wfh.write('B\n')
45
46         def get_fh(self):
47                 return (self.rfh, self.wfh)
48
49         def __del__(self):
50             pass
51

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