Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2015 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 | #ifndef ANDROID_INCLUDE_HARDWARE_INPUT_H |
| 18 | #define ANDROID_INCLUDE_HARDWARE_INPUT_H |
| 19 | |
| 20 | #include <hardware/hardware.h> |
| 21 | #include <stdint.h> |
| 22 | |
| 23 | __BEGIN_DECLS |
| 24 | |
| 25 | #define INPUT_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0) |
| 26 | #define INPUT_HARDWARE_MODULE_ID "input" |
| 27 | |
| 28 | #define INPUT_INSTANCE_EVDEV "evdev" |
| 29 | |
| 30 | typedef enum input_bus { |
| 31 | INPUT_BUS_BT, |
| 32 | INPUT_BUS_USB, |
| 33 | INPUT_BUS_SERIAL, |
| 34 | INPUT_BUS_BUILTIN |
| 35 | } input_bus_t; |
| 36 | |
| 37 | typedef struct input_host input_host_t; |
| 38 | |
| 39 | typedef struct input_device_handle input_device_handle_t; |
| 40 | |
| 41 | typedef struct input_device_identifier input_device_identifier_t; |
| 42 | |
| 43 | typedef struct input_device_definition input_device_definition_t; |
| 44 | |
| 45 | typedef struct input_report_definition input_report_definition_t; |
| 46 | |
| 47 | typedef struct input_report input_report_t; |
| 48 | |
| 49 | typedef struct input_collection input_collection_t; |
| 50 | |
Tim Kilbourn | 6fa8248 | 2015-04-06 13:49:40 -0700 | [diff] [blame] | 51 | typedef struct input_property_map input_property_map_t; |
| 52 | |
| 53 | typedef struct input_property input_property_t; |
| 54 | |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 55 | typedef enum { |
Tim Kilbourn | aaf6b26 | 2015-02-27 15:01:50 -0800 | [diff] [blame] | 56 | // keycodes |
| 57 | INPUT_USAGE_KEYCODE_UNKNOWN, |
| 58 | INPUT_USAGE_KEYCODE_SOFT_LEFT, |
| 59 | INPUT_USAGE_KEYCODE_SOFT_RIGHT, |
| 60 | INPUT_USAGE_KEYCODE_HOME, |
| 61 | INPUT_USAGE_KEYCODE_BACK, |
| 62 | INPUT_USAGE_KEYCODE_CALL, |
| 63 | INPUT_USAGE_KEYCODE_ENDCALL, |
| 64 | INPUT_USAGE_KEYCODE_0, |
| 65 | INPUT_USAGE_KEYCODE_1, |
| 66 | INPUT_USAGE_KEYCODE_2, |
| 67 | INPUT_USAGE_KEYCODE_3, |
| 68 | INPUT_USAGE_KEYCODE_4, |
| 69 | INPUT_USAGE_KEYCODE_5, |
| 70 | INPUT_USAGE_KEYCODE_6, |
| 71 | INPUT_USAGE_KEYCODE_7, |
| 72 | INPUT_USAGE_KEYCODE_8, |
| 73 | INPUT_USAGE_KEYCODE_9, |
| 74 | INPUT_USAGE_KEYCODE_STAR, |
| 75 | INPUT_USAGE_KEYCODE_POUND, |
| 76 | INPUT_USAGE_KEYCODE_DPAD_UP, |
| 77 | INPUT_USAGE_KEYCODE_DPAD_DOWN, |
| 78 | INPUT_USAGE_KEYCODE_DPAD_LEFT, |
| 79 | INPUT_USAGE_KEYCODE_DPAD_RIGHT, |
| 80 | INPUT_USAGE_KEYCODE_DPAD_CENTER, |
| 81 | INPUT_USAGE_KEYCODE_VOLUME_UP, |
| 82 | INPUT_USAGE_KEYCODE_VOLUME_DOWN, |
| 83 | INPUT_USAGE_KEYCODE_POWER, |
| 84 | INPUT_USAGE_KEYCODE_CAMERA, |
| 85 | INPUT_USAGE_KEYCODE_CLEAR, |
| 86 | INPUT_USAGE_KEYCODE_A, |
| 87 | INPUT_USAGE_KEYCODE_B, |
| 88 | INPUT_USAGE_KEYCODE_C, |
| 89 | INPUT_USAGE_KEYCODE_D, |
| 90 | INPUT_USAGE_KEYCODE_E, |
| 91 | INPUT_USAGE_KEYCODE_F, |
| 92 | INPUT_USAGE_KEYCODE_G, |
| 93 | INPUT_USAGE_KEYCODE_H, |
| 94 | INPUT_USAGE_KEYCODE_I, |
| 95 | INPUT_USAGE_KEYCODE_J, |
| 96 | INPUT_USAGE_KEYCODE_K, |
| 97 | INPUT_USAGE_KEYCODE_L, |
| 98 | INPUT_USAGE_KEYCODE_M, |
| 99 | INPUT_USAGE_KEYCODE_N, |
| 100 | INPUT_USAGE_KEYCODE_O, |
| 101 | INPUT_USAGE_KEYCODE_P, |
| 102 | INPUT_USAGE_KEYCODE_Q, |
| 103 | INPUT_USAGE_KEYCODE_R, |
| 104 | INPUT_USAGE_KEYCODE_S, |
| 105 | INPUT_USAGE_KEYCODE_T, |
| 106 | INPUT_USAGE_KEYCODE_U, |
| 107 | INPUT_USAGE_KEYCODE_V, |
| 108 | INPUT_USAGE_KEYCODE_W, |
| 109 | INPUT_USAGE_KEYCODE_X, |
| 110 | INPUT_USAGE_KEYCODE_Y, |
| 111 | INPUT_USAGE_KEYCODE_Z, |
| 112 | INPUT_USAGE_KEYCODE_COMMA, |
| 113 | INPUT_USAGE_KEYCODE_PERIOD, |
| 114 | INPUT_USAGE_KEYCODE_ALT_LEFT, |
| 115 | INPUT_USAGE_KEYCODE_ALT_RIGHT, |
| 116 | INPUT_USAGE_KEYCODE_SHIFT_LEFT, |
| 117 | INPUT_USAGE_KEYCODE_SHIFT_RIGHT, |
| 118 | INPUT_USAGE_KEYCODE_TAB, |
| 119 | INPUT_USAGE_KEYCODE_SPACE, |
| 120 | INPUT_USAGE_KEYCODE_SYM, |
| 121 | INPUT_USAGE_KEYCODE_EXPLORER, |
| 122 | INPUT_USAGE_KEYCODE_ENVELOPE, |
| 123 | INPUT_USAGE_KEYCODE_ENTER, |
| 124 | INPUT_USAGE_KEYCODE_DEL, |
| 125 | INPUT_USAGE_KEYCODE_GRAVE, |
| 126 | INPUT_USAGE_KEYCODE_MINUS, |
| 127 | INPUT_USAGE_KEYCODE_EQUALS, |
| 128 | INPUT_USAGE_KEYCODE_LEFT_BRACKET, |
| 129 | INPUT_USAGE_KEYCODE_RIGHT_BRACKET, |
| 130 | INPUT_USAGE_KEYCODE_BACKSLASH, |
| 131 | INPUT_USAGE_KEYCODE_SEMICOLON, |
| 132 | INPUT_USAGE_KEYCODE_APOSTROPHE, |
| 133 | INPUT_USAGE_KEYCODE_SLASH, |
| 134 | INPUT_USAGE_KEYCODE_AT, |
| 135 | INPUT_USAGE_KEYCODE_NUM, |
| 136 | INPUT_USAGE_KEYCODE_HEADSETHOOK, |
| 137 | INPUT_USAGE_KEYCODE_FOCUS, // *Camera* focus |
| 138 | INPUT_USAGE_KEYCODE_PLUS, |
| 139 | INPUT_USAGE_KEYCODE_MENU, |
| 140 | INPUT_USAGE_KEYCODE_NOTIFICATION, |
| 141 | INPUT_USAGE_KEYCODE_SEARCH, |
| 142 | INPUT_USAGE_KEYCODE_MEDIA_PLAY_PAUSE, |
| 143 | INPUT_USAGE_KEYCODE_MEDIA_STOP, |
| 144 | INPUT_USAGE_KEYCODE_MEDIA_NEXT, |
| 145 | INPUT_USAGE_KEYCODE_MEDIA_PREVIOUS, |
| 146 | INPUT_USAGE_KEYCODE_MEDIA_REWIND, |
| 147 | INPUT_USAGE_KEYCODE_MEDIA_FAST_FORWARD, |
| 148 | INPUT_USAGE_KEYCODE_MUTE, |
| 149 | INPUT_USAGE_KEYCODE_PAGE_UP, |
| 150 | INPUT_USAGE_KEYCODE_PAGE_DOWN, |
| 151 | INPUT_USAGE_KEYCODE_PICTSYMBOLS, |
| 152 | INPUT_USAGE_KEYCODE_SWITCH_CHARSET, |
| 153 | INPUT_USAGE_KEYCODE_BUTTON_A, |
| 154 | INPUT_USAGE_KEYCODE_BUTTON_B, |
| 155 | INPUT_USAGE_KEYCODE_BUTTON_C, |
| 156 | INPUT_USAGE_KEYCODE_BUTTON_X, |
| 157 | INPUT_USAGE_KEYCODE_BUTTON_Y, |
| 158 | INPUT_USAGE_KEYCODE_BUTTON_Z, |
| 159 | INPUT_USAGE_KEYCODE_BUTTON_L1, |
| 160 | INPUT_USAGE_KEYCODE_BUTTON_R1, |
| 161 | INPUT_USAGE_KEYCODE_BUTTON_L2, |
| 162 | INPUT_USAGE_KEYCODE_BUTTON_R2, |
| 163 | INPUT_USAGE_KEYCODE_BUTTON_THUMBL, |
| 164 | INPUT_USAGE_KEYCODE_BUTTON_THUMBR, |
| 165 | INPUT_USAGE_KEYCODE_BUTTON_START, |
| 166 | INPUT_USAGE_KEYCODE_BUTTON_SELECT, |
| 167 | INPUT_USAGE_KEYCODE_BUTTON_MODE, |
| 168 | INPUT_USAGE_KEYCODE_ESCAPE, |
| 169 | INPUT_USAGE_KEYCODE_FORWARD_DEL, |
| 170 | INPUT_USAGE_KEYCODE_CTRL_LEFT, |
| 171 | INPUT_USAGE_KEYCODE_CTRL_RIGHT, |
| 172 | INPUT_USAGE_KEYCODE_CAPS_LOCK, |
| 173 | INPUT_USAGE_KEYCODE_SCROLL_LOCK, |
| 174 | INPUT_USAGE_KEYCODE_META_LEFT, |
| 175 | INPUT_USAGE_KEYCODE_META_RIGHT, |
| 176 | INPUT_USAGE_KEYCODE_FUNCTION, |
| 177 | INPUT_USAGE_KEYCODE_SYSRQ, |
| 178 | INPUT_USAGE_KEYCODE_BREAK, |
| 179 | INPUT_USAGE_KEYCODE_MOVE_HOME, |
| 180 | INPUT_USAGE_KEYCODE_MOVE_END, |
| 181 | INPUT_USAGE_KEYCODE_INSERT, |
| 182 | INPUT_USAGE_KEYCODE_FORWARD, |
| 183 | INPUT_USAGE_KEYCODE_MEDIA_PLAY, |
| 184 | INPUT_USAGE_KEYCODE_MEDIA_PAUSE, |
| 185 | INPUT_USAGE_KEYCODE_MEDIA_CLOSE, |
| 186 | INPUT_USAGE_KEYCODE_MEDIA_EJECT, |
| 187 | INPUT_USAGE_KEYCODE_MEDIA_RECORD, |
| 188 | INPUT_USAGE_KEYCODE_F1, |
| 189 | INPUT_USAGE_KEYCODE_F2, |
| 190 | INPUT_USAGE_KEYCODE_F3, |
| 191 | INPUT_USAGE_KEYCODE_F4, |
| 192 | INPUT_USAGE_KEYCODE_F5, |
| 193 | INPUT_USAGE_KEYCODE_F6, |
| 194 | INPUT_USAGE_KEYCODE_F7, |
| 195 | INPUT_USAGE_KEYCODE_F8, |
| 196 | INPUT_USAGE_KEYCODE_F9, |
| 197 | INPUT_USAGE_KEYCODE_F10, |
| 198 | INPUT_USAGE_KEYCODE_F11, |
| 199 | INPUT_USAGE_KEYCODE_F12, |
| 200 | INPUT_USAGE_KEYCODE_NUM_LOCK, |
| 201 | INPUT_USAGE_KEYCODE_NUMPAD_0, |
| 202 | INPUT_USAGE_KEYCODE_NUMPAD_1, |
| 203 | INPUT_USAGE_KEYCODE_NUMPAD_2, |
| 204 | INPUT_USAGE_KEYCODE_NUMPAD_3, |
| 205 | INPUT_USAGE_KEYCODE_NUMPAD_4, |
| 206 | INPUT_USAGE_KEYCODE_NUMPAD_5, |
| 207 | INPUT_USAGE_KEYCODE_NUMPAD_6, |
| 208 | INPUT_USAGE_KEYCODE_NUMPAD_7, |
| 209 | INPUT_USAGE_KEYCODE_NUMPAD_8, |
| 210 | INPUT_USAGE_KEYCODE_NUMPAD_9, |
| 211 | INPUT_USAGE_KEYCODE_NUMPAD_DIVIDE, |
| 212 | INPUT_USAGE_KEYCODE_NUMPAD_MULTIPLY, |
| 213 | INPUT_USAGE_KEYCODE_NUMPAD_SUBTRACT, |
| 214 | INPUT_USAGE_KEYCODE_NUMPAD_ADD, |
| 215 | INPUT_USAGE_KEYCODE_NUMPAD_DOT, |
| 216 | INPUT_USAGE_KEYCODE_NUMPAD_COMMA, |
| 217 | INPUT_USAGE_KEYCODE_NUMPAD_ENTER, |
| 218 | INPUT_USAGE_KEYCODE_NUMPAD_EQUALS, |
| 219 | INPUT_USAGE_KEYCODE_NUMPAD_LEFT_PAREN, |
| 220 | INPUT_USAGE_KEYCODE_NUMPAD_RIGHT_PAREN, |
| 221 | INPUT_USAGE_KEYCODE_VOLUME_MUTE, |
| 222 | INPUT_USAGE_KEYCODE_INFO, |
| 223 | INPUT_USAGE_KEYCODE_CHANNEL_UP, |
| 224 | INPUT_USAGE_KEYCODE_CHANNEL_DOWN, |
| 225 | INPUT_USAGE_KEYCODE_ZOOM_IN, |
| 226 | INPUT_USAGE_KEYCODE_ZOOM_OUT, |
| 227 | INPUT_USAGE_KEYCODE_TV, |
| 228 | INPUT_USAGE_KEYCODE_WINDOW, |
| 229 | INPUT_USAGE_KEYCODE_GUIDE, |
| 230 | INPUT_USAGE_KEYCODE_DVR, |
| 231 | INPUT_USAGE_KEYCODE_BOOKMARK, |
| 232 | INPUT_USAGE_KEYCODE_CAPTIONS, |
| 233 | INPUT_USAGE_KEYCODE_SETTINGS, |
| 234 | INPUT_USAGE_KEYCODE_TV_POWER, |
| 235 | INPUT_USAGE_KEYCODE_TV_INPUT, |
| 236 | INPUT_USAGE_KEYCODE_STB_POWER, |
| 237 | INPUT_USAGE_KEYCODE_STB_INPUT, |
| 238 | INPUT_USAGE_KEYCODE_AVR_POWER, |
| 239 | INPUT_USAGE_KEYCODE_AVR_INPUT, |
| 240 | INPUT_USAGE_KEYCODE_PROG_RED, |
| 241 | INPUT_USAGE_KEYCODE_PROG_GREEN, |
| 242 | INPUT_USAGE_KEYCODE_PROG_YELLOW, |
| 243 | INPUT_USAGE_KEYCODE_PROG_BLUE, |
| 244 | INPUT_USAGE_KEYCODE_APP_SWITCH, |
| 245 | INPUT_USAGE_KEYCODE_BUTTON_1, |
| 246 | INPUT_USAGE_KEYCODE_BUTTON_2, |
| 247 | INPUT_USAGE_KEYCODE_BUTTON_3, |
| 248 | INPUT_USAGE_KEYCODE_BUTTON_4, |
| 249 | INPUT_USAGE_KEYCODE_BUTTON_5, |
| 250 | INPUT_USAGE_KEYCODE_BUTTON_6, |
| 251 | INPUT_USAGE_KEYCODE_BUTTON_7, |
| 252 | INPUT_USAGE_KEYCODE_BUTTON_8, |
| 253 | INPUT_USAGE_KEYCODE_BUTTON_9, |
| 254 | INPUT_USAGE_KEYCODE_BUTTON_10, |
| 255 | INPUT_USAGE_KEYCODE_BUTTON_11, |
| 256 | INPUT_USAGE_KEYCODE_BUTTON_12, |
| 257 | INPUT_USAGE_KEYCODE_BUTTON_13, |
| 258 | INPUT_USAGE_KEYCODE_BUTTON_14, |
| 259 | INPUT_USAGE_KEYCODE_BUTTON_15, |
| 260 | INPUT_USAGE_KEYCODE_BUTTON_16, |
| 261 | INPUT_USAGE_KEYCODE_LANGUAGE_SWITCH, |
| 262 | INPUT_USAGE_KEYCODE_MANNER_MODE, |
| 263 | INPUT_USAGE_KEYCODE_3D_MODE, |
| 264 | INPUT_USAGE_KEYCODE_CONTACTS, |
| 265 | INPUT_USAGE_KEYCODE_CALENDAR, |
| 266 | INPUT_USAGE_KEYCODE_MUSIC, |
| 267 | INPUT_USAGE_KEYCODE_CALCULATOR, |
| 268 | INPUT_USAGE_KEYCODE_ZENKAKU_HANKAKU, |
| 269 | INPUT_USAGE_KEYCODE_EISU, |
| 270 | INPUT_USAGE_KEYCODE_MUHENKAN, |
| 271 | INPUT_USAGE_KEYCODE_HENKAN, |
| 272 | INPUT_USAGE_KEYCODE_KATAKANA_HIRAGANA, |
| 273 | INPUT_USAGE_KEYCODE_YEN, |
| 274 | INPUT_USAGE_KEYCODE_RO, |
| 275 | INPUT_USAGE_KEYCODE_KANA, |
| 276 | INPUT_USAGE_KEYCODE_ASSIST, |
| 277 | INPUT_USAGE_KEYCODE_BRIGHTNESS_DOWN, |
| 278 | INPUT_USAGE_KEYCODE_BRIGHTNESS_UP, |
| 279 | INPUT_USAGE_KEYCODE_MEDIA_AUDIO_TRACK, |
| 280 | INPUT_USAGE_KEYCODE_SLEEP, |
| 281 | INPUT_USAGE_KEYCODE_WAKEUP, |
| 282 | INPUT_USAGE_KEYCODE_PAIRING, |
| 283 | INPUT_USAGE_KEYCODE_MEDIA_TOP_MENU, |
| 284 | INPUT_USAGE_KEYCODE_11, |
| 285 | INPUT_USAGE_KEYCODE_12, |
| 286 | INPUT_USAGE_KEYCODE_LAST_CHANNEL, |
| 287 | INPUT_USAGE_KEYCODE_TV_DATA_SERVICE, |
| 288 | INPUT_USAGE_KEYCODE_VOICE_ASSIST, |
| 289 | INPUT_USAGE_KEYCODE_TV_RADIO_SERVICE, |
| 290 | INPUT_USAGE_KEYCODE_TV_TELETEXT, |
| 291 | INPUT_USAGE_KEYCODE_TV_NUMBER_ENTRY, |
| 292 | INPUT_USAGE_KEYCODE_TV_TERRESTRIAL_ANALOG, |
| 293 | INPUT_USAGE_KEYCODE_TV_TERRESTRIAL_DIGITAL, |
| 294 | INPUT_USAGE_KEYCODE_TV_SATELLITE, |
| 295 | INPUT_USAGE_KEYCODE_TV_SATELLITE_BS, |
| 296 | INPUT_USAGE_KEYCODE_TV_SATELLITE_CS, |
| 297 | INPUT_USAGE_KEYCODE_TV_SATELLITE_SERVICE, |
| 298 | INPUT_USAGE_KEYCODE_TV_NETWORK, |
| 299 | INPUT_USAGE_KEYCODE_TV_ANTENNA_CABLE, |
| 300 | INPUT_USAGE_KEYCODE_TV_INPUT_HDMI_1, |
| 301 | INPUT_USAGE_KEYCODE_TV_INPUT_HDMI_2, |
| 302 | INPUT_USAGE_KEYCODE_TV_INPUT_HDMI_3, |
| 303 | INPUT_USAGE_KEYCODE_TV_INPUT_HDMI_4, |
| 304 | INPUT_USAGE_KEYCODE_TV_INPUT_COMPOSITE_1, |
| 305 | INPUT_USAGE_KEYCODE_TV_INPUT_COMPOSITE_2, |
| 306 | INPUT_USAGE_KEYCODE_TV_INPUT_COMPONENT_1, |
| 307 | INPUT_USAGE_KEYCODE_TV_INPUT_COMPONENT_2, |
| 308 | INPUT_USAGE_KEYCODE_TV_INPUT_VGA_1, |
| 309 | INPUT_USAGE_KEYCODE_TV_AUDIO_DESCRIPTION, |
| 310 | INPUT_USAGE_KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP, |
| 311 | INPUT_USAGE_KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN, |
| 312 | INPUT_USAGE_KEYCODE_TV_ZOOM_MODE, |
| 313 | INPUT_USAGE_KEYCODE_TV_CONTENTS_MENU, |
| 314 | INPUT_USAGE_KEYCODE_TV_MEDIA_CONTEXT_MENU, |
| 315 | INPUT_USAGE_KEYCODE_TV_TIMER_PROGRAMMING, |
| 316 | INPUT_USAGE_KEYCODE_HELP, |
| 317 | |
| 318 | // axes |
| 319 | INPUT_USAGE_AXIS_X, |
| 320 | INPUT_USAGE_AXIS_Y, |
| 321 | INPUT_USAGE_AXIS_PRESSURE, |
| 322 | INPUT_USAGE_AXIS_SIZE, |
| 323 | INPUT_USAGE_AXIS_TOUCH_MAJOR, |
| 324 | INPUT_USAGE_AXIS_TOUCH_MINOR, |
| 325 | INPUT_USAGE_AXIS_TOOL_MAJOR, |
| 326 | INPUT_USAGE_AXIS_TOOL_MINOR, |
| 327 | INPUT_USAGE_AXIS_ORIENTATION, |
| 328 | INPUT_USAGE_AXIS_VSCROLL, |
| 329 | INPUT_USAGE_AXIS_HSCROLL, |
| 330 | INPUT_USAGE_AXIS_Z, |
| 331 | INPUT_USAGE_AXIS_RX, |
| 332 | INPUT_USAGE_AXIS_RY, |
| 333 | INPUT_USAGE_AXIS_RZ, |
| 334 | INPUT_USAGE_AXIS_HAT_X, |
| 335 | INPUT_USAGE_AXIS_HAT_Y, |
| 336 | INPUT_USAGE_AXIS_LTRIGGER, |
| 337 | INPUT_USAGE_AXIS_RTRIGGER, |
| 338 | INPUT_USAGE_AXIS_THROTTLE, |
| 339 | INPUT_USAGE_AXIS_RUDDER, |
| 340 | INPUT_USAGE_AXIS_WHEEL, |
| 341 | INPUT_USAGE_AXIS_GAS, |
| 342 | INPUT_USAGE_AXIS_BRAKE, |
| 343 | INPUT_USAGE_AXIS_DISTANCE, |
| 344 | INPUT_USAGE_AXIS_TILT, |
| 345 | INPUT_USAGE_AXIS_GENERIC_1, |
| 346 | INPUT_USAGE_AXIS_GENERIC_2, |
| 347 | INPUT_USAGE_AXIS_GENERIC_3, |
| 348 | INPUT_USAGE_AXIS_GENERIC_4, |
| 349 | INPUT_USAGE_AXIS_GENERIC_5, |
| 350 | INPUT_USAGE_AXIS_GENERIC_6, |
| 351 | INPUT_USAGE_AXIS_GENERIC_7, |
| 352 | INPUT_USAGE_AXIS_GENERIC_8, |
| 353 | INPUT_USAGE_AXIS_GENERIC_9, |
| 354 | INPUT_USAGE_AXIS_GENERIC_10, |
| 355 | INPUT_USAGE_AXIS_GENERIC_11, |
| 356 | INPUT_USAGE_AXIS_GENERIC_12, |
| 357 | INPUT_USAGE_AXIS_GENERIC_13, |
| 358 | INPUT_USAGE_AXIS_GENERIC_14, |
| 359 | INPUT_USAGE_AXIS_GENERIC_15, |
| 360 | INPUT_USAGE_AXIS_GENERIC_16, |
| 361 | |
| 362 | // leds |
| 363 | INPUT_USAGE_LED_NUM_LOCK, |
| 364 | INPUT_USAGE_LED_CAPS_LOCK, |
| 365 | INPUT_USAGE_LED_SCROLL_LOCK, |
| 366 | INPUT_USAGE_LED_COMPOSE, |
| 367 | INPUT_USAGE_LED_KANA, |
| 368 | INPUT_USAGE_LED_SLEEP, |
| 369 | INPUT_USAGE_LED_SUSPEND, |
| 370 | INPUT_USAGE_LED_MUTE, |
| 371 | INPUT_USAGE_LED_MISC, |
| 372 | INPUT_USAGE_LED_MAIL, |
| 373 | INPUT_USAGE_LED_CHARGING, |
| 374 | INPUT_USAGE_LED_CONTROLLER_1, |
| 375 | INPUT_USAGE_LED_CONTROLLER_2, |
| 376 | INPUT_USAGE_LED_CONTROLLER_3, |
| 377 | INPUT_USAGE_LED_CONTROLLER_4, |
Tim Kilbourn | 4f3145d | 2015-05-04 17:26:30 -0700 | [diff] [blame^] | 378 | |
| 379 | // switches |
| 380 | INPUT_USAGE_SWITCH_UNKNOWN, |
| 381 | INPUT_USAGE_SWITCH_LID, |
| 382 | INPUT_USAGE_SWITCH_KEYPAD_SLIDE, |
| 383 | INPUT_USAGE_SWITCH_HEADPHONE_INSERT, |
| 384 | INPUT_USAGE_SWITCH_MICROPHONE_INSERT, |
| 385 | INPUT_USAGE_SWITCH_LINEOUT_INSERT, |
| 386 | INPUT_USAGE_SWITCH_CAMERA_LENS_COVER, |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 387 | } input_usage_t; |
| 388 | |
Tim Kilbourn | 4f3145d | 2015-05-04 17:26:30 -0700 | [diff] [blame^] | 389 | typedef enum input_collection_id { |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 390 | INPUT_COLLECTION_ID_TOUCH, |
| 391 | INPUT_COLLECTION_ID_KEYBOARD, |
| 392 | INPUT_COLLECTION_ID_MOUSE, |
| 393 | INPUT_COLLECTION_ID_TOUCHPAD, |
Tim Kilbourn | 4f3145d | 2015-05-04 17:26:30 -0700 | [diff] [blame^] | 394 | INPUT_COLLECTION_ID_SWITCH, |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 395 | // etc |
| 396 | } input_collection_id_t; |
| 397 | |
| 398 | typedef struct input_message input_message_t; |
| 399 | |
| 400 | typedef struct input_host_callbacks { |
| 401 | |
| 402 | /** |
| 403 | * Creates a device identifier with the given properties. |
| 404 | * The unique ID should be a string that precisely identifies a given piece of hardware. For |
| 405 | * example, an input device connected via Bluetooth could use its MAC address as its unique ID. |
| 406 | */ |
| 407 | input_device_identifier_t* (*create_device_identifier)(input_host_t* host, |
| 408 | const char* name, int32_t product_id, int32_t vendor_id, |
| 409 | input_bus_t bus, const char* unique_id); |
| 410 | |
| 411 | /** |
| 412 | * Allocates the device definition which will describe the input capabilities of a device. A |
| 413 | * device definition may be used to register as many devices as desired. |
| 414 | */ |
| 415 | input_device_definition_t* (*create_device_definition)(input_host_t* host); |
| 416 | |
| 417 | /** |
| 418 | * Allocate either an input report, which the HAL will use to tell the host of incoming input |
| 419 | * events, or an output report, which the host will use to tell the HAL of desired state |
| 420 | * changes (e.g. setting an LED). |
| 421 | */ |
| 422 | input_report_definition_t* (*create_input_report_definition)(input_host_t* host); |
| 423 | input_report_definition_t* (*create_output_report_definition)(input_host_t* host); |
| 424 | |
| 425 | /** |
Tim Kilbourn | 4f3145d | 2015-05-04 17:26:30 -0700 | [diff] [blame^] | 426 | * Frees the report definition. |
| 427 | */ |
| 428 | void (*free_report_definition)(input_host_t* host, input_report_definition_t* report_def); |
| 429 | |
| 430 | /** |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 431 | * Append the report to the given input device. |
| 432 | */ |
| 433 | void (*input_device_definition_add_report)(input_host_t* host, |
| 434 | input_device_definition_t* d, input_report_definition_t* r); |
| 435 | |
| 436 | /** |
| 437 | * Add a collection with the given arity and ID. A collection describes a set |
| 438 | * of logically grouped properties such as the X and Y coordinates of a single finger touch or |
| 439 | * the set of keys on a keyboard. The arity declares how many repeated instances of this |
| 440 | * collection will appear in whatever report it is attached to. The ID describes the type of |
| 441 | * grouping being represented by the collection. For example, a touchscreen capable of |
| 442 | * reporting up to 2 fingers simultaneously might have a collection with the X and Y |
| 443 | * coordinates, an arity of 2, and an ID of INPUT_COLLECTION_USAGE_TOUCHSCREEN. Any given ID |
| 444 | * may only be present once for a given report. |
| 445 | */ |
| 446 | void (*input_report_definition_add_collection)(input_host_t* host, |
| 447 | input_report_definition_t* report, input_collection_id_t id, int32_t arity); |
| 448 | |
| 449 | /** |
| 450 | * Declare an int usage with the given properties. The report and collection defines where the |
| 451 | * usage is being declared. |
| 452 | */ |
| 453 | void (*input_report_definition_declare_usage_int)(input_host_t* host, |
| 454 | input_report_definition_t* report, input_collection_id_t id, |
| 455 | input_usage_t usage, int32_t min, int32_t max, float resolution); |
| 456 | |
| 457 | /** |
| 458 | * Declare a set of boolean usages with the given properties. The report and collection |
| 459 | * defines where the usages are being declared. |
| 460 | */ |
| 461 | void (*input_report_definition_declare_usages_bool)(input_host_t* host, |
| 462 | input_report_definition_t* report, input_collection_id_t id, |
| 463 | input_usage_t* usage, size_t usage_count); |
| 464 | |
| 465 | |
| 466 | /** |
| 467 | * Register a given input device definition. This notifies the host that an input device has |
| 468 | * been connected and gives a description of all its capabilities. |
| 469 | */ |
| 470 | input_device_handle_t* (*register_device)(input_host_t* host, |
| 471 | input_device_identifier_t* id, input_device_definition_t* d); |
| 472 | |
| 473 | /** Unregister the given device */ |
| 474 | void (*unregister_device)(input_host_t* host, input_device_handle_t* handle); |
| 475 | |
| 476 | /** |
| 477 | * Allocate a report that will contain all of the state as described by the given report. |
| 478 | */ |
| 479 | input_report_t* (*input_allocate_report)(input_host_t* host, input_report_definition_t* r); |
| 480 | |
Tim Kilbourn | aaf6b26 | 2015-02-27 15:01:50 -0800 | [diff] [blame] | 481 | /** |
| 482 | * Add an int usage value to a report. |
| 483 | */ |
| 484 | void (*input_report_set_usage_int)(input_host_t* host, input_report_t* r, |
| 485 | input_collection_id_t id, input_usage_t usage, int32_t value, int32_t arity_index); |
| 486 | |
| 487 | /** |
| 488 | * Add a boolean usage value to a report. |
| 489 | */ |
| 490 | void (*input_report_set_usage_bool)(input_host_t* host, input_report_t* r, |
| 491 | input_collection_id_t id, input_usage_t usage, bool value, int32_t arity_index); |
| 492 | |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 493 | void (*report_event)(input_host_t* host, input_device_handle_t* d, input_report_t* report); |
Tim Kilbourn | 6fa8248 | 2015-04-06 13:49:40 -0700 | [diff] [blame] | 494 | |
| 495 | /** |
| 496 | * Retrieve the set of properties for the device. The returned |
| 497 | * input_property_map_t* may be used to query specific properties via the |
| 498 | * input_get_device_property callback. |
| 499 | */ |
| 500 | input_property_map_t* (*input_get_device_property_map)(input_host_t* host, |
| 501 | input_device_identifier_t* id); |
| 502 | /** |
| 503 | * Retrieve a property for the device with the given key. Returns NULL if |
| 504 | * the key does not exist, or an input_property_t* that must be freed using |
| 505 | * input_free_device_property(). Using an input_property_t after the |
| 506 | * corresponding input_property_map_t is freed is undefined. |
| 507 | */ |
| 508 | input_property_t* (*input_get_device_property)(input_host_t* host, |
| 509 | input_property_map_t* map, const char* key); |
| 510 | |
| 511 | /** |
| 512 | * Get the key for the input property. Returns NULL if the property is NULL. |
| 513 | * The returned const char* is owned by the input_property_t. |
| 514 | */ |
| 515 | const char* (*input_get_property_key)(input_host_t* host, input_property_t* property); |
| 516 | |
| 517 | /** |
| 518 | * Get the value for the input property. Returns NULL if the property is |
| 519 | * NULL. The returned const char* is owned by the input_property_t. |
| 520 | */ |
| 521 | const char* (*input_get_property_value)(input_host_t* host, input_property_t* property); |
| 522 | |
| 523 | /** |
| 524 | * Frees the input_property_t*. |
| 525 | */ |
| 526 | void (*input_free_device_property)(input_host_t* host, input_property_t* property); |
| 527 | |
| 528 | /** |
| 529 | * Frees the input_property_map_t*. |
| 530 | */ |
| 531 | void (*input_free_device_property_map)(input_host_t* host, input_property_map_t* map); |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 532 | } input_host_callbacks_t; |
| 533 | |
| 534 | typedef struct input_module input_module_t; |
| 535 | |
| 536 | struct input_module { |
| 537 | /** |
| 538 | * Common methods of the input module. This *must* be the first member |
| 539 | * of input_module as users of this structure will cast a hw_module_t |
| 540 | * to input_module pointer in contexts where it's known |
| 541 | * the hw_module_t references a input_module. |
| 542 | */ |
| 543 | struct hw_module_t common; |
| 544 | |
| 545 | /** |
| 546 | * Initialize the module with host callbacks. At this point the HAL should start up whatever |
| 547 | * infrastructure it needs to in order to process input events. |
| 548 | */ |
| 549 | void (*init)(const input_module_t* module, input_host_t* host, input_host_callbacks_t cb); |
| 550 | |
| 551 | /** |
| 552 | * Sends an output report with a new set of state the host would like the given device to |
| 553 | * assume. |
| 554 | */ |
Tim Kilbourn | 73475a4 | 2015-02-13 10:35:20 -0800 | [diff] [blame] | 555 | void (*notify_report)(const input_module_t* module, input_report_t* report); |
Michael Wright | 5113aff | 2015-02-13 17:31:41 -0800 | [diff] [blame] | 556 | }; |
| 557 | |
| 558 | static inline int input_open(const struct hw_module_t** module, const char* type) { |
| 559 | return hw_get_module_by_class(INPUT_HARDWARE_MODULE_ID, type, module); |
| 560 | } |
| 561 | |
| 562 | __END_DECLS |
| 563 | |
| 564 | #endif /* ANDROID_INCLUDE_HARDWARE_INPUT_H */ |