|
1 | 1 | mod attribute_set; |
2 | | -mod compensate; |
3 | | - |
4 | | -use crate::uinput::VirtualDevice; |
5 | | -use crate::{AttributeSet, BusType, Device, EventType, InputEvent, InputId, KeyCode, SwitchCode}; |
6 | | -use std::path::PathBuf; |
7 | | -use std::thread; |
8 | | -use std::time::Duration; |
9 | | - |
10 | | -pub fn key_click(key: KeyCode) -> Vec<InputEvent> { |
11 | | - vec![key_event(key, 1), key_event(key, 0)] |
12 | | -} |
13 | | - |
14 | | -pub fn key_event(key: KeyCode, key_state: i32) -> InputEvent { |
15 | | - InputEvent::new(EventType::KEY.0, key.code(), key_state) |
16 | | -} |
17 | | - |
18 | | -pub fn get_test_device() -> std::io::Result<(Device, VirtualDevice)> { |
19 | | - let (name, output) = get_device()?; |
20 | | - |
21 | | - let mut input = Device::open(&name)?; |
22 | | - |
23 | | - input.grab()?; |
24 | | - |
25 | | - Ok((input, output)) |
26 | | -} |
27 | | - |
28 | | -pub fn get_device() -> std::io::Result<(PathBuf, VirtualDevice)> { |
29 | | - let mut keys: AttributeSet<KeyCode> = AttributeSet::new(); |
30 | | - for code in 1..59 { |
31 | | - let key = KeyCode::new(code); |
32 | | - let name = format!("{:?}", key); |
33 | | - if name.starts_with("KEY_") { |
34 | | - keys.insert(key); |
35 | | - } |
36 | | - } |
37 | | - |
38 | | - let mut sw: AttributeSet<SwitchCode> = AttributeSet::new(); |
39 | | - |
40 | | - sw.insert(SwitchCode::SW_LID); |
41 | | - sw.insert(SwitchCode::SW_TABLET_MODE); |
42 | | - |
43 | | - let mut device = VirtualDevice::builder()? |
44 | | - .input_id(InputId::new(BusType::BUS_USB, 0x1234, 0x5678, 0x111)) |
45 | | - .name("test device") |
46 | | - .with_keys(&keys)? |
47 | | - .with_switches(&sw)? |
48 | | - .build()?; |
49 | | - |
50 | | - // Fetch name. |
51 | | - let d: Vec<std::path::PathBuf> = device |
52 | | - .enumerate_dev_nodes_blocking()? |
53 | | - .map(|p| p.unwrap()) |
54 | | - .collect(); |
55 | | - |
56 | | - thread::sleep(Duration::from_millis(100)); // To avoid permission denied. |
57 | | - |
58 | | - Ok((d.first().unwrap().clone(), device)) |
59 | | -} |
60 | | - |
61 | | -pub fn final_dot_state(start_state: i32, events: impl Iterator<Item = InputEvent>) -> i32 { |
62 | | - events.fold(start_state, |state, ev| { |
63 | | - if ev.event_type() == EventType::KEY && ev.code() == KeyCode::KEY_DOT.code() { |
64 | | - if ev.value() == 0 { |
65 | | - 0 |
66 | | - } else { |
67 | | - 1 |
68 | | - } |
69 | | - } else { |
70 | | - state |
71 | | - } |
72 | | - }) |
73 | | -} |
74 | | - |
75 | | -pub fn final_event_state(key: KeyCode, events: &Vec<InputEvent>) -> Option<i32> { |
76 | | - events.iter().fold(None, |state, ev| { |
77 | | - if ev.event_type() == EventType::KEY && ev.code() == key.code() { |
78 | | - if ev.value() == 0 { |
79 | | - Some(0) |
80 | | - } else { |
81 | | - Some(1) |
82 | | - } |
83 | | - } else { |
84 | | - state |
85 | | - } |
86 | | - }) |
87 | | -} |
0 commit comments