NKRO and 6-Key Rollover on USB Test

User avatar
Muirium
µ

25 Nov 2014, 17:21

Try holding Shift on one keyboard and nkro on another, to spell out "NKRO". I gather Mac and Linux behave as they should, but Windows apparently mushes all connected keyboards together into one logical keyboard, which enables said hatchet job of a dumb man's NKRO…

User avatar
vvp

25 Nov 2014, 19:27

Muirium wrote: Try holding Shift on one keyboard and nkro on another, to spell out "NKRO".
This produces "NKRO" on linux too. So using two low speed (1.5 Mb/s) endpoints (to achieve NKRO) would work for both linux and windows.
As soon as the keyboard uses full speed (12 Mb/s), then there is no need for hacks to have an NKRO keyboard. And as you pointed out, full speed is available on USB 1.1 too.

User avatar
Hypersphere

25 Nov 2014, 21:27

Muirium wrote: No problem in Chrome either. (I usually use Safari.) For what it's worth, I hook my Soarer's straight into a USB port. There's some chance that's your weak link.

What rollover do you get from the XT with your Hagstrom?
My non-converted XT is in storage until I can find the time to do another restoration, complete with Teensy and Soarer's Converter; therefore, I haven't tested rollover yet with a Hagstrom converter.

However, I just now plugged my converted XT directly into my Mac and, voilà! I get NKRO! It works with both, the Mac keyboard viewer or the MS ghosting demo site.

Let this be added to the list of caveats regarding the use of USB Hubs. However, with my setup, I will probably keep hubs in the circuit as a matter of convenience. I need the convenience of my USB hubs far more than I need NKRO. The 6KRO I get with most of my keyboards and even the 5KRO I get with my Cherry mx keyboard is more than enough for my daily needs.

User avatar
Muirium
µ

26 Nov 2014, 21:28

Hubs are such a mystery! Anyway, you've got what you wanted: confirmation of native NKRO, even if it is inconveniently absorbed by the hub. Ack!
vvp wrote:
Muirium wrote: Try holding Shift on one keyboard and nkro on another, to spell out "NKRO".
This produces "NKRO" on linux too. So using two low speed (1.5 Mb/s) endpoints (to achieve NKRO) would work for both linux and windows.
I just hooked up both my NovaTouches (ISO prototype and ANSI final version) to my MacBook Pro to verify this. That's 3 keyboards in all (the Mac's own is internally connected by USB I've heard). The NovaTouches are 6KRO, as is the Mac's. Amusingly, I get 12KRO by typing on two boards simultaneously, just like Noppoo's great realisation! And I suspect I'd get 18KRO if I had 3 hands.

But those mods? All 3 keyboards are treated separately, as I heard. So if I hold Shift on one, and type on either of the others, lowercase characters result. Same for cursor control with all mods. In fact, it even applies to the Caps Lock keys. All 3 keyboards have integrated LEDs to indicate Caps Lock, and only the Caps state of the keyboard a character is typed on has any effect. I have two caps locks engaged right now, and see what I mean? Three logically independent keyboards. The LEDs speak the truth.

User avatar
Hypersphere

26 Nov 2014, 22:10

Muirium wrote: Hubs are such a mystery! Anyway, you've got what you wanted: confirmation of native NKRO, even if it is inconveniently absorbed by the hub. Ack!
vvp wrote:
Muirium wrote: Try holding Shift on one keyboard and nkro on another, to spell out "NKRO".
This produces "NKRO" on linux too. So using two low speed (1.5 Mb/s) endpoints (to achieve NKRO) would work for both linux and windows.
I just hooked up both my NovaTouches (ISO prototype and ANSI final version) to my MacBook Pro to verify this. That's 3 keyboards in all (the Mac's own is internally connected by USB I've heard). The NovaTouches are 6KRO, as is the Mac's. Amusingly, I get 12KRO by typing on two boards simultaneously, just like Noppoo's great realisation! And I suspect I'd get 18KRO if I had 3 hands.

