#!/usr/bin/env python

from __future__ import print_function
import time
import serial
import argparse

from arduinoudev import open_device, get_device_name, set_device_name, reset_device

if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument("device", nargs=1, help="serial device")
    parser.add_argument("--set-name", "-s", type=str, help="set the device name")
    parser.add_argument(
        "--wait",
        "-w",
        type=float,
        default=0,
        help="wait this many seconds for the device to settle",
    )
    parser.add_argument(
        "--no-reset",
        action="store_false",
        dest="reset",
        default=True,
        help="do no reset ardunio before operation",
    )
    parser.add_argument("--verbose", "-v", action="store_true")
    args = parser.parse_args()

    # udev passes this as a relative dev name like USBN
    device = args.device[0].split("/")[-1]

    time.sleep(args.wait)

    ser = open_device(port="/dev/%s" % device)

    if args.reset:
        reset_device(ser)

    time.sleep(5.0)
    ser.flushInput()

    if args.set_name:
        set_device_name(ser, args.set_name, verbose=args.verbose)
        name = args.set_name
    else:
        name = get_device_name(ser)

    if args.verbose:
        print(
            "%sNAME: %s (%s)"
            % (
                "SET " if args.set_name else "",
                name,
                " ".join(["0x%X" % ord(c) for c in name]),
            )
        )
    else:
        print(name)

    ser.close()
