The buttonless_dfu_sdh_state_observer in this example is shutting down the cpu when the softdevice is disabled using an observer.
static void buttonless_dfu_sdh_state_observer(nrf_sdh_state_evt_t state, void * p_context) { if (state == NRF_SDH_EVT_STATE_DISABLED) { // Softdevice was disabled before going into reset. Inform bootloader to skip CRC on next boot. nrf_power_gpregret2_set(BOOTLOADER_DFU_SKIP_CRC); //Go to system off. nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF); } } /* nrf_sdh state observer. */ NRF_SDH_STATE_OBSERVER(m_buttonless_dfu_state_obs, 0) = { .handler = buttonless_dfu_sdh_state_observer, };
I'm not sure why this is necessary in a dfu implementation. Our app has this observer in it copied from the example. When I disable the softdevice it triggers this method and shuts down the cpu when I don't want it to.
ps. nrf52832, sdk 15.3, s132