#include "sr_bsp_pm.h"


#ifdef SR_USE_PM

#include "sr_stddef.h"

//#include "sr_log.h"


/**
 * @brief 休眠请求
 * @param sleepMode 休眠模式
 * @return 0成功，负值失败
 */
int BspPmSleepReq(SR_PM_SLEEP_MODE_E sleepMode)
{
	int ret =-1;

	SR_ASSERT(IS_SLEEP_MODE(sleepMode));

	RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE); //使能电源接口时钟
	switch(sleepMode)
	{
		case BSP_PM_SLEEP_NONE:
			PWR_ExitLowPowerRunMode();
		break;
		case BSP_PM_SLEEP_IDLE:		
			//PWR_EnterLowPowerRunMode(); //Request to enter LP RUN mode sysclock switch to MSI
			PWR_EnterLowPowerSleepMode(SLEEP_OFF_EXIT, PWR_SLEEPENTRY_WFI);
		break;
		case BSP_PM_SLEEP_LIGHT: 
			PWR_EnterSLEEPMode(SLEEP_OFF_EXIT, PWR_SLEEPENTRY_WFI);
		break;
		case BSP_PM_SLEEP_DEEP:   
			PWR_EnterSTANDBYMode(PWR_STOPENTRY_WFI,PWR_CTRL3_RAM2RET);
		break;
		case BSP_PM_SLEEP_STANDBY:
			PWR_EnterSTOP2Mode(PWR_STOPENTRY_WFI,PWR_CTRL3_RAM1RET);
		break;
	}
	return SR_OK;
}



/**
 * @brief 复位重启
 * 
 * @return 0成功，负值失败
 */
int BspPmReset(void)
{
	NVIC_SystemReset();
	return SR_OK;
}



#if   0   //暂不实现

/**
 * @brief 启动低功耗定时器,在休眠模式下依然生效. 只触发一次
 * @param id 定时器id
 * @param timeout 定时时长, 单位毫秒
 * @return 0成功，负值失败
 */
int BspPmLtimerStart(SR_LTIMER_ID_E id, uint32_t timeout)
{
	return SR_NOIMPT;
}


/**
 * @brief 停止低功耗定时器
 * @param id 定时器id
 * @return 0成功，负值失败
 */
int BspPmLtimerStop(SR_LTIMER_ID_E id)
{
    return SR_NOIMPT;
}


/**
 * @brief 关机
 * 
 * @return 0成功，负值失败
 */
int BspPmPowerOff_(void)
{
  return SR_NOIMPT;

}



/**
 * @brief 开机原因查询
 * @return  见SR_WAKEUP_REASON_E
 */
SR_WAKEUP_REASON_E BspPmGetPoweronReason(void)
{
    //SR_WAKEUP_REASON_E srReason = SR_WK_UNKNOW;
	
	//FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);
	return SR_NOIMPT;
}
#endif



#endif

