156 lines
3.5 KiB
C
156 lines
3.5 KiB
C
|
|
/**
|
|||
|
|
* @file cm_pm.h
|
|||
|
|
* @brief PM接口
|
|||
|
|
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
|
|||
|
|
* @author By zyf
|
|||
|
|
* @date 2021/04/18
|
|||
|
|
*
|
|||
|
|
* @defgroup pm pm
|
|||
|
|
* @ingroup PM
|
|||
|
|
* @{
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef __CM_PM_H__
|
|||
|
|
#define __CM_PM_H__
|
|||
|
|
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Included Files
|
|||
|
|
****************************************************************************/
|
|||
|
|
#include <stdint.h>
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Pre-processor Definitions
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Public Types
|
|||
|
|
****************************************************************************/
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
CM_POWERKEY_EVENT_RELEASE = 0, /*!<按键被释放*/
|
|||
|
|
CM_POWERKEY_EVENT_PRESS = 1, /*!<按键被按下*/
|
|||
|
|
} cm_powerkey_event_e;
|
|||
|
|
|
|||
|
|
typedef void (*cm_pm_event_cb_t)(void);
|
|||
|
|
typedef void (*cm_pm_powerkey_cb_t)(cm_powerkey_event_e event);
|
|||
|
|
|
|||
|
|
/** 上电原因 */
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
CM_PM_UNKNOWN = 0, /*!<未知原因*/
|
|||
|
|
CM_PM_CHARG_POW_OFF, /*!<Charging in powering off,USB等充电方式供电时产生的重启*/
|
|||
|
|
CM_PM_RD_PRO_MODE , /*!<Rd production mode,产线工具下发导致的重启*/
|
|||
|
|
CM_PM_RTC_ALARM, /*!<rtc Alarm,定时闹钟开机*/
|
|||
|
|
CM_PM_POWER_ON, /*!<Normal power on,正常重启*/
|
|||
|
|
CM_PM_ERROR_RESET, /*!<Error reset (WDT),看门狗超时导致的重启*/
|
|||
|
|
}cm_pm_power_on_reason_e;
|
|||
|
|
|
|||
|
|
/** 配置 */
|
|||
|
|
typedef struct{
|
|||
|
|
cm_pm_event_cb_t cb_enter; /*!< 进入低功耗回调函数*/
|
|||
|
|
cm_pm_event_cb_t cb_exit; /*!< 退出低功耗回调函数*/
|
|||
|
|
} cm_pm_cfg_t;
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Public Data
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Public Function Prototypes
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
#define EXTERN extern "C"
|
|||
|
|
extern "C"
|
|||
|
|
{
|
|||
|
|
#else
|
|||
|
|
#define EXTERN extern
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 关机
|
|||
|
|
*
|
|||
|
|
* @return 空
|
|||
|
|
*
|
|||
|
|
* @details More details
|
|||
|
|
*/
|
|||
|
|
void cm_pm_poweroff(void);
|
|||
|
|
/**
|
|||
|
|
* @brief 获取上电原因
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* >= 0 - 上电原因\n
|
|||
|
|
* < 0 - 失败, 返回值为错误码
|
|||
|
|
*
|
|||
|
|
* @details More details
|
|||
|
|
*/
|
|||
|
|
int cm_pm_get_power_on_reason(void);
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 重启
|
|||
|
|
*
|
|||
|
|
* @param [in] void
|
|||
|
|
*
|
|||
|
|
* @return void
|
|||
|
|
*
|
|||
|
|
* @details More details
|
|||
|
|
*/
|
|||
|
|
void cm_pm_reboot(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief pm初始化
|
|||
|
|
*
|
|||
|
|
* @param [in] pm_cfg:参数配置
|
|||
|
|
*
|
|||
|
|
* @return void
|
|||
|
|
*
|
|||
|
|
* @details More details
|
|||
|
|
*/
|
|||
|
|
void cm_pm_init(cm_pm_cfg_t pm_cfg);
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 睡眠模式上锁
|
|||
|
|
*
|
|||
|
|
* @return 空
|
|||
|
|
*
|
|||
|
|
* @details 执行后,模组将无法进入休眠状态
|
|||
|
|
*/
|
|||
|
|
void cm_pm_work_lock(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 睡眠模式解锁
|
|||
|
|
*
|
|||
|
|
* @return 空
|
|||
|
|
*
|
|||
|
|
* @details 执行后,模组将允许进入休眠状态
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
void cm_pm_work_unlock(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief powerkey按键回调函数注册
|
|||
|
|
*
|
|||
|
|
* @param [in] callback回调函数指针
|
|||
|
|
* @return
|
|||
|
|
* = 0 - 成功 \n
|
|||
|
|
* < 0 - 失败, 返回值为错误码
|
|||
|
|
*
|
|||
|
|
* @details 如果回调函数非空,无论长短按都将调用回调函数,且不会关机,仅做按键功能,如果为空,将长按为关机功能\n
|
|||
|
|
*/
|
|||
|
|
int32_t cm_pm_powerkey_regist_callback(cm_pm_powerkey_cb_t callback);
|
|||
|
|
|
|||
|
|
|
|||
|
|
#undef EXTERN
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif /* __CM_PM_H__ */
|
|||
|
|
|
|||
|
|
/** @}*/
|