diff --git a/src/riot-rs-embassy/Cargo.toml b/src/riot-rs-embassy/Cargo.toml index 40dad19f0..e6bb23e8e 100644 --- a/src/riot-rs-embassy/Cargo.toml +++ b/src/riot-rs-embassy/Cargo.toml @@ -59,3 +59,4 @@ net = [ "dep:embassy-net" ] usb_ethernet = [ "usb", "net" ] override_network_config = [] +override_usb_config = [] diff --git a/src/riot-rs-embassy/src/lib.rs b/src/riot-rs-embassy/src/lib.rs index b2e6cee7d..3e6a4369b 100644 --- a/src/riot-rs-embassy/src/lib.rs +++ b/src/riot-rs-embassy/src/lib.rs @@ -138,21 +138,31 @@ async fn net_task(stack: &'static Stack>) -> ! { // #[cfg(feature = "usb")] -const fn usb_default_config() -> embassy_usb::Config<'static> { - // Create embassy-usb Config - let mut config = embassy_usb::Config::new(0xc0de, 0xcafe); - config.manufacturer = Some("Embassy"); - config.product = Some("USB-Ethernet example"); - config.serial_number = Some("12345678"); - config.max_power = 100; - config.max_packet_size_0 = 64; - - // Required for Windows support. - config.composite_with_iads = true; - config.device_class = 0xEF; - config.device_sub_class = 0x02; - config.device_protocol = 0x01; - config +fn usb_config() -> embassy_usb::Config<'static> { + #[cfg(not(feature = "override_usb_config"))] + { + // Create embassy-usb Config + let mut config = embassy_usb::Config::new(0xc0de, 0xcafe); + config.manufacturer = Some("Embassy"); + config.product = Some("USB-Ethernet example"); + config.serial_number = Some("12345678"); + config.max_power = 100; + config.max_packet_size_0 = 64; + + // Required for Windows support. + config.composite_with_iads = true; + config.device_class = 0xEF; + config.device_sub_class = 0x02; + config.device_protocol = 0x01; + config + } + #[cfg(feature = "override_usb_config")] + { + extern "Rust" { + fn riot_rs_usb_config() -> embassy_usb::Config<'static>; + } + unsafe { riot_rs_usb_config() } + } } #[cfg(feature = "net")] @@ -203,7 +213,7 @@ async fn init_task(peripherals: arch::Peripherals) { #[cfg(feature = "usb")] let mut usb_builder = { - let usb_config = usb_default_config(); + let usb_config = usb_config(); #[cfg(context = "nrf52")] let usb_driver = nrf52::usb::driver(peripherals.USBD);