InputEventLabels.h revision 51409573be11e89babeb61954a19c8261649ca7c
1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _LIBINPUT_INPUT_EVENT_LABELS_H
18#define _LIBINPUT_INPUT_EVENT_LABELS_H
19
20#include <input/Input.h>
21#include <android/keycodes.h>
22
23#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key }
24#define DEFINE_AXIS(axis) { #axis, AMOTION_EVENT_AXIS_##axis }
25#define DEFINE_LED(led) { #led, ALED_##led }
26#define DEFINE_FLAG(flag) { #flag, POLICY_FLAG_##flag }
27
28namespace android {
29
30template<typename T, size_t N>
31size_t size(T (&)[N]) { return N; }
32
33struct InputEventLabel {
34    const char *literal;
35    int value;
36};
37
38
39static const InputEventLabel KEYCODES[] = {
40    // NOTE: If you add a new keycode here you must also add it to several other files.
41    //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
42    DEFINE_KEYCODE(UNKNOWN),
43    DEFINE_KEYCODE(SOFT_LEFT),
44    DEFINE_KEYCODE(SOFT_RIGHT),
45    DEFINE_KEYCODE(HOME),
46    DEFINE_KEYCODE(BACK),
47    DEFINE_KEYCODE(CALL),
48    DEFINE_KEYCODE(ENDCALL),
49    DEFINE_KEYCODE(0),
50    DEFINE_KEYCODE(1),
51    DEFINE_KEYCODE(2),
52    DEFINE_KEYCODE(3),
53    DEFINE_KEYCODE(4),
54    DEFINE_KEYCODE(5),
55    DEFINE_KEYCODE(6),
56    DEFINE_KEYCODE(7),
57    DEFINE_KEYCODE(8),
58    DEFINE_KEYCODE(9),
59    DEFINE_KEYCODE(STAR),
60    DEFINE_KEYCODE(POUND),
61    DEFINE_KEYCODE(DPAD_UP),
62    DEFINE_KEYCODE(DPAD_DOWN),
63    DEFINE_KEYCODE(DPAD_LEFT),
64    DEFINE_KEYCODE(DPAD_RIGHT),
65    DEFINE_KEYCODE(DPAD_CENTER),
66    DEFINE_KEYCODE(VOLUME_UP),
67    DEFINE_KEYCODE(VOLUME_DOWN),
68    DEFINE_KEYCODE(POWER),
69    DEFINE_KEYCODE(CAMERA),
70    DEFINE_KEYCODE(CLEAR),
71    DEFINE_KEYCODE(A),
72    DEFINE_KEYCODE(B),
73    DEFINE_KEYCODE(C),
74    DEFINE_KEYCODE(D),
75    DEFINE_KEYCODE(E),
76    DEFINE_KEYCODE(F),
77    DEFINE_KEYCODE(G),
78    DEFINE_KEYCODE(H),
79    DEFINE_KEYCODE(I),
80    DEFINE_KEYCODE(J),
81    DEFINE_KEYCODE(K),
82    DEFINE_KEYCODE(L),
83    DEFINE_KEYCODE(M),
84    DEFINE_KEYCODE(N),
85    DEFINE_KEYCODE(O),
86    DEFINE_KEYCODE(P),
87    DEFINE_KEYCODE(Q),
88    DEFINE_KEYCODE(R),
89    DEFINE_KEYCODE(S),
90    DEFINE_KEYCODE(T),
91    DEFINE_KEYCODE(U),
92    DEFINE_KEYCODE(V),
93    DEFINE_KEYCODE(W),
94    DEFINE_KEYCODE(X),
95    DEFINE_KEYCODE(Y),
96    DEFINE_KEYCODE(Z),
97    DEFINE_KEYCODE(COMMA),
98    DEFINE_KEYCODE(PERIOD),
99    DEFINE_KEYCODE(ALT_LEFT),
100    DEFINE_KEYCODE(ALT_RIGHT),
101    DEFINE_KEYCODE(SHIFT_LEFT),
102    DEFINE_KEYCODE(SHIFT_RIGHT),
103    DEFINE_KEYCODE(TAB),
104    DEFINE_KEYCODE(SPACE),
105    DEFINE_KEYCODE(SYM),
106    DEFINE_KEYCODE(EXPLORER),
107    DEFINE_KEYCODE(ENVELOPE),
108    DEFINE_KEYCODE(ENTER),
109    DEFINE_KEYCODE(DEL),
110    DEFINE_KEYCODE(GRAVE),
111    DEFINE_KEYCODE(MINUS),
112    DEFINE_KEYCODE(EQUALS),
113    DEFINE_KEYCODE(LEFT_BRACKET),
114    DEFINE_KEYCODE(RIGHT_BRACKET),
115    DEFINE_KEYCODE(BACKSLASH),
116    DEFINE_KEYCODE(SEMICOLON),
117    DEFINE_KEYCODE(APOSTROPHE),
118    DEFINE_KEYCODE(SLASH),
119    DEFINE_KEYCODE(AT),
120    DEFINE_KEYCODE(NUM),
121    DEFINE_KEYCODE(HEADSETHOOK),
122    DEFINE_KEYCODE(FOCUS),   // *Camera* focus
123    DEFINE_KEYCODE(PLUS),
124    DEFINE_KEYCODE(MENU),
125    DEFINE_KEYCODE(NOTIFICATION),
126    DEFINE_KEYCODE(SEARCH),
127    DEFINE_KEYCODE(MEDIA_PLAY_PAUSE),
128    DEFINE_KEYCODE(MEDIA_STOP),
129    DEFINE_KEYCODE(MEDIA_NEXT),
130    DEFINE_KEYCODE(MEDIA_PREVIOUS),
131    DEFINE_KEYCODE(MEDIA_REWIND),
132    DEFINE_KEYCODE(MEDIA_FAST_FORWARD),
133    DEFINE_KEYCODE(MUTE),
134    DEFINE_KEYCODE(PAGE_UP),
135    DEFINE_KEYCODE(PAGE_DOWN),
136    DEFINE_KEYCODE(PICTSYMBOLS),
137    DEFINE_KEYCODE(SWITCH_CHARSET),
138    DEFINE_KEYCODE(BUTTON_A),
139    DEFINE_KEYCODE(BUTTON_B),
140    DEFINE_KEYCODE(BUTTON_C),
141    DEFINE_KEYCODE(BUTTON_X),
142    DEFINE_KEYCODE(BUTTON_Y),
143    DEFINE_KEYCODE(BUTTON_Z),
144    DEFINE_KEYCODE(BUTTON_L1),
145    DEFINE_KEYCODE(BUTTON_R1),
146    DEFINE_KEYCODE(BUTTON_L2),
147    DEFINE_KEYCODE(BUTTON_R2),
148    DEFINE_KEYCODE(BUTTON_THUMBL),
149    DEFINE_KEYCODE(BUTTON_THUMBR),
150    DEFINE_KEYCODE(BUTTON_START),
151    DEFINE_KEYCODE(BUTTON_SELECT),
152    DEFINE_KEYCODE(BUTTON_MODE),
153    DEFINE_KEYCODE(ESCAPE),
154    DEFINE_KEYCODE(FORWARD_DEL),
155    DEFINE_KEYCODE(CTRL_LEFT),
156    DEFINE_KEYCODE(CTRL_RIGHT),
157    DEFINE_KEYCODE(CAPS_LOCK),
158    DEFINE_KEYCODE(SCROLL_LOCK),
159    DEFINE_KEYCODE(META_LEFT),
160    DEFINE_KEYCODE(META_RIGHT),
161    DEFINE_KEYCODE(FUNCTION),
162    DEFINE_KEYCODE(SYSRQ),
163    DEFINE_KEYCODE(BREAK),
164    DEFINE_KEYCODE(MOVE_HOME),
165    DEFINE_KEYCODE(MOVE_END),
166    DEFINE_KEYCODE(INSERT),
167    DEFINE_KEYCODE(FORWARD),
168    DEFINE_KEYCODE(MEDIA_PLAY),
169    DEFINE_KEYCODE(MEDIA_PAUSE),
170    DEFINE_KEYCODE(MEDIA_CLOSE),
171    DEFINE_KEYCODE(MEDIA_EJECT),
172    DEFINE_KEYCODE(MEDIA_RECORD),
173    DEFINE_KEYCODE(F1),
174    DEFINE_KEYCODE(F2),
175    DEFINE_KEYCODE(F3),
176    DEFINE_KEYCODE(F4),
177    DEFINE_KEYCODE(F5),
178    DEFINE_KEYCODE(F6),
179    DEFINE_KEYCODE(F7),
180    DEFINE_KEYCODE(F8),
181    DEFINE_KEYCODE(F9),
182    DEFINE_KEYCODE(F10),
183    DEFINE_KEYCODE(F11),
184    DEFINE_KEYCODE(F12),
185    DEFINE_KEYCODE(NUM_LOCK),
186    DEFINE_KEYCODE(NUMPAD_0),
187    DEFINE_KEYCODE(NUMPAD_1),
188    DEFINE_KEYCODE(NUMPAD_2),
189    DEFINE_KEYCODE(NUMPAD_3),
190    DEFINE_KEYCODE(NUMPAD_4),
191    DEFINE_KEYCODE(NUMPAD_5),
192    DEFINE_KEYCODE(NUMPAD_6),
193    DEFINE_KEYCODE(NUMPAD_7),
194    DEFINE_KEYCODE(NUMPAD_8),
195    DEFINE_KEYCODE(NUMPAD_9),
196    DEFINE_KEYCODE(NUMPAD_DIVIDE),
197    DEFINE_KEYCODE(NUMPAD_MULTIPLY),
198    DEFINE_KEYCODE(NUMPAD_SUBTRACT),
199    DEFINE_KEYCODE(NUMPAD_ADD),
200    DEFINE_KEYCODE(NUMPAD_DOT),
201    DEFINE_KEYCODE(NUMPAD_COMMA),
202    DEFINE_KEYCODE(NUMPAD_ENTER),
203    DEFINE_KEYCODE(NUMPAD_EQUALS),
204    DEFINE_KEYCODE(NUMPAD_LEFT_PAREN),
205    DEFINE_KEYCODE(NUMPAD_RIGHT_PAREN),
206    DEFINE_KEYCODE(VOLUME_MUTE),
207    DEFINE_KEYCODE(INFO),
208    DEFINE_KEYCODE(CHANNEL_UP),
209    DEFINE_KEYCODE(CHANNEL_DOWN),
210    DEFINE_KEYCODE(ZOOM_IN),
211    DEFINE_KEYCODE(ZOOM_OUT),
212    DEFINE_KEYCODE(TV),
213    DEFINE_KEYCODE(WINDOW),
214    DEFINE_KEYCODE(GUIDE),
215    DEFINE_KEYCODE(DVR),
216    DEFINE_KEYCODE(BOOKMARK),
217    DEFINE_KEYCODE(CAPTIONS),
218    DEFINE_KEYCODE(SETTINGS),
219    DEFINE_KEYCODE(TV_POWER),
220    DEFINE_KEYCODE(TV_INPUT),
221    DEFINE_KEYCODE(STB_POWER),
222    DEFINE_KEYCODE(STB_INPUT),
223    DEFINE_KEYCODE(AVR_POWER),
224    DEFINE_KEYCODE(AVR_INPUT),
225    DEFINE_KEYCODE(PROG_RED),
226    DEFINE_KEYCODE(PROG_GREEN),
227    DEFINE_KEYCODE(PROG_YELLOW),
228    DEFINE_KEYCODE(PROG_BLUE),
229    DEFINE_KEYCODE(APP_SWITCH),
230    DEFINE_KEYCODE(BUTTON_1),
231    DEFINE_KEYCODE(BUTTON_2),
232    DEFINE_KEYCODE(BUTTON_3),
233    DEFINE_KEYCODE(BUTTON_4),
234    DEFINE_KEYCODE(BUTTON_5),
235    DEFINE_KEYCODE(BUTTON_6),
236    DEFINE_KEYCODE(BUTTON_7),
237    DEFINE_KEYCODE(BUTTON_8),
238    DEFINE_KEYCODE(BUTTON_9),
239    DEFINE_KEYCODE(BUTTON_10),
240    DEFINE_KEYCODE(BUTTON_11),
241    DEFINE_KEYCODE(BUTTON_12),
242    DEFINE_KEYCODE(BUTTON_13),
243    DEFINE_KEYCODE(BUTTON_14),
244    DEFINE_KEYCODE(BUTTON_15),
245    DEFINE_KEYCODE(BUTTON_16),
246    DEFINE_KEYCODE(LANGUAGE_SWITCH),
247    DEFINE_KEYCODE(MANNER_MODE),
248    DEFINE_KEYCODE(3D_MODE),
249    DEFINE_KEYCODE(CONTACTS),
250    DEFINE_KEYCODE(CALENDAR),
251    DEFINE_KEYCODE(MUSIC),
252    DEFINE_KEYCODE(CALCULATOR),
253    DEFINE_KEYCODE(ZENKAKU_HANKAKU),
254    DEFINE_KEYCODE(EISU),
255    DEFINE_KEYCODE(MUHENKAN),
256    DEFINE_KEYCODE(HENKAN),
257    DEFINE_KEYCODE(KATAKANA_HIRAGANA),
258    DEFINE_KEYCODE(YEN),
259    DEFINE_KEYCODE(RO),
260    DEFINE_KEYCODE(KANA),
261    DEFINE_KEYCODE(ASSIST),
262    DEFINE_KEYCODE(BRIGHTNESS_DOWN),
263    DEFINE_KEYCODE(BRIGHTNESS_UP),
264    DEFINE_KEYCODE(MEDIA_AUDIO_TRACK),
265    DEFINE_KEYCODE(SLEEP),
266    DEFINE_KEYCODE(WAKEUP),
267    DEFINE_KEYCODE(PAIRING),
268    DEFINE_KEYCODE(MEDIA_TOP_MENU),
269    DEFINE_KEYCODE(11),
270    DEFINE_KEYCODE(12),
271    DEFINE_KEYCODE(LAST_CHANNEL),
272    DEFINE_KEYCODE(TV_DATA_SERVICE),
273    DEFINE_KEYCODE(VOICE_ASSIST),
274
275    { NULL, 0 }
276};
277
278static const InputEventLabel AXES[] = {
279    DEFINE_AXIS(X),
280    DEFINE_AXIS(Y),
281    DEFINE_AXIS(PRESSURE),
282    DEFINE_AXIS(SIZE),
283    DEFINE_AXIS(TOUCH_MAJOR),
284    DEFINE_AXIS(TOUCH_MINOR),
285    DEFINE_AXIS(TOOL_MAJOR),
286    DEFINE_AXIS(TOOL_MINOR),
287    DEFINE_AXIS(ORIENTATION),
288    DEFINE_AXIS(VSCROLL),
289    DEFINE_AXIS(HSCROLL),
290    DEFINE_AXIS(Z),
291    DEFINE_AXIS(RX),
292    DEFINE_AXIS(RY),
293    DEFINE_AXIS(RZ),
294    DEFINE_AXIS(HAT_X),
295    DEFINE_AXIS(HAT_Y),
296    DEFINE_AXIS(LTRIGGER),
297    DEFINE_AXIS(RTRIGGER),
298    DEFINE_AXIS(THROTTLE),
299    DEFINE_AXIS(RUDDER),
300    DEFINE_AXIS(WHEEL),
301    DEFINE_AXIS(GAS),
302    DEFINE_AXIS(BRAKE),
303    DEFINE_AXIS(DISTANCE),
304    DEFINE_AXIS(TILT),
305    DEFINE_AXIS(GENERIC_1),
306    DEFINE_AXIS(GENERIC_2),
307    DEFINE_AXIS(GENERIC_3),
308    DEFINE_AXIS(GENERIC_4),
309    DEFINE_AXIS(GENERIC_5),
310    DEFINE_AXIS(GENERIC_6),
311    DEFINE_AXIS(GENERIC_7),
312    DEFINE_AXIS(GENERIC_8),
313    DEFINE_AXIS(GENERIC_9),
314    DEFINE_AXIS(GENERIC_10),
315    DEFINE_AXIS(GENERIC_11),
316    DEFINE_AXIS(GENERIC_12),
317    DEFINE_AXIS(GENERIC_13),
318    DEFINE_AXIS(GENERIC_14),
319    DEFINE_AXIS(GENERIC_15),
320    DEFINE_AXIS(GENERIC_16),
321
322    // NOTE: If you add a new axis here you must also add it to several other files.
323    //       Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.
324    { NULL, 0 }
325};
326
327static const InputEventLabel LEDS[] = {
328    DEFINE_LED(NUM_LOCK),
329    DEFINE_LED(CAPS_LOCK),
330    DEFINE_LED(SCROLL_LOCK),
331    DEFINE_LED(COMPOSE),
332    DEFINE_LED(KANA),
333    DEFINE_LED(SLEEP),
334    DEFINE_LED(SUSPEND),
335    DEFINE_LED(MUTE),
336    DEFINE_LED(MISC),
337    DEFINE_LED(MAIL),
338    DEFINE_LED(CHARGING),
339    DEFINE_LED(CONTROLLER_1),
340    DEFINE_LED(CONTROLLER_2),
341    DEFINE_LED(CONTROLLER_3),
342    DEFINE_LED(CONTROLLER_4),
343
344    // NOTE: If you add new LEDs here, you must also add them to Input.h
345    { NULL, 0 }
346};
347
348static const InputEventLabel FLAGS[] = {
349    DEFINE_FLAG(VIRTUAL),
350    DEFINE_FLAG(FUNCTION),
351
352    { NULL, 0 }
353};
354
355static int lookupValueByLabel(const char* literal, const InputEventLabel *list) {
356    while (list->literal) {
357        if (strcmp(literal, list->literal) == 0) {
358            return list->value;
359        }
360        list++;
361    }
362    return list->value;
363}
364
365static const char* lookupLabelByValue(int value, const InputEventLabel* list) {
366    while (list->literal) {
367        if (list->value == value) {
368            return list->literal;
369        }
370        list++;
371    }
372    return NULL;
373}
374
375static int32_t getKeyCodeByLabel(const char* label) {
376    return int32_t(lookupValueByLabel(label, KEYCODES));
377}
378
379static const char* getLabelByKeyCode(int32_t keyCode) {
380    if (keyCode >= 0 && keyCode < size(KEYCODES)) {
381        return KEYCODES[keyCode].literal;
382    }
383    return NULL;
384}
385
386static uint32_t getKeyFlagByLabel(const char* label) {
387    return uint32_t(lookupValueByLabel(label, FLAGS));
388}
389
390static int32_t getAxisByLabel(const char* label) {
391    return int32_t(lookupValueByLabel(label, AXES));
392}
393
394static const char* getAxisLabel(int32_t axisId) {
395    return lookupLabelByValue(axisId, AXES);
396}
397
398static int32_t getLedByLabel(const char* label) {
399    return int32_t(lookupValueByLabel(label, LEDS));
400}
401
402
403} // namespace android
404#endif // _LIBINPUT_INPUT_EVENT_LABELS_H
405