[Title] Changed input system to be able to handle multiple input devices
authordon.hong <don.hong@samsung.com>
Fri, 19 Aug 2011 09:31:38 +0000 (18:31 +0900)
committerdon.hong <don.hong@samsung.com>
Fri, 19 Aug 2011 09:31:38 +0000 (18:31 +0900)
[Type] Enhancement
[Module]
[Priority]
[CQ#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

hw/ps2.c
input.c

index 762bb00..9ccf8cb 100644 (file)
--- a/hw/ps2.c
+++ b/hw/ps2.c
@@ -596,7 +596,7 @@ void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg)
     s->common.update_arg = update_arg;
     s->scancode_set = 2;
     vmstate_register(NULL, 0, &vmstate_ps2_keyboard, s);
-    qemu_add_kbd_event_handler(ps2_put_keycode, s);
+    qemu_add_ps2kbd_event_handler(ps2_put_keycode, s);
     qemu_register_reset(ps2_kbd_reset, s);
     return s;
 }
diff --git a/input.c b/input.c
index ec05548..7e5fa1a 100644 (file)
--- a/input.c
+++ b/input.c
@@ -30,6 +30,8 @@
 
 static QEMUPutKBDEvent *qemu_put_kbd_event;
 static void *qemu_put_kbd_event_opaque;
+static QEMUPutKBDEvent *qemu_put_ps2kbd_event;
+static void *qemu_put_ps2kbd_event_opaque;
 static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers = QTAILQ_HEAD_INITIALIZER(led_handlers);
 static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
     QTAILQ_HEAD_INITIALIZER(mouse_handlers);
@@ -48,6 +50,19 @@ void qemu_remove_kbd_event_handler(void)
     qemu_put_kbd_event = NULL;
 }
 
+void qemu_add_ps2kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
+{
+    qemu_add_kbd_event_handler(func,opaque); // temporary code for compatibility with Xserver
+    qemu_put_ps2kbd_event_opaque = opaque;
+    qemu_put_ps2kbd_event = func;
+}
+
+void qemu_remove_ps2kbd_event_handler(void)
+{
+    qemu_put_ps2kbd_event_opaque = NULL;
+    qemu_put_ps2kbd_event = NULL;
+}
+
 static void check_mode_change(void)
 {
     static int current_is_absolute, current_has_absolute;
@@ -134,6 +149,13 @@ void kbd_put_keycode(int keycode)
     }
 }
 
+void ps2kbd_put_keycode(int keycode)
+{
+    if (qemu_put_ps2kbd_event) {
+        qemu_put_ps2kbd_event(qemu_put_ps2kbd_event_opaque, keycode);
+    }
+}
+
 void kbd_put_ledstate(int ledstate)
 {
     QEMUPutLEDEntry *cursor;