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};

/// Event codes for absolute axes
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[repr(u8)]
pub enum AbsoluteAxis {
	/// Left X axis
	LeftX = ABS_X as u8,
	/// Left Y axis
	LeftY = ABS_Y as u8,
	/// Left Z axis
	LeftZ = ABS_Z as u8,
	/// Right X axis
	RightX = ABS_RX as u8,
	/// Right Y axis
	RightY = ABS_RY as u8,
	/// Right Z axis
	RightZ = ABS_RZ as u8,
	/// Throttle axis
	Throttle = ABS_THROTTLE as u8,
	/// Rudder axis
	Rudder = ABS_RUDDER as u8,
	/// Wheel axis
	Wheel = ABS_WHEEL as u8,
	/// Gas axis
	Gas = ABS_GAS as u8,
	/// Break axis
	Break = ABS_BRAKE as u8,
	/// Unknown axis 0B
	Unknown0B = 0x0b,
	/// Unknown axis 0C
	Unknown0C = 0x0c,
	/// Unknown axis 0D
	Unknown0D = 0x0d,
	/// Unknown axis 0E
	Unknown0E = 0x0e,
	/// Unknown axis 0F
	Unknown0F = 0x0f,
	/// Hat0 X axis
	Hat0X = ABS_HAT0X as u8,
	/// Hat0 Y axis
	Hat0Y = ABS_HAT0Y as u8,
	/// Hat1 X axis
	Hat1X = ABS_HAT1X as u8,
	/// Hat1 Y axis
	Hat1Y = ABS_HAT1Y as u8,
	/// Hat2 X axis
	Hat2X = ABS_HAT2X as u8,
	/// Hat2 Y axis
	Hat2Y = ABS_HAT2Y as u8,
	/// Hat3 X axis
	Hat3X = ABS_HAT3X as u8,
	/// Hat3 Y axis
	Hat3Y = ABS_HAT3Y as u8,
	/// Pressure axis
	Pressure = ABS_PRESSURE as u8,
	/// Distance axis
	Distance = ABS_DISTANCE as u8,
	/// Tilt X axis
	TiltX = ABS_TILT_X as u8,
	/// Tilt Y axis
	TiltY = ABS_TILT_Y as u8,
	/// Tool width axis
	ToolWidth = ABS_TOOL_WIDTH as u8,
	/// Unknown axis 1D
	Unknown1D = 0x1d,
	/// Unknown axis 1E
	Unknown1E = 0x1e,
	/// Unknown axis 1F
	Unknown1F = 0x1f,
	/// Volume axis
	Volume = ABS_VOLUME as u8,
	/// Unknown axis 21
	Unknown21 = 0x21,
	/// Unknown axis 22
	Unknown22 = 0x22,
	/// Unknown axis 23
	Unknown23 = 0x23,
	/// Unknown axis 24
	Unknown24 = 0x24,
	/// Unknown axis 25
	Unknown25 = 0x25,
	/// Unknown axis 26
	Unknown26 = 0x26,
	/// Unknown axis 27
	Unknown27 = 0x27,
	/// Miscellaneous axis
	Miscellaneous = ABS_MISC as u8,
	/// Unknown axis 29
	Unknown29 = 0x29,
	/// Unknown axis 2A
	Unknown2A = 0x2a,
	/// Unknown axis 2B
	Unknown2B = 0x2b,
	/// Unknown axis 2C
	Unknown2C = 0x2c,
	/// Unknown axis 2D
	Unknown2D = 0x2d,
	/// Reserved axis
	Reserved = ABS_RESERVED as u8,
	/// Multi-touch slot axis
	MultiTouchSlot = ABS_MT_SLOT as u8,
	/// Multi-touch touch major axis
	MultiTouchTouchMajor = ABS_MT_TOUCH_MAJOR as u8,
	/// Multi-touch touch minor axis
	MultiTouchTouchMinor = ABS_MT_TOUCH_MINOR as u8,
	/// Multi-touch width major axis
	MultiTouchWidthMajor = ABS_MT_WIDTH_MAJOR as u8,
	/// Multi-touch width minor axis
	MultiTouchWidthMinor = ABS_MT_WIDTH_MINOR as u8,
	/// Multi-touch orientation axis
	MultiTouchOrientation = ABS_MT_ORIENTATION as u8,
	/// Multi-touch position X axis
	MultiTouchPositionX = ABS_MT_POSITION_X as u8,
	/// Multi-touch position Y axis
	MultiTouchPositionY = ABS_MT_POSITION_Y as u8,
	/// Multi-touch tool type axis
	MultiTouchToolType = ABS_MT_TOOL_TYPE as u8,
	/// Multi-touch blob id axis
	MultiTouchBlobId = ABS_MT_BLOB_ID as u8,
	/// Multi-touch tracking id axis
	MultiTouchTrackingId = ABS_MT_TRACKING_ID as u8,
	/// Multi-touch pressure axis
	MultiTouchPressure = ABS_MT_PRESSURE as u8,
	/// Multi-touch distance axis
	MultiTouchDistance = ABS_MT_DISTANCE as u8,
	/// Multi-touch tool X axis
	MultiTouchToolX = ABS_MT_TOOL_X as u8,
	/// Multi-touch tool Y axis
	MultiTouchToolY = ABS_MT_TOOL_Y as u8,
	/// Unknown axis 3E
	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,
		}
	}
}