From ff8ce2947428ef08127a9d9e5c12d2a173a7293d Mon Sep 17 00:00:00 2001 From: James Devine Date: Wed, 3 Mar 2021 19:24:36 +0000 Subject: [PATCH] add software reset button capability Some boards might not have a reset button attached to the reset signal. This commit introduces the SOFTWARE_RESET_BUTTON macro, which allows any pin to be used as a reset button to jump between bootloader and app --- lib/sdk11/components/libraries/bootloader_dfu/bootloader.c | 7 +++++++ src/boards/boards.c | 3 +++ 2 files changed, 10 insertions(+) diff --git a/lib/sdk11/components/libraries/bootloader_dfu/bootloader.c b/lib/sdk11/components/libraries/bootloader_dfu/bootloader.c index 7c9669e6..570c1976 100644 --- a/lib/sdk11/components/libraries/bootloader_dfu/bootloader.c +++ b/lib/sdk11/components/libraries/bootloader_dfu/bootloader.c @@ -115,6 +115,13 @@ static void wait_for_events(void) // uint32_t err_code = sd_app_evt_wait(); // APP_ERROR_CHECK(err_code); +#ifdef SOFTWARE_RESET_BUTTON + if (button_pressed(SOFTWARE_RESET_BUTTON)) { + while(button_pressed(SOFTWARE_RESET_BUTTON)) { NRFX_DELAY_MS(10); } + NVIC_SystemReset(); + } +#endif + // Feed all Watchdog just in case application enable it // WDT cannot be disabled once started. It even last through NVIC soft reset if ( nrf_wdt_started(NRF_WDT) ) diff --git a/src/boards/boards.c b/src/boards/boards.c index b7190c14..1f98a60f 100644 --- a/src/boards/boards.c +++ b/src/boards/boards.c @@ -73,6 +73,9 @@ void board_init(void) button_init(BUTTON_DFU); button_init(BUTTON_FRESET); +#ifdef SOFTWARE_RESET_BUTTON + button_init(SOFTWARE_RESET_BUTTON); +#endif NRFX_DELAY_US(100); // wait for the pin state is stable #if LEDS_NUMBER > 0