diff --git a/README.md b/README.md index d5ae0b4..2b9f13e 100644 --- a/README.md +++ b/README.md @@ -88,3 +88,62 @@ with hid.Device(vid, pid) as h: print(f'Serial Number: {h.serial}') ``` + +Sending and receiving data can be done with following code: + +```python +import sys +import hid + +vendor_id = 0x4335 +product_id = 0x0002 + +usage_page = 0xFF60 +usage = 0x61 +report_length = 32 + +def get_raw_hid_interface(): + device_interfaces = hid.enumerate(vendor_id, product_id) + raw_hid_interfaces = [i for i in device_interfaces if i['usage_page'] == usage_page and i['usage'] == usage] + + if len(raw_hid_interfaces) == 0: + return None + + interface = hid.Device(path=raw_hid_interfaces[0]['path']) + + print(f"Manufacturer: {interface.manufacturer}") + print(f"Product: {interface.product}") + + return interface + +def send_raw_report(data): + interface = get_raw_hid_interface() + + if interface is None: + print("No device found") + sys.exit(1) + + request_data = [0x00] * (report_length + 1) # First byte is Report ID + request_data[1:len(data) + 1] = data + request_report = bytes(request_data) + + print("Request:") + print(request_report) + + try: + interface.write(request_report) + + response_report = interface.read(report_length, timeout=1000) + + print("Response:") + print(response_report) + finally: + interface.close() + +if __name__ == '__main__': + send_raw_report([ + 0x41 + ]) +``` +Source: https://docs.qmk.fm/features/rawhid#simple-example +