diff --git a/source/board/microbitv2/kl27z/power.c b/source/board/microbitv2/kl27z/power.c index 91b4dd20f8..fe67a21c72 100644 --- a/source/board/microbitv2/kl27z/power.c +++ b/source/board/microbitv2/kl27z/power.c @@ -106,7 +106,7 @@ void PORTCD_IRQHandler(void) USBD_Reset(); usbd_reset_core(); usb_pc_connected = false; - usb_state = USB_DISCONNECTED; + usb_state = USB_DISCONNECTING; } else { // Cable inserted diff --git a/source/board/microbitv2/nrf52820/power.c b/source/board/microbitv2/nrf52820/power.c index 1f4e6d31de..52f5dde1f9 100644 --- a/source/board/microbitv2/nrf52820/power.c +++ b/source/board/microbitv2/nrf52820/power.c @@ -247,7 +247,7 @@ void GPIOTE_IRQHandler(void) USBD_Reset(); usbd_reset_core(); usb_pc_connected = false; - usb_state = USB_DISCONNECTED; + usb_state = USB_DISCONNECTING; } else { // Cable inserted wake_from_usb = 1; @@ -272,7 +272,7 @@ void POWER_CLOCK_IRQHandler(void) USBD_Reset(); usbd_reset_core(); usb_pc_connected = false; - usb_state = USB_DISCONNECTED; + usb_state = USB_DISCONNECTING; } } #endif // POWER_IRQ_USBDETECTED diff --git a/source/daplink/interface/main_interface.c b/source/daplink/interface/main_interface.c index 76bd7240f3..0240455474 100644 --- a/source/daplink/interface/main_interface.c +++ b/source/daplink/interface/main_interface.c @@ -401,9 +401,13 @@ void main_task(void * arg) switch (usb_state) { case USB_DISCONNECTING: usb_state = USB_DISCONNECTED; - // Disable board power before USB is disconnected. + // Disable target power as USB was disconnected. gpio_set_board_power(false); - usbd_connect(0); + // Clear the DAP queue buffers +#if (USBD_HID_ENABLE) + usbd_bulk_init(); + usbd_hid_init(); +#endif break; case USB_CONNECTING: @@ -435,12 +439,16 @@ void main_task(void * arg) break; case USB_CONNECTED: + if (!usbd_configured()) { + usb_state = USB_DISCONNECTING; + } + break; + case USB_DISCONNECTED: if (usbd_configured()) { usb_state = USB_CONNECTED; } else { - usb_state = USB_DISCONNECTED; usb_state_count = USB_CONNECT_DELAY; usb_no_config_count = USB_CONFIGURE_TIMEOUT; }