[libhid-discuss] Timeout getting HID Descriptor

Charles Lepple clepple at ghz.cc
Tue Aug 25 23:26:04 UTC 2009


On Aug 25, 2009, at 5:46 PM, rbjones999 at comcast.net wrote:

> Hello,
>
> I'm getting a timeout getting the HID Descriptor from a third party  
> device. Here is the lsusb -vvv output:
>
> Bus 005 Device 002: ID 0483:5057 SGS Thomson Microelectronics
[...]
>          Report Descriptor: (length is 34)
>             Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
>                             (null)
>             Item(Local ): Usage, data= [ 0xa5 ] 165
>                             (null)
>             Item(Main  ): Collection, data= [ 0x01 ] 1
>                             Application
>             Item(Local ): Usage, data= [ 0xa6 ] 166
>                             (null)
>             Item(Local ): Usage, data= [ 0xa7 ] 167
>                             (null)
>             Item(Global): Logical Minimum, data= [ 0x80 ] 128
>             Item(Global): Logical Maximum, data= [ 0x7f ] 127
>             Item(Global): Report Size, data= [ 0x08 ] 8
>             Item(Global): Report Count, data= [ 0x3c ] 60
>              Item(Main  ): Input, data= [ 0x02 ] 2
>                             Data Variable Absolute No_Wrap Linear
>                             Preferred_State No_Null_Position  
> Non_Volatile Bitfield
>             Item(Local ): Usage, data= [ 0xa9 ] 169
>                             (null)
>             Item(Global): Logical Minimum, data= [ 0x80 ] 128
>             Item(Global): Logical Maximum, data= [ 0x7f ] 127
>             Item(Global): Report Size, data= [ 0x08 ] 8
>             Item(Global): Report Count, data= [ 0x3c ] 60
>             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
[...]
> can't get debug descriptor: Connection timed out
> cannot read device status, Connection timed out (110)

Despite the timeout messages, lsusb got the HID report descriptor.

> Note the timeouts at the end. And here is the output of the HID test  
> program, modified to match this device:
>
>   TRACE: hid_find_usb_device(): inspecting USB device 005/002[0]...
>   TRACE: hid_compare_usb_device(): comparing match specifications to  
> USB device...
>   TRACE: hid_compare_usb_device(): inspecting vendor ID...
>   TRACE: hid_compare_usb_device(): match on vendor ID: 0x0483.
>   TRACE: hid_compare_usb_device(): inspecting product ID...
>   TRACE: hid_compare_usb_device(): match on product ID: 0x5057.
>   TRACE: hid_compare_usb_device(): no custom matching function  
> supplied.
>  NOTICE: hid_find_usb_device(): found a matching USB device  
> 005/002[0].
>   TRACE: hid_force_open(): claiming USB device 005/002[0].
>  NOTICE: hid_force_open(): successfully claimed USB device 005/002[0].
>   TRACE: hid_init_parser(): initialising the HID parser for USB  
> Device 005/002[0]...
>   TRACE: hid_init_parser(): allocating space for HIDData structure...
>   TRACE: hid_init_parser(): successfully allocated memory for  
> HIDData strcture.
>   TRACE: hid_init_parser(): allocating space for HIDParser  
> structure...
>   TRACE: hid_init_parser(): successfully allocated memory for  
> HIDParser strcture.
>  NOTICE: hid_init_parser(): successfully initialised the HID parser  
> for USB Device 005/002[0].
>   TRACE: hid_prepare_hid_descriptor(): initialising the HID  
> descriptor for USB device 005/002[0]...
>   TRACE: hid_prepare_hid_descriptor(): retrieving HID descriptor for  
> USB device 005/002[0]...
> WARNING: hid_prepare_hid_descriptor(): failed to get HID descriptor  
> for USB device 005/002[0]:error sending control message: Connection  
> timed out
[...]

This is a different timeout.

> Any help is greatly appreciated. This device works on Windows with  
> the vendor's software.

I suspected as much. I believe lsusb is retrieving the HID descriptors  
from the end of the interface or configuration descriptor, but libhid  
is using what should be an equally valid request to fetch /just/ the  
HID descriptor.

Since the device is not behaving according to spec, you may have  
better luck just operating it with the vendor's software, and using  
usbsnoop2libusb[*] to construct a custom libusb-based driver.

[*] http://iki.fi/lindi/darcs/usbsnoop2libusb/usbsnoop2libusb.pl



More information about the libhid-discuss mailing list