diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-11-10 11:05:50 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-11-11 09:35:17 +1000 |
commit | 563f67daf909d81f93b143053d73d3298d661fb7 (patch) | |
tree | f9134ddd7855427c3019a4856ca0c252cff3a4dd | |
parent | 67261f8e4c77d1cbdb076e283427eb9667c52abc (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.xsl | 23 |
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> |