Skip to content

Commit 09c97ba

Browse files
authored
Made write truly asynchronous, bypasses bug in pyserial which made it blocking. (#56)
1 parent e4ea4d1 commit 09c97ba

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

serial_asyncio/__init__.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,21 +116,11 @@ def write(self, data):
116116
return
117117

118118
if self.get_write_buffer_size() == 0:
119-
# Attempt to send it right away first
120-
try:
121-
n = self._serial.write(data)
122-
except (BlockingIOError, InterruptedError):
123-
n = 0
124-
except serial.SerialException as exc:
125-
self._fatal_error(exc, 'Fatal write error on serial transport')
126-
return
127-
if n == len(data):
128-
return # Whole request satisfied
129-
assert 0 <= n < len(data)
130-
data = data[n:]
119+
self._write_buffer.append(data)
131120
self._ensure_writer()
121+
else:
122+
self._write_buffer.append(data)
132123

133-
self._write_buffer.append(data)
134124
self._maybe_pause_protocol()
135125

136126
def can_write_eof(self):
@@ -188,6 +178,13 @@ def abort(self):
188178
"""
189179
self._abort(None)
190180

181+
def flush(self):
182+
""" clears output buffer and stops any more data being written
183+
"""
184+
self._remove_writer()
185+
self._write_buffer.clear()
186+
self._maybe_resume_protocol()
187+
191188
def _maybe_pause_protocol(self):
192189
"""To be called whenever the write-buffer size increases.
193190

0 commit comments

Comments
 (0)