cc_talk_core 0.0.2

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(EscrowOperatingStatus::Idle),
            1 => Ok(EscrowOperatingStatus::Operating),
            2 => Ok(EscrowOperatingStatus::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(EscrowLevelStatus::EmptyOrNotFull),
            255 => Ok(EscrowLevelStatus::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 => EscrowFaultCode::NoFault,
            10 => EscrowFaultCode::FailureToOpenAcceptFlap,
            11 => EscrowFaultCode::FailureToOpenAcceptFlapFromHome,
            12 => EscrowFaultCode::FailureToOpenAcceptFlapFromUnknown,
            20 => EscrowFaultCode::FailureToCloseAcceptFlap,
            21 => EscrowFaultCode::FailureToCloseAcceptFlapAfterAccept,
            22 => EscrowFaultCode::FailureToCloseAcceptFlapAfterFailedAccept,
            23 => EscrowFaultCode::FailureToCloseAcceptFlapAfterFromUnknown,
            30 => EscrowFaultCode::FailureToOpenReturnFlap,
            31 => EscrowFaultCode::FailureToOpenReturnFlapFromHome,
            32 => EscrowFaultCode::FailureToOpenReturnFlapFromUnknown,
            40 => EscrowFaultCode::FailureToCloseReturnFlap,
            41 => EscrowFaultCode::FailureToCloseReturnFlapAfterReturn,
            42 => EscrowFaultCode::FailureToCloseReturnFlapAfterFailedReturn,
            43 => EscrowFaultCode::FailureToCloseReturnFlapFromUnknown,
            100 => EscrowFaultCode::SupplyUnderVoltage,
            101 => EscrowFaultCode::SupplyOverVoltage,
            200 => EscrowFaultCode::FraudulentManipulationDetected,
            250 => EscrowFaultCode::OverCurrentOrJammed,
            _ => EscrowFaultCode::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(EscrowServiceStatus::None),
            1 => Ok(EscrowServiceStatus::Recommended),
            2 => Ok(EscrowServiceStatus::Overdue),
            _ => Err("Invalid value for EscrowServiceStatus"),
        }
    }
}