[libhid-discuss] libhid with python: help appreciated
JamesPK
jpearsonkirk at googlemail.com
Fri Sep 9 13:37:28 UTC 2011
Great - thanks for the feedback. Comments online below:
On 09/09/11 03:22, Charles Lepple wrote:
>> Hi,
>>
>> Apologies for what might be a basic libhid question.
>>
>> I'm running Ubuntu, and using libhid via Python to communicate with a
>> HID device (and have used 'lsusb' to glean all the details of the
>> device).
>>
>> I've started out with the example code here:
>> http://anonscm.debian.org/viewvc/libhid/trunk/swig/test_libhid.py .I
>> added the vendor and product ID and the example code itself worked
>> FINE.
>>
>> I then added some code to the example. From the 'snooping' on the
>> communication with the device under Windows it needs a control
>> message with an initialisation string to initialise the device, which
>> I thought would be:
>
> Not to sound too nit-picky, but is it an actual USB control transfer,
> or is it just a message that is being sent to the device?
>
> USB has the notion of Control endpoints (EP0 IN and OUT), and also
> Interrupt endpoints. Not all devices have interrupt endpoints, but if
> you post the output of 'lsusb -v' (run as root, preferably after
> something like libhid has detached the kernel HID driver), we can see
> which endpoints are available.
Good question - I'm not sure if its a control message required??? I
expect it might just be a normal 'write' message (as on double checking
the on the windows output the 'request' filed was set as listed as 'set
report' )
Ok - 'lsusb -v' is at base of post.
>> ret = hid_interrupt_write(hid, 0, INIT_SEQ, 8)
>> if ret != HID_RET_SUCCESS:
>> log_error("hid_set_output_report", ret)
>>
>> But when I added the above spinet to the example and run it I get:
>> (ALL messages fine up to here)
>> ---------------------
>> NOTICE: hid_force_open(): successfully opened USB device 006/002[0].
>> TRACE: hid_reset_parser(): resetting the HID parser for USB device
>> 006/002[0]...
>> TRACE: hid_dump_tree(): iterating the parse tree for USB device
>> 006/002[0]...
>> TRACE: hid_reset_parser(): resetting the HID parser for USB device
>> 006/002[0]...
>> TRACE: hid_interrupt_write(): writing interrupt report to device
>> 006/002[0] ...
>> WARNING: hid_interrupt_write(): failed to perform interrupt write to
>> device 006/002[0]: error submitting URB: No such file or directory
>> ---------------------
>
> Ah, I think I see what's going on: you passed endpoint 0 to
> hid_interrupt_write() - it should be 1 or higher. Again, lsusb output
> will pin this down.
>
Thanks.
James
-----------------------------------------------------------------
jamespk at hal:~/project/driver/hidapi$ sudo lsusb -v -d 0fde:ca01
Bus 006 Device 002: ID 0fde:ca01
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0fde
idProduct 0xca01
bcdDevice 3.02
iManufacturer 0
iProduct 1 Universal Bridge
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 34
Report Descriptor: (length is 34)
Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
(null)
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position
Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x02 ] 2
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position
Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Device Status: 0x0000
(Bus Powered)
--------------------------------------------
More information about the libhid-discuss
mailing list