Subject: Adding an ioctl?
To: None <current-users@netbsd.org>
From: Peter Seebach <seebs@plethora.net>
List: current-users
Date: 08/06/2005 13:37:52
I have a USB HID device with a surreally annoying interface, which essentially
depends on the knowledge that Windows has a fairly short buffer for inbound
messages.
This would be a tailor-made application for the USB_GET_REPORT ioctl, but the
device doesn't support it.
So, I need some way to either:
1. Flush the USB device's input buffer on command.
or
2. Have the driver flush things fairly aggressively automatically.
My current hack is, right before accepting bytes in uhid_intr, to call
ndflush on sc->sc_q, and flush a whole lot of bytes. It works, but it's
clearly ugly and probably wrong for every device out there.
The USB_SET_IMMED ioctl would be great, except it doesn't work on this device
because USB_GET_REPORT doesn't.
One proposal comes to mind; add an automatic ndflush() call to the
USB_SET_IMMED ioctl, which is applied before the check to make sure immediate
mode works. I am pretty sure this would never be wrong for users who really
want immediate mode; after all, once the device is in immediate mode, the
queue is never used, so flushing it is harmless.
Second opinions?
-s