use crate::protocol::opcode::{
ACT_FORCEREL, ACT_PRESS, ACT_SOFTREL, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, BTN_SIDE1, BTN_SIDE2,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Button {
Left,
Right,
Middle,
Side1,
Side2,
}
impl Button {
pub fn as_id(self) -> u8 {
match self {
Button::Left => BTN_LEFT,
Button::Right => BTN_RIGHT,
Button::Middle => BTN_MIDDLE,
Button::Side1 => BTN_SIDE1,
Button::Side2 => BTN_SIDE2,
}
}
pub fn from_id(id: u8) -> Option<Self> {
Some(match id {
BTN_LEFT => Button::Left,
BTN_RIGHT => Button::Right,
BTN_MIDDLE => Button::Middle,
BTN_SIDE1 => Button::Side1,
BTN_SIDE2 => Button::Side2,
_ => return None,
})
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ButtonAction {
SoftRelease = ACT_SOFTREL,
Press = ACT_PRESS,
ForceRelease = ACT_FORCEREL,
}
impl ButtonAction {
pub fn as_u8(self) -> u8 {
self as u8
}
pub fn from_u8(v: u8) -> Option<Self> {
Some(match v {
ACT_SOFTREL => ButtonAction::SoftRelease,
ACT_PRESS => ButtonAction::Press,
ACT_FORCEREL => ButtonAction::ForceRelease,
_ => return None,
})
}
}