diff options
author | Damien George <damien@micropython.org> | 2025-05-30 13:10:12 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2025-06-02 17:02:59 +1000 |
commit | dea3035b88a82b48f98b9951f3d2ad6500e4c9a9 (patch) | |
tree | d1787cb1448dc1d455bdace3e419cfddcb2e0132 /tools/pyboard.py | |
parent | b1c947ab45937e262cfef99295a91202b8bb3a55 (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-x | tools/pyboard.py | 8 |
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()) |