timeout_trait/
utils.rs

1use super::{fugit::KilohertzU32, prelude::*};
2use core::{cell::Cell, marker::PhantomData};
3
4/// Can be used as a static holder
5pub struct FrequencyHolder<T> {
6    frequency: Cell<KilohertzU32>,
7    _t: PhantomData<T>,
8}
9
10unsafe impl<T: TickInstant> Sync for FrequencyHolder<T> {}
11
12impl<T> FrequencyHolder<T>
13where
14    T: TickInstant,
15{
16    pub const fn new(frequency: KilohertzU32) -> Self {
17        Self {
18            frequency: Cell::new(frequency),
19            _t: PhantomData,
20        }
21    }
22
23    pub fn set(&self, frequency: KilohertzU32) {
24        critical_section::with(|_| {
25            self.frequency.set(frequency);
26        })
27    }
28
29    pub fn get(&self) -> KilohertzU32 {
30        self.frequency.get()
31    }
32}