cc_talk_core 0.0.4

A no-std implementation of the CCtalk protocol.
Documentation
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum EscrowOperatingStatus {
    Idle = 0,
    Operating = 1,
    FaultCondition = 2,
}

impl TryFrom<u8> for EscrowOperatingStatus {
    type Error = &'static str;

    fn try_from(value: u8) -> Result<Self, Self::Error> {
        match value {
            0 => Ok(Self::Idle),
            1 => Ok(Self::Operating),
            2 => Ok(Self::FaultCondition),
            _ => Err("Invalid value for EscrowOperatingStatus"),
        }
    }
}

#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum EscrowLevelStatus {
    EmptyOrNotFull = 0,
    Full = 255,
}

impl TryFrom<u8> for EscrowLevelStatus {
    type Error = &'static str;

    fn try_from(value: u8) -> Result<Self, Self::Error> {
        match value {
            0 => Ok(Self::EmptyOrNotFull),
            255 => Ok(Self::Full),
            _ => Err("Invalid value for EscrowLevelStatus"),
        }
    }
}

#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum EscrowFaultCode {
    NoFault = 0,
    FailureToOpenAcceptFlap = 10,
    FailureToOpenAcceptFlapFromHome = 11,
    FailureToOpenAcceptFlapFromUnknown = 12,
    FailureToCloseAcceptFlap = 20,
    FailureToCloseAcceptFlapAfterAccept = 21,
    FailureToCloseAcceptFlapAfterFailedAccept = 22,
    FailureToCloseAcceptFlapAfterFromUnknown = 23,
    FailureToOpenReturnFlap = 30,
    FailureToOpenReturnFlapFromHome = 31,
    FailureToOpenReturnFlapFromUnknown = 32,
    FailureToCloseReturnFlap = 40,
    FailureToCloseReturnFlapAfterReturn = 41,
    FailureToCloseReturnFlapAfterFailedReturn = 42,
    FailureToCloseReturnFlapFromUnknown = 43,
    SupplyUnderVoltage = 100,
    SupplyOverVoltage = 101,
    FraudulentManipulationDetected = 200,
    OverCurrentOrJammed = 250,
    Other = 255,
}

impl From<u8> for EscrowFaultCode {
    fn from(value: u8) -> Self {
        match value {
            0 => Self::NoFault,
            10 => Self::FailureToOpenAcceptFlap,
            11 => Self::FailureToOpenAcceptFlapFromHome,
            12 => Self::FailureToOpenAcceptFlapFromUnknown,
            20 => Self::FailureToCloseAcceptFlap,
            21 => Self::FailureToCloseAcceptFlapAfterAccept,
            22 => Self::FailureToCloseAcceptFlapAfterFailedAccept,
            23 => Self::FailureToCloseAcceptFlapAfterFromUnknown,
            30 => Self::FailureToOpenReturnFlap,
            31 => Self::FailureToOpenReturnFlapFromHome,
            32 => Self::FailureToOpenReturnFlapFromUnknown,
            40 => Self::FailureToCloseReturnFlap,
            41 => Self::FailureToCloseReturnFlapAfterReturn,
            42 => Self::FailureToCloseReturnFlapAfterFailedReturn,
            43 => Self::FailureToCloseReturnFlapFromUnknown,
            100 => Self::SupplyUnderVoltage,
            101 => Self::SupplyOverVoltage,
            200 => Self::FraudulentManipulationDetected,
            250 => Self::OverCurrentOrJammed,
            _ => Self::Other,
        }
    }
}

#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum EscrowServiceStatus {
    None = 0,
    Recommended = 1,
    Overdue = 2,
}

impl TryFrom<u8> for EscrowServiceStatus {
    type Error = &'static str;

    fn try_from(value: u8) -> Result<Self, Self::Error> {
        match value {
            0 => Ok(Self::None),
            1 => Ok(Self::Recommended),
            2 => Ok(Self::Overdue),
            _ => Err("Invalid value for EscrowServiceStatus"),
        }
    }
}