969
|
1 # forked from /my/proj/house/frontdoor/loggingserial.py
|
|
2
|
|
3 import serial, logging
|
|
4
|
|
5 log = logging.getLogger('serial')
|
|
6
|
|
7 class LoggingSerial(object):
|
|
8 """like serial.Serial, but logs all data"""
|
|
9
|
|
10 def __init__(self, port=None, ports=None, baudrate=9600, timeout=10):
|
|
11 if ports is None:
|
|
12 ports = [port]
|
|
13
|
|
14 for port in ports:
|
|
15 try:
|
|
16 log.info("trying port: %s" % port)
|
|
17 self.ser = serial.Serial(port=port, baudrate=baudrate,
|
|
18 timeout=timeout,
|
|
19 xonxoff=0, rtscts=0)
|
|
20 except serial.SerialException:
|
|
21 pass
|
|
22 if not hasattr(self, 'ser'):
|
|
23 raise IOError("no port found")
|
|
24
|
|
25 def flush(self):
|
|
26 self.ser.flush()
|
|
27
|
|
28 def close(self):
|
|
29 self.ser.close()
|
|
30
|
|
31 def write(self, s):
|
|
32 log.info("Serial write: %r" % s)
|
|
33 self.ser.write(s)
|
|
34
|
|
35 def read(self, n, errorOnTimeout=True):
|
|
36 buf = self.ser.read(n)
|
|
37 log.info("Serial read: %r" % buf)
|
|
38 if errorOnTimeout and n > 0 and len(buf) == 0:
|
|
39 raise ValueError("timed out")
|
|
40 return buf
|