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>
This commit is contained in:
parent
b1c947ab45
commit
dea3035b88
1 changed files with 8 additions and 0 deletions
|
|
@ -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())
|
||||
|
|
|
|||
Loading…
Reference in a new issue