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>
This commit is contained in:
parent
a8d686ba22
commit
a42db118a7
|
@ -1,57 +0,0 @@
|
||||||
From 9623bbedf4ff409e5036edfcfe52b2595932a6d7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chris Larson <clarson@kergoth.com>
|
|
||||||
Date: Sat, 1 Nov 2008 20:46:07 +0000
|
|
||||||
Subject: [PATCH] Link plugins against libts
|
|
||||||
|
|
||||||
Some plugins use tslib functions. Link those plugins against libts.
|
|
||||||
The problem is easy to see with LDFLAGS="-Wl,-no-undefined".
|
|
||||||
Without this change DirectFB in unable to use tslib because symbols
|
|
||||||
in the tslib plugins can't be resolved.
|
|
||||||
|
|
||||||
Signed-off-by: Ville Syrjala <syrjala@sci.fi>
|
|
||||||
Signed-off-by: Chris Larson <clarson@kergoth.com>
|
|
||||||
|
|
||||||
The patch was imported from git server git://github.com/kergoth/tslib.git
|
|
||||||
as of commit id 9623bbedf4ff409e5036edfcfe52b2595932a6d7.
|
|
||||||
|
|
||||||
Upstream-Status: Accepted
|
|
||||||
Signed-off-by: Dmitry Cherukhin <dima_ch@emcraft.com>
|
|
||||||
---
|
|
||||||
plugins/Makefile.am | 5 +++++
|
|
||||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
|
|
||||||
index 3b902c2..4c4ef8b 100644
|
|
||||||
--- a/plugins/Makefile.am
|
|
||||||
+++ b/plugins/Makefile.am
|
|
||||||
@@ -114,15 +114,19 @@ pluginexec_LTLIBRARIES = \
|
|
||||||
|
|
||||||
variance_la_SOURCES = variance.c
|
|
||||||
variance_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
+variance_la_LIBADD = $(top_builddir)/src/libts.la
|
|
||||||
|
|
||||||
dejitter_la_SOURCES = dejitter.c
|
|
||||||
dejitter_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
+dejitter_la_LIBADD = $(top_builddir)/src/libts.la
|
|
||||||
|
|
||||||
linear_la_SOURCES = linear.c
|
|
||||||
linear_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
+linear_la_LIBADD = $(top_builddir)/src/libts.la
|
|
||||||
|
|
||||||
pthres_la_SOURCES = pthres.c
|
|
||||||
pthres_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
+pthres_la_LIBADD = $(top_builddir)/src/libts.la
|
|
||||||
|
|
||||||
# hw access
|
|
||||||
corgi_la_SOURCES = corgi-raw.c
|
|
||||||
@@ -148,6 +152,7 @@ tatung_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
|
|
||||||
input_la_SOURCES = input-raw.c
|
|
||||||
input_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
+input_la_LIBADD = $(top_builddir)/src/libts.la
|
|
||||||
|
|
||||||
linear_h2200_la_SOURCES = linear-h2200.c
|
|
||||||
linear_h2200_la_LDFLAGS = -module $(LTVSN)
|
|
||||||
--
|
|
||||||
1.7.6.4
|
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
#! /bin/sh /usr/share/dpatch/dpatch-run
|
|
||||||
## 030-32bitBE-support.dpatch by Neil Williams <codehelp@debian.org>
|
|
||||||
##
|
|
||||||
## All lines beginning with `## DP:' are a description of the patch.
|
|
||||||
## DP: See bug #496759 - being tested upstream for 32bit BE devices
|
|
||||||
|
|
||||||
@DPATCH@
|
|
||||||
|
|
||||||
Upstream-Status: Pending
|
|
||||||
|
|
||||||
diff -urNad tslib-1.0~/plugins/input-raw.c tslib-1.0/plugins/input-raw.c
|
|
||||||
--- tslib-1.0~/plugins/input-raw.c 2008-12-09 10:56:47.000000000 +0000
|
|
||||||
+++ tslib-1.0/plugins/input-raw.c 2008-12-09 11:05:41.000000000 +0000
|
|
||||||
@@ -44,25 +44,33 @@
|
|
||||||
int using_syn;
|
|
||||||
};
|
|
||||||
|
|
||||||
+#define BITS_PER_LONG (sizeof(long) * 8)
|
|
||||||
+#ifndef EV_CNT
|
|
||||||
+#define EV_CNT (EV_MAX+1)
|
|
||||||
+#endif
|
|
||||||
+#ifndef ABS_CNT
|
|
||||||
+#define ABS_CNT (ABS_MAX+1)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static int check_fd(struct tslib_input *i)
|
|
||||||
{
|
|
||||||
struct tsdev *ts = i->module.dev;
|
|
||||||
int version;
|
|
||||||
- u_int32_t bit;
|
|
||||||
- u_int64_t absbit;
|
|
||||||
+ unsigned long bit[EV_CNT / BITS_PER_LONG + 1];
|
|
||||||
+ unsigned long absbit[ABS_MAX / BITS_PER_LONG + 1];
|
|
||||||
|
|
||||||
if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&
|
|
||||||
(version == EV_VERSION) &&
|
|
||||||
- (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&
|
|
||||||
- (bit & (1 << EV_ABS)) &&
|
|
||||||
- (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
|
|
||||||
- (absbit & (1 << ABS_X)) &&
|
|
||||||
- (absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {
|
|
||||||
+ (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit)), bit) >= 0) &&
|
|
||||||
+ (bit[0] & (1 << EV_ABS)) &&
|
|
||||||
+ (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) >= 0) &&
|
|
||||||
+ (absbit[0] & (1 << ABS_X)) &&
|
|
||||||
+ (absbit[0] & (1 << ABS_Y)) && (absbit[0] & (1 << ABS_PRESSURE)))) {
|
|
||||||
fprintf(stderr, "selected device is not a touchscreen I understand\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bit & (1 << EV_SYN))
|
|
||||||
+ if (bit[0] & (1 << EV_SYN))
|
|
||||||
i->using_syn = 1;
|
|
||||||
|
|
||||||
return 0;
|
|
|
@ -1,34 +0,0 @@
|
||||||
---
|
|
||||||
configure.ac | 10 +++++-----
|
|
||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
Upstream-Status: Inappropriate [configuration]
|
|
||||||
|
|
||||||
Index: tslib-1.0/configure.ac
|
|
||||||
===================================================================
|
|
||||||
--- tslib-1.0.orig/configure.ac 2006-08-24 22:02:55.000000000 +0100
|
|
||||||
+++ tslib-1.0/configure.ac 2007-07-09 21:04:38.000000000 +0100
|
|
||||||
@@ -2,7 +2,7 @@
|
|
||||||
# Process this file with autoconf to produce a configure script.
|
|
||||||
|
|
||||||
AC_PREREQ(2.57)
|
|
||||||
-AC_INIT(tslib, 0.0.2, kergoth@handhelds.org)
|
|
||||||
+AC_INIT(tslib, 1.0.0, kergoth@handhelds.org)
|
|
||||||
# AC_CONFIG_AUX_DIR(config)
|
|
||||||
AM_INIT_AUTOMAKE(dist-bzip2)
|
|
||||||
AC_CONFIG_SRCDIR([src/ts_close.c])
|
|
||||||
@@ -193,10 +193,10 @@ TS_CONF='${sysconfdir}/ts.conf'
|
|
||||||
AC_SUBST(TS_CONF)
|
|
||||||
|
|
||||||
# Library versioning
|
|
||||||
-LT_RELEASE=0.0
|
|
||||||
-LT_CURRENT=1
|
|
||||||
-LT_REVISION=1
|
|
||||||
-LT_AGE=1
|
|
||||||
+LT_RELEASE=1.0
|
|
||||||
+LT_CURRENT=0
|
|
||||||
+LT_REVISION=0
|
|
||||||
+LT_AGE=0
|
|
||||||
AC_SUBST(LT_RELEASE)
|
|
||||||
AC_SUBST(LT_CURRENT)
|
|
||||||
AC_SUBST(LT_REVISION)
|
|
|
@ -1,845 +0,0 @@
|
||||||
Upstream-Status: Pending
|
|
||||||
|
|
||||||
--- tslib/plugins/linear.c~multievent
|
|
||||||
+++ tslib/plugins/linear.c
|
|
||||||
@@ -39,14 +39,12 @@
|
|
||||||
linear_read(struct tslib_module_info *info, struct ts_sample *samp, int nr)
|
|
||||||
{
|
|
||||||
struct tslib_linear *lin = (struct tslib_linear *)info;
|
|
||||||
- int ret;
|
|
||||||
+ int ret, i = 0;
|
|
||||||
int xtemp,ytemp;
|
|
||||||
|
|
||||||
ret = info->next->ops->read(info->next, samp, nr);
|
|
||||||
if (ret >= 0) {
|
|
||||||
- int nr;
|
|
||||||
-
|
|
||||||
- for (nr = 0; nr < ret; nr++, samp++) {
|
|
||||||
+ for (i = 0; i < ret; i++, samp++) {
|
|
||||||
#ifdef DEBUG
|
|
||||||
fprintf(stderr,"BEFORE CALIB--------------------> %d %d %d\n",samp->x, samp->y, samp->pressure);
|
|
||||||
#endif /*DEBUG*/
|
|
||||||
@@ -66,6 +64,7 @@
|
|
||||||
samp->y = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ ret = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
--- tslib/plugins/dejitter.c~multievent
|
|
||||||
+++ tslib/plugins/dejitter.c
|
|
||||||
@@ -24,7 +24,6 @@
|
|
||||||
|
|
||||||
struct tslib_threshold {
|
|
||||||
struct tslib_module_info module;
|
|
||||||
- int pthreshold;
|
|
||||||
int xdelta;
|
|
||||||
int ydelta;
|
|
||||||
int delta2;
|
|
||||||
@@ -36,40 +35,28 @@
|
|
||||||
static int threshold_read(struct tslib_module_info *info, struct ts_sample *samp, int nr)
|
|
||||||
{
|
|
||||||
struct tslib_threshold *thr = (struct tslib_threshold *)info;
|
|
||||||
- struct ts_sample *s;
|
|
||||||
- int ret;
|
|
||||||
+ struct ts_sample *src = samp, *dest = samp;
|
|
||||||
+ int ret, i = 0;
|
|
||||||
|
|
||||||
ret = info->next->ops->read(info->next, samp, nr);
|
|
||||||
if (ret >= 0) {
|
|
||||||
- int nr = 0;
|
|
||||||
-
|
|
||||||
- for (s = samp; s < samp + ret; s++) {
|
|
||||||
+ for (i = 0; i < ret; i++, samp++) {
|
|
||||||
int dr2;
|
|
||||||
#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"BEFORE DEJITTER---------------> %d %d %d\n",s->x,s->y,s->pressure);
|
|
||||||
+ fprintf(stderr,"BEFORE DEJITTER---------------> %d %d %d\n", samp->x, samp->y, samp->pressure);
|
|
||||||
#endif /*DEBUG*/
|
|
||||||
- thr->down = (s->pressure >= thr->pthreshold);
|
|
||||||
- if (thr->down) {
|
|
||||||
- dr2 = (thr->x - s->x)*(thr->x - s->x)
|
|
||||||
- + (thr->y - s->y)*(thr->y - s->y);
|
|
||||||
- if(dr2 < thr->delta2) {
|
|
||||||
- s->x = thr->x;
|
|
||||||
- s->y = thr->y;
|
|
||||||
- } else {
|
|
||||||
- thr->x = s->x;
|
|
||||||
- thr->y = s->y;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
+ dr2 = (thr->x - samp->x)*(thr->x - samp->x)
|
|
||||||
+ + (thr->y - samp->y)*(thr->y - samp->y);
|
|
||||||
+ if(dr2 < thr->delta2) {
|
|
||||||
+ samp->x = thr->x;
|
|
||||||
+ samp->y = thr->y;
|
|
||||||
} else {
|
|
||||||
- s->x = thr->x;
|
|
||||||
- s->y = thr->y;
|
|
||||||
+ thr->x = samp->x;
|
|
||||||
+ thr->y = samp->y;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- samp[nr++] = *s;
|
|
||||||
}
|
|
||||||
|
|
||||||
- ret = nr;
|
|
||||||
+ ret = i;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -106,10 +93,6 @@
|
|
||||||
thr->ydelta = v;
|
|
||||||
break;
|
|
||||||
|
|
||||||
- case 3:
|
|
||||||
- thr->pthreshold = v;
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
@@ -120,7 +103,6 @@
|
|
||||||
{
|
|
||||||
{ "xdelta", (void *)1, threshold_limit },
|
|
||||||
{ "ydelta", (void *)2, threshold_limit },
|
|
||||||
- { "pthreshold", (void *)3, threshold_limit }
|
|
||||||
};
|
|
||||||
|
|
||||||
//#define NR_VARS (sizeof(threshold_vars) / sizeof(threshold_vars[0]))
|
|
||||||
@@ -138,7 +120,6 @@
|
|
||||||
|
|
||||||
thr->xdelta = 10;
|
|
||||||
thr->ydelta = 10;
|
|
||||||
- thr->pthreshold = 100;
|
|
||||||
|
|
||||||
if (tslib_parse_vars(&thr->module, threshold_vars, NR_VARS, params)) {
|
|
||||||
free(thr);
|
|
||||||
--- tslib/plugins/variance.c~multievent
|
|
||||||
+++ tslib/plugins/variance.c
|
|
||||||
@@ -9,25 +9,36 @@
|
|
||||||
* $Id: variance.c,v 1.3 2002/11/08 23:28:55 dlowder Exp $
|
|
||||||
*
|
|
||||||
* Variance filter for touchscreen values
|
|
||||||
+ *
|
|
||||||
+ * Policy question (applies to all tslib modules that consume events):
|
|
||||||
+ * 1) User requests a read of 5 events using nr.
|
|
||||||
+ * 2) Lower layers return us 4 events.
|
|
||||||
+ * 3) Perform variance calculation, we now only have _1_ event.
|
|
||||||
+ * 4) Do we, a) duplicate this data across the user requested 4 events,
|
|
||||||
+ * b) push up the single event
|
|
||||||
+ * c) loop on the read from the lower layers to obtain
|
|
||||||
+ * the user's requested number of events, unless we hit
|
|
||||||
+ * a pen_up.
|
|
||||||
*/
|
|
||||||
+
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <limits.h>
|
|
||||||
-
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "tslib.h"
|
|
||||||
#include "tslib-filter.h"
|
|
||||||
|
|
||||||
+#define NR_INIT -1
|
|
||||||
#define NR_LAST 4
|
|
||||||
|
|
||||||
struct tslib_variance {
|
|
||||||
struct tslib_module_info module;
|
|
||||||
int nr;
|
|
||||||
- unsigned int pthreshold;
|
|
||||||
unsigned int xlimit;
|
|
||||||
unsigned int ylimit;
|
|
||||||
+ unsigned int pthreshold;
|
|
||||||
struct ts_sample last[NR_LAST];
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -37,8 +48,7 @@
|
|
||||||
* least variance, and average them.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
-variance_calculate(struct tslib_variance *var, struct ts_sample *samp,
|
|
||||||
- struct ts_sample *s)
|
|
||||||
+variance_calculate(struct tslib_variance *var, struct ts_sample *dest, struct ts_sample *src)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
int diff_x, min_x, i_x, j_x;
|
|
||||||
@@ -100,11 +110,11 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- samp->x = (var->last[i_x].x + var->last[j_x].x) / 2;
|
|
||||||
- samp->y = (var->last[i_y].y + var->last[j_y].y) / 2;
|
|
||||||
- samp->pressure = (var->last[i_p].pressure + var->last[j_p].pressure) / 2;
|
|
||||||
- samp->tv.tv_sec = s->tv.tv_sec;
|
|
||||||
- samp->tv.tv_usec = s->tv.tv_usec;
|
|
||||||
+ dest->x = (var->last[i_x].x + var->last[j_x].x) / 2;
|
|
||||||
+ dest->y = (var->last[i_y].y + var->last[j_y].y) / 2;
|
|
||||||
+ dest->pressure = (var->last[i_p].pressure + var->last[j_p].pressure) / 2;
|
|
||||||
+ dest->tv.tv_sec = src->tv.tv_sec;
|
|
||||||
+ dest->tv.tv_usec = src->tv.tv_usec;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -112,55 +122,57 @@
|
|
||||||
static int variance_read(struct tslib_module_info *info, struct ts_sample *samp, int nr)
|
|
||||||
{
|
|
||||||
struct tslib_variance *var = (struct tslib_variance *)info;
|
|
||||||
- struct ts_sample *s;
|
|
||||||
- int ret;
|
|
||||||
-
|
|
||||||
- ret = info->next->ops->read(info->next, samp, nr);
|
|
||||||
- if (ret >= 0) {
|
|
||||||
- int nr = 0;
|
|
||||||
-
|
|
||||||
- for (s = samp; s < samp + ret; s++) {
|
|
||||||
- if (s->pressure < var->pthreshold) {
|
|
||||||
- /*
|
|
||||||
- * Pen was released. Reset our state and
|
|
||||||
- * pass up the release information.
|
|
||||||
- */
|
|
||||||
-// samp[nr].x = 0;
|
|
||||||
-// samp[nr].y = 0;
|
|
||||||
- samp[nr].pressure = s->pressure;
|
|
||||||
- samp[nr].tv.tv_sec = s->tv.tv_sec;
|
|
||||||
- samp[nr].tv.tv_usec = s->tv.tv_usec;
|
|
||||||
-
|
|
||||||
- nr++;
|
|
||||||
-
|
|
||||||
- var->nr = 0;
|
|
||||||
- continue;
|
|
||||||
- } else if (var->nr == -1) {
|
|
||||||
- /*
|
|
||||||
- * Pen was pressed. Inform upper layers
|
|
||||||
- * immediately.
|
|
||||||
- */
|
|
||||||
- samp[nr] = *s;
|
|
||||||
- nr++;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (var->nr >= 0) {
|
|
||||||
- var->last[var->nr].x = s->x;
|
|
||||||
- var->last[var->nr].y = s->y;
|
|
||||||
- var->last[var->nr].pressure = s->pressure;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- var->nr++;
|
|
||||||
+ struct ts_sample *src = samp, *dest = samp;
|
|
||||||
+ int ret, i = 0;
|
|
||||||
|
|
||||||
- if (var->nr == NR_LAST) {
|
|
||||||
- if (variance_calculate(var, samp + nr, s))
|
|
||||||
- nr++;
|
|
||||||
- var->nr = 0;
|
|
||||||
+ /*
|
|
||||||
+ * NOTES:
|
|
||||||
+ *
|
|
||||||
+ * Loop on read, collecting events until we hit nr, unless
|
|
||||||
+ * we hit a pen up or encounter a failure.
|
|
||||||
+ */
|
|
||||||
+ while ((i < nr) && (ret != -1)) {
|
|
||||||
+ ret = info->next->ops->read(info->next, dest + i, nr - i);
|
|
||||||
+ if (ret >= 0) {
|
|
||||||
+ for (src = dest + i; src < dest + ret; src++) {
|
|
||||||
+ if (src->pressure < var->pthreshold) {
|
|
||||||
+ /* pen released, reset var->nr,
|
|
||||||
+ * do a calc based on what we have so
|
|
||||||
+ * far, and let this event flow up */
|
|
||||||
+ if (variance_calculate(var, dest + i, src))
|
|
||||||
+ i++;
|
|
||||||
+ var->nr = NR_INIT;
|
|
||||||
+ ret = -1; /* break outer loop, push up event */
|
|
||||||
+ break;
|
|
||||||
+ } else if (var->nr == NR_INIT) {
|
|
||||||
+ /*
|
|
||||||
+ * First pen down event. Inform upper layers
|
|
||||||
+ * immediately for responsiveness.
|
|
||||||
+ */
|
|
||||||
+ var->nr = 0;
|
|
||||||
+ i++;
|
|
||||||
+ ret = -1; /* break outer loop */
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (var->nr >= 0) {
|
|
||||||
+ var->last[var->nr].x = src->x;
|
|
||||||
+ var->last[var->nr].y = src->y;
|
|
||||||
+ var->last[var->nr].pressure = src->pressure;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ var->nr++;
|
|
||||||
+
|
|
||||||
+ if (var->nr == NR_LAST) {
|
|
||||||
+ if (variance_calculate(var, dest + i, src))
|
|
||||||
+ i++;
|
|
||||||
+ var->nr = 0;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- ret = nr;
|
|
||||||
}
|
|
||||||
+ /* if we've collected at least one event, send it up */
|
|
||||||
+ if (i != 0) ret = i;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -196,10 +208,6 @@
|
|
||||||
var->ylimit = v;
|
|
||||||
break;
|
|
||||||
|
|
||||||
- case 3:
|
|
||||||
- var->pthreshold = v;
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
@@ -210,7 +218,6 @@
|
|
||||||
{
|
|
||||||
{ "xlimit", (void *)1, variance_limit },
|
|
||||||
{ "ylimit", (void *)2, variance_limit },
|
|
||||||
- { "pthreshold", (void *)3, variance_limit }
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NR_VARS (sizeof(variance_vars) / sizeof(variance_vars[0]))
|
|
||||||
@@ -218,6 +225,7 @@
|
|
||||||
struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
|
|
||||||
{
|
|
||||||
struct tslib_variance *var;
|
|
||||||
+ char *pthresvar;
|
|
||||||
|
|
||||||
var = malloc(sizeof(struct tslib_variance));
|
|
||||||
if (var == NULL)
|
|
||||||
@@ -225,10 +233,15 @@
|
|
||||||
|
|
||||||
var->module.ops = &variance_ops;
|
|
||||||
|
|
||||||
- var->nr = -1;
|
|
||||||
+ var->nr = NR_INIT;
|
|
||||||
var->xlimit = 160;
|
|
||||||
var->ylimit = 160;
|
|
||||||
var->pthreshold = 100;
|
|
||||||
+ pthresvar = getenv("TSLIB_PTHRES");
|
|
||||||
+ if (pthresvar != NULL) {
|
|
||||||
+ int p = strtol(pthresvar, (char **)NULL, 10);
|
|
||||||
+ if (p != -1) var->pthreshold = p;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (tslib_parse_vars(&var->module, variance_vars, NR_VARS, params)) {
|
|
||||||
free(var);
|
|
||||||
--- tslib/README~multievent
|
|
||||||
+++ tslib/README
|
|
||||||
@@ -36,6 +36,19 @@
|
|
||||||
usages. They are by no means exhaustive, nor probably even good examples.
|
|
||||||
They are basically the programs I used to test this library.
|
|
||||||
|
|
||||||
+Module Creation Notes
|
|
||||||
+=====================
|
|
||||||
+
|
|
||||||
+For those creating tslib modules, it is important to note a couple things with
|
|
||||||
+regard to handling of the ability for a user to request more than one ts event
|
|
||||||
+at a time. The first thing to note is that the lower layers may send up less
|
|
||||||
+events than the user requested, but only if that was a result of a pen release.
|
|
||||||
+Next, your module should send up just as many events as the user requested in
|
|
||||||
+nr. If your module is one that consumes events, such as variance, then you
|
|
||||||
+loop on the read from the lower layers, and only send the events up when
|
|
||||||
+1) you have the number of events requested by the user, or 2) one of the events
|
|
||||||
+from the lower layers was a pen release.
|
|
||||||
+
|
|
||||||
|
|
||||||
Module Parameters
|
|
||||||
=================
|
|
||||||
--- tslib/src/ts_read_raw.c~multievent
|
|
||||||
+++ tslib/src/ts_read_raw.c
|
|
||||||
@@ -14,10 +14,10 @@
|
|
||||||
*
|
|
||||||
* Read raw pressure, x, y, and timestamp from a touchscreen device.
|
|
||||||
*/
|
|
||||||
+
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
-
|
|
||||||
#include <stdlib.h>
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
@@ -25,79 +25,27 @@
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
-#ifdef USE_INPUT_API
|
|
||||||
-#include <linux/input.h>
|
|
||||||
-#else
|
|
||||||
-struct ts_event { /* Used in UCB1x00 style touchscreens (the default) */
|
|
||||||
- unsigned short pressure;
|
|
||||||
- unsigned short x;
|
|
||||||
- unsigned short y;
|
|
||||||
- unsigned short pad;
|
|
||||||
- struct timeval stamp;
|
|
||||||
-};
|
|
||||||
-struct h3600_ts_event { /* Used in the Compaq IPAQ */
|
|
||||||
- unsigned short pressure;
|
|
||||||
- unsigned short x;
|
|
||||||
- unsigned short y;
|
|
||||||
- unsigned short pad;
|
|
||||||
-};
|
|
||||||
-struct mk712_ts_event { /* Used in the Hitachi Webpad */
|
|
||||||
- unsigned int header;
|
|
||||||
- unsigned int x;
|
|
||||||
- unsigned int y;
|
|
||||||
- unsigned int reserved;
|
|
||||||
-};
|
|
||||||
-struct arctic2_ts_event { /* Used in the IBM Arctic II */
|
|
||||||
- signed short pressure;
|
|
||||||
- signed int x;
|
|
||||||
- signed int y;
|
|
||||||
- int millisecs;
|
|
||||||
- int flags;
|
|
||||||
-};
|
|
||||||
-struct collie_ts_event { /* Used in the Sharp Zaurus SL-5000d and SL-5500 */
|
|
||||||
- long y;
|
|
||||||
- long x;
|
|
||||||
- long pressure;
|
|
||||||
- long long millisecs;
|
|
||||||
-};
|
|
||||||
-struct corgi_ts_event { /* Used in the Sharp Zaurus SL-C700 */
|
|
||||||
- short pressure;
|
|
||||||
- short x;
|
|
||||||
- short y;
|
|
||||||
- short millisecs;
|
|
||||||
-};
|
|
||||||
-#endif /* USE_INPUT_API */
|
|
||||||
-
|
|
||||||
#include "tslib-private.h"
|
|
||||||
|
|
||||||
-int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr)
|
|
||||||
-{
|
|
||||||
#ifdef USE_INPUT_API
|
|
||||||
+#include <linux/input.h>
|
|
||||||
+
|
|
||||||
+static inline int get_input_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
struct input_event ev;
|
|
||||||
-#else
|
|
||||||
- struct ts_event *evt;
|
|
||||||
- struct h3600_ts_event *hevt;
|
|
||||||
- struct mk712_ts_event *mevt;
|
|
||||||
- struct arctic2_ts_event *aevt;
|
|
||||||
- struct collie_ts_event *collie_evt;
|
|
||||||
- struct corgi_ts_event *corgi_evt;
|
|
||||||
-#endif /* USE_INPUT_API */
|
|
||||||
- int ret;
|
|
||||||
- int total = 0;
|
|
||||||
+ struct timeval tv = {0, 0};
|
|
||||||
+ fd_set fdset;
|
|
||||||
+ int ret = 0;
|
|
||||||
|
|
||||||
- char *tseventtype=NULL;
|
|
||||||
- char *defaulttseventtype="UCB1x00";
|
|
||||||
+ /* event vars */
|
|
||||||
+ static int curr_x = 0, curr_y = 0;
|
|
||||||
+ int curr_p = 0, next_x = 0, next_y = 0;
|
|
||||||
|
|
||||||
-#ifdef USE_INPUT_API
|
|
||||||
- /* warning: maybe those static vars should be part of the tsdev struct? */
|
|
||||||
- static int curr_x = 0, curr_y = 0, curr_p = 0;
|
|
||||||
- static int got_curr_x = 0, got_curr_y = 0;
|
|
||||||
- int got_curr_p = 0;
|
|
||||||
- int next_x, next_y;
|
|
||||||
+ /* state variables */
|
|
||||||
+ int got_curr_x = 0, got_curr_y = 0, got_curr_p = 0;
|
|
||||||
int got_next_x = 0, got_next_y = 0;
|
|
||||||
int got_tstamp = 0;
|
|
||||||
|
|
||||||
- while (total < nr) {
|
|
||||||
+ while (1) {
|
|
||||||
ret = read(ts->fd, &ev, sizeof(struct input_event));
|
|
||||||
if (ret < sizeof(struct input_event)) break;
|
|
||||||
|
|
||||||
@@ -146,177 +94,231 @@
|
|
||||||
samp->tv = ev.time;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if ( (!got_curr_x || !got_curr_y) && !got_curr_p &&
|
|
||||||
- !got_next_x && !got_next_y ) {
|
|
||||||
- /*
|
|
||||||
- * The current event is not complete yet.
|
|
||||||
- * Give the kernel a chance to feed us more.
|
|
||||||
- */
|
|
||||||
- struct timeval tv = {0, 0};
|
|
||||||
- fd_set fdset;
|
|
||||||
- FD_ZERO(&fdset);
|
|
||||||
- FD_SET(ts->fd, &fdset);
|
|
||||||
- ret = select(ts->fd+1, &fdset, NULL, NULL, &tv);
|
|
||||||
- if (ret == 1) continue;
|
|
||||||
- if (ret == -1) break;
|
|
||||||
+ if (got_curr_x && got_curr_y && got_curr_p) {
|
|
||||||
+ /* we have a complete event */
|
|
||||||
+ samp->x = curr_x;
|
|
||||||
+ samp->y = curr_y;
|
|
||||||
+ samp->pressure = curr_p;
|
|
||||||
+ ret = 0; /* indicate success */
|
|
||||||
+ if (got_next_x) curr_x = next_x;
|
|
||||||
+ if (got_next_y) curr_y = next_y;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* We consider having a complete ts event */
|
|
||||||
- samp->x = curr_x;
|
|
||||||
- samp->y = curr_y;
|
|
||||||
- samp->pressure = curr_p;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
-#endif /*DEBUG*/
|
|
||||||
- samp++;
|
|
||||||
- total++;
|
|
||||||
-
|
|
||||||
- /* get ready for next event */
|
|
||||||
- if (got_next_x) curr_x = next_x; else got_curr_x = 0;
|
|
||||||
- if (got_next_y) curr_y = next_y; else got_curr_y = 0;
|
|
||||||
- got_next_x = got_next_y = got_tstamp = 0;
|
|
||||||
+ /*
|
|
||||||
+ * The current event is not complete yet.
|
|
||||||
+ * Give the kernel a chance to feed us more.
|
|
||||||
+ */
|
|
||||||
+ FD_ZERO(&fdset);
|
|
||||||
+ FD_SET(ts->fd, &fdset);
|
|
||||||
+ ret = select(ts->fd+1, &fdset, NULL, NULL, &tv);
|
|
||||||
+ if (ret == 1) continue;
|
|
||||||
+ if (ret == -1) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (ret) ret = -1;
|
|
||||||
- if (total) ret = total;
|
|
||||||
+// fprintf(stdout, "%s: returning %d\n", __FUNCTION__, ret);
|
|
||||||
+ if (ret != 0) ret = -1;
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#else
|
|
||||||
+
|
|
||||||
+struct ucb1x00_ts_event { /* Used in UCB1x00 style touchscreens (the default) */
|
|
||||||
+ unsigned short pressure;
|
|
||||||
+ unsigned short x;
|
|
||||||
+ unsigned short y;
|
|
||||||
+ unsigned short pad;
|
|
||||||
+ struct timeval stamp;
|
|
||||||
+};
|
|
||||||
+struct h3600_ts_event { /* Used in the Compaq IPAQ */
|
|
||||||
+ unsigned short pressure;
|
|
||||||
+ unsigned short x;
|
|
||||||
+ unsigned short y;
|
|
||||||
+ unsigned short pad;
|
|
||||||
+};
|
|
||||||
+struct mk712_ts_event { /* Used in the Hitachi Webpad */
|
|
||||||
+ unsigned int header;
|
|
||||||
+ unsigned int x;
|
|
||||||
+ unsigned int y;
|
|
||||||
+ unsigned int reserved;
|
|
||||||
+};
|
|
||||||
+struct arctic2_ts_event { /* Used in the IBM Arctic II */
|
|
||||||
+ signed short pressure;
|
|
||||||
+ signed int x;
|
|
||||||
+ signed int y;
|
|
||||||
+ int millisecs;
|
|
||||||
+ int flags;
|
|
||||||
+};
|
|
||||||
+struct collie_ts_event { /* Used in the Sharp Zaurus SL-5000d and SL-5500 */
|
|
||||||
+ long y;
|
|
||||||
+ long x;
|
|
||||||
+ long pressure;
|
|
||||||
+ long long millisecs;
|
|
||||||
+};
|
|
||||||
+struct corgi_ts_event { /* Used in the Sharp Zaurus SL-C700 */
|
|
||||||
+ short pressure;
|
|
||||||
+ short x;
|
|
||||||
+ short y;
|
|
||||||
+ short millisecs;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static inline int get_ucb1x00_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
+ struct ucb1x00_ts_event evt;
|
|
||||||
+ int ret = read(ts->fd, &evt, sizeof(struct ucb1x00_ts_event));
|
|
||||||
+ if (ret > 0) {
|
|
||||||
+ samp->x = evt.x;
|
|
||||||
+ samp->y = evt.y;
|
|
||||||
+ samp->pressure = evt.pressure;
|
|
||||||
+ samp->tv.tv_usec = evt.stamp.tv_usec;
|
|
||||||
+ samp->tv.tv_sec = evt.stamp.tv_sec;
|
|
||||||
+ ret = 0; /* success */
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline int get_h3600_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
+ struct h3600_ts_event evt;
|
|
||||||
+ int ret = read(ts->fd, &evt, sizeof(struct h3600_ts_event));
|
|
||||||
+ if (ret > 0) {
|
|
||||||
+ samp->x = evt.x;
|
|
||||||
+ samp->y = evt.y;
|
|
||||||
+ samp->pressure = evt.pressure;
|
|
||||||
+ gettimeofday(&samp->tv, NULL);
|
|
||||||
+ ret = 0; /* success */
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline int get_mk712_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
+ struct mk712_ts_event evt;
|
|
||||||
+ int ret = read(ts->fd, &evt, sizeof(struct mk712_ts_event));
|
|
||||||
+ if (ret > 0) {
|
|
||||||
+ samp->x = (short)evt.x;
|
|
||||||
+ samp->y = (short)evt.y;
|
|
||||||
+ if(evt.header==0)
|
|
||||||
+ samp->pressure=1;
|
|
||||||
+ else
|
|
||||||
+ samp->pressure=0;
|
|
||||||
+ gettimeofday(&samp->tv, NULL);
|
|
||||||
+ ret = 0; /* success */
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline int get_arctic2_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
+ struct arctic2_ts_event evt;
|
|
||||||
+ int ret = read(ts->fd, &evt, sizeof(struct arctic2_ts_event));
|
|
||||||
+ if (ret > 0) {
|
|
||||||
+ samp->x = (short)evt.x;
|
|
||||||
+ samp->y = (short)evt.y;
|
|
||||||
+ samp->pressure = evt.pressure;
|
|
||||||
+ gettimeofday(&samp->tv, NULL);
|
|
||||||
+ ret = 0; /* success */
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline int get_collie_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
+ struct collie_ts_event evt;
|
|
||||||
+ int ret = read(ts->fd, &evt, sizeof(struct collie_ts_event));
|
|
||||||
+ if (ret > 0) {
|
|
||||||
+ samp->x = evt.x;
|
|
||||||
+ samp->y = evt.y;
|
|
||||||
+ samp->pressure = evt.pressure;
|
|
||||||
+ samp->tv.tv_usec = evt.millisecs % 1000;
|
|
||||||
+ samp->tv.tv_sec = evt.millisecs / 1000;
|
|
||||||
+ ret = 0; /* success */
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline int get_corgi_event(struct tsdev *ts, struct ts_sample *samp) {
|
|
||||||
+ struct corgi_ts_event evt;
|
|
||||||
+ int ret = read(ts->fd, &evt, sizeof(struct corgi_ts_event));
|
|
||||||
+ if (ret > 0) {
|
|
||||||
+ samp->x = evt.x;
|
|
||||||
+ samp->y = evt.y;
|
|
||||||
+ samp->pressure = evt.pressure;
|
|
||||||
+ samp->tv.tv_usec = evt.millisecs % 1000;
|
|
||||||
+ samp->tv.tv_sec = evt.millisecs / 1000;
|
|
||||||
+ ret = 0; /* success */
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr)
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+ int total = 0;
|
|
||||||
+ int pen_down = 1;
|
|
||||||
+ static short x_save = 0, y_save = 0;
|
|
||||||
+ static int pthres = -1;
|
|
||||||
+
|
|
||||||
+#ifndef USE_INPUT_API
|
|
||||||
+ char *tseventtype=NULL;
|
|
||||||
+ char *defaulttseventtype="UCB1x00";
|
|
||||||
tseventtype = getenv("TSLIB_TSEVENTTYPE");
|
|
||||||
if(tseventtype==NULL) tseventtype=defaulttseventtype;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
- if( strcmp(tseventtype,"H3600") == 0) { /* iPAQ style h3600 touchscreen events */
|
|
||||||
- hevt = alloca(sizeof(*hevt) * nr);
|
|
||||||
- ret = read(ts->fd, hevt, sizeof(*hevt) * nr);
|
|
||||||
- if(ret > 0) {
|
|
||||||
- int nr = ret / sizeof(*hevt);
|
|
||||||
- while(ret >= sizeof(*hevt)) {
|
|
||||||
- samp->x = hevt->x;
|
|
||||||
- samp->y = hevt->y;
|
|
||||||
- samp->pressure = hevt->pressure;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
-#endif /*DEBUG*/
|
|
||||||
- gettimeofday(&samp->tv,NULL);
|
|
||||||
- samp++;
|
|
||||||
- hevt++;
|
|
||||||
- ret -= sizeof(*hevt);
|
|
||||||
- }
|
|
||||||
- } else {
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
- } else if( strcmp(tseventtype,"MK712") == 0) { /* Hitachi Webpad events */
|
|
||||||
- mevt = alloca(sizeof(*mevt) * nr);
|
|
||||||
- ret = read(ts->fd, mevt, sizeof(*mevt) * nr);
|
|
||||||
- if(ret > 0) {
|
|
||||||
- int nr = ret / sizeof(*mevt);
|
|
||||||
- while(ret >= sizeof(*mevt)) {
|
|
||||||
- samp->x = (short)mevt->x;
|
|
||||||
- samp->y = (short)mevt->y;
|
|
||||||
- if(mevt->header==0)
|
|
||||||
- samp->pressure=1;
|
|
||||||
- else
|
|
||||||
- samp->pressure=0;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
-#endif /*DEBUG*/
|
|
||||||
- gettimeofday(&samp->tv,NULL);
|
|
||||||
- samp++;
|
|
||||||
- mevt++;
|
|
||||||
- ret -= sizeof(*mevt);
|
|
||||||
- }
|
|
||||||
- } else {
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- } else if( strcmp(tseventtype,"ARCTIC2") == 0) { /* IBM Arctic II events */
|
|
||||||
- aevt = alloca(sizeof(*aevt) * nr);
|
|
||||||
- ret = read(ts->fd, aevt, sizeof(*aevt) * nr);
|
|
||||||
- if(ret > 0) {
|
|
||||||
- int nr = ret / sizeof(*aevt);
|
|
||||||
- while(ret >= sizeof(*aevt)) {
|
|
||||||
- samp->x = (short)aevt->x;
|
|
||||||
- samp->y = (short)aevt->y;
|
|
||||||
- samp->pressure = aevt->pressure;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
-#endif /*DEBUG*/
|
|
||||||
- gettimeofday(&samp->tv,NULL);
|
|
||||||
- samp++;
|
|
||||||
- aevt++;
|
|
||||||
- ret -= sizeof(*aevt);
|
|
||||||
- }
|
|
||||||
+ while ((total < nr) && pen_down) {
|
|
||||||
+// fprintf(stdout, "total: %d, nr: %d\n", total, nr);
|
|
||||||
+#ifdef USE_INPUT_API
|
|
||||||
+ ret = get_input_event(ts, samp);
|
|
||||||
+#else
|
|
||||||
+ if (strcmp(tseventtype, "H3600") == 0) {
|
|
||||||
+ /* iPAQ style h3600 touchscreen events */
|
|
||||||
+ ret = get_h3600_event(ts, samp);
|
|
||||||
+ } else if (strcmp(tseventtype, "MK712") == 0) {
|
|
||||||
+ /* Hitachi Webpad events */
|
|
||||||
+ ret = get_mk712_event(ts, samp);
|
|
||||||
+ } else if (strcmp(tseventtype, "ARCTIC2") == 0) {
|
|
||||||
+ /* IBM Arctic II events */
|
|
||||||
+ ret = get_arctic2_event(ts, samp);
|
|
||||||
+ } else if (strcmp(tseventtype, "COLLIE") == 0) {
|
|
||||||
+ /* Sharp Zaurus SL-5000d/5500 events */
|
|
||||||
+ ret = get_collie_event(ts, samp);
|
|
||||||
+ } else if (strcmp(tseventtype,"CORGI") == 0) {
|
|
||||||
+ /* Sharp Zaurus SL-C700 events */
|
|
||||||
+ ret = get_corgi_event(ts, samp);
|
|
||||||
} else {
|
|
||||||
- return -1;
|
|
||||||
+ /* Use normal UCB1x00 type events */
|
|
||||||
+ ret = get_ucb1x00_event(ts, samp);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
+ if (ret != 0) break;
|
|
||||||
|
|
||||||
- } else if( strcmp(tseventtype,"COLLIE") == 0) { /* Sharp Zaurus SL-5000d/5500 events */
|
|
||||||
- collie_evt = alloca(sizeof(*collie_evt) * nr);
|
|
||||||
- ret = read(ts->fd, collie_evt, sizeof(*collie_evt) * nr);
|
|
||||||
- if(ret > 0) {
|
|
||||||
- int nr = ret / sizeof(*collie_evt);
|
|
||||||
- while(ret >= sizeof(*collie_evt)) {
|
|
||||||
- samp->x = collie_evt->x;
|
|
||||||
- samp->y = collie_evt->y;
|
|
||||||
- samp->pressure = collie_evt->pressure;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
-#endif /*DEBUG*/
|
|
||||||
- samp->tv.tv_usec = collie_evt->millisecs % 1000;
|
|
||||||
- samp->tv.tv_sec = collie_evt->millisecs / 1000;
|
|
||||||
- samp++;
|
|
||||||
- collie_evt++;
|
|
||||||
- ret -= sizeof(*collie_evt);
|
|
||||||
+ if (pthres == -1) {
|
|
||||||
+ char *pthresvar = getenv("TSLIB_PTHRES");
|
|
||||||
+ pthres = 100;
|
|
||||||
+ if (pthresvar != NULL) {
|
|
||||||
+ int p = strtol(pthresvar, (char **)NULL, 10);
|
|
||||||
+ if (p != -1) pthres = p;
|
|
||||||
}
|
|
||||||
- } else {
|
|
||||||
- return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- } else if( strcmp(tseventtype,"CORGI") == 0) { /* Sharp Zaurus SL-C700 events */
|
|
||||||
- corgi_evt = alloca(sizeof(*corgi_evt) * nr);
|
|
||||||
- ret = read(ts->fd, corgi_evt, sizeof(*corgi_evt) * nr);
|
|
||||||
- if(ret > 0) {
|
|
||||||
- int nr = ret / sizeof(*corgi_evt);
|
|
||||||
- while(ret >= sizeof(*corgi_evt)) {
|
|
||||||
- samp->x = corgi_evt->x;
|
|
||||||
- samp->y = corgi_evt->y;
|
|
||||||
- samp->pressure = corgi_evt->pressure;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
-#endif /*DEBUG*/
|
|
||||||
- samp->tv.tv_usec = corgi_evt->millisecs % 1000;
|
|
||||||
- samp->tv.tv_sec = corgi_evt->millisecs / 1000;
|
|
||||||
- samp++;
|
|
||||||
- corgi_evt++;
|
|
||||||
- ret -= sizeof(*corgi_evt);
|
|
||||||
- }
|
|
||||||
+ if (samp->pressure < pthres) {
|
|
||||||
+ /* pen released, send events up */
|
|
||||||
+ pen_down = 0;
|
|
||||||
+ /* set x and y to previous values */
|
|
||||||
+ samp->x = x_save;
|
|
||||||
+ samp->y = y_save;
|
|
||||||
} else {
|
|
||||||
- return -1;
|
|
||||||
+ pen_down = 1;
|
|
||||||
+ x_save = samp->x;
|
|
||||||
+ y_save = samp->y;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- } else { /* Use normal UCB1x00 type events */
|
|
||||||
- evt = alloca(sizeof(*evt) * nr);
|
|
||||||
- ret = read(ts->fd, evt, sizeof(*evt) * nr);
|
|
||||||
- if(ret > 0) {
|
|
||||||
- int nr = ret / sizeof(*evt);
|
|
||||||
- while(ret >= sizeof(*evt)) {
|
|
||||||
- samp->x = evt->x;
|
|
||||||
- samp->y = evt->y;
|
|
||||||
- samp->pressure = evt->pressure;
|
|
||||||
#ifdef DEBUG
|
|
||||||
- fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
|
|
||||||
+ fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x, samp->y, samp->pressure);
|
|
||||||
#endif /*DEBUG*/
|
|
||||||
- samp->tv.tv_usec = evt->stamp.tv_usec;
|
|
||||||
- samp->tv.tv_sec = evt->stamp.tv_sec;
|
|
||||||
- samp++;
|
|
||||||
- evt++;
|
|
||||||
- ret -= sizeof(*evt);
|
|
||||||
- }
|
|
||||||
- } else {
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
+ samp++;
|
|
||||||
+ total++;
|
|
||||||
}
|
|
||||||
- ret = nr;
|
|
||||||
-#endif /* USE_INPUT_API */
|
|
||||||
|
|
||||||
+ if (ret != 0) ret = -1;
|
|
||||||
+ if (total) ret = total;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
Upstream-Status: Submitted [https://github.com/kergoth/tslib/pull/14]
|
|
||||||
|
|
||||||
Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
|
|
||||||
diff -Nurd tslib-1.0/configure.ac tslib-1.0/configure.ac
|
|
||||||
--- tslib-1.0/configure.ac 2006-08-25 00:02:55.000000000 +0300
|
|
||||||
+++ tslib-1.0/configure.ac 2013-01-03 06:05:02.486882412 +0200
|
|
||||||
@@ -6,7 +6,7 @@
|
|
||||||
# AC_CONFIG_AUX_DIR(config)
|
|
||||||
AM_INIT_AUTOMAKE(dist-bzip2)
|
|
||||||
AC_CONFIG_SRCDIR([src/ts_close.c])
|
|
||||||
-AM_CONFIG_HEADER(config.h)
|
|
||||||
+AC_CONFIG_HEADERS(config.h)
|
|
||||||
|
|
||||||
PACKAGE_DESCRIPTION="Touchscreen Access Library"
|
|
||||||
AC_SUBST(PACKAGE_DESCRIPTION)
|
|
|
@ -1,30 +0,0 @@
|
||||||
Get patch from: http://permalink.gmane.org/gmane.comp.lib.uclibc.buildroot/27614
|
|
||||||
|
|
||||||
Upstream-Status: Inappropriate [configuration]
|
|
||||||
|
|
||||||
diff --git a/tests/ts_calibrate.c b/tests/ts_calibrate.c
|
|
||||||
index 004517b..c0a9771 100644
|
|
||||||
--- a/tests/ts_calibrate.c
|
|
||||||
+++ b/tests/ts_calibrate.c
|
|
||||||
@@ -21,6 +21,7 @@
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
#include <linux/kd.h>
|
|
||||||
#include <linux/vt.h>
|
|
||||||
#include <linux/fb.h>
|
|
||||||
@@ -224,9 +225,11 @@ int main()
|
|
||||||
for (i = 0; i < 7; i++) printf("%d ", cal.a [i]);
|
|
||||||
printf("\n");
|
|
||||||
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
|
|
||||||
- cal_fd = open (calfile, O_CREAT | O_RDWR);
|
|
||||||
+ cal_fd = open (calfile, O_CREAT | O_RDWR,
|
|
||||||
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
|
||||||
} else {
|
|
||||||
- cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR);
|
|
||||||
+ cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR,
|
|
||||||
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
|
||||||
}
|
|
||||||
sprintf (cal_buffer,"%d %d %d %d %d %d %d",
|
|
||||||
cal.a[1], cal.a[2], cal.a[0],
|
|
|
@ -10,21 +10,13 @@ SECTION = "base"
|
||||||
LICENSE = "LGPLv2"
|
LICENSE = "LGPLv2"
|
||||||
LIC_FILES_CHKSUM = "file://COPYING;md5=f30a9716ef3762e3467a2f62bf790f0a"
|
LIC_FILES_CHKSUM = "file://COPYING;md5=f30a9716ef3762e3467a2f62bf790f0a"
|
||||||
|
|
||||||
PR = "r21"
|
SRC_URI = "https://github.com/kergoth/tslib/releases/download/${PV}/tslib-${PV}.tar.xz;downloadfilename=tslib-${PV}.tar.xz \
|
||||||
|
|
||||||
SRC_URI = "http://download.berlios.de/tslib/tslib-${PV}.tar.bz2 \
|
|
||||||
file://fix_version.patch \
|
|
||||||
file://0001-Link-plugins-against-libts.patch \
|
|
||||||
file://ts.conf \
|
file://ts.conf \
|
||||||
file://tslib.sh \
|
file://tslib.sh \
|
||||||
file://set-open-mode-for-ts_calibrate_c.patch \
|
|
||||||
file://obsolete_automake_macros.patch \
|
|
||||||
"
|
"
|
||||||
|
|
||||||
SRC_URI[md5sum] = "92b2eb55b1e4ef7e2c0347069389390e"
|
SRC_URI[md5sum] = "14771f8607b341bb4b297819d37e837d"
|
||||||
SRC_URI[sha256sum] = "9c40d914e4f6fe00bdd77137d671c7ce4f211686228f2eb8b2d3c2360bc249c8"
|
SRC_URI[sha256sum] = "fe35e5f710ea933b118f710e2ce4403ac076fe69926b570333867d4de082a51c"
|
||||||
SRC_URI_append_qemumips = " file://32bitBE-support.patch"
|
|
||||||
SRC_URI_append_qemuppc = " file://32bitBE-support.patch"
|
|
||||||
|
|
||||||
|
|
||||||
inherit autotools pkgconfig
|
inherit autotools pkgconfig
|
Loading…
Reference in New Issue