OSDN Git Service

Support reading coordinates from multitouch devices.
authorFlorian Boor <florian@kernelconcepts.de>
Fri, 1 Apr 2011 21:30:21 +0000 (23:30 +0200)
committerChristopher Larson <kergoth@gmail.com>
Thu, 20 Oct 2011 15:35:01 +0000 (08:35 -0700)
Signed-off-by: Florian Boor <florian@kernelconcepts.de>
Signed-off-by: Christopher Larson <kergoth@gmail.com>
plugins/input-raw.c

index 4396eab..1e48505 100644 (file)
 # define KEY_CNT (KEY_MAX+1)
 #endif
 
+#ifndef ABS_MT_POSITION_X
+# define ABS_MT_POSITION_X       0x35    /* Center X ellipse position */
+# define ABS_MT_POSITION_Y       0x36    /* Center Y ellipse position */
+#endif
+
 #include "tslib-private.h"
 
 #define GRAB_EVENTS_WANTED     1
@@ -160,16 +165,17 @@ static int ts_input_read(struct tslib_module_info *inf,
                                }
                                break;
                        case EV_SYN:
-                               /* Fill out a new complete event */
-                               if (pen_up) {
-                                       samp->x = 0;
-                                       samp->y = 0;
-                                       samp->pressure = 0;
-                                       pen_up = 0;
-                               } else {
-                                       samp->x = i->current_x;
-                                       samp->y = i->current_y;
-                                       samp->pressure = i->current_p;
+                               if (ev.code == SYN_REPORT) {
+                                       /* Fill out a new complete event */
+                                       if (pen_up) {
+                                               samp->x = 0;
+                                               samp->y = 0;
+                                               samp->pressure = 0;
+                                               pen_up = 0;
+                                       } else {
+                                               samp->x = i->current_x;
+                                               samp->y = i->current_y;
+                                               samp->pressure = i->current_p;
                                }
                                samp->tv = ev.time;
        #ifdef DEBUG
@@ -179,6 +185,7 @@ static int ts_input_read(struct tslib_module_info *inf,
        #endif /* DEBUG */
                                samp++;
                                total++;
+                               }
                                break;
                        case EV_ABS:
                                switch (ev.code) {
@@ -188,6 +195,12 @@ static int ts_input_read(struct tslib_module_info *inf,
                                case ABS_Y:
                                        i->current_y = ev.value;
                                        break;
+                               case ABS_MT_POSITION_X:
+                                       i->current_x = ev.value;
+                                       break;
+                               case ABS_MT_POSITION_Y:
+                                       i->current_y = ev.value;
+                                       break;
                                case ABS_PRESSURE:
                                        i->current_p = ev.value;
                                        break;