summaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics/tslib
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:14:24 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:29:45 +0100
commit29d6678fd546377459ef75cf54abeef5b969b5cf (patch)
tree8edd65790e37a00d01c3f203f773fe4b5012db18 /meta/recipes-graphics/tslib
parentda49de6885ee1bc424e70bc02f21f6ab920efb55 (diff)
downloadpoky-29d6678fd546377459ef75cf54abeef5b969b5cf.tar.gz
Major layout change to the packages directory
Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta/recipes-graphics/tslib')
-rw-r--r--meta/recipes-graphics/tslib/tslib/a780/tslib.sh6
-rw-r--r--meta/recipes-graphics/tslib/tslib/collie/ts.conf5
-rw-r--r--meta/recipes-graphics/tslib/tslib/collie/tslib.sh13
-rw-r--r--meta/recipes-graphics/tslib/tslib/devfs.patch18
-rw-r--r--meta/recipes-graphics/tslib/tslib/e680/tslib.sh6
-rw-r--r--meta/recipes-graphics/tslib/tslib/event1.patch80
-rw-r--r--meta/recipes-graphics/tslib/tslib/fix_version.patch32
-rw-r--r--meta/recipes-graphics/tslib/tslib/jornada56x/ts.conf5
-rw-r--r--meta/recipes-graphics/tslib/tslib/jornada56x/tslib.sh5
-rw-r--r--meta/recipes-graphics/tslib/tslib/jornada6xx/ts.conf5
-rw-r--r--meta/recipes-graphics/tslib/tslib/jornada6xx/tslib.sh5
-rw-r--r--meta/recipes-graphics/tslib/tslib/jornada7xx/ts.conf5
-rw-r--r--meta/recipes-graphics/tslib/tslib/jornada7xx/tslib.sh5
-rw-r--r--meta/recipes-graphics/tslib/tslib/mnci/ts.conf5
-rw-r--r--meta/recipes-graphics/tslib/tslib/mnci/tslib.sh1
-rw-r--r--meta/recipes-graphics/tslib/tslib/multievent.patch843
-rw-r--r--meta/recipes-graphics/tslib/tslib/netbook-pro/ts.conf5
-rw-r--r--meta/recipes-graphics/tslib/tslib/netbook-pro/tslib.sh5
-rw-r--r--meta/recipes-graphics/tslib/tslib/omap1610h2/tslib.sh5
-rw-r--r--meta/recipes-graphics/tslib/tslib/omap5912osk/tslib.sh4
-rw-r--r--meta/recipes-graphics/tslib/tslib/simpad/tslib.sh14
-rw-r--r--meta/recipes-graphics/tslib/tslib/ts.conf25
-rw-r--r--meta/recipes-graphics/tslib/tslib/ts.conf-collie-2.45
-rw-r--r--meta/recipes-graphics/tslib/tslib/ts.conf-simpad-2.45
-rw-r--r--meta/recipes-graphics/tslib/tslib/tslib.sh8
-rw-r--r--meta/recipes-graphics/tslib/tslib_1.0.bb78
26 files changed, 1193 insertions, 0 deletions
diff --git a/meta/recipes-graphics/tslib/tslib/a780/tslib.sh b/meta/recipes-graphics/tslib/tslib/a780/tslib.sh
new file mode 100644
index 0000000000..51cd0f1f36
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/a780/tslib.sh
@@ -0,0 +1,6 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/event1
4TSLIB_CONFFILE=/etc/ts.conf
5
6export TSLIB_TSDEVICE TSLIB_CONFFILE
diff --git a/meta/recipes-graphics/tslib/tslib/collie/ts.conf b/meta/recipes-graphics/tslib/tslib/collie/ts.conf
new file mode 100644
index 0000000000..2099b9b414
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/collie/ts.conf
@@ -0,0 +1,5 @@
1module_raw collie
2module pthres pmin=1
3module variance delta=30
4module dejitter delta=100
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/collie/tslib.sh b/meta/recipes-graphics/tslib/tslib/collie/tslib.sh
new file mode 100644
index 0000000000..664bda426a
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/collie/tslib.sh
@@ -0,0 +1,13 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/touchscreen0
4TSLIB_CONFFILE=/etc/ts.conf
5
6case `uname -r` in
72.4*)
8 TSLIB_TSDEVICE=/dev/ts
9 TSLIB_CONFFILE=/usr/share/tslib/ts.conf-collie-2.4
10 ;;
11esac
12
13export TSLIB_TSDEVICE TSLIB_CONFFILE
diff --git a/meta/recipes-graphics/tslib/tslib/devfs.patch b/meta/recipes-graphics/tslib/tslib/devfs.patch
new file mode 100644
index 0000000000..d7ef0a9589
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/devfs.patch
@@ -0,0 +1,18 @@
1
2#
3# Patch managed by http://www.holgerschurig.de/patcher.html
4#
5
6--- tslib/tests/fbutils.c~devfs.patch
7+++ tslib/tests/fbutils.c
8@@ -44,8 +44,8 @@
9 static unsigned colormap [256];
10 int xres, yres;
11
12-static char *defaultfbdevice = "/dev/fb0";
13-static char *defaultconsoledevice = "/dev/tty";
14+static char *defaultfbdevice = "/dev/fb/0";
15+static char *defaultconsoledevice = "/dev/vc/";
16 static char *fbdevice = NULL;
17 static char *consoledevice = NULL;
18
diff --git a/meta/recipes-graphics/tslib/tslib/e680/tslib.sh b/meta/recipes-graphics/tslib/tslib/e680/tslib.sh
new file mode 100644
index 0000000000..51cd0f1f36
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/e680/tslib.sh
@@ -0,0 +1,6 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/event1
4TSLIB_CONFFILE=/etc/ts.conf
5
6export TSLIB_TSDEVICE TSLIB_CONFFILE
diff --git a/meta/recipes-graphics/tslib/tslib/event1.patch b/meta/recipes-graphics/tslib/tslib/event1.patch
new file mode 100644
index 0000000000..88cc3f3a2a
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/event1.patch
@@ -0,0 +1,80 @@
1
2#
3# Patch managed by http://www.holgerschurig.de/patcher.html
4#
5
6--- tslib/tests/ts_calibrate.c~event1
7+++ tslib/tests/ts_calibrate.c
8@@ -179,11 +179,7 @@
9 if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) {
10 ts = ts_open(tsdevice,0);
11 } else {
12-#ifdef USE_INPUT_API
13- ts = ts_open("/dev/input/event0", 0);
14-#else
15- ts = ts_open("/dev/touchscreen/ucb1x00", 0);
16-#endif /* USE_INPUT_API */
17+ ts = ts_open("/dev/input/event1", 0);
18 }
19
20 if (!ts) {
21--- tslib/tests/ts_print.c~event1
22+++ tslib/tests/ts_print.c
23@@ -28,11 +28,7 @@
24 if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) {
25 ts = ts_open(tsdevice,0);
26 } else {
27-#ifdef USE_INPUT_API
28- ts = ts_open("/dev/input/event0", 0);
29-#else
30- ts = ts_open("/dev/touchscreen/ucb1x00", 0);
31-#endif /* USE_INPUT_API */
32+ ts = ts_open("/dev/input/event1", 0);
33 }
34
35 if (!ts) {
36--- tslib/tests/ts_test.c~event1
37+++ tslib/tests/ts_test.c
38@@ -120,11 +120,7 @@
39 signal(SIGTERM, sig);
40
41 if ((tsdevice = getenv("TSLIB_TSDEVICE")) == NULL) {
42-#ifdef USE_INPUT_API
43- tsdevice = strdup ("/dev/input/event0");
44-#else
45- tsdevice = strdup ("/dev/touchscreen/ucb1x00");
46-#endif /* USE_INPUT_API */
47+ tsdevice = strdup ("/dev/input/event1");
48 }
49
50 ts = ts_open (tsdevice, 0);
51--- tslib/tests/ts_print_raw.c~event1
52+++ tslib/tests/ts_print_raw.c
53@@ -28,11 +28,7 @@
54 if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) {
55 ts = ts_open(tsdevice,0);
56 } else {
57-#ifdef USE_INPUT_API
58- ts = ts_open("/dev/input/event0", 0);
59-#else
60- ts = ts_open("/dev/touchscreen/ucb1x00", 0);
61-#endif /* USE_INPUT_API */
62+ ts = ts_open("/dev/input/event1", 0);
63 }
64
65 if (!ts) {
66--- tslib/tests/ts_harvest.c~event1
67+++ tslib/tests/ts_harvest.c
68@@ -75,11 +75,7 @@
69 signal(SIGTERM, sig);
70
71 if ((tsdevice = getenv("TSLIB_TSDEVICE")) == NULL) {
72-#ifdef USE_INPUT_API
73- tsdevice = strdup ("/dev/input/event0");
74-#else
75- tsdevice = strdup ("/dev/touchscreen/ucb1x00");
76-#endif /* USE_INPUT_API */
77+ tsdevice = strdup ("/dev/input/event1");
78 }
79
80 ts = ts_open (tsdevice, 0);
diff --git a/meta/recipes-graphics/tslib/tslib/fix_version.patch b/meta/recipes-graphics/tslib/tslib/fix_version.patch
new file mode 100644
index 0000000000..d6a0ebd0f3
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/fix_version.patch
@@ -0,0 +1,32 @@
1---
2 configure.ac | 10 +++++-----
3 1 file changed, 5 insertions(+), 5 deletions(-)
4
5Index: tslib-1.0/configure.ac
6===================================================================
7--- tslib-1.0.orig/configure.ac 2006-08-24 22:02:55.000000000 +0100
8+++ tslib-1.0/configure.ac 2007-07-09 21:04:38.000000000 +0100
9@@ -2,7 +2,7 @@
10 # Process this file with autoconf to produce a configure script.
11
12 AC_PREREQ(2.57)
13-AC_INIT(tslib, 0.0.2, kergoth@handhelds.org)
14+AC_INIT(tslib, 1.0.0, kergoth@handhelds.org)
15 # AC_CONFIG_AUX_DIR(config)
16 AM_INIT_AUTOMAKE(dist-bzip2)
17 AC_CONFIG_SRCDIR([src/ts_close.c])
18@@ -193,10 +193,10 @@ TS_CONF='${sysconfdir}/ts.conf'
19 AC_SUBST(TS_CONF)
20
21 # Library versioning
22-LT_RELEASE=0.0
23-LT_CURRENT=1
24-LT_REVISION=1
25-LT_AGE=1
26+LT_RELEASE=1.0
27+LT_CURRENT=0
28+LT_REVISION=0
29+LT_AGE=0
30 AC_SUBST(LT_RELEASE)
31 AC_SUBST(LT_CURRENT)
32 AC_SUBST(LT_REVISION)
diff --git a/meta/recipes-graphics/tslib/tslib/jornada56x/ts.conf b/meta/recipes-graphics/tslib/tslib/jornada56x/ts.conf
new file mode 100644
index 0000000000..20729b6154
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/jornada56x/ts.conf
@@ -0,0 +1,5 @@
1module_raw h3600
2module pthres pmin=1
3module variance delta=30
4module dejitter delta=100
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/jornada56x/tslib.sh b/meta/recipes-graphics/tslib/tslib/jornada56x/tslib.sh
new file mode 100644
index 0000000000..8f907b0755
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/jornada56x/tslib.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/tsraw0
4
5export TSLIB_TSDEVICE
diff --git a/meta/recipes-graphics/tslib/tslib/jornada6xx/ts.conf b/meta/recipes-graphics/tslib/tslib/jornada6xx/ts.conf
new file mode 100644
index 0000000000..20729b6154
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/jornada6xx/ts.conf
@@ -0,0 +1,5 @@
1module_raw h3600
2module pthres pmin=1
3module variance delta=30
4module dejitter delta=100
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/jornada6xx/tslib.sh b/meta/recipes-graphics/tslib/tslib/jornada6xx/tslib.sh
new file mode 100644
index 0000000000..1b5db781c1
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/jornada6xx/tslib.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/ts0
4
5export TSLIB_TSDEVICE
diff --git a/meta/recipes-graphics/tslib/tslib/jornada7xx/ts.conf b/meta/recipes-graphics/tslib/tslib/jornada7xx/ts.conf
new file mode 100644
index 0000000000..09309719f2
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/jornada7xx/ts.conf
@@ -0,0 +1,5 @@
1module_raw input
2module pthres pmin=1
3module variance delta=30
4module dejitter delta=100
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/jornada7xx/tslib.sh b/meta/recipes-graphics/tslib/tslib/jornada7xx/tslib.sh
new file mode 100644
index 0000000000..040f4de3d5
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/jornada7xx/tslib.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/event1
4
5export TSLIB_TSDEVICE
diff --git a/meta/recipes-graphics/tslib/tslib/mnci/ts.conf b/meta/recipes-graphics/tslib/tslib/mnci/ts.conf
new file mode 100644
index 0000000000..adff17717b
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/mnci/ts.conf
@@ -0,0 +1,5 @@
1module_raw input
2module pthres pmin=600
3module variance delta=30
4module dejitter delta=100
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/mnci/tslib.sh b/meta/recipes-graphics/tslib/tslib/mnci/tslib.sh
new file mode 100644
index 0000000000..07928f226d
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/mnci/tslib.sh
@@ -0,0 +1 @@
export TSLIB_TSDEVICE=/dev/input/event1
diff --git a/meta/recipes-graphics/tslib/tslib/multievent.patch b/meta/recipes-graphics/tslib/tslib/multievent.patch
new file mode 100644
index 0000000000..854e7af5dd
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/multievent.patch
@@ -0,0 +1,843 @@
1--- tslib/plugins/linear.c~multievent
2+++ tslib/plugins/linear.c
3@@ -39,14 +39,12 @@
4 linear_read(struct tslib_module_info *info, struct ts_sample *samp, int nr)
5 {
6 struct tslib_linear *lin = (struct tslib_linear *)info;
7- int ret;
8+ int ret, i = 0;
9 int xtemp,ytemp;
10
11 ret = info->next->ops->read(info->next, samp, nr);
12 if (ret >= 0) {
13- int nr;
14-
15- for (nr = 0; nr < ret; nr++, samp++) {
16+ for (i = 0; i < ret; i++, samp++) {
17 #ifdef DEBUG
18 fprintf(stderr,"BEFORE CALIB--------------------> %d %d %d\n",samp->x, samp->y, samp->pressure);
19 #endif /*DEBUG*/
20@@ -66,6 +64,7 @@
21 samp->y = tmp;
22 }
23 }
24+ ret = i;
25 }
26
27 return ret;
28--- tslib/plugins/dejitter.c~multievent
29+++ tslib/plugins/dejitter.c
30@@ -24,7 +24,6 @@
31
32 struct tslib_threshold {
33 struct tslib_module_info module;
34- int pthreshold;
35 int xdelta;
36 int ydelta;
37 int delta2;
38@@ -36,40 +35,28 @@
39 static int threshold_read(struct tslib_module_info *info, struct ts_sample *samp, int nr)
40 {
41 struct tslib_threshold *thr = (struct tslib_threshold *)info;
42- struct ts_sample *s;
43- int ret;
44+ struct ts_sample *src = samp, *dest = samp;
45+ int ret, i = 0;
46
47 ret = info->next->ops->read(info->next, samp, nr);
48 if (ret >= 0) {
49- int nr = 0;
50-
51- for (s = samp; s < samp + ret; s++) {
52+ for (i = 0; i < ret; i++, samp++) {
53 int dr2;
54 #ifdef DEBUG
55- fprintf(stderr,"BEFORE DEJITTER---------------> %d %d %d\n",s->x,s->y,s->pressure);
56+ fprintf(stderr,"BEFORE DEJITTER---------------> %d %d %d\n", samp->x, samp->y, samp->pressure);
57 #endif /*DEBUG*/
58- thr->down = (s->pressure >= thr->pthreshold);
59- if (thr->down) {
60- dr2 = (thr->x - s->x)*(thr->x - s->x)
61- + (thr->y - s->y)*(thr->y - s->y);
62- if(dr2 < thr->delta2) {
63- s->x = thr->x;
64- s->y = thr->y;
65- } else {
66- thr->x = s->x;
67- thr->y = s->y;
68- }
69-
70+ dr2 = (thr->x - samp->x)*(thr->x - samp->x)
71+ + (thr->y - samp->y)*(thr->y - samp->y);
72+ if(dr2 < thr->delta2) {
73+ samp->x = thr->x;
74+ samp->y = thr->y;
75 } else {
76- s->x = thr->x;
77- s->y = thr->y;
78+ thr->x = samp->x;
79+ thr->y = samp->y;
80 }
81-
82-
83- samp[nr++] = *s;
84 }
85
86- ret = nr;
87+ ret = i;
88 }
89 return ret;
90 }
91@@ -106,10 +93,6 @@
92 thr->ydelta = v;
93 break;
94
95- case 3:
96- thr->pthreshold = v;
97- break;
98-
99 default:
100 return -1;
101 }
102@@ -120,7 +103,6 @@
103 {
104 { "xdelta", (void *)1, threshold_limit },
105 { "ydelta", (void *)2, threshold_limit },
106- { "pthreshold", (void *)3, threshold_limit }
107 };
108
109 //#define NR_VARS (sizeof(threshold_vars) / sizeof(threshold_vars[0]))
110@@ -138,7 +120,6 @@
111
112 thr->xdelta = 10;
113 thr->ydelta = 10;
114- thr->pthreshold = 100;
115
116 if (tslib_parse_vars(&thr->module, threshold_vars, NR_VARS, params)) {
117 free(thr);
118--- tslib/plugins/variance.c~multievent
119+++ tslib/plugins/variance.c
120@@ -9,25 +9,36 @@
121 * $Id: variance.c,v 1.3 2002/11/08 23:28:55 dlowder Exp $
122 *
123 * Variance filter for touchscreen values
124+ *
125+ * Policy question (applies to all tslib modules that consume events):
126+ * 1) User requests a read of 5 events using nr.
127+ * 2) Lower layers return us 4 events.
128+ * 3) Perform variance calculation, we now only have _1_ event.
129+ * 4) Do we, a) duplicate this data across the user requested 4 events,
130+ * b) push up the single event
131+ * c) loop on the read from the lower layers to obtain
132+ * the user's requested number of events, unless we hit
133+ * a pen_up.
134 */
135+
136 #include <errno.h>
137 #include <stdlib.h>
138 #include <string.h>
139 #include <limits.h>
140-
141 #include <stdio.h>
142
143 #include "tslib.h"
144 #include "tslib-filter.h"
145
146+#define NR_INIT -1
147 #define NR_LAST 4
148
149 struct tslib_variance {
150 struct tslib_module_info module;
151 int nr;
152- unsigned int pthreshold;
153 unsigned int xlimit;
154 unsigned int ylimit;
155+ unsigned int pthreshold;
156 struct ts_sample last[NR_LAST];
157 };
158
159@@ -37,8 +48,7 @@
160 * least variance, and average them.
161 */
162 static int
163-variance_calculate(struct tslib_variance *var, struct ts_sample *samp,
164- struct ts_sample *s)
165+variance_calculate(struct tslib_variance *var, struct ts_sample *dest, struct ts_sample *src)
166 {
167 int i, j;
168 int diff_x, min_x, i_x, j_x;
169@@ -100,11 +110,11 @@
170 }
171 }
172
173- samp->x = (var->last[i_x].x + var->last[j_x].x) / 2;
174- samp->y = (var->last[i_y].y + var->last[j_y].y) / 2;
175- samp->pressure = (var->last[i_p].pressure + var->last[j_p].pressure) / 2;
176- samp->tv.tv_sec = s->tv.tv_sec;
177- samp->tv.tv_usec = s->tv.tv_usec;
178+ dest->x = (var->last[i_x].x + var->last[j_x].x) / 2;
179+ dest->y = (var->last[i_y].y + var->last[j_y].y) / 2;
180+ dest->pressure = (var->last[i_p].pressure + var->last[j_p].pressure) / 2;
181+ dest->tv.tv_sec = src->tv.tv_sec;
182+ dest->tv.tv_usec = src->tv.tv_usec;
183
184 return 1;
185 }
186@@ -112,55 +122,57 @@
187 static int variance_read(struct tslib_module_info *info, struct ts_sample *samp, int nr)
188 {
189 struct tslib_variance *var = (struct tslib_variance *)info;
190- struct ts_sample *s;
191- int ret;
192-
193- ret = info->next->ops->read(info->next, samp, nr);
194- if (ret >= 0) {
195- int nr = 0;
196-
197- for (s = samp; s < samp + ret; s++) {
198- if (s->pressure < var->pthreshold) {
199- /*
200- * Pen was released. Reset our state and
201- * pass up the release information.
202- */
203-// samp[nr].x = 0;
204-// samp[nr].y = 0;
205- samp[nr].pressure = s->pressure;
206- samp[nr].tv.tv_sec = s->tv.tv_sec;
207- samp[nr].tv.tv_usec = s->tv.tv_usec;
208-
209- nr++;
210-
211- var->nr = 0;
212- continue;
213- } else if (var->nr == -1) {
214- /*
215- * Pen was pressed. Inform upper layers
216- * immediately.
217- */
218- samp[nr] = *s;
219- nr++;
220- }
221-
222- if (var->nr >= 0) {
223- var->last[var->nr].x = s->x;
224- var->last[var->nr].y = s->y;
225- var->last[var->nr].pressure = s->pressure;
226- }
227-
228- var->nr++;
229+ struct ts_sample *src = samp, *dest = samp;
230+ int ret, i = 0;
231
232- if (var->nr == NR_LAST) {
233- if (variance_calculate(var, samp + nr, s))
234- nr++;
235- var->nr = 0;
236+ /*
237+ * NOTES:
238+ *
239+ * Loop on read, collecting events until we hit nr, unless
240+ * we hit a pen up or encounter a failure.
241+ */
242+ while ((i < nr) && (ret != -1)) {
243+ ret = info->next->ops->read(info->next, dest + i, nr - i);
244+ if (ret >= 0) {
245+ for (src = dest + i; src < dest + ret; src++) {
246+ if (src->pressure < var->pthreshold) {
247+ /* pen released, reset var->nr,
248+ * do a calc based on what we have so
249+ * far, and let this event flow up */
250+ if (variance_calculate(var, dest + i, src))
251+ i++;
252+ var->nr = NR_INIT;
253+ ret = -1; /* break outer loop, push up event */
254+ break;
255+ } else if (var->nr == NR_INIT) {
256+ /*
257+ * First pen down event. Inform upper layers
258+ * immediately for responsiveness.
259+ */
260+ var->nr = 0;
261+ i++;
262+ ret = -1; /* break outer loop */
263+ break;
264+ }
265+
266+ if (var->nr >= 0) {
267+ var->last[var->nr].x = src->x;
268+ var->last[var->nr].y = src->y;
269+ var->last[var->nr].pressure = src->pressure;
270+ }
271+
272+ var->nr++;
273+
274+ if (var->nr == NR_LAST) {
275+ if (variance_calculate(var, dest + i, src))
276+ i++;
277+ var->nr = 0;
278+ }
279 }
280 }
281-
282- ret = nr;
283 }
284+ /* if we've collected at least one event, send it up */
285+ if (i != 0) ret = i;
286 return ret;
287 }
288
289@@ -196,10 +208,6 @@
290 var->ylimit = v;
291 break;
292
293- case 3:
294- var->pthreshold = v;
295- break;
296-
297 default:
298 return -1;
299 }
300@@ -210,7 +218,6 @@
301 {
302 { "xlimit", (void *)1, variance_limit },
303 { "ylimit", (void *)2, variance_limit },
304- { "pthreshold", (void *)3, variance_limit }
305 };
306
307 #define NR_VARS (sizeof(variance_vars) / sizeof(variance_vars[0]))
308@@ -218,6 +225,7 @@
309 struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
310 {
311 struct tslib_variance *var;
312+ char *pthresvar;
313
314 var = malloc(sizeof(struct tslib_variance));
315 if (var == NULL)
316@@ -225,10 +233,15 @@
317
318 var->module.ops = &variance_ops;
319
320- var->nr = -1;
321+ var->nr = NR_INIT;
322 var->xlimit = 160;
323 var->ylimit = 160;
324 var->pthreshold = 100;
325+ pthresvar = getenv("TSLIB_PTHRES");
326+ if (pthresvar != NULL) {
327+ int p = strtol(pthresvar, (char **)NULL, 10);
328+ if (p != -1) var->pthreshold = p;
329+ }
330
331 if (tslib_parse_vars(&var->module, variance_vars, NR_VARS, params)) {
332 free(var);
333--- tslib/README~multievent
334+++ tslib/README
335@@ -36,6 +36,19 @@
336 usages. They are by no means exhaustive, nor probably even good examples.
337 They are basically the programs I used to test this library.
338
339+Module Creation Notes
340+=====================
341+
342+For those creating tslib modules, it is important to note a couple things with
343+regard to handling of the ability for a user to request more than one ts event
344+at a time. The first thing to note is that the lower layers may send up less
345+events than the user requested, but only if that was a result of a pen release.
346+Next, your module should send up just as many events as the user requested in
347+nr. If your module is one that consumes events, such as variance, then you
348+loop on the read from the lower layers, and only send the events up when
349+1) you have the number of events requested by the user, or 2) one of the events
350+from the lower layers was a pen release.
351+
352
353 Module Parameters
354 =================
355--- tslib/src/ts_read_raw.c~multievent
356+++ tslib/src/ts_read_raw.c
357@@ -14,10 +14,10 @@
358 *
359 * Read raw pressure, x, y, and timestamp from a touchscreen device.
360 */
361+
362 #include "config.h"
363
364 #include <stdio.h>
365-
366 #include <stdlib.h>
367 #ifdef HAVE_UNISTD_H
368 #include <unistd.h>
369@@ -25,79 +25,27 @@
370 #include <sys/time.h>
371 #include <sys/types.h>
372
373-#ifdef USE_INPUT_API
374-#include <linux/input.h>
375-#else
376-struct ts_event { /* Used in UCB1x00 style touchscreens (the default) */
377- unsigned short pressure;
378- unsigned short x;
379- unsigned short y;
380- unsigned short pad;
381- struct timeval stamp;
382-};
383-struct h3600_ts_event { /* Used in the Compaq IPAQ */
384- unsigned short pressure;
385- unsigned short x;
386- unsigned short y;
387- unsigned short pad;
388-};
389-struct mk712_ts_event { /* Used in the Hitachi Webpad */
390- unsigned int header;
391- unsigned int x;
392- unsigned int y;
393- unsigned int reserved;
394-};
395-struct arctic2_ts_event { /* Used in the IBM Arctic II */
396- signed short pressure;
397- signed int x;
398- signed int y;
399- int millisecs;
400- int flags;
401-};
402-struct collie_ts_event { /* Used in the Sharp Zaurus SL-5000d and SL-5500 */
403- long y;
404- long x;
405- long pressure;
406- long long millisecs;
407-};
408-struct corgi_ts_event { /* Used in the Sharp Zaurus SL-C700 */
409- short pressure;
410- short x;
411- short y;
412- short millisecs;
413-};
414-#endif /* USE_INPUT_API */
415-
416 #include "tslib-private.h"
417
418-int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr)
419-{
420 #ifdef USE_INPUT_API
421+#include <linux/input.h>
422+
423+static inline int get_input_event(struct tsdev *ts, struct ts_sample *samp) {
424 struct input_event ev;
425-#else
426- struct ts_event *evt;
427- struct h3600_ts_event *hevt;
428- struct mk712_ts_event *mevt;
429- struct arctic2_ts_event *aevt;
430- struct collie_ts_event *collie_evt;
431- struct corgi_ts_event *corgi_evt;
432-#endif /* USE_INPUT_API */
433- int ret;
434- int total = 0;
435+ struct timeval tv = {0, 0};
436+ fd_set fdset;
437+ int ret = 0;
438
439- char *tseventtype=NULL;
440- char *defaulttseventtype="UCB1x00";
441+ /* event vars */
442+ static int curr_x = 0, curr_y = 0;
443+ int curr_p = 0, next_x = 0, next_y = 0;
444
445-#ifdef USE_INPUT_API
446- /* warning: maybe those static vars should be part of the tsdev struct? */
447- static int curr_x = 0, curr_y = 0, curr_p = 0;
448- static int got_curr_x = 0, got_curr_y = 0;
449- int got_curr_p = 0;
450- int next_x, next_y;
451+ /* state variables */
452+ int got_curr_x = 0, got_curr_y = 0, got_curr_p = 0;
453 int got_next_x = 0, got_next_y = 0;
454 int got_tstamp = 0;
455
456- while (total < nr) {
457+ while (1) {
458 ret = read(ts->fd, &ev, sizeof(struct input_event));
459 if (ret < sizeof(struct input_event)) break;
460
461@@ -146,177 +94,231 @@
462 samp->tv = ev.time;
463 }
464
465- if ( (!got_curr_x || !got_curr_y) && !got_curr_p &&
466- !got_next_x && !got_next_y ) {
467- /*
468- * The current event is not complete yet.
469- * Give the kernel a chance to feed us more.
470- */
471- struct timeval tv = {0, 0};
472- fd_set fdset;
473- FD_ZERO(&fdset);
474- FD_SET(ts->fd, &fdset);
475- ret = select(ts->fd+1, &fdset, NULL, NULL, &tv);
476- if (ret == 1) continue;
477- if (ret == -1) break;
478+ if (got_curr_x && got_curr_y && got_curr_p) {
479+ /* we have a complete event */
480+ samp->x = curr_x;
481+ samp->y = curr_y;
482+ samp->pressure = curr_p;
483+ ret = 0; /* indicate success */
484+ if (got_next_x) curr_x = next_x;
485+ if (got_next_y) curr_y = next_y;
486+ break;
487 }
488
489- /* We consider having a complete ts event */
490- samp->x = curr_x;
491- samp->y = curr_y;
492- samp->pressure = curr_p;
493-#ifdef DEBUG
494- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
495-#endif /*DEBUG*/
496- samp++;
497- total++;
498-
499- /* get ready for next event */
500- if (got_next_x) curr_x = next_x; else got_curr_x = 0;
501- if (got_next_y) curr_y = next_y; else got_curr_y = 0;
502- got_next_x = got_next_y = got_tstamp = 0;
503+ /*
504+ * The current event is not complete yet.
505+ * Give the kernel a chance to feed us more.
506+ */
507+ FD_ZERO(&fdset);
508+ FD_SET(ts->fd, &fdset);
509+ ret = select(ts->fd+1, &fdset, NULL, NULL, &tv);
510+ if (ret == 1) continue;
511+ if (ret == -1) break;
512 }
513
514- if (ret) ret = -1;
515- if (total) ret = total;
516+// fprintf(stdout, "%s: returning %d\n", __FUNCTION__, ret);
517+ if (ret != 0) ret = -1;
518+ return ret;
519+}
520+
521 #else
522+
523+struct ucb1x00_ts_event { /* Used in UCB1x00 style touchscreens (the default) */
524+ unsigned short pressure;
525+ unsigned short x;
526+ unsigned short y;
527+ unsigned short pad;
528+ struct timeval stamp;
529+};
530+struct h3600_ts_event { /* Used in the Compaq IPAQ */
531+ unsigned short pressure;
532+ unsigned short x;
533+ unsigned short y;
534+ unsigned short pad;
535+};
536+struct mk712_ts_event { /* Used in the Hitachi Webpad */
537+ unsigned int header;
538+ unsigned int x;
539+ unsigned int y;
540+ unsigned int reserved;
541+};
542+struct arctic2_ts_event { /* Used in the IBM Arctic II */
543+ signed short pressure;
544+ signed int x;
545+ signed int y;
546+ int millisecs;
547+ int flags;
548+};
549+struct collie_ts_event { /* Used in the Sharp Zaurus SL-5000d and SL-5500 */
550+ long y;
551+ long x;
552+ long pressure;
553+ long long millisecs;
554+};
555+struct corgi_ts_event { /* Used in the Sharp Zaurus SL-C700 */
556+ short pressure;
557+ short x;
558+ short y;
559+ short millisecs;
560+};
561+
562+static inline int get_ucb1x00_event(struct tsdev *ts, struct ts_sample *samp) {
563+ struct ucb1x00_ts_event evt;
564+ int ret = read(ts->fd, &evt, sizeof(struct ucb1x00_ts_event));
565+ if (ret > 0) {
566+ samp->x = evt.x;
567+ samp->y = evt.y;
568+ samp->pressure = evt.pressure;
569+ samp->tv.tv_usec = evt.stamp.tv_usec;
570+ samp->tv.tv_sec = evt.stamp.tv_sec;
571+ ret = 0; /* success */
572+ }
573+ return ret;
574+}
575+
576+static inline int get_h3600_event(struct tsdev *ts, struct ts_sample *samp) {
577+ struct h3600_ts_event evt;
578+ int ret = read(ts->fd, &evt, sizeof(struct h3600_ts_event));
579+ if (ret > 0) {
580+ samp->x = evt.x;
581+ samp->y = evt.y;
582+ samp->pressure = evt.pressure;
583+ gettimeofday(&samp->tv, NULL);
584+ ret = 0; /* success */
585+ }
586+ return ret;
587+}
588+
589+static inline int get_mk712_event(struct tsdev *ts, struct ts_sample *samp) {
590+ struct mk712_ts_event evt;
591+ int ret = read(ts->fd, &evt, sizeof(struct mk712_ts_event));
592+ if (ret > 0) {
593+ samp->x = (short)evt.x;
594+ samp->y = (short)evt.y;
595+ if(evt.header==0)
596+ samp->pressure=1;
597+ else
598+ samp->pressure=0;
599+ gettimeofday(&samp->tv, NULL);
600+ ret = 0; /* success */
601+ }
602+ return ret;
603+}
604+
605+static inline int get_arctic2_event(struct tsdev *ts, struct ts_sample *samp) {
606+ struct arctic2_ts_event evt;
607+ int ret = read(ts->fd, &evt, sizeof(struct arctic2_ts_event));
608+ if (ret > 0) {
609+ samp->x = (short)evt.x;
610+ samp->y = (short)evt.y;
611+ samp->pressure = evt.pressure;
612+ gettimeofday(&samp->tv, NULL);
613+ ret = 0; /* success */
614+ }
615+ return ret;
616+}
617+
618+static inline int get_collie_event(struct tsdev *ts, struct ts_sample *samp) {
619+ struct collie_ts_event evt;
620+ int ret = read(ts->fd, &evt, sizeof(struct collie_ts_event));
621+ if (ret > 0) {
622+ samp->x = evt.x;
623+ samp->y = evt.y;
624+ samp->pressure = evt.pressure;
625+ samp->tv.tv_usec = evt.millisecs % 1000;
626+ samp->tv.tv_sec = evt.millisecs / 1000;
627+ ret = 0; /* success */
628+ }
629+ return ret;
630+}
631+
632+static inline int get_corgi_event(struct tsdev *ts, struct ts_sample *samp) {
633+ struct corgi_ts_event evt;
634+ int ret = read(ts->fd, &evt, sizeof(struct corgi_ts_event));
635+ if (ret > 0) {
636+ samp->x = evt.x;
637+ samp->y = evt.y;
638+ samp->pressure = evt.pressure;
639+ samp->tv.tv_usec = evt.millisecs % 1000;
640+ samp->tv.tv_sec = evt.millisecs / 1000;
641+ ret = 0; /* success */
642+ }
643+ return ret;
644+}
645+
646+#endif
647+
648+int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr)
649+{
650+ int ret;
651+ int total = 0;
652+ int pen_down = 1;
653+ static short x_save = 0, y_save = 0;
654+ static int pthres = -1;
655+
656+#ifndef USE_INPUT_API
657+ char *tseventtype=NULL;
658+ char *defaulttseventtype="UCB1x00";
659 tseventtype = getenv("TSLIB_TSEVENTTYPE");
660 if(tseventtype==NULL) tseventtype=defaulttseventtype;
661+#endif
662
663- if( strcmp(tseventtype,"H3600") == 0) { /* iPAQ style h3600 touchscreen events */
664- hevt = alloca(sizeof(*hevt) * nr);
665- ret = read(ts->fd, hevt, sizeof(*hevt) * nr);
666- if(ret > 0) {
667- int nr = ret / sizeof(*hevt);
668- while(ret >= sizeof(*hevt)) {
669- samp->x = hevt->x;
670- samp->y = hevt->y;
671- samp->pressure = hevt->pressure;
672-#ifdef DEBUG
673- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
674-#endif /*DEBUG*/
675- gettimeofday(&samp->tv,NULL);
676- samp++;
677- hevt++;
678- ret -= sizeof(*hevt);
679- }
680- } else {
681- return -1;
682- }
683- } else if( strcmp(tseventtype,"MK712") == 0) { /* Hitachi Webpad events */
684- mevt = alloca(sizeof(*mevt) * nr);
685- ret = read(ts->fd, mevt, sizeof(*mevt) * nr);
686- if(ret > 0) {
687- int nr = ret / sizeof(*mevt);
688- while(ret >= sizeof(*mevt)) {
689- samp->x = (short)mevt->x;
690- samp->y = (short)mevt->y;
691- if(mevt->header==0)
692- samp->pressure=1;
693- else
694- samp->pressure=0;
695-#ifdef DEBUG
696- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
697-#endif /*DEBUG*/
698- gettimeofday(&samp->tv,NULL);
699- samp++;
700- mevt++;
701- ret -= sizeof(*mevt);
702- }
703- } else {
704- return -1;
705- }
706-
707- } else if( strcmp(tseventtype,"ARCTIC2") == 0) { /* IBM Arctic II events */
708- aevt = alloca(sizeof(*aevt) * nr);
709- ret = read(ts->fd, aevt, sizeof(*aevt) * nr);
710- if(ret > 0) {
711- int nr = ret / sizeof(*aevt);
712- while(ret >= sizeof(*aevt)) {
713- samp->x = (short)aevt->x;
714- samp->y = (short)aevt->y;
715- samp->pressure = aevt->pressure;
716-#ifdef DEBUG
717- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
718-#endif /*DEBUG*/
719- gettimeofday(&samp->tv,NULL);
720- samp++;
721- aevt++;
722- ret -= sizeof(*aevt);
723- }
724+ while ((total < nr) && pen_down) {
725+// fprintf(stdout, "total: %d, nr: %d\n", total, nr);
726+#ifdef USE_INPUT_API
727+ ret = get_input_event(ts, samp);
728+#else
729+ if (strcmp(tseventtype, "H3600") == 0) {
730+ /* iPAQ style h3600 touchscreen events */
731+ ret = get_h3600_event(ts, samp);
732+ } else if (strcmp(tseventtype, "MK712") == 0) {
733+ /* Hitachi Webpad events */
734+ ret = get_mk712_event(ts, samp);
735+ } else if (strcmp(tseventtype, "ARCTIC2") == 0) {
736+ /* IBM Arctic II events */
737+ ret = get_arctic2_event(ts, samp);
738+ } else if (strcmp(tseventtype, "COLLIE") == 0) {
739+ /* Sharp Zaurus SL-5000d/5500 events */
740+ ret = get_collie_event(ts, samp);
741+ } else if (strcmp(tseventtype,"CORGI") == 0) {
742+ /* Sharp Zaurus SL-C700 events */
743+ ret = get_corgi_event(ts, samp);
744 } else {
745- return -1;
746+ /* Use normal UCB1x00 type events */
747+ ret = get_ucb1x00_event(ts, samp);
748 }
749+#endif
750+ if (ret != 0) break;
751
752- } else if( strcmp(tseventtype,"COLLIE") == 0) { /* Sharp Zaurus SL-5000d/5500 events */
753- collie_evt = alloca(sizeof(*collie_evt) * nr);
754- ret = read(ts->fd, collie_evt, sizeof(*collie_evt) * nr);
755- if(ret > 0) {
756- int nr = ret / sizeof(*collie_evt);
757- while(ret >= sizeof(*collie_evt)) {
758- samp->x = collie_evt->x;
759- samp->y = collie_evt->y;
760- samp->pressure = collie_evt->pressure;
761-#ifdef DEBUG
762- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
763-#endif /*DEBUG*/
764- samp->tv.tv_usec = collie_evt->millisecs % 1000;
765- samp->tv.tv_sec = collie_evt->millisecs / 1000;
766- samp++;
767- collie_evt++;
768- ret -= sizeof(*collie_evt);
769+ if (pthres == -1) {
770+ char *pthresvar = getenv("TSLIB_PTHRES");
771+ pthres = 100;
772+ if (pthresvar != NULL) {
773+ int p = strtol(pthresvar, (char **)NULL, 10);
774+ if (p != -1) pthres = p;
775 }
776- } else {
777- return -1;
778 }
779
780- } else if( strcmp(tseventtype,"CORGI") == 0) { /* Sharp Zaurus SL-C700 events */
781- corgi_evt = alloca(sizeof(*corgi_evt) * nr);
782- ret = read(ts->fd, corgi_evt, sizeof(*corgi_evt) * nr);
783- if(ret > 0) {
784- int nr = ret / sizeof(*corgi_evt);
785- while(ret >= sizeof(*corgi_evt)) {
786- samp->x = corgi_evt->x;
787- samp->y = corgi_evt->y;
788- samp->pressure = corgi_evt->pressure;
789-#ifdef DEBUG
790- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
791-#endif /*DEBUG*/
792- samp->tv.tv_usec = corgi_evt->millisecs % 1000;
793- samp->tv.tv_sec = corgi_evt->millisecs / 1000;
794- samp++;
795- corgi_evt++;
796- ret -= sizeof(*corgi_evt);
797- }
798+ if (samp->pressure < pthres) {
799+ /* pen released, send events up */
800+ pen_down = 0;
801+ /* set x and y to previous values */
802+ samp->x = x_save;
803+ samp->y = y_save;
804 } else {
805- return -1;
806+ pen_down = 1;
807+ x_save = samp->x;
808+ y_save = samp->y;
809 }
810-
811- } else { /* Use normal UCB1x00 type events */
812- evt = alloca(sizeof(*evt) * nr);
813- ret = read(ts->fd, evt, sizeof(*evt) * nr);
814- if(ret > 0) {
815- int nr = ret / sizeof(*evt);
816- while(ret >= sizeof(*evt)) {
817- samp->x = evt->x;
818- samp->y = evt->y;
819- samp->pressure = evt->pressure;
820 #ifdef DEBUG
821- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
822+ fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x, samp->y, samp->pressure);
823 #endif /*DEBUG*/
824- samp->tv.tv_usec = evt->stamp.tv_usec;
825- samp->tv.tv_sec = evt->stamp.tv_sec;
826- samp++;
827- evt++;
828- ret -= sizeof(*evt);
829- }
830- } else {
831- return -1;
832- }
833+ samp++;
834+ total++;
835 }
836- ret = nr;
837-#endif /* USE_INPUT_API */
838
839+ if (ret != 0) ret = -1;
840+ if (total) ret = total;
841 return ret;
842 }
843
diff --git a/meta/recipes-graphics/tslib/tslib/netbook-pro/ts.conf b/meta/recipes-graphics/tslib/tslib/netbook-pro/ts.conf
new file mode 100644
index 0000000000..6d94a8f468
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/netbook-pro/ts.conf
@@ -0,0 +1,5 @@
1module_raw input
2module variance delta=80
3#module dejitter delta=2
4module linear
5
diff --git a/meta/recipes-graphics/tslib/tslib/netbook-pro/tslib.sh b/meta/recipes-graphics/tslib/tslib/netbook-pro/tslib.sh
new file mode 100644
index 0000000000..d31bc76368
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/netbook-pro/tslib.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=`detect-stylus --device`
4
5export TSLIB_TSDEVICE
diff --git a/meta/recipes-graphics/tslib/tslib/omap1610h2/tslib.sh b/meta/recipes-graphics/tslib/tslib/omap1610h2/tslib.sh
new file mode 100644
index 0000000000..040f4de3d5
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/omap1610h2/tslib.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/event1
4
5export TSLIB_TSDEVICE
diff --git a/meta/recipes-graphics/tslib/tslib/omap5912osk/tslib.sh b/meta/recipes-graphics/tslib/tslib/omap5912osk/tslib.sh
new file mode 100644
index 0000000000..6bb56651f8
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/omap5912osk/tslib.sh
@@ -0,0 +1,4 @@
1#!/bin/sh
2
3export TSLIB_TSDEVICE=/dev/input/event1
4export QWS_MOUSE_PROTO=TPanel
diff --git a/meta/recipes-graphics/tslib/tslib/simpad/tslib.sh b/meta/recipes-graphics/tslib/tslib/simpad/tslib.sh
new file mode 100644
index 0000000000..9c4eb1e0f9
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/simpad/tslib.sh
@@ -0,0 +1,14 @@
1#!/bin/sh
2
3TSLIB_TSDEVICE=/dev/input/touchscreen0
4TSLIB_CONFFILE=/etc/ts.conf
5
6case `uname -r` in
72.4*)
8 TSLIB_TSDEVICE=/dev/touchscreen/ucb1x00
9 TSLIB_CONFFILE=/usr/share/tslib/ts.conf-simpad-2.4
10 ;;
11esac
12
13export TSLIB_TSDEVICE TSLIB_CONFFILE
14
diff --git a/meta/recipes-graphics/tslib/tslib/ts.conf b/meta/recipes-graphics/tslib/tslib/ts.conf
new file mode 100644
index 0000000000..1b0da937e8
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/ts.conf
@@ -0,0 +1,25 @@
1# Uncomment if you wish to use the linux input layer event interface
2module_raw input
3
4# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
5# module_raw collie
6
7# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
8# module_raw corgi
9
10# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
11# module_raw ucb1x00
12
13# Uncomment if you're using an HP iPaq h3600 or similar
14# module_raw h3600
15
16# Uncomment if you're using a Hitachi Webpad
17# module_raw mk712
18
19# Uncomment if you're using an IBM Arctic II
20# module_raw arctic2
21
22module pthres pmin=1
23module variance delta=30
24module dejitter delta=100
25module linear
diff --git a/meta/recipes-graphics/tslib/tslib/ts.conf-collie-2.4 b/meta/recipes-graphics/tslib/tslib/ts.conf-collie-2.4
new file mode 100644
index 0000000000..2099b9b414
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/ts.conf-collie-2.4
@@ -0,0 +1,5 @@
1module_raw collie
2module pthres pmin=1
3module variance delta=30
4module dejitter delta=100
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/ts.conf-simpad-2.4 b/meta/recipes-graphics/tslib/tslib/ts.conf-simpad-2.4
new file mode 100644
index 0000000000..035e794cb4
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/ts.conf-simpad-2.4
@@ -0,0 +1,5 @@
1module_raw ucb1x00
2module pthres pmin=1
3module variance delta=10
4module dejitter delta=150
5module linear
diff --git a/meta/recipes-graphics/tslib/tslib/tslib.sh b/meta/recipes-graphics/tslib/tslib/tslib.sh
new file mode 100644
index 0000000000..7068e8d922
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/tslib.sh
@@ -0,0 +1,8 @@
1#!/bin/sh
2
3if [ -e /dev/input/touchscreen0 ]; then
4 TSLIB_TSDEVICE=/dev/input/touchscreen0
5
6 export TSLIB_TSDEVICE
7fi
8
diff --git a/meta/recipes-graphics/tslib/tslib_1.0.bb b/meta/recipes-graphics/tslib/tslib_1.0.bb
new file mode 100644
index 0000000000..12c0ace8f8
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib_1.0.bb
@@ -0,0 +1,78 @@
1DESCRIPTION = "tslib is a plugin-based flexible touchscreen access library."
2HOMEPAGE = "http://tslib.berlios.de/"
3
4AUTHOR = "Russell King w/ plugins by Chris Larson et. al."
5SECTION = "base"
6LICENSE = "LGPLv2"
7LIC_FILES_CHKSUM = "file://COPYING;md5=f30a9716ef3762e3467a2f62bf790f0a"
8
9PR = "r15"
10
11SRC_URI = "http://download.berlios.de/tslib/tslib-${PV}.tar.bz2 \
12 file://fix_version.patch;patch=1 \
13 file://ts.conf \
14 file://ts.conf-simpad-2.4 \
15 file://ts.conf-collie-2.4 \
16 file://tslib.sh"
17SRC_URI_append_mnci += " file://devfs.patch;patch=1"
18SRC_URI_append_mnci += " file://event1.patch;patch=1"
19
20inherit autotools pkgconfig
21
22EXTRA_OECONF = "--enable-shared --disable-h3600 --enable-input --disable-corgi --disable-collie --disable-mk712 --disable-arctic2 --disable-ucb1x00"
23
24do_install_prepend() {
25 install -m 0644 ${WORKDIR}/ts.conf ${S}/etc/ts.conf
26}
27
28do_install_append() {
29 install -d ${D}${sysconfdir}/profile.d/
30 install -m 0755 ${WORKDIR}/tslib.sh ${D}${sysconfdir}/profile.d/
31 case ${MACHINE} in
32 collie )
33 install -d ${D}${datadir}/tslib
34 install -m 0644 ${WORKDIR}/ts.conf-collie-2.4 ${D}${datadir}/tslib/
35 ;;
36 simpad )
37 install -d ${D}${datadir}/tslib
38 install -m 0644 ${WORKDIR}/ts.conf-simpad-2.4 ${D}${datadir}/tslib/
39 ;;
40 *)
41 ;;
42 esac
43}
44
45SRC_URI_OVERRIDES_PACKAGE_ARCH = "0"
46
47# People should consider using udev's /dev/input/touchscreen0 symlink
48# instead of detect-stylus
49#RDEPENDS_tslib-conf_weird-machine = "detect-stylus"
50RPROVIDES_tslib-conf = "libts-0.0-conf"
51
52# Machines with machine specific patches
53PACKAGE_ARCH_mnci = "${MACHINE_ARCH}"
54# Machines with machine specific config files (tslib.sh)
55PACKAGE_ARCH_tslib-conf_a780 = "${MACHINE_ARCH}"
56PACKAGE_ARCH_tslib-conf_collie = "${MACHINE_ARCH}"
57PACKAGE_ARCH_tslib-conf_e680 = "${MACHINE_ARCH}"
58PACKAGE_ARCH_tslib-conf_jornada56x = "${MACHINE_ARCH}"
59PACKAGE_ARCH_tslib-conf_jornada6xx = "${MACHINE_ARCH}"
60PACKAGE_ARCH_tslib-conf_jornada7xx = "${MACHINE_ARCH}"
61PACKAGE_ARCH_tslib-conf_netbook-pro = "${MACHINE_ARCH}"
62PACKAGE_ARCH_tslib-conf_omap1610h2 = "${MACHINE_ARCH}"
63PACKAGE_ARCH_tslib-conf_omap5912osk = "${MACHINE_ARCH}"
64PACKAGE_ARCH_tslib-conf_simpad = "${MACHINE_ARCH}"
65
66PACKAGES =+ "tslib-conf tslib-tests tslib-calibrate"
67DEBIAN_NOAUTONAME_tslib-conf = "1"
68DEBIAN_NOAUTONAME_tslib-tests = "1"
69DEBIAN_NOAUTONAME_tslib-calibrate = "1"
70
71RDEPENDS_${PN} = "tslib-conf"
72RRECOMMENDS_${PN} = "pointercal"
73
74FILES_${PN}-dbg += "${libdir}/ts/.debug*"
75FILES_tslib-conf = "${sysconfdir}/ts.conf ${sysconfdir}/profile.d/tslib.sh ${datadir}/tslib"
76FILES_${PN} = "${libdir}/*.so.* ${libdir}/ts/*.so*"
77FILES_tslib-calibrate += "${bindir}/ts_calibrate"
78FILES_tslib-tests = "${bindir}/ts_harvest ${bindir}/ts_print ${bindir}/ts_print_raw ${bindir}/ts_test"