Read MSC_TIMESTAMP from evdev and pass along
This CL passes along MSC_TIMESTAMP if the device reports it. We will
use this in the touchpad gesture library for more accurate time deltas,
particularly for lux/hammer.
BUG=b:65041115
TEST=Deploy to device which supports MSC_TIMESTAMP: values are
succesfully passed. Deploy to device without MSC_TIMESTAMP support: no
problems.
Change-Id: Ib7c6431d11f593eb10481de6cc6348f837aee05c
Reviewed-on: https://chromium-review.googlesource.com/742488
Commit-Ready: Sean O'Brien <seobrien@chromium.org>
Tested-by: Sean O'Brien <seobrien@chromium.org>
Reviewed-by: Michael Spang <spang@chromium.org>
Reviewed-by: Sean O'Brien <seobrien@chromium.org>
diff --git a/src/libevdev_event.c b/src/libevdev_event.c
index 4df9d4a..e1835b4 100755
--- a/src/libevdev_event.c
+++ b/src/libevdev_event.c
@@ -51,6 +51,8 @@
static void Event_Rel(EvdevPtr, struct input_event*);
+static void Event_Msc(EvdevPtr, struct input_event*);
+
static void Event_Get_Time(struct timeval*, bool);
static int Event_Is_Valid(struct input_event*);
@@ -205,6 +207,13 @@
return TestBit(button, device->key_state_bitmask);
}
+int
+Event_Get_Timestamp(EvdevPtr device)
+{
+ EventStatePtr evstate = device->evstate;
+ return evstate->msc_timestamp;
+}
+
#define CASE_RETURN(s) \
case (s):\
return #s
@@ -273,6 +282,13 @@
break;
}
break;
+ case EV_MSC:
+ switch (code) {
+ CASE_RETURN(MSC_TIMESTAMP);
+ default:
+ break;
+ }
+ break;
default:
break;
}
@@ -327,6 +343,7 @@
}
}
}
+ evstate->msc_timestamp = 0;
return Success;
}
@@ -492,6 +509,10 @@
Event_Rel(device, ev);
break;
+ case EV_MSC:
+ Event_Msc(device, ev);
+ break;
+
default:
break;
}
@@ -699,6 +720,18 @@
}
}
+static void
+Event_Msc(EvdevPtr device, struct input_event* ev)
+{
+ EventStatePtr evstate = device->evstate;
+
+ switch (ev->code) {
+ case MSC_TIMESTAMP:
+ evstate->msc_timestamp = ev->value;
+ break;
+ }
+}
+
static int Event_Is_Valid(struct input_event* ev)
{
/* Key repeats are invalid. They're handled by X anyway */