Writing to a uhid device?

Brian McGovern bmcgover at cisco.com
Wed Aug 5 21:01:15 UTC 2009


I picked up a Velleman K8055 digital I/O controller that connects to a
PC via a USB port. FreeBSD picks up this device as a uhid, and I can see
the following elements:

bmcgover-pc# usbhidctl -f /dev/uhid2 -r
Report descriptor:
Collection page=Microsoft usage=0x0001
Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0002, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0003, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0004, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0005, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0006, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0007, logical range 0..255
Input   size=8 count=1 page=Microsoft usage=0x0008, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0002, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0003, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0004, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0005, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0006, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0007, logical range 0..255
Output  size=8 count=1 page=Microsoft usage=0x0008, logical range 0..255
End collection
Total   input size 8 bytes
Total  output size 0 bytes
Total feature size 0 bytes


Reading from the device 8 bytes at a time does whats expected - I can
see the digital and analog inputs, the counters, etc, and all is fine.

However, I notice on the above output that the "total output size" is 0,
and writing 8 bytes of information to the device seems to do nothing for
the outputs.

I'm guessing at this point that its an issue somewhere with the driver,
but a quick look at uhid_do_write() looks like its doing something,
although the behavior changes around sc->sc_oid and sc->sc_osize
(possible issue with the 'total output size' being 0, above?).

Does anyone have any thoughts or ideas, or better yet, experience with
such devices, before I spend a couple of days of banging my head against
the wall trying to figure out whats happening "under the hood"? Is there
a special/magic process? Or should I just be able to write the 8 bytes,
1 for each output, as I read the input?

	-B


More information about the freebsd-questions mailing list