diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2013-08-16 14:33:12 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-08-20 15:31:25 +0100 |
commit | a42db118a74f7b4dc4789969f9761b3c7ee41c11 (patch) | |
tree | 79f92f66d6dcbc60104a543fbc4b809b6862bdeb | |
parent | a8d686ba22264e84d4e094744e766bbfd707408d (diff) | |
download | poky-a42db118a74f7b4dc4789969f9761b3c7ee41c11.tar.gz |
tslib: update to 1.1
Drop patches merged upstream. 32bitBE-support.patch wasn't merged, but
no longer applies and similar changes look to have been made; tslib 1.1
works properly on qemumips without it, so this has also been dropped.
(From OE-Core rev: 2e92d845b433f3a1805c310ccda54cfc7dd8b1e1)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/recipes-graphics/tslib/tslib/0001-Link-plugins-against-libts.patch | 57 | ||||
-rw-r--r-- | meta/recipes-graphics/tslib/tslib/32bitBE-support.patch | 55 | ||||
-rw-r--r-- | meta/recipes-graphics/tslib/tslib/fix_version.patch | 34 | ||||
-rw-r--r-- | meta/recipes-graphics/tslib/tslib/multievent.patch | 845 | ||||
-rw-r--r-- | meta/recipes-graphics/tslib/tslib/obsolete_automake_macros.patch | 15 | ||||
-rw-r--r-- | meta/recipes-graphics/tslib/tslib/set-open-mode-for-ts_calibrate_c.patch | 30 | ||||
-rw-r--r-- | meta/recipes-graphics/tslib/tslib_1.1.bb (renamed from meta/recipes-graphics/tslib/tslib_1.0.bb) | 14 |
7 files changed, 3 insertions, 1047 deletions
diff --git a/meta/recipes-graphics/tslib/tslib/0001-Link-plugins-against-libts.patch b/meta/recipes-graphics/tslib/tslib/0001-Link-plugins-against-libts.patch deleted file mode 100644 index c6b9f5919b..0000000000 --- a/meta/recipes-graphics/tslib/tslib/0001-Link-plugins-against-libts.patch +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | From 9623bbedf4ff409e5036edfcfe52b2595932a6d7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Chris Larson <clarson@kergoth.com> | ||
3 | Date: Sat, 1 Nov 2008 20:46:07 +0000 | ||
4 | Subject: [PATCH] Link plugins against libts | ||
5 | |||
6 | Some plugins use tslib functions. Link those plugins against libts. | ||
7 | The problem is easy to see with LDFLAGS="-Wl,-no-undefined". | ||
8 | Without this change DirectFB in unable to use tslib because symbols | ||
9 | in the tslib plugins can't be resolved. | ||
10 | |||
11 | Signed-off-by: Ville Syrjala <syrjala@sci.fi> | ||
12 | Signed-off-by: Chris Larson <clarson@kergoth.com> | ||
13 | |||
14 | The patch was imported from git server git://github.com/kergoth/tslib.git | ||
15 | as of commit id 9623bbedf4ff409e5036edfcfe52b2595932a6d7. | ||
16 | |||
17 | Upstream-Status: Accepted | ||
18 | Signed-off-by: Dmitry Cherukhin <dima_ch@emcraft.com> | ||
19 | --- | ||
20 | plugins/Makefile.am | 5 +++++ | ||
21 | 1 files changed, 5 insertions(+), 0 deletions(-) | ||
22 | |||
23 | diff --git a/plugins/Makefile.am b/plugins/Makefile.am | ||
24 | index 3b902c2..4c4ef8b 100644 | ||
25 | --- a/plugins/Makefile.am | ||
26 | +++ b/plugins/Makefile.am | ||
27 | @@ -114,15 +114,19 @@ pluginexec_LTLIBRARIES = \ | ||
28 | |||
29 | variance_la_SOURCES = variance.c | ||
30 | variance_la_LDFLAGS = -module $(LTVSN) | ||
31 | +variance_la_LIBADD = $(top_builddir)/src/libts.la | ||
32 | |||
33 | dejitter_la_SOURCES = dejitter.c | ||
34 | dejitter_la_LDFLAGS = -module $(LTVSN) | ||
35 | +dejitter_la_LIBADD = $(top_builddir)/src/libts.la | ||
36 | |||
37 | linear_la_SOURCES = linear.c | ||
38 | linear_la_LDFLAGS = -module $(LTVSN) | ||
39 | +linear_la_LIBADD = $(top_builddir)/src/libts.la | ||
40 | |||
41 | pthres_la_SOURCES = pthres.c | ||
42 | pthres_la_LDFLAGS = -module $(LTVSN) | ||
43 | +pthres_la_LIBADD = $(top_builddir)/src/libts.la | ||
44 | |||
45 | # hw access | ||
46 | corgi_la_SOURCES = corgi-raw.c | ||
47 | @@ -148,6 +152,7 @@ tatung_la_LDFLAGS = -module $(LTVSN) | ||
48 | |||
49 | input_la_SOURCES = input-raw.c | ||
50 | input_la_LDFLAGS = -module $(LTVSN) | ||
51 | +input_la_LIBADD = $(top_builddir)/src/libts.la | ||
52 | |||
53 | linear_h2200_la_SOURCES = linear-h2200.c | ||
54 | linear_h2200_la_LDFLAGS = -module $(LTVSN) | ||
55 | -- | ||
56 | 1.7.6.4 | ||
57 | |||
diff --git a/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch b/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch deleted file mode 100644 index 49232ef6e9..0000000000 --- a/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | #! /bin/sh /usr/share/dpatch/dpatch-run | ||
2 | ## 030-32bitBE-support.dpatch by Neil Williams <codehelp@debian.org> | ||
3 | ## | ||
4 | ## All lines beginning with `## DP:' are a description of the patch. | ||
5 | ## DP: See bug #496759 - being tested upstream for 32bit BE devices | ||
6 | |||
7 | @DPATCH@ | ||
8 | |||
9 | Upstream-Status: Pending | ||
10 | |||
11 | diff -urNad tslib-1.0~/plugins/input-raw.c tslib-1.0/plugins/input-raw.c | ||
12 | --- tslib-1.0~/plugins/input-raw.c 2008-12-09 10:56:47.000000000 +0000 | ||
13 | +++ tslib-1.0/plugins/input-raw.c 2008-12-09 11:05:41.000000000 +0000 | ||
14 | @@ -44,25 +44,33 @@ | ||
15 | int using_syn; | ||
16 | }; | ||
17 | |||
18 | +#define BITS_PER_LONG (sizeof(long) * 8) | ||
19 | +#ifndef EV_CNT | ||
20 | +#define EV_CNT (EV_MAX+1) | ||
21 | +#endif | ||
22 | +#ifndef ABS_CNT | ||
23 | +#define ABS_CNT (ABS_MAX+1) | ||
24 | +#endif | ||
25 | + | ||
26 | static int check_fd(struct tslib_input *i) | ||
27 | { | ||
28 | struct tsdev *ts = i->module.dev; | ||
29 | int version; | ||
30 | - u_int32_t bit; | ||
31 | - u_int64_t absbit; | ||
32 | + unsigned long bit[EV_CNT / BITS_PER_LONG + 1]; | ||
33 | + unsigned long absbit[ABS_MAX / BITS_PER_LONG + 1]; | ||
34 | |||
35 | if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) && | ||
36 | (version == EV_VERSION) && | ||
37 | - (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) && | ||
38 | - (bit & (1 << EV_ABS)) && | ||
39 | - (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) && | ||
40 | - (absbit & (1 << ABS_X)) && | ||
41 | - (absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) { | ||
42 | + (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit)), bit) >= 0) && | ||
43 | + (bit[0] & (1 << EV_ABS)) && | ||
44 | + (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) >= 0) && | ||
45 | + (absbit[0] & (1 << ABS_X)) && | ||
46 | + (absbit[0] & (1 << ABS_Y)) && (absbit[0] & (1 << ABS_PRESSURE)))) { | ||
47 | fprintf(stderr, "selected device is not a touchscreen I understand\n"); | ||
48 | return -1; | ||
49 | } | ||
50 | |||
51 | - if (bit & (1 << EV_SYN)) | ||
52 | + if (bit[0] & (1 << EV_SYN)) | ||
53 | i->using_syn = 1; | ||
54 | |||
55 | return 0; | ||
diff --git a/meta/recipes-graphics/tslib/tslib/fix_version.patch b/meta/recipes-graphics/tslib/tslib/fix_version.patch deleted file mode 100644 index c3d658ee52..0000000000 --- a/meta/recipes-graphics/tslib/tslib/fix_version.patch +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | --- | ||
2 | configure.ac | 10 +++++----- | ||
3 | 1 file changed, 5 insertions(+), 5 deletions(-) | ||
4 | |||
5 | Upstream-Status: Inappropriate [configuration] | ||
6 | |||
7 | Index: tslib-1.0/configure.ac | ||
8 | =================================================================== | ||
9 | --- tslib-1.0.orig/configure.ac 2006-08-24 22:02:55.000000000 +0100 | ||
10 | +++ tslib-1.0/configure.ac 2007-07-09 21:04:38.000000000 +0100 | ||
11 | @@ -2,7 +2,7 @@ | ||
12 | # Process this file with autoconf to produce a configure script. | ||
13 | |||
14 | AC_PREREQ(2.57) | ||
15 | -AC_INIT(tslib, 0.0.2, kergoth@handhelds.org) | ||
16 | +AC_INIT(tslib, 1.0.0, kergoth@handhelds.org) | ||
17 | # AC_CONFIG_AUX_DIR(config) | ||
18 | AM_INIT_AUTOMAKE(dist-bzip2) | ||
19 | AC_CONFIG_SRCDIR([src/ts_close.c]) | ||
20 | @@ -193,10 +193,10 @@ TS_CONF='${sysconfdir}/ts.conf' | ||
21 | AC_SUBST(TS_CONF) | ||
22 | |||
23 | # Library versioning | ||
24 | -LT_RELEASE=0.0 | ||
25 | -LT_CURRENT=1 | ||
26 | -LT_REVISION=1 | ||
27 | -LT_AGE=1 | ||
28 | +LT_RELEASE=1.0 | ||
29 | +LT_CURRENT=0 | ||
30 | +LT_REVISION=0 | ||
31 | +LT_AGE=0 | ||
32 | AC_SUBST(LT_RELEASE) | ||
33 | AC_SUBST(LT_CURRENT) | ||
34 | AC_SUBST(LT_REVISION) | ||
diff --git a/meta/recipes-graphics/tslib/tslib/multievent.patch b/meta/recipes-graphics/tslib/tslib/multievent.patch deleted file mode 100644 index e6803f5a87..0000000000 --- a/meta/recipes-graphics/tslib/tslib/multievent.patch +++ /dev/null | |||
@@ -1,845 +0,0 @@ | |||
1 | Upstream-Status: Pending | ||
2 | |||
3 | --- tslib/plugins/linear.c~multievent | ||
4 | +++ tslib/plugins/linear.c | ||
5 | @@ -39,14 +39,12 @@ | ||
6 | linear_read(struct tslib_module_info *info, struct ts_sample *samp, int nr) | ||
7 | { | ||
8 | struct tslib_linear *lin = (struct tslib_linear *)info; | ||
9 | - int ret; | ||
10 | + int ret, i = 0; | ||
11 | int xtemp,ytemp; | ||
12 | |||
13 | ret = info->next->ops->read(info->next, samp, nr); | ||
14 | if (ret >= 0) { | ||
15 | - int nr; | ||
16 | - | ||
17 | - for (nr = 0; nr < ret; nr++, samp++) { | ||
18 | + for (i = 0; i < ret; i++, samp++) { | ||
19 | #ifdef DEBUG | ||
20 | fprintf(stderr,"BEFORE CALIB--------------------> %d %d %d\n",samp->x, samp->y, samp->pressure); | ||
21 | #endif /*DEBUG*/ | ||
22 | @@ -66,6 +64,7 @@ | ||
23 | samp->y = tmp; | ||
24 | } | ||
25 | } | ||
26 | + ret = i; | ||
27 | } | ||
28 | |||
29 | return ret; | ||
30 | --- tslib/plugins/dejitter.c~multievent | ||
31 | +++ tslib/plugins/dejitter.c | ||
32 | @@ -24,7 +24,6 @@ | ||
33 | |||
34 | struct tslib_threshold { | ||
35 | struct tslib_module_info module; | ||
36 | - int pthreshold; | ||
37 | int xdelta; | ||
38 | int ydelta; | ||
39 | int delta2; | ||
40 | @@ -36,40 +35,28 @@ | ||
41 | static int threshold_read(struct tslib_module_info *info, struct ts_sample *samp, int nr) | ||
42 | { | ||
43 | struct tslib_threshold *thr = (struct tslib_threshold *)info; | ||
44 | - struct ts_sample *s; | ||
45 | - int ret; | ||
46 | + struct ts_sample *src = samp, *dest = samp; | ||
47 | + int ret, i = 0; | ||
48 | |||
49 | ret = info->next->ops->read(info->next, samp, nr); | ||
50 | if (ret >= 0) { | ||
51 | - int nr = 0; | ||
52 | - | ||
53 | - for (s = samp; s < samp + ret; s++) { | ||
54 | + for (i = 0; i < ret; i++, samp++) { | ||
55 | int dr2; | ||
56 | #ifdef DEBUG | ||
57 | - fprintf(stderr,"BEFORE DEJITTER---------------> %d %d %d\n",s->x,s->y,s->pressure); | ||
58 | + fprintf(stderr,"BEFORE DEJITTER---------------> %d %d %d\n", samp->x, samp->y, samp->pressure); | ||
59 | #endif /*DEBUG*/ | ||
60 | - thr->down = (s->pressure >= thr->pthreshold); | ||
61 | - if (thr->down) { | ||
62 | - dr2 = (thr->x - s->x)*(thr->x - s->x) | ||
63 | - + (thr->y - s->y)*(thr->y - s->y); | ||
64 | - if(dr2 < thr->delta2) { | ||
65 | - s->x = thr->x; | ||
66 | - s->y = thr->y; | ||
67 | - } else { | ||
68 | - thr->x = s->x; | ||
69 | - thr->y = s->y; | ||
70 | - } | ||
71 | - | ||
72 | + dr2 = (thr->x - samp->x)*(thr->x - samp->x) | ||
73 | + + (thr->y - samp->y)*(thr->y - samp->y); | ||
74 | + if(dr2 < thr->delta2) { | ||
75 | + samp->x = thr->x; | ||
76 | + samp->y = thr->y; | ||
77 | } else { | ||
78 | - s->x = thr->x; | ||
79 | - s->y = thr->y; | ||
80 | + thr->x = samp->x; | ||
81 | + thr->y = samp->y; | ||
82 | } | ||
83 | - | ||
84 | - | ||
85 | - samp[nr++] = *s; | ||
86 | } | ||
87 | |||
88 | - ret = nr; | ||
89 | + ret = i; | ||
90 | } | ||
91 | return ret; | ||
92 | } | ||
93 | @@ -106,10 +93,6 @@ | ||
94 | thr->ydelta = v; | ||
95 | break; | ||
96 | |||
97 | - case 3: | ||
98 | - thr->pthreshold = v; | ||
99 | - break; | ||
100 | - | ||
101 | default: | ||
102 | return -1; | ||
103 | } | ||
104 | @@ -120,7 +103,6 @@ | ||
105 | { | ||
106 | { "xdelta", (void *)1, threshold_limit }, | ||
107 | { "ydelta", (void *)2, threshold_limit }, | ||
108 | - { "pthreshold", (void *)3, threshold_limit } | ||
109 | }; | ||
110 | |||
111 | //#define NR_VARS (sizeof(threshold_vars) / sizeof(threshold_vars[0])) | ||
112 | @@ -138,7 +120,6 @@ | ||
113 | |||
114 | thr->xdelta = 10; | ||
115 | thr->ydelta = 10; | ||
116 | - thr->pthreshold = 100; | ||
117 | |||
118 | if (tslib_parse_vars(&thr->module, threshold_vars, NR_VARS, params)) { | ||
119 | free(thr); | ||
120 | --- tslib/plugins/variance.c~multievent | ||
121 | +++ tslib/plugins/variance.c | ||
122 | @@ -9,25 +9,36 @@ | ||
123 | * $Id: variance.c,v 1.3 2002/11/08 23:28:55 dlowder Exp $ | ||
124 | * | ||
125 | * Variance filter for touchscreen values | ||
126 | + * | ||
127 | + * Policy question (applies to all tslib modules that consume events): | ||
128 | + * 1) User requests a read of 5 events using nr. | ||
129 | + * 2) Lower layers return us 4 events. | ||
130 | + * 3) Perform variance calculation, we now only have _1_ event. | ||
131 | + * 4) Do we, a) duplicate this data across the user requested 4 events, | ||
132 | + * b) push up the single event | ||
133 | + * c) loop on the read from the lower layers to obtain | ||
134 | + * the user's requested number of events, unless we hit | ||
135 | + * a pen_up. | ||
136 | */ | ||
137 | + | ||
138 | #include <errno.h> | ||
139 | #include <stdlib.h> | ||
140 | #include <string.h> | ||
141 | #include <limits.h> | ||
142 | - | ||
143 | #include <stdio.h> | ||
144 | |||
145 | #include "tslib.h" | ||
146 | #include "tslib-filter.h" | ||
147 | |||
148 | +#define NR_INIT -1 | ||
149 | #define NR_LAST 4 | ||
150 | |||
151 | struct tslib_variance { | ||
152 | struct tslib_module_info module; | ||
153 | int nr; | ||
154 | - unsigned int pthreshold; | ||
155 | unsigned int xlimit; | ||
156 | unsigned int ylimit; | ||
157 | + unsigned int pthreshold; | ||
158 | struct ts_sample last[NR_LAST]; | ||
159 | }; | ||
160 | |||
161 | @@ -37,8 +48,7 @@ | ||
162 | * least variance, and average them. | ||
163 | */ | ||
164 | static int | ||
165 | -variance_calculate(struct tslib_variance *var, struct ts_sample *samp, | ||
166 | - struct ts_sample *s) | ||
167 | +variance_calculate(struct tslib_variance *var, struct ts_sample *dest, struct ts_sample *src) | ||
168 | { | ||
169 | int i, j; | ||
170 | int diff_x, min_x, i_x, j_x; | ||
171 | @@ -100,11 +110,11 @@ | ||
172 | } | ||
173 | } | ||
174 | |||
175 | - samp->x = (var->last[i_x].x + var->last[j_x].x) / 2; | ||
176 | - samp->y = (var->last[i_y].y + var->last[j_y].y) / 2; | ||
177 | - samp->pressure = (var->last[i_p].pressure + var->last[j_p].pressure) / 2; | ||
178 | - samp->tv.tv_sec = s->tv.tv_sec; | ||
179 | - samp->tv.tv_usec = s->tv.tv_usec; | ||
180 | + dest->x = (var->last[i_x].x + var->last[j_x].x) / 2; | ||
181 | + dest->y = (var->last[i_y].y + var->last[j_y].y) / 2; | ||
182 | + dest->pressure = (var->last[i_p].pressure + var->last[j_p].pressure) / 2; | ||
183 | + dest->tv.tv_sec = src->tv.tv_sec; | ||
184 | + dest->tv.tv_usec = src->tv.tv_usec; | ||
185 | |||
186 | return 1; | ||
187 | } | ||
188 | @@ -112,55 +122,57 @@ | ||
189 | static int variance_read(struct tslib_module_info *info, struct ts_sample *samp, int nr) | ||
190 | { | ||
191 | struct tslib_variance *var = (struct tslib_variance *)info; | ||
192 | - struct ts_sample *s; | ||
193 | - int ret; | ||
194 | - | ||
195 | - ret = info->next->ops->read(info->next, samp, nr); | ||
196 | - if (ret >= 0) { | ||
197 | - int nr = 0; | ||
198 | - | ||
199 | - for (s = samp; s < samp + ret; s++) { | ||
200 | - if (s->pressure < var->pthreshold) { | ||
201 | - /* | ||
202 | - * Pen was released. Reset our state and | ||
203 | - * pass up the release information. | ||
204 | - */ | ||
205 | -// samp[nr].x = 0; | ||
206 | -// samp[nr].y = 0; | ||
207 | - samp[nr].pressure = s->pressure; | ||
208 | - samp[nr].tv.tv_sec = s->tv.tv_sec; | ||
209 | - samp[nr].tv.tv_usec = s->tv.tv_usec; | ||
210 | - | ||
211 | - nr++; | ||
212 | - | ||
213 | - var->nr = 0; | ||
214 | - continue; | ||
215 | - } else if (var->nr == -1) { | ||
216 | - /* | ||
217 | - * Pen was pressed. Inform upper layers | ||
218 | - * immediately. | ||
219 | - */ | ||
220 | - samp[nr] = *s; | ||
221 | - nr++; | ||
222 | - } | ||
223 | - | ||
224 | - if (var->nr >= 0) { | ||
225 | - var->last[var->nr].x = s->x; | ||
226 | - var->last[var->nr].y = s->y; | ||
227 | - var->last[var->nr].pressure = s->pressure; | ||
228 | - } | ||
229 | - | ||
230 | - var->nr++; | ||
231 | + struct ts_sample *src = samp, *dest = samp; | ||
232 | + int ret, i = 0; | ||
233 | |||
234 | - if (var->nr == NR_LAST) { | ||
235 | - if (variance_calculate(var, samp + nr, s)) | ||
236 | - nr++; | ||
237 | - var->nr = 0; | ||
238 | + /* | ||
239 | + * NOTES: | ||
240 | + * | ||
241 | + * Loop on read, collecting events until we hit nr, unless | ||
242 | + * we hit a pen up or encounter a failure. | ||
243 | + */ | ||
244 | + while ((i < nr) && (ret != -1)) { | ||
245 | + ret = info->next->ops->read(info->next, dest + i, nr - i); | ||
246 | + if (ret >= 0) { | ||
247 | + for (src = dest + i; src < dest + ret; src++) { | ||
248 | + if (src->pressure < var->pthreshold) { | ||
249 | + /* pen released, reset var->nr, | ||
250 | + * do a calc based on what we have so | ||
251 | + * far, and let this event flow up */ | ||
252 | + if (variance_calculate(var, dest + i, src)) | ||
253 | + i++; | ||
254 | + var->nr = NR_INIT; | ||
255 | + ret = -1; /* break outer loop, push up event */ | ||
256 | + break; | ||
257 | + } else if (var->nr == NR_INIT) { | ||
258 | + /* | ||
259 | + * First pen down event. Inform upper layers | ||
260 | + * immediately for responsiveness. | ||
261 | + */ | ||
262 | + var->nr = 0; | ||
263 | + i++; | ||
264 | + ret = -1; /* break outer loop */ | ||
265 | + break; | ||
266 | + } | ||
267 | + | ||
268 | + if (var->nr >= 0) { | ||
269 | + var->last[var->nr].x = src->x; | ||
270 | + var->last[var->nr].y = src->y; | ||
271 | + var->last[var->nr].pressure = src->pressure; | ||
272 | + } | ||
273 | + | ||
274 | + var->nr++; | ||
275 | + | ||
276 | + if (var->nr == NR_LAST) { | ||
277 | + if (variance_calculate(var, dest + i, src)) | ||
278 | + i++; | ||
279 | + var->nr = 0; | ||
280 | + } | ||
281 | } | ||
282 | } | ||
283 | - | ||
284 | - ret = nr; | ||
285 | } | ||
286 | + /* if we've collected at least one event, send it up */ | ||
287 | + if (i != 0) ret = i; | ||
288 | return ret; | ||
289 | } | ||
290 | |||
291 | @@ -196,10 +208,6 @@ | ||
292 | var->ylimit = v; | ||
293 | break; | ||
294 | |||
295 | - case 3: | ||
296 | - var->pthreshold = v; | ||
297 | - break; | ||
298 | - | ||
299 | default: | ||
300 | return -1; | ||
301 | } | ||
302 | @@ -210,7 +218,6 @@ | ||
303 | { | ||
304 | { "xlimit", (void *)1, variance_limit }, | ||
305 | { "ylimit", (void *)2, variance_limit }, | ||
306 | - { "pthreshold", (void *)3, variance_limit } | ||
307 | }; | ||
308 | |||
309 | #define NR_VARS (sizeof(variance_vars) / sizeof(variance_vars[0])) | ||
310 | @@ -218,6 +225,7 @@ | ||
311 | struct tslib_module_info *mod_init(struct tsdev *dev, const char *params) | ||
312 | { | ||
313 | struct tslib_variance *var; | ||
314 | + char *pthresvar; | ||
315 | |||
316 | var = malloc(sizeof(struct tslib_variance)); | ||
317 | if (var == NULL) | ||
318 | @@ -225,10 +233,15 @@ | ||
319 | |||
320 | var->module.ops = &variance_ops; | ||
321 | |||
322 | - var->nr = -1; | ||
323 | + var->nr = NR_INIT; | ||
324 | var->xlimit = 160; | ||
325 | var->ylimit = 160; | ||
326 | var->pthreshold = 100; | ||
327 | + pthresvar = getenv("TSLIB_PTHRES"); | ||
328 | + if (pthresvar != NULL) { | ||
329 | + int p = strtol(pthresvar, (char **)NULL, 10); | ||
330 | + if (p != -1) var->pthreshold = p; | ||
331 | + } | ||
332 | |||
333 | if (tslib_parse_vars(&var->module, variance_vars, NR_VARS, params)) { | ||
334 | free(var); | ||
335 | --- tslib/README~multievent | ||
336 | +++ tslib/README | ||
337 | @@ -36,6 +36,19 @@ | ||
338 | usages. They are by no means exhaustive, nor probably even good examples. | ||
339 | They are basically the programs I used to test this library. | ||
340 | |||
341 | +Module Creation Notes | ||
342 | +===================== | ||
343 | + | ||
344 | +For those creating tslib modules, it is important to note a couple things with | ||
345 | +regard to handling of the ability for a user to request more than one ts event | ||
346 | +at a time. The first thing to note is that the lower layers may send up less | ||
347 | +events than the user requested, but only if that was a result of a pen release. | ||
348 | +Next, your module should send up just as many events as the user requested in | ||
349 | +nr. If your module is one that consumes events, such as variance, then you | ||
350 | +loop on the read from the lower layers, and only send the events up when | ||
351 | +1) you have the number of events requested by the user, or 2) one of the events | ||
352 | +from the lower layers was a pen release. | ||
353 | + | ||
354 | |||
355 | Module Parameters | ||
356 | ================= | ||
357 | --- tslib/src/ts_read_raw.c~multievent | ||
358 | +++ tslib/src/ts_read_raw.c | ||
359 | @@ -14,10 +14,10 @@ | ||
360 | * | ||
361 | * Read raw pressure, x, y, and timestamp from a touchscreen device. | ||
362 | */ | ||
363 | + | ||
364 | #include "config.h" | ||
365 | |||
366 | #include <stdio.h> | ||
367 | - | ||
368 | #include <stdlib.h> | ||
369 | #ifdef HAVE_UNISTD_H | ||
370 | #include <unistd.h> | ||
371 | @@ -25,79 +25,27 @@ | ||
372 | #include <sys/time.h> | ||
373 | #include <sys/types.h> | ||
374 | |||
375 | -#ifdef USE_INPUT_API | ||
376 | -#include <linux/input.h> | ||
377 | -#else | ||
378 | -struct ts_event { /* Used in UCB1x00 style touchscreens (the default) */ | ||
379 | - unsigned short pressure; | ||
380 | - unsigned short x; | ||
381 | - unsigned short y; | ||
382 | - unsigned short pad; | ||
383 | - struct timeval stamp; | ||
384 | -}; | ||
385 | -struct h3600_ts_event { /* Used in the Compaq IPAQ */ | ||
386 | - unsigned short pressure; | ||
387 | - unsigned short x; | ||
388 | - unsigned short y; | ||
389 | - unsigned short pad; | ||
390 | -}; | ||
391 | -struct mk712_ts_event { /* Used in the Hitachi Webpad */ | ||
392 | - unsigned int header; | ||
393 | - unsigned int x; | ||
394 | - unsigned int y; | ||
395 | - unsigned int reserved; | ||
396 | -}; | ||
397 | -struct arctic2_ts_event { /* Used in the IBM Arctic II */ | ||
398 | - signed short pressure; | ||
399 | - signed int x; | ||
400 | - signed int y; | ||
401 | - int millisecs; | ||
402 | - int flags; | ||
403 | -}; | ||
404 | -struct collie_ts_event { /* Used in the Sharp Zaurus SL-5000d and SL-5500 */ | ||
405 | - long y; | ||
406 | - long x; | ||
407 | - long pressure; | ||
408 | - long long millisecs; | ||
409 | -}; | ||
410 | -struct corgi_ts_event { /* Used in the Sharp Zaurus SL-C700 */ | ||
411 | - short pressure; | ||
412 | - short x; | ||
413 | - short y; | ||
414 | - short millisecs; | ||
415 | -}; | ||
416 | -#endif /* USE_INPUT_API */ | ||
417 | - | ||
418 | #include "tslib-private.h" | ||
419 | |||
420 | -int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr) | ||
421 | -{ | ||
422 | #ifdef USE_INPUT_API | ||
423 | +#include <linux/input.h> | ||
424 | + | ||
425 | +static inline int get_input_event(struct tsdev *ts, struct ts_sample *samp) { | ||
426 | struct input_event ev; | ||
427 | -#else | ||
428 | - struct ts_event *evt; | ||
429 | - struct h3600_ts_event *hevt; | ||
430 | - struct mk712_ts_event *mevt; | ||
431 | - struct arctic2_ts_event *aevt; | ||
432 | - struct collie_ts_event *collie_evt; | ||
433 | - struct corgi_ts_event *corgi_evt; | ||
434 | -#endif /* USE_INPUT_API */ | ||
435 | - int ret; | ||
436 | - int total = 0; | ||
437 | + struct timeval tv = {0, 0}; | ||
438 | + fd_set fdset; | ||
439 | + int ret = 0; | ||
440 | |||
441 | - char *tseventtype=NULL; | ||
442 | - char *defaulttseventtype="UCB1x00"; | ||
443 | + /* event vars */ | ||
444 | + static int curr_x = 0, curr_y = 0; | ||
445 | + int curr_p = 0, next_x = 0, next_y = 0; | ||
446 | |||
447 | -#ifdef USE_INPUT_API | ||
448 | - /* warning: maybe those static vars should be part of the tsdev struct? */ | ||
449 | - static int curr_x = 0, curr_y = 0, curr_p = 0; | ||
450 | - static int got_curr_x = 0, got_curr_y = 0; | ||
451 | - int got_curr_p = 0; | ||
452 | - int next_x, next_y; | ||
453 | + /* state variables */ | ||
454 | + int got_curr_x = 0, got_curr_y = 0, got_curr_p = 0; | ||
455 | int got_next_x = 0, got_next_y = 0; | ||
456 | int got_tstamp = 0; | ||
457 | |||
458 | - while (total < nr) { | ||
459 | + while (1) { | ||
460 | ret = read(ts->fd, &ev, sizeof(struct input_event)); | ||
461 | if (ret < sizeof(struct input_event)) break; | ||
462 | |||
463 | @@ -146,177 +94,231 @@ | ||
464 | samp->tv = ev.time; | ||
465 | } | ||
466 | |||
467 | - if ( (!got_curr_x || !got_curr_y) && !got_curr_p && | ||
468 | - !got_next_x && !got_next_y ) { | ||
469 | - /* | ||
470 | - * The current event is not complete yet. | ||
471 | - * Give the kernel a chance to feed us more. | ||
472 | - */ | ||
473 | - struct timeval tv = {0, 0}; | ||
474 | - fd_set fdset; | ||
475 | - FD_ZERO(&fdset); | ||
476 | - FD_SET(ts->fd, &fdset); | ||
477 | - ret = select(ts->fd+1, &fdset, NULL, NULL, &tv); | ||
478 | - if (ret == 1) continue; | ||
479 | - if (ret == -1) break; | ||
480 | + if (got_curr_x && got_curr_y && got_curr_p) { | ||
481 | + /* we have a complete event */ | ||
482 | + samp->x = curr_x; | ||
483 | + samp->y = curr_y; | ||
484 | + samp->pressure = curr_p; | ||
485 | + ret = 0; /* indicate success */ | ||
486 | + if (got_next_x) curr_x = next_x; | ||
487 | + if (got_next_y) curr_y = next_y; | ||
488 | + break; | ||
489 | } | ||
490 | |||
491 | - /* We consider having a complete ts event */ | ||
492 | - samp->x = curr_x; | ||
493 | - samp->y = curr_y; | ||
494 | - samp->pressure = curr_p; | ||
495 | -#ifdef DEBUG | ||
496 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
497 | -#endif /*DEBUG*/ | ||
498 | - samp++; | ||
499 | - total++; | ||
500 | - | ||
501 | - /* get ready for next event */ | ||
502 | - if (got_next_x) curr_x = next_x; else got_curr_x = 0; | ||
503 | - if (got_next_y) curr_y = next_y; else got_curr_y = 0; | ||
504 | - got_next_x = got_next_y = got_tstamp = 0; | ||
505 | + /* | ||
506 | + * The current event is not complete yet. | ||
507 | + * Give the kernel a chance to feed us more. | ||
508 | + */ | ||
509 | + FD_ZERO(&fdset); | ||
510 | + FD_SET(ts->fd, &fdset); | ||
511 | + ret = select(ts->fd+1, &fdset, NULL, NULL, &tv); | ||
512 | + if (ret == 1) continue; | ||
513 | + if (ret == -1) break; | ||
514 | } | ||
515 | |||
516 | - if (ret) ret = -1; | ||
517 | - if (total) ret = total; | ||
518 | +// fprintf(stdout, "%s: returning %d\n", __FUNCTION__, ret); | ||
519 | + if (ret != 0) ret = -1; | ||
520 | + return ret; | ||
521 | +} | ||
522 | + | ||
523 | #else | ||
524 | + | ||
525 | +struct ucb1x00_ts_event { /* Used in UCB1x00 style touchscreens (the default) */ | ||
526 | + unsigned short pressure; | ||
527 | + unsigned short x; | ||
528 | + unsigned short y; | ||
529 | + unsigned short pad; | ||
530 | + struct timeval stamp; | ||
531 | +}; | ||
532 | +struct h3600_ts_event { /* Used in the Compaq IPAQ */ | ||
533 | + unsigned short pressure; | ||
534 | + unsigned short x; | ||
535 | + unsigned short y; | ||
536 | + unsigned short pad; | ||
537 | +}; | ||
538 | +struct mk712_ts_event { /* Used in the Hitachi Webpad */ | ||
539 | + unsigned int header; | ||
540 | + unsigned int x; | ||
541 | + unsigned int y; | ||
542 | + unsigned int reserved; | ||
543 | +}; | ||
544 | +struct arctic2_ts_event { /* Used in the IBM Arctic II */ | ||
545 | + signed short pressure; | ||
546 | + signed int x; | ||
547 | + signed int y; | ||
548 | + int millisecs; | ||
549 | + int flags; | ||
550 | +}; | ||
551 | +struct collie_ts_event { /* Used in the Sharp Zaurus SL-5000d and SL-5500 */ | ||
552 | + long y; | ||
553 | + long x; | ||
554 | + long pressure; | ||
555 | + long long millisecs; | ||
556 | +}; | ||
557 | +struct corgi_ts_event { /* Used in the Sharp Zaurus SL-C700 */ | ||
558 | + short pressure; | ||
559 | + short x; | ||
560 | + short y; | ||
561 | + short millisecs; | ||
562 | +}; | ||
563 | + | ||
564 | +static inline int get_ucb1x00_event(struct tsdev *ts, struct ts_sample *samp) { | ||
565 | + struct ucb1x00_ts_event evt; | ||
566 | + int ret = read(ts->fd, &evt, sizeof(struct ucb1x00_ts_event)); | ||
567 | + if (ret > 0) { | ||
568 | + samp->x = evt.x; | ||
569 | + samp->y = evt.y; | ||
570 | + samp->pressure = evt.pressure; | ||
571 | + samp->tv.tv_usec = evt.stamp.tv_usec; | ||
572 | + samp->tv.tv_sec = evt.stamp.tv_sec; | ||
573 | + ret = 0; /* success */ | ||
574 | + } | ||
575 | + return ret; | ||
576 | +} | ||
577 | + | ||
578 | +static inline int get_h3600_event(struct tsdev *ts, struct ts_sample *samp) { | ||
579 | + struct h3600_ts_event evt; | ||
580 | + int ret = read(ts->fd, &evt, sizeof(struct h3600_ts_event)); | ||
581 | + if (ret > 0) { | ||
582 | + samp->x = evt.x; | ||
583 | + samp->y = evt.y; | ||
584 | + samp->pressure = evt.pressure; | ||
585 | + gettimeofday(&samp->tv, NULL); | ||
586 | + ret = 0; /* success */ | ||
587 | + } | ||
588 | + return ret; | ||
589 | +} | ||
590 | + | ||
591 | +static inline int get_mk712_event(struct tsdev *ts, struct ts_sample *samp) { | ||
592 | + struct mk712_ts_event evt; | ||
593 | + int ret = read(ts->fd, &evt, sizeof(struct mk712_ts_event)); | ||
594 | + if (ret > 0) { | ||
595 | + samp->x = (short)evt.x; | ||
596 | + samp->y = (short)evt.y; | ||
597 | + if(evt.header==0) | ||
598 | + samp->pressure=1; | ||
599 | + else | ||
600 | + samp->pressure=0; | ||
601 | + gettimeofday(&samp->tv, NULL); | ||
602 | + ret = 0; /* success */ | ||
603 | + } | ||
604 | + return ret; | ||
605 | +} | ||
606 | + | ||
607 | +static inline int get_arctic2_event(struct tsdev *ts, struct ts_sample *samp) { | ||
608 | + struct arctic2_ts_event evt; | ||
609 | + int ret = read(ts->fd, &evt, sizeof(struct arctic2_ts_event)); | ||
610 | + if (ret > 0) { | ||
611 | + samp->x = (short)evt.x; | ||
612 | + samp->y = (short)evt.y; | ||
613 | + samp->pressure = evt.pressure; | ||
614 | + gettimeofday(&samp->tv, NULL); | ||
615 | + ret = 0; /* success */ | ||
616 | + } | ||
617 | + return ret; | ||
618 | +} | ||
619 | + | ||
620 | +static inline int get_collie_event(struct tsdev *ts, struct ts_sample *samp) { | ||
621 | + struct collie_ts_event evt; | ||
622 | + int ret = read(ts->fd, &evt, sizeof(struct collie_ts_event)); | ||
623 | + if (ret > 0) { | ||
624 | + samp->x = evt.x; | ||
625 | + samp->y = evt.y; | ||
626 | + samp->pressure = evt.pressure; | ||
627 | + samp->tv.tv_usec = evt.millisecs % 1000; | ||
628 | + samp->tv.tv_sec = evt.millisecs / 1000; | ||
629 | + ret = 0; /* success */ | ||
630 | + } | ||
631 | + return ret; | ||
632 | +} | ||
633 | + | ||
634 | +static inline int get_corgi_event(struct tsdev *ts, struct ts_sample *samp) { | ||
635 | + struct corgi_ts_event evt; | ||
636 | + int ret = read(ts->fd, &evt, sizeof(struct corgi_ts_event)); | ||
637 | + if (ret > 0) { | ||
638 | + samp->x = evt.x; | ||
639 | + samp->y = evt.y; | ||
640 | + samp->pressure = evt.pressure; | ||
641 | + samp->tv.tv_usec = evt.millisecs % 1000; | ||
642 | + samp->tv.tv_sec = evt.millisecs / 1000; | ||
643 | + ret = 0; /* success */ | ||
644 | + } | ||
645 | + return ret; | ||
646 | +} | ||
647 | + | ||
648 | +#endif | ||
649 | + | ||
650 | +int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr) | ||
651 | +{ | ||
652 | + int ret; | ||
653 | + int total = 0; | ||
654 | + int pen_down = 1; | ||
655 | + static short x_save = 0, y_save = 0; | ||
656 | + static int pthres = -1; | ||
657 | + | ||
658 | +#ifndef USE_INPUT_API | ||
659 | + char *tseventtype=NULL; | ||
660 | + char *defaulttseventtype="UCB1x00"; | ||
661 | tseventtype = getenv("TSLIB_TSEVENTTYPE"); | ||
662 | if(tseventtype==NULL) tseventtype=defaulttseventtype; | ||
663 | +#endif | ||
664 | |||
665 | - if( strcmp(tseventtype,"H3600") == 0) { /* iPAQ style h3600 touchscreen events */ | ||
666 | - hevt = alloca(sizeof(*hevt) * nr); | ||
667 | - ret = read(ts->fd, hevt, sizeof(*hevt) * nr); | ||
668 | - if(ret > 0) { | ||
669 | - int nr = ret / sizeof(*hevt); | ||
670 | - while(ret >= sizeof(*hevt)) { | ||
671 | - samp->x = hevt->x; | ||
672 | - samp->y = hevt->y; | ||
673 | - samp->pressure = hevt->pressure; | ||
674 | -#ifdef DEBUG | ||
675 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
676 | -#endif /*DEBUG*/ | ||
677 | - gettimeofday(&samp->tv,NULL); | ||
678 | - samp++; | ||
679 | - hevt++; | ||
680 | - ret -= sizeof(*hevt); | ||
681 | - } | ||
682 | - } else { | ||
683 | - return -1; | ||
684 | - } | ||
685 | - } else if( strcmp(tseventtype,"MK712") == 0) { /* Hitachi Webpad events */ | ||
686 | - mevt = alloca(sizeof(*mevt) * nr); | ||
687 | - ret = read(ts->fd, mevt, sizeof(*mevt) * nr); | ||
688 | - if(ret > 0) { | ||
689 | - int nr = ret / sizeof(*mevt); | ||
690 | - while(ret >= sizeof(*mevt)) { | ||
691 | - samp->x = (short)mevt->x; | ||
692 | - samp->y = (short)mevt->y; | ||
693 | - if(mevt->header==0) | ||
694 | - samp->pressure=1; | ||
695 | - else | ||
696 | - samp->pressure=0; | ||
697 | -#ifdef DEBUG | ||
698 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
699 | -#endif /*DEBUG*/ | ||
700 | - gettimeofday(&samp->tv,NULL); | ||
701 | - samp++; | ||
702 | - mevt++; | ||
703 | - ret -= sizeof(*mevt); | ||
704 | - } | ||
705 | - } else { | ||
706 | - return -1; | ||
707 | - } | ||
708 | - | ||
709 | - } else if( strcmp(tseventtype,"ARCTIC2") == 0) { /* IBM Arctic II events */ | ||
710 | - aevt = alloca(sizeof(*aevt) * nr); | ||
711 | - ret = read(ts->fd, aevt, sizeof(*aevt) * nr); | ||
712 | - if(ret > 0) { | ||
713 | - int nr = ret / sizeof(*aevt); | ||
714 | - while(ret >= sizeof(*aevt)) { | ||
715 | - samp->x = (short)aevt->x; | ||
716 | - samp->y = (short)aevt->y; | ||
717 | - samp->pressure = aevt->pressure; | ||
718 | -#ifdef DEBUG | ||
719 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
720 | -#endif /*DEBUG*/ | ||
721 | - gettimeofday(&samp->tv,NULL); | ||
722 | - samp++; | ||
723 | - aevt++; | ||
724 | - ret -= sizeof(*aevt); | ||
725 | - } | ||
726 | + while ((total < nr) && pen_down) { | ||
727 | +// fprintf(stdout, "total: %d, nr: %d\n", total, nr); | ||
728 | +#ifdef USE_INPUT_API | ||
729 | + ret = get_input_event(ts, samp); | ||
730 | +#else | ||
731 | + if (strcmp(tseventtype, "H3600") == 0) { | ||
732 | + /* iPAQ style h3600 touchscreen events */ | ||
733 | + ret = get_h3600_event(ts, samp); | ||
734 | + } else if (strcmp(tseventtype, "MK712") == 0) { | ||
735 | + /* Hitachi Webpad events */ | ||
736 | + ret = get_mk712_event(ts, samp); | ||
737 | + } else if (strcmp(tseventtype, "ARCTIC2") == 0) { | ||
738 | + /* IBM Arctic II events */ | ||
739 | + ret = get_arctic2_event(ts, samp); | ||
740 | + } else if (strcmp(tseventtype, "COLLIE") == 0) { | ||
741 | + /* Sharp Zaurus SL-5000d/5500 events */ | ||
742 | + ret = get_collie_event(ts, samp); | ||
743 | + } else if (strcmp(tseventtype,"CORGI") == 0) { | ||
744 | + /* Sharp Zaurus SL-C700 events */ | ||
745 | + ret = get_corgi_event(ts, samp); | ||
746 | } else { | ||
747 | - return -1; | ||
748 | + /* Use normal UCB1x00 type events */ | ||
749 | + ret = get_ucb1x00_event(ts, samp); | ||
750 | } | ||
751 | +#endif | ||
752 | + if (ret != 0) break; | ||
753 | |||
754 | - } else if( strcmp(tseventtype,"COLLIE") == 0) { /* Sharp Zaurus SL-5000d/5500 events */ | ||
755 | - collie_evt = alloca(sizeof(*collie_evt) * nr); | ||
756 | - ret = read(ts->fd, collie_evt, sizeof(*collie_evt) * nr); | ||
757 | - if(ret > 0) { | ||
758 | - int nr = ret / sizeof(*collie_evt); | ||
759 | - while(ret >= sizeof(*collie_evt)) { | ||
760 | - samp->x = collie_evt->x; | ||
761 | - samp->y = collie_evt->y; | ||
762 | - samp->pressure = collie_evt->pressure; | ||
763 | -#ifdef DEBUG | ||
764 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
765 | -#endif /*DEBUG*/ | ||
766 | - samp->tv.tv_usec = collie_evt->millisecs % 1000; | ||
767 | - samp->tv.tv_sec = collie_evt->millisecs / 1000; | ||
768 | - samp++; | ||
769 | - collie_evt++; | ||
770 | - ret -= sizeof(*collie_evt); | ||
771 | + if (pthres == -1) { | ||
772 | + char *pthresvar = getenv("TSLIB_PTHRES"); | ||
773 | + pthres = 100; | ||
774 | + if (pthresvar != NULL) { | ||
775 | + int p = strtol(pthresvar, (char **)NULL, 10); | ||
776 | + if (p != -1) pthres = p; | ||
777 | } | ||
778 | - } else { | ||
779 | - return -1; | ||
780 | } | ||
781 | |||
782 | - } else if( strcmp(tseventtype,"CORGI") == 0) { /* Sharp Zaurus SL-C700 events */ | ||
783 | - corgi_evt = alloca(sizeof(*corgi_evt) * nr); | ||
784 | - ret = read(ts->fd, corgi_evt, sizeof(*corgi_evt) * nr); | ||
785 | - if(ret > 0) { | ||
786 | - int nr = ret / sizeof(*corgi_evt); | ||
787 | - while(ret >= sizeof(*corgi_evt)) { | ||
788 | - samp->x = corgi_evt->x; | ||
789 | - samp->y = corgi_evt->y; | ||
790 | - samp->pressure = corgi_evt->pressure; | ||
791 | -#ifdef DEBUG | ||
792 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
793 | -#endif /*DEBUG*/ | ||
794 | - samp->tv.tv_usec = corgi_evt->millisecs % 1000; | ||
795 | - samp->tv.tv_sec = corgi_evt->millisecs / 1000; | ||
796 | - samp++; | ||
797 | - corgi_evt++; | ||
798 | - ret -= sizeof(*corgi_evt); | ||
799 | - } | ||
800 | + if (samp->pressure < pthres) { | ||
801 | + /* pen released, send events up */ | ||
802 | + pen_down = 0; | ||
803 | + /* set x and y to previous values */ | ||
804 | + samp->x = x_save; | ||
805 | + samp->y = y_save; | ||
806 | } else { | ||
807 | - return -1; | ||
808 | + pen_down = 1; | ||
809 | + x_save = samp->x; | ||
810 | + y_save = samp->y; | ||
811 | } | ||
812 | - | ||
813 | - } else { /* Use normal UCB1x00 type events */ | ||
814 | - evt = alloca(sizeof(*evt) * nr); | ||
815 | - ret = read(ts->fd, evt, sizeof(*evt) * nr); | ||
816 | - if(ret > 0) { | ||
817 | - int nr = ret / sizeof(*evt); | ||
818 | - while(ret >= sizeof(*evt)) { | ||
819 | - samp->x = evt->x; | ||
820 | - samp->y = evt->y; | ||
821 | - samp->pressure = evt->pressure; | ||
822 | #ifdef DEBUG | ||
823 | - fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure); | ||
824 | + fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x, samp->y, samp->pressure); | ||
825 | #endif /*DEBUG*/ | ||
826 | - samp->tv.tv_usec = evt->stamp.tv_usec; | ||
827 | - samp->tv.tv_sec = evt->stamp.tv_sec; | ||
828 | - samp++; | ||
829 | - evt++; | ||
830 | - ret -= sizeof(*evt); | ||
831 | - } | ||
832 | - } else { | ||
833 | - return -1; | ||
834 | - } | ||
835 | + samp++; | ||
836 | + total++; | ||
837 | } | ||
838 | - ret = nr; | ||
839 | -#endif /* USE_INPUT_API */ | ||
840 | |||
841 | + if (ret != 0) ret = -1; | ||
842 | + if (total) ret = total; | ||
843 | return ret; | ||
844 | } | ||
845 | |||
diff --git a/meta/recipes-graphics/tslib/tslib/obsolete_automake_macros.patch b/meta/recipes-graphics/tslib/tslib/obsolete_automake_macros.patch deleted file mode 100644 index 982413e859..0000000000 --- a/meta/recipes-graphics/tslib/tslib/obsolete_automake_macros.patch +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | Upstream-Status: Submitted [https://github.com/kergoth/tslib/pull/14] | ||
2 | |||
3 | Signed-off-by: Marko Lindqvist <cazfi74@gmail.com> | ||
4 | diff -Nurd tslib-1.0/configure.ac tslib-1.0/configure.ac | ||
5 | --- tslib-1.0/configure.ac 2006-08-25 00:02:55.000000000 +0300 | ||
6 | +++ tslib-1.0/configure.ac 2013-01-03 06:05:02.486882412 +0200 | ||
7 | @@ -6,7 +6,7 @@ | ||
8 | # AC_CONFIG_AUX_DIR(config) | ||
9 | AM_INIT_AUTOMAKE(dist-bzip2) | ||
10 | AC_CONFIG_SRCDIR([src/ts_close.c]) | ||
11 | -AM_CONFIG_HEADER(config.h) | ||
12 | +AC_CONFIG_HEADERS(config.h) | ||
13 | |||
14 | PACKAGE_DESCRIPTION="Touchscreen Access Library" | ||
15 | AC_SUBST(PACKAGE_DESCRIPTION) | ||
diff --git a/meta/recipes-graphics/tslib/tslib/set-open-mode-for-ts_calibrate_c.patch b/meta/recipes-graphics/tslib/tslib/set-open-mode-for-ts_calibrate_c.patch deleted file mode 100644 index 738ef9aad1..0000000000 --- a/meta/recipes-graphics/tslib/tslib/set-open-mode-for-ts_calibrate_c.patch +++ /dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | Get patch from: http://permalink.gmane.org/gmane.comp.lib.uclibc.buildroot/27614 | ||
2 | |||
3 | Upstream-Status: Inappropriate [configuration] | ||
4 | |||
5 | diff --git a/tests/ts_calibrate.c b/tests/ts_calibrate.c | ||
6 | index 004517b..c0a9771 100644 | ||
7 | --- a/tests/ts_calibrate.c | ||
8 | +++ b/tests/ts_calibrate.c | ||
9 | @@ -21,6 +21,7 @@ | ||
10 | #include <sys/ioctl.h> | ||
11 | #include <sys/mman.h> | ||
12 | #include <sys/time.h> | ||
13 | +#include <sys/stat.h> | ||
14 | #include <linux/kd.h> | ||
15 | #include <linux/vt.h> | ||
16 | #include <linux/fb.h> | ||
17 | @@ -224,9 +225,11 @@ int main() | ||
18 | for (i = 0; i < 7; i++) printf("%d ", cal.a [i]); | ||
19 | printf("\n"); | ||
20 | if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) { | ||
21 | - cal_fd = open (calfile, O_CREAT | O_RDWR); | ||
22 | + cal_fd = open (calfile, O_CREAT | O_RDWR, | ||
23 | + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); | ||
24 | } else { | ||
25 | - cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR); | ||
26 | + cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, | ||
27 | + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); | ||
28 | } | ||
29 | sprintf (cal_buffer,"%d %d %d %d %d %d %d", | ||
30 | cal.a[1], cal.a[2], cal.a[0], | ||
diff --git a/meta/recipes-graphics/tslib/tslib_1.0.bb b/meta/recipes-graphics/tslib/tslib_1.1.bb index 84bc1ebdc2..4dce8a79dc 100644 --- a/meta/recipes-graphics/tslib/tslib_1.0.bb +++ b/meta/recipes-graphics/tslib/tslib_1.1.bb | |||
@@ -10,21 +10,13 @@ SECTION = "base" | |||
10 | LICENSE = "LGPLv2" | 10 | LICENSE = "LGPLv2" |
11 | LIC_FILES_CHKSUM = "file://COPYING;md5=f30a9716ef3762e3467a2f62bf790f0a" | 11 | LIC_FILES_CHKSUM = "file://COPYING;md5=f30a9716ef3762e3467a2f62bf790f0a" |
12 | 12 | ||
13 | PR = "r21" | 13 | SRC_URI = "https://github.com/kergoth/tslib/releases/download/${PV}/tslib-${PV}.tar.xz;downloadfilename=tslib-${PV}.tar.xz \ |
14 | |||
15 | SRC_URI = "http://download.berlios.de/tslib/tslib-${PV}.tar.bz2 \ | ||
16 | file://fix_version.patch \ | ||
17 | file://0001-Link-plugins-against-libts.patch \ | ||
18 | file://ts.conf \ | 14 | file://ts.conf \ |
19 | file://tslib.sh \ | 15 | file://tslib.sh \ |
20 | file://set-open-mode-for-ts_calibrate_c.patch \ | ||
21 | file://obsolete_automake_macros.patch \ | ||
22 | " | 16 | " |
23 | 17 | ||
24 | SRC_URI[md5sum] = "92b2eb55b1e4ef7e2c0347069389390e" | 18 | SRC_URI[md5sum] = "14771f8607b341bb4b297819d37e837d" |
25 | SRC_URI[sha256sum] = "9c40d914e4f6fe00bdd77137d671c7ce4f211686228f2eb8b2d3c2360bc249c8" | 19 | SRC_URI[sha256sum] = "fe35e5f710ea933b118f710e2ce4403ac076fe69926b570333867d4de082a51c" |
26 | SRC_URI_append_qemumips = " file://32bitBE-support.patch" | ||
27 | SRC_URI_append_qemuppc = " file://32bitBE-support.patch" | ||
28 | 20 | ||
29 | 21 | ||
30 | inherit autotools pkgconfig | 22 | inherit autotools pkgconfig |