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 23extern "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#define KEY_FAST_FORWARD 208 266 267#define KEY_UNKNOWN 220 268 269#define KEY_BRIGHTNESSDOWN 224 270#define KEY_BRIGHTNESSUP 225 271 272#define BTN_MISC 0x100 273#define BTN_0 0x100 274#define BTN_1 0x101 275#define BTN_2 0x102 276#define BTN_3 0x103 277#define BTN_4 0x104 278#define BTN_5 0x105 279#define BTN_6 0x106 280#define BTN_7 0x107 281#define BTN_8 0x108 282#define BTN_9 0x109 283 284#define BTN_MOUSE 0x110 285#define BTN_LEFT 0x110 286#define BTN_RIGHT 0x111 287#define BTN_MIDDLE 0x112 288#define BTN_SIDE 0x113 289#define BTN_EXTRA 0x114 290#define BTN_FORWARD 0x115 291#define BTN_BACK 0x116 292#define BTN_TASK 0x117 293 294#define BTN_JOYSTICK 0x120 295#define BTN_TRIGGER 0x120 296#define BTN_THUMB 0x121 297#define BTN_THUMB2 0x122 298#define BTN_TOP 0x123 299#define BTN_TOP2 0x124 300#define BTN_PINKIE 0x125 301#define BTN_BASE 0x126 302#define BTN_BASE2 0x127 303#define BTN_BASE3 0x128 304#define BTN_BASE4 0x129 305#define BTN_BASE5 0x12a 306#define BTN_BASE6 0x12b 307#define BTN_DEAD 0x12f 308 309#define BTN_GAMEPAD 0x130 310#define BTN_A 0x130 311#define BTN_B 0x131 312#define BTN_C 0x132 313#define BTN_X 0x133 314#define BTN_Y 0x134 315#define BTN_Z 0x135 316#define BTN_TL 0x136 317#define BTN_TR 0x137 318#define BTN_TL2 0x138 319#define BTN_TR2 0x139 320#define BTN_SELECT 0x13a 321#define BTN_START 0x13b 322#define BTN_MODE 0x13c 323#define BTN_THUMBL 0x13d 324#define BTN_THUMBR 0x13e 325 326#define BTN_DIGI 0x140 327#define BTN_TOOL_PEN 0x140 328#define BTN_TOOL_RUBBER 0x141 329#define BTN_TOOL_BRUSH 0x142 330#define BTN_TOOL_PENCIL 0x143 331#define BTN_TOOL_AIRBRUSH 0x144 332#define BTN_TOOL_FINGER 0x145 333#define BTN_TOOL_MOUSE 0x146 334#define BTN_TOOL_LENS 0x147 335#define BTN_TOUCH 0x14a 336#define BTN_STYLUS 0x14b 337#define BTN_STYLUS2 0x14c 338#define BTN_TOOL_DOUBLETAP 0x14d 339#define BTN_TOOL_TRIPLETAP 0x14e 340 341#define BTN_WHEEL 0x150 342#define BTN_GEAR_DOWN 0x150 343#define BTN_GEAR_UP 0x151 344 345#define KEY_OK 0x160 346#define KEY_SELECT 0x161 347#define KEY_GOTO 0x162 348#define KEY_CLEAR 0x163 349#define KEY_POWER2 0x164 350#define KEY_OPTION 0x165 351#define KEY_INFO 0x166 352#define KEY_TIME 0x167 353#define KEY_VENDOR 0x168 354#define KEY_ARCHIVE 0x169 355#define KEY_PROGRAM 0x16a 356#define KEY_CHANNEL 0x16b 357#define KEY_FAVORITES 0x16c 358#define KEY_EPG 0x16d 359#define KEY_PVR 0x16e 360#define KEY_MHP 0x16f 361#define KEY_LANGUAGE 0x170 362#define KEY_TITLE 0x171 363#define KEY_SUBTITLE 0x172 364#define KEY_ANGLE 0x173 365#define KEY_ZOOM 0x174 366#define KEY_MODE 0x175 367#define KEY_KEYBOARD 0x176 368#define KEY_SCREEN 0x177 369#define KEY_PC 0x178 370#define KEY_TV 0x179 371#define KEY_TV2 0x17a 372#define KEY_VCR 0x17b 373#define KEY_VCR2 0x17c 374#define KEY_SAT 0x17d 375#define KEY_SAT2 0x17e 376#define KEY_CD 0x17f 377#define KEY_TAPE 0x180 378#define KEY_RADIO 0x181 379#define KEY_TUNER 0x182 380#define KEY_PLAYER 0x183 381#define KEY_TEXT 0x184 382#define KEY_DVD 0x185 383#define KEY_AUX 0x186 384#define KEY_MP3 0x187 385#define KEY_AUDIO 0x188 386#define KEY_VIDEO 0x189 387#define KEY_DIRECTORY 0x18a 388#define KEY_LIST 0x18b 389#define KEY_MEMO 0x18c 390#define KEY_CALENDAR 0x18d 391#define KEY_RED 0x18e 392#define KEY_GREEN 0x18f 393#define KEY_YELLOW 0x190 394#define KEY_BLUE 0x191 395#define KEY_CHANNELUP 0x192 396#define KEY_CHANNELDOWN 0x193 397#define KEY_FIRST 0x194 398#define KEY_LAST 0x195 399#define KEY_AB 0x196 400#define KEY_NEXT 0x197 401#define KEY_RESTART 0x198 402#define KEY_SLOW 0x199 403#define KEY_SHUFFLE 0x19a 404#define KEY_BREAK 0x19b 405#define KEY_PREVIOUS 0x19c 406#define KEY_DIGITS 0x19d 407#define KEY_TEEN 0x19e 408#define KEY_TWEN 0x19f 409 410#define KEY_FRAMEBACK 0x1b2 411#define KEY_FRAMEFORWARD 0x1b3 412#define KEY_CONTEXT_MENU 0x1fb 413 414#define KEY_MAX 0x1ff 415 416/* Relative axes */ 417 418#define REL_X 0x00 419#define REL_Y 0x01 420#define REL_Z 0x02 421#define REL_RX 0x03 422#define REL_RY 0x04 423#define REL_RZ 0x05 424#define REL_HWHEEL 0x06 425#define REL_DIAL 0x07 426#define REL_WHEEL 0x08 427#define REL_MISC 0x09 428#define REL_MAX 0x0f 429 430/* Absolute axes */ 431 432#define ABS_X 0x00 433#define ABS_Y 0x01 434#define ABS_Z 0x02 435#define ABS_RX 0x03 436#define ABS_RY 0x04 437#define ABS_RZ 0x05 438#define ABS_THROTTLE 0x06 439#define ABS_RUDDER 0x07 440#define ABS_WHEEL 0x08 441#define ABS_GAS 0x09 442#define ABS_BRAKE 0x0a 443#define ABS_HAT0X 0x10 444#define ABS_HAT0Y 0x11 445#define ABS_HAT1X 0x12 446#define ABS_HAT1Y 0x13 447#define ABS_HAT2X 0x14 448#define ABS_HAT2Y 0x15 449#define ABS_HAT3X 0x16 450#define ABS_HAT3Y 0x17 451#define ABS_PRESSURE 0x18 452#define ABS_DISTANCE 0x19 453#define ABS_TILT_X 0x1a 454#define ABS_TILT_Y 0x1b 455#define ABS_TOOL_WIDTH 0x1c 456#define ABS_VOLUME 0x20 457#define ABS_MISC 0x28 458#define ABS_MAX 0x3f 459 460/* Switch events */ 461 462#define SW_0 0x00 463#define SW_1 0x01 464#define SW_2 0x02 465#define SW_3 0x03 466#define SW_4 0x04 467#define SW_5 0x05 468#define SW_6 0x06 469#define SW_7 0x07 470#define SW_MAX 0x0f 471 472/* Misc events */ 473 474#define MSC_SERIAL 0x00 475#define MSC_PULSELED 0x01 476#define MSC_GESTURE 0x02 477#define MSC_RAW 0x03 478#define MSC_SCAN 0x04 479#define MSC_MAX 0x07 480 481/* LEDs */ 482 483#define LED_NUML 0x00 484#define LED_CAPSL 0x01 485#define LED_SCROLLL 0x02 486#define LED_COMPOSE 0x03 487#define LED_KANA 0x04 488#define LED_SLEEP 0x05 489#define LED_SUSPEND 0x06 490#define LED_MUTE 0x07 491#define LED_MISC 0x08 492#define LED_MAIL 0x09 493#define LED_CHARGING 0x0a 494#define LED_MAX 0x0f 495 496/* Autorepeat values */ 497 498#define REP_DELAY 0x00 499#define REP_PERIOD 0x01 500#define REP_MAX 0x01 501 502/* Sounds */ 503 504#define SND_CLICK 0x00 505#define SND_BELL 0x01 506#define SND_TONE 0x02 507#define SND_MAX 0x07 508 509/* Identifiers */ 510 511#define ID_BUS 0 512#define ID_VENDOR 1 513#define ID_PRODUCT 2 514#define ID_VERSION 3 515 516#define BUS_PCI 0x01 517#define BUS_ISAPNP 0x02 518#define BUS_USB 0x03 519#define BUS_HIL 0x04 520#define BUS_BLUETOOTH 0x05 521 522#define BUS_ISA 0x10 523#define BUS_I8042 0x11 524#define BUS_XTKBD 0x12 525#define BUS_RS232 0x13 526#define BUS_GAMEPORT 0x14 527#define BUS_PARPORT 0x15 528#define BUS_AMIGA 0x16 529#define BUS_ADB 0x17 530#define BUS_I2C 0x18 531#define BUS_HOST 0x19 532#define BUS_GSC 0x1A 533 534/* User input interface */ 535 536#define UINPUT_IOCTL_BASE 'U' 537 538#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1) 539#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2) 540 541#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int) 542#define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int) 543#define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int) 544#define UI_SET_ABSBIT _IOW(UINPUT_IOCTL_BASE, 103, int) 545#define UI_SET_MSCBIT _IOW(UINPUT_IOCTL_BASE, 104, int) 546#define UI_SET_LEDBIT _IOW(UINPUT_IOCTL_BASE, 105, int) 547#define UI_SET_SNDBIT _IOW(UINPUT_IOCTL_BASE, 106, int) 548#define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int) 549#define UI_SET_PHYS _IOW(UINPUT_IOCTL_BASE, 108, char*) 550#define UI_SET_SWBIT _IOW(UINPUT_IOCTL_BASE, 109, int) 551 552#ifndef NBITS 553#define NBITS(x) ((((x) - 1) / (sizeof(long) * 8)) + 1) 554#endif 555 556#define UINPUT_MAX_NAME_SIZE 80 557 558 559/******************************************************************************* 560** Type definitions and return values 561********************************************************************************/ 562 563struct uinput_id { 564 uint16_t bustype; 565 uint16_t vendor; 566 uint16_t product; 567 uint16_t version; 568}; 569 570struct uinput_dev { 571 char name[UINPUT_MAX_NAME_SIZE]; 572 struct uinput_id id; 573 int ff_effects_max; 574 int absmax[ABS_MAX + 1]; 575 int absmin[ABS_MAX + 1]; 576 int absfuzz[ABS_MAX + 1]; 577 int absflat[ABS_MAX + 1]; 578}; 579 580struct uinput_event { 581 struct timeval time; 582 uint16_t type; 583 uint16_t code; 584 int32_t value; 585}; 586 587#ifdef __cplusplus 588} 589#endif 590 591#endif /* __UINPUT_H */ 592