From: giwoong.kim Date: Mon, 12 Mar 2012 06:29:45 +0000 (+0900) Subject: [Title] added touch event queue X-Git-Tag: TizenStudio_2.0_p2.3~1770 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1cf4f8de1e04c63890fe66a984130633f35efe2a;p=sdk%2Femulator%2Fqemu.git [Title] added touch event queue [Type] [Module] [Priority] [Jira#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] --- diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c index a9d0dba..7c02042 100644 --- a/hw/usb-uhci.c +++ b/hw/usb-uhci.c @@ -71,12 +71,7 @@ #define UHCI_PORT_READ_ONLY (0x1bb) #define UHCI_PORT_WRITE_CLEAR (UHCI_PORT_CSC | UHCI_PORT_ENC) -#ifdef CONFIG_MARU -#define FRAME_TIMER_FREQ 2000 -#else #define FRAME_TIMER_FREQ 1000 -#endif - #define FRAME_MAX_LOOPS 100 #define NB_PORTS 2 diff --git a/tizen/src/hw/maru_touchscreen.c b/tizen/src/hw/maru_touchscreen.c index 26c49a6..8d0077c 100644 --- a/tizen/src/hw/maru_touchscreen.c +++ b/tizen/src/hw/maru_touchscreen.c @@ -6,7 +6,7 @@ * * Contact: * GiWoong Kim - * Hyunjun Son + * HyunJun Son * DongKyun Yun * YeongKyoon Lee * @@ -29,6 +29,8 @@ * */ + +#include #include "hw.h" #include "console.h" #include "usb.h" @@ -130,18 +132,40 @@ static const USBDesc desc_touchscreen = { .str = desc_strings, }; +typedef struct TouchEventEntry { + USBEmulTouchscreenPacket queue_packet; + int index; + + /* used internally by qemu for handling mice */ + QTAILQ_ENTRY(TouchEventEntry) node; +} TouchEventEntry; + +static QTAILQ_HEAD(, TouchEventEntry) events_queue = + QTAILQ_HEAD_INITIALIZER(events_queue); + +static pthread_mutex_t event_mutex = PTHREAD_MUTEX_INITIALIZER; +static int event_cnt = 0; + static void usb_touchscreen_event(void *opaque, int x, int y, int z, int buttons_state) { + TouchEventEntry *te; USBTouchscreenState *s = opaque; - /* scale to resolution */ - s->dx = x; //(x * TOUCHSCREEN_RESOLUTION_X / 0x7FFF); - s->dy = y; //(y * TOUCHSCREEN_RESOLUTION_Y / 0x7FFF); - s->dz = z; - s->buttons_state = buttons_state; + te = g_malloc0(sizeof(TouchEventEntry)); + te->queue_packet.x = x; //(x * TOUCHSCREEN_RESOLUTION_X / 0x7FFF); + te->queue_packet.y = y; //(y * TOUCHSCREEN_RESOLUTION_Y / 0x7FFF); + te->queue_packet.z = z; + te->queue_packet.state = buttons_state; + + pthread_mutex_lock(&event_mutex); + te->index = event_cnt++; + + QTAILQ_INSERT_TAIL(&events_queue, te, node); s->changed = 1; - INFO("boo~~~%d,%d,%d,, %d\n", x, y, z, buttons_state); + pthread_mutex_unlock(&event_mutex); + + TRACE("touch event(%d) : x=%d, y=%d, z=%d, state=%d\n", te->index, x, y, z, buttons_state); } static int usb_touchscreen_poll(USBTouchscreenState *s, uint8_t *buf, int len) @@ -204,11 +228,33 @@ static int usb_touchscreen_handle_data(USBDevice *dev, USBPacket *p) switch (p->pid) { case USB_TOKEN_IN: if (p->devep == 1) { + pthread_mutex_lock(&event_mutex); + if (s->changed == 0) { + pthread_mutex_unlock(&event_mutex); return USB_RET_NAK; } - s->changed = 0; + if (!QTAILQ_EMPTY(&events_queue)) { + TouchEventEntry *te = QTAILQ_FIRST(&events_queue); + + s->dx = te->queue_packet.x; + s->dy = te->queue_packet.y; + s->dz = te->queue_packet.z; + s->buttons_state = te->queue_packet.state; + + QTAILQ_REMOVE(&events_queue, te, node); + event_cnt--; + TRACE("processed touch event(%d) : x=%d, y=%d, z=%d, state=%d\n", + te->index, s->dx, s->dy, s->dz, s->buttons_state); + + if (QTAILQ_EMPTY(&events_queue)) { + s->changed = 0; + } + } + + pthread_mutex_unlock(&event_mutex); + ret = usb_touchscreen_poll(s, buf, p->iov.size); usb_packet_copy(p, buf, ret); break; diff --git a/tizen/src/skin/maruskin_operation.c b/tizen/src/skin/maruskin_operation.c index 33e787f..eb7d675 100644 --- a/tizen/src/skin/maruskin_operation.c +++ b/tizen/src/skin/maruskin_operation.c @@ -79,7 +79,7 @@ void do_mouse_event( int event_type, int x, int y, int z ) { INFO( "undefined mouse event type:%d\n", event_type ); } - usleep(5000); + usleep(100); } void do_key_event( int event_type, int keycode ) {