1 /****************************************************************************** 2 * 3 * Copyright (C) 2009-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 #ifndef __UINPUT_H 20 #define __UINPUT_H 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 #include <stdint.h> 27 #include <sys/time.h> 28 #include <sys/ioctl.h> 29 30 /******************************************************************************* 31 ** Constants & Macros 32 ********************************************************************************/ 33 34 /* Events */ 35 36 #define EV_SYN 0x00 37 #define EV_KEY 0x01 38 #define EV_REL 0x02 39 #define EV_ABS 0x03 40 #define EV_MSC 0x04 41 #define EV_LED 0x11 42 #define EV_SND 0x12 43 #define EV_REP 0x14 44 #define EV_FF 0x15 45 #define EV_PWR 0x16 46 #define EV_FF_STATUS 0x17 47 #define EV_MAX 0x1f 48 49 /* Synchronization events */ 50 51 #define SYN_REPORT 0 52 #define SYN_CONFIG 1 53 54 /* Keys and buttons */ 55 56 #define KEY_RESERVED 0 57 #define KEY_ESC 1 58 #define KEY_1 2 59 #define KEY_2 3 60 #define KEY_3 4 61 #define KEY_4 5 62 #define KEY_5 6 63 #define KEY_6 7 64 #define KEY_7 8 65 #define KEY_8 9 66 #define KEY_9 10 67 #define KEY_0 11 68 #define KEY_MINUS 12 69 #define KEY_EQUAL 13 70 #define KEY_BACKSPACE 14 71 #define KEY_TAB 15 72 #define KEY_Q 16 73 #define KEY_W 17 74 #define KEY_E 18 75 #define KEY_R 19 76 #define KEY_T 20 77 #define KEY_Y 21 78 #define KEY_U 22 79 #define KEY_I 23 80 #define KEY_O 24 81 #define KEY_P 25 82 #define KEY_LEFTBRACE 26 83 #define KEY_RIGHTBRACE 27 84 #define KEY_ENTER 28 85 #define KEY_LEFTCTRL 29 86 #define KEY_A 30 87 #define KEY_S 31 88 #define KEY_D 32 89 #define KEY_F 33 90 #define KEY_G 34 91 #define KEY_H 35 92 #define KEY_J 36 93 #define KEY_K 37 94 #define KEY_L 38 95 #define KEY_SEMICOLON 39 96 #define KEY_APOSTROPHE 40 97 #define KEY_GRAVE 41 98 #define KEY_LEFTSHIFT 42 99 #define KEY_BACKSLASH 43 100 #define KEY_Z 44 101 #define KEY_X 45 102 #define KEY_C 46 103 #define KEY_V 47 104 #define KEY_B 48 105 #define KEY_N 49 106 #define KEY_M 50 107 #define KEY_COMMA 51 108 #define KEY_DOT 52 109 #define KEY_SLASH 53 110 #define KEY_RIGHTSHIFT 54 111 #define KEY_KPASTERISK 55 112 #define KEY_LEFTALT 56 113 #define KEY_SPACE 57 114 #define KEY_CAPSLOCK 58 115 #define KEY_F1 59 116 #define KEY_F2 60 117 #define KEY_F3 61 118 #define KEY_F4 62 119 #define KEY_F5 63 120 #define KEY_F6 64 121 #define KEY_F7 65 122 #define KEY_F8 66 123 #define KEY_F9 67 124 #define KEY_F10 68 125 #define KEY_NUMLOCK 69 126 #define KEY_SCROLLLOCK 70 127 #define KEY_KP7 71 128 #define KEY_KP8 72 129 #define KEY_KP9 73 130 #define KEY_KPMINUS 74 131 #define KEY_KP4 75 132 #define KEY_KP5 76 133 #define KEY_KP6 77 134 #define KEY_KPPLUS 78 135 #define KEY_KP1 79 136 #define KEY_KP2 80 137 #define KEY_KP3 81 138 #define KEY_KP0 82 139 #define KEY_KPDOT 83 140 #define KEY_103RD 84 141 #define KEY_F13 85 142 #define KEY_102ND 86 143 #define KEY_F11 87 144 #define KEY_F12 88 145 #define KEY_F14 89 146 #define KEY_F15 90 147 #define KEY_F16 91 148 #define KEY_F17 92 149 #define KEY_F18 93 150 #define KEY_F19 94 151 #define KEY_F20 95 152 #define KEY_KPENTER 96 153 #define KEY_RIGHTCTRL 97 154 #define KEY_KPSLASH 98 155 #define KEY_SYSRQ 99 156 #define KEY_RIGHTALT 100 157 #define KEY_LINEFEED 101 158 #define KEY_HOME 102 159 #define KEY_UP 103 160 #define KEY_PAGEUP 104 161 #define KEY_LEFT 105 162 #define KEY_RIGHT 106 163 #define KEY_END 107 164 #define KEY_DOWN 108 165 #define KEY_PAGEDOWN 109 166 #define KEY_INSERT 110 167 #define KEY_DELETE 111 168 #define KEY_MACRO 112 169 #define KEY_MUTE 113 170 #define KEY_VOLUMEDOWN 114 171 #define KEY_VOLUMEUP 115 172 #define KEY_POWER 116 173 #define KEY_KPEQUAL 117 174 #define KEY_KPPLUSMINUS 118 175 #define KEY_PAUSE 119 176 #define KEY_F21 120 177 #define KEY_F22 121 178 #define KEY_F23 122 179 #define KEY_F24 123 180 #define KEY_KPCOMMA 124 181 #define KEY_LEFTMETA 125 182 #define KEY_RIGHTMETA 126 183 #define KEY_COMPOSE 127 184 185 #define KEY_STOP 128 186 #define KEY_AGAIN 129 187 #define KEY_PROPS 130 188 #define KEY_UNDO 131 189 #define KEY_FRONT 132 190 #define KEY_COPY 133 191 #define KEY_OPEN 134 192 #define KEY_PASTE 135 193 #define KEY_FIND 136 194 #define KEY_CUT 137 195 #define KEY_HELP 138 196 #define KEY_MENU 139 197 #define KEY_CALC 140 198 #define KEY_SETUP 141 199 #define KEY_SLEEP 142 200 #define KEY_WAKEUP 143 201 #define KEY_FILE 144 202 #define KEY_SENDFILE 145 203 #define KEY_DELETEFILE 146 204 #define KEY_XFER 147 205 #define KEY_PROG1 148 206 #define KEY_PROG2 149 207 #define KEY_WWW 150 208 #define KEY_MSDOS 151 209 #define KEY_COFFEE 152 210 #define KEY_DIRECTION 153 211 #define KEY_CYCLEWINDOWS 154 212 #define KEY_MAIL 155 213 #define KEY_BOOKMARKS 156 214 #define KEY_COMPUTER 157 215 #define KEY_BACK 158 216 #define KEY_FORWARD 159 217 #define KEY_CLOSECD 160 218 #define KEY_EJECTCD 161 219 #define KEY_EJECTCLOSECD 162 220 #define KEY_NEXTSONG 163 221 #define KEY_PLAYPAUSE 164 222 #define KEY_PREVIOUSSONG 165 223 #define KEY_STOPCD 166 224 #define KEY_RECORD 167 225 #define KEY_REWIND 168 226 #define KEY_PHONE 169 227 #define KEY_ISO 170 228 #define KEY_CONFIG 171 229 #define KEY_HOMEPAGE 172 230 #define KEY_REFRESH 173 231 #define KEY_EXIT 174 232 #define KEY_MOVE 175 233 #define KEY_EDIT 176 234 #define KEY_SCROLLUP 177 235 #define KEY_SCROLLDOWN 178 236 #define KEY_KPLEFTPAREN 179 237 #define KEY_KPRIGHTPAREN 180 238 239 #define KEY_INTL1 181 240 #define KEY_INTL2 182 241 #define KEY_INTL3 183 242 #define KEY_INTL4 184 243 #define KEY_INTL5 185 244 #define KEY_INTL6 186 245 #define KEY_INTL7 187 246 #define KEY_INTL8 188 247 #define KEY_INTL9 189 248 #define KEY_LANG1 190 249 #define KEY_LANG2 191 250 #define KEY_LANG3 192 251 #define KEY_LANG4 193 252 #define KEY_LANG5 194 253 #define KEY_LANG6 195 254 #define KEY_LANG7 196 255 #define KEY_LANG8 197 256 #define KEY_LANG9 198 257 258 #define KEY_PLAYCD 200 259 #define KEY_PAUSECD 201 260 #define KEY_PROG3 202 261 #define KEY_PROG4 203 262 #define KEY_SUSPEND 205 263 #define KEY_CLOSE 206 264 #define KEY_PLAY 207 265 266 #define KEY_UNKNOWN 220 267 268 #define KEY_BRIGHTNESSDOWN 224 269 #define KEY_BRIGHTNESSUP 225 270 271 #define BTN_MISC 0x100 272 #define BTN_0 0x100 273 #define BTN_1 0x101 274 #define BTN_2 0x102 275 #define BTN_3 0x103 276 #define BTN_4 0x104 277 #define BTN_5 0x105 278 #define BTN_6 0x106 279 #define BTN_7 0x107 280 #define BTN_8 0x108 281 #define BTN_9 0x109 282 283 #define BTN_MOUSE 0x110 284 #define BTN_LEFT 0x110 285 #define BTN_RIGHT 0x111 286 #define BTN_MIDDLE 0x112 287 #define BTN_SIDE 0x113 288 #define BTN_EXTRA 0x114 289 #define BTN_FORWARD 0x115 290 #define BTN_BACK 0x116 291 #define BTN_TASK 0x117 292 293 #define BTN_JOYSTICK 0x120 294 #define BTN_TRIGGER 0x120 295 #define BTN_THUMB 0x121 296 #define BTN_THUMB2 0x122 297 #define BTN_TOP 0x123 298 #define BTN_TOP2 0x124 299 #define BTN_PINKIE 0x125 300 #define BTN_BASE 0x126 301 #define BTN_BASE2 0x127 302 #define BTN_BASE3 0x128 303 #define BTN_BASE4 0x129 304 #define BTN_BASE5 0x12a 305 #define BTN_BASE6 0x12b 306 #define BTN_DEAD 0x12f 307 308 #define BTN_GAMEPAD 0x130 309 #define BTN_A 0x130 310 #define BTN_B 0x131 311 #define BTN_C 0x132 312 #define BTN_X 0x133 313 #define BTN_Y 0x134 314 #define BTN_Z 0x135 315 #define BTN_TL 0x136 316 #define BTN_TR 0x137 317 #define BTN_TL2 0x138 318 #define BTN_TR2 0x139 319 #define BTN_SELECT 0x13a 320 #define BTN_START 0x13b 321 #define BTN_MODE 0x13c 322 #define BTN_THUMBL 0x13d 323 #define BTN_THUMBR 0x13e 324 325 #define BTN_DIGI 0x140 326 #define BTN_TOOL_PEN 0x140 327 #define BTN_TOOL_RUBBER 0x141 328 #define BTN_TOOL_BRUSH 0x142 329 #define BTN_TOOL_PENCIL 0x143 330 #define BTN_TOOL_AIRBRUSH 0x144 331 #define BTN_TOOL_FINGER 0x145 332 #define BTN_TOOL_MOUSE 0x146 333 #define BTN_TOOL_LENS 0x147 334 #define BTN_TOUCH 0x14a 335 #define BTN_STYLUS 0x14b 336 #define BTN_STYLUS2 0x14c 337 #define BTN_TOOL_DOUBLETAP 0x14d 338 #define BTN_TOOL_TRIPLETAP 0x14e 339 340 #define BTN_WHEEL 0x150 341 #define BTN_GEAR_DOWN 0x150 342 #define BTN_GEAR_UP 0x151 343 344 #define KEY_OK 0x160 345 #define KEY_SELECT 0x161 346 #define KEY_GOTO 0x162 347 #define KEY_CLEAR 0x163 348 #define KEY_POWER2 0x164 349 #define KEY_OPTION 0x165 350 #define KEY_INFO 0x166 351 #define KEY_TIME 0x167 352 #define KEY_VENDOR 0x168 353 #define KEY_ARCHIVE 0x169 354 #define KEY_PROGRAM 0x16a 355 #define KEY_CHANNEL 0x16b 356 #define KEY_FAVORITES 0x16c 357 #define KEY_EPG 0x16d 358 #define KEY_PVR 0x16e 359 #define KEY_MHP 0x16f 360 #define KEY_LANGUAGE 0x170 361 #define KEY_TITLE 0x171 362 #define KEY_SUBTITLE 0x172 363 #define KEY_ANGLE 0x173 364 #define KEY_ZOOM 0x174 365 #define KEY_MODE 0x175 366 #define KEY_KEYBOARD 0x176 367 #define KEY_SCREEN 0x177 368 #define KEY_PC 0x178 369 #define KEY_TV 0x179 370 #define KEY_TV2 0x17a 371 #define KEY_VCR 0x17b 372 #define KEY_VCR2 0x17c 373 #define KEY_SAT 0x17d 374 #define KEY_SAT2 0x17e 375 #define KEY_CD 0x17f 376 #define KEY_TAPE 0x180 377 #define KEY_RADIO 0x181 378 #define KEY_TUNER 0x182 379 #define KEY_PLAYER 0x183 380 #define KEY_TEXT 0x184 381 #define KEY_DVD 0x185 382 #define KEY_AUX 0x186 383 #define KEY_MP3 0x187 384 #define KEY_AUDIO 0x188 385 #define KEY_VIDEO 0x189 386 #define KEY_DIRECTORY 0x18a 387 #define KEY_LIST 0x18b 388 #define KEY_MEMO 0x18c 389 #define KEY_CALENDAR 0x18d 390 #define KEY_RED 0x18e 391 #define KEY_GREEN 0x18f 392 #define KEY_YELLOW 0x190 393 #define KEY_BLUE 0x191 394 #define KEY_CHANNELUP 0x192 395 #define KEY_CHANNELDOWN 0x193 396 #define KEY_FIRST 0x194 397 #define KEY_LAST 0x195 398 #define KEY_AB 0x196 399 #define KEY_NEXT 0x197 400 #define KEY_RESTART 0x198 401 #define KEY_SLOW 0x199 402 #define KEY_SHUFFLE 0x19a 403 #define KEY_BREAK 0x19b 404 #define KEY_PREVIOUS 0x19c 405 #define KEY_DIGITS 0x19d 406 #define KEY_TEEN 0x19e 407 #define KEY_TWEN 0x19f 408 409 #define KEY_FRAMEBACK 0x1b2 410 #define KEY_FRAMEFORWARD 0x1b3 411 #define KEY_CONTEXT_MENU 0x1fb 412 413 #define KEY_MAX 0x1ff 414 415 /* Relative axes */ 416 417 #define REL_X 0x00 418 #define REL_Y 0x01 419 #define REL_Z 0x02 420 #define REL_RX 0x03 421 #define REL_RY 0x04 422 #define REL_RZ 0x05 423 #define REL_HWHEEL 0x06 424 #define REL_DIAL 0x07 425 #define REL_WHEEL 0x08 426 #define REL_MISC 0x09 427 #define REL_MAX 0x0f 428 429 /* Absolute axes */ 430 431 #define ABS_X 0x00 432 #define ABS_Y 0x01 433 #define ABS_Z 0x02 434 #define ABS_RX 0x03 435 #define ABS_RY 0x04 436 #define ABS_RZ 0x05 437 #define ABS_THROTTLE 0x06 438 #define ABS_RUDDER 0x07 439 #define ABS_WHEEL 0x08 440 #define ABS_GAS 0x09 441 #define ABS_BRAKE 0x0a 442 #define ABS_HAT0X 0x10 443 #define ABS_HAT0Y 0x11 444 #define ABS_HAT1X 0x12 445 #define ABS_HAT1Y 0x13 446 #define ABS_HAT2X 0x14 447 #define ABS_HAT2Y 0x15 448 #define ABS_HAT3X 0x16 449 #define ABS_HAT3Y 0x17 450 #define ABS_PRESSURE 0x18 451 #define ABS_DISTANCE 0x19 452 #define ABS_TILT_X 0x1a 453 #define ABS_TILT_Y 0x1b 454 #define ABS_TOOL_WIDTH 0x1c 455 #define ABS_VOLUME 0x20 456 #define ABS_MISC 0x28 457 #define ABS_MAX 0x3f 458 459 /* Switch events */ 460 461 #define SW_0 0x00 462 #define SW_1 0x01 463 #define SW_2 0x02 464 #define SW_3 0x03 465 #define SW_4 0x04 466 #define SW_5 0x05 467 #define SW_6 0x06 468 #define SW_7 0x07 469 #define SW_MAX 0x0f 470 471 /* Misc events */ 472 473 #define MSC_SERIAL 0x00 474 #define MSC_PULSELED 0x01 475 #define MSC_GESTURE 0x02 476 #define MSC_RAW 0x03 477 #define MSC_SCAN 0x04 478 #define MSC_MAX 0x07 479 480 /* LEDs */ 481 482 #define LED_NUML 0x00 483 #define LED_CAPSL 0x01 484 #define LED_SCROLLL 0x02 485 #define LED_COMPOSE 0x03 486 #define LED_KANA 0x04 487 #define LED_SLEEP 0x05 488 #define LED_SUSPEND 0x06 489 #define LED_MUTE 0x07 490 #define LED_MISC 0x08 491 #define LED_MAIL 0x09 492 #define LED_CHARGING 0x0a 493 #define LED_MAX 0x0f 494 495 /* Autorepeat values */ 496 497 #define REP_DELAY 0x00 498 #define REP_PERIOD 0x01 499 #define REP_MAX 0x01 500 501 /* Sounds */ 502 503 #define SND_CLICK 0x00 504 #define SND_BELL 0x01 505 #define SND_TONE 0x02 506 #define SND_MAX 0x07 507 508 /* Identifiers */ 509 510 #define ID_BUS 0 511 #define ID_VENDOR 1 512 #define ID_PRODUCT 2 513 #define ID_VERSION 3 514 515 #define BUS_PCI 0x01 516 #define BUS_ISAPNP 0x02 517 #define BUS_USB 0x03 518 #define BUS_HIL 0x04 519 #define BUS_BLUETOOTH 0x05 520 521 #define BUS_ISA 0x10 522 #define BUS_I8042 0x11 523 #define BUS_XTKBD 0x12 524 #define BUS_RS232 0x13 525 #define BUS_GAMEPORT 0x14 526 #define BUS_PARPORT 0x15 527 #define BUS_AMIGA 0x16 528 #define BUS_ADB 0x17 529 #define BUS_I2C 0x18 530 #define BUS_HOST 0x19 531 #define BUS_GSC 0x1A 532 533 /* User input interface */ 534 535 #define UINPUT_IOCTL_BASE 'U' 536 537 #define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1) 538 #define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2) 539 540 #define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int) 541 #define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int) 542 #define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int) 543 #define UI_SET_ABSBIT _IOW(UINPUT_IOCTL_BASE, 103, int) 544 #define UI_SET_MSCBIT _IOW(UINPUT_IOCTL_BASE, 104, int) 545 #define UI_SET_LEDBIT _IOW(UINPUT_IOCTL_BASE, 105, int) 546 #define UI_SET_SNDBIT _IOW(UINPUT_IOCTL_BASE, 106, int) 547 #define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int) 548 #define UI_SET_PHYS _IOW(UINPUT_IOCTL_BASE, 108, char*) 549 #define UI_SET_SWBIT _IOW(UINPUT_IOCTL_BASE, 109, int) 550 551 #ifndef NBITS 552 #define NBITS(x) ((((x) - 1) / (sizeof(long) * 8)) + 1) 553 #endif 554 555 #define UINPUT_MAX_NAME_SIZE 80 556 557 558 /******************************************************************************* 559 ** Type definitions and return values 560 ********************************************************************************/ 561 562 struct uinput_id { 563 uint16_t bustype; 564 uint16_t vendor; 565 uint16_t product; 566 uint16_t version; 567 }; 568 569 struct uinput_dev { 570 char name[UINPUT_MAX_NAME_SIZE]; 571 struct uinput_id id; 572 int ff_effects_max; 573 int absmax[ABS_MAX + 1]; 574 int absmin[ABS_MAX + 1]; 575 int absfuzz[ABS_MAX + 1]; 576 int absflat[ABS_MAX + 1]; 577 }; 578 579 struct uinput_event { 580 struct timeval time; 581 uint16_t type; 582 uint16_t code; 583 int32_t value; 584 }; 585 586 #ifdef __cplusplus 587 } 588 #endif 589 590 #endif /* __UINPUT_H */ 591