#!/usr/bin/python
import sys, getopt, logging
from mikroeuhb.hid import open_dev
from mikroeuhb.device import Device

def usage():
    sys.stderr.write("""usage: %s [options] [file.hex]
options:
    -h | --help           displays this message
    -v | --verbose        output debugging messages
    --vendor=0x1234       specify USB vendor ID
    --product=0x0001      specify USB product ID
    --disable-bootloader  use with caution (see wiki)
""" % sys.argv[0])

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'hv',
                                   ['help', 'verbose', 'vendor=', 'product=',
                                    'disable-bootloader'])
    except getopt.GetoptError as err:
        sys.stderr.write(str(err) + '\n')
        usage()
        sys.exit(1)
        
    loglevel = logging.WARNING
    vendor = 0x1234
    product = 0x0001
    disable_bootloader = False
    
    for o, a in opts:
        if o in ('-h', '--help'):
            usage()
            sys.exit()
        elif o in ('-v', '--verbose'):
            loglevel = logging.DEBUG
        elif o == '--vendor':
            vendor = int(a, 16)
        elif o == '--product':
            product = int(a, 16)
        elif o == '--disable-bootloader':
            disable_bootloader = True
        else: assert(False)
    
    hexf = None
    if len(args) == 1:
        hexf = open(args[0], 'r')
    elif len(args) > 1:
        sys.stderr.write('expecting a single file.hex argument\n')
        usage()
        sys.exit(1)    
    
    logging.basicConfig(level=loglevel)
    dev = Device(open_dev(vendor, product))
    dev.program(hexf, disable_bootloader=disable_bootloader)

if __name__ == '__main__':
    main()