Commit bf630b3a authored by Dean Camera's avatar Dean Camera
Browse files

Update other PyWinUSB Python host scripts to use the hidapi library.

parent 021bad31
......@@ -22,13 +22,9 @@ from time import sleep
import usb.core
import usb.util
# 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
def get_and_init_hid_device():
device = usb.core.find(idVendor=device_vid, idProduct=device_pid)
device = usb.core.find(idVendor=0x03EB, idProduct=0x204F)
if device is None:
sys.exit("Could not find USB device.")
......@@ -46,6 +42,7 @@ def get_and_init_hid_device():
return device
def send_led_pattern(device, led1, led2, led3, led4):
# Report data for the demo is LED on/off data
report_data = [led1, led2, led3, led4]
......@@ -62,11 +59,13 @@ def send_led_pattern(device, led1, led2, led3, led4):
print("Sent LED Pattern: {0}".format(report_data))
def receive_led_pattern(hid_device):
endpoint = hid_device[0][(0,0)][0]
report_data = hid_device.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize)
return list(report_data)
def main():
hid_device = get_and_init_hid_device()
......
#!/usr/bin/env python
"""
LUFA Library
Copyright (C) Dean Camera, 2018.
......@@ -17,37 +19,34 @@
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
import hid
def get_hid_device_handle():
hid_device_filter = hid.HidDeviceFilter(vendor_id=device_vid,
product_id=device_pid)
all_hid_devices = hid.enumerate()
valid_hid_devices = hid_device_filter.get_devices()
lufa_hid_devices = [d for d in all_hid_devices if d['vendor_id'] == 0x03EB and d['product_id'] == 0x204F]
if len(valid_hid_devices) is 0:
if len(lufa_hid_devices) is 0:
return None
else:
return valid_hid_devices[0]
device_handle = hid.device()
device_handle.open_path(lufa_hid_devices[0]['path'])
return device_handle
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)))
report_data = bytearray(9)
report_data[0] = 0
report_data[1] = led1
report_data[2] = led2
report_data[3] = led3
report_data[4] = led4
# Send the generated report to the device
device.send_output_report(report_data)
device.write(report_data)
print("Sent LED Pattern: {0}".format(report_data[1:5]))
......@@ -64,11 +63,7 @@ def main():
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))
print("Connected to device.", flush=True)
# Set up the HID input report handler to receive reports
hid_device.set_raw_data_handler(received_led_pattern)
......
#!/usr/bin/env python
"""
LUFA Library
Copyright (C) Dean Camera, 2018.
......@@ -17,37 +19,34 @@
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
import hid
def get_hid_device_handle():
hid_device_filter = hid.HidDeviceFilter(vendor_id=device_vid,
product_id=device_pid)
all_hid_devices = hid.enumerate()
valid_hid_devices = hid_device_filter.get_devices()
lufa_hid_devices = [d for d in all_hid_devices if d['vendor_id'] == 0x03EB and d['product_id'] == 0x204F]
if len(valid_hid_devices) is 0:
if len(lufa_hid_devices) is 0:
return None
else:
return valid_hid_devices[0]
device_handle = hid.device()
device_handle.open_path(lufa_hid_devices[0]['path'])
return device_handle
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)))
report_data = bytearray(9)
report_data[0] = 0
report_data[1] = led1
report_data[2] = led2
report_data[3] = led3
report_data[4] = led4
# Send the generated report to the device
device.send_output_report(report_data)
device.write(report_data)
print("Sent LED Pattern: {0}".format(report_data[1:5]))
......@@ -64,11 +63,7 @@ def main():
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))
print("Connected to device.", flush=True)
# Set up the HID input report handler to receive reports
hid_device.set_raw_data_handler(received_led_pattern)
......
#!/usr/bin/env python
"""
LUFA Library
Copyright (C) Dean Camera, 2018.
......@@ -25,44 +27,41 @@
import sys
from datetime import datetime
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 = 0x2063
report_length = 1 + 7
import hid
def get_hid_device_handle():
hid_device_filter = hid.HidDeviceFilter(vendor_id=device_vid,
product_id=device_pid)
all_hid_devices = hid.enumerate()
valid_hid_devices = hid_device_filter.get_devices()
lufa_hid_devices = [d for d in all_hid_devices if d['vendor_id'] == 0x03EB and d['product_id'] == 0x2063]
if len(valid_hid_devices) is 0:
if len(lufa_hid_devices) is 0:
return None
else:
return valid_hid_devices[0]
device_handle = hid.device()
device_handle.open_path(lufa_hid_devices[0]['path'])
return device_handle
def configure_temp_log_device(device, time_date, log_interval_500ms):
report_data = bytearray(8)
# Report data for the demo is the report ID (always zero)
report_data = [0]
report_data[0] = 0
# Followed by the time/date data
report_data.extend([time_date.hour, time_date.minute,
time_date.second, time_date.day,
time_date.month, time_date.year - 2000])
report_data[1] = time_date.hour
report_data[2] = time_date.minute,
report_data[3] = time_date.second
report_data[4] = time_date.day,
report_data[5] = time_date.month
report_data[6] = time_date.year - 2000
# Lastly the log interval in 500ms units of time
report_data.extend([log_interval_500ms])
# Zero-extend the array to the length the report should be
report_data.extend([0] * (report_length - len(report_data)))
report_data[7] = log_interval_500ms
# Send the generated report to the device
device.send_output_report(report_data)
device.write(report_data)
def main(time_date, log_interval_500ms):
......@@ -73,11 +72,7 @@ def main(time_date, log_interval_500ms):
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))
print("Connected to device.", flush=True)
configure_temp_log_device(hid_device, time_date, log_interval_500ms)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment