1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
use std::marker::PhantomData;
use input_event_codes::*;
use crate::event_codes::{EventCode, IntoIter};
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[repr(u8)]
pub enum AbsoluteAxis {
LeftX = ABS_X as u8,
LeftY = ABS_Y as u8,
LeftZ = ABS_Z as u8,
RightX = ABS_RX as u8,
RightY = ABS_RY as u8,
RightZ = ABS_RZ as u8,
Throttle = ABS_THROTTLE as u8,
Rudder = ABS_RUDDER as u8,
Wheel = ABS_WHEEL as u8,
Gas = ABS_GAS as u8,
Break = ABS_BRAKE as u8,
Unknown0B = 0x0b,
Unknown0C = 0x0c,
Unknown0D = 0x0d,
Unknown0E = 0x0e,
Unknown0F = 0x0f,
Hat0X = ABS_HAT0X as u8,
Hat0Y = ABS_HAT0Y as u8,
Hat1X = ABS_HAT1X as u8,
Hat1Y = ABS_HAT1Y as u8,
Hat2X = ABS_HAT2X as u8,
Hat2Y = ABS_HAT2Y as u8,
Hat3X = ABS_HAT3X as u8,
Hat3Y = ABS_HAT3Y as u8,
Pressure = ABS_PRESSURE as u8,
Distance = ABS_DISTANCE as u8,
TiltX = ABS_TILT_X as u8,
TiltY = ABS_TILT_Y as u8,
ToolWidth = ABS_TOOL_WIDTH as u8,
Unknown1D = 0x1d,
Unknown1E = 0x1e,
Unknown1F = 0x1f,
Volume = ABS_VOLUME as u8,
Unknown21 = 0x21,
Unknown22 = 0x22,
Unknown23 = 0x23,
Unknown24 = 0x24,
Unknown25 = 0x25,
Unknown26 = 0x26,
Unknown27 = 0x27,
Miscellaneous = ABS_MISC as u8,
Unknown29 = 0x29,
Unknown2A = 0x2a,
Unknown2B = 0x2b,
Unknown2C = 0x2c,
Unknown2D = 0x2d,
Reserved = ABS_RESERVED as u8,
MultiTouchSlot = ABS_MT_SLOT as u8,
MultiTouchTouchMajor = ABS_MT_TOUCH_MAJOR as u8,
MultiTouchTouchMinor = ABS_MT_TOUCH_MINOR as u8,
MultiTouchWidthMajor = ABS_MT_WIDTH_MAJOR as u8,
MultiTouchWidthMinor = ABS_MT_WIDTH_MINOR as u8,
MultiTouchOrientation = ABS_MT_ORIENTATION as u8,
MultiTouchPositionX = ABS_MT_POSITION_X as u8,
MultiTouchPositionY = ABS_MT_POSITION_Y as u8,
MultiTouchToolType = ABS_MT_TOOL_TYPE as u8,
MultiTouchBlobId = ABS_MT_BLOB_ID as u8,
MultiTouchTrackingId = ABS_MT_TRACKING_ID as u8,
MultiTouchPressure = ABS_MT_PRESSURE as u8,
MultiTouchDistance = ABS_MT_DISTANCE as u8,
MultiTouchToolX = ABS_MT_TOOL_X as u8,
MultiTouchToolY = ABS_MT_TOOL_Y as u8,
Unknown3E = 0x3e,
}
impl Default for AbsoluteAxis {
fn default() -> Self {
AbsoluteAxis::LeftX
}
}
impl EventCode<u8> for AbsoluteAxis {
const COUNT: u8 = ABS_CNT as u8;
const MAX: u8 = ABS_MAX as u8;
}
impl IntoIterator for AbsoluteAxis {
type Item = AbsoluteAxis;
type IntoIter = IntoIter<AbsoluteAxis, u8>;
fn into_iter(self) -> Self::IntoIter {
Self::IntoIter {
phantom: PhantomData,
value: self as u8,
}
}
}