diff --git a/src/riot-rs-embassy/src/lib.rs b/src/riot-rs-embassy/src/lib.rs index 1754e39e5..eaf4c18d8 100644 --- a/src/riot-rs-embassy/src/lib.rs +++ b/src/riot-rs-embassy/src/lib.rs @@ -27,7 +27,6 @@ pub mod arch; pub use linkme::{self, distributed_slice}; pub use static_cell::make_static; -use crate::define_peripherals::DefinePeripheralsError; pub use embassy_executor::Spawner; #[cfg(feature = "threading")] @@ -67,13 +66,17 @@ pub static EMBASSY_TASKS: [Task] = [..]; // // usb common start #[cfg(feature = "usb")] -use arch::usb::UsbDriver; +pub use arch::usb::UsbDriver; #[cfg(feature = "usb")] #[embassy_executor::task] async fn usb_task(mut device: embassy_usb::UsbDevice<'static, UsbDriver>) -> ! { device.run().await } + +#[cfg(feature = "usb")] +#[distributed_slice] +pub static USB_BUILDER_HOOKS: [&delegate::Delegate] = [..]; // usb common end // @@ -233,6 +236,11 @@ async fn init_task(mut peripherals: arch::OptionalPeripherals) { builder }; + #[cfg(feature = "usb")] + for hook in USB_BUILDER_HOOKS { + hook.lend(&mut usb_builder).await; + } + // Our MAC addr. #[cfg(feature = "usb_ethernet")] let our_mac_addr = [0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC]; diff --git a/src/riot-rs-rt/linkme.x b/src/riot-rs-rt/linkme.x index f97a8fcef..a3b77f675 100644 --- a/src/riot-rs-rt/linkme.x +++ b/src/riot-rs-rt/linkme.x @@ -3,6 +3,7 @@ SECTIONS { linkm2_INIT_FUNCS : { *(linkm2_INIT_FUNCS) } > FLASH linkme_EMBASSY_TASKS : { *(linkme_EMBASSY_TASKS) } > FLASH linkm2_EMBASSY_TASKS : { *(linkm2_EMBASSY_TASKS) } > FLASH + linkm2_USB_BUILDER_HOOKS : { *(linkm2_USB_BUILDER_HOOKS) } > FLASH linkm2_THREAD_FNS : { *(linkm2_THREAD_FNS) } > FLASH }