test_hid_inout.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # Copyright (c) 2021 HPMicro
  2. # SPDX-License-Identifier: BSD-3-Clause
  3. import pywinusb.hid as hid
  4. import os
  5. import time
  6. import sys
  7. import operator
  8. # VID and PID customization changes here...
  9. VID = 0xFFFF
  10. PID = 0xFFFF
  11. # Send buffer
  12. buffer = [0xff]*64
  13. # Const
  14. TIMEOUT = -1
  15. PASS = 0
  16. FAIL = 1
  17. # Result
  18. result = TIMEOUT
  19. def search_dev():
  20. filter = hid.HidDeviceFilter(vendor_id = VID, product_id = PID)
  21. hid_device = filter.get_devices()
  22. return hid_device
  23. def recv_data(data):
  24. print("<=================== USB HID Read ========================>")
  25. for i in range(0, len(data)):
  26. print("0x{0:02x}" .format(data[i]), end=" ")
  27. print("\n")
  28. global result
  29. result = (PASS if (operator.eq(data[1:-1], buffer[1:-1]) == True) else FAIL)
  30. return None
  31. def send_data(report):
  32. print("<=================== USB HID Write ========================>")
  33. buffer[0] = report[0].report_id
  34. print("0x{0:02x}" .format(buffer[0]), end=" ")
  35. for i in range(1,64):
  36. buffer[i] = i % 256
  37. print("0x{0:02x}" .format(buffer[i]), end=" ")
  38. print("\n")
  39. report[0].set_raw_data(buffer)
  40. report[0].send()
  41. return None
  42. if __name__ == '__main__':
  43. device = search_dev()[0]
  44. device.open()
  45. device.set_raw_data_handler(recv_data)
  46. send_data(device.find_output_reports())
  47. time.sleep(1)
  48. if result == PASS:
  49. print("USB hid echo passed!")
  50. elif result == FAIL:
  51. print("USB HID echo failed!")
  52. else:
  53. print("USB HID echo timed out!")