parent
d942389e11
commit
7921834663
@ -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 new issue