/ src / platform / platform_power_nrf52.c
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  };