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))
|