diff options
Diffstat (limited to 'docs/USB_NKRO.txt')
-rw-r--r-- | docs/USB_NKRO.txt | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/docs/USB_NKRO.txt b/docs/USB_NKRO.txt new file mode 100644 index 000000000..d9f1d1229 --- /dev/null +++ b/docs/USB_NKRO.txt | |||
@@ -0,0 +1,160 @@ | |||
1 | USB NKRO MEMO | ||
2 | ============= | ||
3 | 2010/12/09 | ||
4 | |||
5 | |||
6 | References | ||
7 | ---------- | ||
8 | USB - boot mode, NKRO, compatibility, etc... | ||
9 | http://geekhack.org/showthread.php?t=13162 | ||
10 | NKey Rollover - Overview, Testing Methodology, and Results | ||
11 | http://geekhack.org/showwiki.php?title=NKey+Rollover+-+Overview+Testing+Methodology+and+Results | ||
12 | dfj's NKRO(2010/06) | ||
13 | http://geekhack.org/showpost.php?p=191195&postcount=251 | ||
14 | http://geekhack.org/showthread.php?p=204389#post204389 | ||
15 | |||
16 | |||
17 | Terminology | ||
18 | --------- | ||
19 | NKRO | ||
20 | ghost | ||
21 | matrix | ||
22 | mechanical with diodes | ||
23 | membrane | ||
24 | |||
25 | |||
26 | OS Support Status | ||
27 | ----------------- | ||
28 | USB NKRO is possible *without* a custom driver. | ||
29 | At least following OS's supports. | ||
30 | Windows7 64bit | ||
31 | WindowsXP | ||
32 | Windows2000 SP4 | ||
33 | Ubuntu10.4(Linux 2.6) | ||
34 | MacOSX(To be tested) | ||
35 | |||
36 | |||
37 | Custom Driver for USB NKRO | ||
38 | -------------------------- | ||
39 | NOT NEEDED | ||
40 | at least when using following report formats on Windows, Linux or MacOSX. | ||
41 | |||
42 | |||
43 | USB NKRO methods | ||
44 | ---------------- | ||
45 | 1. Virtual keyboards | ||
46 | Keyboard can increase its KRO by using virtual keyboards with Standard or Extended report. | ||
47 | If the keyboard has 2 virtual keyboard with Standard report(6KRO), it gets 12KRO. | ||
48 | Using this method means the keyboard is a composite device. | ||
49 | |||
50 | 2. Extended report | ||
51 | It needs large report size for this method to achieve NKRO. | ||
52 | If a keyboard has 101keys, it needs 103byte report. It seems to be inefficient. | ||
53 | |||
54 | 3. Bitmap report | ||
55 | If the keyboard has less than 128keys, 16byte report will be enough for NKRO. | ||
56 | The 16byte report seems to be reasonable cost to get NKRO. | ||
57 | |||
58 | |||
59 | Report Format | ||
60 | ------------- | ||
61 | Other report formats than followings are possible, though these format are typical one. | ||
62 | |||
63 | 1. Standard 8bytes | ||
64 | modifiers(bitmap) 1byte | ||
65 | reserved 1byte(not used) | ||
66 | keys(array) 1byte*6 | ||
67 | Standard report can send 6keys plus 8modifiers simultaneously. | ||
68 | Standard report is used by most keyboards in the marketplace. | ||
69 | Standard report is identical to boot protocol report. | ||
70 | Standard report is hard to suffer from compatibility problems. | ||
71 | |||
72 | 2. Extended standard 16,32,64bytes | ||
73 | modifiers(bitmap) 1byte | ||
74 | reserved 1byte(not used) | ||
75 | keys(array) 1byte*(14,32,62) | ||
76 | Extended report can send N-keys by using N+2bytes. | ||
77 | Extended report is expected to be compatible with boot protocol. | ||
78 | |||
79 | 3. Bitmap 16,32,64bytes | ||
80 | keys(bitmap) (16,32)bytes | ||
81 | Bitmap report can send at most 128keys by 16bytes and 256keys by 32bytes. | ||
82 | Bitmap report can achieve USB NKRO efficiently in terms of report size. | ||
83 | Bitmap report needs a deliberation for boot protocol implementation. | ||
84 | Bitmap report descriptor sample: | ||
85 | 0x05, 0x01, // Usage Page (Generic Desktop), | ||
86 | 0x09, 0x06, // Usage (Keyboard), | ||
87 | 0xA1, 0x01, // Collection (Application), | ||
88 | // bitmap of modifiers | ||
89 | 0x75, 0x01, // Report Size (1), | ||
90 | 0x95, 0x08, // Report Count (8), | ||
91 | 0x05, 0x07, // Usage Page (Key Codes), | ||
92 | 0x19, 0xE0, // Usage Minimum (224), | ||
93 | 0x29, 0xE7, // Usage Maximum (231), | ||
94 | 0x15, 0x00, // Logical Minimum (0), | ||
95 | 0x25, 0x01, // Logical Maximum (1), | ||
96 | 0x81, 0x02, // Input (Data, Variable, Absolute), ;Modifier byte | ||
97 | // LED output report | ||
98 | 0x95, 0x05, // Report Count (5), | ||
99 | 0x75, 0x01, // Report Size (1), | ||
100 | 0x05, 0x08, // Usage Page (LEDs), | ||
101 | 0x19, 0x01, // Usage Minimum (1), | ||
102 | 0x29, 0x05, // Usage Maximum (5), | ||
103 | 0x91, 0x02, // Output (Data, Variable, Absolute), | ||
104 | 0x95, 0x01, // Report Count (1), | ||
105 | 0x75, 0x03, // Report Size (3), | ||
106 | 0x91, 0x03, // Output (Constant), | ||
107 | // bitmap of keys | ||
108 | 0x95, (REPORT_BYTES-1)*8, // Report Count (), | ||
109 | 0x75, 0x01, // Report Size (1), | ||
110 | 0x15, 0x00, // Logical Minimum (0), | ||
111 | 0x25, 0x01, // Logical Maximum(1), | ||
112 | 0x05, 0x07, // Usage Page (Key Codes), | ||
113 | 0x19, 0x00, // Usage Minimum (0), | ||
114 | 0x29, (REPORT_BYTES-1)*8-1, // Usage Maximum (), | ||
115 | 0x81, 0x02, // Input (Data, Variable, Absolute), | ||
116 | 0xc0 // End Collection | ||
117 | where REPORT_BYTES is a report size in bytes. | ||
118 | |||
119 | |||
120 | Considerations | ||
121 | -------------- | ||
122 | Compatibility | ||
123 | boot protocol | ||
124 | minor/old system | ||
125 | Some BIOS doesn't send SET_PROTOCOL request, a keyboard can't switch to boot protocol mode. | ||
126 | This may cause a problem on a keyboard which uses other report than Standard. | ||
127 | Reactivity | ||
128 | USB polling time | ||
129 | OS/Driver processing time | ||
130 | |||
131 | |||
132 | Windows Problem | ||
133 | --------------- | ||
134 | 1. Windows accepts only 6keys in case of Standard report. | ||
135 | It should be able to send 6keys plus 8modifiers. | ||
136 | 2. Windows accepts only 10keys in case of 16bytes Extended report. | ||
137 | It should be able to send 14keys plus 8modifiers. | ||
138 | 3. Windows accepts only 18keys in case of 32bytes Extended report. | ||
139 | It should be able to send 30keys plus 8modifiers. | ||
140 | If keys are pressed in excess of the number, wrong keys are registered on Windows. | ||
141 | |||
142 | This problem will be reportedly fixed soon.(2010/12/05) | ||
143 | http://forums.anandtech.com/showpost.php?p=30873364&postcount=17 | ||
144 | |||
145 | |||
146 | Tools for testing NKRO | ||
147 | ---------------------- | ||
148 | Browser App: | ||
149 | http://www.microsoft.com/appliedsciences/content/projects/KeyboardGhostingDemo.aspx | ||
150 | http://random.xem.us/rollover.html | ||
151 | |||
152 | Windows: | ||
153 | AquaKeyTest.exe http://geekhack.org/showthread.php?t=6643 | ||
154 | |||
155 | Linux: | ||
156 | xkeycaps | ||
157 | xev | ||
158 | showkeys | ||
159 | |||
160 | EOF | ||