Skip to content

Commit cccfa3d

Browse files
committed
Add rfc2217 support
1 parent 13694c5 commit cccfa3d

File tree

1 file changed

+39
-46
lines changed

1 file changed

+39
-46
lines changed

serial_asyncio/__init__.py

+39-46
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ def __init__(self, loop, protocol, serial_instance):
6565

6666
# Asynchronous I/O requires non-blocking devices
6767
self._serial.timeout = 0
68-
self._serial.write_timeout = 0
68+
if not self.serial.port.startswith("rfc2217"):
69+
self._serial.write_timeout = 0
6970

7071
# These two callbacks will be enqueued in a FIFO queue by asyncio
7172
loop.call_soon(protocol.connection_made, self)
@@ -284,60 +285,52 @@ def _write_ready(self):
284285
self._maybe_resume_protocol()
285286
assert self._has_writer
286287

287-
if os.name == "nt":
288-
def _poll_read(self):
289-
if self._has_reader and not self._closing:
290-
try:
291-
self._has_reader = self._loop.call_later(self._poll_wait_time, self._poll_read)
292-
if self.serial.in_waiting:
293-
self._read_ready()
294-
except serial.SerialException as exc:
295-
self._fatal_error(exc, 'Fatal write error on serial transport')
296-
297-
def _ensure_reader(self):
298-
if not self._has_reader and not self._closing:
288+
def _poll_read(self):
289+
if self._has_reader and not self._closing:
290+
try:
299291
self._has_reader = self._loop.call_later(self._poll_wait_time, self._poll_read)
300-
301-
def _remove_reader(self):
302-
if self._has_reader:
303-
self._has_reader.cancel()
304-
self._has_reader = False
305-
306-
def _poll_write(self):
307-
if self._has_writer and not self._closing:
308-
self._has_writer = self._loop.call_later(self._poll_wait_time, self._poll_write)
309-
if self.serial.out_waiting < self._max_out_waiting:
310-
self._write_ready()
311-
312-
def _ensure_writer(self):
313-
if not self._has_writer and not self._closing:
314-
self._has_writer = self._loop.call_soon(self._poll_write)
315-
316-
def _remove_writer(self):
317-
if self._has_writer:
318-
self._has_writer.cancel()
319-
self._has_writer = False
320-
321-
else:
322-
def _ensure_reader(self):
323-
if (not self._has_reader) and (not self._closing):
292+
if self.serial.in_waiting:
293+
self._read_ready()
294+
except serial.SerialException as exc:
295+
self._fatal_error(exc, 'Fatal write error on serial transport')
296+
297+
def _ensure_reader(self):
298+
if not self._has_reader and not self._closing:
299+
if os.name == "nt" or self._serial.port.startswith("rfc2217"):
300+
self._has_reader = self._loop.call_later(self._poll_wait_time, self._poll_read)
301+
else:
324302
self._loop.add_reader(self._serial.fileno(), self._read_ready)
325303
self._has_reader = True
326304

327-
def _remove_reader(self):
328-
if self._has_reader:
305+
def _remove_reader(self):
306+
if self._has_reader:
307+
if os.name == "nt" or self._serial.port.startswith("rfc2217"):
308+
self._has_reader.cancel()
309+
else:
329310
self._loop.remove_reader(self._serial.fileno())
330-
self._has_reader = False
311+
self._has_reader = False
331312

332-
def _ensure_writer(self):
333-
if (not self._has_writer) and (not self._closing):
334-
self._loop.add_writer(self._serial.fileno(), self._write_ready)
313+
def _poll_write(self):
314+
if self._has_writer and not self._closing:
315+
self._has_writer = self._loop.call_later(self._poll_wait_time, self._poll_write)
316+
if not self._serial.port.startswith("rfc2217") and self.serial.out_waiting < self._max_out_waiting:
317+
self._write_ready()
318+
319+
def _ensure_writer(self):
320+
if not self._has_writer and not self._closing:
321+
if os.name == "nt" or self._serial.port.startswith("rfc2217"):
322+
self._has_writer = self._loop.call_soon(self._poll_write)
323+
else:
324+
self._loop.add_writer(self.serial.fileno(), self._write_ready)
335325
self._has_writer = True
336326

337-
def _remove_writer(self):
338-
if self._has_writer:
327+
def _remove_writer(self):
328+
if self._has_writer:
329+
if os.name == "nt" or self._serial.port.startswith("rfc2217"):
330+
self._has_writer.cancel()
331+
else:
339332
self._loop.remove_writer(self._serial.fileno())
340-
self._has_writer = False
333+
self._has_writer = False
341334

342335
def _set_write_buffer_limits(self, high=None, low=None):
343336
"""Ensure consistent write-buffer limits."""

0 commit comments

Comments
 (0)