diff options
| author | Michael Forney <mforney@mforney.org> | 2020-03-03 01:15:16 -0800 |
|---|---|---|
| committer | Michael Forney <mforney@mforney.org> | 2020-03-03 16:21:51 -0800 |
| commit | f505a4168e95b879438dfc8e3b84f07c531eb8ad (patch) | |
| tree | 4604f822165103e513ea757ac82d7c7b27324e2a /pkg/libevdev/patch | |
| parent | 379d4a92f3ba42b200bac190877ed1804ef1d782 (diff) | |
libevdev: Update to 1.9.0
Port eventnames script to lua.
Diffstat (limited to 'pkg/libevdev/patch')
4 files changed, 277 insertions, 152 deletions
diff --git a/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch b/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch deleted file mode 100644 index 24a79b1d..00000000 --- a/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 2502b02e69ad84e1e8e96fa1683968e72bbd0501 Mon Sep 17 00:00:00 2001 -From: Michael Forney <mforney@mforney.org> -Date: Sun, 16 Jun 2019 17:05:30 -0700 -Subject: [PATCH] Avoid statement expressions -Upstream: https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/11 - ---- - libevdev/libevdev-int.h | 3 ++- - libevdev/libevdev-util.h | 13 ------------- - libevdev/libevdev.c | 7 ++++++- - 3 files changed, 8 insertions(+), 15 deletions(-) - -diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h -index e1c7ec5..b92d8d5 100644 ---- a/libevdev/libevdev-int.h -+++ b/libevdev/libevdev-int.h -@@ -198,7 +198,8 @@ queue_shift_multiple(struct libevdev *dev, size_t n, struct input_event *ev) - return 0; - - remaining = dev->queue_next; -- n = min(n, remaining); -+ if (remaining < n) -+ n = remaining; - remaining -= n; - - if (ev) -diff --git a/libevdev/libevdev-util.h b/libevdev/libevdev-util.h -index c6e1197..e8b6769 100644 ---- a/libevdev/libevdev-util.h -+++ b/libevdev/libevdev-util.h -@@ -32,19 +32,6 @@ - #define ARRAY_LENGTH(a) (sizeof(a) / (sizeof((a)[0]))) - #define unlikely(x) (__builtin_expect(!!(x),0)) - --#undef min --#undef max --#define min(a,b) \ -- ({ __typeof__ (a) _a = (a); \ -- __typeof__ (b) _b = (b); \ -- _a > _b ? _b : _a; \ -- }) --#define max(a,b) \ -- ({ __typeof__ (a) _a = (a); \ -- __typeof__ (b) _b = (b); \ -- _a > _b ? _a : _b; \ -- }) -- - static inline bool - startswith(const char *str, size_t len, const char *prefix, size_t plen) - { -diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c -index c5798b4..e5abe91 100644 ---- a/libevdev/libevdev.c -+++ b/libevdev/libevdev.c -@@ -67,6 +67,7 @@ init_event_queue(struct libevdev *dev) - int nevents = 1; /* terminating SYN_REPORT */ - int nslots; - unsigned int type, code; -+ size_t size; - - /* count the number of axes, keys, etc. to get a better idea at how - many events per EV_SYN we could possibly get. That's the max we -@@ -94,7 +95,11 @@ init_event_queue(struct libevdev *dev) - nevents += num_mt_axes * (nslots - 1); - } - -- return queue_alloc(dev, max(MIN_QUEUE_SIZE, nevents * 2)); -+ size = nevents * 2; -+ if (size < MIN_QUEUE_SIZE) -+ size = MIN_QUEUE_SIZE; -+ -+ return queue_alloc(dev, size); - } - - static void --- -2.20.1 - diff --git a/pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch b/pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch new file mode 100644 index 00000000..8bce094b --- /dev/null +++ b/pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch @@ -0,0 +1,277 @@ +From b3fba1efb0475b6e64e4109738bde1e83d87147a Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Tue, 3 Mar 2020 14:17:37 -0800 +Subject: [PATCH libevdev] Revert switch to VLAs for multitouch state + +Signed-off-by: Michael Forney <mforney@mforney.org> +--- + libevdev/libevdev-int.h | 28 ++++++++++++++ + libevdev/libevdev.c | 84 ++++++++++++++++++++--------------------- + 2 files changed, 68 insertions(+), 44 deletions(-) + +diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h +index 7da5cf0..2743e50 100644 +--- a/libevdev/libevdev-int.h ++++ b/libevdev/libevdev-int.h +@@ -24,6 +24,7 @@ + #define LIBEVDEV_INT_H + + #include "config.h" ++#include <stdint.h> + #include <stdio.h> + #include <stdlib.h> + #include <stdbool.h> +@@ -55,6 +56,26 @@ enum SyncState { + SYNC_IN_PROGRESS, + }; + ++struct mt_sync_state { ++ uint32_t code; ++ int32_t val[]; ++}; ++ ++/* Keeps a record of touches during SYN_DROPPED */ ++enum touch_state { ++ TOUCH_OFF, ++ TOUCH_STARTED, /* Started during SYN_DROPPED */ ++ TOUCH_STOPPED, /* Stopped during SYN_DROPPED */ ++ TOUCH_ONGOING, /* Existed before, still have same tracking ID */ ++ TOUCH_CHANGED, /* Existed before but have new tracking ID now, so ++ stopped + started in that slot */ ++}; ++ ++struct slot_change_state { ++ enum touch_state state; ++ unsigned long axes[NLONGS(ABS_CNT)]; /* bitmask for updated axes */ ++}; ++ + /** + * Internal only: log data used to send messages to the respective log + * handler. We re-use the same struct for a global and inside +@@ -107,6 +128,13 @@ struct libevdev { + + struct timeval last_event_time; + ++ struct { ++ struct mt_sync_state *mt_state; ++ size_t mt_state_sz; /* in bytes */ ++ struct slot_change_state *changes; ++ size_t changes_sz; /* in bytes */ ++ } mt_sync; ++ + struct logdata log; + }; + +diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c +index f034637..77cf678 100644 +--- a/libevdev/libevdev.c ++++ b/libevdev/libevdev.c +@@ -28,7 +28,6 @@ + #include <limits.h> + #include <unistd.h> + #include <stdarg.h> +-#include <stdint.h> + #include <stdbool.h> + + #include "libevdev.h" +@@ -44,23 +43,7 @@ enum event_filter_status { + EVENT_FILTER_DISCARD, /**< Discard current event */ + }; + +-/* Keeps a record of touches during SYN_DROPPED */ +-enum touch_state { +- TOUCH_OFF, +- TOUCH_STARTED, /* Started during SYN_DROPPED */ +- TOUCH_STOPPED, /* Stopped during SYN_DROPPED */ +- TOUCH_ONGOING, /* Existed before, still have same tracking ID */ +- TOUCH_CHANGED, /* Existed before but have new tracking ID now, so +- stopped + started in that slot */ +-}; +- +-struct slot_change_state { +- enum touch_state state; +- unsigned long axes[NLONGS(ABS_CNT)]; /* bitmask for updated axes */ +-}; +- +-static int sync_mt_state(struct libevdev *dev, +- struct slot_change_state *changes_out); ++static int sync_mt_state(struct libevdev *dev); + static int + update_key_state(struct libevdev *dev, const struct input_event *e); + +@@ -218,6 +201,8 @@ libevdev_reset(struct libevdev *dev) + free(dev->phys); + free(dev->uniq); + free(dev->mt_slot_vals); ++ free(dev->mt_sync.mt_state); ++ free(dev->mt_sync.changes); + memset(dev, 0, sizeof(*dev)); + dev->fd = -1; + dev->initialized = false; +@@ -347,7 +332,11 @@ free_slots(struct libevdev *dev) + { + dev->num_slots = -1; + free(dev->mt_slot_vals); ++ free(dev->mt_sync.changes); ++ free(dev->mt_sync.mt_state); + dev->mt_slot_vals = NULL; ++ dev->mt_sync.changes = NULL; ++ dev->mt_sync.mt_state = NULL; + } + + static int +@@ -357,7 +346,11 @@ init_slots(struct libevdev *dev) + int rc = 0; + + free(dev->mt_slot_vals); ++ free(dev->mt_sync.changes); ++ free(dev->mt_sync.mt_state); + dev->mt_slot_vals = NULL; ++ dev->mt_sync.changes = NULL; ++ dev->mt_sync.mt_state = NULL; + + /* devices with ABS_RESERVED aren't MT devices, + see the documentation for multitouch-related +@@ -381,6 +374,19 @@ init_slots(struct libevdev *dev) + } + dev->current_slot = abs_info->value; + ++ dev->mt_sync.mt_state_sz = sizeof(*dev->mt_sync.mt_state) + ++ dev->num_slots * sizeof(int32_t); ++ dev->mt_sync.mt_state = calloc(1, dev->mt_sync.mt_state_sz); ++ ++ dev->mt_sync.changes_sz = dev->num_slots * ++ sizeof(dev->mt_sync.changes[0]); ++ dev->mt_sync.changes = malloc(dev->mt_sync.changes_sz); ++ ++ if (!dev->mt_sync.changes || !dev->mt_sync.mt_state) { ++ rc = -ENOMEM; ++ goto out; ++ } ++ + reset_tracking_ids(dev); + out: + return rc; +@@ -536,10 +542,8 @@ libevdev_set_fd(struct libevdev* dev, int fd) + if (rc != 0) + goto out; + +- if (dev->num_slots != -1) { +- struct slot_change_state unused[dev->num_slots]; +- sync_mt_state(dev, unused); +- } ++ if (dev->num_slots != -1) ++ sync_mt_state(dev); + + rc = init_event_queue(dev); + if (rc < 0) { +@@ -674,32 +678,27 @@ out: + } + + static int +-sync_mt_state(struct libevdev *dev, +- struct slot_change_state changes_out[dev->num_slots]) ++sync_mt_state(struct libevdev *dev) + { +-#define MAX_SLOTS 256 + int rc = 0; +- struct slot_change_state changes[MAX_SLOTS] = {0}; ++ struct mt_sync_state *mt_state = dev->mt_sync.mt_state; ++ struct slot_change_state *changes = dev->mt_sync.changes; + +- for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) { +- /* EVIOCGMTSLOTS required format */ +- struct mt_sync_state { +- uint32_t code; +- int32_t val[MAX_SLOTS]; +- } mt_state; ++ memset(dev->mt_sync.changes, 0, dev->mt_sync.changes_sz); + ++ for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) { + if (axis == ABS_MT_SLOT || + !libevdev_has_event_code(dev, EV_ABS, axis)) + continue; + +- mt_state.code = axis; +- rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(mt_state)), &mt_state); ++ mt_state->code = axis; ++ rc = ioctl(dev->fd, EVIOCGMTSLOTS(dev->mt_sync.mt_state_sz), mt_state); + if (rc < 0) + goto out; + +- for (int slot = 0; slot < min(MAX_SLOTS, dev->num_slots); slot++) { ++ for (int slot = 0; slot < dev->num_slots; slot++) { + int val_before = *slot_value(dev, slot, axis), +- val_after = mt_state.val[slot]; ++ val_after = mt_state->val[slot]; + + if (axis == ABS_MT_TRACKING_ID) { + if (val_before == -1 && val_after != -1) { +@@ -728,14 +727,12 @@ sync_mt_state(struct libevdev *dev, + } + } + +- memcpy(changes_out, changes, sizeof(*changes) * dev->num_slots); + out: + return rc; + } + + static void + terminate_slots(struct libevdev *dev, +- const struct slot_change_state changes[dev->num_slots], + int *last_reported_slot) + { + const unsigned int map[] = {BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, +@@ -743,6 +740,7 @@ terminate_slots(struct libevdev *dev, + BTN_TOOL_QUINTTAP}; + bool touches_stopped = false; + int ntouches_before = 0, ntouches_after = 0; ++ struct slot_change_state *changes = dev->mt_sync.changes; + + /* For BTN_TOOL_* emulation, we need to know how many touches we had + * before and how many we have left once we terminate all the ones +@@ -806,10 +804,10 @@ terminate_slots(struct libevdev *dev, + + static int + push_mt_sync_events(struct libevdev *dev, +- const struct slot_change_state changes[dev->num_slots], + int last_reported_slot) + { + struct input_absinfo abs_info; ++ struct slot_change_state *changes = dev->mt_sync.changes; + int rc; + + for (int slot = 0; slot < dev->num_slots; slot++) { +@@ -916,8 +914,6 @@ sync_state(struct libevdev *dev) + int rc = 0; + bool want_mt_sync = false; + int last_reported_slot = 0; +- struct slot_change_state changes[dev->num_slots > 0 ? dev->num_slots : 1]; +- memset(changes, 0, sizeof(changes)); + + /* see section "Discarding events before synchronizing" in + * libevdev/libevdev.h */ +@@ -935,9 +931,9 @@ sync_state(struct libevdev *dev) + if (dev->num_slots > -1 && + libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT)) { + want_mt_sync = true; +- rc = sync_mt_state(dev, changes); ++ rc = sync_mt_state(dev); + if (rc == 0) +- terminate_slots(dev, changes, &last_reported_slot); ++ terminate_slots(dev, &last_reported_slot); + else + want_mt_sync = false; + } +@@ -951,7 +947,7 @@ sync_state(struct libevdev *dev) + if (rc == 0 && libevdev_has_event_type(dev, EV_ABS)) + rc = sync_abs_state(dev); + if (rc == 0 && want_mt_sync) +- push_mt_sync_events(dev, changes, last_reported_slot); ++ push_mt_sync_events(dev, last_reported_slot); + + dev->queue_nsync = queue_num_elements(dev); + +-- +2.25.1 + diff --git a/pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch b/pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch deleted file mode 100644 index 94aebeaf..00000000 --- a/pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 2c63dd5278059b4513a265299915c4237e5b0178 Mon Sep 17 00:00:00 2001 -From: Michael Forney <mforney@mforney.org> -Date: Sun, 16 Jun 2019 17:14:18 -0700 -Subject: [PATCH] Avoid initializer index range -Upstream: https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/11 - ---- - libevdev/libevdev.c | 2 +- - libevdev/make-event-names.py | 1 - - 2 files changed, 1 insertion(+), 2 deletions(-) - -diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c -index d750186..29cb615 100644 ---- a/libevdev/libevdev.c -+++ b/libevdev/libevdev.c -@@ -1708,7 +1708,7 @@ libevdev_property_get_name(unsigned int prop) - LIBEVDEV_EXPORT int - libevdev_event_type_get_max(unsigned int type) - { -- if (type > EV_MAX) -+ if (type > EV_MAX || !ev_max[type]) - return -1; - - return ev_max[type]; -diff --git a/libevdev/make-event-names.py b/libevdev/make-event-names.py -index 716c1d7..de3a725 100755 ---- a/libevdev/make-event-names.py -+++ b/libevdev/make-event-names.py -@@ -94,7 +94,6 @@ def print_map(bits): - print("#pragma GCC diagnostic ignored \"-Woverride-init\"") - print("#endif") - print("static const int ev_max[EV_MAX + 1] = {") -- print(" [0 ... EV_MAX] = -1,") - for prefix in prefixes: - if prefix in ["BTN_", "EV_", "INPUT_PROP_", "MT_TOOL_"]: - continue --- -2.23.0 - diff --git a/pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch b/pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch deleted file mode 100644 index 7063ad8f..00000000 --- a/pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 296ede81584f7490196e29a95a8b2655efcc121e Mon Sep 17 00:00:00 2001 -From: Michael Forney <mforney@mforney.org> -Date: Sun, 16 Jun 2019 17:18:00 -0700 -Subject: [PATCH] Only use GCC pragma on GCC -Upstream: https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/11 - ---- - libevdev/make-event-names.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/libevdev/make-event-names.py b/libevdev/make-event-names.py -index de3a725..9612440 100755 ---- a/libevdev/make-event-names.py -+++ b/libevdev/make-event-names.py -@@ -89,7 +89,7 @@ def print_map(bits): - print("#if __clang__") - print("#pragma clang diagnostic push") - print("#pragma clang diagnostic ignored \"-Winitializer-overrides\"") -- print("#else") -+ print("#elif __GNUC__") - print("#pragma GCC diagnostic push") - print("#pragma GCC diagnostic ignored \"-Woverride-init\"") - print("#endif") -@@ -101,7 +101,7 @@ def print_map(bits): - print("};") - print("#if __clang__") - print("#pragma clang diagnostic pop /* \"-Winitializer-overrides\" */") -- print("#else") -+ print("#elif __GNUC__") - print("#pragma GCC diagnostic pop /* \"-Woverride-init\" */") - print("#endif"); - print("") --- -2.20.1 - |
