diff options
Diffstat (limited to 'doc/USB_NKRO.txt')
-rw-r--r-- | doc/USB_NKRO.txt | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/doc/USB_NKRO.txt b/doc/USB_NKRO.txt deleted file mode 100644 index d9f1d12292..0000000000 --- a/doc/USB_NKRO.txt +++ /dev/null @@ -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 |