use crate::util::si::QAngle;
use vexide_devices::adi::encoder::AdiEncoder;
use vexide_devices::smart::rotation::RotationSensor;
pub trait Encoder {
fn rotations(&self) -> QAngle;
fn reset(&mut self) -> Result<(), Box<dyn std::error::Error>>;
}
impl Encoder for AdiEncoder<360> {
fn rotations(&self) -> QAngle {
QAngle::from_turns(self.position().unwrap().as_turns())
}
fn reset(&mut self) -> Result<(), Box<dyn std::error::Error>> {
self.reset_position()?;
Ok(())
}
}
impl Encoder for RotationSensor {
fn rotations(&self) -> QAngle {
QAngle::from_turns(self.position().unwrap().as_turns())
}
fn reset(&mut self) -> Result<(), Box<dyn std::error::Error>> {
self.reset_position()?;
Ok(())
}
}