5 ms·
"Because USB keyboards don't support arbitrary numbers of keys being pressed at once." There is actually nothing in the USB or HID specifications preventing US
by idbfs 12y ago
"Because USB keyboards don't support arbitrary numbers of keys being pressed at once."
There is actually nothing in the USB or HID specifications preventing USB keyboards from supporting n-key rollover (when using the report protocol -- keyboards using the boot protocol are limited to a 6-key rollover). The reason most don't is simply to reduce cost and complexity. A sufficiently motivated person could build a USB-compliant keyboard that supported an arbitrary number of simultaneoue keypresses, and some do (e.g. http://www.maxkeyboard.com/max-keyboard-nighthawk-x9-red-backlit-mechanical-keyboard.html http://www.maxkeyboard.com/max-keyboard-nighthawk-x9-red-bac...).
- makomk 12y agoApparently there are all kinds of interesting bugs out there in the wild that you run into if you actually build a USB keyboard with full n-key rollover - enough that most manufacturers just emulate two keyboards and call it a day.
- TheLoneWolfling 12y agoUnfortunately, specifications are great, but in actuality you have to take a look at what is implemented as opposed to what is supposed to be implemented. In particular, if you try to go over 6-key rollover, good luck. You end up having to, and I'm not making this up, emulate a USB hub connected to multiple keyboards. It's absurd. And all because of the following: "However, the compatibility version of HID that all present systems implement limits USB keyboards to reporting a mere six regular keys together with four modifiers. Additional keys pressed beyond the limit will generally cause some of the other keys to be dropped." [http://deskthority.net/wiki/Rollover,_blocking_and_ghosting#Interface-limited_NKRO http://deskthority.net/wiki/Rollover,_blocking_and_ghosting#...] "non-working n-key rollover with a USB connection is a side effect of the data packet." [http://geekhack.org/index.php?topic=5572.msg85020#msg85020 http://geekhack.org/index.php?topic=5572.msg85020#msg85020] (Effectively, instead of doing make:key / break:key packets, the compatibility version of HID does current_keys_pressed:[array of 6 keys]. Why they didn't stick with the make/break of the PS/2 protocol is beyond me.)