From 09eeff8c90a82e7aa9ff215320d558c1147982f6 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 30 Nov 2019 19:59:29 -0800 Subject: [PATCH] Fix build on 32bit arches with 64bit time_t time element is deprecated on new input_event structure in kernel's input.h [1] [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f Signed-off-by: Khem Raj Signed-off-by: Fabrice Fontaine [Upstream status: https://github.com/libts/tslib/commit/a7a39a67f9a7f7fab9765d412ab42869a5c5c858] --- plugins/input-raw.c | 59 +++++++++++++++++++++++++++------------- tools/ts_uinput.c | 66 ++++++++++++++++++++++++++++++--------------- 2 files changed, 85 insertions(+), 40 deletions(-) diff --git a/plugins/input-raw.c b/plugins/input-raw.c index 64f0156..f030836 100644 --- a/plugins/input-raw.c +++ b/plugins/input-raw.c @@ -40,6 +40,11 @@ # include #endif +#ifndef input_event_sec +#define input_event_sec time.tv_sec +#define input_event_usec time.tv_usec +#endif + #ifndef EV_SYN /* 2.4 kernel headers */ # define EV_SYN 0x00 #endif @@ -384,7 +389,8 @@ static int ts_input_read(struct tslib_module_info *inf, samp->y = i->current_y; samp->pressure = i->current_p; } - samp->tv = ev.time; + samp->tv.tv_sec = ev.input_event_sec; + samp->tv.tv_usec = ev.input_event_usec; #ifdef DEBUG fprintf(stderr, "RAW---------------------> %d %d %d %ld.%ld\n", @@ -519,7 +525,8 @@ static int ts_input_read(struct tslib_module_info *inf, samp->pressure = i->current_p = ev.value; break; } - samp->tv = ev.time; + samp->tv.tv_sec = ev.input_event_sec; + samp->tv.tv_usec = ev.input_event_usec; #ifdef DEBUG fprintf(stderr, "RAW---------------------------> %d %d %d\n", @@ -536,7 +543,8 @@ static int ts_input_read(struct tslib_module_info *inf, samp->x = 0; samp->y = 0; samp->pressure = 0; - samp->tv = ev.time; + samp->tv.tv_sec = ev.input_event_sec; + samp->tv.tv_usec = ev.input_event_usec; samp++; total++; } @@ -651,7 +659,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf, switch (i->ev[it].code) { case BTN_TOUCH: i->buf[total][i->slot].pen_down = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; if (i->ev[it].value == 0) pen_up = 1; @@ -751,7 +760,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf, // fall through case ABS_MT_POSITION_X: i->buf[total][i->slot].x = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_Y: @@ -760,7 +770,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf, // fall through case ABS_MT_POSITION_Y: i->buf[total][i->slot].y = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_PRESSURE: @@ -769,12 +780,14 @@ static int ts_input_read_mt(struct tslib_module_info *inf, // fall through case ABS_MT_PRESSURE: i->buf[total][i->slot].pressure = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_MT_TOOL_X: i->buf[total][i->slot].tool_x = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; /* for future use * i->buf[total][i->slot].valid |= TSLIB_MT_VALID_TOOL; @@ -782,7 +795,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf, break; case ABS_MT_TOOL_Y: i->buf[total][i->slot].tool_y = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; /* for future use * i->buf[total][i->slot].valid |= TSLIB_MT_VALID_TOOL; @@ -790,7 +804,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf, break; case ABS_MT_TOOL_TYPE: i->buf[total][i->slot].tool_type = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; /* for future use * i->buf[total][i->slot].valid |= TSLIB_MT_VALID_TOOL; @@ -798,12 +813,14 @@ static int ts_input_read_mt(struct tslib_module_info *inf, break; case ABS_MT_ORIENTATION: i->buf[total][i->slot].orientation = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_MT_DISTANCE: i->buf[total][i->slot].distance = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; if (i->special_device == EGALAX_VERSION_210) { @@ -816,34 +833,40 @@ static int ts_input_read_mt(struct tslib_module_info *inf, break; case ABS_MT_BLOB_ID: i->buf[total][i->slot].blob_id = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_MT_TOUCH_MAJOR: i->buf[total][i->slot].touch_major = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; if (i->ev[it].value == 0) i->buf[total][i->slot].pressure = 0; break; case ABS_MT_WIDTH_MAJOR: i->buf[total][i->slot].width_major = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_MT_TOUCH_MINOR: i->buf[total][i->slot].touch_minor = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_MT_WIDTH_MINOR: i->buf[total][i->slot].width_minor = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; break; case ABS_MT_TRACKING_ID: i->buf[total][i->slot].tracking_id = i->ev[it].value; - i->buf[total][i->slot].tv = i->ev[it].time; + i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec; + i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec; i->buf[total][i->slot].valid |= TSLIB_MT_VALID; if (i->ev[it].value == -1) i->buf[total][i->slot].pressure = 0; diff --git a/tools/ts_uinput.c b/tools/ts_uinput.c index 6ca4c3d..1832a07 100644 --- a/tools/ts_uinput.c +++ b/tools/ts_uinput.c @@ -170,14 +170,16 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s, continue; if (s[j][i].pen_down == 1) { - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_KEY; data->ev[c].code = BTN_TOUCH; data->ev[c].value = s[j][i].pen_down; c++; } - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_SLOT; data->ev[c].value = s[j][i].slot; @@ -190,111 +192,129 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s, * we should use slot 1 and so on. */ if (i == 0) { - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_X; data->ev[c].value = s[j][i].x; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_Y; data->ev[c].value = s[j][i].y; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_PRESSURE; data->ev[c].value = s[j][i].pressure; c++; } - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_POSITION_X; data->ev[c].value = s[j][i].x; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_POSITION_Y; data->ev[c].value = s[j][i].y; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_PRESSURE; data->ev[c].value = s[j][i].pressure; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_TOUCH_MAJOR; data->ev[c].value = s[j][i].touch_major; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_WIDTH_MAJOR; data->ev[c].value = s[j][i].width_major; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_TOUCH_MINOR; data->ev[c].value = s[j][i].touch_minor; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_WIDTH_MINOR; data->ev[c].value = s[j][i].width_minor; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_TOOL_TYPE; data->ev[c].value = s[j][i].tool_type; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_TOOL_X; data->ev[c].value = s[j][i].tool_x; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_TOOL_Y; data->ev[c].value = s[j][i].tool_y; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_ORIENTATION; data->ev[c].value = s[j][i].orientation; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_DISTANCE; data->ev[c].value = s[j][i].distance; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_BLOB_ID; data->ev[c].value = s[j][i].blob_id; c++; - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_ABS; data->ev[c].code = ABS_MT_TRACKING_ID; data->ev[c].value = s[j][i].tracking_id; c++; if (data->mt_type_a == 1) { - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_SYN; data->ev[c].code = SYN_MT_REPORT; data->ev[c].value = 0; @@ -302,7 +322,8 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s, } if (s[j][i].pen_down == 0) { - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_KEY; data->ev[c].code = BTN_TOUCH; data->ev[c].value = s[j][i].pen_down; @@ -312,7 +333,8 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s, } if (c > 0) { - data->ev[c].time = s[j][i].tv; + data->ev[c].input_event_sec = s[j][i].tv.tv_sec; + data->ev[c].input_event_usec = s[j][i].tv.tv_usec; data->ev[c].type = EV_SYN; data->ev[c].code = SYN_REPORT; data->ev[c].value = 0;