I have a Happ Fighting UGCI unit connected to my Linux machine.
I'm using PyUSB 1.0 and attempting to interact with the Happ. I
can read the events from the joystick and the buttons all day
long. However, when I attempt to write to the device, on either
of the two endpoints, the write()s timeout.

Any experience or examples using this device? What are the
reasons why a write() will timeout?


My script appears as follows:
-------------------------------------------------------------------

import sys
import usb.core

VENDOR_ID= 0x078b
PRODUCT_ID = 0x0030

print "Looking for Happ device"
device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)

if device is None:
    sys.exit("Could not find Happ device")

print "Checking for active kernel driver"
if device.is_kernel_driver_active(0):
    try:
        print "Detaching kernel driver"
        device.detach_kernel_driver(0)
        device.detach_kernel_driver(1)

    except usb.core.USBError as e:
        sys.exit("Could not detach kernel driver: %s" % str(e))

try:
    print "Setting configuration"
    device.set_configuration()

except usb.core.USBError as e:
    sys.exit("Could not set configuration: %s" % str(e))

configurations = []
interfaces = []
endpoints = []
for configuration in device:
    configurations.append(configuration)
    for interface in configuration:
        interfaces.append(interface)
        for endpoint in interface:
            endpoints.append(endpoint)

print "Configurations:", len(configurations)
print "Interfaces:", len(interfaces)
print "Endpoints:", len(endpoints)

print "Reading data from Happ device, endpoint %d, size %d" % (
    endpoints[0].bEndpointAddress,
    endpoints[0].wMaxPacketSize)

on = True
onSequence = '\x08\x7F\x7F'
offSequence = '\08\x00\x00'

while True:
    try:
        print "Reading"
        data = device.read(
            endpoints[0].bEndpointAddress,
            endpoints[0].wMaxPacketSize,
            timeout = 0) 
    except usb.core.USBError as e:
        if e.args == ('Operation timed out',):
            print "Timed out"

    if len(data) > 0: 
        for i in data:
            print i, ',',
        print ' '

    try:
            if on:
                on = False
                device.write(
                    endpoints[0].bEndpointAddress,
                    onSequence,
                    interfaces[0])
            else:
                on = True
                device.write(
                    endpoints[0].bEndpointAddress,
                    offSequence,
                    interfaces[0]
                    )

    except usb.core.USBError as e:
        print "Failed to light switch"
        print str(e)
            
-- 
Bill
dum ni vivas, ni vivu!

------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to