def execbuffer(pyb, buf): try: ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=pyboard.stdout_write_bytes) except PyboardError as er: print(er) pyb.close() sys.exit(1) except KeyboardInterrupt: sys.exit(1) if ret_err: pyb.exit_raw_repl() pyb.close() pyboard.stdout_write_bytes(ret_err) sys.exit(1)
def execbuffer(pyb, buf): try: ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=pyboard.stdout_write_bytes) except pyboard.PyboardError as er: print(er) return 1 except KeyboardInterrupt: return 1 if ret_err: pyb.exit_raw_repl() pyboard.stdout_write_bytes(ret_err) return 1 return 0
def execfile(filename, device="/dev/ttyACM0"): """ Execute python source from *filename* via the RAW repl mode on the card10 connected via serial line *device*. Parameters: filename(str): Path text file with commands device(str): Path to the card10 device. Returns: None """ c = PyCard10(device) c.enter_raw_repl() output = c.execfile(filename) stdout_write_bytes(output) c.exit_raw_repl() c.close()
def exec_commands(cmds): try: pyb = pyboard.Pyboard(args.device[0], args.baudrate, args.user, args.password, args.wait) pyb.enter_raw_repl() for cmd in cmds: ret, ret_err = pyb.exec_raw(cmd, timeout=None, data_consumer=pyboard.stdout_write_bytes) if ret_err: break pyb.exit_raw_repl() pyb.close() except Exception as er: print(er) sys.exit(1) except KeyboardInterrupt: sys.exit(1) if ret_err: pyboard.stdout_write_bytes(ret_err) sys.exit(1)
def returnbuffer(pyb, buf): res = b'' def add_to_res(b): nonlocal res res += b try: ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=add_to_res) except PyboardError as er: print(er) pyb.close() sys.exit(1) except KeyboardInterrupt: sys.exit(1) if ret_err: pyb.exit_raw_repl() pyb.close() pyboard.stdout_write_bytes(ret_err) sys.exit(1) return res.decode('ascii').strip()
def main(): """ The main method. Returns: None """ import argparse cmd_parser = argparse.ArgumentParser( description="Run scripts on the card10.") cmd_parser.add_argument("--device", default="/dev/ttyACM0", help="the serial device of the card10") cmd_parser.add_argument("-c", "--command", help="program passed in as string") cmd_parser.add_argument( "-w", "--wait", default=0, type=int, help="seconds to wait for USB connected board to become available", ) cmd_parser.add_argument( "--follow", action="store_true", help= "follow the output after running the scripts [default if no scripts given]", ) cmd_parser.add_argument("--reset", action="store_true", help="Soft reseting the card10") cmd_parser.add_argument("files", nargs="*", help="input files") args = cmd_parser.parse_args() # open the connection to the card10 try: card10 = PyCard10(args.device, args.wait) except PyboardError as er: print(er) sys.exit(1) if args.reset: card10.soft_reset() elif 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: card10.enter_raw_repl() except PyboardError as er: print(er) card10.close() sys.exit(1) def execbuffer(buf): try: ret, ret_err = card10.exec_raw( buf, timeout=None, data_consumer=stdout_write_bytes) except PyboardError as er: print(er) card10.close() sys.exit(1) except KeyboardInterrupt: sys.exit(1) if ret_err: card10.exit_raw_repl() card10.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 card10.exit_raw_repl() # if asked explicitly, or no files given, then follow the output elif args.follow or (args.command is None and len(args.files) == 0): try: ret, ret_err = card10.follow(timeout=None, data_consumer=stdout_write_bytes) except PyboardError as er: print(er) sys.exit(1) except KeyboardInterrupt: sys.exit(1) if ret_err: card10.close() stdout_write_bytes(ret_err) sys.exit(1) # close the connection to the card10 card10.close()