aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDinu Blanovschi <[email protected]>2024-10-22 16:56:05 +0200
committerDinu Blanovschi <[email protected]>2024-10-22 16:56:05 +0200
commitc79791552563746e9f62e3d2647d787d3947c249 (patch)
tree2d5d7b11d3b2f5e33e9c6e2dd3322df8fcd1f12d
parente9f2e63796989c4e248418e341a442e0eff5946d (diff)
fix: review comments
-rw-r--r--embassy-nrf/src/lib.rs19
-rw-r--r--embassy-rp/src/lib.rs19
-rw-r--r--embassy-stm32/src/lib.rs26
3 files changed, 31 insertions, 33 deletions
diff --git a/embassy-nrf/src/lib.rs b/embassy-nrf/src/lib.rs
index 13623dd1c..bd53664a2 100644
--- a/embassy-nrf/src/lib.rs
+++ b/embassy-nrf/src/lib.rs
@@ -177,22 +177,31 @@ mod chip;
177// developer note: this macro can't be in `embassy-hal-internal` due to the use of `$crate`. 177// developer note: this macro can't be in `embassy-hal-internal` due to the use of `$crate`.
178#[macro_export] 178#[macro_export]
179macro_rules! bind_interrupts { 179macro_rules! bind_interrupts {
180 ($vis:vis struct $name:ident { $($irq:ident => $($handler:ty),*;)* }) => { 180 ($vis:vis struct $name:ident {
181 $(
182 $(#[cfg($cond_irq:meta)])?
183 $irq:ident => $(
184 $(#[cfg($cond_handler:meta)])?
185 $handler:ty
186 ),*;
187 )*
188 }) => {
181 #[derive(Copy, Clone)] 189 #[derive(Copy, Clone)]
182 $vis struct $name; 190 $vis struct $name;
183 191
184 $( 192 $(
185 #[allow(non_snake_case)] 193 #[allow(non_snake_case)]
186 #[no_mangle] 194 #[no_mangle]
195 $(#[cfg($cond_irq)])?
187 unsafe extern "C" fn $irq() { 196 unsafe extern "C" fn $irq() {
188 $( 197 $(
198 $(#[cfg($cond_handler)])?
189 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt(); 199 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt();
200
201 $(#[cfg($cond_handler)])?
202 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
190 )* 203 )*
191 } 204 }
192
193 $(
194 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
195 )*
196 )* 205 )*
197 }; 206 };
198 } 207 }
diff --git a/embassy-rp/src/lib.rs b/embassy-rp/src/lib.rs
index d402cf793..a72cebdd8 100644
--- a/embassy-rp/src/lib.rs
+++ b/embassy-rp/src/lib.rs
@@ -165,22 +165,31 @@ embassy_hal_internal::interrupt_mod!(
165// developer note: this macro can't be in `embassy-hal-internal` due to the use of `$crate`. 165// developer note: this macro can't be in `embassy-hal-internal` due to the use of `$crate`.
166#[macro_export] 166#[macro_export]
167macro_rules! bind_interrupts { 167macro_rules! bind_interrupts {
168 ($vis:vis struct $name:ident { $($irq:ident => $($handler:ty),*;)* }) => { 168 ($vis:vis struct $name:ident {
169 $(
170 $(#[cfg($cond_irq:meta)])?
171 $irq:ident => $(
172 $(#[cfg($cond_handler:meta)])?
173 $handler:ty
174 ),*;
175 )*
176 }) => {
169 #[derive(Copy, Clone)] 177 #[derive(Copy, Clone)]
170 $vis struct $name; 178 $vis struct $name;
171 179
172 $( 180 $(
173 #[allow(non_snake_case)] 181 #[allow(non_snake_case)]
174 #[no_mangle] 182 #[no_mangle]
183 $(#[cfg($cond_irq)])?
175 unsafe extern "C" fn $irq() { 184 unsafe extern "C" fn $irq() {
176 $( 185 $(
186 $(#[cfg($cond_handler)])?
177 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt(); 187 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt();
188
189 $(#[cfg($cond_handler)])?
190 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
178 )* 191 )*
179 } 192 }
180
181 $(
182 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
183 )*
184 )* 193 )*
185 }; 194 };
186} 195}
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs
index 4154a7275..65f02d62a 100644
--- a/embassy-stm32/src/lib.rs
+++ b/embassy-stm32/src/lib.rs
@@ -185,33 +185,13 @@ macro_rules! bind_interrupts {
185 $( 185 $(
186 $(#[cfg($cond_handler)])? 186 $(#[cfg($cond_handler)])?
187 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt(); 187 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt();
188
189 $(#[cfg($cond_handler)])?
190 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
188 )* 191 )*
189 } 192 }
190
191 $crate::bind_interrupts!(@__generate_impls $name $(#[cfg($cond_irq)])? $irq => $(
192 $(#[cfg($cond_handler)])?
193 $handler;
194 )*);
195 )* 193 )*
196 }; 194 };
197
198 (@__generate_single_impl $name:ident $(#[cfg($cond_irq:meta)])? $irq:ident => $(#[cfg($cond_handler:meta)])? $handler:ty;) => {
199 #[cfg(all(
200 $($cond_irq,)?
201 $($cond_handler,)?
202 ))]
203 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
204 };
205
206 (@__generate_impls $name:ident $(#[cfg($cond_irq:meta)])? $irq:ident => $(#[cfg($cond_handler:meta)])? $handler:ty;) => {
207 $crate::bind_interrupts!(@__generate_single_impl $name $(#[cfg($cond_irq)])? $irq => $(#[cfg($cond_handler)])? $handler;);
208 };
209
210 (@__generate_impls $name:ident $(#[cfg($cond_irq:meta)])? $irq:ident => $(#[cfg($cond_handler:meta)])? $handler:ty; $($(#[cfg($cond_rest:meta)])? $handler_rest:ty;)+) => {
211 $crate::bind_interrupts!(@__generate_single_impl $name $(#[cfg($cond_irq)])? $irq => $(#[cfg($cond_handler)])? $handler;);
212
213 $crate::bind_interrupts!(@__generate_impls $name $(#[cfg($cond_irq)])? $irq => $($(#[cfg($cond_rest)])? $handler_rest;)+);
214 };
215} 195}
216 196
217// Reexports 197// Reexports