platform_power_nrf52.c
1 #include "platform_power.h" 2 3 #include "sdk_common.h" 4 #include "app_error.h" 5 #include "nrf_pwr_mgmt.h" 6 7 static bool nrf52_power_event_handler(nrf_pwr_mgmt_evt_t event); 8 9 static ret_code_t nrf52_power_initialize(void) 10 { 11 ret_code_t ret = nrf_pwr_mgmt_init(); 12 APP_ERROR_CHECK(ret); 13 14 NRF_PWR_MGMT_HANDLER_REGISTER(nrf52_power_event_handler, 0); 15 16 return ret; 17 } 18 19 static void nrf52_power_update(void) 20 { 21 nrf_pwr_mgmt_run(); 22 } 23 24 static void nrf52_power_feed(void) 25 { 26 nrf_pwr_mgmt_feed(); 27 } 28 29 static void nrf52_power_shutdown(platform_power_shutdown_t mode) 30 { 31 switch (mode) 32 { 33 case PLATFORM_POWER_SLEEP: 34 nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF); 35 break; 36 case PLATFORM_POWER_OFF: 37 nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_STAY_IN_SYSOFF); 38 break; 39 case PLATFORM_POWER_DFU: 40 nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_DFU); 41 break; 42 case PLATFORM_POWER_RESET: 43 nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_RESET); 44 break; 45 case PLATFORM_POWER_CONTINUE_SHUTDOWN: 46 nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_CONTINUE); 47 break; 48 } 49 } 50 51 static bool nrf52_power_event_handler(nrf_pwr_mgmt_evt_t event) 52 { 53 if (platform_power_nrf52.event_handler == NULL) 54 { 55 return true; 56 } 57 58 switch (event) 59 { 60 case NRF_PWR_MGMT_EVT_PREPARE_WAKEUP: 61 return platform_power_nrf52.event_handler(PLATFORM_POWER_EVENT_PREPARE_WAKEUP); 62 case NRF_PWR_MGMT_EVT_PREPARE_SYSOFF: 63 return platform_power_nrf52.event_handler(PLATFORM_POWER_EVENT_PREPARE_OFF); 64 case NRF_PWR_MGMT_EVT_PREPARE_DFU: 65 return platform_power_nrf52.event_handler(PLATFORM_POWER_EVENT_PREPARE_DFU); 66 case NRF_PWR_MGMT_EVT_PREPARE_RESET: 67 return platform_power_nrf52.event_handler(PLATFORM_POWER_EVENT_PREPARE_RESET); 68 default: 69 return true; 70 } 71 } 72 73 platform_power_driver_t platform_power_nrf52 = { 74 .initialize = nrf52_power_initialize, 75 .update = nrf52_power_update, 76 .feed = nrf52_power_feed, 77 .shutdown = nrf52_power_shutdown, 78 };