Tricky USB device.

Maksim Yevmenkin maksim.yevmenkin at savvis.net
Fri Apr 8 10:10:19 PDT 2005


David,

>>> ... I don't know if this is hindering me.  The usbhid* commands 
>>> aren't particularly helpful.  The port udesc_dump seems only to 
>>> work on ugen devices ... and ugen doesn't pop up for this device.
> 
> Maksim> how about getting usb hid descriptor, parsing and dumping it?
> Maksim> check out libusbhid - man usbhid(3). it might be that all
> you Maksim> need to do is to create hid report and send it to the 
> Maksim> device. libusbhid(3) will help you with that.
> 
> Tried that.  The usb_get_report_desc() returns NULL.  This is not a 
> complicated device --- it's not even technically a "human interface" 
> device.

fine, so i presume usbhidctl(1) does not work on the device too. why did 
they made look like usb hid device then?

>>> I suppose I need to know how to supress uhid ... or to make ugen 
>>> show up.  It would also be nice to know how to generically poke
>>> the interupt enpoints...
> 
> Maksim> well comment out 'device uhid' from your kernel config and 
> Maksim> rebuilding the kernel should do the trick.
> 
> I wanted to try to avoid that since I use many USB devices, but it's
> a last resort kind-of-thing.

well, for what i know ugen(4) will only claim the device if no other usb 
device driver claimed it. so if the uhid(4) claimed it than (i assume) 
usb interface class on the device is set to the appropriate value.

> The documentation for the device describes the interface as simply 
> using the two interupt endpoints (read and write).

another way is to hack /sys/dev/usd/uhid.c and specifically ignore (usb 
vendor id, usb product id) for the device in the MATCH routine. 
something like

if (uaa->vendor == XXXX && uaa->product == XXXX)
	return (UMATCH_NONE);


max



More information about the freebsd-hackers mailing list