#[derive(Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Error<E> {
GyroBus(E),
XmBus(E),
InvalidGyroId {
expected: u8,
actual: u8,
},
InvalidXmId {
expected: u8,
actual: u8,
},
ConfigMismatch {
register: u8,
expected: u8,
actual: u8,
},
}
impl<E: core::fmt::Debug> core::fmt::Display for Error<E> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Error::GyroBus(e) => write!(f, "gyroscope bus error: {:?}", e),
Error::XmBus(e) => write!(f, "accelerometer/magnetometer bus error: {:?}", e),
Error::InvalidGyroId { expected, actual } => write!(
f,
"invalid gyroscope ID: expected 0x{:02X}, got 0x{:02X}",
expected, actual
),
Error::InvalidXmId { expected, actual } => write!(
f,
"invalid XM ID: expected 0x{:02X}, got 0x{:02X}",
expected, actual
),
Error::ConfigMismatch {
register,
expected,
actual,
} => write!(
f,
"config mismatch at register 0x{:02X}: expected 0x{:02X}, got 0x{:02X}",
register, expected, actual
),
}
}
}
#[derive(Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct GyroError<E>(pub E);
#[derive(Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct XmError<E>(pub E);
impl<E> From<E> for GyroError<E> {
fn from(e: E) -> Self {
GyroError(e)
}
}
impl<E> From<E> for XmError<E> {
fn from(e: E) -> Self {
XmError(e)
}
}
impl<E> From<GyroError<E>> for Error<E> {
fn from(e: GyroError<E>) -> Self {
Error::GyroBus(e.0)
}
}
impl<E> From<XmError<E>> for Error<E> {
fn from(e: XmError<E>) -> Self {
Error::XmBus(e.0)
}
}