view service/arduinoNode/loggingserial.py @ 969:70a5392b24d3

start arduinonode Ignore-this: 6ddc4d3af9ab8468e25b346bddf15835 darcs-hash:20150406091339-312f9-bcbca91eff6dc85a402d341248e7ce6128e71723
author drewp <drewp@bigasterisk.com>
date Mon, 06 Apr 2015 02:13:39 -0700
parents
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