Add new Bulk Vendor device demo application.
[pub/lufa.git] / Demos / Device / LowLevel / BulkVendor / HostTestApp / test_bulk_vendor.py
diff --git a/Demos/Device/LowLevel/BulkVendor/HostTestApp/test_bulk_vendor.py b/Demos/Device/LowLevel/BulkVendor/HostTestApp/test_bulk_vendor.py
new file mode 100644 (file)
index 0000000..8cf29dc
--- /dev/null
@@ -0,0 +1,67 @@
+"""
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+"""
+
+"""
+    LUFA Bulk Vendor device demo host test script. This script will send and
+    receive a continuous stream of packets to/from to the device, to show
+    bidirectional communications.
+
+    Requires the pyUSB library (http://sourceforge.net/projects/pyusb/).
+"""
+
+import sys
+from time import sleep
+import usb.core
+import usb.util
+
+# Bulk Vendor HID device VID and PID
+device_vid = 0x03EB
+device_pid = 0x206C
+device_in_ep  = 3
+device_out_ep = 4
+
+
+def get_vendor_device_handle():
+       dev_handle = usb.core.find(idVendor=device_vid, idProduct=device_pid)
+       return dev_handle
+
+
+def write(device, packet):
+    device.write(usb.util.ENDPOINT_OUT | device_out_ep, packet, 0, 1000)
+    print("Sent Packet: {0}".format(packet))
+
+
+def read(device):
+    packet = device.read(usb.util.ENDPOINT_IN | device_in_ep, 64, 0, 1000)
+    print("Received Packet: {0}".format(''.join([chr(x) for x in packet])))
+    return packet
+
+
+def main():
+    vendor_device = get_vendor_device_handle()
+
+    if vendor_device is None:
+        print("No valid Vendor device found.")
+        sys.exit(1)
+
+    vendor_device.set_configuration()
+
+    print("Connected to device 0x%04X/0x%04X - %s [%s]" %
+          (vendor_device.idVendor, vendor_device.idProduct,
+           usb.util.get_string(vendor_device, 255, vendor_device.iProduct),
+           usb.util.get_string(vendor_device, 255, vendor_device.iManufacturer)))
+
+    x = 0
+    while 1:
+       x = x + 1 % 255
+       write(vendor_device, "TEST PACKET %d" % x)
+       read(vendor_device)
+       sleep(1)
+
+if __name__ == '__main__':
+    main()