linux_input.py revision b23d9138d65ab68907515e46acc2753a8ccf3f1b
1# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Description:
6#
7# Python version of include/linux/input.h
8#  as of kernel v2.6.39
9
10from linux_ioctl import *
11
12# The event structure itself
13#   struct input_event {
14#       struct timeval time;
15#       __u16 type;
16#       __u16 code;
17#       __s32 value;
18#   };
19#
20#   struct timeval {
21#       __kernel_time_t         tv_sec;         /* seconds */
22#       __kernel_suseconds_t    tv_usec;        /* microseconds */
23#   };
24input_event_t = 'LLHHi'
25
26
27# Protocol version.
28EV_VERSION = 0x010001
29
30# IOCTLs (0x00 - 0x7f)
31
32#   struct input_id {
33#       __u16 bustype;
34#       __u16 vendor;
35#       __u16 product;
36#       __u16 version;
37#   };
38input_id_t = 'HHHH'
39
40# struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
41# @value: latest reported value for the axis.
42# @minimum: specifies minimum value for the axis.
43# @maximum: specifies maximum value for the axis.
44# @fuzz: specifies fuzz value used to filter noise from the event stream.
45# @flat: values within this value are reported as 0.
46# @resolution: specifies resolution for the values reported for the axis.
47#
48# Note that input core does not clamp reported values to the
49# [minimum, maximum] limits, such task is left to userspace.
50#
51# Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in
52# units per millimeter (units/mm), resolution for rotational axes
53# (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
54#
55#   struct input_absinfo {
56#       __s32 value;
57#       __s32 minimum;
58#       __s32 maximum;
59#       __s32 fuzz;
60#       __s32 flat;
61#       __s32 resolution;
62#   };
63input_absinfo_t = 'iiiiii'
64
65# struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
66# @scancode: scancode represented in machine-endian form.
67# @len: length of the scancode that resides in @scancode buffer.
68# @index: index in the keymap, may be used instead of scancode
69# @flags: allows to specify how kernel should handle the request. For
70# example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
71# should perform lookup in keymap by @index instead of @scancode
72# @keycode: key code assigned to this scancode
73#
74# The structure is used to retrieve and modify keymap data. Users have
75# option of performing lookup either by @scancode itself or by @index
76# in keymap entry. EVIOCGKEYCODE will also return scancode or index
77# (depending on which element was used to perform lookup).
78#
79#   struct input_keymap_entry {
80#       __u8  flags;
81#       __u8  len;
82#       __u16 index;
83#       __u32 keycode;
84#       __u8  scancode[32];
85#   };
86input_keymap_entry_t = 'BBHI32B'
87
88EVIOCGVERSION           = IOR('E', 0x01, 'i')           # get driver version
89EVIOCGID                = IOR('E', 0x02, input_id_t)    # get device ID
90EVIOCGREP               = IOR('E', 0x03, '2I')          # get repeat settings
91EVIOCSREP               = IOW('E', 0x03, '2I')          # set repeat settings
92
93EVIOCGKEYCODE           = IOR('E', 0x04, '2I')          # get keycode
94EVIOCGKEYCODE_V2        = IOR('E', 0x04, input_keymap_entry_t)
95EVIOCSKEYCODE           = IOW('E', 0x04, '2I')          # set keycode
96EVIOCSKEYCODE_V2        = IOW('E', 0x04, input_keymap_entry_t)
97
98def EVIOCGNAME(length):
99    return IOC(IOC_READ, 'E', 0x06, length)  # get device name
100
101def EVIOCGPHYS(length):
102    return IOC(IOC_READ, 'E', 0x07, length)  # get physical location
103
104def EVIOCGUNIQ(length):
105    return IOC(IOC_READ, 'E', 0x08, length)  # get unique identifier
106
107def EVIOCGPROP(length):
108    return IOC(IOC_READ, 'E', 0x09, length)  # get device properties
109
110def EVIOCGMTSLOTS(length):
111    return IOC(IOC_READ, 'E', 0x0a, length)  # get mt slot values
112
113def EVIOCGKEY(length):
114    return IOC(IOC_READ, 'E', 0x18, length)  # get global key state
115
116def EVIOCGLED(length):
117    return IOC(IOC_READ, 'E', 0x19, length)  # get all LEDs
118
119def EVIOCGSND(length):
120    return IOC(IOC_READ, 'E', 0x1a, length)  # get all sounds status
121
122def EVIOCGSW(length):
123    return IOC(IOC_READ, 'E', 0x1b, length)  # get all switch states
124
125def EVIOCGBIT(ev,length):
126    return IOC(IOC_READ, 'E', 0x20 + ev, length)  # get event bits
127
128def EVIOCGABS(axis):
129    return IOR('E', 0x40 + axis, input_absinfo_t)  # get abs value/limits
130
131def EVIOCSABS(axis):
132    return IOW('E', 0xc0 + axis, input_absinfo_t)  # set abs value/limits
133
134# send a force effect to a force feedback device
135"""  TODO: Support force feedback. """
136#EVIOCSFF                = IOW('E', 0x80, ff_effect_t)
137# Erase a force effect
138EVIOCRMFF               = IOW('E', 0x81, 'i')
139# Report number of effects playable at the same time
140EVIOCGEFFECTS           = IOR('E', 0x84, 'i')
141# Grab/Release device
142EVIOCGRAB               = IOW('E', 0x90, 'i')
143
144# Device properties and quirks
145INPUT_PROP_POINTER   = 0x00 # needs a pointer
146INPUT_PROP_DIRECT    = 0x01 # direct input devices
147INPUT_PROP_BUTTONPAD = 0x02 # has button(s) under pad
148INPUT_PROP_SEMI_MT   = 0x03 # touch rectangle only
149
150INPUT_PROP_MAX       = 0x1f
151INPUT_PROP_CNT       = (INPUT_PROP_MAX + 1)
152
153# Event types
154EV_SYN          = 0x00
155EV_KEY          = 0x01
156EV_REL          = 0x02
157EV_ABS          = 0x03
158EV_MSC          = 0x04
159EV_SW           = 0x05
160EV_LED          = 0x11
161EV_SND          = 0x12
162EV_REP          = 0x14
163EV_FF           = 0x15
164EV_PWR          = 0x16
165EV_FF_STATUS    = 0x17
166EV_MAX          = 0x1f
167EV_CNT          = (EV_MAX + 1)
168
169# Synchronization events.
170
171SYN_REPORT      = 0
172SYN_CONFIG      = 1
173SYN_MT_REPORT   = 2
174SYN_DROPPED     = 3
175
176"""
177 * Keys and buttons
178 *
179 * Most of the keys/buttons are modeled after USB HUT 1.12
180 * (see http://www.usb.org/developers/hidpage).
181 * Abbreviations in the comments:
182 * AC - Application Control
183 * AL - Application Launch Button
184 * SC - System Control
185"""
186
187KEY_RESERVED    =  0
188KEY_ESC         =  1
189KEY_1           =  2
190KEY_2           =  3
191KEY_3           =  4
192KEY_4           =  5
193KEY_5           =  6
194KEY_6           =  7
195KEY_7           =  8
196KEY_8           =  9
197KEY_9           = 10
198KEY_0           = 11
199KEY_MINUS       = 12
200KEY_EQUAL       = 13
201KEY_BACKSPACE   = 14
202KEY_TAB         = 15
203KEY_Q           = 16
204KEY_W           = 17
205KEY_E           = 18
206KEY_R           = 19
207KEY_T           = 20
208KEY_Y           = 21
209KEY_U           = 22
210KEY_I           = 23
211KEY_O           = 24
212KEY_P           = 25
213KEY_LEFTBRACE   = 26
214KEY_RIGHTBRACE  = 27
215KEY_ENTER       = 28
216KEY_LEFTCTRL    = 29
217KEY_A           = 30
218KEY_S           = 31
219KEY_D           = 32
220KEY_F           = 33
221KEY_G           = 34
222KEY_H           = 35
223KEY_J           = 36
224KEY_K           = 37
225KEY_L           = 38
226KEY_SEMICOLON   = 39
227KEY_APOSTROPHE  = 40
228KEY_GRAVE       = 41
229KEY_LEFTSHIFT   = 42
230KEY_BACKSLASH   = 43
231KEY_Z           = 44
232KEY_X           = 45
233KEY_C           = 46
234KEY_V           = 47
235KEY_B           = 48
236KEY_N           = 49
237KEY_M           = 50
238KEY_COMMA       = 51
239KEY_DOT         = 52
240KEY_SLASH       = 53
241KEY_RIGHTSHIFT  = 54
242KEY_KPASTERISK  = 55
243KEY_LEFTALT     = 56
244KEY_SPACE       = 57
245KEY_CAPSLOCK    = 58
246KEY_F1          = 59
247KEY_F2          = 60
248KEY_F3          = 61
249KEY_F4          = 62
250KEY_F5          = 63
251KEY_F6          = 64
252KEY_F7          = 65
253KEY_F8          = 66
254KEY_F9          = 67
255KEY_F10         = 68
256KEY_NUMLOCK     = 69
257KEY_SCROLLLOCK  = 70
258KEY_KP7         = 71
259KEY_KP8         = 72
260KEY_KP9         = 73
261KEY_KPMINUS     = 74
262KEY_KP4         = 75
263KEY_KP5         = 76
264KEY_KP6         = 77
265KEY_KPPLUS      = 78
266KEY_KP1         = 79
267KEY_KP2         = 80
268KEY_KP3         = 81
269KEY_KP0         = 82
270KEY_KPDOT       = 83
271
272KEY_ZENKAKUHANKAKU = 85
273KEY_102ND       = 86
274KEY_F11         = 87
275KEY_F12         = 88
276KEY_RO          = 89
277KEY_KATAKANA    = 90
278KEY_HIRAGANA    = 91
279KEY_HENKAN      = 92
280KEY_KATAKANAHIRAGANA = 93
281KEY_MUHENKAN    = 94
282KEY_KPJPCOMMA   = 95
283KEY_KPENTER     = 96
284KEY_RIGHTCTRL   = 97
285KEY_KPSLASH     = 98
286KEY_SYSRQ       = 99
287KEY_RIGHTALT    = 100
288KEY_LINEFEED    = 101
289KEY_HOME        = 102
290KEY_UP          = 103
291KEY_PAGEUP      = 104
292KEY_LEFT        = 105
293KEY_RIGHT       = 106
294KEY_END         = 107
295KEY_DOWN        = 108
296KEY_PAGEDOWN    = 109
297KEY_INSERT      = 110
298KEY_DELETE      = 111
299KEY_MACRO       = 112
300KEY_MUTE        = 113
301KEY_VOLUMEDOWN  = 114
302KEY_VOLUMEUP    = 115
303KEY_POWER       = 116     # SC System Power Down
304KEY_KPEQUAL     = 117
305KEY_KPPLUSMINUS = 118
306KEY_PAUSE       = 119
307KEY_SCALE       = 120     # AL Compiz Scale (Expose)
308
309KEY_KPCOMMA     = 121
310KEY_HANGEUL     = 122
311KEY_HANGUEL     = KEY_HANGEUL
312KEY_HANJA       = 123
313KEY_YEN         = 124
314KEY_LEFTMETA    = 125
315KEY_RIGHTMETA   = 126
316KEY_COMPOSE     = 127
317
318KEY_STOP        = 128   # AC Stop
319KEY_AGAIN       = 129
320KEY_PROPS       = 130   # AC Properties
321KEY_UNDO        = 131   # AC Undo
322KEY_FRONT       = 132
323KEY_COPY        = 133   # AC Copy
324KEY_OPEN        = 134   # AC Open
325KEY_PASTE       = 135   # AC Paste
326KEY_FIND        = 136   # AC Search
327KEY_CUT         = 137   # AC Cut
328KEY_HELP        = 138   # AL Integrated Help Center
329KEY_MENU        = 139   # Menu (show menu)
330KEY_CALC        = 140   # AL Calculator
331KEY_SETUP       = 141
332KEY_SLEEP       = 142   # SC System Sleep
333KEY_WAKEUP      = 143   # System Wake Up
334KEY_FILE        = 144   # AL Local Machine Browser
335KEY_SENDFILE    = 145
336KEY_DELETEFILE  = 146
337KEY_XFER        = 147
338KEY_PROG1       = 148
339KEY_PROG2       = 149
340KEY_WWW         = 150   # AL Internet Browser
341KEY_MSDOS       = 151
342KEY_COFFEE      = 152   # AL Terminal Lock/Screensaver
343KEY_SCREENLOCK  = KEY_COFFEE
344KEY_DIRECTION   = 153
345KEY_CYCLEWINDOWS = 154
346KEY_MAIL        = 155
347KEY_BOOKMARKS   = 156   # AC Bookmarks
348KEY_COMPUTER    = 157
349KEY_BACK        = 158   # AC Back
350KEY_FORWARD     = 159   # AC Forward
351KEY_CLOSECD     = 160
352KEY_EJECTCD     = 161
353KEY_EJECTCLOSECD = 162
354KEY_NEXTSONG    = 163
355KEY_PLAYPAUSE   = 164
356KEY_PREVIOUSSONG = 165
357KEY_STOPCD      = 166
358KEY_RECORD      = 167
359KEY_REWIND      = 168
360KEY_PHONE       = 169   # Media Select Telephone
361KEY_ISO         = 170
362KEY_CONFIG      = 171   # AL Consumer Control Configuration
363KEY_HOMEPAGE    = 172   # AC Home
364KEY_REFRESH     = 173   # AC Refresh
365KEY_EXIT        = 174   # AC Exit
366KEY_MOVE        = 175
367KEY_EDIT        = 176
368KEY_SCROLLUP    = 177
369KEY_SCROLLDOWN  = 178
370KEY_KPLEFTPAREN = 179
371KEY_KPRIGHTPAREN = 180
372KEY_NEW         = 181   # AC New
373KEY_REDO        = 182   # AC Redo/Repeat
374
375KEY_F13         = 183
376KEY_F14         = 184
377KEY_F15         = 185
378KEY_F16         = 186
379KEY_F17         = 187
380KEY_F18         = 188
381KEY_F19         = 189
382KEY_F20         = 190
383KEY_F21         = 191
384KEY_F22         = 192
385KEY_F23         = 193
386KEY_F24         = 194
387
388KEY_PLAYCD      = 200
389KEY_PAUSECD     = 201
390KEY_PROG3       = 202
391KEY_PROG4       = 203
392KEY_DASHBOARD   = 204   # AL Dashboard
393KEY_SUSPEND     = 205
394KEY_CLOSE       = 206   # AC Close
395KEY_PLAY        = 207
396KEY_FASTFORWARD = 208
397KEY_BASSBOOST   = 209
398KEY_PRINT       = 210   # AC Print
399KEY_HP          = 211
400KEY_CAMERA      = 212
401KEY_SOUND       = 213
402KEY_QUESTION    = 214
403KEY_EMAIL       = 215
404KEY_CHAT        = 216
405KEY_SEARCH      = 217
406KEY_CONNECT     = 218
407KEY_FINANCE     = 219   #AL Checkbook/Finance
408KEY_SPORT       = 220
409KEY_SHOP        = 221
410KEY_ALTERASE    = 222
411KEY_CANCEL      = 223   # AC Cancel
412KEY_BRIGHTNESSDOWN = 224
413KEY_BRIGHTNESSUP = 225
414KEY_MEDIA       = 226
415
416KEY_SWITCHVIDEOMODE = 227   # Cycle between available video
417                            # outputs (Monitor/LCD/TV-out/etc)
418KEY_KBDILLUMTOGGLE  = 228
419KEY_KBDILLUMDOWN    = 229
420KEY_KBDILLUMUP      = 230
421
422KEY_SEND            = 231   # AC Send
423KEY_REPLY           = 232   # AC Reply
424KEY_FORWARDMAIL     = 233   # AC Forward Msg
425KEY_SAVE            = 234   # AC Save
426KEY_DOCUMENTS       = 235
427
428KEY_BATTERY         = 236
429
430KEY_BLUETOOTH       = 237
431KEY_WLAN            = 238
432KEY_UWB             = 239
433
434KEY_UNKNOWN         = 240
435
436KEY_VIDEO_NEXT      = 241   # drive next video source
437KEY_VIDEO_PREV      = 242   # drive previous video source
438KEY_BRIGHTNESS_CYCLE = 243  # brightness up, after max is min
439KEY_BRIGHTNESS_ZERO = 244   # brightness off, use ambient
440KEY_DISPLAY_OFF     = 245   # display device to off state
441
442KEY_WIMAX           = 246
443KEY_RFKILL          = 247   # Key that controls all radios
444
445# Code 255 is reserved for special needs of AT keyboard driver
446
447BTN_MISC        = 0x100
448BTN_0           = 0x100
449BTN_1           = 0x101
450BTN_2           = 0x102
451BTN_3           = 0x103
452BTN_4           = 0x104
453BTN_5           = 0x105
454BTN_6           = 0x106
455BTN_7           = 0x107
456BTN_8           = 0x108
457BTN_9           = 0x109
458
459BTN_MOUSE       = 0x110
460BTN_LEFT        = 0x110
461BTN_RIGHT       = 0x111
462BTN_MIDDLE      = 0x112
463BTN_SIDE        = 0x113
464BTN_EXTRA       = 0x114
465BTN_FORWARD     = 0x115
466BTN_BACK        = 0x116
467BTN_TASK        = 0x117
468
469BTN_JOYSTICK    = 0x120
470BTN_TRIGGER     = 0x120
471BTN_THUMB       = 0x121
472BTN_THUMB2      = 0x122
473BTN_TOP         = 0x123
474BTN_TOP2        = 0x124
475BTN_PINKIE      = 0x125
476BTN_BASE        = 0x126
477BTN_BASE2       = 0x127
478BTN_BASE3       = 0x128
479BTN_BASE4       = 0x129
480BTN_BASE5       = 0x12a
481BTN_BASE6       = 0x12b
482BTN_DEAD        = 0x12f
483
484BTN_GAMEPAD     = 0x130
485BTN_A           = 0x130
486BTN_B           = 0x131
487BTN_C           = 0x132
488BTN_X           = 0x133
489BTN_Y           = 0x134
490BTN_Z           = 0x135
491BTN_TL          = 0x136
492BTN_TR          = 0x137
493BTN_TL2         = 0x138
494BTN_TR2         = 0x139
495BTN_SELECT      = 0x13a
496BTN_START       = 0x13b
497BTN_MODE        = 0x13c
498BTN_THUMBL      = 0x13d
499BTN_THUMBR      = 0x13e
500
501BTN_DIGI        = 0x140
502BTN_TOOL_PEN    = 0x140
503BTN_TOOL_RUBBER = 0x141
504BTN_TOOL_BRUSH  = 0x142
505BTN_TOOL_PENCIL = 0x143
506BTN_TOOL_AIRBRUSH = 0x144
507BTN_TOOL_FINGER = 0x145
508BTN_TOOL_MOUSE  = 0x146
509BTN_TOOL_LENS   = 0x147
510BTN_TOOL_QUINTTAP = 0x148  # Five fingers on trackpad
511BTN_TOUCH       = 0x14a
512BTN_STYLUS      = 0x14b
513BTN_STYLUS2     = 0x14c
514BTN_TOOL_DOUBLETAP = 0x14d
515BTN_TOOL_TRIPLETAP = 0x14e
516BTN_TOOL_QUADTAP = 0x14f   # Four fingers on trackpad
517
518BTN_WHEEL       = 0x150
519BTN_GEAR_DOWN   = 0x150
520BTN_GEAR_UP     = 0x151
521
522
523KEY_OK          = 0x160
524KEY_SELECT      = 0x161
525KEY_GOTO        = 0x162
526KEY_CLEAR       = 0x163
527KEY_POWER2      = 0x164
528KEY_OPTION      = 0x165
529KEY_INFO        = 0x166   #AL OEM Features/Tips/Tutorial
530KEY_TIME        = 0x167
531KEY_VENDOR      = 0x168
532KEY_ARCHIVE     = 0x169
533KEY_PROGRAM     = 0x16a   # Media Select Program Guide
534KEY_CHANNEL     = 0x16b
535KEY_FAVORITES   = 0x16c
536KEY_EPG         = 0x16d
537KEY_PVR         = 0x16e   # Media Select Home
538KEY_MHP         = 0x16f
539KEY_LANGUAGE    = 0x170
540KEY_TITLE       = 0x171
541KEY_SUBTITLE    = 0x172
542KEY_ANGLE       = 0x173
543KEY_ZOOM        = 0x174
544KEY_MODE        = 0x175
545KEY_KEYBOARD    = 0x176
546KEY_SCREEN      = 0x177
547KEY_PC          = 0x178   # Media Select Computer
548KEY_TV          = 0x179   # Media Select TV
549KEY_TV2         = 0x17a   # Media Select Cable
550KEY_VCR         = 0x17b   # Media Select VCR
551KEY_VCR2        = 0x17c   # VCR Plus
552KEY_SAT         = 0x17d   # Media Select Satellite
553KEY_SAT2        = 0x17e
554KEY_CD          = 0x17f   # Media Select CD
555KEY_TAPE        = 0x180   # Select Tape
556KEY_RADIO       = 0x181
557KEY_TUNER       = 0x182   # Media Select Tuner
558KEY_PLAYER      = 0x183
559KEY_TEXT        = 0x184
560KEY_DVD         = 0x185   # Media Select DVD
561KEY_AUX         = 0x186
562KEY_MP3         = 0x187
563KEY_AUDIO       = 0x188   # AL Audio Browser
564KEY_VIDEO       = 0x189   # AL Movie Browser
565KEY_DIRECTORY   = 0x18a
566KEY_LIST        = 0x18b
567KEY_MEMO        = 0x18   # Media Select Messages
568KEY_CALENDAR    = 0x18d
569KEY_RED         = 0x18e
570KEY_GREEN       = 0x18f
571KEY_YELLOW      = 0x190
572KEY_BLUE        = 0x191
573KEY_CHANNELUP   = 0x192   # Channel Increment
574KEY_CHANNELDOWN = 0x193   # Channel Decrement
575KEY_FIRST       = 0x194
576KEY_LAST        = 0x195   # Recall Last
577KEY_AB          = 0x196
578KEY_NEXT        = 0x197
579KEY_RESTART     = 0x198
580KEY_SLOW        = 0x199
581KEY_SHUFFLE     = 0x19a
582KEY_BREAK       = 0x19b
583KEY_PREVIOUS    = 0x19c
584KEY_DIGITS      = 0x19d
585KEY_TEEN        = 0x19e
586KEY_TWEN        = 0x19f
587KEY_VIDEOPHONE  = 0x1a0   # Media Select Video Phone
588KEY_GAMES       = 0x1a1   # Media Select Games
589KEY_ZOOMIN      = 0x1a2   # AC Zoom In
590KEY_ZOOMOUT     = 0x1a3   # AC Zoom Out
591KEY_ZOOMRESET   = 0x1a4   # AC Zoom
592KEY_WORDPROCESSOR = 0x1a5   # AL Word Processor
593KEY_EDITOR      = 0x1a6   # AL Text Editor
594KEY_SPREADSHEET = 0x1a7   # AL Spreadsheet
595KEY_GRAPHICSEDITOR = 0x1a8   # AL Graphics Editor
596KEY_PRESENTATION = 0x1a9   # AL Presentation App
597KEY_DATABASE    = 0x1aa   # AL Database App
598KEY_NEWS        = 0x1ab   # AL Newsreader
599KEY_VOICEMAIL   = 0x1ac   # AL Voicemail
600KEY_ADDRESSBOOK = 0x1ad   # AL Contacts/Address Book
601KEY_MESSENGER   = 0x1ae   # AL Instant Messaging
602KEY_DISPLAYTOGGLE = 0x1af   # Turn display (LCD) on and off
603KEY_SPELLCHECK  = 0x1b0   # AL Spell Check
604KEY_LOGOFF      = 0x1b1   #* AL Logoff
605
606KEY_DOLLAR      = 0x1b2
607KEY_EURO        = 0x1b3
608
609KEY_FRAMEBACK   = 0x1b4   # Consumer - transport controls
610KEY_FRAMEFORWARD = 0x1b5
611KEY_CONTEXT_MENU = 0x1b6   # GenDesc - system context menu
612KEY_MEDIA_REPEAT = 0x1b7   # Consumer - transport control
613KEY_10CHANNELSUP = 0x1b8   # 10 channels up (10+)
614KEY_10CHANNELSDOWN = 0x1b9   # 10 channels down (10-)
615KEY_IMAGES       = 0x1ba   # AL Image Browser
616
617KEY_DEL_EOL      = 0x1c0
618KEY_DEL_EOS      = 0x1c1
619KEY_INS_LINE     = 0x1c2
620KEY_DEL_LINE     = 0x1c3
621
622KEY_FN           = 0x1d0
623KEY_FN_ESC       = 0x1d1
624KEY_FN_F1        = 0x1d2
625KEY_FN_F2        = 0x1d3
626KEY_FN_F3        = 0x1d4
627KEY_FN_F4        = 0x1d5
628KEY_FN_F5        = 0x1d6
629KEY_FN_F6        = 0x1d7
630KEY_FN_F7        = 0x1d8
631KEY_FN_F8        = 0x1d9
632KEY_FN_F9        = 0x1da
633KEY_FN_F10       = 0x1db
634KEY_FN_F11       = 0x1dc
635KEY_FN_F12       = 0x1dd
636KEY_FN_1         = 0x1de
637KEY_FN_2         = 0x1df
638KEY_FN_D         = 0x1e0
639KEY_FN_E         = 0x1e1
640KEY_FN_F         = 0x1e2
641KEY_FN_S         = 0x1e3
642KEY_FN_B         = 0x1e4
643
644KEY_BRL_DOT1     = 0x1f1
645KEY_BRL_DOT2     = 0x1f2
646KEY_BRL_DOT3     = 0x1f3
647KEY_BRL_DOT4     = 0x1f4
648KEY_BRL_DOT5     = 0x1f5
649KEY_BRL_DOT6     = 0x1f6
650KEY_BRL_DOT7     = 0x1f7
651KEY_BRL_DOT8     = 0x1f8
652KEY_BRL_DOT9     = 0x1f9
653KEY_BRL_DOT10    = 0x1fa
654
655KEY_NUMERIC_0    = 0x200   # used by phones, remote controls,
656KEY_NUMERIC_1    = 0x201   # and other keypads
657KEY_NUMERIC_2    = 0x202
658KEY_NUMERIC_3    = 0x203
659KEY_NUMERIC_4    = 0x204
660KEY_NUMERIC_5    = 0x205
661KEY_NUMERIC_6    = 0x206
662KEY_NUMERIC_7    = 0x207
663KEY_NUMERIC_8    = 0x208
664KEY_NUMERIC_9    = 0x209
665KEY_NUMERIC_STAR = 0x20a
666KEY_NUMERIC_POUND = 0x20b
667
668KEY_CAMERA_FOCUS = 0x210
669KEY_WPS_BUTTON   = 0x211   # WiFi Protected Setup key
670
671KEY_TOUCHPAD_TOGGLE = 0x212   # Request switch touchpad on or off
672KEY_TOUCHPAD_ON  = 0x213
673KEY_TOUCHPAD_OFF = 0x214
674
675KEY_CAMERA_ZOOMIN = 0x215
676KEY_CAMERA_ZOOMOUT = 0x216
677KEY_CAMERA_UP    = 0x217
678KEY_CAMERA_DOWN  = 0x218
679KEY_CAMERA_LEFT  = 0x219
680KEY_CAMERA_RIGHT = 0x21a
681
682BTN_TRIGGER_HAPPY  = 0x2c0
683BTN_TRIGGER_HAPPY1 = 0x2c0
684BTN_TRIGGER_HAPPY2 = 0x2c1
685BTN_TRIGGER_HAPPY3 = 0x2c2
686BTN_TRIGGER_HAPPY4 = 0x2c3
687BTN_TRIGGER_HAPPY5 = 0x2c4
688BTN_TRIGGER_HAPPY6 = 0x2c5
689BTN_TRIGGER_HAPPY7 = 0x2c6
690BTN_TRIGGER_HAPPY8 = 0x2c7
691BTN_TRIGGER_HAPPY9 = 0x2c8
692BTN_TRIGGER_HAPPY10 = 0x2c9
693BTN_TRIGGER_HAPPY11 = 0x2ca
694BTN_TRIGGER_HAPPY12 = 0x2cb
695BTN_TRIGGER_HAPPY13 = 0x2cc
696BTN_TRIGGER_HAPPY14 = 0x2cd
697BTN_TRIGGER_HAPPY15 = 0x2ce
698BTN_TRIGGER_HAPPY16 = 0x2cf
699BTN_TRIGGER_HAPPY17 = 0x2d0
700BTN_TRIGGER_HAPPY18 = 0x2d1
701BTN_TRIGGER_HAPPY19 = 0x2d2
702BTN_TRIGGER_HAPPY20 = 0x2d3
703BTN_TRIGGER_HAPPY21 = 0x2d4
704BTN_TRIGGER_HAPPY22 = 0x2d5
705BTN_TRIGGER_HAPPY23 = 0x2d6
706BTN_TRIGGER_HAPPY24 = 0x2d7
707BTN_TRIGGER_HAPPY25 = 0x2d8
708BTN_TRIGGER_HAPPY26 = 0x2d9
709BTN_TRIGGER_HAPPY27 = 0x2da
710BTN_TRIGGER_HAPPY28 = 0x2db
711BTN_TRIGGER_HAPPY29 = 0x2dc
712BTN_TRIGGER_HAPPY30 = 0x2dd
713BTN_TRIGGER_HAPPY31 = 0x2de
714BTN_TRIGGER_HAPPY32 = 0x2df
715BTN_TRIGGER_HAPPY33 = 0x2e0
716BTN_TRIGGER_HAPPY34 = 0x2e1
717BTN_TRIGGER_HAPPY35 = 0x2e2
718BTN_TRIGGER_HAPPY36 = 0x2e3
719BTN_TRIGGER_HAPPY37 = 0x2e4
720BTN_TRIGGER_HAPPY38 = 0x2e5
721BTN_TRIGGER_HAPPY39 = 0x2e6
722BTN_TRIGGER_HAPPY40 = 0x2e7
723
724
725# We avoid low common keys in module aliases so they don't get huge
726#KEY_MIN_INTERESTING = KEY_MUTE
727KEY_MAX             = 0x2ff
728KEY_CNT             = (KEY_MAX + 1)
729
730# Relative axes
731REL_X               = 0x00
732REL_Y               = 0x01
733REL_Z               = 0x02
734REL_RX              = 0x03
735REL_RY              = 0x04
736REL_RZ              = 0x05
737REL_HWHEEL          = 0x06
738REL_DIAL            = 0x07
739REL_WHEEL           = 0x08
740REL_MISC            = 0x09
741REL_MAX             = 0x0f
742REL_CNT             = (REL_MAX + 1)
743
744# Absolute axes
745ABS_X               = 0x00
746ABS_Y               = 0x01
747ABS_Z               = 0x02
748ABS_RX              = 0x03
749ABS_RY              = 0x04
750ABS_RZ              = 0x05
751ABS_THROTTLE        = 0x06
752ABS_RUDDER          = 0x07
753ABS_WHEEL           = 0x08
754ABS_GAS             = 0x09
755ABS_BRAKE           = 0x0a
756ABS_HAT0X           = 0x10
757ABS_HAT0Y           = 0x11
758ABS_HAT1X           = 0x12
759ABS_HAT1Y           = 0x13
760ABS_HAT2X           = 0x14
761ABS_HAT2Y           = 0x15
762ABS_HAT3X           = 0x16
763ABS_HAT3Y           = 0x17
764ABS_PRESSURE        = 0x18
765ABS_DISTANCE        = 0x19
766ABS_TILT_X          = 0x1a
767ABS_TILT_Y          = 0x1b
768ABS_TOOL_WIDTH      = 0x1c
769
770ABS_VOLUME          = 0x20
771
772ABS_MISC            = 0x28
773
774ABS_MT_SLOT         = 0x2f  # MT slot being modified
775ABS_MT_TOUCH_MAJOR  = 0x30  # Major axis of touching ellipse
776ABS_MT_TOUCH_MINOR  = 0x31  # Minor axis (omit if circular)
777ABS_MT_WIDTH_MAJOR  = 0x32  # Major axis of approaching ellipse
778ABS_MT_WIDTH_MINOR  = 0x33  # Minor axis (omit if circular)
779ABS_MT_ORIENTATION  = 0x34  # Ellipse orientation
780ABS_MT_POSITION_X   = 0x35  # Center X ellipse position
781ABS_MT_POSITION_Y   = 0x36  # Center Y ellipse position
782ABS_MT_TOOL_TYPE    = 0x37  # Type of touching device
783ABS_MT_BLOB_ID      = 0x38  # Group a set of packets as a blob
784ABS_MT_TRACKING_ID  = 0x39  # Unique ID of initiated contact
785ABS_MT_PRESSURE     = 0x3a  # Pressure on contact area
786ABS_MT_DISTANCE     = 0x3b  # Contact hover distance
787
788ABS_MT_FIRST        = ABS_MT_TOUCH_MAJOR
789ABS_MT_LAST         = ABS_MT_DISTANCE
790ABS_MT_RANGE        = range(ABS_MT_FIRST, ABS_MT_LAST+1)
791
792ABS_MAX             = 0x3f
793ABS_CNT             = (ABS_MAX + 1)
794
795# Switch events
796SW_LID                  = 0x00  # set = lid shut
797SW_TABLET_MODE          = 0x01  # set = tablet mode
798SW_HEADPHONE_INSERT     = 0x02  # set = inserted
799SW_RFKILL_ALL           = 0x03  # rfkill master switch, type "any"
800                                # set = radio enabled
801SW_RADIO = SW_RFKILL_ALL        # deprecated
802SW_MICROPHONE_INSERT    = 0x04  # set = inserted
803SW_DOCK                 = 0x05  # set = plugged into dock
804SW_LINEOUT_INSERT       = 0x06  # set = inserted
805SW_JACK_PHYSICAL_INSERT = 0x07  # set = mechanical switch set
806SW_VIDEOOUT_INSERT      = 0x08  # set = inserted
807SW_CAMERA_LENS_COVER    = 0x09  # set = lens covered
808SW_KEYPAD_SLIDE         = 0x0a  # set = keypad slide out
809SW_FRONT_PROXIMITY      = 0x0b  # set = front proximity sensor active
810SW_ROTATE_LOCK          = 0x0c  # set = rotate locked/disabled
811SW_MAX                  = 0x0f
812SW_CNT                  = (SW_MAX + 1)
813
814# Misc events
815MSC_SERIAL      = 0x00
816MSC_PULSELED    = 0x01
817MSC_GESTURE     = 0x02
818MSC_RAW         = 0x03
819MSC_SCAN        = 0x04
820MSC_MAX         = 0x07
821MSC_CNT         = (MSC_MAX + 1)
822
823# LEDs
824LED_NUML        = 0x00
825LED_CAPSL       = 0x01
826LED_SCROLLL     = 0x02
827LED_COMPOSE     = 0x03
828LED_KANA        = 0x04
829LED_SLEEP       = 0x05
830LED_SUSPEND     = 0x06
831LED_MUTE        = 0x07
832LED_MISC        = 0x08
833LED_MAIL        = 0x09
834LED_CHARGING    = 0x0a
835LED_MAX         = 0x0f
836LED_CNT         = (LED_MAX + 1)
837
838# Autorepeat values
839REP_DELAY       = 0x00
840REP_PERIOD      = 0x01
841REP_MAX         = 0x01
842REP_CNT         = (REP_MAX + 1)
843
844# Sounds
845SND_CLICK       = 0x00
846SND_BELL        = 0x01
847SND_TONE        = 0x02
848SND_MAX         = 0x07
849SND_CNT         = (SND_MAX + 1)
850
851# IDs.
852ID_BUS          = 0
853ID_VENDOR       = 1
854ID_PRODUCT      = 2
855ID_VERSION      = 3
856
857BUS_PCI         = 0x01
858BUS_ISAPNP      = 0x02
859BUS_USB         = 0x03
860BUS_HIL         = 0x04
861BUS_BLUETOOTH   = 0x05
862BUS_VIRTUAL     = 0x06
863
864BUS_ISA         = 0x10
865BUS_I8042       = 0x11
866BUS_XTKBD       = 0x12
867BUS_RS232       = 0x13
868BUS_GAMEPORT    = 0x14
869BUS_PARPORT     = 0x15
870BUS_AMIGA       = 0x16
871BUS_ADB         = 0x17
872BUS_I2C         = 0x18
873BUS_HOST        = 0x19
874BUS_GSC         = 0x1A
875BUS_ATARI       = 0x1B
876BUS_SPI         = 0x1C
877
878# MT_TOOL types
879MT_TOOL_FINGER  = 0
880MT_TOOL_PEN     = 1
881MT_TOOL_MAX     = 1
882
883# Values describing the status of a force-feedback effect
884FF_STATUS_STOPPED   = 0x00
885FF_STATUS_PLAYING   = 0x01
886FF_STATUS_MAX       = 0x01
887FF_STATUS_CNT       = (FF_STATUS_MAX + 1)
888
889# Structures used in ioctls to upload effects to a device
890# They are pieces of a bigger structure (called ff_effect)
891
892# All duration values are expressed in ms. Values above 32767 ms (0x7fff)
893# should not be used and have unspecified results.
894
895"""
896 * struct ff_replay - defines scheduling of the force-feedback effect
897 * @length: duration of the effect
898 * @delay: delay before effect should start playing
899struct ff_replay {
900  __u16 length;
901  __u16 delay;
902};
903"""
904
905"""
906 * struct ff_trigger - defines what triggers the force-feedback effect
907 * @button: number of the button triggering the effect
908 * @interval: controls how soon the effect can be re-triggered
909struct ff_trigger {
910  __u16 button;
911  __u16 interval;
912};
913"""
914
915"""
916 * struct ff_envelope - generic force-feedback effect envelope
917 * @attack_length: duration of the attack (ms)
918 * @attack_level: level at the beginning of the attack
919 * @fade_length: duration of fade (ms)
920 * @fade_level: level at the end of fade
921 *
922 * The @attack_level and @fade_level are absolute values; when applying
923 * envelope force-feedback core will convert to positive/negative
924 * value based on polarity of the default level of the effect.
925 * Valid range for the attack and fade levels is 0x0000 - 0x7fff
926struct ff_envelope {
927  __u16 attack_length;
928  __u16 attack_level;
929  __u16 fade_length;
930  __u16 fade_level;
931};
932"""
933
934"""
935 * struct ff_constant_effect - params of a constant force-feedback effect
936 * @level: strength of the effect; may be negative
937 * @envelope: envelope data
938struct ff_constant_effect {
939  __s16 level;
940  struct ff_envelope envelope;
941};
942"""
943
944"""
945 * struct ff_ramp_effect - params of a ramp force-feedback effect
946 * @start_level: beginning strength of the effect; may be negative
947 * @end_level: final strength of the effect; may be negative
948 * @envelope: envelope data
949struct ff_ramp_effect {
950  __s16 start_level;
951  __s16 end_level;
952  struct ff_envelope envelope;
953};
954"""
955
956"""
957 * struct ff_condition_effect - spring or friction force-feedback effect
958 * @right_saturation: maximum level when joystick moved all way to the right
959 * @left_saturation: same for the left side
960 * @right_coeff: controls how fast the force grows when the joystick moves
961 *  to the right
962 * @left_coeff: same for the left side
963 * @deadband: size of the dead zone, where no force is produced
964 * @center: position of the dead zone
965struct ff_condition_effect {
966  __u16 right_saturation;
967  __u16 left_saturation;
968
969  __s16 right_coeff;
970  __s16 left_coeff;
971
972  __u16 deadband;
973  __s16 center;
974};
975"""
976
977
978"""
979 * struct ff_periodic_effect - params of a periodic force-feedback effect
980 * @waveform: kind of the effect (wave)
981 * @period: period of the wave (ms)
982 * @magnitude: peak value
983 * @offset: mean value of the wave (roughly)
984 * @phase: 'horizontal' shift
985 * @envelope: envelope data
986 * @custom_len: number of samples (FF_CUSTOM only)
987 * @custom_data: buffer of samples (FF_CUSTOM only)
988 *
989 * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
990 * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
991 * for the time being as no driver supports it yet.
992 *
993 * Note: the data pointed by custom_data is copied by the driver.
994 * You can therefore dispose of the memory after the upload/update.
995struct ff_periodic_effect {
996  __u16 waveform;
997  __u16 period;
998  __s16 magnitude;
999  __s16 offset;
1000  __u16 phase;
1001
1002  struct ff_envelope envelope;
1003
1004  __u32 custom_len;
1005  __s16 __user *custom_data;
1006};
1007"""
1008
1009"""
1010 * struct ff_rumble_effect - params of a periodic force-feedback effect
1011 * @strong_magnitude: magnitude of the heavy motor
1012 * @weak_magnitude: magnitude of the light one
1013 *
1014 * Some rumble pads have two motors of different weight. Strong_magnitude
1015 * represents the magnitude of the vibration generated by the heavy one.
1016struct ff_rumble_effect {
1017  __u16 strong_magnitude;
1018  __u16 weak_magnitude;
1019};
1020"""
1021
1022"""
1023 * struct ff_effect - defines force feedback effect
1024 * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
1025 *  FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
1026 * @id: an unique id assigned to an effect
1027 * @direction: direction of the effect
1028 * @trigger: trigger conditions (struct ff_trigger)
1029 * @replay: scheduling of the effect (struct ff_replay)
1030 * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
1031 *  ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
1032 *  defining effect parameters
1033 *
1034 * This structure is sent through ioctl from the application to the driver.
1035 * To create a new effect application should set its @id to -1; the kernel
1036 * will return assigned @id which can later be used to update or delete
1037 * this effect.
1038 *
1039 * Direction of the effect is encoded as follows:
1040 *  0 deg -> 0x0000 (down)
1041 *  90 deg -> 0x4000 (left)
1042 *  180 deg -> 0x8000 (up)
1043 *  270 deg -> 0xC000 (right)
1044struct ff_effect {
1045  __u16 type;
1046  __s16 id;
1047  __u16 direction;
1048  struct ff_trigger trigger;
1049  struct ff_replay replay;
1050
1051  union {
1052    struct ff_constant_effect constant;
1053    struct ff_ramp_effect ramp;
1054    struct ff_periodic_effect periodic;
1055    struct ff_condition_effect condition[2]; /* One for each axis */
1056    struct ff_rumble_effect rumble;
1057  } u;
1058};
1059"""
1060
1061# Force feedback effect types
1062FF_RUMBLE       = 0x50
1063FF_PERIODIC     = 0x51
1064FF_CONSTANT     = 0x52
1065FF_SPRING       = 0x53
1066FF_FRICTION     = 0x54
1067FF_DAMPER       = 0x55
1068FF_INERTIA      = 0x56
1069FF_RAMP         = 0x57
1070
1071FF_EFFECT_MIN   = FF_RUMBLE
1072FF_EFFECT_MAX   = FF_RAMP
1073
1074# Force feedback periodic effect types
1075FF_SQUARE       = 0x58
1076FF_TRIANGLE     = 0x59
1077FF_SINE         = 0x5a
1078FF_SAW_UP       = 0x5b
1079FF_SAW_DOWN     = 0x5c
1080FF_CUSTOM       = 0x5d
1081
1082FF_WAVEFORM_MIN = FF_SQUARE
1083FF_WAVEFORM_MAX = FF_CUSTOM
1084
1085# Set ff device properties
1086FF_GAIN         = 0x60
1087FF_AUTOCENTER   = 0x61
1088
1089FF_MAX          = 0x7f
1090FF_CNT          = (FF_MAX + 1)
1091
1092
1093"""
1094The following constants, functions and dicts are not part of the original linux
1095input header file.  They are included here to make it easier to use the linux
1096input subsystem from python scripts.
1097"""
1098
1099BITS_PER_WORD = 8
1100
1101def NBITS(x):
1102    return ((x - 1) / BITS_PER_WORD) + 1
1103
1104def OFFSET(x):
1105    return (x % BITS_PER_WORD)
1106
1107def BIT(x):
1108    return (1 << OFFSET(x))
1109
1110def INDEX(x):
1111    return (x / BITS_PER_WORD)
1112
1113def test_bit(b, a):
1114    return ((a[INDEX(b)] >> OFFSET(b)) & 1)
1115
1116EV_TYPES = {
1117    EV_SYN : 'EV_SYN',
1118    EV_KEY : 'EV_KEY',
1119    EV_REL : 'EV_REL',
1120    EV_ABS : 'EV_ABS',
1121    EV_MSC : 'EV_MSC',
1122    EV_SW  : 'EV_SW',
1123    EV_LED : 'EV_LED',
1124    EV_SND : 'EV_SND',
1125    EV_REP : 'EV_REP',
1126    EV_FF  : 'EV_FF',
1127    EV_PWR : 'EV_PWR',
1128    EV_FF_STATUS : 'EV_FF_STATUS'
1129}
1130
1131EV_SIZES = {
1132    EV_KEY : KEY_CNT,
1133    EV_REL : REL_CNT,
1134    EV_ABS : ABS_CNT,
1135    EV_MSC : MSC_CNT,
1136    EV_SW  : SW_CNT,
1137    EV_LED : LED_CNT,
1138    EV_SND : SND_CNT,
1139    EV_REP : REP_CNT,
1140    EV_FF  : FF_CNT,
1141    EV_FF_STATUS : FF_STATUS_CNT
1142}
1143
1144EV_STRINGS = {
1145    # Keys (only buttons, for now)
1146    EV_KEY: {
1147        BTN_0           : '0',
1148        BTN_1           : '1',
1149        BTN_2           : '0',
1150        BTN_3           : '3',
1151        BTN_4           : '4',
1152        BTN_5           : '5',
1153        BTN_6           : '6',
1154        BTN_7           : '7',
1155        BTN_8           : '8',
1156        BTN_9           : '9',
1157        BTN_LEFT        : 'LEFT',
1158        BTN_RIGHT       : 'RIGHT',
1159        BTN_MIDDLE      : 'MIDDLE',
1160        BTN_SIDE        : 'SIDE',
1161        BTN_EXTRA       : 'EXTRA',
1162        BTN_FORWARD     : 'FORWARD',
1163        BTN_BACK        : 'BACK',
1164        BTN_TASK        : 'TASK',
1165        BTN_TRIGGER     : 'TRIGGER',
1166        BTN_THUMB       : 'THUMB',
1167        BTN_THUMB2      : 'THUMB2',
1168        BTN_TOP         : 'TOP',
1169        BTN_TOP2        : 'TOP2',
1170        BTN_PINKIE      : 'PINKIE',
1171        BTN_BASE        : 'BASE',
1172        BTN_BASE2       : 'BASE2',
1173        BTN_BASE3       : 'BASE3',
1174        BTN_BASE4       : 'BASE4',
1175        BTN_BASE5       : 'BASE5',
1176        BTN_BASE6       : 'BASE6',
1177        BTN_DEAD        : 'DEAD',
1178        BTN_A           : 'A',
1179        BTN_B           : 'B',
1180        BTN_C           : 'C',
1181        BTN_X           : 'X',
1182        BTN_Y           : 'Y',
1183        BTN_Z           : 'Z',
1184        BTN_TL          : 'TL',
1185        BTN_TR          : 'TR',
1186        BTN_TL2         : 'TL2',
1187        BTN_TR2         : 'TR2',
1188        BTN_SELECT      : 'SELECT',
1189        BTN_START       : 'START',
1190        BTN_MODE        : 'MODE',
1191        BTN_THUMBL      : 'THUMBL',
1192        BTN_THUMBR      : 'THUMBR',
1193        BTN_TOOL_PEN    : 'TOOL_PEN',
1194        BTN_TOOL_RUBBER : 'TOOL_RUBBER',
1195        BTN_TOOL_BRUSH  : 'TOOL_BRUSH',
1196        BTN_TOOL_PENCIL : 'TOOL_PENCIL',
1197        BTN_TOOL_AIRBRUSH : 'TOOL_AIRBRUSH',
1198        BTN_TOOL_FINGER : 'TOOL_FINGER',
1199        BTN_TOOL_MOUSE  : 'TOOL_MOUSE',
1200        BTN_TOOL_LENS   : 'TOOL_LENS',
1201        BTN_TOOL_QUINTTAP : 'TOOL_QUINTTAP',
1202        BTN_TOUCH       : 'TOUCH',
1203        BTN_STYLUS      : 'STYLUS',
1204        BTN_STYLUS2     : 'STYLUS2',
1205        BTN_TOOL_DOUBLETAP : 'TOOL_DOUBLETAP',
1206        BTN_TOOL_TRIPLETAP : 'TOOL_TRIPLETAP',
1207        BTN_TOOL_QUADTAP : 'TOOL_QUADTAP',
1208        BTN_GEAR_DOWN   : 'TOOL_GEAR_DOWN',
1209        BTN_GEAR_UP     : 'TOOL_GEAR_UP',
1210    },
1211
1212    # Relative axes
1213    EV_REL: {
1214        REL_X           : 'X',
1215        REL_Y           : 'Y',
1216        REL_Z           : 'Z',
1217        REL_RX          : 'RX',
1218        REL_RY          : 'RY',
1219        REL_RZ          : 'RZ',
1220        REL_HWHEEL      : 'HWHEEL',
1221        REL_DIAL        : 'DIAL',
1222        REL_WHEEL       : 'WHEEL',
1223        REL_MISC        : 'MISC',
1224    },
1225
1226    # Absolute axes
1227    EV_ABS: {
1228        ABS_X               : 'X',
1229        ABS_Y               : 'Y',
1230        ABS_Z               : 'Z',
1231        ABS_RX              : 'RX',
1232        ABS_RY              : 'RY',
1233        ABS_RZ              : 'RZ',
1234        ABS_THROTTLE        : 'THROTTLE',
1235        ABS_RUDDER          : 'RUDDER',
1236        ABS_WHEEL           : 'WHEEL',
1237        ABS_GAS             : 'GAS',
1238        ABS_BRAKE           : 'BRAKE',
1239        ABS_HAT0X           : 'HAT0X',
1240        ABS_HAT0Y           : 'HAT0Y',
1241        ABS_HAT1X           : 'HAT1X',
1242        ABS_HAT1Y           : 'HAT1Y',
1243        ABS_HAT2X           : 'HAT2X',
1244        ABS_HAT2Y           : 'HAT2Y',
1245        ABS_HAT3X           : 'HAT3X',
1246        ABS_HAT3Y           : 'HAT3Y',
1247        ABS_PRESSURE        : 'PRESSURE',
1248        ABS_DISTANCE        : 'DISTANCE',
1249        ABS_TILT_X          : 'TILT_X',
1250        ABS_TILT_Y          : 'TILT_Y',
1251        ABS_TOOL_WIDTH      : 'TOOL_WIDTH',
1252        ABS_VOLUME          : 'VOLUME',
1253        ABS_MISC            : 'MISC',
1254        ABS_MT_SLOT         : 'MT_SLOT',
1255        ABS_MT_TOUCH_MAJOR  : 'MT_TOUCH_MAJOR',
1256        ABS_MT_TOUCH_MINOR  : 'MT_TOUCH_MINOR',
1257        ABS_MT_WIDTH_MAJOR  : 'MT_WIDTH_MAJOR',
1258        ABS_MT_WIDTH_MINOR  : 'MT_WIDTH_MINOR',
1259        ABS_MT_ORIENTATION  : 'MT_ORIENTATION',
1260        ABS_MT_POSITION_X   : 'MT_POSITION_X',
1261        ABS_MT_POSITION_Y   : 'MT_POSITION_Y',
1262        ABS_MT_TOOL_TYPE    : 'MT_TOOL_TYPE',
1263        ABS_MT_BLOB_ID      : 'MT_BLOB_ID',
1264        ABS_MT_TRACKING_ID  : 'MT_TRACKING_ID',
1265        ABS_MT_PRESSURE     : 'MT_PRESSURE',
1266        ABS_MT_DISTANCE     : 'MT_DISTANCE'
1267    },
1268
1269    # Switches
1270    EV_SW: {
1271        SW_LID                  : 'LID',
1272        SW_TABLET_MODE          : 'TABLET_MODE',
1273        SW_HEADPHONE_INSERT     : 'HEADPHONE_INSERT',
1274        SW_RFKILL_ALL           : 'RFKILL_ALL',
1275        SW_MICROPHONE_INSERT    : 'MICROPHONE_INSERT',
1276        SW_DOCK                 : 'DOCK',
1277        SW_LINEOUT_INSERT       : 'LINEOUT_INSERT',
1278        SW_JACK_PHYSICAL_INSERT : 'JACK_PHYSICAL_INSERT',
1279        SW_VIDEOOUT_INSERT      : 'VIDEOOUT_INSERT',
1280        SW_CAMERA_LENS_COVER    : 'CAMERA_LENS_COVER',
1281        SW_KEYPAD_SLIDE         : 'KEYPAD_SLIDE',
1282        SW_FRONT_PROXIMITY      : 'FRONT_PROXIMITY',
1283        SW_ROTATE_LOCK          : 'ROTATE_LOCK',
1284    },
1285
1286    # Misc events
1287    EV_MSC: {
1288        MSC_SERIAL      : 'SERIAL',
1289        MSC_PULSELED    : 'PULSELED',
1290        MSC_GESTURE     : 'GESTURE',
1291        MSC_RAW         : 'RAW',
1292        MSC_SCAN        : 'SCAN',
1293    },
1294
1295    # LEDs
1296    EV_LED: {
1297        LED_NUML        : 'NUML',
1298        LED_CAPSL       : 'CAPSL',
1299        LED_SCROLLL     : 'SCROLLL',
1300        LED_COMPOSE     : 'COMPOSE',
1301        LED_KANA        : 'KANA',
1302        LED_SLEEP       : 'SLEEP',
1303        LED_SUSPEND     : 'SLEEP',
1304        LED_MUTE        : 'SLEEP',
1305        LED_MISC        : 'SLEEP',
1306        LED_MAIL        : 'SLEEP',
1307        LED_CHARGING    : 'SLEEP',
1308    },
1309
1310    # Autorepeat values
1311    EV_REP: {
1312        REP_DELAY       : 'DELAY',
1313        REP_PERIOD      : 'PERIOD',
1314    },
1315
1316    # Sounds
1317    EV_SND: {
1318        SND_CLICK       : 'CLICK',
1319        SND_BELL        : 'BELL'
1320    }
1321}
1322