/* ---------------------------------------------------------------------------- * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. * Description: Low-power Framework. * Author: Huawei LiteOS Team * Create: 2020-09-19 * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * 3. Neither the name of the copyright holder nor the names of its contributors may be used * to endorse or promote products derived from this software without specific prior written * permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * --------------------------------------------------------------------------- */ #ifndef _LOS_LOWPOWER_IMPL_H #define _LOS_LOWPOWER_IMPL_H #include "los_lowpower.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ /** * @ingroup los_lowpower * * Power manager run options */ typedef struct { VOID (*changeFreq)(UINT8 freq); /**< Tune system frequency */ VOID (*enterLightSleep)(VOID); /**< Enter light sleep */ VOID (*enterDeepSleep)(VOID); /**< Enter deep sleep */ VOID (*setWakeUpTimer)(UINT32 timeout); /**< Set wakeup timer */ UINT32 (*withdrawWakeUpTimer)(VOID); /**< Withdraw wakeup timer */ UINT32 (*getSleepTime)(VOID); /**< Get sleep time */ UINT32 (*selectSleepMode)(UINT32); /**< Select sleep mode, developers can set their own mode selecetion strategy */ UINT32 (*preConfig)(VOID); /**< Preconfig, provided for special needs before entering sleep */ VOID (*postConfig)(VOID); /**< Postconfig, provided for special needs after wakeup */ VOID (*contextSave)(VOID); /**< Context save */ VOID (*contextRestore)(VOID); /**< Context restore */ UINT32 (*getDeepSleepVoteCount)(VOID); /**< Get deep sleep vote count */ UINT32 (*getSleepMode)(VOID); /**< Get sleep mode */ VOID (*setSleepMode)(UINT32 mode); /**< Set sleep mode */ } PowerMgrRunOps; /*具体来说,该结构体包含以下函数指针成员: changeFreq:调整系统频率。 enterLightSleep:进入轻度睡眠(light sleep)模式。 enterDeepSleep:进入深度睡眠(deep sleep)模式。 setWakeUpTimer:设置唤醒定时器。 withdrawWakeUpTimer:撤销唤醒定时器。 getSleepTime:获取睡眠时间。 selectSleepMode:选择进入睡眠模式的策略函数。 preConfig:提供特殊需要在进入睡眠前进行的预配置。 postConfig:提供特殊需要在唤醒后进行的后配置。 contextSave:保存上下文。 contextRestore:恢复上下文。 getDeepSleepVoteCount:获取深度睡眠投票计数。 getSleepMode:获取当前睡眠模式。 setSleepMode:设置睡眠模式。*/ /** * @ingroup los_lowpower * * Power manager config, corresponding to mode selection strategies. */ typedef struct { UINT32 minLightSleepTicks; /**< Min light sleep ticks */ UINT32 minDeepSleepTicks; /**< Min deep sleep ticks */ UINT32 maxDeepSleepTicks; /**< Max deep sleep ticks */ } PowerMgrConfig; /*minLightSleepTicks:最小轻度睡眠(light sleep)时钟周期数。 minDeepSleepTicks:最小深度睡眠(deep sleep)时钟周期数。 maxDeepSleepTicks:最大深度睡眠(deep sleep)时钟周期数。 这些成员变量可能用于配置功耗管理模块的相关参数,以控制系统进入不同级别的睡眠模式, 并限制最小和最大的睡眠时长。具体的含义和用法需要根据上下文和使用场景来确定。*/ /** * @ingroup los_lowpower * * Power manager deep sleep options */ typedef struct { BOOL (*couldDeepSleep)(VOID); /**< Check whether could enter deep sleep */ VOID (*systemWakeup)(VOID); /**< System wakup */ BOOL (*suspendPreConfig)(VOID); /**< Suspend preconfig, provided for special needs before entering deep sleep */ VOID (*suspendDevice)(VOID); /**< Supend device before entering deep sleep */ VOID (*rollback)(VOID); /**< Rollback if failed */ VOID (*resumeDevice)(VOID); /**< Resume device after wakeup from deep sleep */ VOID (*resumePostConfig)(VOID); /**< Resume postconfig, provided for special needs after wakeup from deep sleep */ VOID (*resumeCallBack)(VOID); /**< Resume callback */ VOID (*otherCoreResume)(VOID); /**< Other core Resume for multi-core scenes */ VOID (*resumeFromReset)(VOID); /**< Resume from image */ } PowerMgrDeepSleepOps; /*couldDeepSleep:检查系统是否可以进入深度睡眠状态。 systemWakeup:唤醒系统。 suspendPreConfig:提供特殊需要在进入深度睡眠前进行的暂停预配置。 suspendDevice:进入深度睡眠前暂停设备。 rollback:如果进入深度睡眠失败,则回滚。 resumeDevice:从深度睡眠状态恢复后恢复设备。 resumePostConfig:提供特殊需要在从深度睡眠状态中恢复后进行的恢复后配置。 resumeCallBack:恢复回调。 otherCoreResume:多核场景下,其他核心的恢复方法。 resumeFromReset:从映像中恢复。*/ /** * @ingroup los_lowpower * * Power manager parameter */ typedef struct { PowerMgrRunOps runOps; /**< power manager framework running operations */ PowerMgrDeepSleepOps deepSleepOps; /**< power manager deep sleep operations */ PowerMgrConfig config; /**< power manager config */ } PowerMgrParameter; /*runOps:类型为 PowerMgrRunOps 的结构体变量,用于描述系统运行状态下的功耗管理操作集合。 deepSleepOps:类型为 PowerMgrDeepSleepOps 的结构体变量,用于描述系统进入深度睡眠状态下的功耗管理操作集合。 config:类型为 PowerMgrConfig 的结构体变量,用于配置功耗管理模块的相关参数,控制系统进入不同级别的睡眠模式。 通过将这些结构体变量组合到 PowerMgrParameter 结构体中,可以实现对系统运行状态和深度睡眠状态下的功耗管理操作进行统一管理和配置。*/ /** * @ingroup los_lowpower * @brief Init the power manager framework. * * @par Description: * This API is used to init the power manager framework. * * @attention None. * * @param para [IN] The power manager parameter. * * @retval None. * @par Dependency: *