Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
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()
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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()