aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-10-22 15:18:35 +0000
committerGitHub <[email protected]>2024-10-22 15:18:35 +0000
commit8eb80c6816a1f6ea7814acd4f48f07e79891f804 (patch)
tree9489bb1aa5e2fada609eb9d19704baf87b907c5b
parentf7d372f33f312d75e6c8f974d0a92069951e2bf4 (diff)
parentc79791552563746e9f62e3d2647d787d3947c249 (diff)
Merge pull request #3444 from dnbln/main
feat: allow `bind_interrupts!` to accept conditional compilation attrs
-rw-r--r--embassy-nrf/src/lib.rs19
-rw-r--r--embassy-rp/src/lib.rs19
-rw-r--r--embassy-stm32/src/lib.rs19
3 files changed, 42 insertions, 15 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 f56cfba27..51f6ed7f8 100644
--- a/embassy-rp/src/lib.rs
+++ b/embassy-rp/src/lib.rs
@@ -166,22 +166,31 @@ embassy_hal_internal::interrupt_mod!(
166// developer note: this macro can't be in `embassy-hal-internal` due to the use of `$crate`. 166// developer note: this macro can't be in `embassy-hal-internal` due to the use of `$crate`.
167#[macro_export] 167#[macro_export]
168macro_rules! bind_interrupts { 168macro_rules! bind_interrupts {
169 ($vis:vis struct $name:ident { $($irq:ident => $($handler:ty),*;)* }) => { 169 ($vis:vis struct $name:ident {
170 $(
171 $(#[cfg($cond_irq:meta)])?
172 $irq:ident => $(
173 $(#[cfg($cond_handler:meta)])?
174 $handler:ty
175 ),*;
176 )*
177 }) => {
170 #[derive(Copy, Clone)] 178 #[derive(Copy, Clone)]
171 $vis struct $name; 179 $vis struct $name;
172 180
173 $( 181 $(
174 #[allow(non_snake_case)] 182 #[allow(non_snake_case)]
175 #[no_mangle] 183 #[no_mangle]
184 $(#[cfg($cond_irq)])?
176 unsafe extern "C" fn $irq() { 185 unsafe extern "C" fn $irq() {
177 $( 186 $(
187 $(#[cfg($cond_handler)])?
178 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt(); 188 <$handler as $crate::interrupt::typelevel::Handler<$crate::interrupt::typelevel::$irq>>::on_interrupt();
189
190 $(#[cfg($cond_handler)])?
191 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
179 )* 192 )*
180 } 193 }
181
182 $(
183 unsafe impl $crate::interrupt::typelevel::Binding<$crate::interrupt::typelevel::$irq, $handler> for $name {}
184 )*
185 )* 194 )*
186 }; 195 };
187} 196}
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs
index 5f103e652..1e6185bc1 100644
--- a/embassy-stm32/src/lib.rs
+++ b/embassy-stm32/src/lib.rs
@@ -165,22 +165,31 @@ pub use crate::_generated::interrupt;
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}