系统软件为应用程序提供了睡眠API,以修改操作模式(活动,扩展睡眠,深度睡眠)。 该API在arch_sleep.h头文件中定义,并提供以下功能:
void arch_disable_sleep(void)
禁用所有睡眠模式。 系统处于空闲或活动状态。
void arch_set_extended_sleep(void)
激活扩展睡眠模式。
void arch_set_deep_sleep(void)
激活深度睡眠模式。
uint8_t arch_get_sleep_mode(void)
返回当前操作模式。
0:禁用睡眠
1:扩展睡眠模式
2:深度睡眠模式
void arch_force_active_mode(void)
如果睡眠模式开启,则将其禁用。 存储当前的睡眠模式(在将其设置为“活动”之前),以便能够在需要时将其还原。
void arch_restore_sleep_mode(void)
恢复通过调用app_force_active_mode()更改的先前的睡眠模式(如果有)。 同时,该应用程序一定不能修改睡眠模式。
void arch_ble_ext_wakeup_on(void)
将BLE置于永久睡眠中,等待强制唤醒。从外部事件唤醒后,如果系统必须唤醒BLE,则必须通过调用app_ble_ext_wakeup_off()来恢复默认操作模式,否则BLE将无法唤醒 以便提供BLE事件!
void arch_ble_ext_wakeup_off(void)
将BLE内核的操作恢复为默认模式。 在这种模式下,即使没有安排BLE事件,BLE内核也会每10秒唤醒一次。 如果先前已经有事件安排,则BLE内核将更快地唤醒以提供服务。
bool arch_ble_ext_wakeup_get(void)
返回BLE内核的当前操作模式:
false:默认模式
true:永久睡眠,需要外部唤醒。
bool arch_ble_force_wakeup(void)
如果BLE内核处于睡眠状态(永久或非永久),则此功能将其唤醒。 如果永久睡眠,则应调用arch_ble_ext_wakeup_off()
uint8_t arch_last_rwble_evt_get(void)
返回一个值,该值通知有关最近发生的BLE或无线电中断。 该函数返回的值在arch_sleep.h的last_ble_evt枚举中定义。 它可以用于将异步任务(在先前描绘的钩子函数中执行的)与BLE或radio事件同步。
最后注意,arch_sleep.c模块监视对arch_force_active_mode()(计数器递增)和arch_restore_sleep_mode()(计数器递减)的调用次数。 为了使arch_restore_sleep_mode()实际启用睡眠模式,计数器必须为零! 这意味着应用程序必须确保至少调用arch_restore_sleep_mode()的次数与arch_force_active_mode()一样。 如果将应用程序分为不同的模块,则此规则分别适用于每个模块。
最后,请注意,Debugger调试器不能在任何睡眠模式下使用,因为必须关闭它才能允许关闭系统电源域。