2 # -*- encoding: utf-8 -*-
3 # https://slomkowski.eu/tutorials/eavesdropping-usb-and-writing-driver-in-python/
14 MANUFACTURER_NAME = "www.dcttech.com"
15 PRODUCT_NAME = "USBRelay2"
18 def check_manufacturer_and_product(dev):
19 return dev.manufacturer == MANUFACTURER_NAME and dev.product == PRODUCT_NAME
22 def find_device_handle():
23 return usb.core.find(idVendor=VENDOR_ID, idProduct=DEVICE_ID,
24 custom_match=check_manufacturer_and_product)
27 dev_handle = find_device_handle()
29 if dev_handle.is_kernel_driver_active(0):
31 dev_handle.detach_kernel_driver(0)
32 print("kernel driver detached")
33 except usb.core.USBError as e:
34 sys.exit("Could not detach kernel driver: %s" % str(e))
36 requestType = usb.util.build_request_type(usb.util.CTRL_OUT,
37 usb.util.CTRL_TYPE_CLASS,
38 usb.util.CTRL_RECIPIENT_INTERFACE)
41 def set_relay(relay_number, enabled: bool):
42 b1 = 0xff if enabled else 0xfd
43 dev_handle.ctrl_transfer(requestType, 9, 0x0300, 0, (b1, relay_number, 0, 0, 0, 0, 0, 0))
57 if len(sys.argv)!=3 or (sys.argv[1]!="1" and sys.argv[1]!="2") or (sys.argv[2]!="0" and sys.argv[2]!="1"):
58 sys.exit("usbrelay: {1|2} {0|1}")
59 set_relay((1 if sys.argv[1]=="1" else 2),(True if sys.argv[2]=="1" else False))