view service/arduinoNode/loggingserial.py @ 1462:2b29f14eb6bd

try new graph+view widget Ignore-this: d5f9c5dc52f04324368716ba2f604fdb darcs-hash:44e85a5c075ef73c34a58deaa3a3c1e8390dae52
author drewp <drewp@bigasterisk.com>
date Sun, 24 Nov 2019 00:01:00 -0800
parents 70a5392b24d3
children
line wrap: on
line source

# forked from /my/proj/house/frontdoor/loggingserial.py

import serial, logging

log = logging.getLogger('serial')

class LoggingSerial(object):
    """like serial.Serial, but logs all data"""
    
    def __init__(self, port=None, ports=None, baudrate=9600, timeout=10):
        if ports is None:
            ports = [port]
            
        for port in ports:
            try:
                log.info("trying port: %s" % port)
                self.ser = serial.Serial(port=port, baudrate=baudrate,
                                         timeout=timeout,
                                         xonxoff=0, rtscts=0)
            except serial.SerialException:
                pass
        if not hasattr(self, 'ser'):
            raise IOError("no port found")
        
    def flush(self):
        self.ser.flush()

    def close(self):
        self.ser.close()
              
    def write(self, s):
        log.info("Serial write: %r" % s)
        self.ser.write(s)

    def read(self, n, errorOnTimeout=True):
        buf = self.ser.read(n)
        log.info("Serial read: %r" % buf)
        if errorOnTimeout and n > 0 and len(buf) == 0:
            raise ValueError("timed out")
        return buf