use crate::protocol::opcode::{CAP_REPORT_ID, CAP_WHEEL, CAP_X, CAP_Y};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Caps {
pub n_buttons: u8,
pub has_x: bool,
pub has_y: bool,
pub has_wheel: bool,
pub has_report_id: bool,
pub n_hid: u8,
}
impl Caps {
pub fn is_composite(&self) -> bool {
self.n_hid > 1
}
pub(crate) fn from_payload(p: &[u8]) -> Option<Self> {
if p.len() < 4 {
return None;
}
let axis = p[2];
Some(Caps {
n_buttons: p[1],
has_x: axis & CAP_X != 0,
has_y: axis & CAP_Y != 0,
has_wheel: axis & CAP_WHEEL != 0,
has_report_id: axis & CAP_REPORT_ID != 0,
n_hid: p[3],
})
}
}