# necessary bits.
util_headers = [
'util-bits.h',
+ 'util-input-event.h',
'util-list.h',
'util-macros.h',
'util-matrix.h',
#include <string.h>
#include "linux/input.h"
+#include "util-input-event.h"
#include "evdev-mt-touchpad.h"
#define DEFAULT_BUTTON_ENTER_TIMEOUT ms2us(100)
if (tp->buttons.trackpoint) {
if (is_topbutton) {
struct evdev_dispatch *dispatch = tp->buttons.trackpoint->dispatch;
- struct input_event event;
- struct input_event syn_report = {{ 0, 0 }, EV_SYN, SYN_REPORT, 0 };
-
- event.time = us2tv(time);
- event.type = EV_KEY;
- event.code = button;
- event.value = (state == LIBINPUT_BUTTON_STATE_PRESSED) ? 1 : 0;
- syn_report.time = event.time;
+ struct input_event event, syn_report;
+ int value;
+
+ value = (state == LIBINPUT_BUTTON_STATE_PRESSED) ? 1 : 0;
+ event = input_event_init(time, EV_KEY, button, value);
+ syn_report = input_event_init(time, EV_SYN, SYN_REPORT, 0);
dispatch->interface->process(dispatch,
tp->buttons.trackpoint,
&event,
#include "filter.h"
#include "libinput-private.h"
#include "quirks.h"
+#include "util-input-event.h"
#if HAVE_LIBWACOM
#include <libwacom/libwacom.h>
{
static uint32_t offset = 0;
static uint32_t last_time = 0;
- uint32_t time = us2ms(tv2us(&e->time));
+ uint32_t time = us2ms(input_event_time(e));
if (offset == 0) {
offset = time;
evdev_process_event(struct evdev_device *device, struct input_event *e)
{
struct evdev_dispatch *dispatch = device->dispatch;
- uint64_t time = tv2us(&e->time);
+ uint64_t time = input_event_time(e);
#if 0
evdev_print_event(device, e);
--- /dev/null
+/*
+ * Copyright © 2019 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include "config.h"
+
+#include "util-time.h"
+#include <linux/input.h>
+
+static inline struct input_event
+input_event_init(uint64_t time,
+ unsigned int type,
+ unsigned int code,
+ int value)
+{
+ struct input_event ev;
+ struct timeval tval = us2tv(time);
+
+ ev.input_event_sec = tval.tv_sec;
+ ev.input_event_usec = tval.tv_usec;
+ ev.type = type;
+ ev.code = code;
+ ev.value = value;
+
+ return ev;
+}
+
+static inline uint64_t
+input_event_time(const struct input_event *e)
+{
+ struct timeval tval;
+
+ tval.tv_sec = e->input_event_sec;
+ tval.tv_usec = e->input_event_usec;
+
+ return tv2us(&tval);
+}
+
+
+static inline void
+input_event_set_time(struct input_event *e,
+ uint64_t time)
+{
+ struct timeval tval = us2tv(time);
+
+ e->input_event_sec = tval.tv_sec;
+ e->input_event_usec = tval.tv_usec;
+}
#include "builddir.h"
#include "util-list.h"
#include "util-time.h"
+#include "util-input-event.h"
#include "util-macros.h"
static const int FILE_VERSION_NUMBER = 1;
const char *cname;
bool was_modified = false;
char desc[1024];
+ uint64_t time = input_event_time(ev) - ctx->offset;
- ev->time = us2tv(tv2us(&ev->time) - ctx->offset);
+ input_event_set_time(ev, time);
/* Don't leak passwords unless the user wants to */
if (!ctx->show_keycodes)
static unsigned long last_ms = 0;
unsigned long time, dt;
- time = us2ms(tv2us(&ev->time));
+ time = us2ms(input_event_time(ev));
dt = time - last_ms;
last_ms = time;
iprintf(ctx,
"- [%3lu, %6u, %3d, %3d, %7d] # %s\n",
- ev->time.tv_sec,
- (unsigned int)ev->time.tv_usec,
+ ev->input_event_sec,
+ (unsigned int)ev->input_event_usec,
ev->type,
ev->code,
ev->value,
while (libevdev_next_event(evdev,
LIBEVDEV_READ_FLAG_NORMAL,
&e) == LIBEVDEV_READ_STATUS_SUCCESS) {
+ uint64_t time;
if (ctx->offset == 0)
- ctx->offset = tv2us(&e.time);
+ ctx->offset = input_event_time(&e);
if (d->nevents == d->events_sz)
resize(d->events, d->events_sz);
event = &d->events[d->nevents++];
event->type = EVDEV;
- event->time = tv2us(&e.time) - ctx->offset;
+ time = input_event_time(&e);
+ input_event_set_time(&e, time - ctx->offset);
event->u.evdev = e;
count++;