use hidapi::{HidApi, HidDevice, HidResult};
use crate::state::DualsenseState;
use crate::{PRODUCT_ID, VENDOR_ID};
#[derive(Debug)]
pub struct Dualsense {
device: HidDevice,
input_buf: [u8; 64],
}
impl Dualsense {
pub fn new(hid_api: &mut HidApi) -> HidResult<Dualsense> {
hid_api.reset_devices()?;
hid_api.add_devices(VENDOR_ID, PRODUCT_ID)?;
let device = hid_api.open(VENDOR_ID, PRODUCT_ID)?;
Ok(Dualsense {
device,
input_buf: [0; 64],
})
}
pub fn read_into(&mut self, state: &mut DualsenseState) -> HidResult<()> {
self.device.read(&mut self.input_buf)?;
state.update_from_hid_report(&self.input_buf);
Ok(())
}
pub fn read(&mut self) -> HidResult<DualsenseState> {
let mut state = DualsenseState::default();
self.read_into(&mut state)?;
Ok(state)
}
}