use core::ops::Deref;
use super::*;
use crate::efuse::ChipRevision;
impl RNG<'_> {
#[inline(always)]
#[instability::unstable]
pub const fn regs<'a>() -> &'a RngRegisterBlock {
&RngRegisterBlock
}
#[inline(always)]
#[instability::unstable]
pub fn register_block(&self) -> &RngRegisterBlock {
&RngRegisterBlock
}
}
#[instability::unstable]
pub struct RngRegisterBlock;
impl Deref for RngRegisterBlock {
type Target = pac::rng::RegisterBlock;
fn deref(&self) -> &Self::Target {
unsafe { &*pac::RNG::ptr() }
}
}
impl RngRegisterBlock {
#[instability::unstable]
pub fn data(&self) -> &pac::rng::DATA {
let ptr = unsafe { pac::RNG::steal().data() as *const pac::rng::DATA };
if crate::soc::chip_revision_above(ChipRevision::from_combined(102)) {
unsafe { &*ptr.add(1) }
} else {
unsafe { &*ptr }
}
}
}