use crate::{bindings, error::PROSErr};
#[derive(Debug, Clone, Copy)]
#[repr(u8)]
pub enum Controller {
Master = 0,
Partner = 1,
}
#[derive(Debug, Clone, Copy)]
#[repr(u8)]
pub enum ControllerAnalog {
LeftX = 0,
LeftY = 1,
RightX = 2,
RightY = 3,
}
#[derive(Debug, Clone, Copy)]
#[repr(u8)]
pub enum ControllerDigital {
L1 = 6,
L2,
R1,
R2,
Up,
Down,
Left,
Right,
X,
B,
Y,
A,
}
pub fn get_analog(controller: Controller, analog: ControllerAnalog) -> Result<i8, PROSErr> {
let code = unsafe {
bindings::controller_get_analog(controller as u32, analog as u32)
};
if let Err(err) = PROSErr::parse(code) {
return Err(err);
}
Ok(code as i8)
}
pub fn get_digital(controller: Controller, digital: ControllerDigital) -> Result<bool, PROSErr> {
let code = unsafe {
bindings::controller_get_digital(controller as u32, digital as u32)
};
if let Err(err) = PROSErr::parse(code) {
return Err(err);
}
Ok(code != 0)
}