diff options
-rwxr-xr-x | examples/port_publisher.py | 10 | ||||
-rw-r--r-- | serial/serialposix.py | 13 | ||||
-rw-r--r-- | serial/tools/miniterm.py | 8 |
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: |