X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=sql-edition%2Fservers%2FSerialClient.py;fp=sql-edition%2Fservers%2FSerialClient.py;h=d17b764b002a4a5f67f3fe98fd14a49f55c97994;hb=16da64c72ab6f9aaa7f1bf27e9bdbd3bfa56d10d;hp=0000000000000000000000000000000000000000;hpb=60c8749199aed1381c4146a548250383ff9e7d4a;p=zanchey%2Fdispense2.git diff --git a/sql-edition/servers/SerialClient.py b/sql-edition/servers/SerialClient.py new file mode 100644 index 0000000..d17b764 --- /dev/null +++ b/sql-edition/servers/SerialClient.py @@ -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 +