From 9aa4c37adc2066b516e763c9770de96936692717 Mon Sep 17 00:00:00 2001 From: Jake O'Shaughnessy Date: Sun, 25 May 2025 14:53:50 -0500 Subject: [PATCH 1/2] Adding `Token`s so that peripherals that share bits in the RCC can know that they have been enabled without taking ownership of their respective rec struct. --- src/rcc/rec.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/rcc/rec.rs b/src/rcc/rec.rs index 041966d..e5bf52c 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); From 87183ef6a664a94f7e22f0c6c0e2400722217c5c Mon Sep 17 00:00:00 2001 From: Jake O'Shaughnessy Date: Tue, 27 May 2025 16:59:26 -0500 Subject: [PATCH 2/2] Ran cargo fmt --- src/rcc/rec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rcc/rec.rs b/src/rcc/rec.rs index e5bf52c..2bd7971 100644 --- a/src/rcc/rec.rs +++ b/src/rcc/rec.rs @@ -111,7 +111,7 @@ pub trait RecTokenizer: ResetEnable + Sized { fn tokenize(self) -> Token { self.enable().reset(); - Token {ph: PhantomData {} } + Token { ph: PhantomData {} } } }