Hi there,
I'm currently using the nRF52 DK (PCA10040) and nRF5 SDK 17.1.0.
Our device needs to permanently connected to a battery, only wake up on a button press and then execute the code. Before the button is pressed, nothing needs to be done (no advertising, etc.). I have read a lot about SYSTEM_ON and SYSTEM_OFF and I realized SYSTEM_OFF is not suitable for this application (since it will reset the chip and start execution from scratch).
That is why I tried using sd_app_evt_wait(), but this does not work at all. It seems that sd_app_evt_wait() returns immediately.
Here is my code:
static void permanent_sleep() { ret_code_t err_code; // configure Button 4 with SENSE enabled nrf_gpio_cfg_sense_input(BSP_BOARD_BUTTON_3, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW); NRF_LOG_INFO("Going to sleep..."); // enter sleep mode err_code = sd_app_evt_wait(); APP_ERROR_CHECK(err_code); NRF_LOG_INFO("Woke up..."); } int main(void) { bool erase_bonds; uint32_t err_code; // Initialize. log_init(); timers_init(); buttons_leds_init(&erase_bonds); power_management_init(); // enter sleep mode permanent_sleep(); // remaining code should be executed from here }
Any idea why this is not working? Most examples I have looked at use idle_state_handle() -> pwr_mgmt_run() within the main loop, but this does not work for me because advertising would need to be started before that.
I'm grateful for any hints how to fix this!