[libhid-discuss] RE: How to use multiple interfaces?
Velu, Muthu
MVelu at wms.com
Thu Mar 15 17:04:39 CET 2007
Thanks Charles.
As you suggested, I tried to access multiple interfaces without loading
the hiddev drivers and they all seem to be OK now.
Thanks so much. You were very helpful.
Muthu Velu
-----Original Message-----
From: Charles Lepple [mailto:clepple at ghz.cc]
Sent: Tuesday, March 13, 2007 8:00 AM
To: Velu, Muthu
Cc: libhid List
Subject: Re: How to use multiple interfaces?
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