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