efl: add tslib support to ecore-fb (cvs)
authorMichael Lauer <mickey@vanille-media.de>
Sun, 11 Sep 2005 20:58:08 +0000 (20:58 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Sun, 11 Sep 2005 20:58:08 +0000 (20:58 +0000)
packages/efl/ecore-fb_20050907.bb
packages/efl/ecore/add-tslib-support.patch [new file with mode: 0644]

index 96823d0..b60cd7e 100644 (file)
@@ -1,11 +1,17 @@
 include ecore.inc
-PR = "r0"
+PR = "r1"
 
 DEFAULT_PREFERENCE = "-1"
 
 SRC_URI = "cvs://anonymous@cvs.sourceforge.net/cvsroot/enlightenment;module=e17/libs/ecore;date=${PV}"
 S = "${WORKDIR}/ecore"
 
+### add tslib support
+SRC_URI += "file://add-tslib-support.patch;patch=1"
+DEPENDS += "tslib"
+CFLAGS += "-DHAVE_TSLIB"
+LDFLAGS += "-lts"
+
 EXTRA_OECONF = "--enable-ecore-fb \
                --enable-ecore-job \
                --enable-ecore-file \
@@ -25,6 +31,5 @@ EXTRA_OECONF = "--enable-ecore-fb \
                --enable-ecore-config \
                --disable-openssl"
 
-parts = "Ecore Ecore_Job Ecore_File Ecore_DBus \
-        Ecore_Txt Ecore_Fb Ecore_Con \
-        Ecore_Ipc Ecore_Evas Ecore_Config"
+parts = "Ecore Ecore_Job Ecore_File Ecore_DBus Ecore_Txt Ecore_Fb Ecore_Con Ecore_Ipc Ecore_Evas Ecore_Config"
+
diff --git a/packages/efl/ecore/add-tslib-support.patch b/packages/efl/ecore/add-tslib-support.patch
new file mode 100644 (file)
index 0000000..c125122
--- /dev/null
@@ -0,0 +1,104 @@
+
+#
+# tslib support for ecore, (C) Michael 'Mickey' Lauer <mickey@Vanille.de>
+#
+
+--- ecore/src/lib/ecore_fb/ecore_fb.c~add-tslib-support.patch
++++ ecore/src/lib/ecore_fb/ecore_fb.c
+@@ -4,6 +4,13 @@
+ #include "Ecore_Fb.h"
+ #include "ecore_private.h"
++
++#ifdef HAVE_TSLIB
++#include <tslib.h>
++#include <errno.h>
++#endif
++
++
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <stdio.h>
+@@ -77,6 +84,11 @@
+    unsigned char z;
+ };
++#ifdef HAVE_TSLIB
++struct tsdev *_ecore_fb_tslib_tsdev = NULL;
++struct ts_sample _ecore_fb_tslib_event;
++#endif
++
+ static void _ecore_fb_size_get(int *w, int *h);
+ static int _ecore_fb_ts_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
+ static int _ecore_fb_kbd_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
+@@ -269,10 +281,39 @@
+ ecore_fb_init(const char *name __UNUSED__)
+ {
+    int prev_flags;
++#ifdef HAVE_TSLIB
++   char *tslib_tsdevice = NULL;
++#endif
+    _ecore_fb_init_count++;
+    if (_ecore_fb_init_count > 1) return _ecore_fb_init_count;
++#ifdef HAVE_TSLIB
++    if ( ( tslib_tsdevice = getenv("TSLIB_TSDEVICE") ) != NULL )
++    {
++        printf( "ECORE_FB: TSLIB_TSDEVICE = '%s'\n", tslib_tsdevice );
++        _ecore_fb_tslib_tsdev = ts_open( tslib_tsdevice, 1 ); /* 1 = nonblocking, 0 = blocking */
++
++        if ( !_ecore_fb_tslib_tsdev )
++        {
++            printf( "ECORE_FB: Can't ts_open (%s)\n", strerror( errno ) );
++            return 0;
++        }
++
++        if ( ts_config( _ecore_fb_tslib_tsdev ) )
++        {
++            printf( "ECORE_FB: Can't ts_config (%s)\n", strerror( errno ) );
++            return 0;
++        }
++        _ecore_fb_ts_fd = ts_fd( _ecore_fb_tslib_tsdev );
++        if ( _ecore_fb_ts_fd < 0 )
++        {
++            printf( "ECORE_FB: Can't open touchscreen (%s)\n", strerror( errno ) );
++            return 0;
++        }
++    }
++#else
+    _ecore_fb_ts_fd = open("/dev/touchscreen/0", O_RDONLY);
++#endif
+    if (_ecore_fb_ts_fd >= 0)
+      {
+       prev_flags = fcntl(_ecore_fb_ts_fd, F_GETFL);
+@@ -790,7 +831,21 @@
+       char *ptr;
+       double t;
+       int did_triple = 0;
+-      
++
++#ifdef HAVE_TSLIB
++    if ( _ecore_fb_ts_apply_cal )
++        num = ts_read_raw( _ecore_fb_tslib_tsdev, &_ecore_fb_tslib_event, 1 );
++    else
++        num = ts_read( _ecore_fb_tslib_tsdev, &_ecore_fb_tslib_event, 1 );
++    if ( num != 1 )
++    {
++        return 1; /* no more samples at this time */
++    }
++    x = _ecore_fb_tslib_event.x;
++    y = _ecore_fb_tslib_event.y;
++    pressure = _ecore_fb_tslib_event.pressure;
++    v = 1; /* loop, there might be more samples */
++#else
+       ptr = (char *)&(_ecore_fb_ts_event);
+       ptr += _ecore_fb_ts_event_byte_count;
+       num = sizeof(Ecore_Fb_Ts_Event) - _ecore_fb_ts_event_byte_count;
+@@ -811,6 +866,7 @@
+            y = _ecore_fb_ts_event.y;
+         }
+       pressure = _ecore_fb_ts_event.pressure;
++#endif   
+       /* add event to queue */
+       /* always add a move event */
+       if ((pressure) || (prev_pressure))