From: GiWoong Kim Date: Tue, 22 Apr 2014 10:33:22 +0000 (+0900) Subject: keyboard: Maru keyboard device handles key events directly X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~386^2~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d497d7057b000da37f0308a59d2dbaf6be59157;p=sdk%2Femulator%2Fqemu.git keyboard: Maru keyboard device handles key events directly Change-Id: I18050322c30003656ecb73f0819547821fd196ba Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/hw/maru_virtio_keyboard.c b/tizen/src/hw/maru_virtio_keyboard.c index 1d3d417951..9722b631ba 100644 --- a/tizen/src/hw/maru_virtio_keyboard.c +++ b/tizen/src/hw/maru_virtio_keyboard.c @@ -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"); diff --git a/tizen/src/hw/maru_virtio_keyboard.h b/tizen/src/hw/maru_virtio_keyboard.h index 9a976b4f14..f3296bc89a 100644 --- a/tizen/src/hw/maru_virtio_keyboard.h +++ b/tizen/src/hw/maru_virtio_keyboard.h @@ -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 diff --git a/tizen/src/skin/maruskin_keymap.c b/tizen/src/skin/maruskin_keymap.c index 82f884ab28..0dbdc65743 100644 --- a/tizen/src/skin/maruskin_keymap.c +++ b/tizen/src/skin/maruskin_keymap.c @@ -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 : diff --git a/tizen/src/skin/maruskin_keymap.h b/tizen/src/skin/maruskin_keymap.h index 37c7520534..e21dfd30bf 100644 --- a/tizen/src/skin/maruskin_keymap.h +++ b/tizen/src/skin/maruskin_keymap.h @@ -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) diff --git a/tizen/src/skin/maruskin_operation.c b/tizen/src/skin/maruskin_operation.c index 6878f5b4e2..ab13671fc8 100644 --- a/tizen/src/skin/maruskin_operation.c +++ b/tizen/src/skin/maruskin_operation.c @@ -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); } }