summaryrefslogtreecommitdiffstatshomepage
path: root/tools/pyboard.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/pyboard.py')
-rwxr-xr-xtools/pyboard.py63
1 files changed, 43 insertions, 20 deletions
diff --git a/tools/pyboard.py b/tools/pyboard.py
index 925e16bc60..d4ce8b7887 100755
--- a/tools/pyboard.py
+++ b/tools/pyboard.py
@@ -285,43 +285,66 @@ def main():
cmd_parser.add_argument('files', nargs='*', help='input files')
args = cmd_parser.parse_args()
- def execbuffer(buf):
+ # open the connection to the pyboard
+ try:
+ pyb = Pyboard(args.device, args.baudrate, args.user, args.password, args.wait)
+ except PyboardError as er:
+ print(er)
+ sys.exit(1)
+
+ # run any command or file(s)
+ if args.command is not None or len(args.files):
+ # we must enter raw-REPL mode to execute commands
+ # this will do a soft-reset of the board
try:
- pyb = Pyboard(args.device, args.baudrate, args.user, args.password, args.wait)
pyb.enter_raw_repl()
- ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=stdout_write_bytes)
- pyb.exit_raw_repl()
- pyb.close()
except PyboardError as er:
print(er)
sys.exit(1)
- except KeyboardInterrupt:
- sys.exit(1)
- if ret_err:
- stdout_write_bytes(ret_err)
- sys.exit(1)
-
- if args.command is not None:
- execbuffer(args.command.encode('utf-8'))
-
- for filename in args.files:
- with open(filename, 'rb') as f:
- pyfile = f.read()
- execbuffer(pyfile)
+ def execbuffer(buf):
+ try:
+ ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=stdout_write_bytes)
+ except PyboardError as er:
+ print(er)
+ sys.exit(1)
+ except KeyboardInterrupt:
+ sys.exit(1)
+ if ret_err:
+ pyb.exit_raw_repl()
+ pyb.close()
+ stdout_write_bytes(ret_err)
+ sys.exit(1)
+
+ # run the command, if given
+ if args.command is not None:
+ execbuffer(args.command.encode('utf-8'))
+
+ # run any files
+ for filename in args.files:
+ with open(filename, 'rb') as f:
+ pyfile = f.read()
+ execbuffer(pyfile)
+
+ # exiting raw-REPL just drops to friendly-REPL mode
+ pyb.exit_raw_repl()
+
+ # if asked explicitly, or no files given, then follow the output
if args.follow or (args.command is None and len(args.files) == 0):
try:
- pyb = Pyboard(args.device, args.baudrate, args.user, args.password, args.wait)
ret, ret_err = pyb.follow(timeout=None, data_consumer=stdout_write_bytes)
- pyb.close()
except PyboardError as er:
print(er)
sys.exit(1)
except KeyboardInterrupt:
sys.exit(1)
if ret_err:
+ pyb.close()
stdout_write_bytes(ret_err)
sys.exit(1)
+ # close the connection to the pyboard
+ pyb.close()
+
if __name__ == "__main__":
main()