1/* Copyright (C) 2007-2008 The Android Open Source Project
2**
3** This software is licensed under the terms of the GNU General Public
4** License version 2, as published by the Free Software Foundation, and
5** may be copied, distributed, and modified under those terms.
6**
7** This program is distributed in the hope that it will be useful,
8** but WITHOUT ANY WARRANTY; without even the implied warranty of
9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10** GNU General Public License for more details.
11*/
12#ifndef _ANDROID_HW_EVENTS_H
13#define _ANDROID_HW_EVENTS_H
14
15#include "android/utils/system.h"
16
17/* from the Linux kernel */
18
19#define  EVENT_TYPE_LIST  \
20  EV_TYPE(SYN,0x00)   \
21  EV_TYPE(KEY,0x01)   \
22  EV_TYPE(REL,0x02)   \
23  EV_TYPE(ABS,0x03)   \
24  EV_TYPE(MSC,0x04)   \
25  EV_TYPE(SW, 0x05)   \
26  EV_TYPE(LED,0x11)   \
27  EV_TYPE(SND,0x12)   \
28  EV_TYPE(REP,0x14)   \
29  EV_TYPE(FF, 0x15)   \
30  EV_TYPE(PWR,0x16)   \
31  EV_TYPE(FF_STATUS,0x17)  \
32  EV_TYPE(MAX,0x1f)
33
34#undef  EV_TYPE
35#define EV_TYPE(n,v)    GLUE(EV_,n) = v,
36typedef enum {
37    EVENT_TYPE_LIST
38} EventType;
39#undef  EV_TYPE
40
41/* BEWARE: The following codes are defined by the Linux kernel headers.
42 *         The Android "Menu" key is KEY_SOFT1, *not* KEY_MENU
43 */
44/* NOTE: mingw's winnt.h define DELETE to constant
45   i586-mingw32msvc:       #define DELETE  0x00010000L
46   x86_64-w64-mingw32-gcc: #define DELETE  (0x00010000L)
47
48   KEY_CODE belows glues "KEY_" and "DELETE".
49   While KEY_0x00010000L may not mean anything,
50   KEY_(0x00010000L) is absolutely harmful to compiler.
51   Undefine DELETE below
52 */
53#undef DELETE
54
55#define  EVENT_KEY_LIST \
56   KEY_CODE(ESC         ,1)     \
57   KEY_CODE(1           ,2)     \
58   KEY_CODE(2           ,3)     \
59   KEY_CODE(3           ,4)     \
60   KEY_CODE(4           ,5)     \
61   KEY_CODE(5           ,6)     \
62   KEY_CODE(6           ,7)     \
63   KEY_CODE(7           ,8)     \
64   KEY_CODE(8           ,9)     \
65   KEY_CODE(9           ,10)    \
66   KEY_CODE(0           ,11)    \
67   KEY_CODE(MINUS       ,12)    \
68   KEY_CODE(EQUAL       ,13)    \
69   KEY_CODE(BACKSPACE   ,14)    \
70   KEY_CODE(TAB         ,15)    \
71   KEY_CODE(Q           ,16)    \
72   KEY_CODE(W           ,17)    \
73   KEY_CODE(E           ,18)    \
74   KEY_CODE(R           ,19)    \
75   KEY_CODE(T           ,20)    \
76   KEY_CODE(Y           ,21)    \
77   KEY_CODE(U           ,22)    \
78   KEY_CODE(I           ,23)    \
79   KEY_CODE(O           ,24)    \
80   KEY_CODE(P           ,25)    \
81   KEY_CODE(LEFTBRACE   ,26)    \
82   KEY_CODE(RIGHTBRACE  ,27)    \
83   KEY_CODE(ENTER       ,28)    \
84   KEY_CODE(LEFTCTRL    ,29)    \
85   KEY_CODE(A           ,30)    \
86   KEY_CODE(S           ,31)    \
87   KEY_CODE(D           ,32)    \
88   KEY_CODE(F           ,33)    \
89   KEY_CODE(G           ,34)    \
90   KEY_CODE(H           ,35)    \
91   KEY_CODE(J           ,36)    \
92   KEY_CODE(K           ,37)    \
93   KEY_CODE(L           ,38)    \
94   KEY_CODE(SEMICOLON   ,39)    \
95   KEY_CODE(APOSTROPHE  ,40)    \
96   KEY_CODE(GRAVE       ,41)    \
97   KEY_CODE(LEFTSHIFT   ,42)    \
98   KEY_CODE(BACKSLASH   ,43)    \
99   KEY_CODE(Z           ,44)    \
100   KEY_CODE(X           ,45)    \
101   KEY_CODE(C           ,46)    \
102   KEY_CODE(V           ,47)    \
103   KEY_CODE(B           ,48)    \
104   KEY_CODE(N           ,49)    \
105   KEY_CODE(M           ,50)    \
106   KEY_CODE(COMMA       ,51)    \
107   KEY_CODE(DOT         ,52)    \
108   KEY_CODE(SLASH       ,53)    \
109   KEY_CODE(RIGHTSHIFT  ,54)    \
110   KEY_CODE(KPASTERISK  ,55)    \
111   KEY_CODE(LEFTALT     ,56)    \
112   KEY_CODE(SPACE       ,57)    \
113   KEY_CODE(CAPSLOCK    ,58)    \
114   KEY_CODE(F1          ,59)    \
115   KEY_CODE(F2          ,60)    \
116   KEY_CODE(F3          ,61)    \
117   KEY_CODE(F4          ,62)    \
118   KEY_CODE(F5          ,63)    \
119   KEY_CODE(F6          ,64)    \
120   KEY_CODE(F7          ,65)    \
121   KEY_CODE(F8          ,66)    \
122   KEY_CODE(F9          ,67)    \
123   KEY_CODE(F10         ,68)    \
124   KEY_CODE(NUMLOCK     ,69)    \
125   KEY_CODE(SCROLLLOCK  ,70)    \
126   KEY_CODE(KP7         ,71)    \
127   KEY_CODE(KP8         ,72)    \
128   KEY_CODE(KP9         ,73)    \
129   KEY_CODE(KPMINUS     ,74)    \
130   KEY_CODE(KP4         ,75)    \
131   KEY_CODE(KP5         ,76)    \
132   KEY_CODE(KP6         ,77)    \
133   KEY_CODE(KPPLUS      ,78)    \
134   KEY_CODE(KP1         ,79)    \
135   KEY_CODE(KP2         ,80)    \
136   KEY_CODE(KP3         ,81)    \
137   KEY_CODE(KP0         ,82)    \
138   KEY_CODE(KPDOT       ,83)    \
139   KEY_CODE(ZENKAKUHANKAKU,85)    \
140   KEY_CODE(102ND       ,86)    \
141   KEY_CODE(F11         ,87)    \
142   KEY_CODE(F12         ,88)    \
143   KEY_CODE(RO          ,89)    \
144   KEY_CODE(KATAKANA    ,90)    \
145   KEY_CODE(HIRAGANA    ,91)    \
146   KEY_CODE(HENKAN      ,92)    \
147   KEY_CODE(KATAKANAHIRAGANA,93)    \
148   KEY_CODE(MUHENKAN    ,94)    \
149   KEY_CODE(KPJPCOMMA   ,95)    \
150   KEY_CODE(KPENTER     ,96)    \
151   KEY_CODE(RIGHTCTRL   ,97)    \
152   KEY_CODE(KPSLASH     ,98)    \
153   KEY_CODE(SYSRQ       ,99)    \
154   KEY_CODE(RIGHTALT    ,100)   \
155   KEY_CODE(LINEFEED    ,101)   \
156   KEY_CODE(HOME        ,102)   \
157   KEY_CODE(UP          ,103)   \
158   KEY_CODE(PAGEUP      ,104)   \
159   KEY_CODE(LEFT        ,105)   \
160   KEY_CODE(RIGHT       ,106)   \
161   KEY_CODE(END         ,107)   \
162   KEY_CODE(DOWN        ,108)   \
163   KEY_CODE(PAGEDOWN    ,109)   \
164   KEY_CODE(INSERT      ,110)   \
165   KEY_CODE(DELETE      ,111)   \
166   KEY_CODE(MACRO       ,112)   \
167   KEY_CODE(MUTE        ,113)   \
168   KEY_CODE(VOLUMEDOWN  ,114)   \
169   KEY_CODE(VOLUMEUP    ,115)   \
170   KEY_CODE(POWER       ,116)   \
171   KEY_CODE(KPEQUAL     ,117)   \
172   KEY_CODE(KPPLUSMINUS ,118)   \
173   KEY_CODE(PAUSE       ,119)   \
174   KEY_CODE(KPCOMMA     ,121)   \
175   KEY_CODE(HANGEUL     ,122)   \
176   KEY_CODE(HANJA       ,123)   \
177   KEY_CODE(YEN         ,124)   \
178   KEY_CODE(LEFTMETA    ,125)   \
179   KEY_CODE(RIGHTMETA   ,126)   \
180   KEY_CODE(COMPOSE     ,127)   \
181   KEY_CODE(STOP        ,128)   \
182   KEY_CODE(AGAIN       ,129)   \
183   KEY_CODE(PROPS       ,130)   \
184   KEY_CODE(UNDO        ,131)   \
185   KEY_CODE(FRONT       ,132)   \
186   KEY_CODE(COPY        ,133)   \
187   KEY_CODE(OPEN        ,134)   \
188   KEY_CODE(PASTE       ,135)   \
189   KEY_CODE(FIND        ,136)   \
190   KEY_CODE(CUT         ,137)   \
191   KEY_CODE(HELP        ,138)   \
192   KEY_CODE(MENU        ,139)   \
193   KEY_CODE(CALC        ,140)   \
194   KEY_CODE(SETUP       ,141)   \
195   KEY_CODE(SLEEP       ,142)   \
196   KEY_CODE(WAKEUP      ,143)   \
197   KEY_CODE(FILE        ,144)   \
198   KEY_CODE(SENDFILE    ,145)   \
199   KEY_CODE(DELETEFILE  ,146)   \
200   KEY_CODE(XFER        ,147)   \
201   KEY_CODE(PROG1       ,148)   \
202   KEY_CODE(PROG2       ,149)   \
203   KEY_CODE(WWW         ,150)   \
204   KEY_CODE(MSDOS       ,151)   \
205   KEY_CODE(COFFEE      ,152)   \
206   KEY_CODE(DIRECTION   ,153)   \
207   KEY_CODE(CYCLEWINDOWS,154)   \
208   KEY_CODE(MAIL        ,155)   \
209   KEY_CODE(BOOKMARKS   ,156)   \
210   KEY_CODE(COMPUTER    ,157)   \
211   KEY_CODE(BACK        ,158)   \
212   KEY_CODE(FORWARD     ,159)   \
213   KEY_CODE(CLOSECD     ,160)   \
214   KEY_CODE(EJECTCD     ,161)   \
215   KEY_CODE(EJECTCLOSECD,162)   \
216   KEY_CODE(NEXTSONG    ,163)   \
217   KEY_CODE(PLAYPAUSE   ,164)   \
218   KEY_CODE(PREVIOUSSONG,165)   \
219   KEY_CODE(STOPCD      ,166)   \
220   KEY_CODE(RECORD      ,167)   \
221   KEY_CODE(REWIND      ,168)   \
222   KEY_CODE(PHONE       ,169)   \
223   KEY_CODE(ISO         ,170)   \
224   KEY_CODE(CONFIG      ,171)   \
225   KEY_CODE(HOMEPAGE    ,172)   \
226   KEY_CODE(REFRESH     ,173)   \
227   KEY_CODE(EXIT        ,174)   \
228   KEY_CODE(MOVE        ,175)   \
229   KEY_CODE(EDIT        ,176)   \
230   KEY_CODE(SCROLLUP    ,177)   \
231   KEY_CODE(SCROLLDOWN  ,178)   \
232   KEY_CODE(KPLEFTPAREN ,179)   \
233   KEY_CODE(KPRIGHTPAREN,180)   \
234   KEY_CODE(NEW         ,181)   \
235   KEY_CODE(REDO        ,182)   \
236   KEY_CODE(F13         ,183)   \
237   KEY_CODE(F14         ,184)   \
238   KEY_CODE(F15         ,185)   \
239   KEY_CODE(F16         ,186)   \
240   KEY_CODE(F17         ,187)   \
241   KEY_CODE(F18         ,188)   \
242   KEY_CODE(F19         ,189)   \
243   KEY_CODE(F20         ,190)   \
244   KEY_CODE(F21         ,191)   \
245   KEY_CODE(F22         ,192)   \
246   KEY_CODE(F23         ,193)   \
247   KEY_CODE(F24         ,194)   \
248   KEY_CODE(PLAYCD      ,200)   \
249   KEY_CODE(PAUSECD     ,201)   \
250   KEY_CODE(PROG3       ,202)   \
251   KEY_CODE(PROG4       ,203)   \
252   KEY_CODE(SUSPEND     ,205)   \
253   KEY_CODE(CLOSE       ,206)   \
254   KEY_CODE(PLAY        ,207)   \
255   KEY_CODE(FASTFORWARD ,208)   \
256   KEY_CODE(BASSBOOST   ,209)   \
257   KEY_CODE(PRINT       ,210)   \
258   KEY_CODE(HP          ,211)   \
259   KEY_CODE(CAMERA      ,212)   \
260   KEY_CODE(SOUND       ,213)   \
261   KEY_CODE(QUESTION    ,214)   \
262   KEY_CODE(EMAIL       ,215)   \
263   KEY_CODE(CHAT        ,216)   \
264   KEY_CODE(SEARCH      ,217)   \
265   KEY_CODE(CONNECT     ,218)   \
266   KEY_CODE(FINANCE     ,219)   \
267   KEY_CODE(SPORT       ,220)   \
268   KEY_CODE(SHOP        ,221)   \
269   KEY_CODE(ALTERASE    ,222)   \
270   KEY_CODE(CANCEL      ,223)   \
271   KEY_CODE(BRIGHTNESSDOWN,224)   \
272   KEY_CODE(BRIGHTNESSUP,225)   \
273   KEY_CODE(MEDIA       ,226)   \
274   KEY_CODE(STAR        ,227)   \
275   KEY_CODE(SHARP       ,228)   \
276   KEY_CODE(SOFT1       ,229)   \
277   KEY_CODE(SOFT2       ,230)   \
278   KEY_CODE(SEND        ,231)   \
279   KEY_CODE(CENTER      ,232)   \
280   KEY_CODE(HEADSETHOOK ,233)   \
281   KEY_CODE(0_5         ,234)   \
282   KEY_CODE(2_5         ,235)   \
283   KEY_CODE(SWITCHVIDEOMODE,236)   \
284   KEY_CODE(KBDILLUMTOGGLE,237)   \
285   KEY_CODE(KBDILLUMDOWN,238)   \
286   KEY_CODE(KBDILLUMUP  ,239)   \
287   KEY_CODE(REPLY       ,232)   \
288   KEY_CODE(FORWARDMAIL ,233)   \
289   KEY_CODE(SAVE        ,234)   \
290   KEY_CODE(DOCUMENTS   ,235)   \
291   KEY_CODE(BATTERY     ,236)   \
292   KEY_CODE(UNKNOWN     ,240)   \
293   KEY_CODE(NUM         ,241)   \
294   KEY_CODE(FOCUS       ,242)   \
295   KEY_CODE(PLUS        ,243)   \
296   KEY_CODE(NOTIFICATION,244)   \
297   KEY_CODE(OK          ,0x160)  \
298   KEY_CODE(SELECT      ,0x161)  \
299   KEY_CODE(GOTO        ,0x162)  \
300   KEY_CODE(CLEAR       ,0x163)  \
301   KEY_CODE(POWER2      ,0x164)  \
302   KEY_CODE(OPTION      ,0x165)  \
303   KEY_CODE(INFO        ,0x166)  \
304   KEY_CODE(TIME        ,0x167)  \
305   KEY_CODE(VENDOR      ,0x168)  \
306   KEY_CODE(ARCHIVE     ,0x169)  \
307   KEY_CODE(PROGRAM     ,0x16a)  \
308   KEY_CODE(CHANNEL     ,0x16b)  \
309   KEY_CODE(FAVORITES   ,0x16c)  \
310   KEY_CODE(EPG         ,0x16d)  \
311   KEY_CODE(PVR         ,0x16e)  \
312   KEY_CODE(MHP         ,0x16f)  \
313   KEY_CODE(LANGUAGE    ,0x170)  \
314   KEY_CODE(TITLE       ,0x171)  \
315   KEY_CODE(SUBTITLE    ,0x172)  \
316   KEY_CODE(ANGLE       ,0x173)  \
317   KEY_CODE(ZOOM        ,0x174)  \
318   KEY_CODE(MODE        ,0x175)  \
319   KEY_CODE(KEYBOARD    ,0x176)  \
320   KEY_CODE(SCREEN      ,0x177)  \
321   KEY_CODE(PC          ,0x178)  \
322   KEY_CODE(TV          ,0x179)  \
323   KEY_CODE(TV2         ,0x17a)  \
324   KEY_CODE(VCR         ,0x17b)  \
325   KEY_CODE(VCR2        ,0x17c)  \
326   KEY_CODE(SAT         ,0x17d)  \
327   KEY_CODE(SAT2        ,0x17e)  \
328   KEY_CODE(CD          ,0x17f)  \
329   KEY_CODE(TAPE        ,0x180)  \
330   KEY_CODE(RADIO       ,0x181)  \
331   KEY_CODE(TUNER       ,0x182)  \
332   KEY_CODE(PLAYER      ,0x183)  \
333   KEY_CODE(TEXT        ,0x184)  \
334   KEY_CODE(DVD         ,0x185)  \
335   KEY_CODE(AUX         ,0x186)  \
336   KEY_CODE(MP3         ,0x187)  \
337   KEY_CODE(AUDIO       ,0x188)  \
338   KEY_CODE(VIDEO       ,0x189)  \
339   KEY_CODE(DIRECTORY   ,0x18a)  \
340   KEY_CODE(LIST        ,0x18b)  \
341   KEY_CODE(MEMO        ,0x18c)  \
342   KEY_CODE(CALENDAR    ,0x18d)  \
343   KEY_CODE(RED         ,0x18e)  \
344   KEY_CODE(GREEN       ,0x18f)  \
345   KEY_CODE(YELLOW      ,0x190)  \
346   KEY_CODE(BLUE        ,0x191)  \
347   KEY_CODE(CHANNELUP   ,0x192)  \
348   KEY_CODE(CHANNELDOWN ,0x193)  \
349   KEY_CODE(FIRST       ,0x194)  \
350   KEY_CODE(LAST        ,0x195)  \
351   KEY_CODE(AB          ,0x196)  \
352   KEY_CODE(NEXT        ,0x197)  \
353   KEY_CODE(RESTART     ,0x198)  \
354   KEY_CODE(SLOW        ,0x199)  \
355   KEY_CODE(SHUFFLE     ,0x19a)  \
356   KEY_CODE(BREAK       ,0x19b)  \
357   KEY_CODE(PREVIOUS    ,0x19c)  \
358   KEY_CODE(DIGITS      ,0x19d)  \
359   KEY_CODE(TEEN        ,0x19e)  \
360   KEY_CODE(TWEN        ,0x19f)  \
361   KEY_CODE(DEL_EOL     ,0x1c0)  \
362   KEY_CODE(DEL_EOS     ,0x1c1)  \
363   KEY_CODE(INS_LINE    ,0x1c2)  \
364   KEY_CODE(DEL_LINE    ,0x1c3)  \
365   KEY_CODE(FN          ,0x1d0)  \
366   KEY_CODE(FN_ESC      ,0x1d1)  \
367   KEY_CODE(FN_F1       ,0x1d2)  \
368   KEY_CODE(FN_F2       ,0x1d3)  \
369   KEY_CODE(FN_F3       ,0x1d4)  \
370   KEY_CODE(FN_F4       ,0x1d5)  \
371   KEY_CODE(FN_F5       ,0x1d6)  \
372   KEY_CODE(FN_F6       ,0x1d7)  \
373   KEY_CODE(FN_F7       ,0x1d8)  \
374   KEY_CODE(FN_F8       ,0x1d9)  \
375   KEY_CODE(FN_F9       ,0x1da)  \
376   KEY_CODE(FN_F10      ,0x1db)  \
377   KEY_CODE(FN_F11      ,0x1dc)  \
378   KEY_CODE(FN_F12      ,0x1dd)  \
379   KEY_CODE(FN_1        ,0x1de)  \
380   KEY_CODE(FN_2        ,0x1df)  \
381   KEY_CODE(FN_D        ,0x1e0)  \
382   KEY_CODE(FN_E        ,0x1e1)  \
383   KEY_CODE(FN_F        ,0x1e2)  \
384   KEY_CODE(FN_S        ,0x1e3)  \
385   KEY_CODE(FN_B        ,0x1e4)  \
386   KEY_CODE(BRL_DOT1    ,0x1f1)  \
387   KEY_CODE(BRL_DOT2    ,0x1f2)  \
388   KEY_CODE(BRL_DOT3    ,0x1f3)  \
389   KEY_CODE(BRL_DOT4    ,0x1f4)  \
390   KEY_CODE(BRL_DOT5    ,0x1f5)  \
391   KEY_CODE(BRL_DOT6    ,0x1f6)  \
392   KEY_CODE(BRL_DOT7    ,0x1f7)  \
393   KEY_CODE(BRL_DOT8    ,0x1f8)  \
394
395#undef  KEY_CODE
396#define KEY_CODE(n,v)   GLUE(KEY_,n) = v,
397typedef enum {
398    EVENT_KEY_LIST
399} EventKeyCode;
400#undef  KEY_CODE
401
402
403#define  EVENT_BTN_LIST  \
404    BTN_CODE(MISC,0x100)  \
405    BTN_CODE(0,0x100)     \
406    BTN_CODE(1,0x101)     \
407    BTN_CODE(2,0x102)     \
408    BTN_CODE(3,0x103)     \
409    BTN_CODE(4,0x104)     \
410    BTN_CODE(5,0x105)     \
411    BTN_CODE(6,0x106)     \
412    BTN_CODE(7,0x107)     \
413    BTN_CODE(8,0x108)     \
414    BTN_CODE(9,0x109)     \
415    \
416    BTN_CODE(MOUSE,  0x110)  \
417    BTN_CODE(LEFT,   0x110)  \
418    BTN_CODE(RIGHT,  0x111)  \
419    BTN_CODE(MIDDLE, 0x112)  \
420    BTN_CODE(SIDE,   0x113)  \
421    BTN_CODE(EXTRA,  0x114)  \
422    BTN_CODE(FORWARD,0x115)  \
423    BTN_CODE(BACK,   0x116)  \
424    BTN_CODE(TASK,   0x117)  \
425    \
426    BTN_CODE(JOYSTICK,0x120)  \
427    BTN_CODE(TRIGGER, 0x120)  \
428    BTN_CODE(THUMB,   0x121)  \
429    BTN_CODE(THUMB2,  0x122)  \
430    BTN_CODE(TOP,     0x123)  \
431    BTN_CODE(TOP2,    0x124)  \
432    BTN_CODE(PINKIE,  0x125)  \
433    BTN_CODE(BASE,    0x126)  \
434    BTN_CODE(BASE2,   0x127)  \
435    BTN_CODE(BASE3,   0x128)  \
436    BTN_CODE(BASE4,   0x129)  \
437    BTN_CODE(BASE5,   0x12a)  \
438    BTN_CODE(BASE6,   0x12b)  \
439    BTN_CODE(DEAD,    0x12f)  \
440    \
441    BTN_CODE(GAMEPAD,  0x130)  \
442    BTN_CODE(A,        0x130)  \
443    BTN_CODE(B,        0x131)  \
444    BTN_CODE(C,        0x132)  \
445    BTN_CODE(X,        0x133)  \
446    BTN_CODE(Y,        0x134)  \
447    BTN_CODE(Z,        0x135)  \
448    BTN_CODE(TL,       0x136)  \
449    BTN_CODE(TR,       0x137)  \
450    BTN_CODE(TL2,      0x138)  \
451    BTN_CODE(TR2,      0x139)  \
452    BTN_CODE(SELECT,   0x13a)  \
453    BTN_CODE(START,    0x13b)  \
454    BTN_CODE(MODE,     0x13c)  \
455    BTN_CODE(THUMBL,   0x13d)  \
456    BTN_CODE(THUMBR,   0x13e)  \
457    \
458    BTN_CODE(DIGI,            0x140)  \
459    BTN_CODE(TOOL_PEN,        0x140)  \
460    BTN_CODE(TOOL_RUBBER,     0x141)  \
461    BTN_CODE(TOOL_BRUSH,      0x142)  \
462    BTN_CODE(TOOL_PENCIL,     0x143)  \
463    BTN_CODE(TOOL_AIRBRUSH,   0x144)  \
464    BTN_CODE(TOOL_FINGER,     0x145)  \
465    BTN_CODE(TOOL_MOUSE,      0x146)  \
466    BTN_CODE(TOOL_LENS,       0x147)  \
467    BTN_CODE(TOUCH,           0x14a)  \
468    BTN_CODE(STYLUS,          0x14b)  \
469    BTN_CODE(STYLUS2,         0x14c)  \
470    BTN_CODE(TOOL_DOUBLETAP,  0x14d)  \
471    BTN_CODE(TOOL_TRIPLETAP,  0x14e)  \
472    \
473    BTN_CODE(WHEEL,  0x150)      \
474    BTN_CODE(GEAR_DOWN,  0x150)  \
475    BTN_CODE(GEAR_UP,    0x150)
476
477#undef  BTN_CODE
478#define BTN_CODE(n,v)   GLUE(BTN_,n) = v,
479typedef enum {
480    EVENT_BTN_LIST
481} EventBtnCode;
482#undef  BTN_CODE
483
484#define  EVENT_REL_LIST \
485    REL_CODE(X,  0x00)  \
486    REL_CODE(Y,  0x01)
487
488#define  REL_CODE(n,v)  GLUE(REL_,n) = v,
489typedef enum {
490    EVENT_REL_LIST
491} EventRelCode;
492#undef  REL_CODE
493
494#define  EVENT_ABS_LIST  \
495    ABS_CODE(X,        0x00)  \
496    ABS_CODE(Y,        0x01)  \
497    ABS_CODE(Z,        0x02)  \
498    ABS_CODE(RX,       0x03)  \
499    ABS_CODE(RY,       0x04)  \
500    ABS_CODE(RZ,       0x05)  \
501    ABS_CODE(THROTTLE, 0x06)  \
502    ABS_CODE(RUDDER,   0x07)  \
503    ABS_CODE(WHEEL,    0x08)  \
504    ABS_CODE(GAS,      0x09)  \
505    ABS_CODE(BRAKE,    0x0a)  \
506    ABS_CODE(HAT0X,    0x10)  \
507    ABS_CODE(HAT0Y,    0x11)  \
508    ABS_CODE(HAT1X,    0x12)  \
509    ABS_CODE(HAT1Y,    0x13)  \
510    ABS_CODE(HAT2X,    0x14)  \
511    ABS_CODE(HAT2Y,    0x15)  \
512    ABS_CODE(HAT3X,    0x16)  \
513    ABS_CODE(HAT3Y,    0x17)  \
514    ABS_CODE(PRESSURE, 0x18)  \
515    ABS_CODE(DISTANCE, 0x19)  \
516    ABS_CODE(TILT_X,   0x1a)  \
517    ABS_CODE(TILT_Y,   0x1b)  \
518    ABS_CODE(TOOL_WIDTH, 0x1c)  \
519    ABS_CODE(VOLUME,     0x20)  \
520    ABS_CODE(MISC,       0x28)  \
521    ABS_CODE(MAX,        0x3f)
522
523#define  ABS_CODE(n,v)  GLUE(ABS_,n) = v,
524
525typedef enum {
526    EVENT_ABS_LIST
527} EventAbsCode;
528#undef  ABS_CODE
529
530/* convert an event string specification like <type>:<code>:<value>
531 * into three integers. returns 0 on success, or -1 in case of error
532 */
533extern int   android_event_from_str( const char*  name,
534                                     int         *ptype,
535                                     int         *pcode,
536                                     int         *pvalue );
537
538/* returns the list of valid event type string aliases */
539extern int    android_event_get_type_count( void );
540extern char*  android_event_bufprint_type_str( char*  buff, char*  end, int  type_index );
541
542/* returns the list of valid event code string aliases for a given event type */
543extern int    android_event_get_code_count( int  type );
544extern char*  android_event_bufprint_code_str( char*  buff, char*  end, int  type, int  code_index );
545
546#endif /* _ANDROID_HW_EVENTS_H */
547