Add wait_disabled method to embassy_nrf::usb::Endpoint

This commit is contained in:
Alex Moon 2024-04-16 12:14:22 -04:00
parent bd13b5c060
commit 34668bae5c

View file

@ -471,12 +471,19 @@ impl<'d, T: Instance, Dir: EndpointDir> driver::Endpoint for Endpoint<'d, T, Dir
} }
async fn wait_enabled(&mut self) { async fn wait_enabled(&mut self) {
self.wait_enabled_state(true).await
}
}
#[allow(private_bounds)]
impl<'d, T: Instance, Dir: EndpointDir> Endpoint<'d, T, Dir> {
async fn wait_enabled_state(&mut self, state: bool) {
let i = self.info.addr.index(); let i = self.info.addr.index();
assert!(i != 0); assert!(i != 0);
poll_fn(move |cx| { poll_fn(move |cx| {
Dir::waker(i).register(cx.waker()); Dir::waker(i).register(cx.waker());
if Dir::is_enabled(T::regs(), i) { if Dir::is_enabled(T::regs(), i) == state {
Poll::Ready(()) Poll::Ready(())
} else { } else {
Poll::Pending Poll::Pending
@ -484,6 +491,11 @@ impl<'d, T: Instance, Dir: EndpointDir> driver::Endpoint for Endpoint<'d, T, Dir
}) })
.await .await
} }
/// Wait for the endpoint to be disabled
pub async fn wait_disabled(&mut self) {
self.wait_enabled_state(false).await
}
} }
impl<'d, T: Instance, Dir> Endpoint<'d, T, Dir> { impl<'d, T: Instance, Dir> Endpoint<'d, T, Dir> {