diff options
Diffstat (limited to 'tools/pyboard.py')
-rwxr-xr-x | tools/pyboard.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/tools/pyboard.py b/tools/pyboard.py index 27665d9055..162a15024c 100755 --- a/tools/pyboard.py +++ b/tools/pyboard.py @@ -71,14 +71,22 @@ class Pyboard: def enter_raw_repl(self): self.serial.write(b'\r\x03\x03') # ctrl-C twice: interrupt any running program + + # flush input (without relying on serial.flushInput()) + n = self.serial.inWaiting() + while n > 0: + self.serial.read(n) + n = self.serial.inWaiting() + self.serial.write(b'\r\x01') # ctrl-A: enter raw REPL data = self.read_until(1, b'to exit\r\n>') if not data.endswith(b'raw REPL; CTRL-B to exit\r\n>'): print(data) raise PyboardError('could not enter raw repl') + self.serial.write(b'\x04') # ctrl-D: soft reset - data = self.read_until(1, b'to exit\r\n>') - if not data.endswith(b'raw REPL; CTRL-B to exit\r\n>'): + data = self.read_until(1, b'to exit\r\n') + if not data.endswith(b'raw REPL; CTRL-B to exit\r\n'): print(data) raise PyboardError('could not enter raw repl') @@ -93,8 +101,8 @@ class Pyboard: data = data[:-1] # wait for error output - data_err = self.read_until(2, b'\x04>', timeout=timeout) - if not data_err.endswith(b'\x04>'): + data_err = self.read_until(1, b'\x04', timeout=timeout) + if not data_err.endswith(b'\x04'): raise PyboardError('timeout waiting for second EOF reception') data_err = data_err[:-2] @@ -107,6 +115,11 @@ class Pyboard: else: command_bytes = bytes(command, encoding='utf8') + # check we have a prompt + data = self.read_until(1, b'>') + if not data.endswith(b'>'): + raise PyboardError('could not enter raw repl') + # write command for i in range(0, len(command_bytes), 256): self.serial.write(command_bytes[i:min(i + 256, len(command_bytes))]) |