use crate::ll;
use core::fmt;
use embedded_hal::{blocking::spi, digital::v2::OutputPin};
use ssmarshal;
pub enum Error<SPI, CS>
where
SPI: spi::Transfer<u8> + spi::Write<u8>,
CS: OutputPin,
{
Spi(ll::Error<SPI, CS>),
Fcs,
Phy,
BufferTooSmall {
required_len: usize,
},
ReedSolomon,
FrameWaitTimeout,
Overrun,
PreambleDetectionTimeout,
SfdTimeout,
FrameFilteringRejection,
Frame(byte::Error),
DelayedSendTooLate,
DelayedSendPowerUpWarning,
Ssmarshal(ssmarshal::Error),
InvalidConfiguration,
RxNotFinished,
StillAsleep,
BadRssiCalculation,
RxConfigFrameFilteringUnsupported,
}
impl<SPI, CS> From<ll::Error<SPI, CS>> for Error<SPI, CS>
where
SPI: spi::Transfer<u8> + spi::Write<u8>,
CS: OutputPin,
{
fn from(error: ll::Error<SPI, CS>) -> Self {
Error::Spi(error)
}
}
impl<SPI, CS> From<ssmarshal::Error> for Error<SPI, CS>
where
SPI: spi::Transfer<u8> + spi::Write<u8>,
CS: OutputPin,
{
fn from(error: ssmarshal::Error) -> Self {
Error::Ssmarshal(error)
}
}
impl<SPI, CS> fmt::Debug for Error<SPI, CS>
where
SPI: spi::Transfer<u8> + spi::Write<u8>,
<SPI as spi::Transfer<u8>>::Error: fmt::Debug,
<SPI as spi::Write<u8>>::Error: fmt::Debug,
CS: OutputPin,
<CS as OutputPin>::Error: fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::Spi(error) => write!(f, "Spi({:?})", error),
Error::Fcs => write!(f, "Fcs"),
Error::Phy => write!(f, "Phy"),
Error::BufferTooSmall { required_len } => {
write!(f, "BufferTooSmall {{ required_len: {:?} }}", required_len,)
}
Error::ReedSolomon => write!(f, "ReedSolomon"),
Error::FrameWaitTimeout => write!(f, "FrameWaitTimeout"),
Error::Overrun => write!(f, "Overrun"),
Error::PreambleDetectionTimeout => write!(f, "PreambleDetectionTimeout"),
Error::SfdTimeout => write!(f, "SfdTimeout"),
Error::FrameFilteringRejection => write!(f, "FrameFilteringRejection"),
Error::Frame(error) => write!(f, "Frame({:?})", error),
Error::DelayedSendTooLate => write!(f, "DelayedSendTooLate"),
Error::DelayedSendPowerUpWarning => write!(f, "DelayedSendPowerUpWarning"),
Error::Ssmarshal(error) => write!(f, "Ssmarshal({:?})", error),
Error::InvalidConfiguration => write!(f, "InvalidConfiguration"),
Error::RxNotFinished => write!(f, "RxNotFinished"),
Error::StillAsleep => write!(f, "StillAsleep"),
Error::BadRssiCalculation => write!(f, "BadRssiCalculation"),
Error::RxConfigFrameFilteringUnsupported => {
write!(f, "RxConfigFrameFilteringUnsupported")
}
}
}
}