From 2915e858baac442e71bac4b565746401deed22bd Mon Sep 17 00:00:00 2001 From: alexmoon Date: Tue, 12 Apr 2022 17:51:50 -0400 Subject: [PATCH] Make Driver::disable async and fix comment --- embassy-nrf/src/usb.rs | 9 ++++++--- embassy-usb/src/driver.rs | 7 ++++--- embassy-usb/src/lib.rs | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/embassy-nrf/src/usb.rs b/embassy-nrf/src/usb.rs index 7f99b9a1..b67201e6 100644 --- a/embassy-nrf/src/usb.rs +++ b/embassy-nrf/src/usb.rs @@ -208,6 +208,7 @@ pub struct Bus<'d, T: Instance> { impl<'d, T: Instance> driver::Bus for Bus<'d, T> { type EnableFuture<'a> = impl Future + 'a where Self: 'a; + type DisableFuture<'a> = impl Future + 'a where Self: 'a; type PollFuture<'a> = impl Future + 'a where Self: 'a; type RemoteWakeupFuture<'a> = impl Future> + 'a where Self: 'a; @@ -248,9 +249,11 @@ impl<'d, T: Instance> driver::Bus for Bus<'d, T> { } } - fn disable(&mut self) { - let regs = T::regs(); - regs.enable.write(|x| x.enable().disabled()); + fn disable(&mut self) -> Self::DisableFuture<'_> { + async move { + let regs = T::regs(); + regs.enable.write(|x| x.enable().disabled()); + } } fn poll<'a>(&'a mut self) -> Self::PollFuture<'a> { diff --git a/embassy-usb/src/driver.rs b/embassy-usb/src/driver.rs index 99610dee..cedd349f 100644 --- a/embassy-usb/src/driver.rs +++ b/embassy-usb/src/driver.rs @@ -57,6 +57,9 @@ pub trait Driver<'a> { pub trait Bus { type EnableFuture<'a>: Future + 'a + where + Self: 'a; + type DisableFuture<'a>: Future + 'a where Self: 'a; type PollFuture<'a>: Future + 'a @@ -71,7 +74,7 @@ pub trait Bus { fn enable(&mut self) -> Self::EnableFuture<'_>; /// Disables and powers down the USB peripheral. - fn disable(&mut self); + fn disable(&mut self) -> Self::DisableFuture<'_>; fn poll<'a>(&'a mut self) -> Self::PollFuture<'a>; @@ -103,8 +106,6 @@ pub trait Bus { /// Initiates a remote wakeup of the host by the device. /// - /// The default implementation just returns `Unsupported`. - /// /// # Errors /// /// * [`Unsupported`](crate::UsbError::Unsupported) - This UsbBus implementation doesn't support diff --git a/embassy-usb/src/lib.rs b/embassy-usb/src/lib.rs index 210908c2..11561430 100644 --- a/embassy-usb/src/lib.rs +++ b/embassy-usb/src/lib.rs @@ -198,7 +198,7 @@ impl<'d, D: Driver<'d>, M: RawMutex> UsbDevice<'d, D, M> { DeviceCommand::Enable => warn!("usb: Enable command received while enabled."), DeviceCommand::Disable => { trace!("usb: disable"); - self.bus.disable(); + self.bus.disable().await; self.device_state = UsbDeviceState::Disabled; if let Some(h) = &self.handler { h.disabled();