aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Bellows <greg.bellows@linaro.org>2014-11-13 14:20:32 -0600
committerAlex Bennée <alex.bennee@linaro.org>2015-01-07 11:36:05 +0000
commitc699f20aaae65f24e0d57234872037bee2ed809f (patch)
treecc841c357a57ca98896dc572e1ed30d2ade556fe
parent5c393ea8ec91afe8065e99ea36904f74019f589d (diff)
downloadqemu-android-c699f20aaae65f24e0d57234872037bee2ed809f.tar.gz
android-console: Add GF event type reporting
Adds Goldfish event table and functions for reporting the number. value, and names of supported events. Also added an internal function for looking up an event type descriptor by name. This functionality will be used by the Andorid emulator console for displaying names and numbers of available events. Signed-off-by: Greg Bellows <greg.bellows@linaro.org>
-rw-r--r--hw/input/goldfish_events.c102
-rw-r--r--include/hw/input/goldfish_events.h19
2 files changed, 106 insertions, 15 deletions
diff --git a/hw/input/goldfish_events.c b/hw/input/goldfish_events.c
index b620b6589d..fa52624e81 100644
--- a/hw/input/goldfish_events.c
+++ b/hw/input/goldfish_events.c
@@ -19,6 +19,8 @@
#include "ui/console.h"
#include "hw/input/linux_keycodes.h"
+#include "hw/input/goldfish_events.h"
+
/* Multitouch specific code is defined out via EVDEV_MULTITOUCH currently,
* because upstream has no multitouch related APIs.
*/
@@ -26,21 +28,6 @@
#define MAX_EVENTS (256 * 4)
-/* Event types (as per Linux input event layer) */
-#define EV_SYN 0x00
-#define EV_KEY 0x01
-#define EV_REL 0x02
-#define EV_ABS 0x03
-#define EV_MSC 0x04
-#define EV_SW 0x05
-#define EV_LED 0x11
-#define EV_SND 0x12
-#define EV_REP 0x14
-#define EV_FF 0x15
-#define EV_PWR 0x16
-#define EV_FF_STATUS 0x17
-#define EV_MAX 0x1f
-
/* Absolute axes */
#define ABS_X 0x00
#define ABS_Y 0x01
@@ -67,6 +54,44 @@
#define BTN_TOUCH 0x14a
#define BTN_MOUSE 0x110
+typedef struct {
+ const char *name;
+ int value;
+} GoldfishEventTypeInfo;
+
+/* Event types (as per Linux input event layer) */
+#define EV_SYN 0x00
+#define EV_KEY 0x01
+#define EV_REL 0x02
+#define EV_ABS 0x03
+#define EV_MSC 0x04
+#define EV_SW 0x05
+#define EV_LED 0x11
+#define EV_SND 0x12
+#define EV_REP 0x14
+#define EV_FF 0x15
+#define EV_PWR 0x16
+#define EV_FF_STATUS 0x17
+#define EV_MAX 0x1f
+
+#define EV_TYPE(_type) {#_type, (_type)}
+#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_END
+};
enum {
REG_READ = 0x00,
@@ -510,6 +535,53 @@ static void gf_evdev_handle_keyevent(DeviceState *dev, QemuConsole *src,
}
}
+static const GoldfishEventTypeInfo *gf_get_event_type(const char *typename)
+{
+ const GoldfishEventTypeInfo *type = NULL;
+ int count = 0;
+
+ /* Find the type descriptor by doing a name match */
+ while (ev_type_table[count].name != NULL) {
+ if (typename && !strcmp(ev_type_table[count].name, typename)) {
+ type = &ev_type_table[count];
+ break;
+ }
+ count++;
+ }
+
+ return type;
+}
+
+int gf_get_event_type_count(void)
+{
+ int count = 0;
+
+ while (ev_type_table[count].name != NULL) {
+ count++;
+ }
+
+ return count;
+}
+
+int gf_get_event_type_name(int type, char *buf)
+{
+ g_stpcpy(buf, ev_type_table[type].name);
+
+ return 0;
+}
+
+int gf_get_event_type_value(char *typename)
+{
+ const GoldfishEventTypeInfo *type = gf_get_event_type(typename);
+ int ret = -1;
+
+ if (type) {
+ ret = type->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
new file mode 100644
index 0000000000..ef766d9bc3
--- /dev/null
+++ b/include/hw/input/goldfish_events.h
@@ -0,0 +1,19 @@
+/* Copyright (C) 2007-2013 The Android Open Source Project
+**
+** This software is licensed under the terms of the GNU General Public
+** License version 2, as published by the Free Software Foundation, and
+** may be copied, distributed, and modified under those terms.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+*/
+#ifndef _HW_GOLDFISH_EVENT_H
+#define _HW_GOLDFISH_EVENT_H
+
+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);
+
+#endif