#!/usr/bin/env python3

# NOTE: There are two HID libraries in Python: pyhidapi (https://pypi.org/project/hid/) and cython-hidapi (https://pypi.org/project/hidapi/).
#       Both have similar, but not quite compatible, APIs. This example code uses pyhidapi.

import sys
import hid

vendor_id  = 0x4335
product_id = 0x0002

usage_page = 0xFF60
usage      = 0x61

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("Manufacturer: %s" % interface.manufacturer)
    print("Product: %s" % interface.product)

    return interface

def send_raw_packet(data):
    interface = get_raw_hid_interface()

    if interface is None:
        print("No device found")
        sys.exit(1)

    request_data = [0x00] * 33 # First byte is Report ID
    request_data[1:len(data) + 1] = data
    request_packet = bytes(request_data)

    print("Request:")
    print(request_packet)

    try:
        interface.write(request_packet)

        response_packet = interface.read(32, timeout=1000)

        print("Response:")
        print(response_packet)
    finally:
        interface.close()

if __name__ == '__main__':
    send_raw_packet([
        0x41
    ])