xref: /aosp_15_r20/external/autotest/client/bin/input/linux_input.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Lint as: python2, python3
2*9c5db199SXin Li# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
3*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
4*9c5db199SXin Li# found in the LICENSE file.
5*9c5db199SXin Li
6*9c5db199SXin Li# Description:
7*9c5db199SXin Li#
8*9c5db199SXin Li# Python version of include/linux/input.h
9*9c5db199SXin Li#  as of kernel v2.6.39
10*9c5db199SXin Li
11*9c5db199SXin Lifrom __future__ import division
12*9c5db199SXin Lifrom __future__ import print_function
13*9c5db199SXin Lifrom six.moves import range
14*9c5db199SXin Li
15*9c5db199SXin Li# Try to import from the autotest_lib structure. If it fails try the default.
16*9c5db199SXin Li# If this script was run outside of autotest the "except" would be the flow.
17*9c5db199SXin Li# If run within, the "try" is the flow.
18*9c5db199SXin Litry:
19*9c5db199SXin Li    from autotest_lib.client.bin.input.linux_ioctl import *
20*9c5db199SXin Liexcept ImportError:
21*9c5db199SXin Li    from linux_ioctl import *
22*9c5db199SXin Li
23*9c5db199SXin Li# The event structure itself
24*9c5db199SXin Li#   struct input_event {
25*9c5db199SXin Li#       struct timeval time;
26*9c5db199SXin Li#       __u16 type;
27*9c5db199SXin Li#       __u16 code;
28*9c5db199SXin Li#       __s32 value;
29*9c5db199SXin Li#   };
30*9c5db199SXin Li#
31*9c5db199SXin Li#   struct timeval {
32*9c5db199SXin Li#       __kernel_time_t         tv_sec;         /* seconds */
33*9c5db199SXin Li#       __kernel_suseconds_t    tv_usec;        /* microseconds */
34*9c5db199SXin Li#   };
35*9c5db199SXin Liinput_event_t = 'LLHHi'
36*9c5db199SXin Li
37*9c5db199SXin Li
38*9c5db199SXin Li# Protocol version.
39*9c5db199SXin LiEV_VERSION = 0x010001
40*9c5db199SXin Li
41*9c5db199SXin Li# IOCTLs (0x00 - 0x7f)
42*9c5db199SXin Li
43*9c5db199SXin Li#   struct input_id {
44*9c5db199SXin Li#       __u16 bustype;
45*9c5db199SXin Li#       __u16 vendor;
46*9c5db199SXin Li#       __u16 product;
47*9c5db199SXin Li#       __u16 version;
48*9c5db199SXin Li#   };
49*9c5db199SXin Liinput_id_t = 'HHHH'
50*9c5db199SXin Li
51*9c5db199SXin Li# struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
52*9c5db199SXin Li# @value: latest reported value for the axis.
53*9c5db199SXin Li# @minimum: specifies minimum value for the axis.
54*9c5db199SXin Li# @maximum: specifies maximum value for the axis.
55*9c5db199SXin Li# @fuzz: specifies fuzz value used to filter noise from the event stream.
56*9c5db199SXin Li# @flat: values within this value are reported as 0.
57*9c5db199SXin Li# @resolution: specifies resolution for the values reported for the axis.
58*9c5db199SXin Li#
59*9c5db199SXin Li# Note that input core does not clamp reported values to the
60*9c5db199SXin Li# [minimum, maximum] limits, such task is left to userspace.
61*9c5db199SXin Li#
62*9c5db199SXin Li# Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in
63*9c5db199SXin Li# units per millimeter (units/mm), resolution for rotational axes
64*9c5db199SXin Li# (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
65*9c5db199SXin Li#
66*9c5db199SXin Li#   struct input_absinfo {
67*9c5db199SXin Li#       __s32 value;
68*9c5db199SXin Li#       __s32 minimum;
69*9c5db199SXin Li#       __s32 maximum;
70*9c5db199SXin Li#       __s32 fuzz;
71*9c5db199SXin Li#       __s32 flat;
72*9c5db199SXin Li#       __s32 resolution;
73*9c5db199SXin Li#   };
74*9c5db199SXin Liinput_absinfo_t = 'iiiiii'
75*9c5db199SXin Li
76*9c5db199SXin Li# struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
77*9c5db199SXin Li# @scancode: scancode represented in machine-endian form.
78*9c5db199SXin Li# @len: length of the scancode that resides in @scancode buffer.
79*9c5db199SXin Li# @index: index in the keymap, may be used instead of scancode
80*9c5db199SXin Li# @flags: allows to specify how kernel should handle the request. For
81*9c5db199SXin Li# example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
82*9c5db199SXin Li# should perform lookup in keymap by @index instead of @scancode
83*9c5db199SXin Li# @keycode: key code assigned to this scancode
84*9c5db199SXin Li#
85*9c5db199SXin Li# The structure is used to retrieve and modify keymap data. Users have
86*9c5db199SXin Li# option of performing lookup either by @scancode itself or by @index
87*9c5db199SXin Li# in keymap entry. EVIOCGKEYCODE will also return scancode or index
88*9c5db199SXin Li# (depending on which element was used to perform lookup).
89*9c5db199SXin Li#
90*9c5db199SXin Li#   struct input_keymap_entry {
91*9c5db199SXin Li#       __u8  flags;
92*9c5db199SXin Li#       __u8  len;
93*9c5db199SXin Li#       __u16 index;
94*9c5db199SXin Li#       __u32 keycode;
95*9c5db199SXin Li#       __u8  scancode[32];
96*9c5db199SXin Li#   };
97*9c5db199SXin Liinput_keymap_entry_t = 'BBHI32B'
98*9c5db199SXin Li
99*9c5db199SXin LiEVIOCGVERSION           = IOR('E', 0x01, 'i')           # get driver version
100*9c5db199SXin LiEVIOCGID                = IOR('E', 0x02, input_id_t)    # get device ID
101*9c5db199SXin LiEVIOCGREP               = IOR('E', 0x03, '2I')          # get repeat settings
102*9c5db199SXin LiEVIOCSREP               = IOW('E', 0x03, '2I')          # set repeat settings
103*9c5db199SXin Li
104*9c5db199SXin LiEVIOCGKEYCODE           = IOR('E', 0x04, '2I')          # get keycode
105*9c5db199SXin LiEVIOCGKEYCODE_V2        = IOR('E', 0x04, input_keymap_entry_t)
106*9c5db199SXin LiEVIOCSKEYCODE           = IOW('E', 0x04, '2I')          # set keycode
107*9c5db199SXin LiEVIOCSKEYCODE_V2        = IOW('E', 0x04, input_keymap_entry_t)
108*9c5db199SXin Li
109*9c5db199SXin Lidef EVIOCGNAME(length):
110*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x06, length)  # get device name
111*9c5db199SXin Li
112*9c5db199SXin Lidef EVIOCGPHYS(length):
113*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x07, length)  # get physical location
114*9c5db199SXin Li
115*9c5db199SXin Lidef EVIOCGUNIQ(length):
116*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x08, length)  # get unique identifier
117*9c5db199SXin Li
118*9c5db199SXin Lidef EVIOCGPROP(length):
119*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x09, length)  # get device properties
120*9c5db199SXin Li
121*9c5db199SXin Lidef EVIOCGMTSLOTS(length):
122*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x0a, length)  # get mt slot values
123*9c5db199SXin Li
124*9c5db199SXin Lidef EVIOCGKEY(length):
125*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x18, length)  # get global key state
126*9c5db199SXin Li
127*9c5db199SXin Lidef EVIOCGLED(length):
128*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x19, length)  # get all LEDs
129*9c5db199SXin Li
130*9c5db199SXin Lidef EVIOCGSND(length):
131*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x1a, length)  # get all sounds status
132*9c5db199SXin Li
133*9c5db199SXin Lidef EVIOCGSW(length):
134*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x1b, length)  # get all switch states
135*9c5db199SXin Li
136*9c5db199SXin Lidef EVIOCGBIT(ev,length):
137*9c5db199SXin Li    return IOC(IOC_READ, 'E', 0x20 + ev, length)  # get event bits
138*9c5db199SXin Li
139*9c5db199SXin Lidef EVIOCGABS(axis):
140*9c5db199SXin Li    return IOR('E', 0x40 + axis, input_absinfo_t)  # get abs value/limits
141*9c5db199SXin Li
142*9c5db199SXin Lidef EVIOCSABS(axis):
143*9c5db199SXin Li    return IOW('E', 0xc0 + axis, input_absinfo_t)  # set abs value/limits
144*9c5db199SXin Li
145*9c5db199SXin Li# send a force effect to a force feedback device
146*9c5db199SXin Li"""  TODO: Support force feedback. """
147*9c5db199SXin Li
148*9c5db199SXin Li
149*9c5db199SXin Li#EVIOCSFF                = IOW('E', 0x80, ff_effect_t)
150*9c5db199SXin Li# Erase a force effect
151*9c5db199SXin LiEVIOCRMFF               = IOW('E', 0x81, 'i')
152*9c5db199SXin Li# Report number of effects playable at the same time
153*9c5db199SXin LiEVIOCGEFFECTS           = IOR('E', 0x84, 'i')
154*9c5db199SXin Li# Grab/Release device
155*9c5db199SXin LiEVIOCGRAB               = IOW('E', 0x90, 'i')
156*9c5db199SXin Li
157*9c5db199SXin Li# Device properties and quirks
158*9c5db199SXin LiINPUT_PROP_POINTER   = 0x00 # needs a pointer
159*9c5db199SXin LiINPUT_PROP_DIRECT    = 0x01 # direct input devices
160*9c5db199SXin LiINPUT_PROP_BUTTONPAD = 0x02 # has button(s) under pad
161*9c5db199SXin LiINPUT_PROP_SEMI_MT   = 0x03 # touch rectangle only
162*9c5db199SXin Li
163*9c5db199SXin LiINPUT_PROP_MAX       = 0x1f
164*9c5db199SXin LiINPUT_PROP_CNT       = (INPUT_PROP_MAX + 1)
165*9c5db199SXin Li
166*9c5db199SXin Li# Event types
167*9c5db199SXin LiEV_SYN          = 0x00
168*9c5db199SXin LiEV_KEY          = 0x01
169*9c5db199SXin LiEV_REL          = 0x02
170*9c5db199SXin LiEV_ABS          = 0x03
171*9c5db199SXin LiEV_MSC          = 0x04
172*9c5db199SXin LiEV_SW           = 0x05
173*9c5db199SXin LiEV_LED          = 0x11
174*9c5db199SXin LiEV_SND          = 0x12
175*9c5db199SXin LiEV_REP          = 0x14
176*9c5db199SXin LiEV_FF           = 0x15
177*9c5db199SXin LiEV_PWR          = 0x16
178*9c5db199SXin LiEV_FF_STATUS    = 0x17
179*9c5db199SXin LiEV_MAX          = 0x1f
180*9c5db199SXin LiEV_CNT          = (EV_MAX + 1)
181*9c5db199SXin Li
182*9c5db199SXin Li# Synchronization events.
183*9c5db199SXin Li
184*9c5db199SXin LiSYN_REPORT      = 0
185*9c5db199SXin LiSYN_CONFIG      = 1
186*9c5db199SXin LiSYN_MT_REPORT   = 2
187*9c5db199SXin LiSYN_DROPPED     = 3
188*9c5db199SXin Li
189*9c5db199SXin Li"""
190*9c5db199SXin Li * Keys and buttons
191*9c5db199SXin Li *
192*9c5db199SXin Li * Most of the keys/buttons are modeled after USB HUT 1.12
193*9c5db199SXin Li * (see http://www.usb.org/developers/hidpage).
194*9c5db199SXin Li * Abbreviations in the comments:
195*9c5db199SXin Li * AC - Application Control
196*9c5db199SXin Li * AL - Application Launch Button
197*9c5db199SXin Li * SC - System Control
198*9c5db199SXin Li"""
199*9c5db199SXin Li
200*9c5db199SXin LiKEY_RESERVED    =  0
201*9c5db199SXin LiKEY_ESC         =  1
202*9c5db199SXin LiKEY_1           =  2
203*9c5db199SXin LiKEY_2           =  3
204*9c5db199SXin LiKEY_3           =  4
205*9c5db199SXin LiKEY_4           =  5
206*9c5db199SXin LiKEY_5           =  6
207*9c5db199SXin LiKEY_6           =  7
208*9c5db199SXin LiKEY_7           =  8
209*9c5db199SXin LiKEY_8           =  9
210*9c5db199SXin LiKEY_9           = 10
211*9c5db199SXin LiKEY_0           = 11
212*9c5db199SXin LiKEY_MINUS       = 12
213*9c5db199SXin LiKEY_EQUAL       = 13
214*9c5db199SXin LiKEY_BACKSPACE   = 14
215*9c5db199SXin LiKEY_TAB         = 15
216*9c5db199SXin LiKEY_Q           = 16
217*9c5db199SXin LiKEY_W           = 17
218*9c5db199SXin LiKEY_E           = 18
219*9c5db199SXin LiKEY_R           = 19
220*9c5db199SXin LiKEY_T           = 20
221*9c5db199SXin LiKEY_Y           = 21
222*9c5db199SXin LiKEY_U           = 22
223*9c5db199SXin LiKEY_I           = 23
224*9c5db199SXin LiKEY_O           = 24
225*9c5db199SXin LiKEY_P           = 25
226*9c5db199SXin LiKEY_LEFTBRACE   = 26
227*9c5db199SXin LiKEY_RIGHTBRACE  = 27
228*9c5db199SXin LiKEY_ENTER       = 28
229*9c5db199SXin LiKEY_LEFTCTRL    = 29
230*9c5db199SXin LiKEY_A           = 30
231*9c5db199SXin LiKEY_S           = 31
232*9c5db199SXin LiKEY_D           = 32
233*9c5db199SXin LiKEY_F           = 33
234*9c5db199SXin LiKEY_G           = 34
235*9c5db199SXin LiKEY_H           = 35
236*9c5db199SXin LiKEY_J           = 36
237*9c5db199SXin LiKEY_K           = 37
238*9c5db199SXin LiKEY_L           = 38
239*9c5db199SXin LiKEY_SEMICOLON   = 39
240*9c5db199SXin LiKEY_APOSTROPHE  = 40
241*9c5db199SXin LiKEY_GRAVE       = 41
242*9c5db199SXin LiKEY_LEFTSHIFT   = 42
243*9c5db199SXin LiKEY_BACKSLASH   = 43
244*9c5db199SXin LiKEY_Z           = 44
245*9c5db199SXin LiKEY_X           = 45
246*9c5db199SXin LiKEY_C           = 46
247*9c5db199SXin LiKEY_V           = 47
248*9c5db199SXin LiKEY_B           = 48
249*9c5db199SXin LiKEY_N           = 49
250*9c5db199SXin LiKEY_M           = 50
251*9c5db199SXin LiKEY_COMMA       = 51
252*9c5db199SXin LiKEY_DOT         = 52
253*9c5db199SXin LiKEY_SLASH       = 53
254*9c5db199SXin LiKEY_RIGHTSHIFT  = 54
255*9c5db199SXin LiKEY_KPASTERISK  = 55
256*9c5db199SXin LiKEY_LEFTALT     = 56
257*9c5db199SXin LiKEY_SPACE       = 57
258*9c5db199SXin LiKEY_CAPSLOCK    = 58
259*9c5db199SXin LiKEY_F1          = 59
260*9c5db199SXin LiKEY_F2          = 60
261*9c5db199SXin LiKEY_F3          = 61
262*9c5db199SXin LiKEY_F4          = 62
263*9c5db199SXin LiKEY_F5          = 63
264*9c5db199SXin LiKEY_F6          = 64
265*9c5db199SXin LiKEY_F7          = 65
266*9c5db199SXin LiKEY_F8          = 66
267*9c5db199SXin LiKEY_F9          = 67
268*9c5db199SXin LiKEY_F10         = 68
269*9c5db199SXin LiKEY_NUMLOCK     = 69
270*9c5db199SXin LiKEY_SCROLLLOCK  = 70
271*9c5db199SXin LiKEY_KP7         = 71
272*9c5db199SXin LiKEY_KP8         = 72
273*9c5db199SXin LiKEY_KP9         = 73
274*9c5db199SXin LiKEY_KPMINUS     = 74
275*9c5db199SXin LiKEY_KP4         = 75
276*9c5db199SXin LiKEY_KP5         = 76
277*9c5db199SXin LiKEY_KP6         = 77
278*9c5db199SXin LiKEY_KPPLUS      = 78
279*9c5db199SXin LiKEY_KP1         = 79
280*9c5db199SXin LiKEY_KP2         = 80
281*9c5db199SXin LiKEY_KP3         = 81
282*9c5db199SXin LiKEY_KP0         = 82
283*9c5db199SXin LiKEY_KPDOT       = 83
284*9c5db199SXin Li
285*9c5db199SXin LiKEY_ZENKAKUHANKAKU = 85
286*9c5db199SXin LiKEY_102ND       = 86
287*9c5db199SXin LiKEY_F11         = 87
288*9c5db199SXin LiKEY_F12         = 88
289*9c5db199SXin LiKEY_RO          = 89
290*9c5db199SXin LiKEY_KATAKANA    = 90
291*9c5db199SXin LiKEY_HIRAGANA    = 91
292*9c5db199SXin LiKEY_HENKAN      = 92
293*9c5db199SXin LiKEY_KATAKANAHIRAGANA = 93
294*9c5db199SXin LiKEY_MUHENKAN    = 94
295*9c5db199SXin LiKEY_KPJPCOMMA   = 95
296*9c5db199SXin LiKEY_KPENTER     = 96
297*9c5db199SXin LiKEY_RIGHTCTRL   = 97
298*9c5db199SXin LiKEY_KPSLASH     = 98
299*9c5db199SXin LiKEY_SYSRQ       = 99
300*9c5db199SXin LiKEY_RIGHTALT    = 100
301*9c5db199SXin LiKEY_LINEFEED    = 101
302*9c5db199SXin LiKEY_HOME        = 102
303*9c5db199SXin LiKEY_UP          = 103
304*9c5db199SXin LiKEY_PAGEUP      = 104
305*9c5db199SXin LiKEY_LEFT        = 105
306*9c5db199SXin LiKEY_RIGHT       = 106
307*9c5db199SXin LiKEY_END         = 107
308*9c5db199SXin LiKEY_DOWN        = 108
309*9c5db199SXin LiKEY_PAGEDOWN    = 109
310*9c5db199SXin LiKEY_INSERT      = 110
311*9c5db199SXin LiKEY_DELETE      = 111
312*9c5db199SXin LiKEY_MACRO       = 112
313*9c5db199SXin LiKEY_MUTE        = 113
314*9c5db199SXin LiKEY_VOLUMEDOWN  = 114
315*9c5db199SXin LiKEY_VOLUMEUP    = 115
316*9c5db199SXin LiKEY_POWER       = 116     # SC System Power Down
317*9c5db199SXin LiKEY_KPEQUAL     = 117
318*9c5db199SXin LiKEY_KPPLUSMINUS = 118
319*9c5db199SXin LiKEY_PAUSE       = 119
320*9c5db199SXin LiKEY_SCALE       = 120     # AL Compiz Scale (Expose)
321*9c5db199SXin Li
322*9c5db199SXin LiKEY_KPCOMMA     = 121
323*9c5db199SXin LiKEY_HANGEUL     = 122
324*9c5db199SXin LiKEY_HANGUEL     = KEY_HANGEUL
325*9c5db199SXin LiKEY_HANJA       = 123
326*9c5db199SXin LiKEY_YEN         = 124
327*9c5db199SXin LiKEY_LEFTMETA    = 125
328*9c5db199SXin LiKEY_RIGHTMETA   = 126
329*9c5db199SXin LiKEY_COMPOSE     = 127
330*9c5db199SXin Li
331*9c5db199SXin LiKEY_STOP        = 128   # AC Stop
332*9c5db199SXin LiKEY_AGAIN       = 129
333*9c5db199SXin LiKEY_PROPS       = 130   # AC Properties
334*9c5db199SXin LiKEY_UNDO        = 131   # AC Undo
335*9c5db199SXin LiKEY_FRONT       = 132
336*9c5db199SXin LiKEY_COPY        = 133   # AC Copy
337*9c5db199SXin LiKEY_OPEN        = 134   # AC Open
338*9c5db199SXin LiKEY_PASTE       = 135   # AC Paste
339*9c5db199SXin LiKEY_FIND        = 136   # AC Search
340*9c5db199SXin LiKEY_CUT         = 137   # AC Cut
341*9c5db199SXin LiKEY_HELP        = 138   # AL Integrated Help Center
342*9c5db199SXin LiKEY_MENU        = 139   # Menu (show menu)
343*9c5db199SXin LiKEY_CALC        = 140   # AL Calculator
344*9c5db199SXin LiKEY_SETUP       = 141
345*9c5db199SXin LiKEY_SLEEP       = 142   # SC System Sleep
346*9c5db199SXin LiKEY_WAKEUP      = 143   # System Wake Up
347*9c5db199SXin LiKEY_FILE        = 144   # AL Local Machine Browser
348*9c5db199SXin LiKEY_SENDFILE    = 145
349*9c5db199SXin LiKEY_DELETEFILE  = 146
350*9c5db199SXin LiKEY_XFER        = 147
351*9c5db199SXin LiKEY_PROG1       = 148
352*9c5db199SXin LiKEY_PROG2       = 149
353*9c5db199SXin LiKEY_WWW         = 150   # AL Internet Browser
354*9c5db199SXin LiKEY_MSDOS       = 151
355*9c5db199SXin LiKEY_COFFEE      = 152   # AL Terminal Lock/Screensaver
356*9c5db199SXin LiKEY_SCREENLOCK  = KEY_COFFEE
357*9c5db199SXin LiKEY_DIRECTION   = 153
358*9c5db199SXin LiKEY_CYCLEWINDOWS = 154
359*9c5db199SXin LiKEY_MAIL        = 155
360*9c5db199SXin LiKEY_BOOKMARKS   = 156   # AC Bookmarks
361*9c5db199SXin LiKEY_COMPUTER    = 157
362*9c5db199SXin LiKEY_BACK        = 158   # AC Back
363*9c5db199SXin LiKEY_FORWARD     = 159   # AC Forward
364*9c5db199SXin LiKEY_CLOSECD     = 160
365*9c5db199SXin LiKEY_EJECTCD     = 161
366*9c5db199SXin LiKEY_EJECTCLOSECD = 162
367*9c5db199SXin LiKEY_NEXTSONG    = 163
368*9c5db199SXin LiKEY_PLAYPAUSE   = 164
369*9c5db199SXin LiKEY_PREVIOUSSONG = 165
370*9c5db199SXin LiKEY_STOPCD      = 166
371*9c5db199SXin LiKEY_RECORD      = 167
372*9c5db199SXin LiKEY_REWIND      = 168
373*9c5db199SXin LiKEY_PHONE       = 169   # Media Select Telephone
374*9c5db199SXin LiKEY_ISO         = 170
375*9c5db199SXin LiKEY_CONFIG      = 171   # AL Consumer Control Configuration
376*9c5db199SXin LiKEY_HOMEPAGE    = 172   # AC Home
377*9c5db199SXin LiKEY_REFRESH     = 173   # AC Refresh
378*9c5db199SXin LiKEY_EXIT        = 174   # AC Exit
379*9c5db199SXin LiKEY_MOVE        = 175
380*9c5db199SXin LiKEY_EDIT        = 176
381*9c5db199SXin LiKEY_SCROLLUP    = 177
382*9c5db199SXin LiKEY_SCROLLDOWN  = 178
383*9c5db199SXin LiKEY_KPLEFTPAREN = 179
384*9c5db199SXin LiKEY_KPRIGHTPAREN = 180
385*9c5db199SXin LiKEY_NEW         = 181   # AC New
386*9c5db199SXin LiKEY_REDO        = 182   # AC Redo/Repeat
387*9c5db199SXin Li
388*9c5db199SXin LiKEY_F13         = 183
389*9c5db199SXin LiKEY_F14         = 184
390*9c5db199SXin LiKEY_F15         = 185
391*9c5db199SXin LiKEY_F16         = 186
392*9c5db199SXin LiKEY_F17         = 187
393*9c5db199SXin LiKEY_F18         = 188
394*9c5db199SXin LiKEY_F19         = 189
395*9c5db199SXin LiKEY_F20         = 190
396*9c5db199SXin LiKEY_F21         = 191
397*9c5db199SXin LiKEY_F22         = 192
398*9c5db199SXin LiKEY_F23         = 193
399*9c5db199SXin LiKEY_F24         = 194
400*9c5db199SXin Li
401*9c5db199SXin LiKEY_PLAYCD      = 200
402*9c5db199SXin LiKEY_PAUSECD     = 201
403*9c5db199SXin LiKEY_PROG3       = 202
404*9c5db199SXin LiKEY_PROG4       = 203
405*9c5db199SXin LiKEY_DASHBOARD   = 204   # AL Dashboard
406*9c5db199SXin LiKEY_SUSPEND     = 205
407*9c5db199SXin LiKEY_CLOSE       = 206   # AC Close
408*9c5db199SXin LiKEY_PLAY        = 207
409*9c5db199SXin LiKEY_FASTFORWARD = 208
410*9c5db199SXin LiKEY_BASSBOOST   = 209
411*9c5db199SXin LiKEY_PRINT       = 210   # AC Print
412*9c5db199SXin LiKEY_HP          = 211
413*9c5db199SXin LiKEY_CAMERA      = 212
414*9c5db199SXin LiKEY_SOUND       = 213
415*9c5db199SXin LiKEY_QUESTION    = 214
416*9c5db199SXin LiKEY_EMAIL       = 215
417*9c5db199SXin LiKEY_CHAT        = 216
418*9c5db199SXin LiKEY_SEARCH      = 217
419*9c5db199SXin LiKEY_CONNECT     = 218
420*9c5db199SXin LiKEY_FINANCE     = 219   #AL Checkbook/Finance
421*9c5db199SXin LiKEY_SPORT       = 220
422*9c5db199SXin LiKEY_SHOP        = 221
423*9c5db199SXin LiKEY_ALTERASE    = 222
424*9c5db199SXin LiKEY_CANCEL      = 223   # AC Cancel
425*9c5db199SXin LiKEY_BRIGHTNESSDOWN = 224
426*9c5db199SXin LiKEY_BRIGHTNESSUP = 225
427*9c5db199SXin LiKEY_MEDIA       = 226
428*9c5db199SXin Li
429*9c5db199SXin LiKEY_SWITCHVIDEOMODE = 227   # Cycle between available video
430*9c5db199SXin Li                            # outputs (Monitor/LCD/TV-out/etc)
431*9c5db199SXin LiKEY_KBDILLUMTOGGLE  = 228
432*9c5db199SXin LiKEY_KBDILLUMDOWN    = 229
433*9c5db199SXin LiKEY_KBDILLUMUP      = 230
434*9c5db199SXin Li
435*9c5db199SXin LiKEY_SEND            = 231   # AC Send
436*9c5db199SXin LiKEY_REPLY           = 232   # AC Reply
437*9c5db199SXin LiKEY_FORWARDMAIL     = 233   # AC Forward Msg
438*9c5db199SXin LiKEY_SAVE            = 234   # AC Save
439*9c5db199SXin LiKEY_DOCUMENTS       = 235
440*9c5db199SXin Li
441*9c5db199SXin LiKEY_BATTERY         = 236
442*9c5db199SXin Li
443*9c5db199SXin LiKEY_BLUETOOTH       = 237
444*9c5db199SXin LiKEY_WLAN            = 238
445*9c5db199SXin LiKEY_UWB             = 239
446*9c5db199SXin Li
447*9c5db199SXin LiKEY_UNKNOWN         = 240
448*9c5db199SXin Li
449*9c5db199SXin LiKEY_VIDEO_NEXT      = 241   # drive next video source
450*9c5db199SXin LiKEY_VIDEO_PREV      = 242   # drive previous video source
451*9c5db199SXin LiKEY_BRIGHTNESS_CYCLE = 243  # brightness up, after max is min
452*9c5db199SXin LiKEY_BRIGHTNESS_ZERO = 244   # brightness off, use ambient
453*9c5db199SXin LiKEY_DISPLAY_OFF     = 245   # display device to off state
454*9c5db199SXin Li
455*9c5db199SXin LiKEY_WIMAX           = 246
456*9c5db199SXin LiKEY_RFKILL          = 247   # Key that controls all radios
457*9c5db199SXin Li
458*9c5db199SXin Li# Code 255 is reserved for special needs of AT keyboard driver
459*9c5db199SXin Li
460*9c5db199SXin LiBTN_MISC        = 0x100
461*9c5db199SXin LiBTN_0           = 0x100
462*9c5db199SXin LiBTN_1           = 0x101
463*9c5db199SXin LiBTN_2           = 0x102
464*9c5db199SXin LiBTN_3           = 0x103
465*9c5db199SXin LiBTN_4           = 0x104
466*9c5db199SXin LiBTN_5           = 0x105
467*9c5db199SXin LiBTN_6           = 0x106
468*9c5db199SXin LiBTN_7           = 0x107
469*9c5db199SXin LiBTN_8           = 0x108
470*9c5db199SXin LiBTN_9           = 0x109
471*9c5db199SXin Li
472*9c5db199SXin LiBTN_MOUSE       = 0x110
473*9c5db199SXin LiBTN_LEFT        = 0x110
474*9c5db199SXin LiBTN_RIGHT       = 0x111
475*9c5db199SXin LiBTN_MIDDLE      = 0x112
476*9c5db199SXin LiBTN_SIDE        = 0x113
477*9c5db199SXin LiBTN_EXTRA       = 0x114
478*9c5db199SXin LiBTN_FORWARD     = 0x115
479*9c5db199SXin LiBTN_BACK        = 0x116
480*9c5db199SXin LiBTN_TASK        = 0x117
481*9c5db199SXin Li
482*9c5db199SXin LiBTN_JOYSTICK    = 0x120
483*9c5db199SXin LiBTN_TRIGGER     = 0x120
484*9c5db199SXin LiBTN_THUMB       = 0x121
485*9c5db199SXin LiBTN_THUMB2      = 0x122
486*9c5db199SXin LiBTN_TOP         = 0x123
487*9c5db199SXin LiBTN_TOP2        = 0x124
488*9c5db199SXin LiBTN_PINKIE      = 0x125
489*9c5db199SXin LiBTN_BASE        = 0x126
490*9c5db199SXin LiBTN_BASE2       = 0x127
491*9c5db199SXin LiBTN_BASE3       = 0x128
492*9c5db199SXin LiBTN_BASE4       = 0x129
493*9c5db199SXin LiBTN_BASE5       = 0x12a
494*9c5db199SXin LiBTN_BASE6       = 0x12b
495*9c5db199SXin LiBTN_DEAD        = 0x12f
496*9c5db199SXin Li
497*9c5db199SXin LiBTN_GAMEPAD     = 0x130
498*9c5db199SXin LiBTN_A           = 0x130
499*9c5db199SXin LiBTN_B           = 0x131
500*9c5db199SXin LiBTN_C           = 0x132
501*9c5db199SXin LiBTN_X           = 0x133
502*9c5db199SXin LiBTN_Y           = 0x134
503*9c5db199SXin LiBTN_Z           = 0x135
504*9c5db199SXin LiBTN_TL          = 0x136
505*9c5db199SXin LiBTN_TR          = 0x137
506*9c5db199SXin LiBTN_TL2         = 0x138
507*9c5db199SXin LiBTN_TR2         = 0x139
508*9c5db199SXin LiBTN_SELECT      = 0x13a
509*9c5db199SXin LiBTN_START       = 0x13b
510*9c5db199SXin LiBTN_MODE        = 0x13c
511*9c5db199SXin LiBTN_THUMBL      = 0x13d
512*9c5db199SXin LiBTN_THUMBR      = 0x13e
513*9c5db199SXin Li
514*9c5db199SXin LiBTN_DIGI        = 0x140
515*9c5db199SXin LiBTN_TOOL_PEN    = 0x140
516*9c5db199SXin LiBTN_TOOL_RUBBER = 0x141
517*9c5db199SXin LiBTN_TOOL_BRUSH  = 0x142
518*9c5db199SXin LiBTN_TOOL_PENCIL = 0x143
519*9c5db199SXin LiBTN_TOOL_AIRBRUSH = 0x144
520*9c5db199SXin LiBTN_TOOL_FINGER = 0x145
521*9c5db199SXin LiBTN_TOOL_MOUSE  = 0x146
522*9c5db199SXin LiBTN_TOOL_LENS   = 0x147
523*9c5db199SXin LiBTN_TOOL_QUINTTAP = 0x148  # Five fingers on trackpad
524*9c5db199SXin LiBTN_TOUCH       = 0x14a
525*9c5db199SXin LiBTN_STYLUS      = 0x14b
526*9c5db199SXin LiBTN_STYLUS2     = 0x14c
527*9c5db199SXin LiBTN_TOOL_DOUBLETAP = 0x14d
528*9c5db199SXin LiBTN_TOOL_TRIPLETAP = 0x14e
529*9c5db199SXin LiBTN_TOOL_QUADTAP = 0x14f   # Four fingers on trackpad
530*9c5db199SXin Li
531*9c5db199SXin LiBTN_WHEEL       = 0x150
532*9c5db199SXin LiBTN_GEAR_DOWN   = 0x150
533*9c5db199SXin LiBTN_GEAR_UP     = 0x151
534*9c5db199SXin Li
535*9c5db199SXin Li
536*9c5db199SXin LiKEY_OK          = 0x160
537*9c5db199SXin LiKEY_SELECT      = 0x161
538*9c5db199SXin LiKEY_GOTO        = 0x162
539*9c5db199SXin LiKEY_CLEAR       = 0x163
540*9c5db199SXin LiKEY_POWER2      = 0x164
541*9c5db199SXin LiKEY_OPTION      = 0x165
542*9c5db199SXin LiKEY_INFO        = 0x166   #AL OEM Features/Tips/Tutorial
543*9c5db199SXin LiKEY_TIME        = 0x167
544*9c5db199SXin LiKEY_VENDOR      = 0x168
545*9c5db199SXin LiKEY_ARCHIVE     = 0x169
546*9c5db199SXin LiKEY_PROGRAM     = 0x16a   # Media Select Program Guide
547*9c5db199SXin LiKEY_CHANNEL     = 0x16b
548*9c5db199SXin LiKEY_FAVORITES   = 0x16c
549*9c5db199SXin LiKEY_EPG         = 0x16d
550*9c5db199SXin LiKEY_PVR         = 0x16e   # Media Select Home
551*9c5db199SXin LiKEY_MHP         = 0x16f
552*9c5db199SXin LiKEY_LANGUAGE    = 0x170
553*9c5db199SXin LiKEY_TITLE       = 0x171
554*9c5db199SXin LiKEY_SUBTITLE    = 0x172
555*9c5db199SXin LiKEY_ANGLE       = 0x173
556*9c5db199SXin LiKEY_ZOOM        = 0x174
557*9c5db199SXin LiKEY_MODE        = 0x175
558*9c5db199SXin LiKEY_KEYBOARD    = 0x176
559*9c5db199SXin LiKEY_SCREEN      = 0x177
560*9c5db199SXin LiKEY_PC          = 0x178   # Media Select Computer
561*9c5db199SXin LiKEY_TV          = 0x179   # Media Select TV
562*9c5db199SXin LiKEY_TV2         = 0x17a   # Media Select Cable
563*9c5db199SXin LiKEY_VCR         = 0x17b   # Media Select VCR
564*9c5db199SXin LiKEY_VCR2        = 0x17c   # VCR Plus
565*9c5db199SXin LiKEY_SAT         = 0x17d   # Media Select Satellite
566*9c5db199SXin LiKEY_SAT2        = 0x17e
567*9c5db199SXin LiKEY_CD          = 0x17f   # Media Select CD
568*9c5db199SXin LiKEY_TAPE        = 0x180   # Select Tape
569*9c5db199SXin LiKEY_RADIO       = 0x181
570*9c5db199SXin LiKEY_TUNER       = 0x182   # Media Select Tuner
571*9c5db199SXin LiKEY_PLAYER      = 0x183
572*9c5db199SXin LiKEY_TEXT        = 0x184
573*9c5db199SXin LiKEY_DVD         = 0x185   # Media Select DVD
574*9c5db199SXin LiKEY_AUX         = 0x186
575*9c5db199SXin LiKEY_MP3         = 0x187
576*9c5db199SXin LiKEY_AUDIO       = 0x188   # AL Audio Browser
577*9c5db199SXin LiKEY_VIDEO       = 0x189   # AL Movie Browser
578*9c5db199SXin LiKEY_DIRECTORY   = 0x18a
579*9c5db199SXin LiKEY_LIST        = 0x18b
580*9c5db199SXin LiKEY_MEMO        = 0x18   # Media Select Messages
581*9c5db199SXin LiKEY_CALENDAR    = 0x18d
582*9c5db199SXin LiKEY_RED         = 0x18e
583*9c5db199SXin LiKEY_GREEN       = 0x18f
584*9c5db199SXin LiKEY_YELLOW      = 0x190
585*9c5db199SXin LiKEY_BLUE        = 0x191
586*9c5db199SXin LiKEY_CHANNELUP   = 0x192   # Channel Increment
587*9c5db199SXin LiKEY_CHANNELDOWN = 0x193   # Channel Decrement
588*9c5db199SXin LiKEY_FIRST       = 0x194
589*9c5db199SXin LiKEY_LAST        = 0x195   # Recall Last
590*9c5db199SXin LiKEY_AB          = 0x196
591*9c5db199SXin LiKEY_NEXT        = 0x197
592*9c5db199SXin LiKEY_RESTART     = 0x198
593*9c5db199SXin LiKEY_SLOW        = 0x199
594*9c5db199SXin LiKEY_SHUFFLE     = 0x19a
595*9c5db199SXin LiKEY_BREAK       = 0x19b
596*9c5db199SXin LiKEY_PREVIOUS    = 0x19c
597*9c5db199SXin LiKEY_DIGITS      = 0x19d
598*9c5db199SXin LiKEY_TEEN        = 0x19e
599*9c5db199SXin LiKEY_TWEN        = 0x19f
600*9c5db199SXin LiKEY_VIDEOPHONE  = 0x1a0   # Media Select Video Phone
601*9c5db199SXin LiKEY_GAMES       = 0x1a1   # Media Select Games
602*9c5db199SXin LiKEY_ZOOMIN      = 0x1a2   # AC Zoom In
603*9c5db199SXin LiKEY_ZOOMOUT     = 0x1a3   # AC Zoom Out
604*9c5db199SXin LiKEY_ZOOMRESET   = 0x1a4   # AC Zoom
605*9c5db199SXin LiKEY_WORDPROCESSOR = 0x1a5   # AL Word Processor
606*9c5db199SXin LiKEY_EDITOR      = 0x1a6   # AL Text Editor
607*9c5db199SXin LiKEY_SPREADSHEET = 0x1a7   # AL Spreadsheet
608*9c5db199SXin LiKEY_GRAPHICSEDITOR = 0x1a8   # AL Graphics Editor
609*9c5db199SXin LiKEY_PRESENTATION = 0x1a9   # AL Presentation App
610*9c5db199SXin LiKEY_DATABASE    = 0x1aa   # AL Database App
611*9c5db199SXin LiKEY_NEWS        = 0x1ab   # AL Newsreader
612*9c5db199SXin LiKEY_VOICEMAIL   = 0x1ac   # AL Voicemail
613*9c5db199SXin LiKEY_ADDRESSBOOK = 0x1ad   # AL Contacts/Address Book
614*9c5db199SXin LiKEY_MESSENGER   = 0x1ae   # AL Instant Messaging
615*9c5db199SXin LiKEY_DISPLAYTOGGLE = 0x1af   # Turn display (LCD) on and off
616*9c5db199SXin LiKEY_SPELLCHECK  = 0x1b0   # AL Spell Check
617*9c5db199SXin LiKEY_LOGOFF      = 0x1b1   #* AL Logoff
618*9c5db199SXin Li
619*9c5db199SXin LiKEY_DOLLAR      = 0x1b2
620*9c5db199SXin LiKEY_EURO        = 0x1b3
621*9c5db199SXin Li
622*9c5db199SXin LiKEY_FRAMEBACK   = 0x1b4   # Consumer - transport controls
623*9c5db199SXin LiKEY_FRAMEFORWARD = 0x1b5
624*9c5db199SXin LiKEY_CONTEXT_MENU = 0x1b6   # GenDesc - system context menu
625*9c5db199SXin LiKEY_MEDIA_REPEAT = 0x1b7   # Consumer - transport control
626*9c5db199SXin LiKEY_10CHANNELSUP = 0x1b8   # 10 channels up (10+)
627*9c5db199SXin LiKEY_10CHANNELSDOWN = 0x1b9   # 10 channels down (10-)
628*9c5db199SXin LiKEY_IMAGES       = 0x1ba   # AL Image Browser
629*9c5db199SXin Li
630*9c5db199SXin LiKEY_DEL_EOL      = 0x1c0
631*9c5db199SXin LiKEY_DEL_EOS      = 0x1c1
632*9c5db199SXin LiKEY_INS_LINE     = 0x1c2
633*9c5db199SXin LiKEY_DEL_LINE     = 0x1c3
634*9c5db199SXin Li
635*9c5db199SXin LiKEY_FN           = 0x1d0
636*9c5db199SXin LiKEY_FN_ESC       = 0x1d1
637*9c5db199SXin LiKEY_FN_F1        = 0x1d2
638*9c5db199SXin LiKEY_FN_F2        = 0x1d3
639*9c5db199SXin LiKEY_FN_F3        = 0x1d4
640*9c5db199SXin LiKEY_FN_F4        = 0x1d5
641*9c5db199SXin LiKEY_FN_F5        = 0x1d6
642*9c5db199SXin LiKEY_FN_F6        = 0x1d7
643*9c5db199SXin LiKEY_FN_F7        = 0x1d8
644*9c5db199SXin LiKEY_FN_F8        = 0x1d9
645*9c5db199SXin LiKEY_FN_F9        = 0x1da
646*9c5db199SXin LiKEY_FN_F10       = 0x1db
647*9c5db199SXin LiKEY_FN_F11       = 0x1dc
648*9c5db199SXin LiKEY_FN_F12       = 0x1dd
649*9c5db199SXin LiKEY_FN_1         = 0x1de
650*9c5db199SXin LiKEY_FN_2         = 0x1df
651*9c5db199SXin LiKEY_FN_D         = 0x1e0
652*9c5db199SXin LiKEY_FN_E         = 0x1e1
653*9c5db199SXin LiKEY_FN_F         = 0x1e2
654*9c5db199SXin LiKEY_FN_S         = 0x1e3
655*9c5db199SXin LiKEY_FN_B         = 0x1e4
656*9c5db199SXin Li
657*9c5db199SXin LiKEY_BRL_DOT1     = 0x1f1
658*9c5db199SXin LiKEY_BRL_DOT2     = 0x1f2
659*9c5db199SXin LiKEY_BRL_DOT3     = 0x1f3
660*9c5db199SXin LiKEY_BRL_DOT4     = 0x1f4
661*9c5db199SXin LiKEY_BRL_DOT5     = 0x1f5
662*9c5db199SXin LiKEY_BRL_DOT6     = 0x1f6
663*9c5db199SXin LiKEY_BRL_DOT7     = 0x1f7
664*9c5db199SXin LiKEY_BRL_DOT8     = 0x1f8
665*9c5db199SXin LiKEY_BRL_DOT9     = 0x1f9
666*9c5db199SXin LiKEY_BRL_DOT10    = 0x1fa
667*9c5db199SXin Li
668*9c5db199SXin LiKEY_NUMERIC_0    = 0x200   # used by phones, remote controls,
669*9c5db199SXin LiKEY_NUMERIC_1    = 0x201   # and other keypads
670*9c5db199SXin LiKEY_NUMERIC_2    = 0x202
671*9c5db199SXin LiKEY_NUMERIC_3    = 0x203
672*9c5db199SXin LiKEY_NUMERIC_4    = 0x204
673*9c5db199SXin LiKEY_NUMERIC_5    = 0x205
674*9c5db199SXin LiKEY_NUMERIC_6    = 0x206
675*9c5db199SXin LiKEY_NUMERIC_7    = 0x207
676*9c5db199SXin LiKEY_NUMERIC_8    = 0x208
677*9c5db199SXin LiKEY_NUMERIC_9    = 0x209
678*9c5db199SXin LiKEY_NUMERIC_STAR = 0x20a
679*9c5db199SXin LiKEY_NUMERIC_POUND = 0x20b
680*9c5db199SXin Li
681*9c5db199SXin LiKEY_CAMERA_FOCUS = 0x210
682*9c5db199SXin LiKEY_WPS_BUTTON   = 0x211   # WiFi Protected Setup key
683*9c5db199SXin Li
684*9c5db199SXin LiKEY_TOUCHPAD_TOGGLE = 0x212   # Request switch touchpad on or off
685*9c5db199SXin LiKEY_TOUCHPAD_ON  = 0x213
686*9c5db199SXin LiKEY_TOUCHPAD_OFF = 0x214
687*9c5db199SXin Li
688*9c5db199SXin LiKEY_CAMERA_ZOOMIN = 0x215
689*9c5db199SXin LiKEY_CAMERA_ZOOMOUT = 0x216
690*9c5db199SXin LiKEY_CAMERA_UP    = 0x217
691*9c5db199SXin LiKEY_CAMERA_DOWN  = 0x218
692*9c5db199SXin LiKEY_CAMERA_LEFT  = 0x219
693*9c5db199SXin LiKEY_CAMERA_RIGHT = 0x21a
694*9c5db199SXin Li
695*9c5db199SXin LiBTN_TRIGGER_HAPPY  = 0x2c0
696*9c5db199SXin LiBTN_TRIGGER_HAPPY1 = 0x2c0
697*9c5db199SXin LiBTN_TRIGGER_HAPPY2 = 0x2c1
698*9c5db199SXin LiBTN_TRIGGER_HAPPY3 = 0x2c2
699*9c5db199SXin LiBTN_TRIGGER_HAPPY4 = 0x2c3
700*9c5db199SXin LiBTN_TRIGGER_HAPPY5 = 0x2c4
701*9c5db199SXin LiBTN_TRIGGER_HAPPY6 = 0x2c5
702*9c5db199SXin LiBTN_TRIGGER_HAPPY7 = 0x2c6
703*9c5db199SXin LiBTN_TRIGGER_HAPPY8 = 0x2c7
704*9c5db199SXin LiBTN_TRIGGER_HAPPY9 = 0x2c8
705*9c5db199SXin LiBTN_TRIGGER_HAPPY10 = 0x2c9
706*9c5db199SXin LiBTN_TRIGGER_HAPPY11 = 0x2ca
707*9c5db199SXin LiBTN_TRIGGER_HAPPY12 = 0x2cb
708*9c5db199SXin LiBTN_TRIGGER_HAPPY13 = 0x2cc
709*9c5db199SXin LiBTN_TRIGGER_HAPPY14 = 0x2cd
710*9c5db199SXin LiBTN_TRIGGER_HAPPY15 = 0x2ce
711*9c5db199SXin LiBTN_TRIGGER_HAPPY16 = 0x2cf
712*9c5db199SXin LiBTN_TRIGGER_HAPPY17 = 0x2d0
713*9c5db199SXin LiBTN_TRIGGER_HAPPY18 = 0x2d1
714*9c5db199SXin LiBTN_TRIGGER_HAPPY19 = 0x2d2
715*9c5db199SXin LiBTN_TRIGGER_HAPPY20 = 0x2d3
716*9c5db199SXin LiBTN_TRIGGER_HAPPY21 = 0x2d4
717*9c5db199SXin LiBTN_TRIGGER_HAPPY22 = 0x2d5
718*9c5db199SXin LiBTN_TRIGGER_HAPPY23 = 0x2d6
719*9c5db199SXin LiBTN_TRIGGER_HAPPY24 = 0x2d7
720*9c5db199SXin LiBTN_TRIGGER_HAPPY25 = 0x2d8
721*9c5db199SXin LiBTN_TRIGGER_HAPPY26 = 0x2d9
722*9c5db199SXin LiBTN_TRIGGER_HAPPY27 = 0x2da
723*9c5db199SXin LiBTN_TRIGGER_HAPPY28 = 0x2db
724*9c5db199SXin LiBTN_TRIGGER_HAPPY29 = 0x2dc
725*9c5db199SXin LiBTN_TRIGGER_HAPPY30 = 0x2dd
726*9c5db199SXin LiBTN_TRIGGER_HAPPY31 = 0x2de
727*9c5db199SXin LiBTN_TRIGGER_HAPPY32 = 0x2df
728*9c5db199SXin LiBTN_TRIGGER_HAPPY33 = 0x2e0
729*9c5db199SXin LiBTN_TRIGGER_HAPPY34 = 0x2e1
730*9c5db199SXin LiBTN_TRIGGER_HAPPY35 = 0x2e2
731*9c5db199SXin LiBTN_TRIGGER_HAPPY36 = 0x2e3
732*9c5db199SXin LiBTN_TRIGGER_HAPPY37 = 0x2e4
733*9c5db199SXin LiBTN_TRIGGER_HAPPY38 = 0x2e5
734*9c5db199SXin LiBTN_TRIGGER_HAPPY39 = 0x2e6
735*9c5db199SXin LiBTN_TRIGGER_HAPPY40 = 0x2e7
736*9c5db199SXin Li
737*9c5db199SXin Li
738*9c5db199SXin Li# We avoid low common keys in module aliases so they don't get huge
739*9c5db199SXin Li#KEY_MIN_INTERESTING = KEY_MUTE
740*9c5db199SXin LiKEY_MAX             = 0x2ff
741*9c5db199SXin LiKEY_CNT             = (KEY_MAX + 1)
742*9c5db199SXin Li
743*9c5db199SXin Li# Relative axes
744*9c5db199SXin LiREL_X               = 0x00
745*9c5db199SXin LiREL_Y               = 0x01
746*9c5db199SXin LiREL_Z               = 0x02
747*9c5db199SXin LiREL_RX              = 0x03
748*9c5db199SXin LiREL_RY              = 0x04
749*9c5db199SXin LiREL_RZ              = 0x05
750*9c5db199SXin LiREL_HWHEEL          = 0x06
751*9c5db199SXin LiREL_DIAL            = 0x07
752*9c5db199SXin LiREL_WHEEL           = 0x08
753*9c5db199SXin LiREL_MISC            = 0x09
754*9c5db199SXin LiREL_RESERVED        = 0x0a
755*9c5db199SXin LiREL_WHEEL_HI_RES    = 0x0b
756*9c5db199SXin LiREL_HWHEEL_HI_RES   = 0x0c
757*9c5db199SXin LiREL_MAX             = 0x0f
758*9c5db199SXin LiREL_CNT             = (REL_MAX + 1)
759*9c5db199SXin Li
760*9c5db199SXin Li# Absolute axes
761*9c5db199SXin LiABS_X               = 0x00
762*9c5db199SXin LiABS_Y               = 0x01
763*9c5db199SXin LiABS_Z               = 0x02
764*9c5db199SXin LiABS_RX              = 0x03
765*9c5db199SXin LiABS_RY              = 0x04
766*9c5db199SXin LiABS_RZ              = 0x05
767*9c5db199SXin LiABS_THROTTLE        = 0x06
768*9c5db199SXin LiABS_RUDDER          = 0x07
769*9c5db199SXin LiABS_WHEEL           = 0x08
770*9c5db199SXin LiABS_GAS             = 0x09
771*9c5db199SXin LiABS_BRAKE           = 0x0a
772*9c5db199SXin LiABS_HAT0X           = 0x10
773*9c5db199SXin LiABS_HAT0Y           = 0x11
774*9c5db199SXin LiABS_HAT1X           = 0x12
775*9c5db199SXin LiABS_HAT1Y           = 0x13
776*9c5db199SXin LiABS_HAT2X           = 0x14
777*9c5db199SXin LiABS_HAT2Y           = 0x15
778*9c5db199SXin LiABS_HAT3X           = 0x16
779*9c5db199SXin LiABS_HAT3Y           = 0x17
780*9c5db199SXin LiABS_PRESSURE        = 0x18
781*9c5db199SXin LiABS_DISTANCE        = 0x19
782*9c5db199SXin LiABS_TILT_X          = 0x1a
783*9c5db199SXin LiABS_TILT_Y          = 0x1b
784*9c5db199SXin LiABS_TOOL_WIDTH      = 0x1c
785*9c5db199SXin Li
786*9c5db199SXin LiABS_VOLUME          = 0x20
787*9c5db199SXin Li
788*9c5db199SXin LiABS_MISC            = 0x28
789*9c5db199SXin Li
790*9c5db199SXin LiABS_MT_SLOT         = 0x2f  # MT slot being modified
791*9c5db199SXin LiABS_MT_TOUCH_MAJOR  = 0x30  # Major axis of touching ellipse
792*9c5db199SXin LiABS_MT_TOUCH_MINOR  = 0x31  # Minor axis (omit if circular)
793*9c5db199SXin LiABS_MT_WIDTH_MAJOR  = 0x32  # Major axis of approaching ellipse
794*9c5db199SXin LiABS_MT_WIDTH_MINOR  = 0x33  # Minor axis (omit if circular)
795*9c5db199SXin LiABS_MT_ORIENTATION  = 0x34  # Ellipse orientation
796*9c5db199SXin LiABS_MT_POSITION_X   = 0x35  # Center X ellipse position
797*9c5db199SXin LiABS_MT_POSITION_Y   = 0x36  # Center Y ellipse position
798*9c5db199SXin LiABS_MT_TOOL_TYPE    = 0x37  # Type of touching device
799*9c5db199SXin LiABS_MT_BLOB_ID      = 0x38  # Group a set of packets as a blob
800*9c5db199SXin LiABS_MT_TRACKING_ID  = 0x39  # Unique ID of initiated contact
801*9c5db199SXin LiABS_MT_PRESSURE     = 0x3a  # Pressure on contact area
802*9c5db199SXin LiABS_MT_DISTANCE     = 0x3b  # Contact hover distance
803*9c5db199SXin Li
804*9c5db199SXin LiABS_MT_FIRST        = ABS_MT_TOUCH_MAJOR
805*9c5db199SXin LiABS_MT_LAST         = ABS_MT_DISTANCE
806*9c5db199SXin LiABS_MT_RANGE        = list(range(ABS_MT_FIRST, ABS_MT_LAST+1))
807*9c5db199SXin Li
808*9c5db199SXin LiABS_MAX             = 0x3f
809*9c5db199SXin LiABS_CNT             = (ABS_MAX + 1)
810*9c5db199SXin Li
811*9c5db199SXin Li# Switch events
812*9c5db199SXin LiSW_LID                  = 0x00  # set = lid shut
813*9c5db199SXin LiSW_TABLET_MODE          = 0x01  # set = tablet mode
814*9c5db199SXin LiSW_HEADPHONE_INSERT     = 0x02  # set = inserted
815*9c5db199SXin LiSW_RFKILL_ALL           = 0x03  # rfkill main switch, type "any"
816*9c5db199SXin Li                                # set = radio enabled
817*9c5db199SXin LiSW_RADIO = SW_RFKILL_ALL        # deprecated
818*9c5db199SXin LiSW_MICROPHONE_INSERT    = 0x04  # set = inserted
819*9c5db199SXin LiSW_DOCK                 = 0x05  # set = plugged into dock
820*9c5db199SXin LiSW_LINEOUT_INSERT       = 0x06  # set = inserted
821*9c5db199SXin LiSW_JACK_PHYSICAL_INSERT = 0x07  # set = mechanical switch set
822*9c5db199SXin LiSW_VIDEOOUT_INSERT      = 0x08  # set = inserted
823*9c5db199SXin LiSW_CAMERA_LENS_COVER    = 0x09  # set = lens covered
824*9c5db199SXin LiSW_KEYPAD_SLIDE         = 0x0a  # set = keypad slide out
825*9c5db199SXin LiSW_FRONT_PROXIMITY      = 0x0b  # set = front proximity sensor active
826*9c5db199SXin LiSW_ROTATE_LOCK          = 0x0c  # set = rotate locked/disabled
827*9c5db199SXin LiSW_MAX                  = 0x0f
828*9c5db199SXin LiSW_CNT                  = (SW_MAX + 1)
829*9c5db199SXin Li
830*9c5db199SXin Li# Misc events
831*9c5db199SXin LiMSC_SERIAL      = 0x00
832*9c5db199SXin LiMSC_PULSELED    = 0x01
833*9c5db199SXin LiMSC_GESTURE     = 0x02
834*9c5db199SXin LiMSC_RAW         = 0x03
835*9c5db199SXin LiMSC_SCAN        = 0x04
836*9c5db199SXin LiMSC_MAX         = 0x07
837*9c5db199SXin LiMSC_CNT         = (MSC_MAX + 1)
838*9c5db199SXin Li
839*9c5db199SXin Li# LEDs
840*9c5db199SXin LiLED_NUML        = 0x00
841*9c5db199SXin LiLED_CAPSL       = 0x01
842*9c5db199SXin LiLED_SCROLLL     = 0x02
843*9c5db199SXin LiLED_COMPOSE     = 0x03
844*9c5db199SXin LiLED_KANA        = 0x04
845*9c5db199SXin LiLED_SLEEP       = 0x05
846*9c5db199SXin LiLED_SUSPEND     = 0x06
847*9c5db199SXin LiLED_MUTE        = 0x07
848*9c5db199SXin LiLED_MISC        = 0x08
849*9c5db199SXin LiLED_MAIL        = 0x09
850*9c5db199SXin LiLED_CHARGING    = 0x0a
851*9c5db199SXin LiLED_MAX         = 0x0f
852*9c5db199SXin LiLED_CNT         = (LED_MAX + 1)
853*9c5db199SXin Li
854*9c5db199SXin Li# Autorepeat values
855*9c5db199SXin LiREP_DELAY       = 0x00
856*9c5db199SXin LiREP_PERIOD      = 0x01
857*9c5db199SXin LiREP_MAX         = 0x01
858*9c5db199SXin LiREP_CNT         = (REP_MAX + 1)
859*9c5db199SXin Li
860*9c5db199SXin Li# Sounds
861*9c5db199SXin LiSND_CLICK       = 0x00
862*9c5db199SXin LiSND_BELL        = 0x01
863*9c5db199SXin LiSND_TONE        = 0x02
864*9c5db199SXin LiSND_MAX         = 0x07
865*9c5db199SXin LiSND_CNT         = (SND_MAX + 1)
866*9c5db199SXin Li
867*9c5db199SXin Li# IDs.
868*9c5db199SXin LiID_BUS          = 0
869*9c5db199SXin LiID_VENDOR       = 1
870*9c5db199SXin LiID_PRODUCT      = 2
871*9c5db199SXin LiID_VERSION      = 3
872*9c5db199SXin Li
873*9c5db199SXin LiBUS_PCI         = 0x01
874*9c5db199SXin LiBUS_ISAPNP      = 0x02
875*9c5db199SXin LiBUS_USB         = 0x03
876*9c5db199SXin LiBUS_HIL         = 0x04
877*9c5db199SXin LiBUS_BLUETOOTH   = 0x05
878*9c5db199SXin LiBUS_VIRTUAL     = 0x06
879*9c5db199SXin Li
880*9c5db199SXin LiBUS_ISA         = 0x10
881*9c5db199SXin LiBUS_I8042       = 0x11
882*9c5db199SXin LiBUS_XTKBD       = 0x12
883*9c5db199SXin LiBUS_RS232       = 0x13
884*9c5db199SXin LiBUS_GAMEPORT    = 0x14
885*9c5db199SXin LiBUS_PARPORT     = 0x15
886*9c5db199SXin LiBUS_AMIGA       = 0x16
887*9c5db199SXin LiBUS_ADB         = 0x17
888*9c5db199SXin LiBUS_I2C         = 0x18
889*9c5db199SXin LiBUS_HOST        = 0x19
890*9c5db199SXin LiBUS_GSC         = 0x1A
891*9c5db199SXin LiBUS_ATARI       = 0x1B
892*9c5db199SXin LiBUS_SPI         = 0x1C
893*9c5db199SXin Li
894*9c5db199SXin Li# MT_TOOL types
895*9c5db199SXin LiMT_TOOL_FINGER  = 0
896*9c5db199SXin LiMT_TOOL_PEN     = 1
897*9c5db199SXin LiMT_TOOL_MAX     = 1
898*9c5db199SXin Li
899*9c5db199SXin Li# Values describing the status of a force-feedback effect
900*9c5db199SXin LiFF_STATUS_STOPPED   = 0x00
901*9c5db199SXin LiFF_STATUS_PLAYING   = 0x01
902*9c5db199SXin LiFF_STATUS_MAX       = 0x01
903*9c5db199SXin LiFF_STATUS_CNT       = (FF_STATUS_MAX + 1)
904*9c5db199SXin Li
905*9c5db199SXin Li# Structures used in ioctls to upload effects to a device
906*9c5db199SXin Li# They are pieces of a bigger structure (called ff_effect)
907*9c5db199SXin Li
908*9c5db199SXin Li# All duration values are expressed in ms. Values above 32767 ms (0x7fff)
909*9c5db199SXin Li# should not be used and have unspecified results.
910*9c5db199SXin Li
911*9c5db199SXin Li"""
912*9c5db199SXin Li * struct ff_replay - defines scheduling of the force-feedback effect
913*9c5db199SXin Li * @length: duration of the effect
914*9c5db199SXin Li * @delay: delay before effect should start playing
915*9c5db199SXin Listruct ff_replay {
916*9c5db199SXin Li  __u16 length;
917*9c5db199SXin Li  __u16 delay;
918*9c5db199SXin Li};
919*9c5db199SXin Li"""
920*9c5db199SXin Li
921*9c5db199SXin Li"""
922*9c5db199SXin Li * struct ff_trigger - defines what triggers the force-feedback effect
923*9c5db199SXin Li * @button: number of the button triggering the effect
924*9c5db199SXin Li * @interval: controls how soon the effect can be re-triggered
925*9c5db199SXin Listruct ff_trigger {
926*9c5db199SXin Li  __u16 button;
927*9c5db199SXin Li  __u16 interval;
928*9c5db199SXin Li};
929*9c5db199SXin Li"""
930*9c5db199SXin Li
931*9c5db199SXin Li"""
932*9c5db199SXin Li * struct ff_envelope - generic force-feedback effect envelope
933*9c5db199SXin Li * @attack_length: duration of the attack (ms)
934*9c5db199SXin Li * @attack_level: level at the beginning of the attack
935*9c5db199SXin Li * @fade_length: duration of fade (ms)
936*9c5db199SXin Li * @fade_level: level at the end of fade
937*9c5db199SXin Li *
938*9c5db199SXin Li * The @attack_level and @fade_level are absolute values; when applying
939*9c5db199SXin Li * envelope force-feedback core will convert to positive/negative
940*9c5db199SXin Li * value based on polarity of the default level of the effect.
941*9c5db199SXin Li * Valid range for the attack and fade levels is 0x0000 - 0x7fff
942*9c5db199SXin Listruct ff_envelope {
943*9c5db199SXin Li  __u16 attack_length;
944*9c5db199SXin Li  __u16 attack_level;
945*9c5db199SXin Li  __u16 fade_length;
946*9c5db199SXin Li  __u16 fade_level;
947*9c5db199SXin Li};
948*9c5db199SXin Li"""
949*9c5db199SXin Li
950*9c5db199SXin Li"""
951*9c5db199SXin Li * struct ff_constant_effect - params of a constant force-feedback effect
952*9c5db199SXin Li * @level: strength of the effect; may be negative
953*9c5db199SXin Li * @envelope: envelope data
954*9c5db199SXin Listruct ff_constant_effect {
955*9c5db199SXin Li  __s16 level;
956*9c5db199SXin Li  struct ff_envelope envelope;
957*9c5db199SXin Li};
958*9c5db199SXin Li"""
959*9c5db199SXin Li
960*9c5db199SXin Li"""
961*9c5db199SXin Li * struct ff_ramp_effect - params of a ramp force-feedback effect
962*9c5db199SXin Li * @start_level: beginning strength of the effect; may be negative
963*9c5db199SXin Li * @end_level: final strength of the effect; may be negative
964*9c5db199SXin Li * @envelope: envelope data
965*9c5db199SXin Listruct ff_ramp_effect {
966*9c5db199SXin Li  __s16 start_level;
967*9c5db199SXin Li  __s16 end_level;
968*9c5db199SXin Li  struct ff_envelope envelope;
969*9c5db199SXin Li};
970*9c5db199SXin Li"""
971*9c5db199SXin Li
972*9c5db199SXin Li"""
973*9c5db199SXin Li * struct ff_condition_effect - spring or friction force-feedback effect
974*9c5db199SXin Li * @right_saturation: maximum level when joystick moved all way to the right
975*9c5db199SXin Li * @left_saturation: same for the left side
976*9c5db199SXin Li * @right_coeff: controls how fast the force grows when the joystick moves
977*9c5db199SXin Li *  to the right
978*9c5db199SXin Li * @left_coeff: same for the left side
979*9c5db199SXin Li * @deadband: size of the dead zone, where no force is produced
980*9c5db199SXin Li * @center: position of the dead zone
981*9c5db199SXin Listruct ff_condition_effect {
982*9c5db199SXin Li  __u16 right_saturation;
983*9c5db199SXin Li  __u16 left_saturation;
984*9c5db199SXin Li
985*9c5db199SXin Li  __s16 right_coeff;
986*9c5db199SXin Li  __s16 left_coeff;
987*9c5db199SXin Li
988*9c5db199SXin Li  __u16 deadband;
989*9c5db199SXin Li  __s16 center;
990*9c5db199SXin Li};
991*9c5db199SXin Li"""
992*9c5db199SXin Li
993*9c5db199SXin Li
994*9c5db199SXin Li"""
995*9c5db199SXin Li * struct ff_periodic_effect - params of a periodic force-feedback effect
996*9c5db199SXin Li * @waveform: kind of the effect (wave)
997*9c5db199SXin Li * @period: period of the wave (ms)
998*9c5db199SXin Li * @magnitude: peak value
999*9c5db199SXin Li * @offset: mean value of the wave (roughly)
1000*9c5db199SXin Li * @phase: 'horizontal' shift
1001*9c5db199SXin Li * @envelope: envelope data
1002*9c5db199SXin Li * @custom_len: number of samples (FF_CUSTOM only)
1003*9c5db199SXin Li * @custom_data: buffer of samples (FF_CUSTOM only)
1004*9c5db199SXin Li *
1005*9c5db199SXin Li * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
1006*9c5db199SXin Li * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
1007*9c5db199SXin Li * for the time being as no driver supports it yet.
1008*9c5db199SXin Li *
1009*9c5db199SXin Li * Note: the data pointed by custom_data is copied by the driver.
1010*9c5db199SXin Li * You can therefore dispose of the memory after the upload/update.
1011*9c5db199SXin Listruct ff_periodic_effect {
1012*9c5db199SXin Li  __u16 waveform;
1013*9c5db199SXin Li  __u16 period;
1014*9c5db199SXin Li  __s16 magnitude;
1015*9c5db199SXin Li  __s16 offset;
1016*9c5db199SXin Li  __u16 phase;
1017*9c5db199SXin Li
1018*9c5db199SXin Li  struct ff_envelope envelope;
1019*9c5db199SXin Li
1020*9c5db199SXin Li  __u32 custom_len;
1021*9c5db199SXin Li  __s16 __user *custom_data;
1022*9c5db199SXin Li};
1023*9c5db199SXin Li"""
1024*9c5db199SXin Li
1025*9c5db199SXin Li"""
1026*9c5db199SXin Li * struct ff_rumble_effect - params of a periodic force-feedback effect
1027*9c5db199SXin Li * @strong_magnitude: magnitude of the heavy motor
1028*9c5db199SXin Li * @weak_magnitude: magnitude of the light one
1029*9c5db199SXin Li *
1030*9c5db199SXin Li * Some rumble pads have two motors of different weight. Strong_magnitude
1031*9c5db199SXin Li * represents the magnitude of the vibration generated by the heavy one.
1032*9c5db199SXin Listruct ff_rumble_effect {
1033*9c5db199SXin Li  __u16 strong_magnitude;
1034*9c5db199SXin Li  __u16 weak_magnitude;
1035*9c5db199SXin Li};
1036*9c5db199SXin Li"""
1037*9c5db199SXin Li
1038*9c5db199SXin Li"""
1039*9c5db199SXin Li * struct ff_effect - defines force feedback effect
1040*9c5db199SXin Li * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
1041*9c5db199SXin Li *  FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
1042*9c5db199SXin Li * @id: an unique id assigned to an effect
1043*9c5db199SXin Li * @direction: direction of the effect
1044*9c5db199SXin Li * @trigger: trigger conditions (struct ff_trigger)
1045*9c5db199SXin Li * @replay: scheduling of the effect (struct ff_replay)
1046*9c5db199SXin Li * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
1047*9c5db199SXin Li *  ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
1048*9c5db199SXin Li *  defining effect parameters
1049*9c5db199SXin Li *
1050*9c5db199SXin Li * This structure is sent through ioctl from the application to the driver.
1051*9c5db199SXin Li * To create a new effect application should set its @id to -1; the kernel
1052*9c5db199SXin Li * will return assigned @id which can later be used to update or delete
1053*9c5db199SXin Li * this effect.
1054*9c5db199SXin Li *
1055*9c5db199SXin Li * Direction of the effect is encoded as follows:
1056*9c5db199SXin Li *  0 deg -> 0x0000 (down)
1057*9c5db199SXin Li *  90 deg -> 0x4000 (left)
1058*9c5db199SXin Li *  180 deg -> 0x8000 (up)
1059*9c5db199SXin Li *  270 deg -> 0xC000 (right)
1060*9c5db199SXin Listruct ff_effect {
1061*9c5db199SXin Li  __u16 type;
1062*9c5db199SXin Li  __s16 id;
1063*9c5db199SXin Li  __u16 direction;
1064*9c5db199SXin Li  struct ff_trigger trigger;
1065*9c5db199SXin Li  struct ff_replay replay;
1066*9c5db199SXin Li
1067*9c5db199SXin Li  union {
1068*9c5db199SXin Li    struct ff_constant_effect constant;
1069*9c5db199SXin Li    struct ff_ramp_effect ramp;
1070*9c5db199SXin Li    struct ff_periodic_effect periodic;
1071*9c5db199SXin Li    struct ff_condition_effect condition[2]; /* One for each axis */
1072*9c5db199SXin Li    struct ff_rumble_effect rumble;
1073*9c5db199SXin Li  } u;
1074*9c5db199SXin Li};
1075*9c5db199SXin Li"""
1076*9c5db199SXin Li
1077*9c5db199SXin Li# Force feedback effect types
1078*9c5db199SXin LiFF_RUMBLE       = 0x50
1079*9c5db199SXin LiFF_PERIODIC     = 0x51
1080*9c5db199SXin LiFF_CONSTANT     = 0x52
1081*9c5db199SXin LiFF_SPRING       = 0x53
1082*9c5db199SXin LiFF_FRICTION     = 0x54
1083*9c5db199SXin LiFF_DAMPER       = 0x55
1084*9c5db199SXin LiFF_INERTIA      = 0x56
1085*9c5db199SXin LiFF_RAMP         = 0x57
1086*9c5db199SXin Li
1087*9c5db199SXin LiFF_EFFECT_MIN   = FF_RUMBLE
1088*9c5db199SXin LiFF_EFFECT_MAX   = FF_RAMP
1089*9c5db199SXin Li
1090*9c5db199SXin Li# Force feedback periodic effect types
1091*9c5db199SXin LiFF_SQUARE       = 0x58
1092*9c5db199SXin LiFF_TRIANGLE     = 0x59
1093*9c5db199SXin LiFF_SINE         = 0x5a
1094*9c5db199SXin LiFF_SAW_UP       = 0x5b
1095*9c5db199SXin LiFF_SAW_DOWN     = 0x5c
1096*9c5db199SXin LiFF_CUSTOM       = 0x5d
1097*9c5db199SXin Li
1098*9c5db199SXin LiFF_WAVEFORM_MIN = FF_SQUARE
1099*9c5db199SXin LiFF_WAVEFORM_MAX = FF_CUSTOM
1100*9c5db199SXin Li
1101*9c5db199SXin Li# Set ff device properties
1102*9c5db199SXin LiFF_GAIN         = 0x60
1103*9c5db199SXin LiFF_AUTOCENTER   = 0x61
1104*9c5db199SXin Li
1105*9c5db199SXin LiFF_MAX          = 0x7f
1106*9c5db199SXin LiFF_CNT          = (FF_MAX + 1)
1107*9c5db199SXin Li
1108*9c5db199SXin Li
1109*9c5db199SXin Li"""
1110*9c5db199SXin LiThe following constants, functions and dicts are not part of the original linux
1111*9c5db199SXin Liinput header file.  They are included here to make it easier to use the linux
1112*9c5db199SXin Liinput subsystem from python scripts.
1113*9c5db199SXin Li"""
1114*9c5db199SXin Li
1115*9c5db199SXin LiBITS_PER_WORD = 8
1116*9c5db199SXin Li
1117*9c5db199SXin Lidef NBITS(x):
1118*9c5db199SXin Li    return ((x - 1) // BITS_PER_WORD) + 1
1119*9c5db199SXin Li
1120*9c5db199SXin Lidef OFFSET(x):
1121*9c5db199SXin Li    return (x % BITS_PER_WORD)
1122*9c5db199SXin Li
1123*9c5db199SXin Lidef BIT(x):
1124*9c5db199SXin Li    return (1 << OFFSET(x))
1125*9c5db199SXin Li
1126*9c5db199SXin Lidef INDEX(x):
1127*9c5db199SXin Li    return (x // BITS_PER_WORD)
1128*9c5db199SXin Li
1129*9c5db199SXin Lidef test_bit(b, a):
1130*9c5db199SXin Li    return ((a[INDEX(b)] >> OFFSET(b)) & 1)
1131*9c5db199SXin Li
1132*9c5db199SXin LiEV_TYPES = {
1133*9c5db199SXin Li    EV_SYN : 'EV_SYN',
1134*9c5db199SXin Li    EV_KEY : 'EV_KEY',
1135*9c5db199SXin Li    EV_REL : 'EV_REL',
1136*9c5db199SXin Li    EV_ABS : 'EV_ABS',
1137*9c5db199SXin Li    EV_MSC : 'EV_MSC',
1138*9c5db199SXin Li    EV_SW  : 'EV_SW',
1139*9c5db199SXin Li    EV_LED : 'EV_LED',
1140*9c5db199SXin Li    EV_SND : 'EV_SND',
1141*9c5db199SXin Li    EV_REP : 'EV_REP',
1142*9c5db199SXin Li    EV_FF  : 'EV_FF',
1143*9c5db199SXin Li    EV_PWR : 'EV_PWR',
1144*9c5db199SXin Li    EV_FF_STATUS : 'EV_FF_STATUS'
1145*9c5db199SXin Li}
1146*9c5db199SXin Li
1147*9c5db199SXin LiEV_SIZES = {
1148*9c5db199SXin Li    EV_KEY : KEY_CNT,
1149*9c5db199SXin Li    EV_REL : REL_CNT,
1150*9c5db199SXin Li    EV_ABS : ABS_CNT,
1151*9c5db199SXin Li    EV_MSC : MSC_CNT,
1152*9c5db199SXin Li    EV_SW  : SW_CNT,
1153*9c5db199SXin Li    EV_LED : LED_CNT,
1154*9c5db199SXin Li    EV_SND : SND_CNT,
1155*9c5db199SXin Li    EV_REP : REP_CNT,
1156*9c5db199SXin Li    EV_FF  : FF_CNT,
1157*9c5db199SXin Li    EV_FF_STATUS : FF_STATUS_CNT
1158*9c5db199SXin Li}
1159*9c5db199SXin Li
1160*9c5db199SXin LiEV_STRINGS = {
1161*9c5db199SXin Li    # Keys (only buttons, for now)
1162*9c5db199SXin Li    EV_KEY: {
1163*9c5db199SXin Li        BTN_0           : '0',
1164*9c5db199SXin Li        BTN_1           : '1',
1165*9c5db199SXin Li        BTN_2           : '0',
1166*9c5db199SXin Li        BTN_3           : '3',
1167*9c5db199SXin Li        BTN_4           : '4',
1168*9c5db199SXin Li        BTN_5           : '5',
1169*9c5db199SXin Li        BTN_6           : '6',
1170*9c5db199SXin Li        BTN_7           : '7',
1171*9c5db199SXin Li        BTN_8           : '8',
1172*9c5db199SXin Li        BTN_9           : '9',
1173*9c5db199SXin Li        BTN_LEFT        : 'LEFT',
1174*9c5db199SXin Li        BTN_RIGHT       : 'RIGHT',
1175*9c5db199SXin Li        BTN_MIDDLE      : 'MIDDLE',
1176*9c5db199SXin Li        BTN_SIDE        : 'SIDE',
1177*9c5db199SXin Li        BTN_EXTRA       : 'EXTRA',
1178*9c5db199SXin Li        BTN_FORWARD     : 'FORWARD',
1179*9c5db199SXin Li        BTN_BACK        : 'BACK',
1180*9c5db199SXin Li        BTN_TASK        : 'TASK',
1181*9c5db199SXin Li        BTN_TRIGGER     : 'TRIGGER',
1182*9c5db199SXin Li        BTN_THUMB       : 'THUMB',
1183*9c5db199SXin Li        BTN_THUMB2      : 'THUMB2',
1184*9c5db199SXin Li        BTN_TOP         : 'TOP',
1185*9c5db199SXin Li        BTN_TOP2        : 'TOP2',
1186*9c5db199SXin Li        BTN_PINKIE      : 'PINKIE',
1187*9c5db199SXin Li        BTN_BASE        : 'BASE',
1188*9c5db199SXin Li        BTN_BASE2       : 'BASE2',
1189*9c5db199SXin Li        BTN_BASE3       : 'BASE3',
1190*9c5db199SXin Li        BTN_BASE4       : 'BASE4',
1191*9c5db199SXin Li        BTN_BASE5       : 'BASE5',
1192*9c5db199SXin Li        BTN_BASE6       : 'BASE6',
1193*9c5db199SXin Li        BTN_DEAD        : 'DEAD',
1194*9c5db199SXin Li        BTN_A           : 'A',
1195*9c5db199SXin Li        BTN_B           : 'B',
1196*9c5db199SXin Li        BTN_C           : 'C',
1197*9c5db199SXin Li        BTN_X           : 'X',
1198*9c5db199SXin Li        BTN_Y           : 'Y',
1199*9c5db199SXin Li        BTN_Z           : 'Z',
1200*9c5db199SXin Li        BTN_TL          : 'TL',
1201*9c5db199SXin Li        BTN_TR          : 'TR',
1202*9c5db199SXin Li        BTN_TL2         : 'TL2',
1203*9c5db199SXin Li        BTN_TR2         : 'TR2',
1204*9c5db199SXin Li        BTN_SELECT      : 'SELECT',
1205*9c5db199SXin Li        BTN_START       : 'START',
1206*9c5db199SXin Li        BTN_MODE        : 'MODE',
1207*9c5db199SXin Li        BTN_THUMBL      : 'THUMBL',
1208*9c5db199SXin Li        BTN_THUMBR      : 'THUMBR',
1209*9c5db199SXin Li        BTN_TOOL_PEN    : 'TOOL_PEN',
1210*9c5db199SXin Li        BTN_TOOL_RUBBER : 'TOOL_RUBBER',
1211*9c5db199SXin Li        BTN_TOOL_BRUSH  : 'TOOL_BRUSH',
1212*9c5db199SXin Li        BTN_TOOL_PENCIL : 'TOOL_PENCIL',
1213*9c5db199SXin Li        BTN_TOOL_AIRBRUSH : 'TOOL_AIRBRUSH',
1214*9c5db199SXin Li        BTN_TOOL_FINGER : 'TOOL_FINGER',
1215*9c5db199SXin Li        BTN_TOOL_MOUSE  : 'TOOL_MOUSE',
1216*9c5db199SXin Li        BTN_TOOL_LENS   : 'TOOL_LENS',
1217*9c5db199SXin Li        BTN_TOOL_QUINTTAP : 'TOOL_QUINTTAP',
1218*9c5db199SXin Li        BTN_TOUCH       : 'TOUCH',
1219*9c5db199SXin Li        BTN_STYLUS      : 'STYLUS',
1220*9c5db199SXin Li        BTN_STYLUS2     : 'STYLUS2',
1221*9c5db199SXin Li        BTN_TOOL_DOUBLETAP : 'TOOL_DOUBLETAP',
1222*9c5db199SXin Li        BTN_TOOL_TRIPLETAP : 'TOOL_TRIPLETAP',
1223*9c5db199SXin Li        BTN_TOOL_QUADTAP : 'TOOL_QUADTAP',
1224*9c5db199SXin Li        BTN_GEAR_DOWN   : 'TOOL_GEAR_DOWN',
1225*9c5db199SXin Li        BTN_GEAR_UP     : 'TOOL_GEAR_UP',
1226*9c5db199SXin Li    },
1227*9c5db199SXin Li
1228*9c5db199SXin Li    # Relative axes
1229*9c5db199SXin Li    EV_REL: {
1230*9c5db199SXin Li        REL_X           : 'X',
1231*9c5db199SXin Li        REL_Y           : 'Y',
1232*9c5db199SXin Li        REL_Z           : 'Z',
1233*9c5db199SXin Li        REL_RX          : 'RX',
1234*9c5db199SXin Li        REL_RY          : 'RY',
1235*9c5db199SXin Li        REL_RZ          : 'RZ',
1236*9c5db199SXin Li        REL_HWHEEL      : 'HWHEEL',
1237*9c5db199SXin Li        REL_DIAL        : 'DIAL',
1238*9c5db199SXin Li        REL_WHEEL       : 'WHEEL',
1239*9c5db199SXin Li        REL_MISC        : 'MISC',
1240*9c5db199SXin Li    },
1241*9c5db199SXin Li
1242*9c5db199SXin Li    # Absolute axes
1243*9c5db199SXin Li    EV_ABS: {
1244*9c5db199SXin Li        ABS_X               : 'X',
1245*9c5db199SXin Li        ABS_Y               : 'Y',
1246*9c5db199SXin Li        ABS_Z               : 'Z',
1247*9c5db199SXin Li        ABS_RX              : 'RX',
1248*9c5db199SXin Li        ABS_RY              : 'RY',
1249*9c5db199SXin Li        ABS_RZ              : 'RZ',
1250*9c5db199SXin Li        ABS_THROTTLE        : 'THROTTLE',
1251*9c5db199SXin Li        ABS_RUDDER          : 'RUDDER',
1252*9c5db199SXin Li        ABS_WHEEL           : 'WHEEL',
1253*9c5db199SXin Li        ABS_GAS             : 'GAS',
1254*9c5db199SXin Li        ABS_BRAKE           : 'BRAKE',
1255*9c5db199SXin Li        ABS_HAT0X           : 'HAT0X',
1256*9c5db199SXin Li        ABS_HAT0Y           : 'HAT0Y',
1257*9c5db199SXin Li        ABS_HAT1X           : 'HAT1X',
1258*9c5db199SXin Li        ABS_HAT1Y           : 'HAT1Y',
1259*9c5db199SXin Li        ABS_HAT2X           : 'HAT2X',
1260*9c5db199SXin Li        ABS_HAT2Y           : 'HAT2Y',
1261*9c5db199SXin Li        ABS_HAT3X           : 'HAT3X',
1262*9c5db199SXin Li        ABS_HAT3Y           : 'HAT3Y',
1263*9c5db199SXin Li        ABS_PRESSURE        : 'PRESSURE',
1264*9c5db199SXin Li        ABS_DISTANCE        : 'DISTANCE',
1265*9c5db199SXin Li        ABS_TILT_X          : 'TILT_X',
1266*9c5db199SXin Li        ABS_TILT_Y          : 'TILT_Y',
1267*9c5db199SXin Li        ABS_TOOL_WIDTH      : 'TOOL_WIDTH',
1268*9c5db199SXin Li        ABS_VOLUME          : 'VOLUME',
1269*9c5db199SXin Li        ABS_MISC            : 'MISC',
1270*9c5db199SXin Li        ABS_MT_SLOT         : 'MT_SLOT',
1271*9c5db199SXin Li        ABS_MT_TOUCH_MAJOR  : 'MT_TOUCH_MAJOR',
1272*9c5db199SXin Li        ABS_MT_TOUCH_MINOR  : 'MT_TOUCH_MINOR',
1273*9c5db199SXin Li        ABS_MT_WIDTH_MAJOR  : 'MT_WIDTH_MAJOR',
1274*9c5db199SXin Li        ABS_MT_WIDTH_MINOR  : 'MT_WIDTH_MINOR',
1275*9c5db199SXin Li        ABS_MT_ORIENTATION  : 'MT_ORIENTATION',
1276*9c5db199SXin Li        ABS_MT_POSITION_X   : 'MT_POSITION_X',
1277*9c5db199SXin Li        ABS_MT_POSITION_Y   : 'MT_POSITION_Y',
1278*9c5db199SXin Li        ABS_MT_TOOL_TYPE    : 'MT_TOOL_TYPE',
1279*9c5db199SXin Li        ABS_MT_BLOB_ID      : 'MT_BLOB_ID',
1280*9c5db199SXin Li        ABS_MT_TRACKING_ID  : 'MT_TRACKING_ID',
1281*9c5db199SXin Li        ABS_MT_PRESSURE     : 'MT_PRESSURE',
1282*9c5db199SXin Li        ABS_MT_DISTANCE     : 'MT_DISTANCE'
1283*9c5db199SXin Li    },
1284*9c5db199SXin Li
1285*9c5db199SXin Li    # Switches
1286*9c5db199SXin Li    EV_SW: {
1287*9c5db199SXin Li        SW_LID                  : 'LID',
1288*9c5db199SXin Li        SW_TABLET_MODE          : 'TABLET_MODE',
1289*9c5db199SXin Li        SW_HEADPHONE_INSERT     : 'HEADPHONE_INSERT',
1290*9c5db199SXin Li        SW_RFKILL_ALL           : 'RFKILL_ALL',
1291*9c5db199SXin Li        SW_MICROPHONE_INSERT    : 'MICROPHONE_INSERT',
1292*9c5db199SXin Li        SW_DOCK                 : 'DOCK',
1293*9c5db199SXin Li        SW_LINEOUT_INSERT       : 'LINEOUT_INSERT',
1294*9c5db199SXin Li        SW_JACK_PHYSICAL_INSERT : 'JACK_PHYSICAL_INSERT',
1295*9c5db199SXin Li        SW_VIDEOOUT_INSERT      : 'VIDEOOUT_INSERT',
1296*9c5db199SXin Li        SW_CAMERA_LENS_COVER    : 'CAMERA_LENS_COVER',
1297*9c5db199SXin Li        SW_KEYPAD_SLIDE         : 'KEYPAD_SLIDE',
1298*9c5db199SXin Li        SW_FRONT_PROXIMITY      : 'FRONT_PROXIMITY',
1299*9c5db199SXin Li        SW_ROTATE_LOCK          : 'ROTATE_LOCK',
1300*9c5db199SXin Li    },
1301*9c5db199SXin Li
1302*9c5db199SXin Li    # Misc events
1303*9c5db199SXin Li    EV_MSC: {
1304*9c5db199SXin Li        MSC_SERIAL      : 'SERIAL',
1305*9c5db199SXin Li        MSC_PULSELED    : 'PULSELED',
1306*9c5db199SXin Li        MSC_GESTURE     : 'GESTURE',
1307*9c5db199SXin Li        MSC_RAW         : 'RAW',
1308*9c5db199SXin Li        MSC_SCAN        : 'SCAN',
1309*9c5db199SXin Li    },
1310*9c5db199SXin Li
1311*9c5db199SXin Li    # LEDs
1312*9c5db199SXin Li    EV_LED: {
1313*9c5db199SXin Li        LED_NUML        : 'NUML',
1314*9c5db199SXin Li        LED_CAPSL       : 'CAPSL',
1315*9c5db199SXin Li        LED_SCROLLL     : 'SCROLLL',
1316*9c5db199SXin Li        LED_COMPOSE     : 'COMPOSE',
1317*9c5db199SXin Li        LED_KANA        : 'KANA',
1318*9c5db199SXin Li        LED_SLEEP       : 'SLEEP',
1319*9c5db199SXin Li        LED_SUSPEND     : 'SLEEP',
1320*9c5db199SXin Li        LED_MUTE        : 'SLEEP',
1321*9c5db199SXin Li        LED_MISC        : 'SLEEP',
1322*9c5db199SXin Li        LED_MAIL        : 'SLEEP',
1323*9c5db199SXin Li        LED_CHARGING    : 'SLEEP',
1324*9c5db199SXin Li    },
1325*9c5db199SXin Li
1326*9c5db199SXin Li    # Autorepeat values
1327*9c5db199SXin Li    EV_REP: {
1328*9c5db199SXin Li        REP_DELAY       : 'DELAY',
1329*9c5db199SXin Li        REP_PERIOD      : 'PERIOD',
1330*9c5db199SXin Li    },
1331*9c5db199SXin Li
1332*9c5db199SXin Li    # Sounds
1333*9c5db199SXin Li    EV_SND: {
1334*9c5db199SXin Li        SND_CLICK       : 'CLICK',
1335*9c5db199SXin Li        SND_BELL        : 'BELL'
1336*9c5db199SXin Li    }
1337*9c5db199SXin Li}
1338