aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Bellows <greg.bellows@linaro.org>2014-11-13 14:31:48 -0600
committerAlex Bennée <alex.bennee@linaro.org>2015-01-07 11:36:05 +0000
commita5e9fb4a2b20d0f518d27f55a9d0fefc78dc3149 (patch)
treecfd90f62736ee973654381cc4481a6cfb5ad8049
parentc699f20aaae65f24e0d57234872037bee2ed809f (diff)
downloadqemu-android-a5e9fb4a2b20d0f518d27f55a9d0fefc78dc3149.tar.gz
android-console: Add GF event type code reporting
Adds Goldfish event code tables and functions for reporting the number, value and names of supported codes for a given event type. Also added an internal function for looking up an event code descriptor from its name. This functionality will be used by the Andorid emulator console for displaying names and numbers of available events codes. Signed-off-by: Greg Bellows <greg.bellows@linaro.org>
-rw-r--r--hw/input/goldfish_events.c514
-rw-r--r--include/hw/input/goldfish_events.h4
2 files changed, 504 insertions, 14 deletions
diff --git a/hw/input/goldfish_events.c b/hw/input/goldfish_events.c
index fa52624e81..16325b651a 100644
--- a/hw/input/goldfish_events.c
+++ b/hw/input/goldfish_events.c
@@ -28,6 +28,11 @@
#define MAX_EVENTS (256 * 4)
+typedef struct {
+ const char *name;
+ int value;
+} GoldfishEventCodeInfo;
+
/* Absolute axes */
#define ABS_X 0x00
#define ABS_Y 0x01
@@ -54,9 +59,424 @@
#define BTN_TOUCH 0x14a
#define BTN_MOUSE 0x110
+#define EV_CODE(_code) {#_code, (_code)}
+#define EV_CODE_END {NULL, 0}
+static const GoldfishEventCodeInfo ev_abs_codes_table[] = {
+ EV_CODE(ABS_X),
+ EV_CODE(ABS_Y),
+ EV_CODE(ABS_Z),
+ EV_CODE(ABS_MT_SLOT),
+ EV_CODE(ABS_MT_TOUCH_MAJOR),
+ EV_CODE(ABS_MT_TOUCH_MINOR),
+ EV_CODE(ABS_MT_WIDTH_MAJOR),
+ EV_CODE(ABS_MT_WIDTH_MINOR),
+ EV_CODE(ABS_MT_ORIENTATION),
+ EV_CODE(ABS_MT_POSITION_X),
+ EV_CODE(ABS_MT_POSITION_Y),
+ EV_CODE(ABS_MT_TOOL_TYPE),
+ EV_CODE(ABS_MT_BLOB_ID),
+ EV_CODE(ABS_MT_TRACKING_ID),
+ EV_CODE(ABS_MT_PRESSURE),
+ EV_CODE(ABS_MT_DISTANCE),
+ EV_CODE(ABS_MAX),
+ EV_CODE_END,
+};
+
+/* Relative axes */
+#define REL_X 0x00
+#define REL_Y 0x01
+static const GoldfishEventCodeInfo ev_rel_codes_table[] = {
+ EV_CODE(REL_X),
+ EV_CODE(REL_Y),
+ EV_CODE_END,
+};
+
+#define BTN_MISC 0x100
+#define BTN_0 0x100
+#define BTN_1 0x101
+#define BTN_2 0x102
+#define BTN_3 0x103
+#define BTN_4 0x104
+#define BTN_5 0x105
+#define BTN_6 0x106
+#define BTN_7 0x107
+#define BTN_8 0x108
+#define BTN_9 0x109
+#define BTN_MOUSE 0x110
+#define BTN_LEFT 0x110
+#define BTN_RIGHT 0x111
+#define BTN_MIDDLE 0x112
+#define BTN_SIDE 0x113
+#define BTN_EXTRA 0x114
+#define BTN_FORWARD 0x115
+#define BTN_BACK 0x116
+#define BTN_TASK 0x117
+#define BTN_JOYSTICK 0x120
+#define BTN_TRIGGER 0x120
+#define BTN_THUMB 0x121
+#define BTN_THUMB2 0x122
+#define BTN_TOP 0x123
+#define BTN_TOP2 0x124
+#define BTN_PINKIE 0x125
+#define BTN_BASE 0x126
+#define BTN_BASE2 0x127
+#define BTN_BASE3 0x128
+#define BTN_BASE4 0x129
+#define BTN_BASE5 0x12a
+#define BTN_BASE6 0x12b
+#define BTN_DEAD 0x12f
+#define BTN_GAMEPAD 0x130
+#define BTN_A 0x130
+#define BTN_B 0x131
+#define BTN_C 0x132
+#define BTN_X 0x133
+#define BTN_Y 0x134
+#define BTN_Z 0x135
+#define BTN_TL 0x136
+#define BTN_TR 0x137
+#define BTN_TL2 0x138
+#define BTN_TR2 0x139
+#define BTN_SELECT 0x13a
+#define BTN_START 0x13b
+#define BTN_MODE 0x13c
+#define BTN_THUMBL 0x13d
+#define BTN_THUMBR 0x13e
+#define BTN_DIGI 0x140
+#define BTN_TOOL_PEN 0x140
+#define BTN_TOOL_RUBBER 0x141
+#define BTN_TOOL_BRUSH 0x142
+#define BTN_TOOL_PENCIL 0x143
+#define BTN_TOOL_AIRBRUSH 0x144
+#define BTN_TOOL_FINGER 0x145
+#define BTN_TOOL_MOUSE 0x146
+#define BTN_TOOL_LENS 0x147
+#define BTN_TOUCH 0x14a
+#define BTN_STYLUS 0x14b
+#define BTN_STYLUS2 0x14c
+#define BTN_TOOL_DOUBLETAP 0x14d
+#define BTN_TOOL_TRIPLETAP 0x14e
+#define BTN_WHEEL 0x150
+#define BTN_GEAR_DOWN 0x150
+#define BTN_GEAR_UP 0x150
+
+#define KEY_CODE(_name, _val) {#_name, _val}
+#define BTN_CODE(_code) {#_code, (_code)}
+static const GoldfishEventCodeInfo ev_key_codes_table[] = {
+ KEY_CODE(KEY_ESC, LINUX_KEY_ESC),
+ KEY_CODE(KEY_1, LINUX_KEY_1),
+ KEY_CODE(KEY_2, LINUX_KEY_2),
+ KEY_CODE(KEY_3, LINUX_KEY_3),
+ KEY_CODE(KEY_4, LINUX_KEY_4),
+ KEY_CODE(KEY_5, LINUX_KEY_5),
+ KEY_CODE(KEY_6, LINUX_KEY_6),
+ KEY_CODE(KEY_7, LINUX_KEY_7),
+ KEY_CODE(KEY_8, LINUX_KEY_8),
+ KEY_CODE(KEY_9, LINUX_KEY_9),
+ KEY_CODE(KEY_0, LINUX_KEY_0),
+ KEY_CODE(KEY_MINUS, LINUX_KEY_MINUS),
+ KEY_CODE(KEY_EQUAL, LINUX_KEY_EQUAL),
+ KEY_CODE(KEY_BACKSPACE, LINUX_KEY_BACKSPACE),
+ KEY_CODE(KEY_TAB, LINUX_KEY_TAB),
+ KEY_CODE(KEY_Q, LINUX_KEY_Q),
+ KEY_CODE(KEY_W, LINUX_KEY_W),
+ KEY_CODE(KEY_E, LINUX_KEY_E),
+ KEY_CODE(KEY_R, LINUX_KEY_R),
+ KEY_CODE(KEY_T, LINUX_KEY_T),
+ KEY_CODE(KEY_Y, LINUX_KEY_Y),
+ KEY_CODE(KEY_U, LINUX_KEY_U),
+ KEY_CODE(KEY_I, LINUX_KEY_I),
+ KEY_CODE(KEY_O, LINUX_KEY_O),
+ KEY_CODE(KEY_P, LINUX_KEY_P),
+ KEY_CODE(KEY_LEFTBRACE, LINUX_KEY_LEFTBRACE),
+ KEY_CODE(KEY_RIGHTBRACE, LINUX_KEY_RIGHTBRACE),
+ KEY_CODE(KEY_ENTER, LINUX_KEY_ENTER),
+ KEY_CODE(KEY_LEFTCTRL, LINUX_KEY_LEFTCTRL),
+ KEY_CODE(KEY_A, LINUX_KEY_A),
+ KEY_CODE(KEY_S, LINUX_KEY_S),
+ KEY_CODE(KEY_D, LINUX_KEY_D),
+ KEY_CODE(KEY_F, LINUX_KEY_F),
+ KEY_CODE(KEY_G, LINUX_KEY_G),
+ KEY_CODE(KEY_H, LINUX_KEY_H),
+ KEY_CODE(KEY_J, LINUX_KEY_J),
+ KEY_CODE(KEY_K, LINUX_KEY_K),
+ KEY_CODE(KEY_L, LINUX_KEY_L),
+ KEY_CODE(KEY_SEMICOLON, LINUX_KEY_SEMICOLON),
+ KEY_CODE(KEY_APOSTROPHE, LINUX_KEY_APOSTROPHE),
+ KEY_CODE(KEY_GRAVE, LINUX_KEY_GRAVE),
+ KEY_CODE(KEY_LEFTSHIFT, LINUX_KEY_LEFTSHIFT),
+ KEY_CODE(KEY_BACKSLASH, LINUX_KEY_BACKSLASH),
+ KEY_CODE(KEY_Z, LINUX_KEY_Z),
+ KEY_CODE(KEY_X, LINUX_KEY_X),
+ KEY_CODE(KEY_C, LINUX_KEY_C),
+ KEY_CODE(KEY_V, LINUX_KEY_V),
+ KEY_CODE(KEY_B, LINUX_KEY_B),
+ KEY_CODE(KEY_N, LINUX_KEY_N),
+ KEY_CODE(KEY_M, LINUX_KEY_M),
+ KEY_CODE(KEY_COMMA, LINUX_KEY_COMMA),
+ KEY_CODE(KEY_DOT, LINUX_KEY_DOT),
+ KEY_CODE(KEY_SLASH, LINUX_KEY_SLASH),
+ KEY_CODE(KEY_RIGHTSHIFT, LINUX_KEY_RIGHTSHIFT),
+ KEY_CODE(KEY_KPASTERISK, LINUX_KEY_KPASTERISK),
+ KEY_CODE(KEY_LEFTALT, LINUX_KEY_LEFTALT),
+ KEY_CODE(KEY_SPACE, LINUX_KEY_SPACE),
+ KEY_CODE(KEY_CAPSLOCK, LINUX_KEY_CAPSLOCK),
+ KEY_CODE(KEY_F1, LINUX_KEY_F1),
+ KEY_CODE(KEY_F2, LINUX_KEY_F2),
+ KEY_CODE(KEY_F3, LINUX_KEY_F3),
+ KEY_CODE(KEY_F4, LINUX_KEY_F4),
+ KEY_CODE(KEY_F5, LINUX_KEY_F5),
+ KEY_CODE(KEY_F6, LINUX_KEY_F6),
+ KEY_CODE(KEY_F7, LINUX_KEY_F7),
+ KEY_CODE(KEY_F8, LINUX_KEY_F8),
+ KEY_CODE(KEY_F9, LINUX_KEY_F9),
+ KEY_CODE(KEY_F10, LINUX_KEY_F10),
+ KEY_CODE(KEY_NUMLOCK, LINUX_KEY_NUMLOCK),
+ KEY_CODE(KEY_SCROLLLOCK, LINUX_KEY_SCROLLLOCK),
+ KEY_CODE(KEY_KP7, LINUX_KEY_KP7),
+ KEY_CODE(KEY_KP8, LINUX_KEY_KP8),
+ KEY_CODE(KEY_KP9, LINUX_KEY_KP9),
+ KEY_CODE(KEY_KPMINUS, LINUX_KEY_KPMINUS),
+ KEY_CODE(KEY_KP4, LINUX_KEY_KP4),
+ KEY_CODE(KEY_KP5, LINUX_KEY_KP5),
+ KEY_CODE(KEY_KP6, LINUX_KEY_KP6),
+ KEY_CODE(KEY_KPPLUS, LINUX_KEY_KPPLUS),
+ KEY_CODE(KEY_KP1, LINUX_KEY_KP1),
+ KEY_CODE(KEY_KP2, LINUX_KEY_KP2),
+ KEY_CODE(KEY_KP3, LINUX_KEY_KP3),
+ KEY_CODE(KEY_KP0, LINUX_KEY_KP0),
+ KEY_CODE(KEY_KPDOT, LINUX_KEY_KPDOT),
+ KEY_CODE(KEY_ZENKAKUHANKAKU, LINUX_KEY_ZENKAKUHANKAKU),
+ KEY_CODE(KEY_102ND, LINUX_KEY_102ND),
+ KEY_CODE(KEY_F11, LINUX_KEY_F11),
+ KEY_CODE(KEY_F12, LINUX_KEY_F12),
+ KEY_CODE(KEY_RO, LINUX_KEY_RO),
+ KEY_CODE(KEY_KATAKANA, LINUX_KEY_KATAKANA),
+ KEY_CODE(KEY_HIRAGANA, LINUX_KEY_HIRAGANA),
+ KEY_CODE(KEY_HENKAN, LINUX_KEY_HENKAN),
+ KEY_CODE(KEY_KATAKANAHIRAGANA, LINUX_KEY_KATAKANAHIRAGANA),
+ KEY_CODE(KEY_MUHENKAN, LINUX_KEY_MUHENKAN),
+ KEY_CODE(KEY_KPJPCOMMA, LINUX_KEY_KPJPCOMMA),
+ KEY_CODE(KEY_KPENTER, LINUX_KEY_KPENTER),
+ KEY_CODE(KEY_RIGHTCTRL, LINUX_KEY_RIGHTCTRL),
+ KEY_CODE(KEY_KPSLASH, LINUX_KEY_KPSLASH),
+ KEY_CODE(KEY_SYSRQ, LINUX_KEY_SYSRQ),
+ KEY_CODE(KEY_RIGHTALT, LINUX_KEY_RIGHTALT),
+ KEY_CODE(KEY_LINEFEED, LINUX_KEY_LINEFEED),
+ KEY_CODE(KEY_HOME, LINUX_KEY_HOME),
+ KEY_CODE(KEY_UP, LINUX_KEY_UP),
+ KEY_CODE(KEY_PAGEUP, LINUX_KEY_PAGEUP),
+ KEY_CODE(KEY_LEFT, LINUX_KEY_LEFT),
+ KEY_CODE(KEY_RIGHT, LINUX_KEY_RIGHT),
+ KEY_CODE(KEY_END, LINUX_KEY_END),
+ KEY_CODE(KEY_DOWN, LINUX_KEY_DOWN),
+ KEY_CODE(KEY_PAGEDOWN, LINUX_KEY_PAGEDOWN),
+ KEY_CODE(KEY_INSERT, LINUX_KEY_INSERT),
+ KEY_CODE(KEY_DELETE, LINUX_KEY_DELETE),
+ KEY_CODE(KEY_MACRO, LINUX_KEY_MACRO),
+ KEY_CODE(KEY_MUTE, LINUX_KEY_MUTE),
+ KEY_CODE(KEY_VOLUMEDOWN, LINUX_KEY_VOLUMEDOWN),
+ KEY_CODE(KEY_VOLUMEUP, LINUX_KEY_VOLUMEUP),
+ KEY_CODE(KEY_POWER, LINUX_KEY_POWER),
+ KEY_CODE(KEY_KPEQUAL, LINUX_KEY_KPEQUAL),
+ KEY_CODE(KEY_KPPLUSMINUS, LINUX_KEY_KPPLUSMINUS),
+ KEY_CODE(KEY_PAUSE, LINUX_KEY_PAUSE),
+ KEY_CODE(KEY_KPCOMMA, LINUX_KEY_KPCOMMA),
+ KEY_CODE(KEY_HANGEUL, LINUX_KEY_HANGEUL),
+ KEY_CODE(KEY_HANJA, LINUX_KEY_HANJA),
+ KEY_CODE(KEY_YEN, LINUX_KEY_YEN),
+ KEY_CODE(KEY_LEFTMETA, LINUX_KEY_LEFTMETA),
+ KEY_CODE(KEY_RIGHTMETA, LINUX_KEY_RIGHTMETA),
+ KEY_CODE(KEY_COMPOSE, LINUX_KEY_COMPOSE),
+ KEY_CODE(KEY_AGAIN, LINUX_KEY_AGAIN),
+ KEY_CODE(KEY_PROPS, LINUX_KEY_PROPS),
+ KEY_CODE(KEY_UNDO, LINUX_KEY_UNDO),
+ KEY_CODE(KEY_FRONT, LINUX_KEY_FRONT),
+ KEY_CODE(KEY_COPY, LINUX_KEY_COPY),
+ KEY_CODE(KEY_OPEN, LINUX_KEY_OPEN),
+ KEY_CODE(KEY_PASTE, LINUX_KEY_PASTE),
+ KEY_CODE(KEY_FIND, LINUX_KEY_FIND),
+ KEY_CODE(KEY_CUT, LINUX_KEY_CUT),
+ KEY_CODE(KEY_HELP, LINUX_KEY_HELP),
+ KEY_CODE(KEY_MENU, LINUX_KEY_MENU),
+ KEY_CODE(KEY_CALC, LINUX_KEY_CALC),
+ KEY_CODE(KEY_SETUP, LINUX_KEY_SETUP),
+ KEY_CODE(KEY_SLEEP, LINUX_KEY_SLEEP),
+ KEY_CODE(KEY_WAKEUP, LINUX_KEY_WAKEUP),
+ KEY_CODE(KEY_FILE, LINUX_KEY_FILE),
+ KEY_CODE(KEY_SENDFILE, LINUX_KEY_SENDFILE),
+ KEY_CODE(KEY_DELETEFILE, LINUX_KEY_DELETEFILE),
+ KEY_CODE(KEY_XFER, LINUX_KEY_XFER),
+ KEY_CODE(KEY_PROG1, LINUX_KEY_PROG1),
+ KEY_CODE(KEY_PROG2, LINUX_KEY_PROG2),
+ KEY_CODE(KEY_WWW, LINUX_KEY_WWW),
+ KEY_CODE(KEY_MSDOS, LINUX_KEY_MSDOS),
+ KEY_CODE(KEY_COFFEE, LINUX_KEY_COFFEE),
+ KEY_CODE(KEY_DIRECTION, LINUX_KEY_DIRECTION),
+ KEY_CODE(KEY_CYCLEWINDOWS, LINUX_KEY_CYCLEWINDOWS),
+ KEY_CODE(KEY_MAIL, LINUX_KEY_MAIL),
+ KEY_CODE(KEY_BOOKMARKS, LINUX_KEY_BOOKMARKS),
+ KEY_CODE(KEY_COMPUTER, LINUX_KEY_COMPUTER),
+ KEY_CODE(KEY_BACK, LINUX_KEY_BACK),
+ KEY_CODE(KEY_FORWARD, LINUX_KEY_FORWARD),
+ KEY_CODE(KEY_CLOSECD, LINUX_KEY_CLOSECD),
+ KEY_CODE(KEY_EJECTCD, LINUX_KEY_EJECTCD),
+ KEY_CODE(KEY_EJECTCLOSECD, LINUX_KEY_EJECTCLOSECD),
+ KEY_CODE(KEY_NEXTSONG, LINUX_KEY_NEXTSONG),
+ KEY_CODE(KEY_PLAYPAUSE, LINUX_KEY_PLAYPAUSE),
+ KEY_CODE(KEY_PREVIOUSSONG, LINUX_KEY_PREVIOUSSONG),
+ KEY_CODE(KEY_STOPCD, LINUX_KEY_STOPCD),
+ KEY_CODE(KEY_RECORD, LINUX_KEY_RECORD),
+ KEY_CODE(KEY_REWIND, LINUX_KEY_REWIND),
+ KEY_CODE(KEY_PHONE, LINUX_KEY_PHONE),
+ KEY_CODE(KEY_ISO, LINUX_KEY_ISO),
+ KEY_CODE(KEY_CONFIG, LINUX_KEY_CONFIG),
+ KEY_CODE(KEY_HOMEPAGE, LINUX_KEY_HOMEPAGE),
+ KEY_CODE(KEY_REFRESH, LINUX_KEY_REFRESH),
+ KEY_CODE(KEY_EXIT, LINUX_KEY_EXIT),
+ KEY_CODE(KEY_MOVE, LINUX_KEY_MOVE),
+ KEY_CODE(KEY_EDIT, LINUX_KEY_EDIT),
+ KEY_CODE(KEY_SCROLLUP, LINUX_KEY_SCROLLUP),
+ KEY_CODE(KEY_SCROLLDOWN, LINUX_KEY_SCROLLDOWN),
+ KEY_CODE(KEY_KPLEFTPAREN, LINUX_KEY_KPLEFTPAREN),
+ KEY_CODE(KEY_KPRIGHTPAREN, LINUX_KEY_KPRIGHTPAREN),
+ KEY_CODE(KEY_NEW, LINUX_KEY_NEW),
+ KEY_CODE(KEY_REDO, LINUX_KEY_REDO),
+ KEY_CODE(KEY_F13, LINUX_KEY_F13),
+ KEY_CODE(KEY_F14, LINUX_KEY_F14),
+ KEY_CODE(KEY_F15, LINUX_KEY_F15),
+ KEY_CODE(KEY_F16, LINUX_KEY_F16),
+ KEY_CODE(KEY_F17, LINUX_KEY_F17),
+ KEY_CODE(KEY_F18, LINUX_KEY_F18),
+ KEY_CODE(KEY_F19, LINUX_KEY_F19),
+ KEY_CODE(KEY_F20, LINUX_KEY_F20),
+ KEY_CODE(KEY_F21, LINUX_KEY_F21),
+ KEY_CODE(KEY_F22, LINUX_KEY_F22),
+ KEY_CODE(KEY_F23, LINUX_KEY_F23),
+ KEY_CODE(KEY_F24, LINUX_KEY_F24),
+ KEY_CODE(KEY_PLAYCD, LINUX_KEY_PLAYCD),
+ KEY_CODE(KEY_PAUSECD, LINUX_KEY_PAUSECD),
+ KEY_CODE(KEY_PROG3, LINUX_KEY_PROG3),
+ KEY_CODE(KEY_PROG4, LINUX_KEY_PROG4),
+ KEY_CODE(KEY_SUSPEND, LINUX_KEY_SUSPEND),
+ KEY_CODE(KEY_CLOSE, LINUX_KEY_CLOSE),
+ KEY_CODE(KEY_PLAY, LINUX_KEY_PLAY),
+ KEY_CODE(KEY_FASTFORWARD, LINUX_KEY_FASTFORWARD),
+ KEY_CODE(KEY_BASSBOOST, LINUX_KEY_BASSBOOST),
+ KEY_CODE(KEY_PRINT, LINUX_KEY_PRINT),
+ KEY_CODE(KEY_HP, LINUX_KEY_HP),
+ KEY_CODE(KEY_CAMERA, LINUX_KEY_CAMERA),
+ KEY_CODE(KEY_SOUND, LINUX_KEY_SOUND),
+ KEY_CODE(KEY_QUESTION, LINUX_KEY_QUESTION),
+ KEY_CODE(KEY_EMAIL, LINUX_KEY_EMAIL),
+ KEY_CODE(KEY_CHAT, LINUX_KEY_CHAT),
+ KEY_CODE(KEY_SEARCH, LINUX_KEY_SEARCH),
+ KEY_CODE(KEY_CONNECT, LINUX_KEY_CONNECT),
+ KEY_CODE(KEY_FINANCE, LINUX_KEY_FINANCE),
+ KEY_CODE(KEY_SPORT, LINUX_KEY_SPORT),
+ KEY_CODE(KEY_SHOP, LINUX_KEY_SHOP),
+ KEY_CODE(KEY_ALTERASE, LINUX_KEY_ALTERASE),
+ KEY_CODE(KEY_CANCEL, LINUX_KEY_CANCEL),
+ KEY_CODE(KEY_BRIGHTNESSDOWN, LINUX_KEY_BRIGHTNESSDOWN),
+ KEY_CODE(KEY_BRIGHTNESSUP, LINUX_KEY_BRIGHTNESSUP),
+ KEY_CODE(KEY_MEDIA, LINUX_KEY_MEDIA),
+ KEY_CODE(KEY_STAR, LINUX_KEY_STAR),
+ KEY_CODE(KEY_SHARP, LINUX_KEY_SHARP),
+ KEY_CODE(KEY_SOFT1, LINUX_KEY_SOFT1),
+ KEY_CODE(KEY_SOFT2, LINUX_KEY_SOFT2),
+ KEY_CODE(KEY_CENTER, LINUX_KEY_CENTER),
+ KEY_CODE(KEY_HEADSETHOOK, LINUX_KEY_HEADSETHOOK),
+ KEY_CODE(KEY_0_5, LINUX_KEY_0_5),
+ KEY_CODE(KEY_2_5, LINUX_KEY_2_5),
+ KEY_CODE(KEY_SWITCHVIDEOMODE, LINUX_KEY_SWITCHVIDEOMODE),
+ KEY_CODE(KEY_KBDILLUMTOGGLE, LINUX_KEY_KBDILLUMTOGGLE),
+ KEY_CODE(KEY_KBDILLUMDOWN, LINUX_KEY_KBDILLUMDOWN),
+ KEY_CODE(KEY_KBDILLUMUP, LINUX_KEY_KBDILLUMUP),
+ KEY_CODE(KEY_SEND, LINUX_KEY_SEND),
+ KEY_CODE(KEY_REPLY, LINUX_KEY_REPLY),
+ KEY_CODE(KEY_FORWARDMAIL, LINUX_KEY_FORWARDMAIL),
+ KEY_CODE(KEY_SAVE, LINUX_KEY_SAVE),
+ KEY_CODE(KEY_DOCUMENTS, LINUX_KEY_DOCUMENTS),
+ KEY_CODE(KEY_BATTERY, LINUX_KEY_BATTERY),
+ KEY_CODE(KEY_UNKNOWN, LINUX_KEY_UNKNOWN),
+ KEY_CODE(KEY_NUM, LINUX_KEY_NUM),
+ KEY_CODE(KEY_FOCUS, LINUX_KEY_FOCUS),
+ KEY_CODE(KEY_PLUS, LINUX_KEY_PLUS),
+ KEY_CODE(KEY_NOTIFICATION, LINUX_KEY_NOTIFICATION),
+
+ BTN_CODE(BTN_MISC),
+ BTN_CODE(BTN_0),
+ BTN_CODE(BTN_1),
+ BTN_CODE(BTN_2),
+ BTN_CODE(BTN_3),
+ BTN_CODE(BTN_4),
+ BTN_CODE(BTN_5),
+ BTN_CODE(BTN_6),
+ BTN_CODE(BTN_7),
+ BTN_CODE(BTN_8),
+ BTN_CODE(BTN_9),
+ BTN_CODE(BTN_MOUSE),
+ BTN_CODE(BTN_LEFT),
+ BTN_CODE(BTN_RIGHT),
+ BTN_CODE(BTN_MIDDLE),
+ BTN_CODE(BTN_SIDE),
+ BTN_CODE(BTN_EXTRA),
+ BTN_CODE(BTN_FORWARD),
+ BTN_CODE(BTN_BACK),
+ BTN_CODE(BTN_TASK),
+ BTN_CODE(BTN_JOYSTICK),
+ BTN_CODE(BTN_TRIGGER),
+ BTN_CODE(BTN_THUMB),
+ BTN_CODE(BTN_THUMB2),
+ BTN_CODE(BTN_TOP),
+ BTN_CODE(BTN_TOP2),
+ BTN_CODE(BTN_PINKIE),
+ BTN_CODE(BTN_BASE),
+ BTN_CODE(BTN_BASE2),
+ BTN_CODE(BTN_BASE3),
+ BTN_CODE(BTN_BASE4),
+ BTN_CODE(BTN_BASE5),
+ BTN_CODE(BTN_BASE6),
+ BTN_CODE(BTN_DEAD),
+ BTN_CODE(BTN_GAMEPAD),
+ BTN_CODE(BTN_A),
+ BTN_CODE(BTN_B),
+ BTN_CODE(BTN_C),
+ BTN_CODE(BTN_X),
+ BTN_CODE(BTN_Y),
+ BTN_CODE(BTN_Z),
+ BTN_CODE(BTN_TL),
+ BTN_CODE(BTN_TR),
+ BTN_CODE(BTN_TL2),
+ BTN_CODE(BTN_TR2),
+ BTN_CODE(BTN_SELECT),
+ BTN_CODE(BTN_START),
+ BTN_CODE(BTN_MODE),
+ BTN_CODE(BTN_THUMBL),
+ BTN_CODE(BTN_THUMBR),
+ BTN_CODE(BTN_DIGI),
+ BTN_CODE(BTN_TOOL_PEN),
+ BTN_CODE(BTN_TOOL_RUBBER),
+ BTN_CODE(BTN_TOOL_BRUSH),
+ BTN_CODE(BTN_TOOL_PENCIL),
+ BTN_CODE(BTN_TOOL_AIRBRUSH),
+ BTN_CODE(BTN_TOOL_FINGER),
+ BTN_CODE(BTN_TOOL_MOUSE),
+ BTN_CODE(BTN_TOOL_LENS),
+ BTN_CODE(BTN_TOUCH),
+ BTN_CODE(BTN_STYLUS),
+ BTN_CODE(BTN_STYLUS2),
+ BTN_CODE(BTN_TOOL_DOUBLETAP),
+ BTN_CODE(BTN_TOOL_TRIPLETAP),
+ BTN_CODE(BTN_WHEEL),
+ BTN_CODE(BTN_GEAR_DOWN),
+ BTN_CODE(BTN_GEAR_UP),
+ EV_CODE_END,
+};
+
typedef struct {
const char *name;
int value;
+ const GoldfishEventCodeInfo *codes;
} GoldfishEventTypeInfo;
/* Event types (as per Linux input event layer) */
@@ -74,22 +494,22 @@ typedef struct {
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
-#define EV_TYPE(_type) {#_type, (_type)}
+#define EV_TYPE(_type, _codes) {#_type, (_type), _codes}
#define EV_TYPE_END {NULL, 0}
static const GoldfishEventTypeInfo ev_type_table[] = {
- EV_TYPE(EV_SYN),
- EV_TYPE(EV_KEY),
- EV_TYPE(EV_REL),
- EV_TYPE(EV_ABS),
- EV_TYPE(EV_MSC),
- EV_TYPE(EV_SW),
- EV_TYPE(EV_LED),
- EV_TYPE(EV_SND),
- EV_TYPE(EV_REP),
- EV_TYPE(EV_FF),
- EV_TYPE(EV_PWR),
- EV_TYPE(EV_FF_STATUS),
- EV_TYPE(EV_MAX),
+ EV_TYPE(EV_SYN, NULL),
+ EV_TYPE(EV_KEY, ev_key_codes_table),
+ EV_TYPE(EV_REL, ev_rel_codes_table),
+ EV_TYPE(EV_ABS, ev_abs_codes_table),
+ EV_TYPE(EV_MSC, NULL),
+ EV_TYPE(EV_SW, NULL),
+ EV_TYPE(EV_LED, NULL),
+ EV_TYPE(EV_SND, NULL),
+ EV_TYPE(EV_REP, NULL),
+ EV_TYPE(EV_FF, NULL),
+ EV_TYPE(EV_PWR, NULL),
+ EV_TYPE(EV_FF_STATUS, NULL),
+ EV_TYPE(EV_MAX, NULL),
EV_TYPE_END
};
@@ -582,6 +1002,72 @@ int gf_get_event_type_value(char *typename)
return ret;
}
+static const GoldfishEventCodeInfo *gf_get_event_code(int typeval,
+ const char *codename)
+{
+ const GoldfishEventTypeInfo *type = &ev_type_table[typeval];
+ const GoldfishEventCodeInfo *code = NULL;
+ int count = 0;
+
+ /* Find the type descriptor by doing a name match */
+ while (type->codes[count].name != NULL) {
+ if (codename && !strcmp(type->codes[count].name, codename)) {
+ code = &type->codes[count];
+ break;
+ }
+ count++;
+ }
+
+ return code;
+}
+
+int gf_get_event_code_count(const char *typename)
+{
+ const GoldfishEventTypeInfo *type = NULL;
+ const GoldfishEventCodeInfo *codes;
+ int count = -1; /* Return -1 if type not found */
+
+ type = gf_get_event_type(typename);
+
+ /* Count the number of codes for the specified type if found */
+ if (type) {
+ count = 0;
+ codes = type->codes;
+ if (codes) {
+ while (codes[count].name != NULL) {
+ count++;
+ }
+ }
+ }
+
+ return count;
+}
+
+int gf_get_event_code_name(const char *typename, unsigned int code, char *buf)
+{
+ const GoldfishEventTypeInfo *type = gf_get_event_type(typename);
+ int ret = -1; /* Return -1 if type not found */
+
+ if (type && type->codes && code < gf_get_event_code_count(typename)) {
+ g_stpcpy(buf, type->codes[code].name);
+ ret = 0;
+ }
+
+ return ret;
+}
+
+int gf_get_event_code_value(int typeval, char *codename)
+{
+ const GoldfishEventCodeInfo *code = gf_get_event_code(typeval, codename);
+ int ret = -1;
+
+ if (code) {
+ ret = code->value;
+ }
+
+ return ret;
+}
+
static QemuInputHandler gf_evdev_key_input_handler = {
.name = "goldfish event device key handler",
.mask = INPUT_EVENT_MASK_KEY,
diff --git a/include/hw/input/goldfish_events.h b/include/hw/input/goldfish_events.h
index ef766d9bc3..be426d5991 100644
--- a/include/hw/input/goldfish_events.h
+++ b/include/hw/input/goldfish_events.h
@@ -15,5 +15,9 @@
extern int gf_get_event_type_count(void);
extern int gf_get_event_type_name(int type, char *buf);
extern int gf_get_event_type_value(char *codename);
+extern int gf_get_event_code_count(const char *typename);
+extern int gf_get_event_code_name(const char *typename, unsigned int code,
+ char *buf);
+extern int gf_get_event_code_value(int typeval, char *codename);
#endif