# Lint as: python2, python3 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Description: # # Python version of include/linux/input.h # as of kernel v2.6.39 from __future__ import division from __future__ import print_function from six.moves import range # Try to import from the autotest_lib structure. If it fails try the default. # If this script was run outside of autotest the "except" would be the flow. # If run within, the "try" is the flow. try: from autotest_lib.client.bin.input.linux_ioctl import * except ImportError: from linux_ioctl import * # The event structure itself # struct input_event { # struct timeval time; # __u16 type; # __u16 code; # __s32 value; # }; # # struct timeval { # __kernel_time_t tv_sec; /* seconds */ # __kernel_suseconds_t tv_usec; /* microseconds */ # }; input_event_t = 'LLHHi' # Protocol version. EV_VERSION = 0x010001 # IOCTLs (0x00 - 0x7f) # struct input_id { # __u16 bustype; # __u16 vendor; # __u16 product; # __u16 version; # }; input_id_t = 'HHHH' # struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls # @value: latest reported value for the axis. # @minimum: specifies minimum value for the axis. # @maximum: specifies maximum value for the axis. # @fuzz: specifies fuzz value used to filter noise from the event stream. # @flat: values within this value are reported as 0. # @resolution: specifies resolution for the values reported for the axis. # # Note that input core does not clamp reported values to the # [minimum, maximum] limits, such task is left to userspace. # # Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in # units per millimeter (units/mm), resolution for rotational axes # (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian. # # struct input_absinfo { # __s32 value; # __s32 minimum; # __s32 maximum; # __s32 fuzz; # __s32 flat; # __s32 resolution; # }; input_absinfo_t = 'iiiiii' # struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls # @scancode: scancode represented in machine-endian form. # @len: length of the scancode that resides in @scancode buffer. # @index: index in the keymap, may be used instead of scancode # @flags: allows to specify how kernel should handle the request. For # example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel # should perform lookup in keymap by @index instead of @scancode # @keycode: key code assigned to this scancode # # The structure is used to retrieve and modify keymap data. Users have # option of performing lookup either by @scancode itself or by @index # in keymap entry. EVIOCGKEYCODE will also return scancode or index # (depending on which element was used to perform lookup). # # struct input_keymap_entry { # __u8 flags; # __u8 len; # __u16 index; # __u32 keycode; # __u8 scancode[32]; # }; input_keymap_entry_t = 'BBHI32B' EVIOCGVERSION = IOR('E', 0x01, 'i') # get driver version EVIOCGID = IOR('E', 0x02, input_id_t) # get device ID EVIOCGREP = IOR('E', 0x03, '2I') # get repeat settings EVIOCSREP = IOW('E', 0x03, '2I') # set repeat settings EVIOCGKEYCODE = IOR('E', 0x04, '2I') # get keycode EVIOCGKEYCODE_V2 = IOR('E', 0x04, input_keymap_entry_t) EVIOCSKEYCODE = IOW('E', 0x04, '2I') # set keycode EVIOCSKEYCODE_V2 = IOW('E', 0x04, input_keymap_entry_t) def EVIOCGNAME(length): return IOC(IOC_READ, 'E', 0x06, length) # get device name def EVIOCGPHYS(length): return IOC(IOC_READ, 'E', 0x07, length) # get physical location def EVIOCGUNIQ(length): return IOC(IOC_READ, 'E', 0x08, length) # get unique identifier def EVIOCGPROP(length): return IOC(IOC_READ, 'E', 0x09, length) # get device properties def EVIOCGMTSLOTS(length): return IOC(IOC_READ, 'E', 0x0a, length) # get mt slot values def EVIOCGKEY(length): return IOC(IOC_READ, 'E', 0x18, length) # get global key state def EVIOCGLED(length): return IOC(IOC_READ, 'E', 0x19, length) # get all LEDs def EVIOCGSND(length): return IOC(IOC_READ, 'E', 0x1a, length) # get all sounds status def EVIOCGSW(length): return IOC(IOC_READ, 'E', 0x1b, length) # get all switch states def EVIOCGBIT(ev,length): return IOC(IOC_READ, 'E', 0x20 + ev, length) # get event bits def EVIOCGABS(axis): return IOR('E', 0x40 + axis, input_absinfo_t) # get abs value/limits def EVIOCSABS(axis): return IOW('E', 0xc0 + axis, input_absinfo_t) # set abs value/limits # send a force effect to a force feedback device """ TODO: Support force feedback. """ #EVIOCSFF = IOW('E', 0x80, ff_effect_t) # Erase a force effect EVIOCRMFF = IOW('E', 0x81, 'i') # Report number of effects playable at the same time EVIOCGEFFECTS = IOR('E', 0x84, 'i') # Grab/Release device EVIOCGRAB = IOW('E', 0x90, 'i') # Device properties and quirks INPUT_PROP_POINTER = 0x00 # needs a pointer INPUT_PROP_DIRECT = 0x01 # direct input devices INPUT_PROP_BUTTONPAD = 0x02 # has button(s) under pad INPUT_PROP_SEMI_MT = 0x03 # touch rectangle only INPUT_PROP_MAX = 0x1f INPUT_PROP_CNT = (INPUT_PROP_MAX + 1) # Event types EV_SYN = 0x00 EV_KEY = 0x01 EV_REL = 0x02 EV_ABS = 0x03 EV_MSC = 0x04 EV_SW = 0x05 EV_LED = 0x11 EV_SND = 0x12 EV_REP = 0x14 EV_FF = 0x15 EV_PWR = 0x16 EV_FF_STATUS = 0x17 EV_MAX = 0x1f EV_CNT = (EV_MAX + 1) # Synchronization events. SYN_REPORT = 0 SYN_CONFIG = 1 SYN_MT_REPORT = 2 SYN_DROPPED = 3 """ * Keys and buttons * * Most of the keys/buttons are modeled after USB HUT 1.12 * (see http://www.usb.org/developers/hidpage). * Abbreviations in the comments: * AC - Application Control * AL - Application Launch Button * SC - System Control """ KEY_RESERVED = 0 KEY_ESC = 1 KEY_1 = 2 KEY_2 = 3 KEY_3 = 4 KEY_4 = 5 KEY_5 = 6 KEY_6 = 7 KEY_7 = 8 KEY_8 = 9 KEY_9 = 10 KEY_0 = 11 KEY_MINUS = 12 KEY_EQUAL = 13 KEY_BACKSPACE = 14 KEY_TAB = 15 KEY_Q = 16 KEY_W = 17 KEY_E = 18 KEY_R = 19 KEY_T = 20 KEY_Y = 21 KEY_U = 22 KEY_I = 23 KEY_O = 24 KEY_P = 25 KEY_LEFTBRACE = 26 KEY_RIGHTBRACE = 27 KEY_ENTER = 28 KEY_LEFTCTRL = 29 KEY_A = 30 KEY_S = 31 KEY_D = 32 KEY_F = 33 KEY_G = 34 KEY_H = 35 KEY_J = 36 KEY_K = 37 KEY_L = 38 KEY_SEMICOLON = 39 KEY_APOSTROPHE = 40 KEY_GRAVE = 41 KEY_LEFTSHIFT = 42 KEY_BACKSLASH = 43 KEY_Z = 44 KEY_X = 45 KEY_C = 46 KEY_V = 47 KEY_B = 48 KEY_N = 49 KEY_M = 50 KEY_COMMA = 51 KEY_DOT = 52 KEY_SLASH = 53 KEY_RIGHTSHIFT = 54 KEY_KPASTERISK = 55 KEY_LEFTALT = 56 KEY_SPACE = 57 KEY_CAPSLOCK = 58 KEY_F1 = 59 KEY_F2 = 60 KEY_F3 = 61 KEY_F4 = 62 KEY_F5 = 63 KEY_F6 = 64 KEY_F7 = 65 KEY_F8 = 66 KEY_F9 = 67 KEY_F10 = 68 KEY_NUMLOCK = 69 KEY_SCROLLLOCK = 70 KEY_KP7 = 71 KEY_KP8 = 72 KEY_KP9 = 73 KEY_KPMINUS = 74 KEY_KP4 = 75 KEY_KP5 = 76 KEY_KP6 = 77 KEY_KPPLUS = 78 KEY_KP1 = 79 KEY_KP2 = 80 KEY_KP3 = 81 KEY_KP0 = 82 KEY_KPDOT = 83 KEY_ZENKAKUHANKAKU = 85 KEY_102ND = 86 KEY_F11 = 87 KEY_F12 = 88 KEY_RO = 89 KEY_KATAKANA = 90 KEY_HIRAGANA = 91 KEY_HENKAN = 92 KEY_KATAKANAHIRAGANA = 93 KEY_MUHENKAN = 94 KEY_KPJPCOMMA = 95 KEY_KPENTER = 96 KEY_RIGHTCTRL = 97 KEY_KPSLASH = 98 KEY_SYSRQ = 99 KEY_RIGHTALT = 100 KEY_LINEFEED = 101 KEY_HOME = 102 KEY_UP = 103 KEY_PAGEUP = 104 KEY_LEFT = 105 KEY_RIGHT = 106 KEY_END = 107 KEY_DOWN = 108 KEY_PAGEDOWN = 109 KEY_INSERT = 110 KEY_DELETE = 111 KEY_MACRO = 112 KEY_MUTE = 113 KEY_VOLUMEDOWN = 114 KEY_VOLUMEUP = 115 KEY_POWER = 116 # SC System Power Down KEY_KPEQUAL = 117 KEY_KPPLUSMINUS = 118 KEY_PAUSE = 119 KEY_SCALE = 120 # AL Compiz Scale (Expose) KEY_KPCOMMA = 121 KEY_HANGEUL = 122 KEY_HANGUEL = KEY_HANGEUL KEY_HANJA = 123 KEY_YEN = 124 KEY_LEFTMETA = 125 KEY_RIGHTMETA = 126 KEY_COMPOSE = 127 KEY_STOP = 128 # AC Stop KEY_AGAIN = 129 KEY_PROPS = 130 # AC Properties KEY_UNDO = 131 # AC Undo KEY_FRONT = 132 KEY_COPY = 133 # AC Copy KEY_OPEN = 134 # AC Open KEY_PASTE = 135 # AC Paste KEY_FIND = 136 # AC Search KEY_CUT = 137 # AC Cut KEY_HELP = 138 # AL Integrated Help Center KEY_MENU = 139 # Menu (show menu) KEY_CALC = 140 # AL Calculator KEY_SETUP = 141 KEY_SLEEP = 142 # SC System Sleep KEY_WAKEUP = 143 # System Wake Up KEY_FILE = 144 # AL Local Machine Browser KEY_SENDFILE = 145 KEY_DELETEFILE = 146 KEY_XFER = 147 KEY_PROG1 = 148 KEY_PROG2 = 149 KEY_WWW = 150 # AL Internet Browser KEY_MSDOS = 151 KEY_COFFEE = 152 # AL Terminal Lock/Screensaver KEY_SCREENLOCK = KEY_COFFEE KEY_DIRECTION = 153 KEY_CYCLEWINDOWS = 154 KEY_MAIL = 155 KEY_BOOKMARKS = 156 # AC Bookmarks KEY_COMPUTER = 157 KEY_BACK = 158 # AC Back KEY_FORWARD = 159 # AC Forward KEY_CLOSECD = 160 KEY_EJECTCD = 161 KEY_EJECTCLOSECD = 162 KEY_NEXTSONG = 163 KEY_PLAYPAUSE = 164 KEY_PREVIOUSSONG = 165 KEY_STOPCD = 166 KEY_RECORD = 167 KEY_REWIND = 168 KEY_PHONE = 169 # Media Select Telephone KEY_ISO = 170 KEY_CONFIG = 171 # AL Consumer Control Configuration KEY_HOMEPAGE = 172 # AC Home KEY_REFRESH = 173 # AC Refresh KEY_EXIT = 174 # AC Exit KEY_MOVE = 175 KEY_EDIT = 176 KEY_SCROLLUP = 177 KEY_SCROLLDOWN = 178 KEY_KPLEFTPAREN = 179 KEY_KPRIGHTPAREN = 180 KEY_NEW = 181 # AC New KEY_REDO = 182 # AC Redo/Repeat KEY_F13 = 183 KEY_F14 = 184 KEY_F15 = 185 KEY_F16 = 186 KEY_F17 = 187 KEY_F18 = 188 KEY_F19 = 189 KEY_F20 = 190 KEY_F21 = 191 KEY_F22 = 192 KEY_F23 = 193 KEY_F24 = 194 KEY_PLAYCD = 200 KEY_PAUSECD = 201 KEY_PROG3 = 202 KEY_PROG4 = 203 KEY_DASHBOARD = 204 # AL Dashboard KEY_SUSPEND = 205 KEY_CLOSE = 206 # AC Close KEY_PLAY = 207 KEY_FASTFORWARD = 208 KEY_BASSBOOST = 209 KEY_PRINT = 210 # AC Print KEY_HP = 211 KEY_CAMERA = 212 KEY_SOUND = 213 KEY_QUESTION = 214 KEY_EMAIL = 215 KEY_CHAT = 216 KEY_SEARCH = 217 KEY_CONNECT = 218 KEY_FINANCE = 219 #AL Checkbook/Finance KEY_SPORT = 220 KEY_SHOP = 221 KEY_ALTERASE = 222 KEY_CANCEL = 223 # AC Cancel KEY_BRIGHTNESSDOWN = 224 KEY_BRIGHTNESSUP = 225 KEY_MEDIA = 226 KEY_SWITCHVIDEOMODE = 227 # Cycle between available video # outputs (Monitor/LCD/TV-out/etc) KEY_KBDILLUMTOGGLE = 228 KEY_KBDILLUMDOWN = 229 KEY_KBDILLUMUP = 230 KEY_SEND = 231 # AC Send KEY_REPLY = 232 # AC Reply KEY_FORWARDMAIL = 233 # AC Forward Msg KEY_SAVE = 234 # AC Save KEY_DOCUMENTS = 235 KEY_BATTERY = 236 KEY_BLUETOOTH = 237 KEY_WLAN = 238 KEY_UWB = 239 KEY_UNKNOWN = 240 KEY_VIDEO_NEXT = 241 # drive next video source KEY_VIDEO_PREV = 242 # drive previous video source KEY_BRIGHTNESS_CYCLE = 243 # brightness up, after max is min KEY_BRIGHTNESS_ZERO = 244 # brightness off, use ambient KEY_DISPLAY_OFF = 245 # display device to off state KEY_WIMAX = 246 KEY_RFKILL = 247 # Key that controls all radios # Code 255 is reserved for special needs of AT keyboard driver BTN_MISC = 0x100 BTN_0 = 0x100 BTN_1 = 0x101 BTN_2 = 0x102 BTN_3 = 0x103 BTN_4 = 0x104 BTN_5 = 0x105 BTN_6 = 0x106 BTN_7 = 0x107 BTN_8 = 0x108 BTN_9 = 0x109 BTN_MOUSE = 0x110 BTN_LEFT = 0x110 BTN_RIGHT = 0x111 BTN_MIDDLE = 0x112 BTN_SIDE = 0x113 BTN_EXTRA = 0x114 BTN_FORWARD = 0x115 BTN_BACK = 0x116 BTN_TASK = 0x117 BTN_JOYSTICK = 0x120 BTN_TRIGGER = 0x120 BTN_THUMB = 0x121 BTN_THUMB2 = 0x122 BTN_TOP = 0x123 BTN_TOP2 = 0x124 BTN_PINKIE = 0x125 BTN_BASE = 0x126 BTN_BASE2 = 0x127 BTN_BASE3 = 0x128 BTN_BASE4 = 0x129 BTN_BASE5 = 0x12a BTN_BASE6 = 0x12b BTN_DEAD = 0x12f BTN_GAMEPAD = 0x130 BTN_A = 0x130 BTN_B = 0x131 BTN_C = 0x132 BTN_X = 0x133 BTN_Y = 0x134 BTN_Z = 0x135 BTN_TL = 0x136 BTN_TR = 0x137 BTN_TL2 = 0x138 BTN_TR2 = 0x139 BTN_SELECT = 0x13a BTN_START = 0x13b BTN_MODE = 0x13c BTN_THUMBL = 0x13d BTN_THUMBR = 0x13e BTN_DIGI = 0x140 BTN_TOOL_PEN = 0x140 BTN_TOOL_RUBBER = 0x141 BTN_TOOL_BRUSH = 0x142 BTN_TOOL_PENCIL = 0x143 BTN_TOOL_AIRBRUSH = 0x144 BTN_TOOL_FINGER = 0x145 BTN_TOOL_MOUSE = 0x146 BTN_TOOL_LENS = 0x147 BTN_TOOL_QUINTTAP = 0x148 # Five fingers on trackpad BTN_TOUCH = 0x14a BTN_STYLUS = 0x14b BTN_STYLUS2 = 0x14c BTN_TOOL_DOUBLETAP = 0x14d BTN_TOOL_TRIPLETAP = 0x14e BTN_TOOL_QUADTAP = 0x14f # Four fingers on trackpad BTN_WHEEL = 0x150 BTN_GEAR_DOWN = 0x150 BTN_GEAR_UP = 0x151 KEY_OK = 0x160 KEY_SELECT = 0x161 KEY_GOTO = 0x162 KEY_CLEAR = 0x163 KEY_POWER2 = 0x164 KEY_OPTION = 0x165 KEY_INFO = 0x166 #AL OEM Features/Tips/Tutorial KEY_TIME = 0x167 KEY_VENDOR = 0x168 KEY_ARCHIVE = 0x169 KEY_PROGRAM = 0x16a # Media Select Program Guide KEY_CHANNEL = 0x16b KEY_FAVORITES = 0x16c KEY_EPG = 0x16d KEY_PVR = 0x16e # Media Select Home KEY_MHP = 0x16f KEY_LANGUAGE = 0x170 KEY_TITLE = 0x171 KEY_SUBTITLE = 0x172 KEY_ANGLE = 0x173 KEY_ZOOM = 0x174 KEY_MODE = 0x175 KEY_KEYBOARD = 0x176 KEY_SCREEN = 0x177 KEY_PC = 0x178 # Media Select Computer KEY_TV = 0x179 # Media Select TV KEY_TV2 = 0x17a # Media Select Cable KEY_VCR = 0x17b # Media Select VCR KEY_VCR2 = 0x17c # VCR Plus KEY_SAT = 0x17d # Media Select Satellite KEY_SAT2 = 0x17e KEY_CD = 0x17f # Media Select CD KEY_TAPE = 0x180 # Select Tape KEY_RADIO = 0x181 KEY_TUNER = 0x182 # Media Select Tuner KEY_PLAYER = 0x183 KEY_TEXT = 0x184 KEY_DVD = 0x185 # Media Select DVD KEY_AUX = 0x186 KEY_MP3 = 0x187 KEY_AUDIO = 0x188 # AL Audio Browser KEY_VIDEO = 0x189 # AL Movie Browser KEY_DIRECTORY = 0x18a KEY_LIST = 0x18b KEY_MEMO = 0x18 # Media Select Messages KEY_CALENDAR = 0x18d KEY_RED = 0x18e KEY_GREEN = 0x18f KEY_YELLOW = 0x190 KEY_BLUE = 0x191 KEY_CHANNELUP = 0x192 # Channel Increment KEY_CHANNELDOWN = 0x193 # Channel Decrement KEY_FIRST = 0x194 KEY_LAST = 0x195 # Recall Last KEY_AB = 0x196 KEY_NEXT = 0x197 KEY_RESTART = 0x198 KEY_SLOW = 0x199 KEY_SHUFFLE = 0x19a KEY_BREAK = 0x19b KEY_PREVIOUS = 0x19c KEY_DIGITS = 0x19d KEY_TEEN = 0x19e KEY_TWEN = 0x19f KEY_VIDEOPHONE = 0x1a0 # Media Select Video Phone KEY_GAMES = 0x1a1 # Media Select Games KEY_ZOOMIN = 0x1a2 # AC Zoom In KEY_ZOOMOUT = 0x1a3 # AC Zoom Out KEY_ZOOMRESET = 0x1a4 # AC Zoom KEY_WORDPROCESSOR = 0x1a5 # AL Word Processor KEY_EDITOR = 0x1a6 # AL Text Editor KEY_SPREADSHEET = 0x1a7 # AL Spreadsheet KEY_GRAPHICSEDITOR = 0x1a8 # AL Graphics Editor KEY_PRESENTATION = 0x1a9 # AL Presentation App KEY_DATABASE = 0x1aa # AL Database App KEY_NEWS = 0x1ab # AL Newsreader KEY_VOICEMAIL = 0x1ac # AL Voicemail KEY_ADDRESSBOOK = 0x1ad # AL Contacts/Address Book KEY_MESSENGER = 0x1ae # AL Instant Messaging KEY_DISPLAYTOGGLE = 0x1af # Turn display (LCD) on and off KEY_SPELLCHECK = 0x1b0 # AL Spell Check KEY_LOGOFF = 0x1b1 #* AL Logoff KEY_DOLLAR = 0x1b2 KEY_EURO = 0x1b3 KEY_FRAMEBACK = 0x1b4 # Consumer - transport controls KEY_FRAMEFORWARD = 0x1b5 KEY_CONTEXT_MENU = 0x1b6 # GenDesc - system context menu KEY_MEDIA_REPEAT = 0x1b7 # Consumer - transport control KEY_10CHANNELSUP = 0x1b8 # 10 channels up (10+) KEY_10CHANNELSDOWN = 0x1b9 # 10 channels down (10-) KEY_IMAGES = 0x1ba # AL Image Browser KEY_DEL_EOL = 0x1c0 KEY_DEL_EOS = 0x1c1 KEY_INS_LINE = 0x1c2 KEY_DEL_LINE = 0x1c3 KEY_FN = 0x1d0 KEY_FN_ESC = 0x1d1 KEY_FN_F1 = 0x1d2 KEY_FN_F2 = 0x1d3 KEY_FN_F3 = 0x1d4 KEY_FN_F4 = 0x1d5 KEY_FN_F5 = 0x1d6 KEY_FN_F6 = 0x1d7 KEY_FN_F7 = 0x1d8 KEY_FN_F8 = 0x1d9 KEY_FN_F9 = 0x1da KEY_FN_F10 = 0x1db KEY_FN_F11 = 0x1dc KEY_FN_F12 = 0x1dd KEY_FN_1 = 0x1de KEY_FN_2 = 0x1df KEY_FN_D = 0x1e0 KEY_FN_E = 0x1e1 KEY_FN_F = 0x1e2 KEY_FN_S = 0x1e3 KEY_FN_B = 0x1e4 KEY_BRL_DOT1 = 0x1f1 KEY_BRL_DOT2 = 0x1f2 KEY_BRL_DOT3 = 0x1f3 KEY_BRL_DOT4 = 0x1f4 KEY_BRL_DOT5 = 0x1f5 KEY_BRL_DOT6 = 0x1f6 KEY_BRL_DOT7 = 0x1f7 KEY_BRL_DOT8 = 0x1f8 KEY_BRL_DOT9 = 0x1f9 KEY_BRL_DOT10 = 0x1fa KEY_NUMERIC_0 = 0x200 # used by phones, remote controls, KEY_NUMERIC_1 = 0x201 # and other keypads KEY_NUMERIC_2 = 0x202 KEY_NUMERIC_3 = 0x203 KEY_NUMERIC_4 = 0x204 KEY_NUMERIC_5 = 0x205 KEY_NUMERIC_6 = 0x206 KEY_NUMERIC_7 = 0x207 KEY_NUMERIC_8 = 0x208 KEY_NUMERIC_9 = 0x209 KEY_NUMERIC_STAR = 0x20a KEY_NUMERIC_POUND = 0x20b KEY_CAMERA_FOCUS = 0x210 KEY_WPS_BUTTON = 0x211 # WiFi Protected Setup key KEY_TOUCHPAD_TOGGLE = 0x212 # Request switch touchpad on or off KEY_TOUCHPAD_ON = 0x213 KEY_TOUCHPAD_OFF = 0x214 KEY_CAMERA_ZOOMIN = 0x215 KEY_CAMERA_ZOOMOUT = 0x216 KEY_CAMERA_UP = 0x217 KEY_CAMERA_DOWN = 0x218 KEY_CAMERA_LEFT = 0x219 KEY_CAMERA_RIGHT = 0x21a BTN_TRIGGER_HAPPY = 0x2c0 BTN_TRIGGER_HAPPY1 = 0x2c0 BTN_TRIGGER_HAPPY2 = 0x2c1 BTN_TRIGGER_HAPPY3 = 0x2c2 BTN_TRIGGER_HAPPY4 = 0x2c3 BTN_TRIGGER_HAPPY5 = 0x2c4 BTN_TRIGGER_HAPPY6 = 0x2c5 BTN_TRIGGER_HAPPY7 = 0x2c6 BTN_TRIGGER_HAPPY8 = 0x2c7 BTN_TRIGGER_HAPPY9 = 0x2c8 BTN_TRIGGER_HAPPY10 = 0x2c9 BTN_TRIGGER_HAPPY11 = 0x2ca BTN_TRIGGER_HAPPY12 = 0x2cb BTN_TRIGGER_HAPPY13 = 0x2cc BTN_TRIGGER_HAPPY14 = 0x2cd BTN_TRIGGER_HAPPY15 = 0x2ce BTN_TRIGGER_HAPPY16 = 0x2cf BTN_TRIGGER_HAPPY17 = 0x2d0 BTN_TRIGGER_HAPPY18 = 0x2d1 BTN_TRIGGER_HAPPY19 = 0x2d2 BTN_TRIGGER_HAPPY20 = 0x2d3 BTN_TRIGGER_HAPPY21 = 0x2d4 BTN_TRIGGER_HAPPY22 = 0x2d5 BTN_TRIGGER_HAPPY23 = 0x2d6 BTN_TRIGGER_HAPPY24 = 0x2d7 BTN_TRIGGER_HAPPY25 = 0x2d8 BTN_TRIGGER_HAPPY26 = 0x2d9 BTN_TRIGGER_HAPPY27 = 0x2da BTN_TRIGGER_HAPPY28 = 0x2db BTN_TRIGGER_HAPPY29 = 0x2dc BTN_TRIGGER_HAPPY30 = 0x2dd BTN_TRIGGER_HAPPY31 = 0x2de BTN_TRIGGER_HAPPY32 = 0x2df BTN_TRIGGER_HAPPY33 = 0x2e0 BTN_TRIGGER_HAPPY34 = 0x2e1 BTN_TRIGGER_HAPPY35 = 0x2e2 BTN_TRIGGER_HAPPY36 = 0x2e3 BTN_TRIGGER_HAPPY37 = 0x2e4 BTN_TRIGGER_HAPPY38 = 0x2e5 BTN_TRIGGER_HAPPY39 = 0x2e6 BTN_TRIGGER_HAPPY40 = 0x2e7 # We avoid low common keys in module aliases so they don't get huge #KEY_MIN_INTERESTING = KEY_MUTE KEY_MAX = 0x2ff KEY_CNT = (KEY_MAX + 1) # Relative axes REL_X = 0x00 REL_Y = 0x01 REL_Z = 0x02 REL_RX = 0x03 REL_RY = 0x04 REL_RZ = 0x05 REL_HWHEEL = 0x06 REL_DIAL = 0x07 REL_WHEEL = 0x08 REL_MISC = 0x09 REL_RESERVED = 0x0a REL_WHEEL_HI_RES = 0x0b REL_HWHEEL_HI_RES = 0x0c REL_MAX = 0x0f REL_CNT = (REL_MAX + 1) # Absolute axes ABS_X = 0x00 ABS_Y = 0x01 ABS_Z = 0x02 ABS_RX = 0x03 ABS_RY = 0x04 ABS_RZ = 0x05 ABS_THROTTLE = 0x06 ABS_RUDDER = 0x07 ABS_WHEEL = 0x08 ABS_GAS = 0x09 ABS_BRAKE = 0x0a ABS_HAT0X = 0x10 ABS_HAT0Y = 0x11 ABS_HAT1X = 0x12 ABS_HAT1Y = 0x13 ABS_HAT2X = 0x14 ABS_HAT2Y = 0x15 ABS_HAT3X = 0x16 ABS_HAT3Y = 0x17 ABS_PRESSURE = 0x18 ABS_DISTANCE = 0x19 ABS_TILT_X = 0x1a ABS_TILT_Y = 0x1b ABS_TOOL_WIDTH = 0x1c ABS_VOLUME = 0x20 ABS_MISC = 0x28 ABS_MT_SLOT = 0x2f # MT slot being modified ABS_MT_TOUCH_MAJOR = 0x30 # Major axis of touching ellipse ABS_MT_TOUCH_MINOR = 0x31 # Minor axis (omit if circular) ABS_MT_WIDTH_MAJOR = 0x32 # Major axis of approaching ellipse ABS_MT_WIDTH_MINOR = 0x33 # Minor axis (omit if circular) ABS_MT_ORIENTATION = 0x34 # Ellipse orientation ABS_MT_POSITION_X = 0x35 # Center X ellipse position ABS_MT_POSITION_Y = 0x36 # Center Y ellipse position ABS_MT_TOOL_TYPE = 0x37 # Type of touching device ABS_MT_BLOB_ID = 0x38 # Group a set of packets as a blob ABS_MT_TRACKING_ID = 0x39 # Unique ID of initiated contact ABS_MT_PRESSURE = 0x3a # Pressure on contact area ABS_MT_DISTANCE = 0x3b # Contact hover distance ABS_MT_FIRST = ABS_MT_TOUCH_MAJOR ABS_MT_LAST = ABS_MT_DISTANCE ABS_MT_RANGE = list(range(ABS_MT_FIRST, ABS_MT_LAST+1)) ABS_MAX = 0x3f ABS_CNT = (ABS_MAX + 1) # Switch events SW_LID = 0x00 # set = lid shut SW_TABLET_MODE = 0x01 # set = tablet mode SW_HEADPHONE_INSERT = 0x02 # set = inserted SW_RFKILL_ALL = 0x03 # rfkill main switch, type "any" # set = radio enabled SW_RADIO = SW_RFKILL_ALL # deprecated SW_MICROPHONE_INSERT = 0x04 # set = inserted SW_DOCK = 0x05 # set = plugged into dock SW_LINEOUT_INSERT = 0x06 # set = inserted SW_JACK_PHYSICAL_INSERT = 0x07 # set = mechanical switch set SW_VIDEOOUT_INSERT = 0x08 # set = inserted SW_CAMERA_LENS_COVER = 0x09 # set = lens covered SW_KEYPAD_SLIDE = 0x0a # set = keypad slide out SW_FRONT_PROXIMITY = 0x0b # set = front proximity sensor active SW_ROTATE_LOCK = 0x0c # set = rotate locked/disabled SW_MAX = 0x0f SW_CNT = (SW_MAX + 1) # Misc events MSC_SERIAL = 0x00 MSC_PULSELED = 0x01 MSC_GESTURE = 0x02 MSC_RAW = 0x03 MSC_SCAN = 0x04 MSC_MAX = 0x07 MSC_CNT = (MSC_MAX + 1) # LEDs LED_NUML = 0x00 LED_CAPSL = 0x01 LED_SCROLLL = 0x02 LED_COMPOSE = 0x03 LED_KANA = 0x04 LED_SLEEP = 0x05 LED_SUSPEND = 0x06 LED_MUTE = 0x07 LED_MISC = 0x08 LED_MAIL = 0x09 LED_CHARGING = 0x0a LED_MAX = 0x0f LED_CNT = (LED_MAX + 1) # Autorepeat values REP_DELAY = 0x00 REP_PERIOD = 0x01 REP_MAX = 0x01 REP_CNT = (REP_MAX + 1) # Sounds SND_CLICK = 0x00 SND_BELL = 0x01 SND_TONE = 0x02 SND_MAX = 0x07 SND_CNT = (SND_MAX + 1) # IDs. ID_BUS = 0 ID_VENDOR = 1 ID_PRODUCT = 2 ID_VERSION = 3 BUS_PCI = 0x01 BUS_ISAPNP = 0x02 BUS_USB = 0x03 BUS_HIL = 0x04 BUS_BLUETOOTH = 0x05 BUS_VIRTUAL = 0x06 BUS_ISA = 0x10 BUS_I8042 = 0x11 BUS_XTKBD = 0x12 BUS_RS232 = 0x13 BUS_GAMEPORT = 0x14 BUS_PARPORT = 0x15 BUS_AMIGA = 0x16 BUS_ADB = 0x17 BUS_I2C = 0x18 BUS_HOST = 0x19 BUS_GSC = 0x1A BUS_ATARI = 0x1B BUS_SPI = 0x1C # MT_TOOL types MT_TOOL_FINGER = 0 MT_TOOL_PEN = 1 MT_TOOL_MAX = 1 # Values describing the status of a force-feedback effect FF_STATUS_STOPPED = 0x00 FF_STATUS_PLAYING = 0x01 FF_STATUS_MAX = 0x01 FF_STATUS_CNT = (FF_STATUS_MAX + 1) # Structures used in ioctls to upload effects to a device # They are pieces of a bigger structure (called ff_effect) # All duration values are expressed in ms. Values above 32767 ms (0x7fff) # should not be used and have unspecified results. """ * struct ff_replay - defines scheduling of the force-feedback effect * @length: duration of the effect * @delay: delay before effect should start playing struct ff_replay { __u16 length; __u16 delay; }; """ """ * struct ff_trigger - defines what triggers the force-feedback effect * @button: number of the button triggering the effect * @interval: controls how soon the effect can be re-triggered struct ff_trigger { __u16 button; __u16 interval; }; """ """ * struct ff_envelope - generic force-feedback effect envelope * @attack_length: duration of the attack (ms) * @attack_level: level at the beginning of the attack * @fade_length: duration of fade (ms) * @fade_level: level at the end of fade * * The @attack_level and @fade_level are absolute values; when applying * envelope force-feedback core will convert to positive/negative * value based on polarity of the default level of the effect. * Valid range for the attack and fade levels is 0x0000 - 0x7fff struct ff_envelope { __u16 attack_length; __u16 attack_level; __u16 fade_length; __u16 fade_level; }; """ """ * struct ff_constant_effect - params of a constant force-feedback effect * @level: strength of the effect; may be negative * @envelope: envelope data struct ff_constant_effect { __s16 level; struct ff_envelope envelope; }; """ """ * struct ff_ramp_effect - params of a ramp force-feedback effect * @start_level: beginning strength of the effect; may be negative * @end_level: final strength of the effect; may be negative * @envelope: envelope data struct ff_ramp_effect { __s16 start_level; __s16 end_level; struct ff_envelope envelope; }; """ """ * struct ff_condition_effect - spring or friction force-feedback effect * @right_saturation: maximum level when joystick moved all way to the right * @left_saturation: same for the left side * @right_coeff: controls how fast the force grows when the joystick moves * to the right * @left_coeff: same for the left side * @deadband: size of the dead zone, where no force is produced * @center: position of the dead zone struct ff_condition_effect { __u16 right_saturation; __u16 left_saturation; __s16 right_coeff; __s16 left_coeff; __u16 deadband; __s16 center; }; """ """ * struct ff_periodic_effect - params of a periodic force-feedback effect * @waveform: kind of the effect (wave) * @period: period of the wave (ms) * @magnitude: peak value * @offset: mean value of the wave (roughly) * @phase: 'horizontal' shift * @envelope: envelope data * @custom_len: number of samples (FF_CUSTOM only) * @custom_data: buffer of samples (FF_CUSTOM only) * * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP, * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined * for the time being as no driver supports it yet. * * Note: the data pointed by custom_data is copied by the driver. * You can therefore dispose of the memory after the upload/update. struct ff_periodic_effect { __u16 waveform; __u16 period; __s16 magnitude; __s16 offset; __u16 phase; struct ff_envelope envelope; __u32 custom_len; __s16 __user *custom_data; }; """ """ * struct ff_rumble_effect - params of a periodic force-feedback effect * @strong_magnitude: magnitude of the heavy motor * @weak_magnitude: magnitude of the light one * * Some rumble pads have two motors of different weight. Strong_magnitude * represents the magnitude of the vibration generated by the heavy one. struct ff_rumble_effect { __u16 strong_magnitude; __u16 weak_magnitude; }; """ """ * struct ff_effect - defines force feedback effect * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING, * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM) * @id: an unique id assigned to an effect * @direction: direction of the effect * @trigger: trigger conditions (struct ff_trigger) * @replay: scheduling of the effect (struct ff_replay) * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect, * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further * defining effect parameters * * This structure is sent through ioctl from the application to the driver. * To create a new effect application should set its @id to -1; the kernel * will return assigned @id which can later be used to update or delete * this effect. * * Direction of the effect is encoded as follows: * 0 deg -> 0x0000 (down) * 90 deg -> 0x4000 (left) * 180 deg -> 0x8000 (up) * 270 deg -> 0xC000 (right) struct ff_effect { __u16 type; __s16 id; __u16 direction; struct ff_trigger trigger; struct ff_replay replay; union { struct ff_constant_effect constant; struct ff_ramp_effect ramp; struct ff_periodic_effect periodic; struct ff_condition_effect condition[2]; /* One for each axis */ struct ff_rumble_effect rumble; } u; }; """ # Force feedback effect types FF_RUMBLE = 0x50 FF_PERIODIC = 0x51 FF_CONSTANT = 0x52 FF_SPRING = 0x53 FF_FRICTION = 0x54 FF_DAMPER = 0x55 FF_INERTIA = 0x56 FF_RAMP = 0x57 FF_EFFECT_MIN = FF_RUMBLE FF_EFFECT_MAX = FF_RAMP # Force feedback periodic effect types FF_SQUARE = 0x58 FF_TRIANGLE = 0x59 FF_SINE = 0x5a FF_SAW_UP = 0x5b FF_SAW_DOWN = 0x5c FF_CUSTOM = 0x5d FF_WAVEFORM_MIN = FF_SQUARE FF_WAVEFORM_MAX = FF_CUSTOM # Set ff device properties FF_GAIN = 0x60 FF_AUTOCENTER = 0x61 FF_MAX = 0x7f FF_CNT = (FF_MAX + 1) """ The following constants, functions and dicts are not part of the original linux input header file. They are included here to make it easier to use the linux input subsystem from python scripts. """ BITS_PER_WORD = 8 def NBITS(x): return ((x - 1) // BITS_PER_WORD) + 1 def OFFSET(x): return (x % BITS_PER_WORD) def BIT(x): return (1 << OFFSET(x)) def INDEX(x): return (x // BITS_PER_WORD) def test_bit(b, a): return ((a[INDEX(b)] >> OFFSET(b)) & 1) EV_TYPES = { EV_SYN : 'EV_SYN', EV_KEY : 'EV_KEY', EV_REL : 'EV_REL', EV_ABS : 'EV_ABS', EV_MSC : 'EV_MSC', EV_SW : 'EV_SW', EV_LED : 'EV_LED', EV_SND : 'EV_SND', EV_REP : 'EV_REP', EV_FF : 'EV_FF', EV_PWR : 'EV_PWR', EV_FF_STATUS : 'EV_FF_STATUS' } EV_SIZES = { EV_KEY : KEY_CNT, EV_REL : REL_CNT, EV_ABS : ABS_CNT, EV_MSC : MSC_CNT, EV_SW : SW_CNT, EV_LED : LED_CNT, EV_SND : SND_CNT, EV_REP : REP_CNT, EV_FF : FF_CNT, EV_FF_STATUS : FF_STATUS_CNT } EV_STRINGS = { # Keys (only buttons, for now) EV_KEY: { BTN_0 : '0', BTN_1 : '1', BTN_2 : '0', BTN_3 : '3', BTN_4 : '4', BTN_5 : '5', BTN_6 : '6', BTN_7 : '7', BTN_8 : '8', BTN_9 : '9', BTN_LEFT : 'LEFT', BTN_RIGHT : 'RIGHT', BTN_MIDDLE : 'MIDDLE', BTN_SIDE : 'SIDE', BTN_EXTRA : 'EXTRA', BTN_FORWARD : 'FORWARD', BTN_BACK : 'BACK', BTN_TASK : 'TASK', BTN_TRIGGER : 'TRIGGER', BTN_THUMB : 'THUMB', BTN_THUMB2 : 'THUMB2', BTN_TOP : 'TOP', BTN_TOP2 : 'TOP2', BTN_PINKIE : 'PINKIE', BTN_BASE : 'BASE', BTN_BASE2 : 'BASE2', BTN_BASE3 : 'BASE3', BTN_BASE4 : 'BASE4', BTN_BASE5 : 'BASE5', BTN_BASE6 : 'BASE6', BTN_DEAD : 'DEAD', BTN_A : 'A', BTN_B : 'B', BTN_C : 'C', BTN_X : 'X', BTN_Y : 'Y', BTN_Z : 'Z', BTN_TL : 'TL', BTN_TR : 'TR', BTN_TL2 : 'TL2', BTN_TR2 : 'TR2', BTN_SELECT : 'SELECT', BTN_START : 'START', BTN_MODE : 'MODE', BTN_THUMBL : 'THUMBL', BTN_THUMBR : 'THUMBR', BTN_TOOL_PEN : 'TOOL_PEN', BTN_TOOL_RUBBER : 'TOOL_RUBBER', BTN_TOOL_BRUSH : 'TOOL_BRUSH', BTN_TOOL_PENCIL : 'TOOL_PENCIL', BTN_TOOL_AIRBRUSH : 'TOOL_AIRBRUSH', BTN_TOOL_FINGER : 'TOOL_FINGER', BTN_TOOL_MOUSE : 'TOOL_MOUSE', BTN_TOOL_LENS : 'TOOL_LENS', BTN_TOOL_QUINTTAP : 'TOOL_QUINTTAP', BTN_TOUCH : 'TOUCH', BTN_STYLUS : 'STYLUS', BTN_STYLUS2 : 'STYLUS2', BTN_TOOL_DOUBLETAP : 'TOOL_DOUBLETAP', BTN_TOOL_TRIPLETAP : 'TOOL_TRIPLETAP', BTN_TOOL_QUADTAP : 'TOOL_QUADTAP', BTN_GEAR_DOWN : 'TOOL_GEAR_DOWN', BTN_GEAR_UP : 'TOOL_GEAR_UP', }, # Relative axes EV_REL: { REL_X : 'X', REL_Y : 'Y', REL_Z : 'Z', REL_RX : 'RX', REL_RY : 'RY', REL_RZ : 'RZ', REL_HWHEEL : 'HWHEEL', REL_DIAL : 'DIAL', REL_WHEEL : 'WHEEL', REL_MISC : 'MISC', }, # Absolute axes EV_ABS: { ABS_X : 'X', ABS_Y : 'Y', ABS_Z : 'Z', ABS_RX : 'RX', ABS_RY : 'RY', ABS_RZ : 'RZ', ABS_THROTTLE : 'THROTTLE', ABS_RUDDER : 'RUDDER', ABS_WHEEL : 'WHEEL', ABS_GAS : 'GAS', ABS_BRAKE : 'BRAKE', ABS_HAT0X : 'HAT0X', ABS_HAT0Y : 'HAT0Y', ABS_HAT1X : 'HAT1X', ABS_HAT1Y : 'HAT1Y', ABS_HAT2X : 'HAT2X', ABS_HAT2Y : 'HAT2Y', ABS_HAT3X : 'HAT3X', ABS_HAT3Y : 'HAT3Y', ABS_PRESSURE : 'PRESSURE', ABS_DISTANCE : 'DISTANCE', ABS_TILT_X : 'TILT_X', ABS_TILT_Y : 'TILT_Y', ABS_TOOL_WIDTH : 'TOOL_WIDTH', ABS_VOLUME : 'VOLUME', ABS_MISC : 'MISC', ABS_MT_SLOT : 'MT_SLOT', ABS_MT_TOUCH_MAJOR : 'MT_TOUCH_MAJOR', ABS_MT_TOUCH_MINOR : 'MT_TOUCH_MINOR', ABS_MT_WIDTH_MAJOR : 'MT_WIDTH_MAJOR', ABS_MT_WIDTH_MINOR : 'MT_WIDTH_MINOR', ABS_MT_ORIENTATION : 'MT_ORIENTATION', ABS_MT_POSITION_X : 'MT_POSITION_X', ABS_MT_POSITION_Y : 'MT_POSITION_Y', ABS_MT_TOOL_TYPE : 'MT_TOOL_TYPE', ABS_MT_BLOB_ID : 'MT_BLOB_ID', ABS_MT_TRACKING_ID : 'MT_TRACKING_ID', ABS_MT_PRESSURE : 'MT_PRESSURE', ABS_MT_DISTANCE : 'MT_DISTANCE' }, # Switches EV_SW: { SW_LID : 'LID', SW_TABLET_MODE : 'TABLET_MODE', SW_HEADPHONE_INSERT : 'HEADPHONE_INSERT', SW_RFKILL_ALL : 'RFKILL_ALL', SW_MICROPHONE_INSERT : 'MICROPHONE_INSERT', SW_DOCK : 'DOCK', SW_LINEOUT_INSERT : 'LINEOUT_INSERT', SW_JACK_PHYSICAL_INSERT : 'JACK_PHYSICAL_INSERT', SW_VIDEOOUT_INSERT : 'VIDEOOUT_INSERT', SW_CAMERA_LENS_COVER : 'CAMERA_LENS_COVER', SW_KEYPAD_SLIDE : 'KEYPAD_SLIDE', SW_FRONT_PROXIMITY : 'FRONT_PROXIMITY', SW_ROTATE_LOCK : 'ROTATE_LOCK', }, # Misc events EV_MSC: { MSC_SERIAL : 'SERIAL', MSC_PULSELED : 'PULSELED', MSC_GESTURE : 'GESTURE', MSC_RAW : 'RAW', MSC_SCAN : 'SCAN', }, # LEDs EV_LED: { LED_NUML : 'NUML', LED_CAPSL : 'CAPSL', LED_SCROLLL : 'SCROLLL', LED_COMPOSE : 'COMPOSE', LED_KANA : 'KANA', LED_SLEEP : 'SLEEP', LED_SUSPEND : 'SLEEP', LED_MUTE : 'SLEEP', LED_MISC : 'SLEEP', LED_MAIL : 'SLEEP', LED_CHARGING : 'SLEEP', }, # Autorepeat values EV_REP: { REP_DELAY : 'DELAY', REP_PERIOD : 'PERIOD', }, # Sounds EV_SND: { SND_CLICK : 'CLICK', SND_BELL : 'BELL' } }