diff options
| author | Dinu Blanovschi <[email protected]> | 2024-10-22 16:56:05 +0200 |
|---|---|---|
| committer | Dinu Blanovschi <[email protected]> | 2024-10-22 16:56:05 +0200 |
| commit | c79791552563746e9f62e3d2647d787d3947c249 (patch) | |
| tree | 2d5d7b11d3b2f5e33e9c6e2dd3322df8fcd1f12d | |
| parent | e9f2e63796989c4e248418e341a442e0eff5946d (diff) | |
fix: review comments
| -rw-r--r-- | embassy-nrf/src/lib.rs | 19 | ||||
| -rw-r--r-- | embassy-rp/src/lib.rs | 19 | ||||
| -rw-r--r-- | embassy-stm32/src/lib.rs | 26 |
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] |
| 179 | macro_rules! bind_interrupts { | 179 | macro_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] |
| 167 | macro_rules! bind_interrupts { | 167 | macro_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 |
