summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2015-08-27 23:25:21 +0200
committerChris Liechti <cliechti@gmx.net>2015-08-27 23:25:21 +0200
commitef1fe252d12bb6e41843ee9f8e1425ea927213d3 (patch)
treea4ba87eb291eb4e2533a25d40a5914cfcbfea0f7
parentc8c51830c8e64cc3074781a9c64a321aa6c371ae (diff)
downloadpyserial-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.py56
-rw-r--r--serial/serialposix.py42
-rw-r--r--serial/serialutil.py75
-rw-r--r--serial/serialwin32.py77
-rw-r--r--serial/urlhandler/protocol_loop.py64
-rw-r--r--serial/urlhandler/protocol_socket.py59
-rw-r--r--serial/urlhandler/protocol_spy.py61
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