summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-11-10 11:05:50 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-11-11 09:35:17 +1000
commit563f67daf909d81f93b143053d73d3298d661fb7 (patch)
treef9134ddd7855427c3019a4856ca0c252cff3a4dd
parent67261f8e4c77d1cbdb076e283427eb9667c52abc (diff)
e-c-d: Add event time to event replay.
Includes some slight drifting since we don't account for the actual time we take, but that shouldn't matter too much. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--evtest-create-device.xsl23
1 files changed, 18 insertions, 5 deletions
diff --git a/evtest-create-device.xsl b/evtest-create-device.xsl
index 18aae64..7d44828 100644
--- a/evtest-create-device.xsl
+++ b/evtest-create-device.xsl
@@ -59,7 +59,7 @@
static int fd = -1;
static int stop = 0;
-static void send_event(int fd, int type, int code, int value);
+static void send_event(int fd, int type, int code, int value, int sec, int usec);
static int setup(struct uinput_user_dev *dev, int fd)
{
@@ -139,17 +139,30 @@ static void cleanup_uinput(void)
fd = -1;
}
-static void send_event(int fd, int type, int code, int value)
+static void send_event(int fd, int type, int code, int value, int sec, int usec)
{
+ static int sec_offset = -1;
+ static long last_time = -1;
+ long newtime;
struct input_event event;
event.type = type;
event.code = code;
event.value = value;
- gettimeofday(&event.time, NULL);
+
+ if (sec_offset == -1)
+ sec_offset = sec;
+
+ sec -= sec_offset;
+ newtime = sec * 1000000 + usec;
+
+ if (last_time > 0)
+ usleep(newtime - last_time);
if (write(fd, &event, sizeof(event)) < sizeof(event))
perror("Send event failed.");
+
+ last_time = newtime;
}
int main (int argc, char **argv)
@@ -212,10 +225,10 @@ int main (int argc, char **argv)
</xsl:template>
<!-- code replaying the events -->
-
<xsl:template match="events">
<xsl:for-each select="event">
- send_event(fd, <xsl:value-of select="@type"/>, <xsl:value-of select="@code"/>, <xsl:value-of select="@value"/>);</xsl:for-each>
+ send_event(fd, <xsl:value-of select="@type"/>, <xsl:value-of select="@code"/>, <xsl:value-of select="@value"/>, <xsl:value-of select="@sec"/>, <xsl:value-of select="@usec"/>);</xsl:for-each>
</xsl:template>
+
</xsl:stylesheet>