From 34668bae5c646d03e744efddc86052dbebe0ec40 Mon Sep 17 00:00:00 2001
From: Alex Moon <alex@moonspot.org>
Date: Tue, 16 Apr 2024 12:14:22 -0400
Subject: [PATCH] Add `wait_disabled` method to `embassy_nrf::usb::Endpoint`

---
 embassy-nrf/src/usb/mod.rs | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/embassy-nrf/src/usb/mod.rs b/embassy-nrf/src/usb/mod.rs
index 09cf87e97..8cbb1a350 100644
--- a/embassy-nrf/src/usb/mod.rs
+++ b/embassy-nrf/src/usb/mod.rs
@@ -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> {