libusb patch for FreeBSD
This patch to libusb and the kernel makes it possible for the FreeBSD USB
stack to communicate with digital cameras using the "Sierra protocol" (see this page for more
information). This protocol is not used in any new devices manufactured
after 2001. But, if you are like me and own a nice camera (mine is an
Olympus) that was made before that, you might want this hack.
This is not pretty. I do not expect this to ever be part of
an official solution to this problem. The real problem is that the camera
driver is not speaking official USB. It expects a major USB error recovery
operation ("clear endpoint halt") as part of the normal protocol.
I do not support this. I'll ignore your questions on this code. Don't
try it unless you know what you are doing. If you are not sure, then
you do not know what you are doing.
The patches below add an ioctl to the ugen driver, which sets a condition
in the driver that will fire a "clear endpoint stall" operation on the next
read(2) operation, rather than transferring data. This can
be used by libusb to correctly implement the usb_clear_halt() function
patch for libusb-0.1.7
patch for FreeBSD 4.7 kernel (should also work on later
4.X and 5.X kernels)