Hi,
here's a patch against the touch screen lib (tslib)
(see http://www.arm.linux.org.uk/cvs/).
Changes are:
- support for all the config variables of the linear
plugin module
- a bigger buffer for the config line
- bugfix to enable config line parsing
Cheers,
Frank.
diff --exclude=CVS -ruN tslib/plugins/linear.c tslib.patched/plugins/linear.c
--- tslib/plugins/linear.c Tue Jan 15 05:56:48 2002
+++ tslib.patched/plugins/linear.c Tue Feb 26 15:27:42 2002
@@ -12,6 +12,8 @@
*/
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
+#include <limits.h>
#include "tslib.h"
#include "tslib-filter.h"
@@ -77,10 +79,74 @@
return 0;
}
+static int linear_adjust(struct tslib_module_info *inf, char *str, void *data)
+{
+ struct tslib_linear *lin = (struct tslib_linear *)inf;
+ unsigned long v;
+ int err = errno;
+
+ v = strtoul(str, NULL, 0);
+
+ if (v == ULONG_MAX && errno == ERANGE)
+ return -1;
+
+ errno = err;
+ switch ((int)data) {
+ case 2:
+ lin->x_offset = v;
+ break;
+
+ case 3:
+ lin->x_mult = v;
+ break;
+
+ case 4:
+ lin->x_div = v;
+ break;
+
+ case 5:
+ lin->y_offset = v;
+ break;
+
+ case 6:
+ lin->y_mult = v;
+ break;
+
+ case 7:
+ lin->y_div = v;
+ break;
+
+ case 8:
+ lin->p_offset = v;
+ break;
+
+ case 9:
+ lin->p_mult = v;
+ break;
+
+ case 10:
+ lin->p_div = v;
+ break;
+
+ default:
+ return -1;
+ }
+ return 0;
+}
+
static const struct tslib_vars linear_vars[] =
{
{ "noxyswap", (void *)0, linear_xyswap },
- { "xyswap", (void *)1, linear_xyswap }
+ { "xyswap", (void *)1, linear_xyswap },
+ { "x_offset", (void *)2, linear_adjust },
+ { "x_mult", (void *)3, linear_adjust },
+ { "x_div", (void *)4, linear_adjust },
+ { "y_offset", (void *)5, linear_adjust },
+ { "y_mult", (void *)6, linear_adjust },
+ { "y_div", (void *)7, linear_adjust },
+ { "p_offset", (void *)8, linear_adjust },
+ { "p_mult", (void *)9, linear_adjust },
+ { "p_div", (void *)10, linear_adjust }
};
#define NR_VARS (sizeof(linear_vars) / sizeof(linear_vars[0]))
diff --exclude=CVS -ruN tslib/src/ts_config.c tslib.patched/src/ts_config.c
--- tslib/src/ts_config.c Sat Dec 22 13:12:06 2001
+++ tslib.patched/src/ts_config.c Mon Feb 25 14:28:27 2002
@@ -36,7 +36,7 @@
int ts_config(struct tsdev *ts)
{
- char buf[80], *p;
+ char buf[256], *p;
FILE *f;
int line = 0, ret = 0;
diff --exclude=CVS -ruN tslib/src/ts_parse_vars.c tslib.patched/src/ts_parse_vars.c
--- tslib/src/ts_parse_vars.c Sat Dec 22 13:12:06 2001
+++ tslib.patched/src/ts_parse_vars.c Tue Feb 26 11:12:08 2002
@@ -29,7 +29,8 @@
if (!str)
return 0;
- s = alloca(strlen(str));
+ s = alloca(strlen(str)+1);
+ strcpy( s, str);
while ((p = strsep(&s, " \t")) != NULL && ret == 0) {
const struct tslib_vars *v;