summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xexamples/port_publisher.py10
-rw-r--r--serial/serialposix.py13
-rw-r--r--serial/tools/miniterm.py8
3 files changed, 21 insertions, 10 deletions
diff --git a/examples/port_publisher.py b/examples/port_publisher.py
index f617875..eecc2a1 100755
--- a/examples/port_publisher.py
+++ b/examples/port_publisher.py
@@ -221,7 +221,7 @@ class Forwarder(ZeroconfService):
# escape outgoing data when needed (Telnet IAC (0xff) character)
if self.rfc2217:
data = serial.to_bytes(self.rfc2217.escape(data))
- self.buffer_ser2net += data
+ self.buffer_ser2net.extend(data)
else:
self.handle_serial_error()
except Exception as msg:
@@ -250,13 +250,15 @@ class Forwarder(ZeroconfService):
if data:
# Process RFC 2217 stuff when enabled
if self.rfc2217:
- data = serial.to_bytes(self.rfc2217.filter(data))
+ data = b''.join(self.rfc2217.filter(data))
# add data to buffer
- self.buffer_net2ser += data
+ self.buffer_net2ser.extend(data)
else:
# empty read indicates disconnection
self.handle_disconnect()
except socket.error:
+ if self.log is not None:
+ self.log.exception("{}: error reading...".format(self.device))
self.handle_socket_error()
def handle_socket_write(self):
@@ -267,6 +269,8 @@ class Forwarder(ZeroconfService):
# and remove the sent data from the buffer
self.buffer_ser2net = self.buffer_ser2net[count:]
except socket.error:
+ if self.log is not None:
+ self.log.exception("{}: error writing...".format(self.device))
self.handle_socket_error()
def handle_socket_error(self):
diff --git a/serial/serialposix.py b/serial/serialposix.py
index afe5062..3ac6283 100644
--- a/serial/serialposix.py
+++ b/serial/serialposix.py
@@ -733,21 +733,28 @@ class PosixPollSerial(Serial):
if not self.is_open:
raise portNotOpenError
read = bytearray()
+ timeout = Timeout(self._timeout)
poll = select.poll()
poll.register(self.fd, select.POLLIN | select.POLLERR | select.POLLHUP | select.POLLNVAL)
+ poll.register(self.pipe_abort_read_r, select.POLLIN | select.POLLERR | select.POLLHUP | select.POLLNVAL)
if size > 0:
while len(read) < size:
# print "\tread(): size",size, "have", len(read) #debug
# wait until device becomes ready to read (or something fails)
- for fd, event in poll.poll(self._timeout * 1000):
+ for fd, event in poll.poll(None if timeout.is_infinite else (timeout.time_left() * 1000)):
+ if fd == self.pipe_abort_read_r:
+ break
if event & (select.POLLERR | select.POLLHUP | select.POLLNVAL):
raise SerialException('device reports error (poll)')
# we don't care if it is select.POLLIN or timeout, that's
# handled below
+ if fd == self.pipe_abort_read_r:
+ os.read(self.pipe_abort_read_r, 1000)
+ break
buf = os.read(self.fd, size - len(read))
read.extend(buf)
- if ((self._timeout is not None and self._timeout >= 0) or
- (self._inter_byte_timeout is not None and self._inter_byte_timeout > 0)) and not buf:
+ if timeout.expired() \
+ or (self._inter_byte_timeout is not None and self._inter_byte_timeout > 0) and not buf:
break # early abort on timeout
return bytes(read)
diff --git a/serial/tools/miniterm.py b/serial/tools/miniterm.py
index 88307c6..812f146 100644
--- a/serial/tools/miniterm.py
+++ b/serial/tools/miniterm.py
@@ -275,12 +275,12 @@ class DebugIO(Transform):
"""Print what is sent and received"""
def rx(self, text):
- sys.stderr.write(' [RX:{}] '.format(repr(text)))
+ sys.stderr.write(' [RX:{!r}] '.format(text))
sys.stderr.flush()
return text
def tx(self, text):
- sys.stderr.write(' [TX:{}] '.format(repr(text)))
+ sys.stderr.write(' [TX:{!r}] '.format(text))
sys.stderr.flush()
return text
@@ -612,7 +612,7 @@ class Miniterm(object):
if new_filters:
for f in new_filters:
if f not in TRANSFORMATIONS:
- sys.stderr.write('--- unknown filter: {}\n'.format(repr(f)))
+ sys.stderr.write('--- unknown filter: {!r}\n'.format(f))
break
else:
self.filters = new_filters
@@ -931,7 +931,7 @@ def main(default_port=None, default_baudrate=9600, default_rts=None, default_dtr
serial_instance.open()
except serial.SerialException as e:
- sys.stderr.write('could not open port {}: {}\n'.format(repr(args.port), e))
+ sys.stderr.write('could not open port {!r}: {}\n'.format(args.port, e))
if args.develop:
raise
if not args.ask: