From f415d7163b2512a3013321beddbdd722183ad932 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 3 Mar 2017 01:51:43 +0100 Subject: [PATCH] Call USBD_Disconnect before software-triggered CPU reset This makes sure that we'll re-enumerate on the USB, as a CPU reset apparently doesn't automatically release the pull-up and notify the hub that we were gone? --- firmware/apps/cardem/main.c | 1 + firmware/apps/dfu/main.c | 1 + firmware/apps/triple_play/main.c | 1 + firmware/libboard/qmod/source/board_qmod.c | 1 + 4 files changed, 4 insertions(+) diff --git a/firmware/apps/cardem/main.c b/firmware/apps/cardem/main.c index f1cbbcc3..8b6be49b 100644 --- a/firmware/apps/cardem/main.c +++ b/firmware/apps/cardem/main.c @@ -154,6 +154,7 @@ extern int main(void) if (i >= MAX_USB_ITER * 3) { TRACE_ERROR("Resetting board (USB could " "not be configured)\n\r"); + USBD_Disconnect(); NVIC_SystemReset(); } #endif diff --git a/firmware/apps/dfu/main.c b/firmware/apps/dfu/main.c index 770076e8..dd13fcee 100644 --- a/firmware/apps/dfu/main.c +++ b/firmware/apps/dfu/main.c @@ -161,6 +161,7 @@ extern int main(void) if (i >= MAX_USB_ITER * 3) { TRACE_ERROR("Resetting board (USB could " "not be configured)\n\r"); + USBD_Disconnect(); NVIC_SystemReset(); } #endif diff --git a/firmware/apps/triple_play/main.c b/firmware/apps/triple_play/main.c index a395ba6d..5ff32220 100644 --- a/firmware/apps/triple_play/main.c +++ b/firmware/apps/triple_play/main.c @@ -154,6 +154,7 @@ extern int main(void) if (i >= MAX_USB_ITER * 3) { TRACE_ERROR("Resetting board (USB could " "not be configured)\r\n"); + USBD_Disconnect(); NVIC_SystemReset(); } #endif diff --git a/firmware/libboard/qmod/source/board_qmod.c b/firmware/libboard/qmod/source/board_qmod.c index a5392bb6..e05a4542 100644 --- a/firmware/libboard/qmod/source/board_qmod.c +++ b/firmware/libboard/qmod/source/board_qmod.c @@ -112,6 +112,7 @@ void board_exec_dbg_cmd(int ch) break; case 'R': printf("Asking NVIC to reset us\n\r"); + USBD_Disconnect(); NVIC_SystemReset(); break; case 'O':