use core::fmt;
use embedded_hal::{blocking::spi, digital::v2::OutputPin};
use ssmarshal;
use crate::ll;
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")
},
}
}
}