#[derive(Default)]
pub struct ButtonsState {
pub button_mask: u8,
pub cmd_buffer: [u8; 4],
}
impl ButtonsState {
pub const fn new() -> ButtonsState {
ButtonsState {
button_mask: 0,
cmd_buffer: [0; 4],
}
}
}
#[derive(Eq, PartialEq)]
pub enum ButtonEvent {
LeftButtonPress,
RightButtonPress,
BothButtonsPress,
LeftButtonRelease,
RightButtonRelease,
BothButtonsRelease,
}
pub fn get_button_event(buttons: &mut ButtonsState, new: u8) -> Option<ButtonEvent> {
let old = buttons.button_mask;
buttons.button_mask |= new;
match (old, new) {
(0, 1) => Some(ButtonEvent::LeftButtonPress),
(0, 2) => Some(ButtonEvent::RightButtonPress),
(_, 3) => Some(ButtonEvent::BothButtonsPress),
(b, 0) => {
buttons.button_mask = 0; match b {
1 => Some(ButtonEvent::LeftButtonRelease),
2 => Some(ButtonEvent::RightButtonRelease),
3 => Some(ButtonEvent::BothButtonsRelease),
_ => None,
}
}
_ => None,
}
}