use crate::result::Result;
use crate::{RangeU8, lib_bitfield};
use super::{ExtCsd, ExtCsdIndex};
pub type ErasedMemoryRange = RangeU8<0, 1>;
lib_bitfield! {
ErasedMemoryContent: u8,
mask: 0b1,
default: 0,
{
erased_memory_range: ErasedMemoryRange, 7, 0;
}
}
impl ExtCsd {
pub const fn erased_mem_cont(&self) -> Result<ErasedMemoryContent> {
ErasedMemoryContent::try_from_inner(self.0[ExtCsdIndex::ErasedMemCont.into_inner()])
}
pub(crate) fn set_erased_mem_cont(&mut self, val: ErasedMemoryContent) {
self.0[ExtCsdIndex::ErasedMemCont.into_inner()] = val.into_inner();
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_erased_mem_cont() {
let mut ext_csd = ExtCsd::new();
assert_eq!(ext_csd.erased_mem_cont(), Ok(ErasedMemoryContent::new()));
(0..=u8::MAX).for_each(|raw_mem| {
ext_csd.set_erased_mem_cont(ErasedMemoryContent(raw_mem));
match ErasedMemoryContent::try_from_inner(raw_mem) {
Ok(mem) => assert_eq!(ext_csd.erased_mem_cont(), Ok(mem)),
Err(err) => assert_eq!(ext_csd.erased_mem_cont(), Err(err)),
}
});
}
}