aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/efl1/ecore/add-tslib-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/efl1/ecore/add-tslib-support.patch')
-rw-r--r--recipes/efl1/ecore/add-tslib-support.patch104
1 files changed, 104 insertions, 0 deletions
diff --git a/recipes/efl1/ecore/add-tslib-support.patch b/recipes/efl1/ecore/add-tslib-support.patch
new file mode 100644
index 0000000000..c125122a91
--- /dev/null
+++ b/recipes/efl1/ecore/add-tslib-support.patch
@@ -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))