diff --git a/led-badge-11x44.py b/led-badge-11x44.py index 6e80ca2..e3c31ec 100755 --- a/led-badge-11x44.py +++ b/led-badge-11x44.py @@ -23,7 +23,10 @@ import sys, os, re, time, argparse from array import array -import usb.core +if sys.platform == "darwin": + import pyhidapi +else: + import usb.core __version = "0.6" @@ -335,16 +338,30 @@ parser.add_argument('--mode-help', action='version', help=argparse.SUPPRESS, ver (No "rotation" or "smothering"(?) effect can be expected, though) """ % sys.argv[0]) args = parser.parse_args() - -dev = usb.core.find(idVendor=0x0416, idProduct=0x5020) -if dev is None: - print("No led tag with vendorID 0x0416 and productID 0x5020 found.") - print("Connect the led tag and run this tool as root.") - sys.exit(1) -if dev.is_kernel_driver_active(0): - dev.detach_kernel_driver(0) -dev.set_configuration() -print("using [%s %s] bus=%d dev=%d" % (dev.manufacturer, dev.product, dev.bus, dev.address)) +if sys.platform == "darwin": + pyhidapi.hid_init() + devinfo = pyhidapi.hid_enumerate(0x0416, 0x5020) + #dev = pyhidapi.hid_open(0x0416, 0x5020) +else: + dev = usb.core.find(idVendor=0x0416, idProduct=0x5020) + +if sys.platform == "darwin": + if devinfo: + dev = pyhidapi.hid_open_path(devinfo[0].path) + print("using [%s %s] int=%d page=%s via HIDAPI" % (devinfo[0].manufacturer_string, devinfo[0].product_string, devinfo[0].interface_number, devinfo[0].usage_page)) + else: + print("No led tag with vendorID 0x0416 and productID 0x5020 found.") + print("Connect the led tag and run this tool as root.") + sys.exit(1) +else: + if dev is None: + print("No led tag with vendorID 0x0416 and productID 0x5020 found.") + print("Connect the led tag and run this tool as root.") + sys.exit(1) + if dev.is_kernel_driver_active(0): + dev.detach_kernel_driver(0) + dev.set_configuration() + print("using [%s %s] bus=%d dev=%d" % (dev.manufacturer, dev.product, dev.bus, dev.address)) if args.preload: for file in args.preload: @@ -371,5 +388,11 @@ if needpadding: # print(buf) for i in range(int(len(buf)/64)): time.sleep(0.1) - dev.write(1, buf[i*64:i*64+64]) + if sys.platform == "darwin": + pyhidapi.hid_write(dev, buf[i*64:i*64+64]) + else: + dev.write(1, buf[i*64:i*64+64]) + +if sys.platform == "darwin": + pyhidapi.hid_close(dev)