Jeff Brown | 590a9d6 | 2011-06-30 12:55:34 -0700 | [diff] [blame] | 1 | <!-- |
| 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 | |
| 19 | Android supports a variety of keyboard devices including special function |
| 20 | keypads (volume and power controls), compact embedded QWERTY keyboards, |
| 21 | and fully featured PC-style external keyboards. |
| 22 | |
| 23 | This document decribes physical keyboards only. Refer to the Android SDK |
| 24 | for information about soft keyboards (Input Method Editors). |
| 25 | |
| 26 | ## Keyboard Classification ## |
| 27 | |
| 28 | An input device is classified as a keyboard if either of the following |
| 29 | conditions 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 | |
| 38 | Joysticks are currently classified as keyboards because joystick and gamepad buttons |
| 39 | are reported by `EV_KEY` events in the same way keyboard keys are reported. Thus |
| 40 | joysticks and gamepads also make use of key map files for configuration. |
| 41 | Refer to the section on [Joystick Devices](/tech/input/joystick-devices.html) for |
| 42 | more information. |
| 43 | |
| 44 | Once an input device has been classified as a keyboard, the system loads the |
| 45 | input device configuration file and keyboard layout for the keyboard. |
| 46 | |
| 47 | The 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 | |
| 66 | 1. 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 | |
| 71 | 2. 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 | |
| 76 | 3. Android performs its own keyboard repeating. Auto-repeat functionality |
| 77 | should be disabled in the driver. |
| 78 | |
| 79 | 4. 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 | |
| 84 | 5. 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 | |
| 90 | 6. 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 | |
| 97 | The following is a brief summary of the keyboard operation on Android. |
| 98 | |
| 99 | 1. 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 | |
| 103 | 2. 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 | |
| 107 | 3. The `InputReader` notifies the `InputDispatcher` about the key event. |
| 108 | |
| 109 | 4. 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 | |
| 115 | 5. 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 | |
| 119 | 6. The `InputDispatcher` enqueues the key for processing on the dispatch thread. |
| 120 | |
| 121 | 7. 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 | |
| 126 | 8. 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 | |
| 130 | 9. Inside the application, the key event propagates down the view hierarchy to |
| 131 | the focused view for pre-IME key dispatch. |
| 132 | |
| 133 | 10. 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 | |
| 136 | 11. 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 | |
| 139 | 12. 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 | |
| 148 | Keyboard behavior is determined by the keyboard's key layout, key character |
| 149 | map and input device configuration. |
| 150 | |
| 151 | Refer to the following sections for more details about the files that |
| 152 | participate 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 | |
| 160 | The following input device configuration properties are used for keyboards. |
| 161 | |
| 162 | #### `keyboard.layout` #### |
| 163 | |
| 164 | *Definition:* `keyboard.layout` = <name> |
| 165 | |
| 166 | Specifies the name of the key layout file associated with the input device, |
| 167 | excluding the `.kl` extension. If this file is not found, the input system |
| 168 | will use the default key layout instead. |
| 169 | |
| 170 | Spaces in the name are converted to underscores during lookup. |
| 171 | |
| 172 | Refer to the key layout file documentation for more details. |
| 173 | |
| 174 | #### `keyboard.characterMap` #### |
| 175 | |
| 176 | *Definition:* `keyboard.characterMap` = <name> |
| 177 | |
| 178 | Specifies the name of the key character map file associated with the input device, |
| 179 | excluding the `.kcm` extension. If this file is not found, the input system |
| 180 | will use the default key character map instead. |
| 181 | |
| 182 | Spaces in the name are converted to underscores during lookup. |
| 183 | |
| 184 | Refer to the key character map file documentation for more details. |
| 185 | |
| 186 | #### `keyboard.orientationAware` #### |
| 187 | |
| 188 | *Definition:* `keyboard.orientationAware` = `0` | `1` |
| 189 | |
| 190 | Specifies 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 | |
| 197 | The default value is `0`. |
| 198 | |
| 199 | Orientation awareness is used to support rotation of directional keypad keys, |
| 200 | such as on the Motorola Droid. For example, when the device is rotated |
| 201 | clockwise 90 degrees from its natural orientation, `KEYCODE_DPAD_UP` is |
| 202 | remapped 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 | |
| 209 | Specifies whether the keyboard is the built-in (physically attached) |
| 210 | keyboard. |
| 211 | |
| 212 | The default value is `1` if the device name ends with `-keypad`, `0` otherwise. |
| 213 | |
| 214 | The built-in keyboard is always assigned a device id of `0`. Other keyboards |
| 215 | that are not built-in are assigned unique non-zero device ids. |
| 216 | |
| 217 | Using an id of `0` for the built-in keyboard is important for maintaining |
| 218 | compatibility with the `KeyCharacterMap.BUILT_IN_KEYBOARD` field, which specifies |
| 219 | the id of the built-in keyboard and has a value of `0`. This field has been |
| 220 | deprecated in the API but older applications might still be using it. |
| 221 | |
| 222 | A special-function keyboard (one whose key character map specifies a |
| 223 | type of `SPECIAL_FUNCTION`) will never be registered as the built-in keyboard, |
| 224 | regardless of the setting of this property. This is because a special-function |
| 225 | keyboard 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 | |
| 248 | Prior to Honeycomb, the keyboard input mapper did not use any configuration properties. |
| 249 | All keyboards were assumed to be physically attached and orientation aware. The default |
| 250 | key layout and key character map was named `qwerty` instead of `Generic`. The key |
| 251 | character map format was also very different and the framework did not support |
| 252 | PC-style full keyboards or external keyboards. |
| 253 | |
| 254 | When upgrading devices to Honeycomb, make sure to create or update the necessary |
| 255 | configuration and key map files. |
| 256 | |
| 257 | ## HID Usages, Linux Key Codes and Android Key Codes ## |
| 258 | |
| 259 | The system refers to keys using several different identifiers, depending on the |
| 260 | layer of abstraction. |
| 261 | |
| 262 | For HID devices, each key has an associated HID usage. The Linux `hid-input` |
| 263 | driver and related vendor and device-specific HID drivers are responsible |
| 264 | for parsing HID reports and mapping HID usages to Linux key codes. |
| 265 | |
| 266 | As Android reads `EV_KEY` events from the Linux kernel, it translates each |
| 267 | Linux key code into its corresponding Android key code according to the |
| 268 | key layout file of the device. |
| 269 | |
| 270 | When the key event is dispatched to an application, the `android.view.KeyEvent` |
| 271 | instance reports the Linux key code as the value of `getScanCode()` and the |
| 272 | Android key code as the value of `getKeyCode()`. For the purposes of the |
| 273 | framework, only the value of `getKeyCode()` is important. |
| 274 | |
| 275 | Note that the HID usage information is not used by Android itself or |
| 276 | passed to applications. |
| 277 | |
| 278 | ## Code Tables ## |
| 279 | |
| 280 | The following tables show how HID usages, Linux key codes and Android |
| 281 | key codes are related to one another. |
| 282 | |
| 283 | The LKC column specifies the Linux key code in hexadecimal. |
| 284 | |
| 285 | The AKC column specifies the Android key code in hexadecimal. |
| 286 | |
| 287 | The Notes column refers to notes that are posted after the table. |
| 288 | |
| 289 | The Version column specifies the first version of the Android platform |
| 290 | to have included this key in its default key map. Multiple rows are |
| 291 | shown in cases where the default key map has changed between versions. |
| 292 | The 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 | |
| 312 | The key code mapping may vary across versions of the Linux kernel and Android. |
| 313 | When changes are known to have occurred in the Android default key maps, |
| 314 | they are indicated in the version column. |
| 315 | |
| 316 | Device-specific HID drivers and key maps may apply different mappings |
| 317 | than 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 | | 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 | | 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 | | | | | | | | |
| 522 | | 0x07 0x00ca | Keypad || | | | | | | | |
| 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 Brown | 543b03f | 2011-11-28 18:23:46 -0800 | [diff] [blame] | 569 | | 0x07 0x00fb | | 0x008c | KEY_CALC | 4.0.3 | 0x00d2 | KEYCODE_CALCULATOR | | |
Jeff Brown | 590a9d6 | 2011-06-30 12:55:34 -0700 | [diff] [blame] | 570 | |
| 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 Brown | 543b03f | 2011-11-28 18:23:46 -0800 | [diff] [blame] | 696 | | 0x0c 0x0183 | AL Consumer Control Config. | 0x00ab | KEY_CONFIG | 4.0.3 | 0x00d1 | KEYCODE_MUSIC | | |
Jeff Brown | 590a9d6 | 2011-06-30 12:55:34 -0700 | [diff] [blame] | 697 | | 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 Brown | 543b03f | 2011-11-28 18:23:46 -0800 | [diff] [blame] | 706 | | 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 Brown | 590a9d6 | 2011-06-30 12:55:34 -0700 | [diff] [blame] | 708 | | 0x0c 0x018f | AL Task / Project Manager | | | | | | | |
| 709 | | 0x0c 0x0190 | AL Log / Journal / Timecard | | | | | | | |
| 710 | | 0x0c 0x0191 | AL Checkbook / Finance | 0x00db | KEY_FINANCE | | | | | |
Jeff Brown | 543b03f | 2011-11-28 18:23:46 -0800 | [diff] [blame] | 711 | | 0x0c 0x0192 | AL Calculator | 0x008c | KEY_CALC | 4.0.3 | 0x00d2 | KEYCODE_CALCULATOR | | |
Jeff Brown | 590a9d6 | 2011-06-30 12:55:34 -0700 | [diff] [blame] | 712 | | 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 Brown | 543b03f | 2011-11-28 18:23:46 -0800 | [diff] [blame] | 747 | | 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 Brown | 590a9d6 | 2011-06-30 12:55:34 -0700 | [diff] [blame] | 749 | | 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 | |
| 905 | These mappings describe functions that do not appear in HID but for which Linux |
| 906 | key 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 | |
| 934 | These mappings appeared in previous versions of Android but were inconsistent with |
| 935 | HID 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 | |
| 960 | 1. 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 | |
| 984 | 2. `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 | |
| 987 | 3. 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 | |
| 991 | 4. 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 | |
| 1000 | 1. [USB HID Usage Tables v1.12](http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf) |
| 1001 | 2. Linux 2.6.39 kernel: include/linux/input.h, drivers/hid/hid-input.c |
| 1002 | 3. Android ICS: qwerty.kl, Generic.kl, KeyEvent.java |