But those mods? All 3 keyboards are treated separately, as I heard. So if I hold Shift on one, and type on either of the others, lowercase characters result. Same for cursor control with all mods. In fact, it even applies to the Caps Lock keys. All 3 keyboards have integrated LEDs to indicate Caps Lock, and only the Caps state of the keyboard a character is typed on has any effect. I have two caps locks engaged right now, and see what I mean? Three logically independent keyboards. The LEDs speak the truth.
Fascinating. At the moment, I have two RF 87u connected to my Mac Pro via USB hubs. I am using Karabiner remapping software. If I activate Caps Lock (via Fn + Tab), the Caps Lock LED lights up on both keyboards (I've remapped Caps Lock as Control; the Caps Lock LED lights up under the lower right Control, which has an LED window). And just as indicated by the Caps Lock LED on both keyboards, when I type on either one, I get CAPS.

However, if I activate the embedded numeric keypad on one keyboard (Fn + Esc), the Num Lock LED lights up only on the keyboard on which I activated Num Lock. And, just as indicated by the LED, I get numeric characters only on the keyboard on which the Num Lock LED is on.

If I use a Shift key on either keyboard, I get CAPS on both keyboards.

And if I mash keys on both keyboards, I get 6KRO on each and 12KRO total.

Findecanor

26 Nov 2014, 22:34

Muirium wrote: I just hooked up both my NovaTouches (ISO prototype and ANSI final version) to my MacBook Pro to verify this.
[...]
All 3 keyboards are treated separately, as I heard.
[...]In fact, it even applies to the Caps Lock keys. All 3 keyboards have integrated LEDs to indicate Caps Lock, and only the Caps state of the keyboard a character is typed on has any effect.
On my Linux box, the Caps Lock state is global but only the keyboard where the key was pressed gets its light updated to indicate the state change.
This is in X, BTW..

User avatar
vvp

27 Nov 2014, 13:27

Findecanor wrote:
Muirium wrote: On my Linux box, the Caps Lock state is global but only the keyboard where the key was pressed gets its light updated to indicate the state change.
This is in X, BTW..
That is interesting. On my linux, the two separate keybords look just like one keyboard. CapsLock, NumLock, and Shifts work like it would be one keyboard. Using them on one keyboard lits the leds on both keyboards and modifiers from one keyboard have influence on both of them.
The only exception is NumLock. It does not lit the led on both keyboards but it influences both of them (i.e. changes the behaviour of the key presses on both keyboards (despite liting led on only one of them)).
This is: Linux 3.17.3-1-ARCH and Xorg 1.16.2-1.

User avatar
Muirium
µ

27 Nov 2014, 13:32

Chaos reigns! Now imagine you are Xwhatsit or Hasu, trying to write something that works inside all this…

User avatar
vvp

27 Nov 2014, 13:42

Well, they can just use USB Full Speed (which works even on USB 1.1) and there is no problem. I guess they do so. No need to use more than one (keyboard) endpoint for one keyboard.

Findecanor

27 Nov 2014, 14:45

You would have to run the 6-KRO protocol on an endpoint to retain compatibility with bad hosts, and it needs to be alone on the endpoint because the report format does not include its report ID.
If you then want NKRO, support for media or power/shutdown keys, scrollwheel or a pointing device etc., then you would need to put those reports on other endpoints.

User avatar
vvp

27 Nov 2014, 15:41

Ok, I do not have much experience with this. 6KRO in LUFA is perfectly enough for me.

But I thought that changes between boot protocol and report protocol happen within one endpoint using set protocol request. I do not understand why a separate report ID would be needed in the report format. The current active protocol can be queried with get protocol request. Is that right?

As for as mouse functionality then (of course) it needs a different endpoint. But as far as I understand it, boot 6KRO and full featured NKRO keyboard do not need a separate endpoint.

Findecanor

27 Nov 2014, 17:46

vvp wrote: But I thought that changes between boot protocol and report protocol happen within one endpoint using set protocol request.
That is what should be sent by all BIOS:es but doesn't.

User avatar
vvp

27 Nov 2014, 20:18

Ok, so it is solved by keyboards with two endpoints of keyboard type. A user then selects with a special keystroke combination which endpoint is silent and which is actually sending keystroke data.

Or more stupid keyboards have only one keyboard endpoint and a hardware switch which selects what kind the endpoint is. Not as flexible but probably good enough.

And "bad hosts" are computers which do not send set protocol request to switch keyboard to bios (6KRO) protocol when entering bios.

Thanks.

User avatar
Muirium
µ

27 Nov 2014, 22:10

Actually, Xwhatsit does it without user intervention. He's described his various techniques as they developed, here on the forum, likely in his Grand Unified Capsense thread. Not a read for the faint hearted! From what I remember, he sends three of them in parallel. One full NKRO, one 6KRO, and another one just with media keys for Windows alone. Some cunning is involved in the process of how they're presented to the host, which I didn't understand well enough to recall. But the end result is exactly what we want: seamless NKRO on all platforms, with a working keyboard in dodgy BIOS too; no user action required.

PM him, I'm sure he'll amuse you with a tale of his lessons at the school of USB HID hard knocks!

User avatar
vvp

28 Nov 2014, 15:38

Thanks. I'll check that thread sometimes later. My interest in more than 6KRO is only theoretic. I do not have any personal use for it.

User avatar
dorkvader

29 Nov 2014, 19:15

Hypersphere wrote:
ماء wrote: i've read to test NKRO press both shift+press letter :P
I've tried this, and I still get a maximum of only 6 non-modifier keys registering.
The soarer can be configured to be set to either "normal" 6KRO (+4 mods) or NKRO mode. Check your config file and change it if you want NKRO.

User avatar
Hypersphere

30 Nov 2014, 01:30

dorkvader wrote:
Hypersphere wrote:
ماء wrote: i've read to test NKRO press both shift+press letter :P
I've tried this, and I still get a maximum of only 6 non-modifier keys registering.
The soarer can be configured to be set to either "normal" 6KRO (+4 mods) or NKRO mode. Check your config file and change it if you want NKRO.
I didn't see an entry in my config file pertaining to NKRO. However, when I connected my XT directly to my computer instead of connecting through a USB hub, I got NKRO instead of 6KRO.

6KRO is more than enough for me. I was pursuing NKRO just out of curiosity.

Arakula

01 Dec 2014, 23:41

dorkvader wrote: The soarer can be configured to be set to either "normal" 6KRO (+4 mods) or NKRO mode. Check your config file and change it if you want NKRO.
Where did you see that?

Post Reply

Return to “Keyboards”