Commit fbeaa2a5 authored by Peter Hutterer's avatar Peter Hutterer Committed by Chase Douglas
Browse files

device: add PlayOne() for single event replaying

Signed-off-by: Peter Hutterer's avatarPeter Hutterer <>
Reviewed-by: default avatarChase Douglas <>
Signed-off-by: default avatarChase Douglas <>
parent 4e62312c
......@@ -75,6 +75,20 @@ class Device {
void Play(const std::string& path) const;
* Play a single event through the device.
* Plays an event with the given type, code and value through the device.
* @param [in] type Evdev interface event type, e.g. EV_ABS, EV_REL, EV_KEY.
* @param [in] code Evdev interface event code, e.g. ABS_X, REL_Y, BTN_LEFT
* @param [in] value Event value
* @param [in] sync If true, submit an EV_SYN event after this event
* @throws std::runtime_error if playback failed for any reason.
void PlayOne(int type, int code, int value, bool sync = false);
* Return the /dev/input/eventX device node for this device.
......@@ -27,6 +27,7 @@
#include "xorg/gtest/evemu/xorg-gtest-device.h"
#include <linux/input.h>
#include <fcntl.h>
#include <dirent.h>
......@@ -149,6 +150,24 @@ void xorg::testing::evemu::Device::Play(const std::string& path) const {
void xorg::testing::evemu::Device::PlayOne(int type, int code, int value, bool sync)
struct input_event ev;
if (evemu_create_event(&ev, type, code, value))
throw std::runtime_error("Failed to create event");
if (evemu_play_one(d_->fd, &ev))
throw std::runtime_error("Failed to play event");
if (sync) {
if (evemu_create_event(&ev, EV_SYN, SYN_REPORT, 0))
throw std::runtime_error("Failed to create EV_SYN event");
if (evemu_play_one(d_->fd, &ev))
throw std::runtime_error("Failed to play EV_SYN event");
const std::string& xorg::testing::evemu::Device::GetDeviceNode(void) {
return d_->device_node;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment