summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Bellows <greg.bellows@linaro.org>2014-11-13 14:20:32 -0600
committerGreg Bellows <greg.bellows@linaro.org>2014-11-19 17:06:46 -0600
commita812b1bfdc83184f4cbb182d09258a5abd05fc30 (patch)
tree13ab2d5a7dba0d2914a65c96ceb057522c2b05d4
parentc627fc363bfb16c9e212ad4123c6e93f83a67588 (diff)
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 3fee6761a..809ab2b45 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 000000000..ef766d9bc
--- /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