diff options
author | Chris Liechti <cliechti@gmx.net> | 2015-08-27 23:25:21 +0200 |
---|---|---|
committer | Chris Liechti <cliechti@gmx.net> | 2015-08-27 23:25:21 +0200 |
commit | ef1fe252d12bb6e41843ee9f8e1425ea927213d3 (patch) | |
tree | a4ba87eb291eb4e2533a25d40a5914cfcbfea0f7 | |
parent | c8c51830c8e64cc3074781a9c64a321aa6c371ae (diff) | |
download | pyserial-git-ef1fe252d12bb6e41843ee9f8e1425ea927213d3.tar.gz |
api change: provide control lines as properties, rename flush* and other functions
- flushInput() -> reset_input_buffer()
- flushOuput() -> reset_output_buffer()
- inWaiting -> in_waiting
- getCD()/getRI()/getDSR() -> cd/ri/dsr
- setRTS()/setDTR() -> rts/dtr
- sendBreak() -> send_break()
- setBreak() -> break_condition
rts and dtr can now be read back and can be set before opening the port
(and some platforms are able to apply the contol without a glitch on open)
the old functions are still available and going to be deprecated.
-rw-r--r-- | serial/rfc2217.py | 56 | ||||
-rw-r--r-- | serial/serialposix.py | 42 | ||||
-rw-r--r-- | serial/serialutil.py | 75 | ||||
-rw-r--r-- | serial/serialwin32.py | 77 | ||||
-rw-r--r-- | serial/urlhandler/protocol_loop.py | 64 | ||||
-rw-r--r-- | serial/urlhandler/protocol_socket.py | 59 | ||||
-rw-r--r-- | serial/urlhandler/protocol_spy.py | 61 |
7 files changed, 243 insertions, 191 deletions
diff --git a/serial/rfc2217.py b/serial/rfc2217.py index 173b914..754242e 100644 --- a/serial/rfc2217.py +++ b/serial/rfc2217.py @@ -462,11 +462,12 @@ class Serial(SerialBase): self._reconfigurePort() # all things set up get, now a clean start self._isOpen = True + if not self.dsrdtr: + self._update_dtr_state() if not self._rtscts: - self.setRTS(True) - self.setDTR(True) - self.flushInput() - self.flushOutput() + self._update_rts_state() + self.reset_input_buffer() + self.reset_output_buffer() def _reconfigurePort(self): """Set communication parameters on opened port.""" @@ -562,7 +563,8 @@ class Serial(SerialBase): # - - - - - - - - - - - - - - - - - - - - - - - - - def inWaiting(self): + @property + def in_waiting(self): """Return the number of characters currently in the input buffer.""" if not self._isOpen: raise portNotOpenError return self._read_buffer.qsize() @@ -598,7 +600,7 @@ class Serial(SerialBase): raise SerialException("connection failed (socket error): %s" % (e,)) return len(data) - def flushInput(self): + def reset_input_buffer(self): """Clear input buffer, discarding all that is in the buffer.""" if not self._isOpen: raise portNotOpenError self.rfc2217SendPurge(PURGE_RECEIVE_BUFFER) @@ -606,7 +608,7 @@ class Serial(SerialBase): while self._read_buffer.qsize(): self._read_buffer.get(False) - def flushOutput(self): + def reset_output_buffer(self): """\ Clear output buffer, aborting the current output and discarding all that is in the buffer. @@ -614,65 +616,59 @@ class Serial(SerialBase): if not self._isOpen: raise portNotOpenError self.rfc2217SendPurge(PURGE_TRANSMIT_BUFFER) - def sendBreak(self, duration=0.25): - """\ - Send break condition. Timed, returns to idle state after given - duration. - """ - if not self._isOpen: raise portNotOpenError - self.setBreak(True) - time.sleep(duration) - self.setBreak(False) - - def setBreak(self, level=True): + def _update_break_state(self): """\ Set break: Controls TXD. When active, to transmitting is possible. """ if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('set BREAK to %s' % ('active' if level else 'inactive')) - if level: + self.logger.info('set BREAK to %s' % ('active' if self._break_state else 'inactive')) + if self._break_state: self.rfc2217SetControl(SET_CONTROL_BREAK_ON) else: self.rfc2217SetControl(SET_CONTROL_BREAK_OFF) - def setRTS(self, level=True): + def _update_rts_state(self): """Set terminal status line: Request To Send.""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('set RTS to %s' % ('active' if level else 'inactive')) - if level: + self.logger.info('set RTS to %s' % ('active' if self._rts_state else 'inactive')) + if self._rts_state: self.rfc2217SetControl(SET_CONTROL_RTS_ON) else: self.rfc2217SetControl(SET_CONTROL_RTS_OFF) - def setDTR(self, level=True): + def _update_dtr_state(self, level=True): """Set terminal status line: Data Terminal Ready.""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('set DTR to %s' % ('active' if level else 'inactive')) - if level: + self.logger.info('set DTR to %s' % ('active' if self._dtr_state else 'inactive')) + if self._dtr_state: self.rfc2217SetControl(SET_CONTROL_DTR_ON) else: self.rfc2217SetControl(SET_CONTROL_DTR_OFF) - def getCTS(self): + @property + def cts(self): """Read terminal status line: Clear To Send.""" if not self._isOpen: raise portNotOpenError return bool(self.getModemState() & MODEMSTATE_MASK_CTS) - def getDSR(self): + @property + def dsr(self): """Read terminal status line: Data Set Ready.""" if not self._isOpen: raise portNotOpenError return bool(self.getModemState() & MODEMSTATE_MASK_DSR) - def getRI(self): + @property + def ri(self): """Read terminal status line: Ring Indicator.""" if not self._isOpen: raise portNotOpenError return bool(self.getModemState() & MODEMSTATE_MASK_RI) - def getCD(self): + @property + def cd(self): """Read terminal status line: Carrier Detect.""" if not self._isOpen: raise portNotOpenError return bool(self.getModemState() & MODEMSTATE_MASK_CD) diff --git a/serial/serialposix.py b/serial/serialposix.py index 4db261b..62c0b58 100644 --- a/serial/serialposix.py +++ b/serial/serialposix.py @@ -307,7 +307,11 @@ class Serial(SerialBase, PlatformSpecific): raise else: self._isOpen = True - self.flushInput() + if not self.dsrdtr: + self._update_dtr_state() + if not self.rtscts: + self._update_rts_state() + self.reset_input_buffer() def _reconfigurePort(self): @@ -453,7 +457,8 @@ class Serial(SerialBase, PlatformSpecific): # - - - - - - - - - - - - - - - - - - - - - - - - - def inWaiting(self): + @property + def in_waiting(self): """Return the number of characters currently in the input buffer.""" #~ s = fcntl.ioctl(self.fd, termios.FIONREAD, TIOCM_zero_str) s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str) @@ -541,12 +546,12 @@ class Serial(SerialBase, PlatformSpecific): """ self.drainOutput() - def flushInput(self): + def reset_input_buffer(self): """Clear input buffer, discarding all that is in the buffer.""" if not self._isOpen: raise portNotOpenError termios.tcflush(self.fd, termios.TCIFLUSH) - def flushOutput(self): + def reset_output_buffer(self): """\ Clear output buffer, aborting the current output and discarding all that is in the buffer. @@ -554,7 +559,7 @@ class Serial(SerialBase, PlatformSpecific): if not self._isOpen: raise portNotOpenError termios.tcflush(self.fd, termios.TCOFLUSH) - def sendBreak(self, duration=0.25): + def send_break(self, duration=0.25): """\ Send break condition. Timed, returns to idle state after given duration. @@ -562,51 +567,52 @@ class Serial(SerialBase, PlatformSpecific): if not self._isOpen: raise portNotOpenError termios.tcsendbreak(self.fd, int(duration/0.25)) - def setBreak(self, level=1): + def _update_break_state(self): """\ Set break: Controls TXD. When active, no transmitting is possible. """ - if self.fd is None: raise portNotOpenError - if level: + if self._break_state: fcntl.ioctl(self.fd, TIOCSBRK) else: fcntl.ioctl(self.fd, TIOCCBRK) - def setRTS(self, level=1): + def _update_rts_state(self): """Set terminal status line: Request To Send""" - if not self._isOpen: raise portNotOpenError - if level: + if self._rts_state: fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_RTS_str) else: fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_RTS_str) - def setDTR(self, level=1): + def _update_dtr_state(self): """Set terminal status line: Data Terminal Ready""" - if not self._isOpen: raise portNotOpenError - if level: + if self._dtr_state: fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str) else: fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_DTR_str) - def getCTS(self): + @property + def cts(self): """Read terminal status line: Clear To Send""" if not self._isOpen: raise portNotOpenError s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) return struct.unpack('I',s)[0] & TIOCM_CTS != 0 - def getDSR(self): + @property + def dsr(self): """Read terminal status line: Data Set Ready""" if not self._isOpen: raise portNotOpenError s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) return struct.unpack('I',s)[0] & TIOCM_DSR != 0 - def getRI(self): + @property + def ri(self): """Read terminal status line: Ring Indicator""" if not self._isOpen: raise portNotOpenError s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) return struct.unpack('I',s)[0] & TIOCM_RI != 0 - def getCD(self): + @property + def cd(self): """Read terminal status line: Carrier Detect""" if not self._isOpen: raise portNotOpenError s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) diff --git a/serial/serialutil.py b/serial/serialutil.py index 9bd223f..87733b7 100644 --- a/serial/serialutil.py +++ b/serial/serialutil.py @@ -140,6 +140,9 @@ class SerialBase(io.RawIOBase): self._dsrdtr = None # correct value is assigned below through properties self._interCharTimeout = None # correct value is assigned below through properties self._rs485_mode = None # disabled by default + self._rts_state = True + self._dtr_state = True + self._break_state = False # assign values using get/set methods using the properties feature self.port = port @@ -435,6 +438,78 @@ class SerialBase(io.RawIOBase): self.close() # - - - - - - - - - - - - - - - - - - - - - - - - + + def send_break(self, duration=0.25): + """\ + Send break condition. Timed, returns to idle state after given + duration. + """ + if not self._isOpen: raise portNotOpenError + self.break_condition = True + time.sleep(duration) + self.break_condition = False + + # - - - - - - - - - - - - - - - - - - - - - - - - + # backwards compatibility / deprecated functions + + def flushInput(self): + self.reset_input_buffer() + + def flushOutput(self): + self.reset_output_buffer() + + def inWaiting(self): + return self.in_waiting + + def sendBreak(self, duration=0.25): + self.send_break(duration) + + def setRTS(self, value=1): + self.rts = value + + def setDTR(self, value=1): + self.dtr = value + + def getCTS(self): + return self.cts + + def getDSR(self): + return self.dsr + + def getRI(self): + return self.ri + + def getCD(self): + return self.cd + + @property + def rts(self): + return self._rts_state + @rts.setter + def rts(self, value): + self._rts_state = value + if self._isOpen: + self._update_rts_state() + + @property + def dtr(self): + return self._dtr_state + @dtr.setter + def dtr(self, value): + self._dtr_state = value + if self._isOpen: + self._update_dtr_state() + + @property + def break_condition(self): + return self._break_state + @break_condition.setter + def break_condition(self, value): + self._break_state = value + if self._isOpen: + self._update_break_state() + + # - - - - - - - - - - - - - - - - - - - - - - - - # additional functionality def read_until(self, terminator=LF, size=None): diff --git a/serial/serialwin32.py b/serial/serialwin32.py index e8df919..59a3388 100644 --- a/serial/serialwin32.py +++ b/serial/serialwin32.py @@ -32,10 +32,6 @@ class Serial(SerialBase): self.hComPort = None self._overlappedRead = None self._overlappedWrite = None - self._rtsState = win32.RTS_CONTROL_ENABLE - self._dtrState = win32.DTR_CONTROL_ENABLE - - SerialBase.__init__(self, *args, **kwargs) def open(self): @@ -50,7 +46,7 @@ class Serial(SerialBase): # the "\\.\COMx" format is required for devices other than COM1-COM8 # not all versions of windows seem to support this properly # so that the first few ports are used with the DOS device name - port = self.portstr + port = self.name try: if port.upper().startswith('COM') and int(port[3:]) > 8: port = '\\\\.\\' + port @@ -181,7 +177,7 @@ class Serial(SerialBase): if self._rtscts: comDCB.fRtsControl = win32.RTS_CONTROL_HANDSHAKE else: - comDCB.fRtsControl = self._rtsState + comDCB.fRtsControl = win32.RTS_CONTROL_ENABLE if self._rts_state else win32.RTS_CONTROL_DISABLE comDCB.fOutxCtsFlow = self._rtscts else: # checks for unsupported settings @@ -212,7 +208,7 @@ class Serial(SerialBase): if self._dsrdtr: comDCB.fDtrControl = win32.DTR_CONTROL_HANDSHAKE else: - comDCB.fDtrControl = self._dtrState + comDCB.fDtrControl = win32.DTR_CONTROL_ENABLE if self._dtr_state else win32.DTR_CONTROL_DISABLE comDCB.fOutxDsrFlow = self._dsrdtr comDCB.fOutX = self._xonxoff comDCB.fInX = self._xonxoff @@ -255,7 +251,8 @@ class Serial(SerialBase): # - - - - - - - - - - - - - - - - - - - - - - - - - def inWaiting(self): + @property + def in_waiting(self): """Return the number of characters currently in the input buffer.""" flags = win32.DWORD() comstat = win32.COMSTAT() @@ -333,12 +330,12 @@ class Serial(SerialBase): # require overlapped IO and its also only possible to set a single mask # on the port--- - def flushInput(self): + def reset_input_buffer(self): """Clear input buffer, discarding all that is in the buffer.""" if not self.hComPort: raise portNotOpenError win32.PurgeComm(self.hComPort, win32.PURGE_RXCLEAR | win32.PURGE_RXABORT) - def flushOutput(self): + def reset_output_buffer(self): """\ Clear output buffer, aborting the current output and discarding all that is in the buffer. @@ -346,74 +343,52 @@ class Serial(SerialBase): if not self.hComPort: raise portNotOpenError win32.PurgeComm(self.hComPort, win32.PURGE_TXCLEAR | win32.PURGE_TXABORT) - def sendBreak(self, duration=0.25): - """\ - Send break condition. Timed, returns to idle state after given duration. - """ - if not self.hComPort: raise portNotOpenError - win32.SetCommBreak(self.hComPort) - time.sleep(duration) - win32.ClearCommBreak(self.hComPort) - - def setBreak(self, level=1): + def _update_break_state(self): """Set break: Controls TXD. When active, to transmitting is possible.""" if not self.hComPort: raise portNotOpenError - if level: + if self._break_state: win32.SetCommBreak(self.hComPort) else: win32.ClearCommBreak(self.hComPort) - def setRTS(self, level=1): + def _update_rts_state(self): """Set terminal status line: Request To Send""" - # remember level for reconfigure - if level: - self._rtsState = win32.RTS_CONTROL_ENABLE + if self._rts_state: + win32.EscapeCommFunction(self.hComPort, win32.SETRTS) else: - self._rtsState = win32.RTS_CONTROL_DISABLE - # also apply now if port is open - if self.hComPort: - if level: - win32.EscapeCommFunction(self.hComPort, win32.SETRTS) - else: - win32.EscapeCommFunction(self.hComPort, win32.CLRRTS) + win32.EscapeCommFunction(self.hComPort, win32.CLRRTS) - def setDTR(self, level=1): + def _update_dtr_state(self): """Set terminal status line: Data Terminal Ready""" - # remember level for reconfigure - if level: - self._dtrState = win32.DTR_CONTROL_ENABLE + if self._dtr_state: + win32.EscapeCommFunction(self.hComPort, win32.SETDTR) else: - self._dtrState = win32.DTR_CONTROL_DISABLE - # also apply now if port is open - if self.hComPort: - if level: - win32.EscapeCommFunction(self.hComPort, win32.SETDTR) - else: - win32.EscapeCommFunction(self.hComPort, win32.CLRDTR) + win32.EscapeCommFunction(self.hComPort, win32.CLRDTR) def _GetCommModemStatus(self): + if not self.hComPort: raise portNotOpenError stat = win32.DWORD() win32.GetCommModemStatus(self.hComPort, ctypes.byref(stat)) return stat.value - def getCTS(self): + @property + def cts(self): """Read terminal status line: Clear To Send""" - if not self.hComPort: raise portNotOpenError return win32.MS_CTS_ON & self._GetCommModemStatus() != 0 - def getDSR(self): + @property + def dsr(self): """Read terminal status line: Data Set Ready""" - if not self.hComPort: raise portNotOpenError return win32.MS_DSR_ON & self._GetCommModemStatus() != 0 - def getRI(self): + @property + def ri(self): """Read terminal status line: Ring Indicator""" - if not self.hComPort: raise portNotOpenError return win32.MS_RING_ON & self._GetCommModemStatus() != 0 - def getCD(self): + @property + def cd(self): """Read terminal status line: Carrier Detect""" - if not self.hComPort: raise portNotOpenError return win32.MS_RLSD_ON & self._GetCommModemStatus() != 0 # - - platform specific - - - - diff --git a/serial/urlhandler/protocol_loop.py b/serial/urlhandler/protocol_loop.py index 10dedeb..a3bfbc9 100644 --- a/serial/urlhandler/protocol_loop.py +++ b/serial/urlhandler/protocol_loop.py @@ -58,8 +58,6 @@ class Serial(SerialBase): raise SerialException("Port is already open.") self.logger = None self.queue = queue.Queue(self.buffer_size) - self.cts = False - self.dsr = False if self._port is None: raise SerialException("Port must be configured before it can be used.") @@ -71,11 +69,12 @@ class Serial(SerialBase): self._reconfigurePort() # all things set up get, now a clean start self._isOpen = True + if not self.dsrdtr: + self._update_dtr_state() if not self._rtscts: - self.setRTS(True) - self.setDTR(True) - self.flushInput() - self.flushOutput() + self._update_rts_state() + self.reset_input_buffer() + self.reset_output_buffer() def close(self): self.queue.put(None) @@ -119,7 +118,8 @@ class Serial(SerialBase): # - - - - - - - - - - - - - - - - - - - - - - - - - def inWaiting(self): + @property + def in_waiting(self): """Return the number of characters currently in the input buffer.""" if not self._isOpen: raise portNotOpenError if self.logger: @@ -172,7 +172,7 @@ class Serial(SerialBase): self.queue.put(byte, timeout=self._writeTimeout) return len(data) - def flushInput(self): + def reset_input_buffer(self): """Clear input buffer, discarding all that is in the buffer.""" if not self._isOpen: raise portNotOpenError if self.logger: @@ -183,7 +183,7 @@ class Serial(SerialBase): except queue.Empty: pass - def flushOutput(self): + def reset_output_buffer(self): """\ Clear output buffer, aborting the current output and discarding all that is in the buffer. @@ -197,59 +197,49 @@ class Serial(SerialBase): except queue.Empty: pass - def sendBreak(self, duration=0.25): - """\ - Send break condition. Timed, returns to idle state after given - duration. - """ - if not self._isOpen: raise portNotOpenError - time.sleep(duration) - - def setBreak(self, level=True): + def _update_break_state(self): """\ Set break: Controls TXD. When active, to transmitting is possible. """ - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('setBreak(%r)' % (level,)) + self.logger.info('setBreak(%r)' % (self._break_state,)) - def setRTS(self, level=True): + def _update_rts_state(self): """Set terminal status line: Request To Send""" - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('setRTS(%r) -> state of CTS' % (level,)) - self.cts = level + self.logger.info('setRTS(%r) -> state of CTS' % (self._rts_state,)) - def setDTR(self, level=True): + def _update_dtr_state(self): """Set terminal status line: Data Terminal Ready""" - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('setDTR(%r) -> state of DSR' % (level,)) - self.dsr = level + self.logger.info('setDTR(%r) -> state of DSR' % (self._dtr_state,)) - def getCTS(self): + @property + def cts(self): """Read terminal status line: Clear To Send""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('getCTS() -> state of RTS (%r)' % (self.cts,)) - return self.cts + self.logger.info('getCTS() -> state of RTS (%r)' % (self._rts_state,)) + return self._rts_state - def getDSR(self): + @property + def dsr(self): """Read terminal status line: Data Set Ready""" - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('getDSR() -> state of DTR (%r)' % (self.dsr,)) - return self.dsr + self.logger.info('getDSR() -> state of DTR (%r)' % (self._dtr_state,)) + return self._dtr_state - def getRI(self): + @property + def ri(self): """Read terminal status line: Ring Indicator""" if not self._isOpen: raise portNotOpenError if self.logger: self.logger.info('returning dummy for getRI()') return False - def getCD(self): + @property + def cd(self): """Read terminal status line: Carrier Detect""" if not self._isOpen: raise portNotOpenError if self.logger: diff --git a/serial/urlhandler/protocol_socket.py b/serial/urlhandler/protocol_socket.py index 3dedb48..c0e3dfb 100644 --- a/serial/urlhandler/protocol_socket.py +++ b/serial/urlhandler/protocol_socket.py @@ -67,11 +67,12 @@ class Serial(SerialBase): self._reconfigurePort() # all things set up get, now a clean start self._isOpen = True + if not self.dsrdtr: + self._update_dtr_state() if not self._rtscts: - self.setRTS(True) - self.setDTR(True) - self.flushInput() - self.flushOutput() + self._update_rts_state() + self.reset_input_buffer() + self.reset_output_buffer() def _reconfigurePort(self): """\ @@ -125,7 +126,8 @@ class Serial(SerialBase): # - - - - - - - - - - - - - - - - - - - - - - - - - def inWaiting(self): + @property + def in_waiting(self): """Return the number of characters currently in the input buffer.""" if not self._isOpen: raise portNotOpenError # Poll the socket to see if it is ready for reading. @@ -180,75 +182,76 @@ class Serial(SerialBase): raise SerialException("socket connection failed: %s" % e) return len(data) - def flushInput(self): + def reset_input_buffer(self): """Clear input buffer, discarding all that is in the buffer.""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('ignored flushInput') + self.logger.info('ignored reset_input_buffer') - def flushOutput(self): + def reset_output_buffer(self): """\ Clear output buffer, aborting the current output and discarding all that is in the buffer. """ if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('ignored flushOutput') + self.logger.info('ignored reset_output_buffer') - def sendBreak(self, duration=0.25): + def send_break(self, duration=0.25): """\ Send break condition. Timed, returns to idle state after given duration. """ if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('ignored sendBreak(%r)' % (duration,)) + self.logger.info('ignored send_break(%r)' % (duration,)) - def setBreak(self, level=True): + def _update_break_state(self): """Set break: Controls TXD. When active, to transmitting is possible.""" - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('ignored setBreak(%r)' % (level,)) + self.logger.info('ignored _update_break_state(%r)' % (self._break_state,)) - def setRTS(self, level=True): + def _update_rts_state(self): """Set terminal status line: Request To Send""" - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('ignored setRTS(%r)' % (level,)) + self.logger.info('ignored _update_rts_state(%r)' % (self._rts_state,)) - def setDTR(self, level=True): + def _update_dtr_state(self): """Set terminal status line: Data Terminal Ready""" - if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('ignored setDTR(%r)' % (level,)) + self.logger.info('ignored _update_dtr_state(%r)' % (self._dtr_state,)) - def getCTS(self): + @property + def cts(self): """Read terminal status line: Clear To Send""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('returning dummy for getCTS()') + self.logger.info('returning dummy for cts') return True - def getDSR(self): + @property + def dsr(self): """Read terminal status line: Data Set Ready""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('returning dummy for getDSR()') + self.logger.info('returning dummy for dsr') return True - def getRI(self): + @property + def ri(self): """Read terminal status line: Ring Indicator""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('returning dummy for getRI()') + self.logger.info('returning dummy for ri') return False - def getCD(self): + @property + def cd(self): """Read terminal status line: Carrier Detect""" if not self._isOpen: raise portNotOpenError if self.logger: - self.logger.info('returning dummy for getCD()') + self.logger.info('returning dummy for cd)') return True # - - - platform specific - - - diff --git a/serial/urlhandler/protocol_spy.py b/serial/urlhandler/protocol_spy.py index a1993e7..f52b7fe 100644 --- a/serial/urlhandler/protocol_spy.py +++ b/serial/urlhandler/protocol_spy.py @@ -196,58 +196,65 @@ class Serial(serial.Serial): self.formatter.rx(rx) return rx - - def inWaiting(self): - n = super(Serial, self).inWaiting() + @property + def in_waiting(self): + n = super(Serial, self).in_waiting if self.show_all: - self.formatter.control('Q-RX', 'inWaiting -> {}'.format(n)) + self.formatter.control('Q-RX', 'in_waiting -> {}'.format(n)) return n def flush(self): self.formatter.control('Q-TX', 'flush') super(Serial, self).flush() - def flushInput(self): - self.formatter.control('Q-RX', 'flushInput') - super(Serial, self).flushInput() + def reset_input_buffer(self): + self.formatter.control('Q-RX', 'reset_input_buffer') + super(Serial, self).reset_input_buffer() - def flushOutput(self): - self.formatter.control('Q-TX', 'flushOutput') - super(Serial, self).flushOutput() + def reset_output_buffer(self): + self.formatter.control('Q-TX', 'reset_output_buffer') + super(Serial, self).reset_output_buffer() - def sendBreak(self, duration=0.25): - self.formatter.control('BRK', 'sendBreak {}s'.format(duration)) - super(Serial, self).sendBreak(duration) + def send_break(self, duration=0.25): + self.formatter.control('BRK', 'send_break {}s'.format(duration)) + super(Serial, self).send_break(duration) - def setBreak(self, level=1): + @serial.Serial.break_condition.setter + def break_condition(self, level): self.formatter.control('BRK', 'active' if level else 'inactive') - super(Serial, self).setBreak(level) + serial.Serial.break_condition.__set__(self, level) - def setRTS(self, level=1): + @serial.Serial.rts.setter + def rts(self, level): self.formatter.control('RTS', 'active' if level else 'inactive') - super(Serial, self).setRTS(level) + serial.Serial.rts.__set__(self, level) - def setDTR(self, level=1): + @serial.Serial.dtr.setter + def dtr(self, level): self.formatter.control('DTR', 'active' if level else 'inactive') - super(Serial, self).setDTR(level) + serial.Serial.dtr.__set__(self, level) - def getCTS(self): - level = super(Serial, self).getCTS() + @serial.Serial.cts.getter + def cts(self): + level = super(Serial, self).cts self.formatter.control('CTS', 'active' if level else 'inactive') return level - def getDSR(self): - level = super(Serial, self).getDSR() + @serial.Serial.dsr.getter + def dsr(self): + level = super(Serial, self).dsr self.formatter.control('DSR', 'active' if level else 'inactive') return level - def getRI(self): - level = super(Serial, self).getRI() + @serial.Serial.ri.getter + def ri(self): + level = super(Serial, self).ri self.formatter.control('RI', 'active' if level else 'inactive') return level - def getCD(self): - level = super(Serial, self).getCD() + @serial.Serial.cd.getter + def cd(self): + level = super(Serial, self).cd self.formatter.control('CD', 'active' if level else 'inactive') return level |