summaryrefslogtreecommitdiff
path: root/packages/efl/ecore/add-tslib-support.patch
blob: c125122a918782175dd98c280e02c72a879fcdcb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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))