usb/181425: USB keyboard with full N-key rollover not working

Hans Petter Selasky hps at bitfrost.no
Tue Aug 20 12:00:02 UTC 2013


The following reply was made to PR usb/181425; it has been noted by GNATS.

From: Hans Petter Selasky <hps at bitfrost.no>
To: Andrey Zholos <aaz at q-fu.com>
Cc: freebsd-gnats-submit at FreeBSD.org
Subject: Re: usb/181425: USB keyboard with full N-key rollover not working
Date: Tue, 20 Aug 2013 13:56:13 +0200

 Hi,
 
 Have you looked into the USB HID specification from USB.org regarding 
 this? I think USB keyboard stuff is explicitly defined. You are right 
 that we don't support more than a few simultaneously pressed keys, and 
 that would reguire a bit more changes in ukbd driver.
 
 Instead of applying a quirk, maybe ukbd.c could switch to boot-proto 
 automatically when HIO_VARIABLE is set? It is simply a so-called USB 
 control request.
 
 I'm not sure if it is better to use uhidd or ukbd for the purpose you 
 want to use the keyboard.
 
 Thank you for your investigation!
 
 --HPS
 
 >
 > Ideally I would like to get this keyboard to work in normal protocol
 > with full rollover for perfectionist reasons, but I guess that would
 > require too many changes to ukbd.c and introduce overhead for the
 > majority of keyboards.
 >
 >
 > Patch attached with submission follows:
 >
 > --- sys/dev/usb/input/ukbd.c	(revision 254515)
 > +++ sys/dev/usb/input/ukbd.c	(working copy)
 > @@ -1130,8 +1130,12 @@
 >   	    HID_USAGE2(HUP_KEYBOARD, 0x00),
 >   	    hid_input, 0, &sc->sc_loc_events, &flags,
 >   	    &sc->sc_id_events)) {
 > -		sc->sc_flags |= UKBD_FLAG_EVENTS;
 > -		DPRINTFN(1, "Found keyboard events\n");
 > +		if (flags & HIO_VARIABLE)
 > +			DPRINTFN(1, "Ignoring key bitmap\n");
 > +		else {
 > +			sc->sc_flags |= UKBD_FLAG_EVENTS;
 > +			DPRINTFN(1, "Found keyboard events\n");
 > +		}
 >   	}
 >
 >   	/* figure out leds on keyboard */
 >
 


More information about the freebsd-usb mailing list