#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Phase {
#[default]
Unspecified,
Init,
CommandSend,
ResponseWait,
DataWrite,
DataRead,
BusyWait,
Switch,
Erase,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct ErrorContext {
pub phase: Phase,
pub cmd: Option<u8>,
}
impl ErrorContext {
#[inline]
pub const fn new(phase: Phase) -> Self {
Self { phase, cmd: None }
}
#[inline]
pub const fn for_cmd(phase: Phase, cmd: u8) -> Self {
Self {
phase,
cmd: Some(cmd),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Error {
Timeout(ErrorContext),
Crc(ErrorContext),
NoCard,
UnsupportedCommand,
BadResponse(ErrorContext),
CardError(CardError),
WriteError(ErrorContext),
ReadError(ErrorContext),
Misaligned,
InvalidArgument,
CardLocked,
BusError(ErrorContext),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CardError {
IllegalCommand,
CommandCrcFailed,
EraseSequence,
AddressError,
CardEccFailed,
ControllerError,
Unknown(u8),
}