summaryrefslogtreecommitdiff
path: root/tools/pyboard.py
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2025-05-30 13:10:12 +1000
committerDamien George <damien@micropython.org>2025-06-02 17:02:59 +1000
commitdea3035b88a82b48f98b9951f3d2ad6500e4c9a9 (patch)
treed1787cb1448dc1d455bdace3e419cfddcb2e0132 /tools/pyboard.py
parentb1c947ab45937e262cfef99295a91202b8bb3a55 (diff)
tools/pyboard.py: Add write_timeout and catch errors in enter_raw_repl.
If the USB serial device locks up, then writes to that device can hang forever. That can make the test runner `tests/run-tests.py` lock up, among other problems. This commit introduces a 5 second write-timeout, and catches any OSError's raised during `enter_raw_repl()`. Now, if a USB serial device locks up, `enter_raw_repl()` will eventually raise an exception. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tools/pyboard.py')
-rwxr-xr-xtools/pyboard.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/tools/pyboard.py b/tools/pyboard.py
index a177106ad..40928e8bb 100755
--- a/tools/pyboard.py
+++ b/tools/pyboard.py
@@ -275,6 +275,7 @@ class Pyboard:
wait=0,
exclusive=True,
timeout=None,
+ write_timeout=5,
):
self.in_raw_repl = False
self.use_raw_paste = True
@@ -293,6 +294,7 @@ class Pyboard:
serial_kwargs = {
"baudrate": baudrate,
"timeout": timeout,
+ "write_timeout": write_timeout,
"interCharTimeout": 1,
}
if serial.__version__ >= "3.3":
@@ -376,6 +378,12 @@ class Pyboard:
return data
def enter_raw_repl(self, soft_reset=True, timeout_overall=10):
+ try:
+ self._enter_raw_repl_unprotected(soft_reset, timeout_overall)
+ except OSError as er:
+ raise PyboardError("could not enter raw repl: {}".format(er))
+
+ def _enter_raw_repl_unprotected(self, soft_reset, timeout_overall):
self.serial.write(b"\r\x03") # ctrl-C: interrupt any running program
# flush input (without relying on serial.flushInput())