Delete USB_NKRO.txt
This commit is contained in:
parent
d942389e11
commit
7921834663
1 changed files with 0 additions and 160 deletions
|
@ -1,160 +0,0 @@
|
||||||
USB NKRO MEMO
|
|
||||||
=============
|
|
||||||
2010/12/09
|
|
||||||
|
|
||||||
|
|
||||||
References
|
|
||||||
----------
|
|
||||||
USB - boot mode, NKRO, compatibility, etc...
|
|
||||||
http://geekhack.org/showthread.php?t=13162
|
|
||||||
NKey Rollover - Overview, Testing Methodology, and Results
|
|
||||||
http://geekhack.org/showwiki.php?title=NKey+Rollover+-+Overview+Testing+Methodology+and+Results
|
|
||||||
dfj's NKRO(2010/06)
|
|
||||||
http://geekhack.org/showpost.php?p=191195&postcount=251
|
|
||||||
http://geekhack.org/showthread.php?p=204389#post204389
|
|
||||||
|
|
||||||
|
|
||||||
Terminology
|
|
||||||
---------
|
|
||||||
NKRO
|
|
||||||
ghost
|
|
||||||
matrix
|
|
||||||
mechanical with diodes
|
|
||||||
membrane
|
|
||||||
|
|
||||||
|
|
||||||
OS Support Status
|
|
||||||
-----------------
|
|
||||||
USB NKRO is possible *without* a custom driver.
|
|
||||||
At least following OS's supports.
|
|
||||||
Windows7 64bit
|
|
||||||
WindowsXP
|
|
||||||
Windows2000 SP4
|
|
||||||
Ubuntu10.4(Linux 2.6)
|
|
||||||
MacOSX(To be tested)
|
|
||||||
|
|
||||||
|
|
||||||
Custom Driver for USB NKRO
|
|
||||||
--------------------------
|
|
||||||
NOT NEEDED
|
|
||||||
at least when using following report formats on Windows, Linux or MacOSX.
|
|
||||||
|
|
||||||
|
|
||||||
USB NKRO methods
|
|
||||||
----------------
|
|
||||||
1. Virtual keyboards
|
|
||||||
Keyboard can increase its KRO by using virtual keyboards with Standard or Extended report.
|
|
||||||
If the keyboard has 2 virtual keyboard with Standard report(6KRO), it gets 12KRO.
|
|
||||||
Using this method means the keyboard is a composite device.
|
|
||||||
|
|
||||||
2. Extended report
|
|
||||||
It needs large report size for this method to achieve NKRO.
|
|
||||||
If a keyboard has 101keys, it needs 103byte report. It seems to be inefficient.
|
|
||||||
|
|
||||||
3. Bitmap report
|
|
||||||
If the keyboard has less than 128keys, 16byte report will be enough for NKRO.
|
|
||||||
The 16byte report seems to be reasonable cost to get NKRO.
|
|
||||||
|
|
||||||
|
|
||||||
Report Format
|
|
||||||
-------------
|
|
||||||
Other report formats than followings are possible, though these format are typical one.
|
|
||||||
|
|
||||||
1. Standard 8bytes
|
|
||||||
modifiers(bitmap) 1byte
|
|
||||||
reserved 1byte(not used)
|
|
||||||
keys(array) 1byte*6
|
|
||||||
Standard report can send 6keys plus 8modifiers simultaneously.
|
|
||||||
Standard report is used by most keyboards in the marketplace.
|
|
||||||
Standard report is identical to boot protocol report.
|
|
||||||
Standard report is hard to suffer from compatibility problems.
|
|
||||||
|
|
||||||
2. Extended standard 16,32,64bytes
|
|
||||||
modifiers(bitmap) 1byte
|
|
||||||
reserved 1byte(not used)
|
|
||||||
keys(array) 1byte*(14,32,62)
|
|
||||||
Extended report can send N-keys by using N+2bytes.
|
|
||||||
Extended report is expected to be compatible with boot protocol.
|
|
||||||
|
|
||||||
3. Bitmap 16,32,64bytes
|
|
||||||
keys(bitmap) (16,32)bytes
|
|
||||||
Bitmap report can send at most 128keys by 16bytes and 256keys by 32bytes.
|
|
||||||
Bitmap report can achieve USB NKRO efficiently in terms of report size.
|
|
||||||
Bitmap report needs a deliberation for boot protocol implementation.
|
|
||||||
Bitmap report descriptor sample:
|
|
||||||
0x05, 0x01, // Usage Page (Generic Desktop),
|
|
||||||
0x09, 0x06, // Usage (Keyboard),
|
|
||||||
0xA1, 0x01, // Collection (Application),
|
|
||||||
// bitmap of modifiers
|
|
||||||
0x75, 0x01, // Report Size (1),
|
|
||||||
0x95, 0x08, // Report Count (8),
|
|
||||||
0x05, 0x07, // Usage Page (Key Codes),
|
|
||||||
0x19, 0xE0, // Usage Minimum (224),
|
|
||||||
0x29, 0xE7, // Usage Maximum (231),
|
|
||||||
0x15, 0x00, // Logical Minimum (0),
|
|
||||||
0x25, 0x01, // Logical Maximum (1),
|
|
||||||
0x81, 0x02, // Input (Data, Variable, Absolute), ;Modifier byte
|
|
||||||
// LED output report
|
|
||||||
0x95, 0x05, // Report Count (5),
|
|
||||||
0x75, 0x01, // Report Size (1),
|
|
||||||
0x05, 0x08, // Usage Page (LEDs),
|
|
||||||
0x19, 0x01, // Usage Minimum (1),
|
|
||||||
0x29, 0x05, // Usage Maximum (5),
|
|
||||||
0x91, 0x02, // Output (Data, Variable, Absolute),
|
|
||||||
0x95, 0x01, // Report Count (1),
|
|
||||||
0x75, 0x03, // Report Size (3),
|
|
||||||
0x91, 0x03, // Output (Constant),
|
|
||||||
// bitmap of keys
|
|
||||||
0x95, (REPORT_BYTES-1)*8, // Report Count (),
|
|
||||||
0x75, 0x01, // Report Size (1),
|
|
||||||
0x15, 0x00, // Logical Minimum (0),
|
|
||||||
0x25, 0x01, // Logical Maximum(1),
|
|
||||||
0x05, 0x07, // Usage Page (Key Codes),
|
|
||||||
0x19, 0x00, // Usage Minimum (0),
|
|
||||||
0x29, (REPORT_BYTES-1)*8-1, // Usage Maximum (),
|
|
||||||
0x81, 0x02, // Input (Data, Variable, Absolute),
|
|
||||||
0xc0 // End Collection
|
|
||||||
where REPORT_BYTES is a report size in bytes.
|
|
||||||
|
|
||||||
|
|
||||||
Considerations
|
|
||||||
--------------
|
|
||||||
Compatibility
|
|
||||||
boot protocol
|
|
||||||
minor/old system
|
|
||||||
Some BIOS doesn't send SET_PROTOCOL request, a keyboard can't switch to boot protocol mode.
|
|
||||||
This may cause a problem on a keyboard which uses other report than Standard.
|
|
||||||
Reactivity
|
|
||||||
USB polling time
|
|
||||||
OS/Driver processing time
|
|
||||||
|
|
||||||
|
|
||||||
Windows Problem
|
|
||||||
---------------
|
|
||||||
1. Windows accepts only 6keys in case of Standard report.
|
|
||||||
It should be able to send 6keys plus 8modifiers.
|
|
||||||
2. Windows accepts only 10keys in case of 16bytes Extended report.
|
|
||||||
It should be able to send 14keys plus 8modifiers.
|
|
||||||
3. Windows accepts only 18keys in case of 32bytes Extended report.
|
|
||||||
It should be able to send 30keys plus 8modifiers.
|
|
||||||
If keys are pressed in excess of the number, wrong keys are registered on Windows.
|
|
||||||
|
|
||||||
This problem will be reportedly fixed soon.(2010/12/05)
|
|
||||||
http://forums.anandtech.com/showpost.php?p=30873364&postcount=17
|
|
||||||
|
|
||||||
|
|
||||||
Tools for testing NKRO
|
|
||||||
----------------------
|
|
||||||
Browser App:
|
|
||||||
http://www.microsoft.com/appliedsciences/content/projects/KeyboardGhostingDemo.aspx
|
|
||||||
http://random.xem.us/rollover.html
|
|
||||||
|
|
||||||
Windows:
|
|
||||||
AquaKeyTest.exe http://geekhack.org/showthread.php?t=6643
|
|
||||||
|
|
||||||
Linux:
|
|
||||||
xkeycaps
|
|
||||||
xev
|
|
||||||
showkeys
|
|
||||||
|
|
||||||
EOF
|
|
Loading…
Reference in a new issue