From a5d537973db9359804e82a506057f3dd6d53fab9 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 25 Jul 2022 19:59:08 +0200 Subject: [PATCH] cardem: reset the uC in case of USB disconnect This fixes the firmware USB interface somehow getting stuck after a USB disconnect/reconnect without power cycle. Right now there are a number of things we only execute the first time we reach USBD_STATE_CONFIGURED, but not at any subsequent such event. It's also rather clear that this doesn't really show in simtrace2 as it is bus-powered. And it doesn't show on OWHW as we don't have any USB unplug situations of the USB between the on-board traces of USB host and SAM3S. So this really only is relevant to QMOD. A cheap and dirty work-around is to simply reset the entire uC every time a USB unplug happens. Change-Id: I6678bb2192c1419ed388b46c4ae7aa1ce18dc7ee Related: OS#5578 --- firmware/apps/cardem/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/firmware/apps/cardem/main.c b/firmware/apps/cardem/main.c index 347ccbda..4c337c86 100644 --- a/firmware/apps/cardem/main.c +++ b/firmware/apps/cardem/main.c @@ -206,6 +206,10 @@ extern int main(void) if (isUsbConnected) { isUsbConnected = 0; } + /* HACK: we don't really deal with USB disconnect yet, + * so let's just reset the entire uC if this happens */ + TRACE_INFO("Resetting uC on USB disconnect\n\r"); + NVIC_SystemReset(); } else if (isUsbConnected == 0) { TRACE_INFO("USB is now configured\n\r");