Skip to content

Commit a74b84e

Browse files
committed
fix: ALVIKDEV-108 UART read extremely slow on bytewise access
1 parent b566a87 commit a74b84e

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

arduino_alvik/arduino_alvik.py

+11-11
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,7 @@ def _flush_uart():
272272
Empties the UART buffer
273273
:return:
274274
"""
275-
while uart.any():
276-
uart.read(1)
275+
uart.read(uart.any())
277276

278277
def _begin_update_thread(self):
279278
"""
@@ -641,21 +640,22 @@ def _update(self, delay_=1):
641640
self.set_behaviour(2)
642641
if not ArduinoAlvik._update_thread_running:
643642
break
644-
if self._read_message():
645-
self._parse_message()
643+
self._read_message()
646644
sleep_ms(delay_)
647645

648-
def _read_message(self) -> bool:
646+
def _read_message(self) -> None:
649647
"""
650648
Read a message from the uC
651649
:return: True if a message terminator was reached
652650
"""
653-
while uart.any():
654-
b = uart.read(1)[0]
655-
self._packeter.buffer.push(b)
656-
if b == self._packeter.end_index and self._packeter.checkPayload():
657-
return True
658-
return False
651+
buf = bytearray(uart.any())
652+
uart.readinto(buf)
653+
if len(buf):
654+
uart.readinto(buf)
655+
for b in buf:
656+
self._packeter.buffer.push(b)
657+
if b == self._packeter.end_index and self._packeter.checkPayload():
658+
self._parse_message()
659659

660660
def _parse_message(self) -> int:
661661
"""

0 commit comments

Comments
 (0)