summaryrefslogtreecommitdiffstats
path: root/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py
diff options
context:
space:
mode:
authortmk <hasu@tmk-kbd.com>2015-05-13 04:13:10 +0200
committertmk <hasu@tmk-kbd.com>2015-05-13 04:13:10 +0200
commitf6d56675f9f981c5464f0ca7a1fbb0162154e8c5 (patch)
tree57c9d4b3808a26116ae0ee7956fc00b84841aa2b /protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py
parent4d116a04e94cf0d19317d5b44e4fa9f34a3e5594 (diff)
downloadqmk_firmware-f6d56675f9f981c5464f0ca7a1fbb0162154e8c5.tar.gz
qmk_firmware-f6d56675f9f981c5464f0ca7a1fbb0162154e8c5.tar.xz
Squashed 'tmk_core/' changes from caca2c0..dc0e46e
dc0e46e Rename LUFA to LUFA-git 3bfa7fa Remove LUFA-120730 215b764 Merge commit 'afa0f22a9299686fd88f58ce09c5b521ac917e8f' as 'protocol/lufa/LUFA' afa0f22 Squashed 'protocol/lufa/LUFA/' content from commit def7fca c0c42fa Remove submodule of LUFA 30f897d Merge commit '87ced33feb74e79c3281dda36eb6d6d153399b41' as 'protocol/usb_hid/USB_Host_Shield_2.0' 87ced33 Squashed 'protocol/usb_hid/USB_Host_Shield_2.0/' content from commit aab4a69 14f6d49 Remove submodule of USB_Host_Shield_2.0 git-subtree-dir: tmk_core git-subtree-split: dc0e46eaa4367d4e218f8816e3c117895820f07c
Diffstat (limited to 'protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py')
-rw-r--r--protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py b/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py
new file mode 100644
index 000000000..286577280
--- /dev/null
+++ b/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py
@@ -0,0 +1,96 @@
+"""
+ LUFA Library
+ Copyright (C) Dean Camera, 2014.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+"""
+
+"""
+ LUFA Generic HID device demo host test script. This script will send a
+ continuous stream of generic reports to the device, to show a variable LED
+ pattern on the target board. Send and received report data is printed to
+ the terminal.
+
+ Requires the pywinusb library (https://pypi.python.org/pypi/pywinusb/).
+"""
+
+import sys
+from time import sleep
+import pywinusb.hid as hid
+
+# Generic HID device VID, PID and report payload length (length is increased
+# by one to account for the Report ID byte that must be pre-pended)
+device_vid = 0x03EB
+device_pid = 0x204F
+report_length = 1 + 8
+
+
+def get_hid_device_handle():
+ hid_device_filter = hid.HidDeviceFilter(vendor_id=device_vid,
+ product_id=device_pid)
+
+ valid_hid_devices = hid_device_filter.get_devices()
+
+ if len(valid_hid_devices) is 0:
+ return None
+ else:
+ return valid_hid_devices[0]
+
+
+def send_led_pattern(device, led1, led2, led3, led4):
+ # Report data for the demo is the report ID (always zero) followed by the
+ # LED on/off data
+ report_data = [0, led1, led2, led3, led4]
+
+ # Zero-extend the array to the length the report should be
+ report_data.extend([0] * (report_length - len(report_data)))
+
+ # Send the generated report to the device
+ device.send_output_report(report_data)
+
+ print("Sent LED Pattern: {0}".format(report_data[1:5]))
+
+
+def received_led_pattern(report_data):
+ print("Received LED Pattern: {0}".format(report_data[1:5]))
+
+
+def main():
+ hid_device = get_hid_device_handle()
+
+ if hid_device is None:
+ print("No valid HID device found.")
+ sys.exit(1)
+
+ try:
+ hid_device.open()
+
+ print("Connected to device 0x%04X/0x%04X - %s [%s]" %
+ (hid_device.vendor_id, hid_device.product_id,
+ hid_device.product_name, hid_device.vendor_name))
+
+ # Set up the HID input report handler to receive reports
+ hid_device.set_raw_data_handler(received_led_pattern)
+
+ p = 0
+ while (hid_device.is_plugged()):
+ # Convert the current pattern index to a bit-mask and send
+ send_led_pattern(hid_device,
+ (p >> 3) & 1,
+ (p >> 2) & 1,
+ (p >> 1) & 1,
+ (p >> 0) & 1)
+
+ # Compute next LED pattern in sequence
+ p = (p + 1) % 16
+
+ # Delay a bit for visual effect
+ sleep(.2)
+
+ finally:
+ hid_device.close()
+
+
+if __name__ == '__main__':
+ main()