Skip to content

Commit 3d14570

Browse files
committed
Add example for a virtual touchscreen
1 parent 42b58ee commit 3d14570

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

examples/virtual_touchscreen.rs

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
use evdev::{
2+
uinput::VirtualDeviceBuilder, AbsInfo, AbsoluteAxisType, AttributeSet, EventType, InputEvent,
3+
};
4+
use evdev::{Key, UinputAbsSetup};
5+
use std::thread::sleep;
6+
use std::time::Duration;
7+
8+
fn main() -> std::io::Result<()> {
9+
// input_absinfo abs_x{0, 0, TOUCH_MAX_X, 0, 0, 0};
10+
11+
let max_x = 1080;
12+
let max_y = 1920;
13+
14+
let abs_setup_x = AbsInfo::new(0, 0, max_x, 0, 0, 0);
15+
let abs_setup_y = AbsInfo::new(0, 0, max_y, 0, 0, 0);
16+
17+
let mut buttons = AttributeSet::<Key>::new();
18+
buttons.insert(Key::BTN_TOUCH);
19+
20+
let mut device = VirtualDeviceBuilder::new()?
21+
.name("Fake TouchScreen")
22+
.with_keys(&buttons)?
23+
.with_absolute_axis(&UinputAbsSetup::new(AbsoluteAxisType::ABS_X, abs_setup_x))?
24+
.with_absolute_axis(&UinputAbsSetup::new(AbsoluteAxisType::ABS_Y, abs_setup_y))?
25+
.build()?;
26+
27+
for path in device.enumerate_dev_nodes_blocking()? {
28+
let path = path?;
29+
println!("Available as {}", path.display());
30+
}
31+
32+
println!("Waiting for Ctrl-C...");
33+
34+
for i in 0..5 {
35+
for j in 0..5 {
36+
let move_x = InputEvent::new_now(EventType::ABSOLUTE, AbsoluteAxisType::ABS_X.0, i);
37+
let move_y = InputEvent::new_now(EventType::ABSOLUTE, AbsoluteAxisType::ABS_Y.0, j);
38+
let down_event = InputEvent::new(EventType::KEY, Key::BTN_TOUCH.0, 1);
39+
// *InputEvent::new(EventType::KEY;, Key::BTN_TOUCH.0, 1);
40+
// let down_event = *AbsoluteAxisEvent::new(AbsoluteAxisCode(AbsoluteAxisCode::ABS_X.0), 0);
41+
device.emit(&[down_event, move_x, move_y]).unwrap();
42+
println!("touching {i}, {j}");
43+
sleep(Duration::from_millis(100));
44+
45+
// let up_event = *AbsoluteAxisEvent::new(AbsoluteAxisCode(code), 512);
46+
// device.emit(&[up_event]).unwrap();
47+
// println!("Maxed out.");
48+
49+
let up_event = InputEvent::new(EventType::KEY, Key::BTN_TOUCH.0, 0);
50+
// let down_event = *AbsoluteAxisEvent::new(AbsoluteAxisCode(AbsoluteAxisCode::ABS_X.0), 0);
51+
device.emit(&[up_event])?;
52+
println!("releasing {i}, {j}");
53+
// sleep(Duration::from_millis(100));
54+
}
55+
}
56+
57+
Ok(())
58+
}

0 commit comments

Comments
 (0)