[libhid-discuss] Re: How to use multiple interfaces?

Charles Lepple clepple at ghz.cc
Tue Mar 13 14:00:29 CET 2007


On Mar 12, 2007, at 6:06 PM, Velu, Muthu wrote:

> Charles,
> Thanks so much for your quick response. I just sent a reply but not  
> sure if the mail went through.

I think the confusion might have been due to the domain - you posted  
last year from wmsgaming.com instead of wms.com. No big deal.

> As you metioned, I got the libhid from SVN trunk and there were  
> only two file chenges ( hid_penings.c & hid_preparations.c).
>
> I am using libusb-0.1.12 version of libusb. Should I update this  
> library too?

I don't think anything relevant has changed in libusb.

Which version of the kernel are you using?

> USB error: could not claim interface 1: No such file or directory
> Check that you have permissions to write to 004/024 and, if you  
> don't, that you set up hotplug (http://linux- 
> hotplug.sourceforge.net/) correctly.

The only function that I can see in the kernel that can return ENOENT  
for claiming an interface is this one:

http://lxr.linux.no/ident?i=claimintf (click the link under "Defined  
as a function").

> USB error: could not claim interface 1: Device or resource busy
> Check that you have permissions to write to 004/024 and, if you  
> don't, that you set up hotplug (http://linux- 
> hotplug.sourceforge.net/) correctly.

Same for EBUSY:

http://lxr.linux.no/ident?i=usb_driver_claim_interface

These error messages look out-of-order - how did you capture stdout  
and stderr?

> USB error: could not claim interface 1: Device or resource busy
> USB error: error sending control message: Connection timed out
>  NOTICE: hid_init(): libhid 0.2.15+20060325.0.0 is being initialized.
>   TRACE: hid_init(): initialising USB subsystem...
>   TRACE: hid_init(): scanning for USB busses...
>   TRACE: hid_init(): scanning for USB devices...
>  NOTICE: hid_init(): successfully initialised HID library.
>   TRACE: hid_new_HIDInterface(): creating a new HIDInterface  
> instance...
>   TRACE: hid_force_open(): forcefully opening a device interface  
> according to matching criteria...
>   TRACE: hid_get_usb_handle(): acquiring handle for a USB device...
>   TRACE: hid_find_usb_device(): enumerating USB busses...
>   TRACE: hid_find_usb_device(): enumerating USB devices on bus 005...
>   TRACE: hid_find_usb_device(): inspecting USB device 005/001[1]...
>   TRACE: hid_compare_usb_device(): comparing match specifications  
> to USB device...
>   TRACE: hid_compare_usb_device(): inspecting vendor ID...
>   TRACE: hid_compare_usb_device(): no match on vendor ID.
>   TRACE: hid_compare_usb_device(): inspecting product ID...
>   TRACE: hid_compare_usb_device(): no match on product ID.
>   TRACE: hid_compare_usb_device(): no custom matching function  
> supplied.
>  NOTICE: hid_find_usb_device(): vendor 0x0000 of USB device 005/001 
> [1] does not match 0x153a.
>   TRACE: hid_find_usb_device(): enumerating USB devices on bus 004...
>   TRACE: hid_find_usb_device(): inspecting USB device 004/024[1]...
>   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: 0x153a.
>   TRACE: hid_compare_usb_device(): inspecting product ID...
>   TRACE: hid_compare_usb_device(): match on product ID: 0x000b.
>   TRACE: hid_compare_usb_device(): no custom matching function  
> supplied.
>  NOTICE: hid_find_usb_device(): found a matching USB device 004/024 
> [1].
>   TRACE: hid_force_open(): claiming USB device 004/024[1].
>   TRACE: hid_os_force_claim(): failed to claim USB device 004/024 
> [1], trying 9 more time(s)...
>   TRACE: hid_os_force_claim(): detaching kernel driver from USB  
> device 004/024[1]...
>   TRACE: hid_os_force_claim(): trying again to claim USB device  
> 004/024[1]...
>  NOTICE: hid_force_open(): successfully claimed USB device 004/024[1].
>   TRACE: hid_init_parser(): initialising the HID parser for USB  
> Device 004/024[1]...
>   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 004/024[1].
>   TRACE: hid_prepare_hid_descriptor(): initialising the HID  
> descriptor for USB device 004/024[1]...
>   TRACE: hid_prepare_hid_descriptor(): retrieving HID descriptor  
> for USB device 004/024[1]...
> WARNING: hid_prepare_hid_descriptor(): failed to get HID descriptor  
> for USB device 004/024[1]
>   TRACE: hid_close(): closing USB device 004/024[1]...
>   TRACE: hid_close(): closing handle of USB device 004/024[1]...
>  NOTICE: hid_close(): successfully closed USB device 004/024[1].
>   TRACE: hid_reset_parser(): resetting the HID parser for USB  
> device 004/024[1]...
>   TRACE: hid_close(): freeing memory allocated for HID parser...
>   TRACE: hid_close(): resetting HIDInterface...
>
>
> dmesg command displays this error
> usb 4-2: control timeout on ep0in
> usbfs: USBDEVFS_CONTROL failed cmd oledbtnpnlsvc dev 24 rqt 129 rq  
> 6 len 9 ret -110

This corresponds to the "USB error: error sending control message:  
Connection timed out" error message above.

> device details (/proc/bus/usb/devices)
> T:  Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 24 Spd=12  MxCh= 0
> D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=32 #Cfgs=  1
> P:  Vendor=153a ProdID=000b Rev= 0.01
> C:* #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=100mA
> I:  If#= 0 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=hid
> E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=10ms
> E:  Ad=01(O) Atr=03(Int.) MxPS=  64 Ivl=10ms
> I:  If#= 1 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=(none)
> E:  Ad=82(I) Atr=03(Int.) MxPS=   4 Ivl=10ms
> E:  Ad=02(O) Atr=03(Int.) MxPS=  64 Ivl=10ms
> I:  If#= 2 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=hid
> E:  Ad=83(I) Atr=03(Int.) MxPS=   4 Ivl=10ms
> E:  Ad=03(O) Atr=03(Int.) MxPS=  64 Ivl=10ms
> I:  If#= 3 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=hid
> E:  Ad=84(I) Atr=03(Int.) MxPS=   4 Ivl=10ms
> E:  Ad=04(O) Atr=03(Int.) MxPS=  64 Ivl=10ms

I don't know. I have successfully connected to one of two HID  
interfaces on a USB KVM (with the other interface still claimed by  
the kernel usbhid.ko driver), so it is definitely possible. You may  
need to add a few more debug statements to isolate exactly what the  
error codes are. Another thing is to "blacklist" this device from the  
kernel HID driver, and see if there are still any problems.

-- 
Charles Lepple





More information about the libhid-discuss mailing list