[Title] rollback touch device
authorgiwoong.kim <giwoong.kim@samsung.com>
Thu, 22 Mar 2012 13:11:09 +0000 (22:11 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Thu, 22 Mar 2012 13:11:09 +0000 (22:11 +0900)
[Type]
[Module] Emulator
[Priority]
[Jira#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

tizen/src/hw/maru_touchscreen.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 98f1f99..2b99cbe
 MULTI_DEBUG_CHANNEL(qemu, touchscreen);
 
 
+#define MAX_TOUCH_EVENT_CNT  256
+
 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;
+    s->changed = 1;
+
+    /*TouchEventEntry *te;
     USBTouchscreenState *s = opaque;
 
     te = g_malloc0(sizeof(TouchEventEntry));
@@ -53,14 +65,19 @@ static void usb_touchscreen_event(void *opaque, int x, int y, int z, int buttons
     te->queue_packet.state = buttons_state;
 
     pthread_mutex_lock(&event_mutex);
+    if (event_cnt > MAX_TOUCH_EVENT_CNT) {
+        pthread_mutex_unlock(&event_mutex);
+        INFO("full touch event queue, lose event\n", event_cnt);
+        return;
+    }
     te->index = event_cnt++;
 
     QTAILQ_INSERT_TAIL(&events_queue, te, node);
-    s->changed = 1;
+    s->changed = 0;
 
     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);
+    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)
@@ -123,14 +140,14 @@ 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);
+            //pthread_mutex_lock(&event_mutex);
 
             if (s->changed == 0) {
-                pthread_mutex_unlock(&event_mutex);
+                //pthread_mutex_unlock(&event_mutex);
                 return USB_RET_NAK;
             }
 
-            if (!QTAILQ_EMPTY(&events_queue)) {
+            /*if (!QTAILQ_EMPTY(&events_queue)) {
                 TouchEventEntry *te = QTAILQ_FIRST(&events_queue);
 
                 s->dx = te->queue_packet.x;
@@ -148,7 +165,8 @@ static int usb_touchscreen_handle_data(USBDevice *dev, USBPacket *p)
                 }
             }
 
-            pthread_mutex_unlock(&event_mutex);
+            pthread_mutex_unlock(&event_mutex); */
+            s->changed = 0;
 
             ret = usb_touchscreen_poll(s, buf, p->iov.size);
             usb_packet_copy(p, buf, ret);