Files
LibreELEC.tv/packages/addons/addon-depends/tslib/patches/tslib-10-ts_uinput_touch-daemon.patch
Peter Vicman 9c3e78edee touchscreen: initial addon
includes ts_uinput_touch daemon which translates tslib events to uinput
includes belonging touchscreen calibration addon
2016-11-02 12:54:15 +01:00

5781 lines
276 KiB
Diff

From 2ae91258548c3682ad5df16ee22bdf28d9769bfe Mon Sep 17 00:00:00 2001
From: vpeter4 <peter.vicman@gmail.com>
Date: Mon, 29 Jun 2015 17:08:17 +0200
Subject: [PATCH 01/11] ts_uinput_touch: daemon translates tslib events to
uinput
On one side it gets events from touchscreen using tslib library. On the other end it creates one new virtual device using uinput kernel module that allows to handle the input subsystem from user land. Inside application data from tslib is translated to uinput events. For now only ABS_X, ABS_Y, ABS_PRESSURE and BTN_TOUCH. It behaves in a similar way than touchpad. Short tap sends button press event and long slide sends only xy coordinates. Currently using it in OpenELEC distribution and Kodi application.
I think something like this was proposed in TODO.
Also ST1232 raw input plugin is included for "st1232-touchscreen" (found on 7" display for Udoo board with i.MX6 SoC).
---
configure.ac | 1 +
plugins/Makefile.am | 13 +-
plugins/plugins.h | 1 +
plugins/st1232-raw.c | 303 +++++++++++++++++++++++
src/Makefile.am | 4 +
src/ts_load_module.c | 3 +
tests/Makefile.am | 5 +-
tests/testutils.c | 7 +
tests/ts_calibrate.c | 4 +
tests/ts_uinput_touch.c | 624 ++++++++++++++++++++++++++++++++++++++++++++++++
10 files changed, 963 insertions(+), 2 deletions(-)
create mode 100644 plugins/st1232-raw.c
create mode 100644 tests/ts_uinput_touch.c
diff --git a/configure.ac b/configure.ac
index dfdf269..6984002 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,6 +69,7 @@ TSLIB_CHECK_MODULE([dmc], [yes], [Enable building of dmc raw module (HP iPaq DMC
TSLIB_CHECK_MODULE([input], [yes], [Enable building of generic input raw module (Linux /dev/input/eventN support)])
TSLIB_CHECK_MODULE([touchkit], [yes], [Enable building of serial TouchKit raw module (Linux /dev/ttySX support)])
TSLIB_CHECK_MODULE([galax], [yes], [Enable building of HID USB eGalax raw module (Linux /dev/hiddevN support)])
+TSLIB_CHECK_MODULE([st1232], [yes], [Enable building of ST1232 raw module (Linux /dev/input/eventN support)])
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index e938e17..e8e89e0 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -121,6 +121,12 @@ else
CY8MRLN_PALMPRE_MODULE =
endif
+if ENABLE_ST1232_MODULE
+ST1232_MODULE = st1232.la
+else
+ST1232_MODULE =
+endif
+
pluginexec_LTLIBRARIES = \
$(LINEAR_MODULE) \
$(DEJITTER_MODULE) \
@@ -138,7 +144,8 @@ pluginexec_LTLIBRARIES = \
$(INPUT_MODULE) \
$(GALAX_MODULE) \
$(TOUCHKIT_MODULE) \
- $(CY8MRLN_PALMPRE_MODULE)
+ $(CY8MRLN_PALMPRE_MODULE) \
+ $(ST1232_MODULE)
variance_la_SOURCES = variance.c
variance_la_LDFLAGS = -module $(LTVSN)
@@ -197,3 +204,7 @@ linear_h2200_la_LDFLAGS = -module $(LTVSN)
cy8mrln_palmpre_la_SOURCES = cy8mrln-palmpre.c
cy8mrln_palmpre_la_LDFLAGS = -module $(LTVSN)
+
+st1232_la_SOURCES = st1232-raw.c
+st1232_la_LDFLAGS = -module $(LTVSN)
+st1232_la_LIBADD = $(top_builddir)/src/libts.la
diff --git a/plugins/plugins.h b/plugins/plugins.h
index 873aba5..d78877e 100644
--- a/plugins/plugins.h
+++ b/plugins/plugins.h
@@ -16,3 +16,4 @@ TSLIB_DECLARE_MODULE(arctic2);
TSLIB_DECLARE_MODULE(tatung);
TSLIB_DECLARE_MODULE(input);
TSLIB_DECLARE_MODULE(cy8mrln_palmpre);
+TSLIB_DECLARE_MODULE(st1232);
diff --git a/plugins/st1232-raw.c b/plugins/st1232-raw.c
new file mode 100644
index 0000000..f05d21d
--- /dev/null
+++ b/plugins/st1232-raw.c
@@ -0,0 +1,303 @@
+/*
+ * tslib/plugins/st1232-raw.c
+ *
+ * based on input-raw.c
+ * 2015.06 Peter Vicman
+ *
+ * Original version:
+ * Copyright (C) 2001 Russell King.
+ *
+ * Rewritten for the Linux input device API:
+ * Copyright (C) 2002 Nicolas Pitre
+ *
+ * This file is placed under the LGPL. Please see the file
+ * COPYING for more details.
+ *
+ *
+ * Plugin for "st1232-touchscreen" (found on 7" display for Udoo board with i.MX6 SoC)
+ *
+ * Read raw x, y, and timestamp from a touchscreen device.
+ * Only first mt report is taken and send upstream.
+ * ST1232 driver doesn't report ABS_X/Y events - only MT - and
+ * doesn't report BTN_TOUCH event.
+ *
+ * In memory of my mom and dad ...
+ */
+#include "config.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <limits.h>
+
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/time.h>
+#include <sys/types.h>
+
+#include <linux/input.h>
+#ifndef EV_SYN /* 2.4 kernel headers */
+# define EV_SYN 0x00
+#endif
+#ifndef EV_CNT
+# define EV_CNT (EV_MAX+1)
+#endif
+#ifndef ABS_CNT
+# define ABS_CNT (ABS_MAX+1)
+#endif
+#ifndef KEY_CNT
+# define KEY_CNT (KEY_MAX+1)
+#endif
+
+#ifndef ABS_MT_POSITION_X
+# define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
+# define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
+#endif
+
+#define SYN_MT_REPORT 2
+
+#include "tslib-private.h"
+
+#define GRAB_EVENTS_WANTED 1
+#define GRAB_EVENTS_ACTIVE 2
+
+struct tslib_input {
+ struct tslib_module_info module;
+
+ int current_x;
+ int current_y;
+ int current_p;
+
+ int sane_fd;
+ int using_syn;
+ int grab_events;
+ int invert_y;
+};
+
+#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
+#define BIT(nr) (1UL << (nr))
+#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
+#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
+#define BITS_PER_BYTE 8
+#define BITS_PER_LONG (sizeof(long) * BITS_PER_BYTE)
+#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
+
+static int check_fd(struct tslib_input *i)
+{
+ struct tsdev *ts = i->module.dev;
+ int version;
+ long evbit[BITS_TO_LONGS(EV_CNT)];
+ long absbit[BITS_TO_LONGS(ABS_CNT)];
+
+ if (ioctl(ts->fd, EVIOCGVERSION, &version) < 0) {
+ fprintf(stderr, "tslib: Selected device is not a Linux input event device\n");
+ return -1;
+ }
+
+ if (version < EV_VERSION) {
+ fprintf(stderr, "tslib: Selected device uses a different version of the event protocol than tslib was compiled for\n");
+ return -1;
+ }
+
+ if ( (ioctl(ts->fd, EVIOCGBIT(0, sizeof(evbit)), evbit) < 0) ||
+ !(evbit[BIT_WORD(EV_ABS)] & BIT_MASK(EV_ABS)) ||
+ !(evbit[BIT_WORD(EV_KEY)] & BIT_MASK(EV_KEY)) ) {
+ fprintf(stderr, "tslib: Selected device is not a touchscreen (must support ABS and KEY event types)\n");
+ return -1;
+ }
+
+ if ((ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit)) < 0 ||
+ !(absbit[BIT_WORD(ABS_MT_POSITION_X)] & BIT_MASK(ABS_MT_POSITION_X)) ||
+ !(absbit[BIT_WORD(ABS_MT_POSITION_Y)] & BIT_MASK(ABS_MT_POSITION_Y))) {
+ fprintf(stderr, "tslib: Selected device is not a touchscreen (must support ABS_MT_POSITION_X and ABS_MT_POSITION_Y events)\n");
+ return -1;
+ }
+
+ if (evbit[BIT_WORD(EV_SYN)] & BIT_MASK(EV_SYN))
+ i->using_syn = 1;
+
+ if (i->grab_events == GRAB_EVENTS_WANTED) {
+ if (ioctl(ts->fd, EVIOCGRAB, (void *)1)) {
+ fprintf(stderr, "tslib: Unable to grab selected input device\n");
+ return -1;
+ }
+ i->grab_events = GRAB_EVENTS_ACTIVE;
+ }
+
+ return 0;
+}
+
+static int ts_st1232_read(struct tslib_module_info *inf,
+ struct ts_sample *samp, int nr)
+{
+ struct tslib_input *i = (struct tslib_input *)inf;
+ struct tsdev *ts = inf->dev;
+ struct input_event ev;
+ int ret = nr;
+ int total = 0;
+ int mt_cnt = 0; /* data for first finger */
+
+ if (i->sane_fd == -1)
+ i->sane_fd = check_fd(i);
+
+ if (i->sane_fd == -1)
+ return 0;
+
+ if (i->using_syn) {
+ while (total < nr) {
+ ret = read(ts->fd, &ev, sizeof(struct input_event));
+ if (ret < (int) sizeof(struct input_event)) {
+ total = -1;
+ break;
+ }
+
+ switch (ev.type) {
+ case EV_SYN:
+ if (ev.code == SYN_MT_REPORT) {
+ mt_cnt++; /* data for next finger will come */
+ } else if (ev.code == SYN_REPORT) {
+ /* fill out a new complete event */
+ /* always send coordinate (last one on finger released) */
+ samp->x = i->current_x;
+ samp->y = i->current_y;
+ samp->pressure = i->current_p; /* is 0 on finger released */
+ samp->tv = ev.time;
+
+ i->current_p = 0; /* will be set again when getting xy cordinate */
+ samp++;
+ total++;
+ mt_cnt = 0;
+ }
+ break;
+ case EV_ABS:
+ if (mt_cnt > 0)
+ break; /* save data only for first finger */
+
+ switch (ev.code) {
+ case ABS_MT_POSITION_X:
+ i->current_x = ev.value;
+ i->current_p = 255; /* touched */
+ break;
+ case ABS_MT_POSITION_Y:
+ i->current_y = ev.value;
+ i->current_p = 255; /* touched */
+
+ if (i->invert_y > 0)
+ i->current_y = i->invert_y - i->current_y;
+ break;
+ }
+ break;
+ }
+ }
+
+ ret = total;
+ } else {
+ fprintf(stderr, "tslib: st1232 and not using syn\n");
+ sleep(1);
+ }
+
+ return ret;
+}
+
+static int ts_st1232_fini(struct tslib_module_info *inf)
+{
+ struct tslib_input *i = (struct tslib_input *)inf;
+ struct tsdev *ts = inf->dev;
+
+ if (i->grab_events == GRAB_EVENTS_ACTIVE) {
+ if (ioctl(ts->fd, EVIOCGRAB, (void *)0)) {
+ fprintf(stderr, "tslib: Unable to un-grab selected input device\n");
+ }
+ }
+
+ free(inf);
+ return 0;
+}
+
+static const struct tslib_ops __ts_st1232_ops = {
+ .read = ts_st1232_read,
+ .fini = ts_st1232_fini,
+};
+
+static int parse_raw_grab(struct tslib_module_info *inf, char *str, void *data)
+{
+ struct tslib_input *i = (struct tslib_input *)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 1:
+ if (v)
+ i->grab_events = GRAB_EVENTS_WANTED;
+ break;
+ default:
+ return -1;
+ }
+ return 0;
+}
+
+static int parse_invert_y(struct tslib_module_info *inf, char *str, void *data)
+{
+ struct tslib_input *i = (struct tslib_input *)inf;
+ int v;
+ int err = errno;
+
+ v = atoi(str);
+
+ if (v < 0)
+ return -1;
+
+ errno = err;
+ switch ((int)data) {
+ case 1:
+ i->invert_y = v;
+ break;
+ default:
+ return -1;
+ }
+ return 0;
+}
+
+static const struct tslib_vars raw_vars[] =
+{
+ { "grab_events", (void *)1, parse_raw_grab },
+ { "invert_y", (void *)1, parse_invert_y },
+};
+
+#define NR_VARS (sizeof(raw_vars) / sizeof(raw_vars[0]))
+
+TSAPI struct tslib_module_info *st1232_mod_init(struct tsdev *dev, const char *params)
+{
+ struct tslib_input *i;
+
+ i = malloc(sizeof(struct tslib_input));
+ if (i == NULL)
+ return NULL;
+
+ i->module.ops = &__ts_st1232_ops;
+ i->current_x = 0;
+ i->current_y = 0;
+ i->current_p = 0;
+ i->sane_fd = -1;
+ i->using_syn = 0;
+ i->grab_events = 0;
+ i->invert_y = 0;
+
+ if (tslib_parse_vars(&i->module, raw_vars, NR_VARS, params)) {
+ free(i);
+ return NULL;
+ }
+
+ return &(i->module);
+}
+
+#ifndef TSLIB_STATIC_ST1232_MODULE
+ TSLIB_MODULE_INIT(st1232_mod_init);
+#endif
diff --git a/src/Makefile.am b/src/Makefile.am
index 5278d82..b561aa8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -71,6 +71,10 @@ if ENABLE_STATIC_INPUT_MODULE
libts_la_SOURCES += $(top_srcdir)/plugins/input-raw.c
endif
+if ENABLE_STATIC_ST1232_MODULE
+libts_la_SOURCES += $(top_srcdir)/plugins/st1232-raw.c
+endif
+
libts_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-release $(LT_RELEASE) -export-dynamic
libts_la_LIBADD = -ldl
diff --git a/src/ts_load_module.c b/src/ts_load_module.c
index 00486be..886ca0a 100644
--- a/src/ts_load_module.c
+++ b/src/ts_load_module.c
@@ -73,6 +73,9 @@ static const struct {
#ifdef TSLIB_STATIC_VARIANCE_MODULE
{ "variance", variance_mod_init },
#endif
+#ifdef TSLIB_STATIC_ST1232_MODULE
+ { "st1232", st1232_mod_init },
+#endif
};
#define countof(arr) (sizeof(arr) / sizeof((arr)[0]))
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b76522d..2e80c18 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -11,7 +11,7 @@
AM_CFLAGS = -DTS_POINTERCAL=\"@TS_POINTERCAL@\" $(DEBUGFLAGS)
INCLUDES = -I$(top_srcdir)/src
-bin_PROGRAMS = ts_test ts_calibrate ts_print ts_print_raw ts_harvest
+bin_PROGRAMS = ts_test ts_calibrate ts_print ts_print_raw ts_harvest ts_uinput_touch
ts_test_SOURCES = ts_test.c fbutils.c fbutils.h font_8x8.c font_8x16.c font.h
ts_test_LDADD = $(top_builddir)/src/libts.la
@@ -27,3 +27,6 @@ ts_calibrate_LDADD = $(top_builddir)/src/libts.la
ts_harvest_SOURCES = ts_harvest.c fbutils.c fbutils.h testutils.c testutils.h font_8x8.c font_8x16.c font.h
ts_harvest_LDADD = $(top_builddir)/src/libts.la
+
+ts_uinput_touch_SOURCES = ts_uinput_touch.c testutils.c testutils.h
+ts_uinput_touch_LDADD = $(top_builddir)/src/libts.la
diff --git a/tests/testutils.c b/tests/testutils.c
index dbd5b41..bc3756f 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -15,6 +15,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
+#include <errno.h>
#include <sys/time.h>
#include "tslib.h"
#include "fbutils.h"
@@ -37,6 +38,9 @@ void getxy(struct tsdev *ts, int *x, int *y)
do {
if (ts_read_raw(ts, &samp[0], 1) < 0) {
+ if (errno == EINTR)
+ return;
+
perror("ts_read");
close_framebuffer ();
exit(1);
@@ -50,6 +54,9 @@ void getxy(struct tsdev *ts, int *x, int *y)
if (index < MAX_SAMPLES-1)
index++;
if (ts_read_raw(ts, &samp[index], 1) < 0) {
+ if (errno == EINTR)
+ return;
+
perror("ts_read");
close_framebuffer ();
exit(1);
diff --git a/tests/ts_calibrate.c b/tests/ts_calibrate.c
index eb0aca3..522fa7c 100644
--- a/tests/ts_calibrate.c
+++ b/tests/ts_calibrate.c
@@ -237,12 +237,16 @@ int main()
get_sample (ts, &cal, 0, 50, 50, "Top left");
clearbuf(ts);
+ usleep(500000);
get_sample (ts, &cal, 1, xres - 50, 50, "Top right");
clearbuf(ts);
+ usleep(500000);
get_sample (ts, &cal, 2, xres - 50, yres - 50, "Bot right");
clearbuf(ts);
+ usleep(500000);
get_sample (ts, &cal, 3, 50, yres - 50, "Bot left");
clearbuf(ts);
+ usleep(500000);
get_sample (ts, &cal, 4, xres / 2, yres / 2, "Center");
if (perform_calibration (&cal)) {
diff --git a/tests/ts_uinput_touch.c b/tests/ts_uinput_touch.c
new file mode 100644
index 0000000..60efc46
--- /dev/null
+++ b/tests/ts_uinput_touch.c
@@ -0,0 +1,624 @@
+/*
+ * tslib/src/ts_uinput_touch.c
+ *
+ * Copyright (C) 2001 Russell King.
+ * Copyright (C) 2015 Peter Vicman.
+ *
+ * This file is placed under the GPL. Please see the file
+ * COPYING for more details.
+ *
+ *
+ * Takes tslib events and send them to uinput as
+ * BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE values.
+ * Short tap send button event and longer tap send only coordinates.
+ * Tested only with Kodi application.
+ *
+ * code based on
+ * tslib/src/ts_test.c
+ * tslib/src/ts_calibrate.c
+ * http://thiemonge.org/getting-started-with-uinput
+ * http://lkcl.net/software/uinput/
+ *
+ * In memory of my mom and dad ...
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <sys/fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <linux/fb.h>
+#include <linux/input.h>
+#include <linux/uinput.h>
+#include "tslib.h"
+#include "testutils.h"
+
+#define die(str, args...) do { \
+ perror(str); \
+ exit(EXIT_FAILURE); \
+ } while(0);
+
+#define SET_ABS_MINMAX(dev, arg, min, max) do { \
+ (dev).absmin[arg] = min; \
+ (dev).absmax[arg] = max; \
+ } while(0);
+
+#define CANCEL_CALIBRATION if (! calibration_mode) return; else {}
+
+#define SOCK_PATH "/tmp/ts_calibrate.socket"
+
+#define CROSSHAIR_STR1 "Top left"
+#define CROSSHAIR_STR2 "Top right"
+#define CROSSHAIR_STR3 "Bottom right"
+#define CROSSHAIR_STR4 "Bottom left"
+#define CROSSHAIR_STR5 "Center"
+
+typedef struct {
+ int x[5], xfb[5];
+ int y[5], yfb[5];
+ int a[7];
+} calibration;
+
+char *uinput_names[] = {"/dev/uinput", "/dev/input/uinput", "/dev/misc/uinput"};
+#define UINPUT_NAMES_NUM ((int) (sizeof(uinput_names)/sizeof(char *)))
+
+__u32 xres = 0, yres = 0;
+struct timeval tv_short_tap = {0, 300}; /* sec, msec */
+bool calibration_mode = false;
+int sock = -1;
+
+static void daemonize() {
+ pid_t pid;
+
+ pid = fork();
+ if (pid == -1) {
+ die("failed to fork while daemonising (errno=%d)", errno)
+ } else if (pid != 0) {
+ exit(0);
+ }
+
+ umask(0);
+
+ if (setsid() == -1) {
+ die("failed to become a session leader while daemonising(errno=%d)", errno)
+ }
+
+ signal(SIGHUP,SIG_IGN);
+ pid=fork();
+ if (pid == -1) {
+ die("failed to fork while daemonizing (errno=%d)", errno)
+ } else if (pid != 0) {
+ exit(0);
+ }
+
+ if (chdir("/") == -1) {
+ die("failed to change working directory while daemonizing (errno=%d)", errno)
+ }
+
+ umask(0);
+ close(STDIN_FILENO);
+ close(STDOUT_FILENO);
+ close(STDERR_FILENO);
+
+ if (open("/dev/null", O_RDONLY) == -1) {
+ die("failed to reopen stdin while daemonizing (errno=%d)", errno)
+ }
+
+ if (open("/dev/null", O_WRONLY) == -1) {
+ die("failed to reopen stdout while daemonizing (errno=%d)", errno)
+ }
+
+ if (open("/dev/null", O_RDWR) == -1) {
+ die("failed to reopen stderr while daemonizing (errno=%d)", errno)
+ }
+}
+
+static void sig(int sig)
+{
+ fflush(stderr);
+ printf("signal %d caught\n", sig);
+ fflush(stdout);
+ exit(1);
+}
+
+static void set_ioctl(int fd, unsigned int cmd, __u16 value)
+{
+ if (ioctl(fd, cmd, value) < 0)
+ die("error: ioctl")
+}
+
+static int send_event(int fd, __u16 type, __u16 code, __s32 value)
+{
+ struct input_event event;
+ int ret;
+
+ memset(&event, 0, sizeof(event));
+ event.type = type;
+ event.code = code;
+ event.value = value;
+
+ ret = write(fd, &event, sizeof(event));
+ if (ret != sizeof(event)) {
+ fprintf(stderr, "Error on send_event");
+ return -1;
+ }
+
+ return 0;
+}
+
+static void signal_handler(int signal_number) {
+ if (signal_number == SIGUSR1)
+ calibration_mode = true;
+ else if (signal_number == SIGUSR2)
+ calibration_mode = false;
+ else
+ return;
+
+ printf("signal handler %d, current calibration_mode=%d\n", signal_number, calibration_mode == true ? 1 : 0);
+ if (calibration_mode) {
+ tv_short_tap.tv_sec += 600; /* little more time */
+ } else {
+ tv_short_tap.tv_sec -= 600;
+ }
+}
+
+static int perform_calibration(calibration *cal) {
+ int j;
+ float n, x, y, x2, y2, xy, z, zx, zy;
+ float det, a, b, c, e, f, i;
+ float scaling = 65536.0;
+
+// Get sums for matrix
+ n = x = y = x2 = y2 = xy = 0;
+ for(j=0;j<5;j++) {
+ n += 1.0;
+ x += (float)cal->x[j];
+ y += (float)cal->y[j];
+ x2 += (float)(cal->x[j]*cal->x[j]);
+ y2 += (float)(cal->y[j]*cal->y[j]);
+ xy += (float)(cal->x[j]*cal->y[j]);
+ }
+
+// Get determinant of matrix -- check if determinant is too small
+ det = n*(x2*y2 - xy*xy) + x*(xy*y - x*y2) + y*(x*xy - y*x2);
+ if(det < 0.1 && det > -0.1) {
+ printf("ts_calibrate: determinant is too small -- %f\n",det);
+ return 0;
+ }
+
+// Get elements of inverse matrix
+ a = (x2*y2 - xy*xy)/det;
+ b = (xy*y - x*y2)/det;
+ c = (x*xy - y*x2)/det;
+ e = (n*y2 - y*y)/det;
+ f = (x*y - n*xy)/det;
+ i = (n*x2 - x*x)/det;
+
+// Get sums for x calibration
+ z = zx = zy = 0;
+ for(j=0;j<5;j++) {
+ z += (float)cal->xfb[j];
+ zx += (float)(cal->xfb[j]*cal->x[j]);
+ zy += (float)(cal->xfb[j]*cal->y[j]);
+ }
+
+// Now multiply out to get the calibration for framebuffer x coord
+ cal->a[0] = (int)((a*z + b*zx + c*zy)*(scaling));
+ cal->a[1] = (int)((b*z + e*zx + f*zy)*(scaling));
+ cal->a[2] = (int)((c*z + f*zx + i*zy)*(scaling));
+
+ printf("%f %f %f\n",(a*z + b*zx + c*zy),
+ (b*z + e*zx + f*zy),
+ (c*z + f*zx + i*zy));
+
+// Get sums for y calibration
+ z = zx = zy = 0;
+ for(j=0;j<5;j++) {
+ z += (float)cal->yfb[j];
+ zx += (float)(cal->yfb[j]*cal->x[j]);
+ zy += (float)(cal->yfb[j]*cal->y[j]);
+ }
+
+// Now multiply out to get the calibration for framebuffer y coord
+ cal->a[3] = (int)((a*z + b*zx + c*zy)*(scaling));
+ cal->a[4] = (int)((b*z + e*zx + f*zy)*(scaling));
+ cal->a[5] = (int)((c*z + f*zx + i*zy)*(scaling));
+
+ printf("%f %f %f\n",(a*z + b*zx + c*zy),
+ (b*z + e*zx + f*zy),
+ (c*z + f*zx + i*zy));
+
+// If we got here, we're OK, so assign scaling to a[6] and return
+ cal->a[6] = (int)scaling;
+ return 1;
+/*
+// This code was here originally to just insert default values
+ for(j=0;j<7;j++) {
+ c->a[j]=0;
+ }
+ c->a[1] = c->a[5] = c->a[6] = 1;
+ return 1;
+*/
+}
+
+static void get_sample(struct tsdev *ts, calibration *cal,
+ int index, int x, int y, char *name)
+{
+ printf("getting sample for: %s\n", name);
+ getxy(ts, &cal->x[index], &cal->y[index]);
+ cal->xfb[index] = x;
+ cal->yfb[index] = y;
+ printf("%s: X = %4d Y = %4d\n", name, cal->x[index], cal->y[index]);
+}
+
+static void clearbuf(struct tsdev *ts)
+{
+ int fd = ts_fd(ts);
+ fd_set fdset;
+ struct timeval tv;
+ int nfds;
+ struct ts_sample sample;
+
+ while (1) {
+ FD_ZERO(&fdset);
+ FD_SET(fd, &fdset);
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+
+ nfds = select(fd + 1, &fdset, NULL, NULL, &tv);
+ if (nfds == 0) break;
+
+ if (ts_read_raw(ts, &sample, 1) < 0) {
+ perror("ts_read");
+ exit(1);
+ }
+ }
+}
+
+/* we don't use fb but this function is called in case of an error */
+void close_framebuffer(void) {}
+
+static void send_socket_crosshair_str(char *str)
+{
+ if (send(sock, str, strlen(str), 0) == -1) {
+ printf("send error\n");
+ }
+}
+
+static void run_calibration(struct tsdev *ts)
+{
+ calibration cal;
+ int cal_fd;
+ char cal_buffer[256];
+ char *calfile;
+ unsigned int i, len;
+
+ send_socket_crosshair_str(CROSSHAIR_STR1); /* show first touch point */
+ clearbuf(ts);
+ get_sample(ts, &cal, 0, 50, 50, CROSSHAIR_STR1);
+ CANCEL_CALIBRATION
+ send_socket_crosshair_str(CROSSHAIR_STR2);
+ clearbuf(ts);
+ get_sample(ts, &cal, 1, xres - 50, 50, CROSSHAIR_STR2);
+ CANCEL_CALIBRATION
+ send_socket_crosshair_str(CROSSHAIR_STR3);
+ clearbuf(ts);
+ get_sample(ts, &cal, 2, xres - 50, yres - 50, CROSSHAIR_STR3);
+ CANCEL_CALIBRATION
+ send_socket_crosshair_str(CROSSHAIR_STR4);
+ clearbuf(ts);
+ get_sample(ts, &cal, 3, 50, yres - 50, CROSSHAIR_STR4);
+ CANCEL_CALIBRATION
+ send_socket_crosshair_str(CROSSHAIR_STR5);
+ clearbuf(ts);
+ get_sample(ts, &cal, 4, xres / 2, yres / 2, CROSSHAIR_STR5);
+ CANCEL_CALIBRATION
+ send_socket_crosshair_str("done");
+ clearbuf(ts);
+
+ if (perform_calibration(&cal)) {
+ printf ("Calibration constants: ");
+ for (i = 0; i < 7; i++)
+ printf("%d ", cal.a[i]);
+
+ printf("\n");
+ calfile = getenv("TSLIB_CALIBFILE");
+ if (calfile != NULL) {
+ cal_fd = open(calfile, O_CREAT | O_TRUNC | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+ if (cal_fd == -1) {
+ printf("Calibration failed - can't open calibration file %s.\n", calfile);
+ return;
+ }
+ } else {
+ cal_fd = open(TS_POINTERCAL, O_CREAT | O_TRUNC | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+ if (cal_fd == -1) {
+ printf("Calibration failed - can't open calibration file %s.\n", TS_POINTERCAL);
+ return;
+ }
+ }
+
+ len = sprintf(cal_buffer, "%d %d %d %d %d %d %d %d %d",
+ cal.a[1], cal.a[2], cal.a[0],
+ cal.a[4], cal.a[5], cal.a[3], cal.a[6],
+ xres, yres);
+ write(cal_fd, cal_buffer, len);
+ close(cal_fd);
+ } else {
+ printf("Calibration failed - wrong data.\n");
+ }
+}
+
+int get_resolution(void)
+{
+ static char *fbdevice;
+ int fd;
+ static struct fb_var_screeninfo var;
+
+ fbdevice = getenv("TSLIB_FBDEVICE");
+ if (fbdevice == NULL)
+ return -1;
+
+ printf("using fb device: %s\n", fbdevice);
+ fd = open(fbdevice, O_RDWR);
+ if (fd == -1) {
+ perror("open fbdevice");
+ return -1;
+ }
+
+ if (ioctl(fd, FBIOGET_VSCREENINFO, &var) < 0) {
+ perror("ioctl FBIOGET_VSCREENINFO");
+ close(fd);
+ return -1;
+ }
+
+ xres = var.xres;
+ yres = var.yres;
+
+ close(fd);
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int c;
+ char *tsdevice;
+ struct tsdev *ts;
+ int ret;
+ struct ts_sample samp;
+ int uinput_fd;
+ struct uinput_user_dev uidev;
+ int daemon = 0;
+ struct timeval tv_last;
+ struct timeval tv_sub;
+ char *touch_str;
+ int val;
+ struct sigaction sa;
+ struct sockaddr_un remote_addr;
+
+ touch_str = getenv("TSLIB_TAP_TIME");
+ if (touch_str != NULL) {
+ val = atoi(touch_str);
+ if (val < 1000) {
+ tv_short_tap.tv_sec = 0;
+ tv_short_tap.tv_usec = val;
+ } else {
+ tv_short_tap.tv_sec = val / 1000;
+ tv_short_tap.tv_usec = val % 1000;
+ }
+ }
+
+ get_resolution();
+
+ while ((c = getopt(argc, argv, "?dt:x:y:")) != -1) {
+ switch (c) {
+ case 'd':
+ daemon = 1;
+ break;
+ case 't':
+ val = atoi(optarg);
+ if (val < 1000) {
+ tv_short_tap.tv_sec = 0;
+ tv_short_tap.tv_usec = val;
+ } else {
+ tv_short_tap.tv_sec = val / 1000;
+ tv_short_tap.tv_usec = val % 1000;
+ }
+
+ break;
+ case 'x':
+ xres = atoi(optarg);
+ break;
+ case 'y':
+ yres = atoi(optarg);
+ break;
+ case '?':
+ if (isprint(optopt))
+ fprintf (stderr, "Unknown option '-%c'.\n", optopt);
+ else
+ fprintf (stderr, "Unknown option character '\\x%x'.\n", optopt);
+ return 1;
+ default:
+ die("getopt")
+ }
+ }
+
+ printf("resolution: %dx%d\n", xres, yres);
+
+ signal(SIGSEGV, sig);
+ signal(SIGINT, sig);
+ signal(SIGTERM, sig);
+
+ tsdevice = getenv("TSLIB_TSDEVICE");
+
+ if (tsdevice == NULL) {
+ errno = ENOENT;
+ die("error: TSLIB_TSDEVICE")
+ }
+
+ printf("using touch device: %s\n", tsdevice);
+
+ ts = ts_open(tsdevice, 0); // 0 nonblock
+ if (!ts) {
+ die("ts_open")
+ }
+
+ if (ts_config(ts)) {
+ die("ts_config")
+ }
+
+ system("modprobe uinput");
+
+ for (c=0; c < UINPUT_NAMES_NUM; c++) {
+ uinput_fd = open(uinput_names[c], O_WRONLY | O_NONBLOCK);
+ if (uinput_fd >= 0)
+ break;
+ }
+
+ if (uinput_fd < 0)
+ die("error: opening uinput")
+
+ if (tv_short_tap.tv_sec == 0)
+ printf("Short tap time: %li msec\n", tv_short_tap.tv_usec);
+ else
+ printf("Short tap time: %li.%li sec\n", tv_short_tap.tv_sec, tv_short_tap.tv_usec);
+
+ memset (&sa, 0, sizeof (sa));
+ sa.sa_handler = &signal_handler;
+ sigaction(SIGUSR1, &sa, NULL);
+ sigaction(SIGUSR2, &sa, NULL);
+
+ if (daemon == 1) {
+ printf("daemonizing...\n");
+ daemonize();
+ }
+
+ set_ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN);
+ set_ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY);
+ set_ioctl(uinput_fd, UI_SET_KEYBIT, BTN_TOUCH);
+ set_ioctl(uinput_fd, UI_SET_EVBIT, EV_ABS);
+ set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_X);
+ set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_Y);
+ set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_PRESSURE);
+
+ memset(&uidev, 0, sizeof(uidev));
+
+ snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "tslib to uinput daemon");
+ SET_ABS_MINMAX(uidev, ABS_X, 0, xres)
+ SET_ABS_MINMAX(uidev, ABS_Y, 0, yres)
+ SET_ABS_MINMAX(uidev, ABS_PRESSURE, 0, 255)
+
+ uidev.id.bustype = BUS_USB;
+ uidev.id.vendor = 0x34a5;
+ uidev.id.product = 0x67b8;
+ uidev.id.version = 1;
+
+ if (write(uinput_fd, &uidev, sizeof(uidev)) < 0)
+ die("error: write")
+
+ if (ioctl(uinput_fd, UI_DEV_CREATE) < 0)
+ die("error: ioctl UI_DEV_CREATE")
+
+ tv_short_tap.tv_usec *= 1000; /* msec to usec */
+ timerclear(&tv_last);
+ while (1) {
+ touch_str = "";
+ if (calibration_mode) {
+ usleep(250000); /* app become ready */
+ printf("calibration mode started\n");
+
+ sock = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sock == -1) {
+ die("socket");
+ }
+
+ printf("trying to connect\n");
+
+ remote_addr.sun_family = AF_UNIX;
+ strcpy(remote_addr.sun_path, SOCK_PATH);
+ val = strlen(remote_addr.sun_path) + sizeof(remote_addr.sun_family);
+ if (connect(sock, (struct sockaddr *) &remote_addr, val) == -1) {
+ calibration_mode = false;
+ close(sock);
+ printf("connect error, skip calibration\n");
+ usleep(200000);
+ continue;
+ }
+
+ printf("connected\n");
+ run_calibration(ts);
+ calibration_mode = false;
+ close(sock);
+ printf("calibration mode finished\n");
+ }
+
+ ret = ts_read(ts, &samp, 1);
+ if (ret < 0) {
+ usleep(200000);
+ continue;
+ } else if (ret == 0) {
+ /* can't grab ts device */
+ usleep(400000);
+ } else if (ret != 1)
+ continue;
+
+ send_event(uinput_fd, EV_ABS, ABS_X, samp.x);
+ send_event(uinput_fd, EV_ABS, ABS_Y, samp.y);
+
+ if (samp.pressure > 0) { /* touched */
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 255);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+
+ if (timerisset(&tv_last) == false) {
+ memcpy(&tv_last, &samp.tv, sizeof(struct timeval)); /* touched first time */
+ touch_str = "touched first";
+ }
+ } else { /* released */
+ timersub(&samp.tv, &tv_last, &tv_sub);
+ if (timercmp(&tv_sub, &tv_short_tap, <=)) {
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 255);
+ send_event(uinput_fd, EV_KEY, BTN_TOUCH, 1);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
+ send_event(uinput_fd, EV_KEY, BTN_TOUCH, 0);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+
+ touch_str = "released and send button";
+ } else {
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+ touch_str = "released";
+ }
+
+ timerclear(&tv_last);
+ }
+
+ printf("%ld.%06ld: %6d %6d %6d %s\n", samp.tv.tv_sec, samp.tv.tv_usec,
+ samp.x, samp.y, samp.pressure, touch_str);
+ }
+
+ if (ioctl(uinput_fd, UI_DEV_DESTROY) < 0)
+ die("error: ioctl UI_DEV_DESTROY")
+
+ close(uinput_fd);
+
+ return 0;
+}
From 9d3429357dfda9038118189a600a191a7d99400e Mon Sep 17 00:00:00 2001
From: vpeter4 <peter.vicman@gmail.com>
Date: Tue, 30 Jun 2015 08:56:37 +0200
Subject: [PATCH 02/11] ts_uinput_touch: kodi addon for calibration
---
kodi-addon/plugin.program.ts_calibrate/LICENSE.txt | 339 +++++++++++++++++++++
kodi-addon/plugin.program.ts_calibrate/addon.py | 158 ++++++++++
kodi-addon/plugin.program.ts_calibrate/addon.xml | 18 ++
.../plugin.program.ts_calibrate/changelog.txt | 1 +
kodi-addon/plugin.program.ts_calibrate/icon.png | Bin 0 -> 17875 bytes
.../resources/language/English/strings.xml | 5 +
.../resources/media/background.jpg | Bin 0 -> 125107 bytes
.../resources/media/crosshair.png | Bin 0 -> 168 bytes
.../resources/settings.xml | 7 +
9 files changed, 528 insertions(+)
create mode 100644 kodi-addon/plugin.program.ts_calibrate/LICENSE.txt
create mode 100644 kodi-addon/plugin.program.ts_calibrate/addon.py
create mode 100644 kodi-addon/plugin.program.ts_calibrate/addon.xml
create mode 100644 kodi-addon/plugin.program.ts_calibrate/changelog.txt
create mode 100644 kodi-addon/plugin.program.ts_calibrate/icon.png
create mode 100644 kodi-addon/plugin.program.ts_calibrate/resources/language/English/strings.xml
create mode 100644 kodi-addon/plugin.program.ts_calibrate/resources/media/background.jpg
create mode 100644 kodi-addon/plugin.program.ts_calibrate/resources/media/crosshair.png
create mode 100644 kodi-addon/plugin.program.ts_calibrate/resources/settings.xml
diff --git a/kodi-addon/plugin.program.ts_calibrate/LICENSE.txt b/kodi-addon/plugin.program.ts_calibrate/LICENSE.txt
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/kodi-addon/plugin.program.ts_calibrate/LICENSE.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/kodi-addon/plugin.program.ts_calibrate/addon.py b/kodi-addon/plugin.program.ts_calibrate/addon.py
new file mode 100644
index 0000000..3285adb
--- /dev/null
+++ b/kodi-addon/plugin.program.ts_calibrate/addon.py
@@ -0,0 +1,158 @@
+################################################################################
+# This file is part of OpenELEC - http://www.openelec.tv
+# Copyright (C) 2009-2015 Stephan Raue (stephan@openelec.tv)
+# Copyright (C) 2015 Peter Vicman
+#
+# OpenELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# OpenELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with OpenELEC. If not, see <http://www.gnu.org/licenses/>.
+################################################################################
+
+import os
+import socket
+import sys
+from threading import Thread
+import xbmc
+import xbmcgui
+import xbmcaddon
+
+TEXT_ALIGN_LEFT = 0
+TEXT_ALIGN_RIGHT = 1
+TEXT_ALIGN_CENTER_X = 2
+TEXT_ALIGN_CENTER_Y = 4
+TEXT_ALIGN_RIGHT_CENTER_Y = 5
+TEXT_ALIGN_LEFT_CENTER_X_CENTER_Y = 6
+ACTION_PREVIOUS_MENU = 10
+ACTION_BACKSPACE = 92
+
+SOCK_PATH = "/tmp/ts_calibrate.socket"
+TSLIB_EDGE_OFFEST = 50
+CROSSHAIR_IMAGE_SIZE = 23
+CROSSHAIR_IMAGE_OFFSET = 11
+SKIN_WIDTH = 1280 # we are using 720p skin
+SKIN_HEIGHT = 720
+
+class coordinates:
+ var_x = 0
+ var_y = 0
+
+def server_thread(conn, self):
+ while True:
+ data = conn.recv(128)
+ if not data:
+ break
+
+ self.currentTarget = self.currentTarget + 1
+ if self.currentTarget > 0:
+ self.removeControl(self.targetImage)
+
+ if self.currentTarget == 5:
+ xbmcgui.Dialog().ok("Calibration", "Calibration done.")
+ break
+
+ self.info.setLabel("Touch '" + data + "' crosshair")
+ self.targetImage = xbmcgui.ControlImage(
+ self.touch_points[self.currentTarget].var_x - CROSSHAIR_IMAGE_OFFSET,
+ self.touch_points[self.currentTarget].var_y - CROSSHAIR_IMAGE_OFFSET,
+ CROSSHAIR_IMAGE_SIZE, CROSSHAIR_IMAGE_SIZE,
+ self.crosshair_path, colorDiffuse='0x00000000')
+ self.addControl(self.targetImage)
+
+ # out of loop, close connection
+ conn.close()
+ os.remove(SOCK_PATH)
+ self.retval = 0
+ self.close()
+
+class ts_calibrate(xbmcgui.WindowDialog):
+ def __init__(self):
+ self.retval = 0
+ self.media_path=os.path.join(addon.getAddonInfo('path'), 'resources','media') + '/'
+ self.crosshair_path = self.media_path + 'crosshair.png'
+ self.currentTarget = -1
+
+ self.edge_offset_x = TSLIB_EDGE_OFFEST * SKIN_WIDTH / self.getWidth()
+ self.edge_offset_y = TSLIB_EDGE_OFFEST * SKIN_HEIGHT / self.getHeight()
+
+ self.touch_points = [coordinates() for i in range(5)]
+ self.touch_points[0].var_x = self.edge_offset_x
+ self.touch_points[0].var_y = self.edge_offset_y
+ self.touch_points[1].var_x = SKIN_WIDTH - self.edge_offset_x
+ self.touch_points[1].var_y = self.edge_offset_y
+ self.touch_points[2].var_x = SKIN_WIDTH - self.edge_offset_x
+ self.touch_points[2].var_y = SKIN_HEIGHT - self.edge_offset_y
+ self.touch_points[3].var_x = self.edge_offset_x
+ self.touch_points[3].var_y = SKIN_HEIGHT - self.edge_offset_y
+ self.touch_points[4].var_x = SKIN_WIDTH / 2
+ self.touch_points[4].var_y = SKIN_HEIGHT / 2
+
+ self.background = xbmcgui.ControlImage(0, 0, SKIN_WIDTH, SKIN_HEIGHT,
+ self.media_path + 'background.jpg', colorDiffuse = '0xffffffff')
+ self.addControl(self.background)
+
+ tmp_str = "Tslib/Kodi calibration utility\n\nTouch crosshair to calibrate"
+ tmp_str += "\n\nresolution: " + str(self.getWidth()) + "x" + str(self.getHeight())
+ tmp_str += "\nskin: " + str(SKIN_WIDTH) + "x" + str(SKIN_HEIGHT)
+
+ self.about = xbmcgui.ControlLabel(
+ 10, 80, SKIN_WIDTH, 400,
+ "", textColor = '0xffffffff', font = 'font25', alignment = TEXT_ALIGN_CENTER_X)
+ self.addControl(self.about)
+ self.about.setLabel(tmp_str)
+
+ self.info = xbmcgui.ControlLabel(
+ 20, SKIN_HEIGHT/2 - 40,
+ 1000, 400,
+ "", textColor = '0xffffffff', font = 'font30', alignment = TEXT_ALIGN_LEFT)
+ self.addControl(self.info)
+ self.info.setLabel("")
+
+ if os.path.exists(SOCK_PATH):
+ os.remove(SOCK_PATH)
+
+ sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ sock.bind(SOCK_PATH)
+ sock.listen(1)
+
+ # enter calibration mode
+ os.system("killall -SIGUSR1 ts_uinput_touch")
+
+ print 'Waiting for calibration connection'
+ conn, addr = sock.accept()
+ print 'Calibration connection accepted'
+
+ self.t = Thread(target=server_thread, args=(conn, self,))
+ self.t.start()
+
+ def onAction(self, action):
+ if action == ACTION_PREVIOUS_MENU or action == ACTION_BACKSPACE:
+ self.retval = 0
+ self.close()
+
+addon = xbmcaddon.Addon(id = 'plugin.program.ts_calibrate')
+finished = False
+
+while finished == False:
+ dialog = ts_calibrate()
+ dialog.doModal()
+
+ if dialog.retval == 0:
+ finished = True
+ del dialog
+
+del addon
+# exit calibration mode
+os.system("killall -SIGUSR2 ts_uinput_touch")
+
+if os.path.exists(SOCK_PATH):
+ os.remove(SOCK_PATH)
+
\ No newline at end of file
diff --git a/kodi-addon/plugin.program.ts_calibrate/addon.xml b/kodi-addon/plugin.program.ts_calibrate/addon.xml
new file mode 100644
index 0000000..e4de5ca
--- /dev/null
+++ b/kodi-addon/plugin.program.ts_calibrate/addon.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="plugin.program.ts_calibrate" name="Tslib/Kodi Touch Screen Calibration" version="1.0.0" provider-name="vpeter">
+ <requires>
+ <import addon="xbmc.python" version="2.1.0"/>
+ </requires>
+ <extension point="xbmc.python.pluginsource" library="addon.py">
+ <provides>executable</provides>
+ </extension>
+ <extension point="xbmc.addon.metadata">
+ <platform>all</platform>
+ <disclaimer></disclaimer>
+ <summary lang="en">Tslib/Kodi touchscreen calibration tool</summary>
+ <description lang="en">Tslib/Kodi touchscreen calibration tool</description>
+ <license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
+ <language/>
+ <website>http://openelec.tv/</website>
+ </extension>
+</addon>
diff --git a/kodi-addon/plugin.program.ts_calibrate/changelog.txt b/kodi-addon/plugin.program.ts_calibrate/changelog.txt
new file mode 100644
index 0000000..f061e08
--- /dev/null
+++ b/kodi-addon/plugin.program.ts_calibrate/changelog.txt
@@ -0,0 +1 @@
+1.0.0 first release
diff --git a/kodi-addon/plugin.program.ts_calibrate/icon.png b/kodi-addon/plugin.program.ts_calibrate/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d47bf4b256e1039de19608cd8f7fe7340696d65
GIT binary patch
literal 17875
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
literal 0
HcmV?d00001
diff --git a/kodi-addon/plugin.program.ts_calibrate/resources/language/English/strings.xml b/kodi-addon/plugin.program.ts_calibrate/resources/language/English/strings.xml
new file mode 100644
index 0000000..a427554
--- /dev/null
+++ b/kodi-addon/plugin.program.ts_calibrate/resources/language/English/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+ <string id="1000">General</string>
+ <string id="1010">Recalibrate after reboot</string>
+</strings>
diff --git a/kodi-addon/plugin.program.ts_calibrate/resources/media/background.jpg b/kodi-addon/plugin.program.ts_calibrate/resources/media/background.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3d5b572bd46fc88c8ed48a5c15cb5351b8500e1d
GIT binary patch
literal 125107
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%0D$q2BlFg|
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
L4~l}C{x|bKRFD`n
literal 0
HcmV?d00001
diff --git a/kodi-addon/plugin.program.ts_calibrate/resources/media/crosshair.png b/kodi-addon/plugin.program.ts_calibrate/resources/media/crosshair.png
new file mode 100644
index 0000000000000000000000000000000000000000..779f142538af3eec5795f394a7edd93745f20908
GIT binary patch
literal 168
zcmeAS@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF6@;zM~Ln`JZCrIc#_zwi0f#;c$
zb9Vpz&$y{&y4GT*jco!~y4NvCD;#@z;+cWqbF)tjzP#$36QmY8n@6zu&zQ_5At}+(
zt>Fd)60<|TGV{AlRx0IHUlyXm#?v1(k#%PC8&$6?rA-VgU(Q*^z_8(qrOl(N`W-;4
O89ZJ6T-G@yGywqWAv!Yv
literal 0
HcmV?d00001
diff --git a/kodi-addon/plugin.program.ts_calibrate/resources/settings.xml b/kodi-addon/plugin.program.ts_calibrate/resources/settings.xml
new file mode 100644
index 0000000..eac73fe
--- /dev/null
+++ b/kodi-addon/plugin.program.ts_calibrate/resources/settings.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<settings>
+ <category label="1000" >
+ <setting type="sep" />
+ <setting id="TS_RECALIBRATE" type="bool" label="1010" default="false" />
+ </category>
+</settings>
From b64b63ac2fc791cad6e79cf9236c47b928960c2e Mon Sep 17 00:00:00 2001
From: vpeter4 <peter.vicman@gmail.com>
Date: Sat, 4 Jul 2015 13:46:56 +0200
Subject: [PATCH 03/11] ts_uinput_touch: add BTN_RIGHT event if tapped for more
than 300 ms and less than a second BTN_RIGHT event is send
---
tests/ts_uinput_touch.c | 38 ++++++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 12 deletions(-)
mode change 100644 => 100755 tests/ts_uinput_touch.c
diff --git a/tests/ts_uinput_touch.c b/tests/ts_uinput_touch.c
old mode 100644
new mode 100755
index 60efc46..489a22f
--- a/tests/ts_uinput_touch.c
+++ b/tests/ts_uinput_touch.c
@@ -9,8 +9,9 @@
*
*
* Takes tslib events and send them to uinput as
- * BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE values.
- * Short tap send button event and longer tap send only coordinates.
+ * BTN_TOUCH, BTN_RIGHT, ABS_X, ABS_Y and ABS_PRESSURE values.
+ * Short tap send button touch event, little longer tap send button right event
+ * and longer tap send only coordinates.
* Tested only with Kodi application.
*
* code based on
@@ -77,7 +78,8 @@ char *uinput_names[] = {"/dev/uinput", "/dev/input/uinput", "/dev/misc/uinput"};
#define UINPUT_NAMES_NUM ((int) (sizeof(uinput_names)/sizeof(char *)))
__u32 xres = 0, yres = 0;
-struct timeval tv_short_tap = {0, 300}; /* sec, msec */
+struct timeval tv_short_tap = {0, 300}; /* sec, msec, short tap sends BTN_TOUCH */
+struct timeval tv_right_tap = {1, 0}; /* sec, msec, longer tap sends BTN_RIGHT */
bool calibration_mode = false;
int sock = -1;
@@ -169,11 +171,6 @@ static void signal_handler(int signal_number) {
return;
printf("signal handler %d, current calibration_mode=%d\n", signal_number, calibration_mode == true ? 1 : 0);
- if (calibration_mode) {
- tv_short_tap.tv_sec += 600; /* little more time */
- } else {
- tv_short_tap.tv_sec -= 600;
- }
}
static int perform_calibration(calibration *cal) {
@@ -501,6 +498,11 @@ int main(int argc, char *argv[])
else
printf("Short tap time: %li.%li sec\n", tv_short_tap.tv_sec, tv_short_tap.tv_usec);
+ if (tv_right_tap.tv_sec == 0)
+ printf("Right tap time: %li msec\n", tv_right_tap.tv_usec);
+ else
+ printf("Right tap time: %li.%li sec\n", tv_right_tap.tv_sec, tv_right_tap.tv_usec);
+
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &signal_handler;
sigaction(SIGUSR1, &sa, NULL);
@@ -511,10 +513,11 @@ int main(int argc, char *argv[])
daemonize();
}
- set_ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN);
- set_ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY);
+ set_ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN);
+ set_ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY);
set_ioctl(uinput_fd, UI_SET_KEYBIT, BTN_TOUCH);
- set_ioctl(uinput_fd, UI_SET_EVBIT, EV_ABS);
+ set_ioctl(uinput_fd, UI_SET_KEYBIT, BTN_RIGHT);
+ set_ioctl(uinput_fd, UI_SET_EVBIT, EV_ABS);
set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_X);
set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_Y);
set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_PRESSURE);
@@ -538,6 +541,8 @@ int main(int argc, char *argv[])
die("error: ioctl UI_DEV_CREATE")
tv_short_tap.tv_usec *= 1000; /* msec to usec */
+ tv_right_tap.tv_usec *= 1000; /* msec to usec */
+
timerclear(&tv_last);
while (1) {
touch_str = "";
@@ -601,7 +606,16 @@ int main(int argc, char *argv[])
send_event(uinput_fd, EV_KEY, BTN_TOUCH, 0);
send_event(uinput_fd, EV_SYN, 0, 0);
- touch_str = "released and send button";
+ touch_str = "released and send tap";
+ } else if (timercmp(&tv_sub, &tv_right_tap, <=)) {
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 255);
+ send_event(uinput_fd, EV_KEY, BTN_RIGHT, 1);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
+ send_event(uinput_fd, EV_KEY, BTN_RIGHT, 0);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+
+ touch_str = "released and send right";
} else {
send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
send_event(uinput_fd, EV_SYN, 0, 0);
From 0c95545167711eb2e906c8ef885956f3395e945a Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Mon, 31 Aug 2015 10:52:51 +0200
Subject: [PATCH 04/11] Add Waveshare touchscreen raw module inspiration from
derekhe: https://github.com/derekhe/wavesahre-7inch-touchscreen-driver
---
configure.ac | 1 +
plugins/Makefile.am | 13 +++-
plugins/plugins.h | 1 +
plugins/waveshare-raw.c | 202 ++++++++++++++++++++++++++++++++++++++++++++++++
src/Makefile.am | 4 +
5 files changed, 220 insertions(+), 1 deletion(-)
create mode 100644 plugins/waveshare-raw.c
diff --git a/configure.ac b/configure.ac
index 6984002..598ede7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -70,6 +70,7 @@ TSLIB_CHECK_MODULE([input], [yes], [Enable building of generic input raw module
TSLIB_CHECK_MODULE([touchkit], [yes], [Enable building of serial TouchKit raw module (Linux /dev/ttySX support)])
TSLIB_CHECK_MODULE([galax], [yes], [Enable building of HID USB eGalax raw module (Linux /dev/hiddevN support)])
TSLIB_CHECK_MODULE([st1232], [yes], [Enable building of ST1232 raw module (Linux /dev/input/eventN support)])
+TSLIB_CHECK_MODULE([waveshare], [yes], [Enable building of WaveShare raw module (Linux /dev/hidrawN support)])
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index e8e89e0..98881b3 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -127,6 +127,12 @@ else
ST1232_MODULE =
endif
+if ENABLE_WAVESHARE_MODULE
+WAVESHARE_MODULE = waveshare.la
+else
+WAVESHARE_MODULE =
+endif
+
pluginexec_LTLIBRARIES = \
$(LINEAR_MODULE) \
$(DEJITTER_MODULE) \
@@ -145,7 +151,8 @@ pluginexec_LTLIBRARIES = \
$(GALAX_MODULE) \
$(TOUCHKIT_MODULE) \
$(CY8MRLN_PALMPRE_MODULE) \
- $(ST1232_MODULE)
+ $(ST1232_MODULE) \
+ $(WAVESHARE_MODULE)
variance_la_SOURCES = variance.c
variance_la_LDFLAGS = -module $(LTVSN)
@@ -208,3 +215,7 @@ cy8mrln_palmpre_la_LDFLAGS = -module $(LTVSN)
st1232_la_SOURCES = st1232-raw.c
st1232_la_LDFLAGS = -module $(LTVSN)
st1232_la_LIBADD = $(top_builddir)/src/libts.la
+
+waveshare_la_SOURCES = waveshare-raw.c
+waveshare_la_LDFLAGS = -module $(LTVSN)
+waveshare_la_LIBADD = $(top_builddir)/src/libts.la
diff --git a/plugins/plugins.h b/plugins/plugins.h
index d78877e..f347e25 100644
--- a/plugins/plugins.h
+++ b/plugins/plugins.h
@@ -17,3 +17,4 @@ TSLIB_DECLARE_MODULE(tatung);
TSLIB_DECLARE_MODULE(input);
TSLIB_DECLARE_MODULE(cy8mrln_palmpre);
TSLIB_DECLARE_MODULE(st1232);
+TSLIB_DECLARE_MODULE(waveshare);
diff --git a/plugins/waveshare-raw.c b/plugins/waveshare-raw.c
new file mode 100644
index 0000000..ff13055
--- /dev/null
+++ b/plugins/waveshare-raw.c
@@ -0,0 +1,202 @@
+/*
+ * tslib driver for WaveShare touchscreens
+ * Copyright (C) 2015 Peter Vicman
+ * inspiration from derekhe: https://github.com/derekhe/wavesahre-7inch-touchscreen-driver
+ *
+ * This file is placed under the LGPL. Please see the file COPYING for more
+ * details.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <linux/hidraw.h>
+#include <stdbool.h>
+
+#include "config.h"
+#include "tslib-private.h"
+
+struct tslib_input {
+ struct tslib_module_info module;
+ int vendor;
+ int product;
+ int len;
+};
+
+static int waveshare_read(struct tslib_module_info *inf, struct ts_sample *samp, int nr)
+{
+ static bool reopen = true;
+ struct stat devstat;
+ struct hidraw_devinfo info;
+ char name_buf[512];
+ int cnt;
+ bool found = false;
+ struct tslib_input *i = (struct tslib_input *) inf;
+ struct tsdev *ts = inf->dev;
+ struct tsdev *ts_tmp;
+ char *buf;
+ int ret;
+
+ if (reopen == true) {
+ reopen = false;
+
+ if (i->vendor > 0 && i->product > 0) {
+ fprintf(stderr, "waveshare: searching for device using hidraw....\n");
+ for (cnt=0; cnt<HIDRAW_MAX_DEVICES; cnt++) {
+ snprintf(name_buf, sizeof(buf), "/dev/hidraw%d", cnt);
+ fprintf(stderr, "waveshare: device: %s\n", name_buf);
+ ret = stat(name_buf, &devstat);
+ if (ret < 0)
+ continue;
+
+ ts_tmp = ts_open(name_buf, 0);
+ if (!ts_tmp) {
+ continue;
+ }
+
+ fprintf(stderr, " opened\n");
+ ret = ioctl(ts_tmp->fd, HIDIOCGRAWINFO, &info);
+ if (ret < 0) {
+ ts_close(ts_tmp);
+ continue;
+ }
+
+ info.vendor &= 0xFFFF;
+ info.product &= 0xFFFF;
+ fprintf(stderr, " vid=%04X, pid=%04X\n", info.vendor, info.product);
+
+ if (i->vendor == info.vendor && i->product == info.product) {
+ if (ts->fd > 0)
+ close(ts->fd);
+
+ ts->fd = ts_tmp->fd;
+ free(ts_tmp);
+ found = true;
+ fprintf(stderr, " correct device\n");
+ break;
+ }
+
+ ts_close(ts_tmp);
+ } /* for HIDRAW_MAX_DEVICES */
+
+ if (found == false) {
+ return -1;
+ }
+ } /* vid/pid set */
+ } /* reopen */
+
+ buf = alloca(i->len * nr);
+
+ ret = read(ts->fd, buf, i->len * nr);
+ if(ret > 0) {
+ while(ret >= (int) i->len) {
+ /*
+ 0000271: aa01 00e4 0139 bb01 01e0 0320 01e0 0320 01e0 0320 01e0 0320 cc .....9..... ... ... ... .
+
+ "aa" is start of the command, "01" means clicked while "00" means unclicked.
+ "00e4" and "0139" is the X,Y position (HEX).
+ "bb" is start of multi-touch, and the following bytes are the position of each point.
+ */
+ samp->pressure = buf[1] & 0xff;
+ samp->x = ((buf[2] & 0xff) << 8) | (buf[3] & 0xff);
+ samp->y = ((buf[4] & 0xff) << 8) | (buf[5] & 0xff);
+ gettimeofday(&samp->tv, NULL);
+#ifdef DEBUG
+ fprintf(stderr, "waveshare raw: %d %d %d\n", samp->x, samp->y, samp->pressure);
+ fprintf(stderr, "%x %x %x %x %x %x\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
+#endif
+ samp++;
+ buf += i->len;
+ ret -= i->len;
+ }
+ } else {
+ return -1;
+ }
+
+ return nr;
+}
+
+static const struct tslib_ops waveshare_ops =
+{
+ .read = waveshare_read,
+};
+
+static int parse_vid_pid(struct tslib_module_info *inf, char *str, void *data)
+{
+ struct tslib_input *i = (struct tslib_input *)inf;
+
+ if (strlen(str) < 9 || (int) data != 1)
+ return 0; /* -1 */
+
+ str[4] = str[9] = '\0';
+ i->vendor = strtol(&str[0], NULL, 16);
+ i->product = strtol(&str[5], NULL, 16);
+//#ifdef DEBUG
+ fprintf(stderr, "waveshare vid:pid - %04X:%04X\n", i->vendor, i->product);
+//#endif /*DEBUG*/
+ return 0;
+}
+
+static int parse_len(struct tslib_module_info *inf, char *str, void *data)
+{
+ struct tslib_input *i = (struct tslib_input *)inf;
+ int v;
+ int err = errno;
+
+ v = atoi(str);
+
+ if (v < 0)
+ return -1;
+
+ errno = err;
+ switch ((int) data) {
+ case 1:
+ i->len = v;
+ fprintf(stderr, "waveshare raw data len: %d bytes\n", i->len);
+ break;
+ default:
+ return -1;
+ }
+ return 0;
+}
+
+static const struct tslib_vars raw_vars[] =
+{
+ { "vid_pid", (void *) 1, parse_vid_pid },
+ { "len", (void *) 1, parse_len },
+};
+
+#define NR_VARS (sizeof(raw_vars) / sizeof(raw_vars[0]))
+
+TSAPI struct tslib_module_info *waveshare_mod_init(struct tsdev *dev, const char *params)
+{
+ struct tslib_input *i;
+
+ (void) dev;
+
+ i = malloc(sizeof(struct tslib_input));
+ if (i == NULL)
+ return NULL;
+
+ i->module.ops = &waveshare_ops;
+ i->vendor = 0;
+ i->product = 0;
+ i->len = 25;
+
+ if (tslib_parse_vars(&i->module, raw_vars, NR_VARS, params)) {
+ free(i);
+ return NULL;
+ }
+
+ return &(i->module);
+}
+
+#ifndef TSLIB_STATIC_WAVESHARE_MODULE
+ TSLIB_MODULE_INIT(waveshare_mod_init);
+#endif
diff --git a/src/Makefile.am b/src/Makefile.am
index b561aa8..a8fded9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -75,6 +75,10 @@ if ENABLE_STATIC_ST1232_MODULE
libts_la_SOURCES += $(top_srcdir)/plugins/st1232-raw.c
endif
+if ENABLE_STATIC_WAVESHARE_MODULE
+libts_la_SOURCES += $(top_srcdir)/plugins/waveshare-raw.c
+endif
+
libts_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-release $(LT_RELEASE) -export-dynamic
libts_la_LIBADD = -ldl
From 72128c5f16db89d7b644dd184c1b1c6dbe6ef79e Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Sun, 20 Sep 2015 10:30:33 +0200
Subject: [PATCH 05/11] waveshare: remove reopening device based on vid/pid
---
plugins/waveshare-raw.c | 76 -------------------------------------------------
1 file changed, 76 deletions(-)
diff --git a/plugins/waveshare-raw.c b/plugins/waveshare-raw.c
index ff13055..0839af0 100644
--- a/plugins/waveshare-raw.c
+++ b/plugins/waveshare-raw.c
@@ -24,73 +24,16 @@
struct tslib_input {
struct tslib_module_info module;
- int vendor;
- int product;
int len;
};
static int waveshare_read(struct tslib_module_info *inf, struct ts_sample *samp, int nr)
{
- static bool reopen = true;
- struct stat devstat;
- struct hidraw_devinfo info;
- char name_buf[512];
- int cnt;
- bool found = false;
struct tslib_input *i = (struct tslib_input *) inf;
struct tsdev *ts = inf->dev;
- struct tsdev *ts_tmp;
char *buf;
int ret;
- if (reopen == true) {
- reopen = false;
-
- if (i->vendor > 0 && i->product > 0) {
- fprintf(stderr, "waveshare: searching for device using hidraw....\n");
- for (cnt=0; cnt<HIDRAW_MAX_DEVICES; cnt++) {
- snprintf(name_buf, sizeof(buf), "/dev/hidraw%d", cnt);
- fprintf(stderr, "waveshare: device: %s\n", name_buf);
- ret = stat(name_buf, &devstat);
- if (ret < 0)
- continue;
-
- ts_tmp = ts_open(name_buf, 0);
- if (!ts_tmp) {
- continue;
- }
-
- fprintf(stderr, " opened\n");
- ret = ioctl(ts_tmp->fd, HIDIOCGRAWINFO, &info);
- if (ret < 0) {
- ts_close(ts_tmp);
- continue;
- }
-
- info.vendor &= 0xFFFF;
- info.product &= 0xFFFF;
- fprintf(stderr, " vid=%04X, pid=%04X\n", info.vendor, info.product);
-
- if (i->vendor == info.vendor && i->product == info.product) {
- if (ts->fd > 0)
- close(ts->fd);
-
- ts->fd = ts_tmp->fd;
- free(ts_tmp);
- found = true;
- fprintf(stderr, " correct device\n");
- break;
- }
-
- ts_close(ts_tmp);
- } /* for HIDRAW_MAX_DEVICES */
-
- if (found == false) {
- return -1;
- }
- } /* vid/pid set */
- } /* reopen */
-
buf = alloca(i->len * nr);
ret = read(ts->fd, buf, i->len * nr);
@@ -127,22 +70,6 @@ static const struct tslib_ops waveshare_ops =
.read = waveshare_read,
};
-static int parse_vid_pid(struct tslib_module_info *inf, char *str, void *data)
-{
- struct tslib_input *i = (struct tslib_input *)inf;
-
- if (strlen(str) < 9 || (int) data != 1)
- return 0; /* -1 */
-
- str[4] = str[9] = '\0';
- i->vendor = strtol(&str[0], NULL, 16);
- i->product = strtol(&str[5], NULL, 16);
-//#ifdef DEBUG
- fprintf(stderr, "waveshare vid:pid - %04X:%04X\n", i->vendor, i->product);
-//#endif /*DEBUG*/
- return 0;
-}
-
static int parse_len(struct tslib_module_info *inf, char *str, void *data)
{
struct tslib_input *i = (struct tslib_input *)inf;
@@ -168,7 +95,6 @@ static int parse_len(struct tslib_module_info *inf, char *str, void *data)
static const struct tslib_vars raw_vars[] =
{
- { "vid_pid", (void *) 1, parse_vid_pid },
{ "len", (void *) 1, parse_len },
};
@@ -185,8 +111,6 @@ TSAPI struct tslib_module_info *waveshare_mod_init(struct tsdev *dev, const char
return NULL;
i->module.ops = &waveshare_ops;
- i->vendor = 0;
- i->product = 0;
i->len = 25;
if (tslib_parse_vars(&i->module, raw_vars, NR_VARS, params)) {
From 8b6a678e507211d5d51081655af244561a931d8f Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Sun, 20 Sep 2015 10:42:31 +0200
Subject: [PATCH 06/11] ts_reconfig: reload all modules useful to reload
calibration data without closing and opening device
---
src/Makefile.am | 2 +-
src/ts_reconfig.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
src/tslib.h | 5 +++++
3 files changed, 54 insertions(+), 1 deletion(-)
create mode 100644 src/ts_reconfig.c
diff --git a/src/Makefile.am b/src/Makefile.am
index a8fded9..606a5ae 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -17,7 +17,7 @@ include_HEADERS = tslib.h
lib_LTLIBRARIES = libts.la
libts_la_SOURCES = ts_attach.c ts_close.c ts_config.c ts_error.c \
ts_fd.c ts_load_module.c ts_open.c ts_parse_vars.c \
- ts_read.c ts_read_raw.c ts_option.c
+ ts_read.c ts_read_raw.c ts_option.c ts_reconfig.c
if ENABLE_STATIC_LINEAR_MODULE
libts_la_SOURCES += $(top_srcdir)/plugins/linear.c
diff --git a/src/ts_reconfig.c b/src/ts_reconfig.c
new file mode 100644
index 0000000..c94ec3e
--- /dev/null
+++ b/src/ts_reconfig.c
@@ -0,0 +1,48 @@
+/*
+ * tslib/src/ts_reconfig.c
+ * based on tslib/src/ts_close.c
+ *
+ * Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL. Please see the file
+ * COPYING for more details.
+ *
+ *
+ * Reloads all modules - useful to reload calibration data.
+ */
+#include "config.h"
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <dlfcn.h>
+
+#include "tslib-private.h"
+
+int ts_reconfig(struct tsdev *ts)
+{
+ void *handle;
+ int ret;
+ struct tslib_module_info *info, *next;
+ int fd;
+
+ info = ts->list;
+ while(info) {
+ /* Save the "next" pointer now because info will be freed */
+ next = info->next;
+
+ handle = info->handle;
+ info->ops->fini(info);
+ if (handle)
+ dlclose(handle);
+
+ info = next;
+ }
+
+ fd = ts->fd; /* save temp */
+ memset(ts, 0, sizeof(struct tsdev));
+ ts->fd = fd;
+
+ ret = ts_config(ts);
+ return ret;
+}
diff --git a/src/tslib.h b/src/tslib.h
index df8e284..28156ba 100644
--- a/src/tslib.h
+++ b/src/tslib.h
@@ -57,6 +57,11 @@ enum ts_param {
TSAPI int ts_close(struct tsdev *);
/*
+ * Reloads all modules - useful to reload calibration data.
+ */
+TSAPI int ts_reconfig(struct tsdev *);
+
+/*
* Configure the touchscreen device.
*/
TSAPI int ts_config(struct tsdev *);
From df81ed55ed9c99a8636f0b8524e0c5da0d00d33d Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Sun, 20 Sep 2015 10:45:55 +0200
Subject: [PATCH 07/11] ts_uinput_touch: reload modules (and calibration data)
automatically after calibration and on SIGHUP signal
---
tests/ts_uinput_touch.c | 67 +++++++++++++++++++++++++++++++++++--------------
1 file changed, 48 insertions(+), 19 deletions(-)
diff --git a/tests/ts_uinput_touch.c b/tests/ts_uinput_touch.c
index 489a22f..871c5e4 100755
--- a/tests/ts_uinput_touch.c
+++ b/tests/ts_uinput_touch.c
@@ -74,6 +74,7 @@ typedef struct {
int a[7];
} calibration;
+struct tsdev *ts = NULL;
char *uinput_names[] = {"/dev/uinput", "/dev/input/uinput", "/dev/misc/uinput"};
#define UINPUT_NAMES_NUM ((int) (sizeof(uinput_names)/sizeof(char *)))
@@ -99,7 +100,7 @@ static void daemonize() {
die("failed to become a session leader while daemonising(errno=%d)", errno)
}
- signal(SIGHUP,SIG_IGN);
+ /* signal(SIGHUP,SIG_IGN); */
pid=fork();
if (pid == -1) {
die("failed to fork while daemonizing (errno=%d)", errno)
@@ -129,7 +130,7 @@ static void daemonize() {
}
}
-static void sig(int sig)
+static void signal_end(int sig)
{
fflush(stderr);
printf("signal %d caught\n", sig);
@@ -163,7 +164,15 @@ static int send_event(int fd, __u16 type, __u16 code, __s32 value)
}
static void signal_handler(int signal_number) {
- if (signal_number == SIGUSR1)
+ if (signal_number == SIGHUP) {
+ /* reload modules (and calibration data) */
+ printf("signal handler %d, reconfig ts\n", signal_number);
+ if (ts_reconfig(ts)) {
+ die("ts_reconfig")
+ }
+
+ return;
+ } else if (signal_number == SIGUSR1)
calibration_mode = true;
else if (signal_number == SIGUSR2)
calibration_mode = false;
@@ -366,25 +375,25 @@ static void run_calibration(struct tsdev *ts)
int get_resolution(void)
{
- static char *fbdevice;
+ char *env_str;
int fd;
static struct fb_var_screeninfo var;
- fbdevice = getenv("TSLIB_FBDEVICE");
- if (fbdevice == NULL)
- return -1;
+ env_str = getenv("TSLIB_FBDEVICE");
+ if (env_str == NULL)
+ goto not_found;
- printf("using fb device: %s\n", fbdevice);
- fd = open(fbdevice, O_RDWR);
+ printf("using fb device: %s\n", env_str);
+ fd = open(env_str, O_RDWR);
if (fd == -1) {
perror("open fbdevice");
- return -1;
+ goto not_found;
}
if (ioctl(fd, FBIOGET_VSCREENINFO, &var) < 0) {
perror("ioctl FBIOGET_VSCREENINFO");
close(fd);
- return -1;
+ goto not_found;
}
xres = var.xres;
@@ -392,13 +401,28 @@ int get_resolution(void)
close(fd);
return 0;
+
+not_found:
+ env_str = getenv("TSLIB_RES_X");
+ if (env_str != NULL)
+ xres = atoi(env_str);
+
+ env_str = getenv("TSLIB_RES_Y");
+ if (env_str != NULL)
+ yres = atoi(env_str);
+
+ if (xres == 0 || yres == 0) {
+ xres = yres = 0;
+ return -1;
+ }
+
+ return 0;
}
int main(int argc, char *argv[])
{
int c;
char *tsdevice;
- struct tsdev *ts;
int ret;
struct ts_sample samp;
int uinput_fd;
@@ -423,7 +447,7 @@ int main(int argc, char *argv[])
}
}
- get_resolution();
+ ret = get_resolution();
while ((c = getopt(argc, argv, "?dt:x:y:")) != -1) {
switch (c) {
@@ -460,12 +484,11 @@ int main(int argc, char *argv[])
printf("resolution: %dx%d\n", xres, yres);
- signal(SIGSEGV, sig);
- signal(SIGINT, sig);
- signal(SIGTERM, sig);
+ signal(SIGSEGV, signal_end);
+ signal(SIGINT, signal_end);
+ signal(SIGTERM, signal_end);
tsdevice = getenv("TSLIB_TSDEVICE");
-
if (tsdevice == NULL) {
errno = ENOENT;
die("error: TSLIB_TSDEVICE")
@@ -482,7 +505,7 @@ int main(int argc, char *argv[])
die("ts_config")
}
- system("modprobe uinput");
+ ret = system("modprobe uinput");
for (c=0; c < UINPUT_NAMES_NUM; c++) {
uinput_fd = open(uinput_names[c], O_WRONLY | O_NONBLOCK);
@@ -505,6 +528,7 @@ int main(int argc, char *argv[])
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &signal_handler;
+ sigaction(SIGHUP, &sa, NULL);
sigaction(SIGUSR1, &sa, NULL);
sigaction(SIGUSR2, &sa, NULL);
@@ -572,7 +596,12 @@ int main(int argc, char *argv[])
run_calibration(ts);
calibration_mode = false;
close(sock);
- printf("calibration mode finished\n");
+ printf("calibration mode finished, reload plugins\n");
+
+ clearbuf(ts);
+ if (ts_reconfig(ts)) {
+ die("ts_reconfig")
+ }
}
ret = ts_read(ts, &samp, 1);
From dbf1c882dbc239065df422f9e16da955c0b7653f Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Sun, 20 Sep 2015 10:47:44 +0200
Subject: [PATCH 08/11] plugins: compile statically
---
plugins/Makefile.am | 2 ++
plugins/dmc-raw.c | 6 +++++-
plugins/plugins.h | 5 ++++-
plugins/touchkit-raw.c | 6 +++++-
src/Makefile.am | 12 ++++++++++++
src/ts_load_module.c | 12 ++++++++++++
6 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 98881b3..87fa18b 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -194,6 +194,7 @@ tatung_la_LDFLAGS = -module $(LTVSN)
dmc_la_SOURCES = dmc-raw.c
dmc_la_LDFLAGS = -module $(LTVSN)
+dmc_la_LIBADD = $(top_builddir)/src/libts.la
input_la_SOURCES = input-raw.c
input_la_LDFLAGS = -module $(LTVSN)
@@ -205,6 +206,7 @@ galax_la_LIBADD = $(top_builddir)/src/libts.la
touchkit_la_SOURCES = touchkit-raw.c
touchkit_la_LDFLAGS = -module $(LTVSN)
+touchkit_la_LIBADD = $(top_builddir)/src/libts.la
linear_h2200_la_SOURCES = linear-h2200.c
linear_h2200_la_LDFLAGS = -module $(LTVSN)
diff --git a/plugins/dmc-raw.c b/plugins/dmc-raw.c
index f9f5381..59980cc 100644
--- a/plugins/dmc-raw.c
+++ b/plugins/dmc-raw.c
@@ -123,7 +123,7 @@ static const struct tslib_ops dmc_ops =
.read = dmc_read,
};
-TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
+TSAPI struct tslib_module_info *dmc_mod_init(struct tsdev *dev, const char *params)
{
struct tslib_dmc *m;
@@ -137,3 +137,7 @@ TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
m->module.ops = &dmc_ops;
return (struct tslib_module_info*)m;
}
+
+#ifndef TSLIB_STATIC_DMC_MODULE
+ TSLIB_MODULE_INIT(dmc_mod_init);
+#endif
diff --git a/plugins/plugins.h b/plugins/plugins.h
index f347e25..798f9b3 100644
--- a/plugins/plugins.h
+++ b/plugins/plugins.h
@@ -6,7 +6,6 @@ TSLIB_DECLARE_MODULE(dejitter);
TSLIB_DECLARE_MODULE(linear_h2200);
TSLIB_DECLARE_MODULE(variance);
TSLIB_DECLARE_MODULE(pthres);
-
TSLIB_DECLARE_MODULE(ucb1x00);
TSLIB_DECLARE_MODULE(corgi);
TSLIB_DECLARE_MODULE(collie);
@@ -16,5 +15,9 @@ TSLIB_DECLARE_MODULE(arctic2);
TSLIB_DECLARE_MODULE(tatung);
TSLIB_DECLARE_MODULE(input);
TSLIB_DECLARE_MODULE(cy8mrln_palmpre);
+TSLIB_DECLARE_MODULE(galax);
+TSLIB_DECLARE_MODULE(dmc);
+TSLIB_DECLARE_MODULE(touchkit);
TSLIB_DECLARE_MODULE(st1232);
TSLIB_DECLARE_MODULE(waveshare);
+
diff --git a/plugins/touchkit-raw.c b/plugins/touchkit-raw.c
index e072f21..68179a3 100644
--- a/plugins/touchkit-raw.c
+++ b/plugins/touchkit-raw.c
@@ -144,7 +144,7 @@ static const struct tslib_ops touchkit_ops = {
.read = touchkit_read,
};
-TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
+TSAPI struct tslib_module_info *touchkit_mod_init(struct tsdev *dev, const char *params)
{
struct tslib_module_info *m;
@@ -155,3 +155,7 @@ TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
m->ops = &touchkit_ops;
return m;
}
+
+#ifndef TSLIB_STATIC_TOUCHKIT_MODULE
+ TSLIB_MODULE_INIT(touchkit_mod_init);
+#endif
diff --git a/src/Makefile.am b/src/Makefile.am
index 606a5ae..2f31519 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -71,6 +71,18 @@ if ENABLE_STATIC_INPUT_MODULE
libts_la_SOURCES += $(top_srcdir)/plugins/input-raw.c
endif
+if ENABLE_STATIC_DMC_MODULE
+libts_la_SOURCES += $(top_srcdir)/plugins/dmc-raw.c
+endif
+
+if ENABLE_STATIC_GALAX_MODULE
+libts_la_SOURCES += $(top_srcdir)/plugins/galax-raw.c
+endif
+
+if ENABLE_STATIC_TOUCHKIT_MODULE
+libts_la_SOURCES += $(top_srcdir)/plugins/touchkit-raw.c
+endif
+
if ENABLE_STATIC_ST1232_MODULE
libts_la_SOURCES += $(top_srcdir)/plugins/st1232-raw.c
endif
diff --git a/src/ts_load_module.c b/src/ts_load_module.c
index 886ca0a..903c921 100644
--- a/src/ts_load_module.c
+++ b/src/ts_load_module.c
@@ -76,6 +76,18 @@ static const struct {
#ifdef TSLIB_STATIC_ST1232_MODULE
{ "st1232", st1232_mod_init },
#endif
+#ifdef TSLIB_STATIC_CY8MRLN_PALMPRE_MODULE
+ { "cy8mrln-palmpre", cy8mrln_palmpre_mod_init },
+#endif
+#ifdef TSLIB_STATIC_DMC_MODULE
+ { "dmc", dmc_mod_init },
+#endif
+#ifdef TSLIB_STATIC_TOUCHKIT_MODULE
+ { "touchkit", touchkit_mod_init },
+#endif
+#ifdef TSLIB_STATIC_WAVESHARE_MODULE
+ { "waveshare", waveshare_mod_init },
+#endif
};
#define countof(arr) (sizeof(arr) / sizeof((arr)[0]))
From 72d2fe9e2ff18a9589510fd28e485b238a7bcbff Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Mon, 21 Sep 2015 09:36:38 +0200
Subject: [PATCH 09/11] file permission, tabs
---
plugins/Makefile.am | 2 +-
tests/ts_uinput_touch.c | 0
2 files changed, 1 insertion(+), 1 deletion(-)
mode change 100755 => 100644 tests/ts_uinput_touch.c
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 87fa18b..4ed04c1 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -194,7 +194,7 @@ tatung_la_LDFLAGS = -module $(LTVSN)
dmc_la_SOURCES = dmc-raw.c
dmc_la_LDFLAGS = -module $(LTVSN)
-dmc_la_LIBADD = $(top_builddir)/src/libts.la
+dmc_la_LIBADD = $(top_builddir)/src/libts.la
input_la_SOURCES = input-raw.c
input_la_LDFLAGS = -module $(LTVSN)
diff --git a/tests/ts_uinput_touch.c b/tests/ts_uinput_touch.c
old mode 100755
new mode 100644
From aff635ded1b41ade1b2cf2203cdf30f7fcd61127 Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Sat, 10 Oct 2015 21:24:53 +0200
Subject: [PATCH 10/11] ts_uinput_touch: remove button right event because it
breaks scrollbar, context menu is open on few seconds tap
---
tests/ts_uinput_touch.c | 141 ++++++++++++------------------------------------
1 file changed, 35 insertions(+), 106 deletions(-)
diff --git a/tests/ts_uinput_touch.c b/tests/ts_uinput_touch.c
index 871c5e4..92db9ce 100644
--- a/tests/ts_uinput_touch.c
+++ b/tests/ts_uinput_touch.c
@@ -9,9 +9,7 @@
*
*
* Takes tslib events and send them to uinput as
- * BTN_TOUCH, BTN_RIGHT, ABS_X, ABS_Y and ABS_PRESSURE values.
- * Short tap send button touch event, little longer tap send button right event
- * and longer tap send only coordinates.
+ * ABS_X, ABS_Y, BTN_TOUCH and ABS_PRESSURE values.
* Tested only with Kodi application.
*
* code based on
@@ -79,8 +77,6 @@ char *uinput_names[] = {"/dev/uinput", "/dev/input/uinput", "/dev/misc/uinput"};
#define UINPUT_NAMES_NUM ((int) (sizeof(uinput_names)/sizeof(char *)))
__u32 xres = 0, yres = 0;
-struct timeval tv_short_tap = {0, 300}; /* sec, msec, short tap sends BTN_TOUCH */
-struct timeval tv_right_tap = {1, 0}; /* sec, msec, longer tap sends BTN_RIGHT */
bool calibration_mode = false;
int sock = -1;
@@ -164,15 +160,15 @@ static int send_event(int fd, __u16 type, __u16 code, __s32 value)
}
static void signal_handler(int signal_number) {
- if (signal_number == SIGHUP) {
- /* reload modules (and calibration data) */
- printf("signal handler %d, reconfig ts\n", signal_number);
- if (ts_reconfig(ts)) {
- die("ts_reconfig")
- }
-
- return;
- } else if (signal_number == SIGUSR1)
+ if (signal_number == SIGHUP) {
+ /* reload modules (and calibration data) */
+ printf("signal handler %d, reconfig ts\n", signal_number);
+ if (ts_reconfig(ts)) {
+ die("ts_reconfig")
+ }
+
+ return;
+ } else if (signal_number == SIGUSR1)
calibration_mode = true;
else if (signal_number == SIGUSR2)
calibration_mode = false;
@@ -403,20 +399,20 @@ int get_resolution(void)
return 0;
not_found:
- env_str = getenv("TSLIB_RES_X");
- if (env_str != NULL)
- xres = atoi(env_str);
-
- env_str = getenv("TSLIB_RES_Y");
- if (env_str != NULL)
- yres = atoi(env_str);
-
- if (xres == 0 || yres == 0) {
- xres = yres = 0;
- return -1;
- }
-
- return 0;
+ env_str = getenv("TSLIB_RES_X");
+ if (env_str != NULL)
+ xres = atoi(env_str);
+
+ env_str = getenv("TSLIB_RES_Y");
+ if (env_str != NULL)
+ yres = atoi(env_str);
+
+ if (xres == 0 || yres == 0) {
+ xres = yres = 0;
+ return -1;
+ }
+
+ return 0;
}
int main(int argc, char *argv[])
@@ -428,43 +424,18 @@ int main(int argc, char *argv[])
int uinput_fd;
struct uinput_user_dev uidev;
int daemon = 0;
- struct timeval tv_last;
- struct timeval tv_sub;
char *touch_str;
int val;
struct sigaction sa;
struct sockaddr_un remote_addr;
- touch_str = getenv("TSLIB_TAP_TIME");
- if (touch_str != NULL) {
- val = atoi(touch_str);
- if (val < 1000) {
- tv_short_tap.tv_sec = 0;
- tv_short_tap.tv_usec = val;
- } else {
- tv_short_tap.tv_sec = val / 1000;
- tv_short_tap.tv_usec = val % 1000;
- }
- }
-
ret = get_resolution();
- while ((c = getopt(argc, argv, "?dt:x:y:")) != -1) {
+ while ((c = getopt(argc, argv, "?dx:y:")) != -1) {
switch (c) {
case 'd':
daemon = 1;
break;
- case 't':
- val = atoi(optarg);
- if (val < 1000) {
- tv_short_tap.tv_sec = 0;
- tv_short_tap.tv_usec = val;
- } else {
- tv_short_tap.tv_sec = val / 1000;
- tv_short_tap.tv_usec = val % 1000;
- }
-
- break;
case 'x':
xres = atoi(optarg);
break;
@@ -516,16 +487,6 @@ int main(int argc, char *argv[])
if (uinput_fd < 0)
die("error: opening uinput")
- if (tv_short_tap.tv_sec == 0)
- printf("Short tap time: %li msec\n", tv_short_tap.tv_usec);
- else
- printf("Short tap time: %li.%li sec\n", tv_short_tap.tv_sec, tv_short_tap.tv_usec);
-
- if (tv_right_tap.tv_sec == 0)
- printf("Right tap time: %li msec\n", tv_right_tap.tv_usec);
- else
- printf("Right tap time: %li.%li sec\n", tv_right_tap.tv_sec, tv_right_tap.tv_usec);
-
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &signal_handler;
sigaction(SIGHUP, &sa, NULL);
@@ -540,7 +501,6 @@ int main(int argc, char *argv[])
set_ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN);
set_ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY);
set_ioctl(uinput_fd, UI_SET_KEYBIT, BTN_TOUCH);
- set_ioctl(uinput_fd, UI_SET_KEYBIT, BTN_RIGHT);
set_ioctl(uinput_fd, UI_SET_EVBIT, EV_ABS);
set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_X);
set_ioctl(uinput_fd, UI_SET_ABSBIT, ABS_Y);
@@ -564,12 +524,7 @@ int main(int argc, char *argv[])
if (ioctl(uinput_fd, UI_DEV_CREATE) < 0)
die("error: ioctl UI_DEV_CREATE")
- tv_short_tap.tv_usec *= 1000; /* msec to usec */
- tv_right_tap.tv_usec *= 1000; /* msec to usec */
-
- timerclear(&tv_last);
while (1) {
- touch_str = "";
if (calibration_mode) {
usleep(250000); /* app become ready */
printf("calibration mode started\n");
@@ -614,44 +569,18 @@ int main(int argc, char *argv[])
} else if (ret != 1)
continue;
- send_event(uinput_fd, EV_ABS, ABS_X, samp.x);
- send_event(uinput_fd, EV_ABS, ABS_Y, samp.y);
-
- if (samp.pressure > 0) { /* touched */
+ if (samp.pressure > 0) {
+ touch_str = "touched";
+ send_event(uinput_fd, EV_ABS, ABS_X, samp.x);
+ send_event(uinput_fd, EV_ABS, ABS_Y, samp.y);
send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 255);
+ send_event(uinput_fd, EV_KEY, BTN_TOUCH, 1);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+ } else {
+ touch_str = "released";
+ send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
+ send_event(uinput_fd, EV_KEY, BTN_TOUCH, 0);
send_event(uinput_fd, EV_SYN, 0, 0);
-
- if (timerisset(&tv_last) == false) {
- memcpy(&tv_last, &samp.tv, sizeof(struct timeval)); /* touched first time */
- touch_str = "touched first";
- }
- } else { /* released */
- timersub(&samp.tv, &tv_last, &tv_sub);
- if (timercmp(&tv_sub, &tv_short_tap, <=)) {
- send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 255);
- send_event(uinput_fd, EV_KEY, BTN_TOUCH, 1);
- send_event(uinput_fd, EV_SYN, 0, 0);
- send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
- send_event(uinput_fd, EV_KEY, BTN_TOUCH, 0);
- send_event(uinput_fd, EV_SYN, 0, 0);
-
- touch_str = "released and send tap";
- } else if (timercmp(&tv_sub, &tv_right_tap, <=)) {
- send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 255);
- send_event(uinput_fd, EV_KEY, BTN_RIGHT, 1);
- send_event(uinput_fd, EV_SYN, 0, 0);
- send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
- send_event(uinput_fd, EV_KEY, BTN_RIGHT, 0);
- send_event(uinput_fd, EV_SYN, 0, 0);
-
- touch_str = "released and send right";
- } else {
- send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
- send_event(uinput_fd, EV_SYN, 0, 0);
- touch_str = "released";
- }
-
- timerclear(&tv_last);
}
printf("%ld.%06ld: %6d %6d %6d %s\n", samp.tv.tv_sec, samp.tv.tv_usec,
From a5f00518cfe38002c47895424eda26746711a0da Mon Sep 17 00:00:00 2001
From: Peter Vicman <peter.vicman@gmail.com>
Date: Tue, 24 Nov 2015 13:28:51 +0100
Subject: [PATCH 11/11] ts_uinput_touch: move cursor out of display after
touched
---
tests/ts_uinput_touch.c | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/tests/ts_uinput_touch.c b/tests/ts_uinput_touch.c
index 92db9ce..8280b18 100644
--- a/tests/ts_uinput_touch.c
+++ b/tests/ts_uinput_touch.c
@@ -415,6 +415,22 @@ int get_resolution(void)
return 0;
}
+int get_touch_home_time(void)
+{
+ char *env_str;
+ int touch_home_time = 0;
+
+ env_str = getenv("TSLIB_TOUCH_HOME_TIME");
+ if (env_str != NULL) {
+ touch_home_time = atoi(env_str);
+ if (touch_home_time < 0 || touch_home_time > 5000)
+ touch_home_time = 100; /* 100 msec */
+ }
+
+ touch_home_time *= 1000; /* msec to usec */
+ return touch_home_time;
+}
+
int main(int argc, char *argv[])
{
int c;
@@ -424,11 +440,25 @@ int main(int argc, char *argv[])
int uinput_fd;
struct uinput_user_dev uidev;
int daemon = 0;
+ int touch_home_time = 0;
char *touch_str;
int val;
struct sigaction sa;
struct sockaddr_un remote_addr;
+ printf("\nts_uinput_touch environment variables:\n");
+ printf(" TSLIB_TSDEVICE: '%s'\n", getenv("TSLIB_TSDEVICE"));
+ printf(" TSLIB_PLUGINDIR: '%s'\n", getenv("TSLIB_PLUGINDIR"));
+ printf(" TSLIB_CONSOLEDEVICE: '%s'\n", getenv("TSLIB_CONSOLEDEVICE"));
+ printf(" TSLIB_FBDEVICE: '%s'\n", getenv("TSLIB_FBDEVICE"));
+ printf(" TSLIB_CALIBFILE: '%s'\n", getenv("TSLIB_CALIBFILE"));
+ printf(" TSLIB_CONFFILE: '%s'\n", getenv("TSLIB_CONFFILE"));
+ printf(" TSLIB_RES_X: '%s'\n", getenv("TSLIB_RES_X"));
+ printf(" TSLIB_RES_Y: '%s'\n", getenv("TSLIB_RES_Y"));
+ printf("TSLIB_TOUCH_HOME_TIME: '%s'\n", getenv("TSLIB_TOUCH_HOME_TIME"));
+ printf("\n");
+
+ touch_home_time = get_touch_home_time();
ret = get_resolution();
while ((c = getopt(argc, argv, "?dx:y:")) != -1) {
@@ -581,6 +611,13 @@ int main(int argc, char *argv[])
send_event(uinput_fd, EV_ABS, ABS_PRESSURE, 0);
send_event(uinput_fd, EV_KEY, BTN_TOUCH, 0);
send_event(uinput_fd, EV_SYN, 0, 0);
+
+ if (touch_home_time > 0) {
+ usleep(touch_home_time); /* short delay for kodi */
+ send_event(uinput_fd, EV_ABS, ABS_X, -50); /* hide cursor */
+ send_event(uinput_fd, EV_ABS, ABS_Y, -50);
+ send_event(uinput_fd, EV_SYN, 0, 0);
+ }
}
printf("%ld.%06ld: %6d %6d %6d %s\n", samp.tv.tv_sec, samp.tv.tv_usec,