blob: 955d579ecf0147bfd6b7e106ecf538c107dbe02b [file] [log] [blame] [view]
Jeff Brown590a9d62011-06-30 12:55:34 -07001<!--
2 Copyright 2011 The Android Open Source Project
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15-->
16
17# Keyboard Devices #
18
19Android supports a variety of keyboard devices including special function
20keypads (volume and power controls), compact embedded QWERTY keyboards,
21and fully featured PC-style external keyboards.
22
23This document decribes physical keyboards only. Refer to the Android SDK
24for information about soft keyboards (Input Method Editors).
25
26## Keyboard Classification ##
27
28An input device is classified as a keyboard if either of the following
29conditions hold:
30
31* The input device reports the presence of any Linux key codes used on keyboards
32 including `0` through `0xff` or `KEY_OK` through `KEY_MAX`.
33
34* The input device reports the presence of any Linux key codes used on joysticks
35 and gamepads including `BTN_0` through `BTN_9`, `BTN_TRIGGER` through `BTN_DEAD`,
36 or `BTN_A` through `BTN_THUMBR`.
37
38Joysticks are currently classified as keyboards because joystick and gamepad buttons
39are reported by `EV_KEY` events in the same way keyboard keys are reported. Thus
40joysticks and gamepads also make use of key map files for configuration.
41Refer to the section on [Joystick Devices](/tech/input/joystick-devices.html) for
42more information.
43
44Once an input device has been classified as a keyboard, the system loads the
45input device configuration file and keyboard layout for the keyboard.
46
47The system then tries to determine additional characteristics of the device.
48
49* If the input device has any keys that are mapped to `KEYCODE_Q`, then the
50 device is considered to have an alphabetic keypad (as opposed to numeric).
51 The alphabetic keypad capability is reported in the resource `Configuration`
52 object as `KEYBOARD_QWERTY`.
53
54* If the input device has any keys that are mapped to `KEYCODE_DPAD_UP`,
55 `KEYCODE_DPAD_DOWN`, `KEYCODE_DPAD_LEFT`, `KEYCODE_DPAD_RIGHT`, and
56 `KEYCODE_DPAD_CENTER` (all must be present), then the device is considered
57 to have a directional keypad.
58 The directional keypad capability is reported in the resource `Configuration`
59 object as `NAVIGATION_DPAD`.
60
61* If the input device has any keys that are mapped to `KEYCODE_BUTTON_A`
62 or other gamepad related keys, then the device is considered to have a gamepad.
63
64## Keyboard Driver Requirements ##
65
661. Keyboard drivers should only register key codes for the keys that they
67 actually support. Registering excess key codes may confuse the device
68 classification algorithm or cause the system to incorrectly detect
69 the supported keyboard capabilities of the device.
70
712. Keyboard drivers should use `EV_KEY` to report key presses, using a value
72 of `0` to indicate that a key is released, a value of `1` to indicate that
73 a key is pressed, and a value greater than or equal to `2` to indicate that
74 the key is being repeated automatically.
75
763. Android performs its own keyboard repeating. Auto-repeat functionality
77 should be disabled in the driver.
78
794. Keyboard drivers may optionally indicate the HID usage or low-level scan
80 code by sending `EV_MSC` with `MSC_SCANCODE` and a valud indicating the usage
81 or scan code when the key is pressed. This information is not currently
82 used by Android.
83
845. Keyboard drivers should support setting LED states when `EV_LED` is written
85 to the device. The `hid-input` driver handles this automatically.
86 At the time of this writing, Android uses `LED_CAPSLOCK`, `LED_SCROLLLOCK`,
87 and `LED_NUMLOCK`. These LEDs only need to be supported when the
88 keyboard actually has the associated indicator lights.
89
906. Keyboard drivers for embedded keypads (for example, using a GPIO matrix)
91 should make sure to send `EV_KEY` events with a value of `0` for any keys that
92 are still pressed when the device is going to sleep. Otherwise keys might
93 get stuck down and will auto-repeat forever.
94
95## Keyboard Operation ##
96
97The following is a brief summary of the keyboard operation on Android.
98
991. The `EventHub` reads raw events from the `evdev` driver and maps Linux key codes
100 (sometimes referred to as scan codes) into Android key codes using the
101 keyboard's key layout map.
102
1032. The `InputReader` consumes the raw events and updates the meta key state.
104 For example, if the left shift key is pressed or released, the reader will
105 set or reset the `META_SHIFT_LEFT_ON` and `META_SHIFT_ON` bits accordingly.
106
1073. The `InputReader` notifies the `InputDispatcher` about the key event.
108
1094. The `InputDispatcher` asks the `WindowManagerPolicy` what to do with the key
110 event by calling `WindowManagerPolicy.interceptKeyBeforeQueueing`. This method
111 is part of a critical path that is responsible for waking the device when
112 certain keys are pressed. The `EventHub` effectively holds a wake lock
113 along this critical path to ensure that it will run to completion.
114
1155. If an `InputFilter` is currently in use, the `InputDispatcher` gives it a
116 chance to consume or transform the key. The `InputFilter` may be used to implement
117 low-level system-wide accessibility policies.
118
1196. The `InputDispatcher` enqueues the key for processing on the dispatch thread.
120
1217. When the `InputDispatcher` dequeues the key, it gives the `WindowManagerPolicy`
122 a second chance to intercept the key event by calling
123 `WindowManagerPolicy.interceptKeyBeforeDispatching`. This method handles system
124 shortcuts and other functions.
125
1268. The `InputDispatcher` then identifies the key event target (the focused window)
127 and waits for them to become ready. Then, the `InputDispatcher` delivers the
128 key event to the application.
129
1309. Inside the application, the key event propagates down the view hierarchy to
131 the focused view for pre-IME key dispatch.
132
13310. If the key event is not handled in the pre-IME dispatch and an IME is in use, the
134 key event is delivered to the IME.
135
13611. If the key event was not consumed by the IME, then the key event propagates
137 down the view hierarchy to the focused view for standard key dispatch.
138
13912. The application reports back to the `InputDispatcher` as to whether the key
140 event was consumed. If the event was not consumed, the `InputDispatcher`
141 calls `WindowManagerPolicy.dispatchUnhandledKey` to apply "fallback" behavior.
142 Depending on the fallback action, the key event dispatch cycle may be restarted
143 using a different key code. For example, if an application does not handle
144 `KEYCODE_ESCAPE`, the system may redispatch the key event as `KEYCODE_BACK` instead.
145
146## Keyboard Configuration ##
147
148Keyboard behavior is determined by the keyboard's key layout, key character
149map and input device configuration.
150
151Refer to the following sections for more details about the files that
152participate in keyboard configuration:
153
154* [Key Layout Files](/tech/input/key-layout-files.html)
155* [Key Character Map Files](/tech/input/key-character-map-files.html)
156* [Input Device Configuration Files](/tech/input/input-device-configuration-files.html)
157
158### Properties ###
159
160The following input device configuration properties are used for keyboards.
161
162#### `keyboard.layout` ####
163
164*Definition:* `keyboard.layout` = &lt;name&gt;
165
166Specifies the name of the key layout file associated with the input device,
167excluding the `.kl` extension. If this file is not found, the input system
168will use the default key layout instead.
169
170Spaces in the name are converted to underscores during lookup.
171
172Refer to the key layout file documentation for more details.
173
174#### `keyboard.characterMap` ####
175
176*Definition:* `keyboard.characterMap` = &lt;name&gt;
177
178Specifies the name of the key character map file associated with the input device,
179excluding the `.kcm` extension. If this file is not found, the input system
180will use the default key character map instead.
181
182Spaces in the name are converted to underscores during lookup.
183
184Refer to the key character map file documentation for more details.
185
186#### `keyboard.orientationAware` ####
187
188*Definition:* `keyboard.orientationAware` = `0` | `1`
189
190Specifies whether the keyboard should react to display orientation changes.
191
192* If the value is `1`, the directional keypad keys are rotated when the
193 associated display orientation changes.
194
195* If the value is `0`, the keyboard is immune to display orientation changes.
196
197The default value is `0`.
198
199Orientation awareness is used to support rotation of directional keypad keys,
200such as on the Motorola Droid. For example, when the device is rotated
201clockwise 90 degrees from its natural orientation, `KEYCODE_DPAD_UP` is
202remapped to produce `KEYCODE_DPAD_RIGHT` since the 'up' key ends up pointing
203'right' when the device is held in that orientation.
204
205#### `keyboard.builtIn` ####
206
207*Definition:* `keyboard.builtIn` = `0` | `1`
208
209Specifies whether the keyboard is the built-in (physically attached)
210keyboard.
211
212The default value is `1` if the device name ends with `-keypad`, `0` otherwise.
213
214The built-in keyboard is always assigned a device id of `0`. Other keyboards
215that are not built-in are assigned unique non-zero device ids.
216
217Using an id of `0` for the built-in keyboard is important for maintaining
218compatibility with the `KeyCharacterMap.BUILT_IN_KEYBOARD` field, which specifies
219the id of the built-in keyboard and has a value of `0`. This field has been
220deprecated in the API but older applications might still be using it.
221
222A special-function keyboard (one whose key character map specifies a
223type of `SPECIAL_FUNCTION`) will never be registered as the built-in keyboard,
224regardless of the setting of this property. This is because a special-function
225keyboard is by definition not intended to be used for general purpose typing.
226
227### Example Configurations ###
228
229 # This is an example input device configuration file for a built-in
230 # keyboard that has a DPad.
231
232 # The keyboard is internal because it is part of the device.
233 device.internal = 1
234
235 # The keyboard is the default built-in keyboard so it should be assigned
236 # an id of 0.
237 keyboard.builtIn = 1
238
239 # The keyboard includes a DPad which is mounted on the device. As the device
240 # is rotated the orientation of the DPad rotates along with it, so the DPad must
241 # be aware of the display orientation. This ensures that pressing 'up' on the
242 # DPad always means 'up' from the perspective of the user, even when the entire
243 # device has been rotated.
244 keyboard.orientationAware = 1
245
246### Compatibility Notes ###
247
248Prior to Honeycomb, the keyboard input mapper did not use any configuration properties.
249All keyboards were assumed to be physically attached and orientation aware. The default
250key layout and key character map was named `qwerty` instead of `Generic`. The key
251character map format was also very different and the framework did not support
252PC-style full keyboards or external keyboards.
253
254When upgrading devices to Honeycomb, make sure to create or update the necessary
255configuration and key map files.
256
257## HID Usages, Linux Key Codes and Android Key Codes ##
258
259The system refers to keys using several different identifiers, depending on the
260layer of abstraction.
261
262For HID devices, each key has an associated HID usage. The Linux `hid-input`
263driver and related vendor and device-specific HID drivers are responsible
264for parsing HID reports and mapping HID usages to Linux key codes.
265
266As Android reads `EV_KEY` events from the Linux kernel, it translates each
267Linux key code into its corresponding Android key code according to the
268key layout file of the device.
269
270When the key event is dispatched to an application, the `android.view.KeyEvent`
271instance reports the Linux key code as the value of `getScanCode()` and the
272Android key code as the value of `getKeyCode()`. For the purposes of the
273framework, only the value of `getKeyCode()` is important.
274
275Note that the HID usage information is not used by Android itself or
276passed to applications.
277
278## Code Tables ##
279
280The following tables show how HID usages, Linux key codes and Android
281key codes are related to one another.
282
283The LKC column specifies the Linux key code in hexadecimal.
284
285The AKC column specifies the Android key code in hexadecimal.
286
287The Notes column refers to notes that are posted after the table.
288
289The Version column specifies the first version of the Android platform
290to have included this key in its default key map. Multiple rows are
291shown in cases where the default key map has changed between versions.
292The oldest version indicated is 1.6.
293
294* In Gingerbread (2.3) and earlier releases, the default key map was
295 `qwerty.kl`. This key map was only intended for use with the Android
296 Emulator and was not intended to be used to support arbitrary
297 external keyboards. Nevertheless, a few OEMs added Bluetooth
298 keyboard support to the platform and relied on `qwerty.kl` to
299 provide the necessary keyboard mappings. Consequently these
300 older mappings may be of interest to OEMs who are building
301 peripherals for these particular devices. Note that the mappings
302 are substantially different from the current ones, particularly
303 with respect to the treatment of the `HOME` key. It is recommended
304 that all new peripherals be developed according to the Honeycomb or more
305 recent key maps (ie. standard HID).
306
307* As of Honeycomb (3.0), the default key map is `Generic.kl`.
308 This key map was designed to support full PC style keyboards.
309 Most functionality of standard HID keyboards should just work out
310 of the box.
311
312The key code mapping may vary across versions of the Linux kernel and Android.
313When changes are known to have occurred in the Android default key maps,
314they are indicated in the version column.
315
316Device-specific HID drivers and key maps may apply different mappings
317than are indicated here.
318
319### HID Keyboard and Keypad Page (0x07) ###
320
321| HID Usage | HID Usage Name | LKC | Linux Key Code Name | Version | AKC | Android Key Code Name | Notes |
322| ----------- | -------------------------------- | ------ | -------------------------------- | ------- | ------ | -------------------------------- | ----- |
323| 0x07 0x0001 | Keyboard Error Roll Over | | | | | | |
324| 0x07 0x0002 | Keyboard POST Fail | | | | | | |
325| 0x07 0x0003 | Keyboard Error Undefined | | | | | | |
326| 0x07 0x0004 | Keyboard a and A | 0x001e | KEY_A | 1.6 | 0x001d | KEYCODE_A | 1 |
327| 0x07 0x0005 | Keyboard b and B | 0x0030 | KEY_B | 1.6 | 0x001e | KEYCODE_B | 1 |
328| 0x07 0x0006 | Keyboard c and C | 0x002e | KEY_C | 1.6 | 0x001f | KEYCODE_C | 1 |
329| 0x07 0x0007 | Keyboard d and D | 0x0020 | KEY_D | 1.6 | 0x0020 | KEYCODE_D | 1 |
330| 0x07 0x0008 | Keyboard e and E | 0x0012 | KEY_E | 1.6 | 0x0021 | KEYCODE_E | 1 |
331| 0x07 0x0009 | Keyboard f and F | 0x0021 | KEY_F | 1.6 | 0x0022 | KEYCODE_F | 1 |
332| 0x07 0x000a | Keyboard g and G | 0x0022 | KEY_G | 1.6 | 0x0023 | KEYCODE_G | 1 |
333| 0x07 0x000b | Keyboard h and H | 0x0023 | KEY_H | 1.6 | 0x0024 | KEYCODE_H | 1 |
334| 0x07 0x000c | Keyboard i and I | 0x0017 | KEY_I | 1.6 | 0x0025 | KEYCODE_I | 1 |
335| 0x07 0x000d | Keyboard j and J | 0x0024 | KEY_J | 1.6 | 0x0026 | KEYCODE_J | 1 |
336| 0x07 0x000e | Keyboard k and K | 0x0025 | KEY_K | 1.6 | 0x0027 | KEYCODE_K | 1 |
337| 0x07 0x000f | Keyboard l and L | 0x0026 | KEY_L | 1.6 | 0x0028 | KEYCODE_L | 1 |
338| 0x07 0x0010 | Keyboard m and M | 0x0032 | KEY_M | 1.6 | 0x0029 | KEYCODE_M | 1 |
339| 0x07 0x0011 | Keyboard n and N | 0x0031 | KEY_N | 1.6 | 0x002a | KEYCODE_N | 1 |
340| 0x07 0x0012 | Keyboard o and O | 0x0018 | KEY_O | 1.6 | 0x002b | KEYCODE_O | 1 |
341| 0x07 0x0013 | Keyboard p and P | 0x0019 | KEY_P | 1.6 | 0x002c | KEYCODE_P | 1 |
342| 0x07 0x0014 | Keyboard q and Q | 0x0010 | KEY_Q | 1.6 | 0x002d | KEYCODE_Q | 1 |
343| 0x07 0x0015 | Keyboard r and R | 0x0013 | KEY_R | 1.6 | 0x002e | KEYCODE_R | 1 |
344| 0x07 0x0016 | Keyboard s and S | 0x001f | KEY_S | 1.6 | 0x002f | KEYCODE_S | 1 |
345| 0x07 0x0017 | Keyboard t and T | 0x0014 | KEY_T | 1.6 | 0x0030 | KEYCODE_T | 1 |
346| 0x07 0x0018 | Keyboard u and U | 0x0016 | KEY_U | 1.6 | 0x0031 | KEYCODE_U | 1 |
347| 0x07 0x0019 | Keyboard v and V | 0x002f | KEY_V | 1.6 | 0x0032 | KEYCODE_V | 1 |
348| 0x07 0x001a | Keyboard w and W | 0x0011 | KEY_W | 1.6 | 0x0033 | KEYCODE_W | 1 |
349| 0x07 0x001b | Keyboard x and X | 0x002d | KEY_X | 1.6 | 0x0034 | KEYCODE_X | 1 |
350| 0x07 0x001c | Keyboard y and Y | 0x0015 | KEY_Y | 1.6 | 0x0035 | KEYCODE_Y | 1 |
351| 0x07 0x001d | Keyboard z and Z | 0x002c | KEY_Z | 1.6 | 0x0036 | KEYCODE_Z | 1 |
352| 0x07 0x001e | Keyboard 1 and ! | 0x0002 | KEY_1 | 1.6 | 0x0008 | KEYCODE_1 | 1 |
353| 0x07 0x001f | Keyboard 2 and @ | 0x0003 | KEY_2 | 1.6 | 0x0009 | KEYCODE_2 | 1 |
354| 0x07 0x0020 | Keyboard 3 and # | 0x0004 | KEY_3 | 1.6 | 0x000a | KEYCODE_3 | 1 |
355| 0x07 0x0021 | Keyboard 4 and $ | 0x0005 | KEY_4 | 1.6 | 0x000b | KEYCODE_4 | 1 |
356| 0x07 0x0022 | Keyboard 5 and % | 0x0006 | KEY_5 | 1.6 | 0x000c | KEYCODE_5 | 1 |
357| 0x07 0x0023 | Keyboard 6 and ^ | 0x0007 | KEY_6 | 1.6 | 0x000d | KEYCODE_6 | 1 |
358| 0x07 0x0024 | Keyboard 7 and & | 0x0008 | KEY_7 | 1.6 | 0x000e | KEYCODE_7 | 1 |
359| 0x07 0x0025 | Keyboard 8 and * | 0x0009 | KEY_8 | 1.6 | 0x000f | KEYCODE_8 | 1 |
360| 0x07 0x0026 | Keyboard 9 and ( | 0x000a | KEY_9 | 1.6 | 0x0010 | KEYCODE_9 | 1 |
361| 0x07 0x0027 | Keyboard 0 and ) | 0x000b | KEY_0 | 1.6 | 0x0007 | KEYCODE_0 | 1 |
362| 0x07 0x0028 | Keyboard Return (ENTER) | 0x001c | KEY_ENTER | 1.6 | 0x0042 | KEYCODE_ENTER | 1 |
363| 0x07 0x0029 | Keyboard ESCAPE | 0x0001 | KEY_ESC | 3.0 | 0x006f | KEYCODE_ESCAPE | |
364| "" | "" | "" | "" | 2.3 | 0x0004 | KEYCODE_BACK | |
365| 0x07 0x002a | Keyboard DELETE (Backspace) | 0x000e | KEY_BACKSPACE | 1.6 | 0x0043 | KEYCODE_DEL | |
366| 0x07 0x002b | Keyboard Tab | 0x000f | KEY_TAB | 1.6 | 0x003d | KEYCODE_TAB | |
367| 0x07 0x002c | Keyboard Spacebar | 0x0039 | KEY_SPACE | 1.6 | 0x003e | KEYCODE_SPACE | |
368| 0x07 0x002d | Keyboard - and _ | 0x000c | KEY_MINUS | 1.6 | 0x0045 | KEYCODE_MINUS | 1 |
369| 0x07 0x002e | Keyboard = and + | 0x000d | KEY_EQUAL | 1.6 | 0x0046 | KEYCODE_EQUALS | 1 |
370| 0x07 0x002f | Keyboard \[ and \{ | 0x001a | KEY_LEFTBRACE | 1.6 | 0x0047 | KEYCODE_LEFT_BRACKET | 1 |
371| 0x07 0x0030 | Keyboard \] and \} | 0x001b | KEY_RIGHTBRACE | 1.6 | 0x0048 | KEYCODE_RIGHT_BRACKET | 1 |
372| 0x07 0x0031 | Keyboard \\ and &#124; | 0x002b | KEY_BACKSLASH | 1.6 | 0x0049 | KEYCODE_BACKSLASH | 1 |
373| 0x07 0x0032 | Keyboard Non-US # and ~ | 0x002b | KEY_BACKSLASH | 1.6 | 0x0049 | KEYCODE_BACKSLASH | 1 |
374| 0x07 0x0033 | Keyboard ; and : | 0x0027 | KEY_SEMICOLON | 1.6 | 0x004a | KEYCODE_SEMICOLON | 1 |
375| 0x07 0x0034 | Keyboard ' and " | 0x0028 | KEY_APOSTROPHE | 1.6 | 0x004b | KEYCODE_APOSTROPHE | 1 |
376| 0x07 0x0035 | Keyboard \` and ~ | 0x0029 | KEY_GRAVE | 3.0 | 0x0044 | KEYCODE_GRAVE | 1 |
377| 0x07 0x0036 | Keyboard , and < | 0x0033 | KEY_COMMA | 1.6 | 0x0037 | KEYCODE_COMMA | 1 |
378| 0x07 0x0037 | Keyboard . and > | 0x0034 | KEY_DOT | 1.6 | 0x0038 | KEYCODE_PERIOD | 1 |
379| 0x07 0x0038 | Keyboard / and ? | 0x0035 | KEY_SLASH | 1.6 | 0x004c | KEYCODE_SLASH | 1 |
380| 0x07 0x0039 | Keyboard Caps Lock | 0x003a | KEY_CAPSLOCK | 3.0 | 0x0073 | KEYCODE_CAPS_LOCK | |
381| 0x07 0x003a | Keyboard F1 | 0x003b | KEY_F1 | 3.0 | 0x0083 | KEYCODE_F1 | |
382| "" | "" | "" | "" | 1.6 | 0x0052 | KEYCODE_MENU | |
383| 0x07 0x003b | Keyboard F2 | 0x003c | KEY_F2 | 3.0 | 0x0084 | KEYCODE_F2 | |
384| "" | "" | "" | "" | 1.6 | 0x0002 | KEYCODE_SOFT_RIGHT | |
385| 0x07 0x003c | Keyboard F3 | 0x003d | KEY_F3 | 3.0 | 0x0085 | KEYCODE_F3 | |
386| "" | "" | "" | "" | 1.6 | 0x0005 | KEYCODE_CALL | |
387| 0x07 0x003d | Keyboard F4 | 0x003e | KEY_F4 | 3.0 | 0x0086 | KEYCODE_F4 | |
388| "" | "" | "" | "" | 1.6 | 0x0006 | KEYCODE_ENDCALL | |
389| 0x07 0x003e | Keyboard F5 | 0x003f | KEY_F5 | 3.0 | 0x0087 | KEYCODE_F5 | |
390| 0x07 0x003f | Keyboard F6 | 0x0040 | KEY_F6 | 3.0 | 0x0088 | KEYCODE_F6 | |
391| 0x07 0x0040 | Keyboard F7 | 0x0041 | KEY_F7 | 3.0 | 0x0089 | KEYCODE_F7 | |
392| 0x07 0x0041 | Keyboard F8 | 0x0042 | KEY_F8 | 3.0 | 0x008a | KEYCODE_F8 | |
393| 0x07 0x0042 | Keyboard F9 | 0x0043 | KEY_F9 | 3.0 | 0x008b | KEYCODE_F9 | |
394| 0x07 0x0043 | Keyboard F10 | 0x0044 | KEY_F10 | 3.0 | 0x008c | KEYCODE_F10 | |
395| "" | "" | "" | "" | 2.3 | 0x0052 | KEYCODE_MENU | |
396| 0x07 0x0044 | Keyboard F11 | 0x0057 | KEY_F11 | 3.0 | 0x008d | KEYCODE_F11 | |
397| 0x07 0x0045 | Keyboard F12 | 0x0058 | KEY_F12 | 3.0 | 0x008e | KEYCODE_F12 | |
398| 0x07 0x0046 | Keyboard Print Screen | 0x0063 | KEY_SYSRQ | 3.0 | 0x0078 | KEYCODE_SYSRQ | |
399| 0x07 0x0047 | Keyboard Scroll Lock | 0x0046 | KEY_SCROLLLOCK | 3.0 | 0x0074 | KEYCODE_SCROLL_LOCK | |
400| 0x07 0x0048 | Keyboard Pause | 0x0077 | KEY_PAUSE | 3.0 | 0x0079 | KEYCODE_BREAK | |
401| 0x07 0x0049 | Keyboard Insert | 0x006e | KEY_INSERT | 3.0 | 0x007c | KEYCODE_INSERT | |
402| 0x07 0x004a | Keyboard Home | 0x0066 | KEY_HOME | 3.0 | 0x007a | KEYCODE_MOVE_HOME | |
403| "" | "" | "" | "" | 1.6 | 0x0003 | KEYCODE_HOME | |
404| 0x07 0x004b | Keyboard Page Up | 0x0068 | KEY_PAGEUP | 3.0 | 0x005c | KEYCODE_PAGE_UP | |
405| 0x07 0x004c | Keyboard Delete Forward | 0x006f | KEY_DELETE | 3.0 | 0x0070 | KEYCODE_FORWARD_DEL | |
406| 0x07 0x004d | Keyboard End | 0x006b | KEY_END | 3.0 | 0x007b | KEYCODE_MOVE_END | |
407| "" | "" | "" | "" | 1.6 | 0x0006 | KEYCODE_ENDCALL | |
408| 0x07 0x004e | Keyboard Page Down | 0x006d | KEY_PAGEDOWN | 3.0 | 0x005d | KEYCODE_PAGE_DOWN | |
409| 0x07 0x004f | Keyboard Right Arrow | 0x006a | KEY_RIGHT | 1.6 | 0x0016 | KEYCODE_DPAD_RIGHT | |
410| 0x07 0x0050 | Keyboard Left Arrow | 0x0069 | KEY_LEFT | 1.6 | 0x0015 | KEYCODE_DPAD_LEFT | |
411| 0x07 0x0051 | Keyboard Down Arrow | 0x006c | KEY_DOWN | 1.6 | 0x0014 | KEYCODE_DPAD_DOWN | |
412| 0x07 0x0052 | Keyboard Up Arrow | 0x0067 | KEY_UP | 1.6 | 0x0013 | KEYCODE_DPAD_UP | |
413| 0x07 0x0053 | Keyboard Num Lock and Clear | 0x0045 | KEY_NUMLOCK | 3.0 | 0x008f | KEYCODE_NUM_LOCK | |
414| 0x07 0x0054 | Keypad / | 0x0062 | KEY_KPSLASH | 3.0 | 0x009a | KEYCODE_NUMPAD_DIVIDE | |
415| 0x07 0x0055 | Keypad * | 0x0037 | KEY_KPASTERISK | 3.0 | 0x009b | KEYCODE_NUMPAD_MULTIPLY | |
416| 0x07 0x0056 | Keypad - | 0x004a | KEY_KPMINUS | 3.0 | 0x009c | KEYCODE_NUMPAD_SUBTRACT | |
417| 0x07 0x0057 | Keypad + | 0x004e | KEY_KPPLUS | 3.0 | 0x009d | KEYCODE_NUMPAD_ADD | |
418| 0x07 0x0058 | Keypad ENTER | 0x0060 | KEY_KPENTER | 3.0 | 0x00a0 | KEYCODE_NUMPAD_ENTER | |
419| 0x07 0x0059 | Keypad 1 and End | 0x004f | KEY_KP1 | 3.0 | 0x0091 | KEYCODE_NUMPAD_1 | |
420| 0x07 0x005a | Keypad 2 and Down Arrow | 0x0050 | KEY_KP2 | 3.0 | 0x0092 | KEYCODE_NUMPAD_2 | |
421| 0x07 0x005b | Keypad 3 and PageDn | 0x0051 | KEY_KP3 | 3.0 | 0x0093 | KEYCODE_NUMPAD_3 | |
422| 0x07 0x005c | Keypad 4 and Left Arrow | 0x004b | KEY_KP4 | 3.0 | 0x0094 | KEYCODE_NUMPAD_4 | |
423| 0x07 0x005d | Keypad 5 | 0x004c | KEY_KP5 | 3.0 | 0x0095 | KEYCODE_NUMPAD_5 | |
424| 0x07 0x005e | Keypad 6 and Right Arrow | 0x004d | KEY_KP6 | 3.0 | 0x0096 | KEYCODE_NUMPAD_6 | |
425| 0x07 0x005f | Keypad 7 and Home | 0x0047 | KEY_KP7 | 3.0 | 0x0097 | KEYCODE_NUMPAD_7 | |
426| 0x07 0x0060 | Keypad 8 and Up Arrow | 0x0048 | KEY_KP8 | 3.0 | 0x0098 | KEYCODE_NUMPAD_8 | |
427| 0x07 0x0061 | Keypad 9 and Page Up | 0x0049 | KEY_KP9 | 3.0 | 0x0099 | KEYCODE_NUMPAD_9 | |
428| 0x07 0x0062 | Keypad 0 and Insert | 0x0052 | KEY_KP0 | 3.0 | 0x0090 | KEYCODE_NUMPAD_0 | |
429| 0x07 0x0063 | Keypad . and Delete | 0x0053 | KEY_KPDOT | 3.0 | 0x009e | KEYCODE_NUMPAD_DOT | |
430| 0x07 0x0064 | Keyboard Non-US \\ and &#124; | 0x0056 | KEY_102ND | 4.0 | 0x0049 | KEYCODE_BACKSLASH | 1 |
431| 0x07 0x0065 | Keyboard Application | 0x007f | KEY_COMPOSE | 3.0 | 0x0052 | KEYCODE_MENU | |
432| "" | "" | "" | "" | 1.6 | 0x0054 | KEYCODE_SEARCH | |
433| 0x07 0x0066 | Keyboard Power | 0x0074 | KEY_POWER | 1.6 | 0x001a | KEYCODE_POWER | |
434| 0x07 0x0067 | Keypad = | 0x0075 | KEY_KPEQUAL | 3.0 | 0x00a1 | KEYCODE_NUMPAD_EQUALS | |
435| 0x07 0x0068 | Keyboard F13 | 0x00b7 | KEY_F13 | | | | |
436| 0x07 0x0069 | Keyboard F14 | 0x00b8 | KEY_F14 | | | | |
437| 0x07 0x006a | Keyboard F15 | 0x00b9 | KEY_F15 | | | | |
438| 0x07 0x006b | Keyboard F16 | 0x00ba | KEY_F16 | | | | |
439| 0x07 0x006c | Keyboard F17 | 0x00bb | KEY_F17 | | | | |
440| 0x07 0x006d | Keyboard F18 | 0x00bc | KEY_F18 | | | | |
441| 0x07 0x006e | Keyboard F19 | 0x00bd | KEY_F19 | | | | |
442| 0x07 0x006f | Keyboard F20 | 0x00be | KEY_F20 | | | | |
443| 0x07 0x0070 | Keyboard F21 | 0x00bf | KEY_F21 | | | | |
444| 0x07 0x0071 | Keyboard F22 | 0x00c0 | KEY_F22 | | | | |
445| 0x07 0x0072 | Keyboard F23 | 0x00c1 | KEY_F23 | | | | |
446| 0x07 0x0073 | Keyboard F24 | 0x00c2 | KEY_F24 | | | | |
447| 0x07 0x0074 | Keyboard Execute | 0x0086 | KEY_OPEN | | | | |
448| 0x07 0x0075 | Keyboard Help | 0x008a | KEY_HELP | | | | |
449| 0x07 0x0076 | Keyboard Menu | 0x0082 | KEY_PROPS | | | | |
450| 0x07 0x0077 | Keyboard Select | 0x0084 | KEY_FRONT | | | | |
451| 0x07 0x0078 | Keyboard Stop | 0x0080 | KEY_STOP | 3.0 | 0x0056 | KEYCODE_MEDIA_STOP | |
452| 0x07 0x0079 | Keyboard Again | 0x0081 | KEY_AGAIN | | | | |
453| 0x07 0x007a | Keyboard Undo | 0x0083 | KEY_UNDO | | | | |
454| 0x07 0x007b | Keyboard Cut | 0x0089 | KEY_CUT | | | | |
455| 0x07 0x007c | Keyboard Copy | 0x0085 | KEY_COPY | | | | |
456| 0x07 0x007d | Keyboard Paste | 0x0087 | KEY_PASTE | | | | |
457| 0x07 0x007e | Keyboard Find | 0x0088 | KEY_FIND | | | | |
458| 0x07 0x007f | Keyboard Mute | 0x0071 | KEY_MUTE | 3.0 | 0x00a4 | KEYCODE_VOLUME_MUTE | |
459| 0x07 0x0080 | Keyboard Volume Up | 0x0073 | KEY_VOLUMEUP | 1.6 | 0x0018 | KEYCODE_VOLUME_UP | |
460| 0x07 0x0081 | Keyboard Volume Down | 0x0072 | KEY_VOLUMEDOWN | 1.6 | 0x0019 | KEYCODE_VOLUME_DOWN | |
461| 0x07 0x0082 | Keyboard Locking Caps Lock | | | | | | |
462| 0x07 0x0083 | Keyboard Locking Num Lock | | | | | | |
463| 0x07 0x0084 | Keyboard Locking Scroll Lock | | | | | | |
464| 0x07 0x0085 | Keypad Comma | 0x0079 | KEY_KPCOMMA | 3.0 | 0x009f | KEYCODE_NUMPAD_COMMA | |
465| 0x07 0x0086 | Keypad Equal Sign | | | | | | |
466| 0x07 0x0087 | Keyboard International1 | 0x0059 | KEY_RO | | | | |
467| 0x07 0x0088 | Keyboard International2 | 0x005d | KEY_KATAKANAHIRAGANA | | | | |
468| 0x07 0x0089 | Keyboard International3 | 0x007c | KEY_YEN | | | | |
469| 0x07 0x008a | Keyboard International4 | 0x005c | KEY_HENKAN | | | | |
470| 0x07 0x008b | Keyboard International5 | 0x005e | KEY_MUHENKAN | | | | |
471| 0x07 0x008c | Keyboard International6 | 0x005f | KEY_KPJPCOMMA | | | | |
472| 0x07 0x008d | Keyboard International7 | | | | | | |
473| 0x07 0x008e | Keyboard International8 | | | | | | |
474| 0x07 0x008f | Keyboard International9 | | | | | | |
475| 0x07 0x0090 | Keyboard LANG1 | 0x007a | KEY_HANGEUL | | | | |
476| 0x07 0x0091 | Keyboard LANG2 | 0x007b | KEY_HANJA | | | | |
477| 0x07 0x0092 | Keyboard LANG3 | 0x005a | KEY_KATAKANA | | | | |
478| 0x07 0x0093 | Keyboard LANG4 | 0x005b | KEY_HIRAGANA | | | | |
479| 0x07 0x0094 | Keyboard LANG5 | 0x0055 | KEY_ZENKAKUHANKAKU | | | | |
480| 0x07 0x0095 | Keyboard LANG6 | | | | | | |
481| 0x07 0x0096 | Keyboard LANG7 | | | | | | |
482| 0x07 0x0097 | Keyboard LANG8 | | | | | | |
483| 0x07 0x0098 | Keyboard LANG9 | | | | | | |
484| 0x07 0x0099 | Keyboard Alternate Erase | | | | | | |
485| 0x07 0x009a | Keyboard SysReq/Attention | | | | | | |
486| 0x07 0x009b | Keyboard Cancel | | | | | | |
487| 0x07 0x009c | Keyboard Clear | | | | | | |
488| 0x07 0x009d | Keyboard Prior | | | | | | |
489| 0x07 0x009e | Keyboard Return | | | | | | |
490| 0x07 0x009f | Keyboard Separator | | | | | | |
491| 0x07 0x00a0 | Keyboard Out | | | | | | |
492| 0x07 0x00a1 | Keyboard Oper | | | | | | |
493| 0x07 0x00a2 | Keyboard Clear/Again | | | | | | |
494| 0x07 0x00a3 | Keyboard CrSel/Props | | | | | | |
495| 0x07 0x00a4 | Keyboard ExSel | | | | | | |
496| 0x07 0x00b0 | Keypad 00 | | | | | | |
497| 0x07 0x00b1 | Keypad 000 | | | | | | |
498| 0x07 0x00b2 | Thousands Separator | | | | | | |
499| 0x07 0x00b3 | Decimal Separator | | | | | | |
500| 0x07 0x00b4 | Currency Unit | | | | | | |
501| 0x07 0x00b5 | Currency Sub-unit | | | | | | |
502| 0x07 0x00b6 | Keypad ( | 0x00b3 | KEY_KPLEFTPAREN | 3.0 | 0x00a2 | KEYCODE_NUMPAD_LEFT_PAREN | |
503| 0x07 0x00b7 | Keypad ) | 0x00b4 | KEY_KPRIGHTPAREN | 3.0 | 0x00a3 | KEYCODE_NUMPAD_RIGHT_PAREN | |
504| 0x07 0x00b8 | Keypad \{ | | | | | | |
505| 0x07 0x00b9 | Keypad \} | | | | | | |
506| 0x07 0x00ba | Keypad Tab | | | | | | |
507| 0x07 0x00bb | Keypad Backspace | | | | | | |
508| 0x07 0x00bc | Keypad A | | | | | | |
509| 0x07 0x00bd | Keypad B | | | | | | |
510| 0x07 0x00be | Keypad C | | | | | | |
511| 0x07 0x00bf | Keypad D | | | | | | |
512| 0x07 0x00c0 | Keypad E | | | | | | |
513| 0x07 0x00c1 | Keypad F | | | | | | |
514| 0x07 0x00c2 | Keypad XOR | | | | | | |
515| 0x07 0x00c3 | Keypad ^ | | | | | | |
516| 0x07 0x00c4 | Keypad % | | | | | | |
517| 0x07 0x00c5 | Keypad < | | | | | | |
518| 0x07 0x00c6 | Keypad > | | | | | | |
519| 0x07 0x00c7 | Keypad & | | | | | | |
520| 0x07 0x00c8 | Keypad && | | | | | | |
521| 0x07 0x00c9 | Keypad &#124; | | | | | | |
522| 0x07 0x00ca | Keypad &#124;&#124; | | | | | | |
523| 0x07 0x00cb | Keypad : | | | | | | |
524| 0x07 0x00cc | Keypad # | | | | | | |
525| 0x07 0x00cd | Keypad Space | | | | | | |
526| 0x07 0x00ce | Keypad @ | | | | | | |
527| 0x07 0x00cf | Keypad ! | | | | | | |
528| 0x07 0x00d0 | Keypad Memory Store | | | | | | |
529| 0x07 0x00d1 | Keypad Memory Recall | | | | | | |
530| 0x07 0x00d2 | Keypad Memory Clear | | | | | | |
531| 0x07 0x00d3 | Keypad Memory Add | | | | | | |
532| 0x07 0x00d4 | Keypad Memory Subtract | | | | | | |
533| 0x07 0x00d5 | Keypad Memory Multiply | | | | | | |
534| 0x07 0x00d6 | Keypad Memory Divide | | | | | | |
535| 0x07 0x00d7 | Keypad +/- | | | | | | |
536| 0x07 0x00d8 | Keypad Clear | | | | | | |
537| 0x07 0x00d9 | Keypad Clear Entry | | | | | | |
538| 0x07 0x00da | Keypad Binary | | | | | | |
539| 0x07 0x00db | Keypad Octal | | | | | | |
540| 0x07 0x00dc | Keypad Decimal | | | | | | |
541| 0x07 0x00dd | Keypad Hexadecimal | | | | | | |
542| 0x07 0x00e0 | Keyboard Left Control | 0x001d | KEY_LEFTCTRL | 3.0 | 0x0071 | KEYCODE_CTRL_LEFT | |
543| 0x07 0x00e1 | Keyboard Left Shift | 0x002a | KEY_LEFTSHIFT | 1.6 | 0x003b | KEYCODE_SHIFT_LEFT | |
544| 0x07 0x00e2 | Keyboard Left Alt | 0x0038 | KEY_LEFTALT | 1.6 | 0x0039 | KEYCODE_ALT_LEFT | |
545| 0x07 0x00e3 | Keyboard Left GUI | 0x007d | KEY_LEFTMETA | 3.0 | 0x0075 | KEYCODE_META_LEFT | |
546| 0x07 0x00e4 | Keyboard Right Control | 0x0061 | KEY_RIGHTCTRL | 3.0 | 0x0072 | KEYCODE_CTRL_RIGHT | |
547| 0x07 0x00e5 | Keyboard Right Shift | 0x0036 | KEY_RIGHTSHIFT | 1.6 | 0x003c | KEYCODE_SHIFT_RIGHT | |
548| 0x07 0x00e6 | Keyboard Right Alt | 0x0064 | KEY_RIGHTALT | 1.6 | 0x003a | KEYCODE_ALT_RIGHT | |
549| 0x07 0x00e7 | Keyboard Right GUI | 0x007e | KEY_RIGHTMETA | 3.0 | 0x0076 | KEYCODE_META_RIGHT | |
550| 0x07 0x00e8 | | 0x00a4 | KEY_PLAYPAUSE | 3.0 | 0x0055 | KEYCODE_MEDIA_PLAY_PAUSE | |
551| 0x07 0x00e9 | | 0x00a6 | KEY_STOPCD | 3.0 | 0x0056 | KEYCODE_MEDIA_STOP | |
552| 0x07 0x00ea | | 0x00a5 | KEY_PREVIOUSSONG | 3.0 | 0x0058 | KEYCODE_MEDIA_PREVIOUS | |
553| 0x07 0x00eb | | 0x00a3 | KEY_NEXTSONG | 3.0 | 0x0057 | KEYCODE_MEDIA_NEXT | |
554| 0x07 0x00ec | | 0x00a1 | KEY_EJECTCD | 3.0 | 0x0081 | KEYCODE_MEDIA_EJECT | |
555| 0x07 0x00ed | | 0x0073 | KEY_VOLUMEUP | 1.6 | 0x0018 | KEYCODE_VOLUME_UP | |
556| 0x07 0x00ee | | 0x0072 | KEY_VOLUMEDOWN | 1.6 | 0x0019 | KEYCODE_VOLUME_DOWN | |
557| 0x07 0x00ef | | 0x0071 | KEY_MUTE | 3.0 | 0x00a4 | KEYCODE_VOLUME_MUTE | |
558| 0x07 0x00f0 | | 0x0096 | KEY_WWW | 1.6 | 0x0040 | KEYCODE_EXPLORER | |
559| 0x07 0x00f1 | | 0x009e | KEY_BACK | 1.6 | 0x0004 | KEYCODE_BACK | |
560| 0x07 0x00f2 | | 0x009f | KEY_FORWARD | 3.0 | 0x007d | KEYCODE_FORWARD | |
561| 0x07 0x00f3 | | 0x0080 | KEY_STOP | 3.0 | 0x0056 | KEYCODE_MEDIA_STOP | |
562| 0x07 0x00f4 | | 0x0088 | KEY_FIND | | | | |
563| 0x07 0x00f5 | | 0x00b1 | KEY_SCROLLUP | 3.0 | 0x005c | KEYCODE_PAGE_UP | |
564| 0x07 0x00f6 | | 0x00b2 | KEY_SCROLLDOWN | 3.0 | 0x005d | KEYCODE_PAGE_DOWN | |
565| 0x07 0x00f7 | | 0x00b0 | KEY_EDIT | | | | |
566| 0x07 0x00f8 | | 0x008e | KEY_SLEEP | | | | |
567| 0x07 0x00f9 | | 0x0098 | KEY_COFFEE | 4.0 | 0x001a | KEYCODE_POWER | |
568| 0x07 0x00fa | | 0x00ad | KEY_REFRESH | | | | |
Jeff Brown543b03f2011-11-28 18:23:46 -0800569| 0x07 0x00fb | | 0x008c | KEY_CALC | 4.0.3 | 0x00d2 | KEYCODE_CALCULATOR | |
Jeff Brown590a9d62011-06-30 12:55:34 -0700570
571### HID Generic Desktop Page (0x01) ###
572
573| HID Usage | HID Usage Name | LKC | Linux Key Code Name | Version | AKC | Android Key Code Name | Notes |
574| ----------- | -------------------------------- | ------ | -------------------------------- | ------- | ------ | -------------------------------- | ----- |
575| 0x01 0x0081 | System Power Down | 0x0074 | KEY_POWER | 1.6 | 0x001a | KEYCODE_POWER | |
576| 0x01 0x0082 | System Sleep | 0x008e | KEY_SLEEP | 4.0 | 0x001a | KEYCODE_POWER | |
577| 0x01 0x0083 | System Wake Up | 0x008f | KEY_WAKEUP | 4.0 | 0x001a | KEYCODE_POWER | |
578| 0x01 0x0084 | System Context Menu | | | | | | |
579| 0x01 0x0085 | System Main Menu | | | | | | |
580| 0x01 0x0086 | System App Menu | | | | | | |
581| 0x01 0x0087 | System Menu Help | | | | | | |
582| 0x01 0x0088 | System Menu Exit | | | | | | |
583| 0x01 0x0089 | System Menu Select | | | | | | |
584| 0x01 0x008a | System Menu Right | | | | | | |
585| 0x01 0x008b | System Menu Left | | | | | | |
586| 0x01 0x008c | System Menu Up | | | | | | |
587| 0x01 0x008d | System Menu Down | | | | | | |
588| 0x01 0x008e | System Cold Restart | | | | | | |
589| 0x01 0x008f | System Warm Restart | | | | | | |
590| 0x01 0x00a0 | System Dock | | | | | | |
591| 0x01 0x00a1 | System Undock | | | | | | |
592| 0x01 0x00a2 | System Setup | | | | | | |
593| 0x01 0x00a3 | System Break | | | | | | |
594| 0x01 0x00a4 | System Debugger Break | | | | | | |
595| 0x01 0x00a5 | Application Break | | | | | | |
596| 0x01 0x00a6 | Application Debugger Break | | | | | | |
597| 0x01 0x00a7 | System Speaker Mute | | | | | | |
598| 0x01 0x00a8 | System Hibernate | | | | | | |
599| 0x01 0x00b0 | System Display Invert | | | | | | |
600| 0x01 0x00b1 | System Display Internal | | | | | | |
601| 0x01 0x00b2 | System Display External | | | | | | |
602| 0x01 0x00b3 | System Display Both | | | | | | |
603| 0x01 0x00b4 | System Display Dual | | | | | | |
604| 0x01 0x00b5 | System Display Toggle Int/Ext | | | | | | |
605| 0x01 0x00b6 | System Display Swap Prim./Sec. | | | | | | |
606| 0x01 0x00b7 | System Display LCD Autoscale | | | | | | |
607
608### HID Consumer Page (0x0c) ###
609
610| HID Usage | HID Usage Name | LKC | Linux Key Code Name | Version | AKC | Android Key Code Name | Notes |
611| ----------- | -------------------------------- | ------ | -------------------------------- | ------- | ------ | -------------------------------- | ----- |
612| 0x0c 0x0030 | Power | | | | | | |
613| 0x0c 0x0031 | Reset | | | | | | |
614| 0x0c 0x0032 | Sleep | | | | | | |
615| 0x0c 0x0033 | Sleep After | | | | | | |
616| 0x0c 0x0034 | Sleep Mode | 0x008e | KEY_SLEEP | 4.0 | 0x001a | KEYCODE_POWER | |
617| 0x0c 0x0040 | Menu | 0x008b | KEY_MENU | 1.6 | 0x0052 | KEYCODE_MENU | |
618| 0x0c 0x0041 | Menu Pick | | | | | | |
619| 0x0c 0x0042 | Menu Up | | | | | | |
620| 0x0c 0x0043 | Menu Down | | | | | | |
621| 0x0c 0x0044 | Menu Left | | | | | | |
622| 0x0c 0x0045 | Menu Right | 0x0181 | KEY_RADIO | | | | |
623| 0x0c 0x0046 | Menu Escape | | | | | | |
624| 0x0c 0x0047 | Menu Value Increase | | | | | | |
625| 0x0c 0x0048 | Menu Value Decrease | | | | | | |
626| 0x0c 0x0081 | Assign Selection | | | | | | |
627| 0x0c 0x0082 | Mode Step | | | | | | |
628| 0x0c 0x0083 | Recall Last | 0x0195 | KEY_LAST | | | | |
629| 0x0c 0x0084 | Enter Channel | | | | | | |
630| 0x0c 0x0085 | Order Movie | | | | | | |
631| 0x0c 0x0088 | Media Select Computer | 0x0178 | KEY_PC | | | | |
632| 0x0c 0x0089 | Media Select TV | 0x0179 | KEY_TV | 3.0 | 0x00aa | KEYCODE_TV | |
633| 0x0c 0x008a | Media Select WWW | 0x0096 | KEY_WWW | 1.6 | 0x0040 | KEYCODE_EXPLORER | |
634| 0x0c 0x008b | Media Select DVD | 0x0185 | KEY_DVD | | | | |
635| 0x0c 0x008c | Media Select Telephone | 0x00a9 | KEY_PHONE | 3.0 | 0x0005 | KEYCODE_CALL | |
636| 0x0c 0x008d | Media Select Program Guide | 0x016a | KEY_PROGRAM | 3.0 | 0x00ac | KEYCODE_GUIDE | |
637| 0x0c 0x008e | Media Select Video Phone | 0x01a0 | KEY_VIDEOPHONE | | | | |
638| 0x0c 0x008f | Media Select Games | 0x01a1 | KEY_GAMES | | | | |
639| 0x0c 0x0090 | Media Select Messages | 0x018c | KEY_MEMO | | | | |
640| 0x0c 0x0091 | Media Select CD | 0x017f | KEY_CD | | | | |
641| 0x0c 0x0092 | Media Select VCR | 0x017b | KEY_VCR | | | | |
642| 0x0c 0x0093 | Media Select Tuner | 0x0182 | KEY_TUNER | | | | |
643| 0x0c 0x0094 | Quit | 0x00ae | KEY_EXIT | | | | |
644| 0x0c 0x0095 | Help | 0x008a | KEY_HELP | | | | |
645| 0x0c 0x0096 | Media Select Tape | 0x0180 | KEY_TAPE | | | | |
646| 0x0c 0x0097 | Media Select Cable | 0x017a | KEY_TV2 | | | | |
647| 0x0c 0x0098 | Media Select Satellite | 0x017d | KEY_SAT | | | | |
648| 0x0c 0x0099 | Media Select Security | | | | | | |
649| 0x0c 0x009a | Media Select Home | 0x016e | KEY_PVR | 3.0 | 0x00ad | KEYCODE_DVR | |
650| 0x0c 0x009c | Channel Increment | 0x0192 | KEY_CHANNELUP | 3.0 | 0x00a6 | KEYCODE_CHANNEL_UP | |
651| 0x0c 0x009d | Channel Decrement | 0x0193 | KEY_CHANNELDOWN | 3.0 | 0x00a7 | KEYCODE_CHANNEL_DOWN | |
652| 0x0c 0x009e | Media Select SAP | | | | | | |
653| 0x0c 0x00a0 | VCR Plus | 0x017c | KEY_VCR2 | | | | |
654| 0x0c 0x00a1 | Once | | | | | | |
655| 0x0c 0x00a2 | Daily | | | | | | |
656| 0x0c 0x00a3 | Weekly | | | | | | |
657| 0x0c 0x00a4 | Monthly | | | | | | |
658| 0x0c 0x00b0 | Play | 0x00cf | KEY_PLAY | 3.0 | 0x007e | KEYCODE_MEDIA_PLAY | |
659| 0x0c 0x00b1 | Pause | 0x0077 | KEY_PAUSE | 3.0 | 0x0079 | KEYCODE_BREAK | |
660| 0x0c 0x00b2 | Record | 0x00a7 | KEY_RECORD | 3.0 | 0x0082 | KEYCODE_MEDIA_RECORD | |
661| 0x0c 0x00b3 | Fast Forward | 0x00d0 | KEY_FASTFORWARD | 3.0 | 0x005a | KEYCODE_MEDIA_FAST_FORWARD | |
662| 0x0c 0x00b4 | Rewind | 0x00a8 | KEY_REWIND | 3.0 | 0x0059 | KEYCODE_MEDIA_REWIND | |
663| 0x0c 0x00b5 | Scan Next Track | 0x00a3 | KEY_NEXTSONG | 3.0 | 0x0057 | KEYCODE_MEDIA_NEXT | |
664| 0x0c 0x00b6 | Scan Previous Track | 0x00a5 | KEY_PREVIOUSSONG | 3.0 | 0x0058 | KEYCODE_MEDIA_PREVIOUS | |
665| 0x0c 0x00b7 | Stop | 0x00a6 | KEY_STOPCD | 3.0 | 0x0056 | KEYCODE_MEDIA_STOP | |
666| 0x0c 0x00b8 | Eject | 0x00a1 | KEY_EJECTCD | 3.0 | 0x0081 | KEYCODE_MEDIA_EJECT | |
667| 0x0c 0x00b9 | Random Play | | | | | | |
668| 0x0c 0x00ba | Select Disc | | | | | | |
669| 0x0c 0x00bb | Enter Disc | | | | | | |
670| 0x0c 0x00bc | Repeat | 0x01b7 | KEY_MEDIA_REPEAT | | | | |
671| 0x0c 0x00be | Track Normal | | | | | | |
672| 0x0c 0x00c0 | Frame Forward | | | | | | |
673| 0x0c 0x00c1 | Frame Back | | | | | | |
674| 0x0c 0x00c2 | Mark | | | | | | |
675| 0x0c 0x00c3 | Clear Mark | | | | | | |
676| 0x0c 0x00c4 | Repeat From Mark | | | | | | |
677| 0x0c 0x00c5 | Return To Mark | | | | | | |
678| 0x0c 0x00c6 | Search Mark Forward | | | | | | |
679| 0x0c 0x00c7 | Search Mark Backwards | | | | | | |
680| 0x0c 0x00c8 | Counter Reset | | | | | | |
681| 0x0c 0x00c9 | Show Counter | | | | | | |
682| 0x0c 0x00ca | Tracking Increment | | | | | | |
683| 0x0c 0x00cb | Tracking Decrement | | | | | | |
684| 0x0c 0x00cc | Stop / Eject | | | | | | |
685| 0x0c 0x00cd | Play / Pause | 0x00a4 | KEY_PLAYPAUSE | 3.0 | 0x0055 | KEYCODE_MEDIA_PLAY_PAUSE | |
686| 0x0c 0x00ce | Play / Skip | | | | | | |
687| 0x0c 0x00e2 | Mute | 0x0071 | KEY_MUTE | 3.0 | 0x00a4 | KEYCODE_VOLUME_MUTE | |
688| 0x0c 0x00e5 | Bass Boost | 0x00d1 | KEY_BASSBOOST | | | | |
689| 0x0c 0x00e6 | Surround Mode | | | | | | |
690| 0x0c 0x00e7 | Loudness | | | | | | |
691| 0x0c 0x00e8 | MPX | | | | | | |
692| 0x0c 0x00e9 | Volume Increment | 0x0073 | KEY_VOLUMEUP | 1.6 | 0x0018 | KEYCODE_VOLUME_UP | |
693| 0x0c 0x00ea | Volume Decrement | 0x0072 | KEY_VOLUMEDOWN | 1.6 | 0x0019 | KEYCODE_VOLUME_DOWN | |
694| 0x0c 0x0181 | AL Launch Button Config. Tool | | | | | | |
695| 0x0c 0x0182 | AL Programmable Button Config. | 0x009c | KEY_BOOKMARKS | 3.0 | 0x00ae | KEYCODE_BOOKMARK | |
Jeff Brown543b03f2011-11-28 18:23:46 -0800696| 0x0c 0x0183 | AL Consumer Control Config. | 0x00ab | KEY_CONFIG | 4.0.3 | 0x00d1 | KEYCODE_MUSIC | |
Jeff Brown590a9d62011-06-30 12:55:34 -0700697| 0x0c 0x0184 | AL Word Processor | 0x01a5 | KEY_WORDPROCESSOR | | | | |
698| 0x0c 0x0185 | AL Text Editor | 0x01a6 | KEY_EDITOR | | | | |
699| 0x0c 0x0186 | AL Spreadsheet | 0x01a7 | KEY_SPREADSHEET | | | | |
700| 0x0c 0x0187 | AL Graphics Editor | 0x01a8 | KEY_GRAPHICSEDITOR | | | | |
701| 0x0c 0x0188 | AL Presentation App | 0x01a9 | KEY_PRESENTATION | | | | |
702| 0x0c 0x0189 | AL Database App | 0x01aa | KEY_DATABASE | | | | |
703| 0x0c 0x018a | AL Email Reader | 0x009b | KEY_MAIL | 1.6 | 0x0041 | KEYCODE_ENVELOPE | |
704| 0x0c 0x018b | AL Newsreader | 0x01ab | KEY_NEWS | | | | |
705| 0x0c 0x018c | AL Voicemail | 0x01ac | KEY_VOICEMAIL | | | | |
Jeff Brown543b03f2011-11-28 18:23:46 -0800706| 0x0c 0x018d | AL Contacts / Address Book | 0x01ad | KEY_ADDRESSBOOK | 4.0.3 | 0x00cf | KEYCODE_CONTACTS | |
707| 0x0c 0x018e | AL Calendar / Schedule | 0x018d | KEY_CALENDAR | 4.0.3 | 0x00d0 | KEYCODE_CALENDAR | |
Jeff Brown590a9d62011-06-30 12:55:34 -0700708| 0x0c 0x018f | AL Task / Project Manager | | | | | | |
709| 0x0c 0x0190 | AL Log / Journal / Timecard | | | | | | |
710| 0x0c 0x0191 | AL Checkbook / Finance | 0x00db | KEY_FINANCE | | | | |
Jeff Brown543b03f2011-11-28 18:23:46 -0800711| 0x0c 0x0192 | AL Calculator | 0x008c | KEY_CALC | 4.0.3 | 0x00d2 | KEYCODE_CALCULATOR | |
Jeff Brown590a9d62011-06-30 12:55:34 -0700712| 0x0c 0x0193 | AL A/V Capture / Playback | | | | | | |
713| 0x0c 0x0194 | AL Local Machine Browser | 0x0090 | KEY_FILE | | | | |
714| 0x0c 0x0195 | AL LAN/WAN Browser | | | | | | |
715| 0x0c 0x0196 | AL Internet Browser | 0x0096 | KEY_WWW | 1.6 | 0x0040 | KEYCODE_EXPLORER | |
716| 0x0c 0x0197 | AL Remote Networking/ISP Connect | | | | | | |
717| 0x0c 0x0198 | AL Network Conference | | | | | | |
718| 0x0c 0x0199 | AL Network Chat | 0x00d8 | KEY_CHAT | | | | |
719| 0x0c 0x019a | AL Telephony / Dialer | | | | | | |
720| 0x0c 0x019b | AL Logon | | | | | | |
721| 0x0c 0x019c | AL Logoff | 0x01b1 | KEY_LOGOFF | | | | |
722| 0x0c 0x019d | AL Logon / Logoff | | | | | | |
723| 0x0c 0x019e | AL Terminal Lock / Screensaver | 0x0098 | KEY_COFFEE | 4.0 | 0x001a | KEYCODE_POWER | |
724| 0x0c 0x019f | AL Control Panel | | | | | | |
725| 0x0c 0x01a0 | AL Command Line Processor / Run | | | | | | |
726| 0x0c 0x01a1 | AL Process / Task Manager | | | | | | |
727| 0x0c 0x01a2 | AL Select Task / Application | | | | | | |
728| 0x0c 0x01a3 | AL Next Task / Application | | | | | | |
729| 0x0c 0x01a4 | AL Previous Task / Application | | | | | | |
730| 0x0c 0x01a5 | AL Preemptive Halt Task / App. | | | | | | |
731| 0x0c 0x01a6 | AL Integrated Help Center | 0x008a | KEY_HELP | | | | |
732| 0x0c 0x01a7 | AL Documents | 0x00eb | KEY_DOCUMENTS | | | | |
733| 0x0c 0x01a8 | AL Thesaurus | | | | | | |
734| 0x0c 0x01a9 | AL Dictionary | | | | | | |
735| 0x0c 0x01aa | AL Desktop | | | | | | |
736| 0x0c 0x01ab | AL Spell Check | 0x01b0 | KEY_SPELLCHECK | | | | |
737| 0x0c 0x01ac | AL Grammar Check | | | | | | |
738| 0x0c 0x01ad | AL Wireless Status | | | | | | |
739| 0x0c 0x01ae | AL Keyboard Layout | | | | | | |
740| 0x0c 0x01af | AL Virus Protection | | | | | | |
741| 0x0c 0x01b0 | AL Encryption | | | | | | |
742| 0x0c 0x01b1 | AL Screen Saver | | | | | | |
743| 0x0c 0x01b2 | AL Alarms | | | | | | |
744| 0x0c 0x01b3 | AL Clock | | | | | | |
745| 0x0c 0x01b4 | AL File Browser | | | | | | |
746| 0x0c 0x01b5 | AL Power Status | | | | | | |
Jeff Brown543b03f2011-11-28 18:23:46 -0800747| 0x0c 0x01b6 | AL Image Browser | 0x00e2 | KEY_MEDIA | 3.0 | 0x004f | KEYCODE_HEADSETHOOK | |
748| 0x0c 0x01b7 | AL Audio Browser | 0x00d5 | KEY_SOUND | 4.0.3 | 0x00d1 | KEYCODE_MUSIC | |
Jeff Brown590a9d62011-06-30 12:55:34 -0700749| 0x0c 0x01b8 | AL Movie Browser | | | | | | |
750| 0x0c 0x01b9 | AL Digital Rights Manager | | | | | | |
751| 0x0c 0x01ba | AL Digital Wallet | | | | | | |
752| 0x0c 0x01bc | AL Instant Messaging | 0x01ae | KEY_MESSENGER | | | | |
753| 0x0c 0x01bd | AL OEM Features / Tips Browser | 0x0166 | KEY_INFO | | | | |
754| 0x0c 0x01be | AL OEM Help | | | | | | |
755| 0x0c 0x01bf | AL Online Community | | | | | | |
756| 0x0c 0x01c0 | AL Entertainment Content Browser | | | | | | |
757| 0x0c 0x01c1 | AL Online Shopping Browser | | | | | | |
758| 0x0c 0x01c2 | AL SmartCard Information / Help | | | | | | |
759| 0x0c 0x01c3 | AL Market / Finance Browser | | | | | | |
760| 0x0c 0x01c4 | AL Customized Corp. News Browser | | | | | | |
761| 0x0c 0x01c5 | AL Online Activity Browser | | | | | | |
762| 0x0c 0x01c6 | AL Research / Search Browser | | | | | | |
763| 0x0c 0x01c7 | AL Audio Player | | | | | | |
764| 0x0c 0x0201 | AC New | 0x00b5 | KEY_NEW | | | | |
765| 0x0c 0x0202 | AC Open | 0x0086 | KEY_OPEN | | | | |
766| 0x0c 0x0203 | AC Close | 0x00ce | KEY_CLOSE | | | | |
767| 0x0c 0x0204 | AC Exit | 0x00ae | KEY_EXIT | | | | |
768| 0x0c 0x0205 | AC Maximize | | | | | | |
769| 0x0c 0x0206 | AC Minimize | | | | | | |
770| 0x0c 0x0207 | AC Save | 0x00ea | KEY_SAVE | | | | |
771| 0x0c 0x0208 | AC Print | 0x00d2 | KEY_PRINT | | | | |
772| 0x0c 0x0209 | AC Properties | 0x0082 | KEY_PROPS | | | | |
773| 0x0c 0x021a | AC Undo | 0x0083 | KEY_UNDO | | | | |
774| 0x0c 0x021b | AC Copy | 0x0085 | KEY_COPY | | | | |
775| 0x0c 0x021c | AC Cut | 0x0089 | KEY_CUT | | | | |
776| 0x0c 0x021d | AC Paste | 0x0087 | KEY_PASTE | | | | |
777| 0x0c 0x021e | AC Select All | | | | | | |
778| 0x0c 0x021f | AC Find | 0x0088 | KEY_FIND | | | | |
779| 0x0c 0x0220 | AC Find and Replace | | | | | | |
780| 0x0c 0x0221 | AC Search | 0x00d9 | KEY_SEARCH | 1.6 | 0x0054 | KEYCODE_SEARCH | |
781| 0x0c 0x0222 | AC Go To | 0x0162 | KEY_GOTO | | | | |
782| 0x0c 0x0223 | AC Home | 0x00ac | KEY_HOMEPAGE | 3.0 | 0x0003 | KEYCODE_HOME | |
783| 0x0c 0x0224 | AC Back | 0x009e | KEY_BACK | 1.6 | 0x0004 | KEYCODE_BACK | |
784| 0x0c 0x0225 | AC Forward | 0x009f | KEY_FORWARD | 3.0 | 0x007d | KEYCODE_FORWARD | |
785| 0x0c 0x0226 | AC Stop | 0x0080 | KEY_STOP | 3.0 | 0x0056 | KEYCODE_MEDIA_STOP | |
786| 0x0c 0x0227 | AC Refresh | 0x00ad | KEY_REFRESH | | | | |
787| 0x0c 0x0228 | AC Previous Link | | | | | | |
788| 0x0c 0x0229 | AC Next Link | | | | | | |
789| 0x0c 0x022a | AC Bookmarks | 0x009c | KEY_BOOKMARKS | 3.0 | 0x00ae | KEYCODE_BOOKMARK | |
790| 0x0c 0x022b | AC History | | | | | | |
791| 0x0c 0x022c | AC Subscriptions | | | | | | |
792| 0x0c 0x022d | AC Zoom In | 0x01a2 | KEY_ZOOMIN | | | | |
793| 0x0c 0x022e | AC Zoom Out | 0x01a3 | KEY_ZOOMOUT | | | | |
794| 0x0c 0x022f | AC Zoom | 0x01a4 | KEY_ZOOMRESET | | | | 2 |
795| 0x0c 0x0230 | AC Full Screen View | | | | | | |
796| 0x0c 0x0231 | AC Normal View | | | | | | |
797| 0x0c 0x0232 | AC View Toggle | | | | | | |
798| 0x0c 0x0233 | AC Scroll Up | 0x00b1 | KEY_SCROLLUP | 3.0 | 0x005c | KEYCODE_PAGE_UP | |
799| 0x0c 0x0234 | AC Scroll Down | 0x00b2 | KEY_SCROLLDOWN | 3.0 | 0x005d | KEYCODE_PAGE_DOWN | |
800| 0x0c 0x0236 | AC Pan Left | | | | | | |
801| 0x0c 0x0237 | AC Pan Right | | | | | | |
802| 0x0c 0x0239 | AC New Window | | | | | | |
803| 0x0c 0x023a | AC Tile Horizontally | | | | | | |
804| 0x0c 0x023b | AC Tile Vertically | | | | | | |
805| 0x0c 0x023c | AC Format | | | | | | |
806| 0x0c 0x023d | AC Edit | | | | | | |
807| 0x0c 0x023e | AC Bold | | | | | | |
808| 0x0c 0x023f | AC Italics | | | | | | |
809| 0x0c 0x0240 | AC Underline | | | | | | |
810| 0x0c 0x0241 | AC Strikethrough | | | | | | |
811| 0x0c 0x0242 | AC Subscript | | | | | | |
812| 0x0c 0x0243 | AC Superscript | | | | | | |
813| 0x0c 0x0244 | AC All Caps | | | | | | |
814| 0x0c 0x0245 | AC Rotate | | | | | | |
815| 0x0c 0x0246 | AC Resize | | | | | | |
816| 0x0c 0x0247 | AC Flip horizontal | | | | | | |
817| 0x0c 0x0248 | AC Flip Vertical | | | | | | |
818| 0x0c 0x0249 | AC Mirror Horizontal | | | | | | |
819| 0x0c 0x024a | AC Mirror Vertical | | | | | | |
820| 0x0c 0x024b | AC Font Select | | | | | | |
821| 0x0c 0x024c | AC Font Color | | | | | | |
822| 0x0c 0x024d | AC Font Size | | | | | | |
823| 0x0c 0x024e | AC Justify Left | | | | | | |
824| 0x0c 0x024f | AC Justify Center H | | | | | | |
825| 0x0c 0x0250 | AC Justify Right | | | | | | |
826| 0x0c 0x0251 | AC Justify Block H | | | | | | |
827| 0x0c 0x0252 | AC Justify Top | | | | | | |
828| 0x0c 0x0253 | AC Justify Center V | | | | | | |
829| 0x0c 0x0254 | AC Justify Bottom | | | | | | |
830| 0x0c 0x0255 | AC Justify Block V | | | | | | |
831| 0x0c 0x0256 | AC Indent Decrease | | | | | | |
832| 0x0c 0x0257 | AC Indent Increase | | | | | | |
833| 0x0c 0x0258 | AC Numbered List | | | | | | |
834| 0x0c 0x0259 | AC Restart Numbering | | | | | | |
835| 0x0c 0x025a | AC Bulleted List | | | | | | |
836| 0x0c 0x025b | AC Promote | | | | | | |
837| 0x0c 0x025c | AC Demote | | | | | | |
838| 0x0c 0x025d | AC Yes | | | | | | |
839| 0x0c 0x025e | AC No | | | | | | |
840| 0x0c 0x025f | AC Cancel | 0x00df | KEY_CANCEL | | | | |
841| 0x0c 0x0260 | AC Catalog | | | | | | |
842| 0x0c 0x0261 | AC Buy / Checkout | | | | | | |
843| 0x0c 0x0262 | AC Add to Cart | | | | | | |
844| 0x0c 0x0263 | AC Expand | | | | | | |
845| 0x0c 0x0264 | AC Expand All | | | | | | |
846| 0x0c 0x0265 | AC Collapse | | | | | | |
847| 0x0c 0x0266 | AC Collapse All | | | | | | |
848| 0x0c 0x0267 | AC Print Preview | | | | | | |
849| 0x0c 0x0268 | AC Paste Special | | | | | | |
850| 0x0c 0x0269 | AC Insert Mode | | | | | | |
851| 0x0c 0x026a | AC Delete | | | | | | |
852| 0x0c 0x026b | AC Lock | | | | | | |
853| 0x0c 0x026c | AC Unlock | | | | | | |
854| 0x0c 0x026d | AC Protect | | | | | | |
855| 0x0c 0x026e | AC Unprotect | | | | | | |
856| 0x0c 0x026f | AC Attach Comment | | | | | | |
857| 0x0c 0x0270 | AC Delete Comment | | | | | | |
858| 0x0c 0x0271 | AC View Comment | | | | | | |
859| 0x0c 0x0272 | AC Select Word | | | | | | |
860| 0x0c 0x0273 | AC Select Sentence | | | | | | |
861| 0x0c 0x0274 | AC Select Paragraph | | | | | | |
862| 0x0c 0x0275 | AC Select Column | | | | | | |
863| 0x0c 0x0276 | AC Select Row | | | | | | |
864| 0x0c 0x0277 | AC Select Table | | | | | | |
865| 0x0c 0x0278 | AC Select Object | | | | | | |
866| 0x0c 0x0279 | AC Redo / Repeat | 0x00b6 | KEY_REDO | | | | |
867| 0x0c 0x027a | AC Sort | | | | | | |
868| 0x0c 0x027b | AC Sort Ascending | | | | | | |
869| 0x0c 0x027c | AC Sort Descending | | | | | | |
870| 0x0c 0x027d | AC Filter | | | | | | |
871| 0x0c 0x027e | AC Set Clock | | | | | | |
872| 0x0c 0x027f | AC View Clock | | | | | | |
873| 0x0c 0x0280 | AC Select Time Zone | | | | | | |
874| 0x0c 0x0281 | AC Edit Time Zones | | | | | | |
875| 0x0c 0x0282 | AC Set Alarm | | | | | | |
876| 0x0c 0x0283 | AC Clear Alarm | | | | | | |
877| 0x0c 0x0284 | AC Snooze Alarm | | | | | | |
878| 0x0c 0x0285 | AC Reset Alarm | | | | | | |
879| 0x0c 0x0286 | AC Synchronize | | | | | | |
880| 0x0c 0x0287 | AC Send/Receive | | | | | | |
881| 0x0c 0x0288 | AC Send To | | | | | | |
882| 0x0c 0x0289 | AC Reply | 0x00e8 | KEY_REPLY | | | | |
883| 0x0c 0x028a | AC Reply All | | | | | | |
884| 0x0c 0x028b | AC Forward Msg | 0x00e9 | KEY_FORWARDMAIL | | | | |
885| 0x0c 0x028c | AC Send | 0x00e7 | KEY_SEND | | | | |
886| 0x0c 0x028d | AC Attach File | | | | | | |
887| 0x0c 0x028e | AC Upload | | | | | | |
888| 0x0c 0x028f | AC Download (Save Target As) | | | | | | |
889| 0x0c 0x0290 | AC Set Borders | | | | | | |
890| 0x0c 0x0291 | AC Insert Row | | | | | | |
891| 0x0c 0x0292 | AC Insert Column | | | | | | |
892| 0x0c 0x0293 | AC Insert File | | | | | | |
893| 0x0c 0x0294 | AC Insert Picture | | | | | | |
894| 0x0c 0x0295 | AC Insert Object | | | | | | |
895| 0x0c 0x0296 | AC Insert Symbol | | | | | | |
896| 0x0c 0x0297 | AC Save and Close | | | | | | |
897| 0x0c 0x0298 | AC Rename | | | | | | |
898| 0x0c 0x0299 | AC Merge | | | | | | |
899| 0x0c 0x029a | AC Split | | | | | | |
900| 0x0c 0x029b | AC Distribute Horizontally | | | | | | |
901| 0x0c 0x029c | AC Distribute Vertically | | | | | | |
902
903### Additional non-HID Mappings ###
904
905These mappings describe functions that do not appear in HID but for which Linux
906key codes exist.
907
908| LKC | Linux Key Code Name | Version | AKC | Android Key Code Name | Notes |
909| ------ | -------------------------------- | ------- | ------ | -------------------------------- | ----- |
910| 0x01d0 | KEY_FN | 3.0 | 0x0077 | KEYCODE_FUNCTION | |
911| 0x01d1 | KEY_FN_ESC | 3.0 | 0x006f | KEYCODE_ESCAPE | 3 |
912| 0x01d2 | KEY_FN_F1 | 3.0 | 0x0083 | KEYCODE_F1 | 3 |
913| 0x01d3 | KEY_FN_F2 | 3.0 | 0x0084 | KEYCODE_F2 | 3 |
914| 0x01d4 | KEY_FN_F3 | 3.0 | 0x0085 | KEYCODE_F3 | 3 |
915| 0x01d5 | KEY_FN_F4 | 3.0 | 0x0086 | KEYCODE_F4 | 3 |
916| 0x01d6 | KEY_FN_F5 | 3.0 | 0x0087 | KEYCODE_F5 | 3 |
917| 0x01d7 | KEY_FN_F6 | 3.0 | 0x0088 | KEYCODE_F6 | 3 |
918| 0x01d8 | KEY_FN_F7 | 3.0 | 0x0089 | KEYCODE_F7 | 3 |
919| 0x01d9 | KEY_FN_F8 | 3.0 | 0x008a | KEYCODE_F8 | 3 |
920| 0x01da | KEY_FN_F9 | 3.0 | 0x008b | KEYCODE_F9 | 3 |
921| 0x01db | KEY_FN_F10 | 3.0 | 0x008c | KEYCODE_F10 | 3 |
922| 0x01dc | KEY_FN_F11 | 3.0 | 0x008d | KEYCODE_F11 | 3 |
923| 0x01dd | KEY_FN_F12 | 3.0 | 0x008e | KEYCODE_F12 | 3 |
924| 0x01de | KEY_FN_1 | 3.0 | 0x0008 | KEYCODE_1 | 3 |
925| 0x01df | KEY_FN_2 | 3.0 | 0x0009 | KEYCODE_2 | 3 |
926| 0x01e0 | KEY_FN_D | 3.0 | 0x0020 | KEYCODE_D | 3 |
927| 0x01e1 | KEY_FN_E | 3.0 | 0x0021 | KEYCODE_E | 3 |
928| 0x01e2 | KEY_FN_F | 3.0 | 0x0022 | KEYCODE_F | 3 |
929| 0x01e3 | KEY_FN_S | 3.0 | 0x002f | KEYCODE_S | 3 |
930| 0x01e4 | KEY_FN_B | 3.0 | 0x001e | KEYCODE_B | 3 |
931
932### Legacy Unsupported Keys ###
933
934These mappings appeared in previous versions of Android but were inconsistent with
935HID or used non-standard Linux key codes. They are no longer supported.
936
937| LKC | Linux Key Code Name | Version | AKC | Android Key Code Name | Notes |
938| ------ | -------------------------------- | ------- | ------ | -------------------------------- | ----- |
939| 0x00db | KEY_EMAIL | 1.6 | 0x004d | KEYCODE_AT | 4 |
940| "" | "" | 4.0 | | | 4 |
941| 0x00e3 | KEY_STAR | 1.6 | 0x0011 | KEYCODE_STAR | 4 |
942| "" | "" | 4.0 | | | 4 |
943| 0x00e4 | KEY_SHARP | 1.6 | 0x0012 | KEYCODE_POUND | 4 |
944| "" | "" | 4.0 | | | 4 |
945| 0x00e5 | KEY_SOFT1 | 1.6 | 0x0052 | KEYCODE_MENU | 4 |
946| "" | "" | 4.0 | | | 4 |
947| 0x00e6 | KEY_SOFT2 | 1.6 | 0x0002 | KEYCODE_SOFT_RIGHT | 4 |
948| "" | "" | 4.0 | | | 4 |
949| 0x00e7 | KEY_SEND | 1.6 | 0x0005 | KEYCODE_CALL | 4 |
950| "" | "" | 4.0 | | | 4 |
951| 0x00e8 | KEY_CENTER | 1.6 | 0x0017 | KEYCODE_DPAD_CENTER | 4 |
952| "" | "" | 4.0 | | | 4 |
953| 0x00e9 | KEY_HEADSETHOOK | 1.6 | 0x004f | KEYCODE_HEADSETHOOK | 4 |
954| "" | "" | 4.0 | | | 4 |
955| 0x00ea | KEY_0_5 | 1.6 | | | 4 |
956| 0x00eb | KEY_2_5 | 1.6 | | | 4 |
957
958### Notes ###
959
9601. The Android key code associated with common alphanumeric and symbolic
961 keys may vary based on the keyboard layout and language.
962 For historical reasons, the physical scan codes and HID usages
963 associated with keys on a keyboard are often defined positionally
964 even though the labels printed on those keys may vary from one
965 language to another.
966
967 On a US English (QWERTY) keyboard, the top-left alphabetic key is
968 labeled Q. On a French (AZERTY) keyboard, the key in the same
969 position is labeled A. Despite the label, on both keyboards the
970 top-left alphabetic key is referred to using the HID usage
971 0x07 0x0014 which is mapped to the Linux key code KEY_Q.
972
973 When Android is configured with a US English keyboard layout, then
974 the Linux key code KEY_Q will be mapped to the Android key code
975 KEYCODE_Q and will produce the characters 'Q' and 'q'.
976 However, when Android is configured with a French keyboard layout,
977 then the Linux key code KEY_Q will be mapped to the Android key code
978 KEYCODE_A and will produce the characters 'A' and 'a'.
979
980 The Android key code typically reflects the language-specific
981 interpretation of the key, so a different Android key code may
982 be used for different languages.
983
9842. `0x0c 0x022f AC Zoom` is defined in the HID as a linear control but
985 the kernel maps it as a key, which is probably incorrect.
986
9873. The Linux function keys `KEY_FN_*` are mapped to simpler
988 key codes but are dispatched with the `META_FUNCTION` meta state
989 bit set to true.
990
9914. Prior to Android Ice Cream Sandwich 4.0, the default key layout
992 contained mappings for some extra key codes that were not defined
993 in the mainline Linux kernel headers. These mappings have since
994 been removed because these previously undefined key codes have
995 since been assigned different meanings in more recent versions
996 of the Linux kernel.
997
998### Sources ###
999
10001. [USB HID Usage Tables v1.12](http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf)
10012. Linux 2.6.39 kernel: include/linux/input.h, drivers/hid/hid-input.c
10023. Android ICS: qwerty.kl, Generic.kl, KeyEvent.java