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 <peter.hutterer@who-t.net>
Reviewed-by: default avatarChase Douglas <chase.douglas@canonical.com>
Signed-off-by: default avatarChase Douglas <chase.douglas@canonical.com>
parent 4e62312c
...@@ -75,6 +75,20 @@ class Device { ...@@ -75,6 +75,20 @@ class Device {
*/ */
void Play(const std::string& path) const; 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. * Return the /dev/input/eventX device node for this device.
* *
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "xorg/gtest/evemu/xorg-gtest-device.h" #include "xorg/gtest/evemu/xorg-gtest-device.h"
#include <linux/input.h>
#include <fcntl.h> #include <fcntl.h>
#include <dirent.h> #include <dirent.h>
...@@ -149,6 +150,24 @@ void xorg::testing::evemu::Device::Play(const std::string& path) const { ...@@ -149,6 +150,24 @@ void xorg::testing::evemu::Device::Play(const std::string& path) const {
fclose(file); fclose(file);
} }
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) { const std::string& xorg::testing::evemu::Device::GetDeviceNode(void) {
return d_->device_node; 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