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) {
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();
assert!(i != 0);
poll_fn(move |cx| {
Dir::waker(i).register(cx.waker());
if Dir::is_enabled(T::regs(), i) {
if Dir::is_enabled(T::regs(), i) == state {
Poll::Ready(())
} else {
Poll::Pending
@ -484,6 +491,11 @@ impl<'d, T: Instance, Dir: EndpointDir> driver::Endpoint for Endpoint<'d, T, Dir
})
.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> {