diff --git a/src/rcc/rec.rs b/src/rcc/rec.rs
index 041966d..2bd7971 100644
--- a/src/rcc/rec.rs
+++ b/src/rcc/rec.rs
@@ -100,6 +100,21 @@ pub enum LowPowerMode {
Enabled,
}
+/// A Token to represent a peripheral has been enabled
+pub struct Token
{
+ ph: PhantomData
,
+}
+
+/// A trait to represent that a peripheral can be turned into a token
+pub trait RecTokenizer: ResetEnable + Sized {
+ /// Turns the ResetEnable into a token
+ fn tokenize(self) -> Token {
+ self.enable().reset();
+
+ Token { ph: PhantomData {} }
+ }
+}
+
impl Rcc {
/// Returns all the peripherals resets / enables / kernel clocks.
///
@@ -459,6 +474,14 @@ macro_rules! variant_return_type {
};
}
+macro_rules! tokenable {
+ ($($TK:ty),*) => {
+ $(
+ impl RecTokenizer for $TK {}
+ )*
+ };
+}
+
// Enumerate all peripherals and optional clock multiplexers
//
// Peripherals are grouped by bus for convenience. Each bus is specified like:
@@ -646,3 +669,5 @@ peripheral_reset_and_enable_control! {
I3c2 [kernel clk: I3c2(Variant) I3C ccipr4 "I3C2"]
];
}
+
+tokenable!(Fdcan);