use super::Error;
use crate::prelude::*;
use core::fmt;
use super::{
dfs, CPUSource, ClockControlConfig, FastRTCSource, SlowRTCSource, CLOCK_CONTROL,
CLOCK_CONTROL_MUTEX,
};
impl<'a> super::ClockControlConfig {
pub fn cpu_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().cpu_frequency }
}
pub fn apb_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().apb_frequency }
}
pub fn cpu_frequency_default(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().cpu_frequency_default }
}
pub fn cpu_frequency_locked(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().cpu_frequency_locked }
}
pub fn cpu_frequency_apb_locked(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().cpu_frequency_apb_locked }
}
pub fn apb_frequency_apb_locked(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().apb_frequency_apb_locked }
}
pub fn is_ref_clock_stable(&self) -> bool {
unsafe { CLOCK_CONTROL.as_ref().unwrap().ref_clock_stable }
}
pub fn ref_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().ref_frequency }
}
pub fn slow_rtc_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().slow_rtc_frequency }
}
pub fn fast_rtc_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().fast_rtc_frequency }
}
pub fn apll_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().apll_frequency }
}
pub fn pll_d2_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().pll_d2_frequency }
}
pub fn xtal_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().xtal_frequency }
}
pub fn xtal32k_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().xtal32k_frequency }
}
pub fn pll_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().pll_frequency }
}
pub fn rtc8m_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().rtc8m_frequency }
}
pub fn rtc8md256_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().rtc8md256_frequency }
}
pub fn rtc_frequency(&self) -> Hertz {
unsafe { CLOCK_CONTROL.as_ref().unwrap().rtc_frequency }
}
pub fn cpu_source(&self) -> CPUSource {
unsafe { CLOCK_CONTROL.as_ref().unwrap().cpu_source }
}
pub fn slow_rtc_source(&self) -> SlowRTCSource {
unsafe { CLOCK_CONTROL.as_ref().unwrap().slow_rtc_source }
}
pub fn fast_rtc_source(&self) -> FastRTCSource {
unsafe { CLOCK_CONTROL.as_ref().unwrap().fast_rtc_source }
}
pub fn lock_cpu_frequency(&self) -> dfs::LockCPU {
unsafe { CLOCK_CONTROL.as_mut().unwrap().lock_cpu_frequency() }
}
pub fn lock_apb_frequency(&self) -> dfs::LockAPB {
unsafe { CLOCK_CONTROL.as_mut().unwrap().lock_apb_frequency() }
}
pub fn lock_awake(&self) -> dfs::LockAwake {
unsafe { CLOCK_CONTROL.as_mut().unwrap().lock_awake() }
}
pub fn lock_plld2(&self) -> dfs::LockPllD2 {
unsafe { CLOCK_CONTROL.as_mut().unwrap().lock_plld2() }
}
pub fn add_callback<F>(&self, f: &'static F) -> Result<(), Error>
where
F: Fn(super::CPUSource, Hertz, Hertz, super::CPUSource, Hertz, Hertz),
{
unsafe { CLOCK_CONTROL.as_mut().unwrap().add_callback(f) }
}
pub fn get_lock_count(&self) -> dfs::Locks {
unsafe { CLOCK_CONTROL.as_mut().unwrap().get_lock_count() }
}
pub unsafe fn park_core(&mut self, core: crate::Core) {
(&CLOCK_CONTROL_MUTEX).lock(|_| {
CLOCK_CONTROL.as_mut().unwrap().park_core(core);
})
}
pub fn unpark_core(&mut self, core: crate::Core) {
(&CLOCK_CONTROL_MUTEX)
.lock(|_| unsafe { CLOCK_CONTROL.as_mut().unwrap().unpark_core(core) })
}
pub fn start_app_core(&mut self, entry: fn() -> !) -> Result<(), Error> {
(&CLOCK_CONTROL_MUTEX)
.lock(|_| unsafe { CLOCK_CONTROL.as_mut().unwrap().start_app_core(entry) })
}
pub fn rtc_tick_count(&self) -> TicksU64 {
unsafe { CLOCK_CONTROL.as_mut().unwrap().rtc_tick_count() }
}
pub fn rtc_nanoseconds(&self) -> NanoSecondsU64 {
unsafe { CLOCK_CONTROL.as_mut().unwrap().rtc_nanoseconds() }
}
}
impl fmt::Debug for ClockControlConfig {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
unsafe { CLOCK_CONTROL.as_ref().unwrap().fmt(f) }
}
}