keyboard: Maru keyboard device handles key events directly 83/19883/1
authorGiWoong Kim <giwoong.kim@samsung.com>
Tue, 22 Apr 2014 10:33:22 +0000 (19:33 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Tue, 22 Apr 2014 10:33:22 +0000 (19:33 +0900)
Change-Id: I18050322c30003656ecb73f0819547821fd196ba
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/hw/maru_virtio_keyboard.c
tizen/src/hw/maru_virtio_keyboard.h
tizen/src/skin/maruskin_keymap.c
tizen/src/skin/maruskin_keymap.h
tizen/src/skin/maruskin_operation.c

index 1d3d417951bd1c4de41c1f8e1322ff989d325b67..9722b631ba5a3831a4996add5fb9d89e48844057 100644 (file)
@@ -35,6 +35,7 @@
 
 MULTI_DEBUG_CHANNEL(qemu, virtio-kbd);
 
+VirtIOKeyboard *vkbd;
 VirtQueueElement elem;
 
 static void virtio_keyboard_handle(VirtIODevice *vdev, VirtQueue *vq)
@@ -82,9 +83,9 @@ void virtio_keyboard_notify(void *opaque)
     while ((written_cnt--)) {
         kbdevt = &vkbd->kbdqueue.kbdevent[vkbd->kbdqueue.rptr];
 
-       if (((EmulKbdEvent*)(elem.in_sg[vkbd->kbdqueue.rptr].iov_base))->code != 0) {
-           TRACE("FIXME: virtio queue is full.\n");
-       }
+        if (((EmulKbdEvent*)(elem.in_sg[vkbd->kbdqueue.rptr].iov_base))->code != 0) {
+            TRACE("FIXME: virtio queue is full.\n");
+        }
 
         /* Copy keyboard data into guest side. */
         TRACE("copy: keycode %d, type %d, elem_index %d\n",
@@ -94,7 +95,8 @@ void virtio_keyboard_notify(void *opaque)
 
         if (vkbd->kbdqueue.wptr > 0) {
             vkbd->kbdqueue.wptr--;
-            TRACE("written_cnt: %d, wptr: %d, qemu_index: %d\n", written_cnt, vkbd->kbdqueue.wptr, vkbd->kbdqueue.rptr);
+            TRACE("written_cnt: %d, wptr: %d, qemu_index: %d\n",
+                written_cnt, vkbd->kbdqueue.wptr, vkbd->kbdqueue.rptr);
         }
 
         vkbd->kbdqueue.rptr++;
@@ -110,11 +112,10 @@ void virtio_keyboard_notify(void *opaque)
     TRACE("[Leave] virtqueue notifier.\n");
 }
 
-static void virtio_keyboard_event(void *opaque, int keycode)
+void virtio_keyboard_event(int keycode)
 {
     EmulKbdEvent kbdevt = {0};
     int *index = NULL;
-    VirtIOKeyboard *vkbd = (VirtIOKeyboard *)opaque;
 
     if (!vkbd) {
         ERR("VirtIOKeyboard is NULL.\n");
@@ -226,7 +227,6 @@ static void virtio_keyboard_bh(void *opaque)
 
 static int virtio_keyboard_device_init(VirtIODevice *vdev)
 {
-    VirtIOKeyboard *vkbd;
     DeviceState *qdev = DEVICE(vdev);
     vkbd = VIRTIO_KEYBOARD(vdev);
 
@@ -249,9 +249,6 @@ static int virtio_keyboard_device_init(VirtIODevice *vdev)
     /* bottom half */
     vkbd->bh = qemu_bh_new(virtio_keyboard_bh, vkbd);
 
-    /* register keyboard handler */
-    vkbd->eh_entry = qemu_add_kbd_event_handler(virtio_keyboard_event, vkbd);
     return 0;
 }
 
@@ -262,8 +259,6 @@ static int virtio_keyboard_device_exit(DeviceState *qdev)
 
     INFO("destroy device\n");
 
-    qemu_remove_kbd_event_handler(vkbd->eh_entry);
-
     if (vkbd->bh) {
         qemu_bh_delete(vkbd->bh);
     }
@@ -277,7 +272,6 @@ static int virtio_keyboard_device_exit(DeviceState *qdev)
 
 static void virtio_keyboard_device_reset(VirtIODevice *vdev)
 {
-    VirtIOKeyboard *vkbd;
     vkbd = VIRTIO_KEYBOARD(vdev);
 
     INFO("reset keyboard device\n");
index 9a976b4f141ba6b0eed0ac575f91ee49355cb456..f3296bc89a952ddc3a4dfbd2f4427a73ab575ba2 100644 (file)
@@ -36,7 +36,6 @@ extern "C" {
 #endif
 
 #include "qemu/thread.h"
-#include "ui/console.h"
 #include "hw/virtio/virtio.h"
 
 #define TYPE_VIRTIO_KEYBOARD "virtio-keyboard-device"
@@ -64,13 +63,12 @@ typedef struct VirtIOKeyboard {
     VirtIOKbdQueue  kbdqueue;
     QemuMutex       event_mutex;
     QEMUBH          *bh;
-    QEMUPutKbdEntry *eh_entry;
 } VirtIOKeyboard;
 
 VirtIODevice *virtio_keyboard_init(DeviceState *dev);
-
 void virtio_keyboard_exit(VirtIODevice *vdev);
 
+void virtio_keyboard_event(int keycode);
 void virtio_keyboard_notify(void *opaque);
 
 #ifdef __cplusplus
index 82f884ab2811415748c83768871b5417764ae531..0dbdc65743afe6703a0e9ff83c48ebddf848d45b 100644 (file)
@@ -29,7 +29,6 @@
 
 #include "maruskin_keymap.h"
 #include "emul_state.h"
-#include "ui/console.h"
 #include "debug_ch.h"
 
 MULTI_DEBUG_CHANNEL(qemu, skin_keymap);
@@ -85,15 +84,15 @@ int javakeycode_to_scancode(
         num_lock = get_host_lock_key_state(HOST_NUMLOCK_KEY);
 
         if (caps_lock != -1 && get_emul_caps_lock_state() != caps_lock) {
-            kbd_put_keycode(58);
-            kbd_put_keycode(58 | 0x80);
+            virtio_keyboard_event(58);
+            virtio_keyboard_event(58 | 0x80);
             set_emul_caps_lock_state(get_emul_caps_lock_state() ^ 1);
             INFO("qemu CapsLock state was synchronized with host key value (%d)\n",
                 get_emul_caps_lock_state());
         }
         if (num_lock != -1 && get_emul_num_lock_state() != num_lock) {
-            kbd_put_keycode(69);
-            kbd_put_keycode(69 | 0x80);
+            virtio_keyboard_event(69);
+            virtio_keyboard_event(69 | 0x80);
             set_emul_num_lock_state(get_emul_num_lock_state() ^ 1);
             INFO("qemu NumLock state was synchronized with host key value (%d)\n",
                 get_emul_num_lock_state());
@@ -111,7 +110,7 @@ int javakeycode_to_scancode(
 
         if (java_keycode == JAVA_KEYCODE_BIT_CTRL) { /* ctrl key */
             if (key_location == JAVA_KEYLOCATION_RIGHT) {
-                kbd_put_keycode(224); //0xE0
+                virtio_keyboard_event(224); //0xE0
             }
             return 29;
         } else if (java_keycode == JAVA_KEYCODE_BIT_SHIFT) { /* shift key */
@@ -124,7 +123,7 @@ int javakeycode_to_scancode(
             return 42;
         } else if (java_keycode == JAVA_KEYCODE_BIT_ALT) { /* alt key */
             if (key_location == JAVA_KEYLOCATION_RIGHT) {
-                kbd_put_keycode(224);
+                virtio_keyboard_event(224);
             }
             return 56;
         } else {
@@ -144,52 +143,52 @@ int javakeycode_to_scancode(
             switch(vk) {
                 case JAVA_KEY_ARROW_UP :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     vk = KEY_UP;
                     break;
                 case JAVA_KEY_ARROW_DOWN :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     vk = KEY_DOWN;
                     break;
                 case JAVA_KEY_ARROW_LEFT :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     vk = KEY_LEFT;
                     break;
                 case JAVA_KEY_ARROW_RIGHT :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     vk = KEY_RIGHT;
                     break;
 
                 case JAVA_KEY_PAGE_UP :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     return 73;
                 case JAVA_KEY_PAGE_DOWN :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     return 81;
                 case JAVA_KEY_HOME :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     return 71;
                 case JAVA_KEY_END :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     return 79;
                 case JAVA_KEY_INSERT :
                     if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                        kbd_put_keycode(224);
+                        virtio_keyboard_event(224);
                     }
                     return 82;
 
@@ -224,7 +223,7 @@ int javakeycode_to_scancode(
                 case JAVA_KEY_KEYPAD_9 :
                     return 73;
                 case JAVA_KEY_KEYPAD_CR : /* KP_ENTER */
-                    kbd_put_keycode(224);
+                    virtio_keyboard_event(224);
                     return 28;
                 case JAVA_KEY_SCROLL_LOCK :
                     return 70;
@@ -246,7 +245,7 @@ int javakeycode_to_scancode(
         switch(vk) {
             case JAVA_KEY_DELETE :
                 if (key_location != JAVA_KEYLOCATION_KEYPAD) {
-                    kbd_put_keycode(224);
+                    virtio_keyboard_event(224);
                 }
                 break;
             default :
index 37c75205344afeb449bfc7d7bc06e3b6dfe488c0..e21dfd30bf7e4dc3981f3aad37a9967ecfa4cc19 100644 (file)
@@ -31,6 +31,7 @@
 #ifndef MARUSKIN_KEYMAP_H_
 #define MARUSKIN_KEYMAP_H_
 
+#include "hw/maru_virtio_keyboard.h"
 
 /* keep it consistent with emulator-skin(swt) virtual keycode */
 #define JAVA_KEYCODE_BIT (1 << 24)
index 6878f5b4e2fcd504f93d892561858baf5b178196..ab13671fc8d25df5fc6cc71e63c1b59d85307ed3 100644 (file)
@@ -278,10 +278,10 @@ void do_keyboard_key_event(int event_type,
 
     if (KEY_PRESSED == event_type) {
         TRACE("key pressed: %d\n", scancode);
-        kbd_put_keycode(scancode);
+        virtio_keyboard_event(scancode);
     } else if (KEY_RELEASED == event_type) {
         TRACE("key released: %d\n", scancode);
-        kbd_put_keycode(scancode | 0x80);
+        virtio_keyboard_event(scancode | 0x80);
     }
 }