Index: tools/telemetry/third_party/pyserial/serial/serialutil.py |
diff --git a/tools/telemetry/third_party/pyserial/serial/serialutil.py b/tools/telemetry/third_party/pyserial/serial/serialutil.py |
deleted file mode 100644 |
index f28ece454fed94087478dd4fee02ec2ab2681ec6..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/pyserial/serial/serialutil.py |
+++ /dev/null |
@@ -1,551 +0,0 @@ |
-#! python |
-# Python Serial Port Extension for Win32, Linux, BSD, Jython |
-# see __init__.py |
-# |
-# (C) 2001-2010 Chris Liechti <cliechti@gmx.net> |
-# this is distributed under a free software license, see license.txt |
- |
-# compatibility for older Python < 2.6 |
-try: |
- bytes |
- bytearray |
-except (NameError, AttributeError): |
- # Python older than 2.6 do not have these types. Like for Python 2.6 they |
- # should behave like str. For Python older than 3.0 we want to work with |
- # strings anyway, only later versions have a true bytes type. |
- bytes = str |
- # bytearray is a mutable type that is easily turned into an instance of |
- # bytes |
- class bytearray(list): |
- # for bytes(bytearray()) usage |
- def __str__(self): return ''.join(self) |
- def __repr__(self): return 'bytearray(%r)' % ''.join(self) |
- # append automatically converts integers to characters |
- def append(self, item): |
- if isinstance(item, str): |
- list.append(self, item) |
- else: |
- list.append(self, chr(item)) |
- # += |
- def __iadd__(self, other): |
- for byte in other: |
- self.append(byte) |
- return self |
- |
- def __getslice__(self, i, j): |
- return bytearray(list.__getslice__(self, i, j)) |
- |
- def __getitem__(self, item): |
- if isinstance(item, slice): |
- return bytearray(list.__getitem__(self, item)) |
- else: |
- return ord(list.__getitem__(self, item)) |
- |
- def __eq__(self, other): |
- if isinstance(other, basestring): |
- other = bytearray(other) |
- return list.__eq__(self, other) |
- |
-# ``memoryview`` was introduced in Python 2.7 and ``bytes(some_memoryview)`` |
-# isn't returning the contents (very unfortunate). Therefore we need special |
-# cases and test for it. Ensure that there is a ``memoryview`` object for older |
-# Python versions. This is easier than making every test dependent on its |
-# existence. |
-try: |
- memoryview |
-except (NameError, AttributeError): |
- # implementation does not matter as we do not realy use it. |
- # it just must not inherit from something else we might care for. |
- class memoryview: |
- pass |
- |
- |
-# all Python versions prior 3.x convert ``str([17])`` to '[17]' instead of '\x11' |
-# so a simple ``bytes(sequence)`` doesn't work for all versions |
-def to_bytes(seq): |
- """convert a sequence to a bytes type""" |
- if isinstance(seq, bytes): |
- return seq |
- elif isinstance(seq, bytearray): |
- return bytes(seq) |
- elif isinstance(seq, memoryview): |
- return seq.tobytes() |
- else: |
- b = bytearray() |
- for item in seq: |
- b.append(item) # this one handles int and str for our emulation and ints for Python 3.x |
- return bytes(b) |
- |
-# create control bytes |
-XON = to_bytes([17]) |
-XOFF = to_bytes([19]) |
- |
-CR = to_bytes([13]) |
-LF = to_bytes([10]) |
- |
- |
-PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE = 'N', 'E', 'O', 'M', 'S' |
-STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO = (1, 1.5, 2) |
-FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5, 6, 7, 8) |
- |
-PARITY_NAMES = { |
- PARITY_NONE: 'None', |
- PARITY_EVEN: 'Even', |
- PARITY_ODD: 'Odd', |
- PARITY_MARK: 'Mark', |
- PARITY_SPACE: 'Space', |
-} |
- |
- |
-class SerialException(IOError): |
- """Base class for serial port related exceptions.""" |
- |
- |
-class SerialTimeoutException(SerialException): |
- """Write timeouts give an exception""" |
- |
- |
-writeTimeoutError = SerialTimeoutException('Write timeout') |
-portNotOpenError = SerialException('Attempting to use a port that is not open') |
- |
- |
-class FileLike(object): |
- """An abstract file like class. |
- |
- This class implements readline and readlines based on read and |
- writelines based on write. |
- This class is used to provide the above functions for to Serial |
- port objects. |
- |
- Note that when the serial port was opened with _NO_ timeout that |
- readline blocks until it sees a newline (or the specified size is |
- reached) and that readlines would never return and therefore |
- refuses to work (it raises an exception in this case)! |
- """ |
- |
- def __init__(self): |
- self.closed = True |
- |
- def close(self): |
- self.closed = True |
- |
- # so that ports are closed when objects are discarded |
- def __del__(self): |
- """Destructor. Calls close().""" |
- # The try/except block is in case this is called at program |
- # exit time, when it's possible that globals have already been |
- # deleted, and then the close() call might fail. Since |
- # there's nothing we can do about such failures and they annoy |
- # the end users, we suppress the traceback. |
- try: |
- self.close() |
- except: |
- pass |
- |
- def writelines(self, sequence): |
- for line in sequence: |
- self.write(line) |
- |
- def flush(self): |
- """flush of file like objects""" |
- pass |
- |
- # iterator for e.g. "for line in Serial(0): ..." usage |
- def next(self): |
- line = self.readline() |
- if not line: raise StopIteration |
- return line |
- |
- def __iter__(self): |
- return self |
- |
- def readline(self, size=None, eol=LF): |
- """read a line which is terminated with end-of-line (eol) character |
- ('\n' by default) or until timeout.""" |
- leneol = len(eol) |
- line = bytearray() |
- while True: |
- c = self.read(1) |
- if c: |
- line += c |
- if line[-leneol:] == eol: |
- break |
- if size is not None and len(line) >= size: |
- break |
- else: |
- break |
- return bytes(line) |
- |
- def readlines(self, sizehint=None, eol=LF): |
- """read a list of lines, until timeout. |
- sizehint is ignored.""" |
- if self.timeout is None: |
- raise ValueError("Serial port MUST have enabled timeout for this function!") |
- leneol = len(eol) |
- lines = [] |
- while True: |
- line = self.readline(eol=eol) |
- if line: |
- lines.append(line) |
- if line[-leneol:] != eol: # was the line received with a timeout? |
- break |
- else: |
- break |
- return lines |
- |
- def xreadlines(self, sizehint=None): |
- """Read lines, implemented as generator. It will raise StopIteration on |
- timeout (empty read). sizehint is ignored.""" |
- while True: |
- line = self.readline() |
- if not line: break |
- yield line |
- |
- # other functions of file-likes - not used by pySerial |
- |
- #~ readinto(b) |
- |
- def seek(self, pos, whence=0): |
- raise IOError("file is not seekable") |
- |
- def tell(self): |
- raise IOError("file is not seekable") |
- |
- def truncate(self, n=None): |
- raise IOError("file is not seekable") |
- |
- def isatty(self): |
- return False |
- |
- |
-class SerialBase(object): |
- """Serial port base class. Provides __init__ function and properties to |
- get/set port settings.""" |
- |
- # default values, may be overridden in subclasses that do not support all values |
- BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, |
- 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, |
- 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, |
- 3000000, 3500000, 4000000) |
- BYTESIZES = (FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS) |
- PARITIES = (PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE) |
- STOPBITS = (STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO) |
- |
- def __init__(self, |
- port = None, # number of device, numbering starts at |
- # zero. if everything fails, the user |
- # can specify a device string, note |
- # that this isn't portable anymore |
- # port will be opened if one is specified |
- baudrate=9600, # baud rate |
- bytesize=EIGHTBITS, # number of data bits |
- parity=PARITY_NONE, # enable parity checking |
- stopbits=STOPBITS_ONE, # number of stop bits |
- timeout=None, # set a timeout value, None to wait forever |
- xonxoff=False, # enable software flow control |
- rtscts=False, # enable RTS/CTS flow control |
- writeTimeout=None, # set a timeout for writes |
- dsrdtr=False, # None: use rtscts setting, dsrdtr override if True or False |
- interCharTimeout=None # Inter-character timeout, None to disable |
- ): |
- """Initialize comm port object. If a port is given, then the port will be |
- opened immediately. Otherwise a Serial port object in closed state |
- is returned.""" |
- |
- self._isOpen = False |
- self._port = None # correct value is assigned below through properties |
- self._baudrate = None # correct value is assigned below through properties |
- self._bytesize = None # correct value is assigned below through properties |
- self._parity = None # correct value is assigned below through properties |
- self._stopbits = None # correct value is assigned below through properties |
- self._timeout = None # correct value is assigned below through properties |
- self._writeTimeout = None # correct value is assigned below through properties |
- self._xonxoff = None # correct value is assigned below through properties |
- self._rtscts = None # correct value is assigned below through properties |
- self._dsrdtr = None # correct value is assigned below through properties |
- self._interCharTimeout = None # correct value is assigned below through properties |
- |
- # assign values using get/set methods using the properties feature |
- self.port = port |
- self.baudrate = baudrate |
- self.bytesize = bytesize |
- self.parity = parity |
- self.stopbits = stopbits |
- self.timeout = timeout |
- self.writeTimeout = writeTimeout |
- self.xonxoff = xonxoff |
- self.rtscts = rtscts |
- self.dsrdtr = dsrdtr |
- self.interCharTimeout = interCharTimeout |
- |
- if port is not None: |
- self.open() |
- |
- def isOpen(self): |
- """Check if the port is opened.""" |
- return self._isOpen |
- |
- # - - - - - - - - - - - - - - - - - - - - - - - - |
- |
- # TODO: these are not really needed as the is the BAUDRATES etc. attribute... |
- # maybe i remove them before the final release... |
- |
- def getSupportedBaudrates(self): |
- return [(str(b), b) for b in self.BAUDRATES] |
- |
- def getSupportedByteSizes(self): |
- return [(str(b), b) for b in self.BYTESIZES] |
- |
- def getSupportedStopbits(self): |
- return [(str(b), b) for b in self.STOPBITS] |
- |
- def getSupportedParities(self): |
- return [(PARITY_NAMES[b], b) for b in self.PARITIES] |
- |
- # - - - - - - - - - - - - - - - - - - - - - - - - |
- |
- def setPort(self, port): |
- """Change the port. The attribute portstr is set to a string that |
- contains the name of the port.""" |
- |
- was_open = self._isOpen |
- if was_open: self.close() |
- if port is not None: |
- if isinstance(port, basestring): |
- self.portstr = port |
- else: |
- self.portstr = self.makeDeviceName(port) |
- else: |
- self.portstr = None |
- self._port = port |
- self.name = self.portstr |
- if was_open: self.open() |
- |
- def getPort(self): |
- """Get the current port setting. The value that was passed on init or using |
- setPort() is passed back. See also the attribute portstr which contains |
- the name of the port as a string.""" |
- return self._port |
- |
- port = property(getPort, setPort, doc="Port setting") |
- |
- |
- def setBaudrate(self, baudrate): |
- """Change baud rate. It raises a ValueError if the port is open and the |
- baud rate is not possible. If the port is closed, then the value is |
- accepted and the exception is raised when the port is opened.""" |
- try: |
- b = int(baudrate) |
- except TypeError: |
- raise ValueError("Not a valid baudrate: %r" % (baudrate,)) |
- else: |
- if b <= 0: |
- raise ValueError("Not a valid baudrate: %r" % (baudrate,)) |
- self._baudrate = b |
- if self._isOpen: self._reconfigurePort() |
- |
- def getBaudrate(self): |
- """Get the current baud rate setting.""" |
- return self._baudrate |
- |
- baudrate = property(getBaudrate, setBaudrate, doc="Baud rate setting") |
- |
- |
- def setByteSize(self, bytesize): |
- """Change byte size.""" |
- if bytesize not in self.BYTESIZES: raise ValueError("Not a valid byte size: %r" % (bytesize,)) |
- self._bytesize = bytesize |
- if self._isOpen: self._reconfigurePort() |
- |
- def getByteSize(self): |
- """Get the current byte size setting.""" |
- return self._bytesize |
- |
- bytesize = property(getByteSize, setByteSize, doc="Byte size setting") |
- |
- |
- def setParity(self, parity): |
- """Change parity setting.""" |
- if parity not in self.PARITIES: raise ValueError("Not a valid parity: %r" % (parity,)) |
- self._parity = parity |
- if self._isOpen: self._reconfigurePort() |
- |
- def getParity(self): |
- """Get the current parity setting.""" |
- return self._parity |
- |
- parity = property(getParity, setParity, doc="Parity setting") |
- |
- |
- def setStopbits(self, stopbits): |
- """Change stop bits size.""" |
- if stopbits not in self.STOPBITS: raise ValueError("Not a valid stop bit size: %r" % (stopbits,)) |
- self._stopbits = stopbits |
- if self._isOpen: self._reconfigurePort() |
- |
- def getStopbits(self): |
- """Get the current stop bits setting.""" |
- return self._stopbits |
- |
- stopbits = property(getStopbits, setStopbits, doc="Stop bits setting") |
- |
- |
- def setTimeout(self, timeout): |
- """Change timeout setting.""" |
- if timeout is not None: |
- try: |
- timeout + 1 # test if it's a number, will throw a TypeError if not... |
- except TypeError: |
- raise ValueError("Not a valid timeout: %r" % (timeout,)) |
- if timeout < 0: raise ValueError("Not a valid timeout: %r" % (timeout,)) |
- self._timeout = timeout |
- if self._isOpen: self._reconfigurePort() |
- |
- def getTimeout(self): |
- """Get the current timeout setting.""" |
- return self._timeout |
- |
- timeout = property(getTimeout, setTimeout, doc="Timeout setting for read()") |
- |
- |
- def setWriteTimeout(self, timeout): |
- """Change timeout setting.""" |
- if timeout is not None: |
- if timeout < 0: raise ValueError("Not a valid timeout: %r" % (timeout,)) |
- try: |
- timeout + 1 #test if it's a number, will throw a TypeError if not... |
- except TypeError: |
- raise ValueError("Not a valid timeout: %r" % timeout) |
- |
- self._writeTimeout = timeout |
- if self._isOpen: self._reconfigurePort() |
- |
- def getWriteTimeout(self): |
- """Get the current timeout setting.""" |
- return self._writeTimeout |
- |
- writeTimeout = property(getWriteTimeout, setWriteTimeout, doc="Timeout setting for write()") |
- |
- |
- def setXonXoff(self, xonxoff): |
- """Change XON/XOFF setting.""" |
- self._xonxoff = xonxoff |
- if self._isOpen: self._reconfigurePort() |
- |
- def getXonXoff(self): |
- """Get the current XON/XOFF setting.""" |
- return self._xonxoff |
- |
- xonxoff = property(getXonXoff, setXonXoff, doc="XON/XOFF setting") |
- |
- def setRtsCts(self, rtscts): |
- """Change RTS/CTS flow control setting.""" |
- self._rtscts = rtscts |
- if self._isOpen: self._reconfigurePort() |
- |
- def getRtsCts(self): |
- """Get the current RTS/CTS flow control setting.""" |
- return self._rtscts |
- |
- rtscts = property(getRtsCts, setRtsCts, doc="RTS/CTS flow control setting") |
- |
- def setDsrDtr(self, dsrdtr=None): |
- """Change DsrDtr flow control setting.""" |
- if dsrdtr is None: |
- # if not set, keep backwards compatibility and follow rtscts setting |
- self._dsrdtr = self._rtscts |
- else: |
- # if defined independently, follow its value |
- self._dsrdtr = dsrdtr |
- if self._isOpen: self._reconfigurePort() |
- |
- def getDsrDtr(self): |
- """Get the current DSR/DTR flow control setting.""" |
- return self._dsrdtr |
- |
- dsrdtr = property(getDsrDtr, setDsrDtr, "DSR/DTR flow control setting") |
- |
- def setInterCharTimeout(self, interCharTimeout): |
- """Change inter-character timeout setting.""" |
- if interCharTimeout is not None: |
- if interCharTimeout < 0: raise ValueError("Not a valid timeout: %r" % interCharTimeout) |
- try: |
- interCharTimeout + 1 # test if it's a number, will throw a TypeError if not... |
- except TypeError: |
- raise ValueError("Not a valid timeout: %r" % interCharTimeout) |
- |
- self._interCharTimeout = interCharTimeout |
- if self._isOpen: self._reconfigurePort() |
- |
- def getInterCharTimeout(self): |
- """Get the current inter-character timeout setting.""" |
- return self._interCharTimeout |
- |
- interCharTimeout = property(getInterCharTimeout, setInterCharTimeout, doc="Inter-character timeout setting for read()") |
- |
- # - - - - - - - - - - - - - - - - - - - - - - - - |
- |
- _SETTINGS = ('baudrate', 'bytesize', 'parity', 'stopbits', 'xonxoff', |
- 'dsrdtr', 'rtscts', 'timeout', 'writeTimeout', 'interCharTimeout') |
- |
- def getSettingsDict(self): |
- """Get current port settings as a dictionary. For use with |
- applySettingsDict""" |
- return dict([(key, getattr(self, '_'+key)) for key in self._SETTINGS]) |
- |
- def applySettingsDict(self, d): |
- """apply stored settings from a dictionary returned from |
- getSettingsDict. it's allowed to delete keys from the dictionary. these |
- values will simply left unchanged.""" |
- for key in self._SETTINGS: |
- if d[key] != getattr(self, '_'+key): # check against internal "_" value |
- setattr(self, key, d[key]) # set non "_" value to use properties write function |
- |
- # - - - - - - - - - - - - - - - - - - - - - - - - |
- |
- def __repr__(self): |
- """String representation of the current port settings and its state.""" |
- return "%s<id=0x%x, open=%s>(port=%r, baudrate=%r, bytesize=%r, parity=%r, stopbits=%r, timeout=%r, xonxoff=%r, rtscts=%r, dsrdtr=%r)" % ( |
- self.__class__.__name__, |
- id(self), |
- self._isOpen, |
- self.portstr, |
- self.baudrate, |
- self.bytesize, |
- self.parity, |
- self.stopbits, |
- self.timeout, |
- self.xonxoff, |
- self.rtscts, |
- self.dsrdtr, |
- ) |
- |
- |
- # - - - - - - - - - - - - - - - - - - - - - - - - |
- # compatibility with io library |
- |
- def readable(self): return True |
- def writable(self): return True |
- def seekable(self): return False |
- def readinto(self, b): |
- data = self.read(len(b)) |
- n = len(data) |
- try: |
- b[:n] = data |
- except TypeError, err: |
- import array |
- if not isinstance(b, array.array): |
- raise err |
- b[:n] = array.array('b', data) |
- return n |
- |
- |
-if __name__ == '__main__': |
- import sys |
- s = SerialBase() |
- sys.stdout.write('port name: %s\n' % s.portstr) |
- sys.stdout.write('baud rates: %s\n' % s.getSupportedBaudrates()) |
- sys.stdout.write('byte sizes: %s\n' % s.getSupportedByteSizes()) |
- sys.stdout.write('parities: %s\n' % s.getSupportedParities()) |
- sys.stdout.write('stop bits: %s\n' % s.getSupportedStopbits()) |
- sys.stdout.write('%s\n' % s) |