[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 14/48] multikeyboard support merge
From: |
Riku Voipio |
Subject: |
[Qemu-devel] [PATCH 14/48] multikeyboard support merge |
Date: |
Fri, 26 Mar 2010 16:06:34 +0000 |
From: Juha Riihimäki <address@hidden>
On some systems (such as n900), multiple physical devices can create
keyboard events (gpio, lis302dl, twl4030, ..). Add hooks to make it
possible to recieve keyboard input from multiple devices.
merge our version with upstream multikb support
Signed-Off-By: Riku Voipio <address@hidden>
Signed-Off-By: Juha Riihimäki <address@hidden>
---
console.h | 8 ++++----
input.c | 21 +++++++++++++++------
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/console.h b/console.h
index b1362ff..a894edf 100644
--- a/console.h
+++ b/console.h
@@ -39,12 +39,13 @@ typedef struct QEMUPutMouseEntry {
/* used internally by qemu for handling mice */
QTAILQ_ENTRY(QEMUPutMouseEntry) node;
} QEMUPutMouseEntry;
+
typedef struct QEMUPutKBDEntry {
- QEMUPutKBDEvent *qemu_put_kbd_event;
- void *qemu_put_kbd_event_opaque;
+ QEMUPutKBDEvent *put_kbd_event;
+ void *opaque;
/* used internally by qemu for handling keyboards */
- struct QEMUPutKBDEntry *next;
+ QTAILQ_ENTRY(QEMUPutKBDEntry) next;
} QEMUPutKBDEntry;
typedef struct QEMUPutLEDEntry {
@@ -54,7 +55,6 @@ typedef struct QEMUPutLEDEntry {
} QEMUPutLEDEntry;
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
-void qemu_remove_kbd_event_handler(QEMUPutKBDEvent *entry);
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
void *opaque, int absolute,
const char *name);
diff --git a/input.c b/input.c
index 8f0941e..2e860c6 100644
--- a/input.c
+++ b/input.c
@@ -28,8 +28,8 @@
#include "console.h"
#include "qjson.h"
-static QEMUPutKBDEvent *qemu_put_kbd_event;
-static void *qemu_put_kbd_event_opaque;
+static QTAILQ_HEAD(, QEMUPutKBDEntry) kbd_handlers =
+ QTAILQ_HEAD_INITIALIZER(kbd_handlers);
static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers =
QTAILQ_HEAD_INITIALIZER(led_handlers);
static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
QTAILQ_HEAD_INITIALIZER(mouse_handlers);
@@ -38,8 +38,16 @@ static NotifierList mouse_mode_notifiers =
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
{
- qemu_put_kbd_event_opaque = opaque;
- qemu_put_kbd_event = func;
+ QEMUPutKBDEntry *s;
+
+ if (func != NULL) {
+ s = qemu_mallocz(sizeof(QEMUPutKBDEntry));
+
+ s->put_kbd_event = func;
+ s->opaque = opaque;
+
+ QTAILQ_INSERT_TAIL(&kbd_handlers, s, next);
+ }
}
static void check_mode_change(void)
@@ -123,8 +131,9 @@ void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry)
void kbd_put_keycode(int keycode)
{
- if (qemu_put_kbd_event) {
- qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
+ QEMUPutKBDEntry *cursor;
+ QTAILQ_FOREACH(cursor, &kbd_handlers, next) {
+ cursor->put_kbd_event(cursor->opaque, keycode);
}
}
--
1.6.5
- [Qemu-devel] [PATCH 00/48] RFC: omap3 patch collection, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 14/48] multikeyboard support merge,
Riku Voipio <=
- [Qemu-devel] [PATCH 16/48] sdl: multitouch and window close suppport, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 13/48] multitouch and window close handler, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 28/48] prepare smc driver support for omap, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 15/48] fix function signature of qemu_chr_open_pty on !linux, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 08/48] Cortex-A8 R2 support and trustzone, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 06/48] Get rid of AREG1 and AREG2., Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 07/48] Shrink tb_jmp_offset to two entries, the other two are never used., Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 17/48] add multi-sd support, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 23/48] multi-mmc support in init call, Riku Voipio, 2010/03/26