def display_register(intf, dmxlid, reg):
    try:
        value = intf.read_register(dmxlid, reg)
        Register.dump(reg, value)
    except RuntimeError as e:
        if dmxlid == DynamixelBusInterface.INTERFACE_ID:
            pass  # all registers are not relevant for interfaces
        else:
            cli.print_err(str(e))
            raise
    except Exception as e:
        cli.print_err(str(e))
        raise
def run_script(args):  # pylint: disable=W0621
    # process the 'list registers' action which involves no equipment
    if args.list:
        list_registers()
        return

    try:
        intf_class = USB2AX if args.xevel else USB2Dynamixel
        intf = intf_class(
            port=args.port,
            baudrate=args.baudrate,
            timeout=args.timeout,
            debug=args.debug
        )
    except Exception as e:  # pylint: disable=W0703
        cli.die(e)

    else:
        if args.intf or intf.ping(args.id):

            if args.intf:
                print('Interface register(s) :')
            else:
                print('Servo id=%s register(s) :' % args.id)

            if args.readall:
                # we want to display all registers
                intf.dump_regs(args.id)
            elif args.read is not None:
                # we want to read a specific register
                display_register(intf, args.id, args.read)
            elif args.write:
                # we want to write to a specific register
                reg, value = WriteStatement.parse(args.write)
                if reg == Register.Id:
                    print(dedent("""
    Warning : Writing to register 0x%0.2x will change the servo id.
            Use dmxl_setid.py script for doing this in a secure way.
                            """) % Register.Id
                    )
                    return
                write_register(intf, args.id, reg, value)
                display_register(intf, args.id, reg)

        else:
            cli.print_err('no servo found with id=%d' % args.id)
def write_register(intf, dmxlid, reg, value):
    try:
        intf.write_register(dmxlid, reg, value)
    except Exception as e:  # pylint: disable=W0703
        cli.print_err(str(e))