sdmmc-core 0.5.0

SD/MMC core data structures and algorithms
Documentation
use crate::lib_enum;
use crate::result::{Error, Result};

lib_enum! {
    /// Represents the time value for the [Taac](super::TimeAsyncAccessCycles) field.
    AccessTimeValue: u8 {
        default: Value10,
        error: Error,
        /// Time value: 1.0.
        Value10 = 0x1,
    }
}

impl AccessTimeValue {
    /// Gets the time value multiplier for [AccessTimeValue].
    ///
    /// ## Example
    ///
    /// ```rust
    /// # use sdmmc_core::register::csd::v2::taac::{AccessTimeUnit, AccessTimeValue};
    /// // To get the actual time value:
    /// let time = (AccessTimeValue::Value10.value() * (AccessTimeUnit::Ms1.ns() as f32)) as u32;
    /// assert_eq!(time, 1_000_000);
    /// ```
    pub const fn value(&self) -> f32 {
        match self {
            Self::Value10 => 1.0,
        }
    }

    /// Gets the integer time value multiplier for [AccessTimeValue].
    ///
    /// The integer is the float value multiplied by 10.
    ///
    /// ## Example
    ///
    /// ```rust
    /// # use sdmmc_core::register::csd::v2::taac::{AccessTimeUnit, AccessTimeValue};
    /// // To get the actual time value:
    /// let time = (AccessTimeValue::Value10.value_int() * AccessTimeUnit::Ms1.ns()) / 10;
    /// assert_eq!(time, 1_000_000);
    /// ```
    pub const fn value_int(&self) -> u32 {
        match self {
            Self::Value10 => 10,
        }
    }

    /// Attempts to convert a byte array into a [AccessTimeValue].
    pub const fn try_from_inner(val: u8) -> Result<Self> {
        Self::from_raw(val)
    }

    /// Converts a [AccessTimeValue] into an byte array.
    pub const fn into_inner(self) -> u8 {
        self.into_raw()
    }
}