/****************************************************************************************************
* created by sunpeng 2017 all rights reserved!
****************************************************************************************************/
#ifndef __POWER_H__
#define __POWER_H__

#include "include.h"
#if ARCH_MODE == NRF52832_Slave_Mode
#include "nrf_gpio.h"
#endif

#if ARCH_MODE == CC254X_Peripheral_Mode
#elif ARCH_MODE == NRF51822_Peripheral_Mode
#elif ARCH_MODE == NRF51802_Peripheral_Mode
#else
#define PCB_BASE3V3PWR_ON	nrf_gpio_pin_set(PWR_3V3_EN_PIN)    	/*BASE板3V3 LDO电源开*/
#define PCB_BASE3V3PWR_OFF	nrf_gpio_pin_clear(PWR_3V3_EN_PIN)		/*BASE板3V3 LDO电源关*/	

//power detect on boot
#define ONOFF_INPUT  nrf_gpio_pin_read(IPT_KEY_1)					/*开关机按键输入*/

#endif

#define Bit_SET			1
#define Bit_RESET		0


typedef enum
{
	PWR_CHARGE_MODE_MIN = 0,
	PWR_CHARGE_MODE_DOING,
	PWR_CHARGE_MODE_FINISH,
	PWR_CHARGE_MODE_CACEL,
	PWR_CHARGE_MODE_BATERR,
	PWR_CHARGE_MODE_MAX
}PWR_CHARGE_MODE_ENUM;

extern void keep_RAM_retention(void);
extern void init_power_mode(void);
extern void enterSystemOff(void);
extern void shutDown(void);
extern void systemReset(void);


/************************************************************
	使能充电中状态标志
************************************************************/
extern void enable_ChargeDoingKeyFlag(void);
/************************************************************
	取消充电中状态标志
************************************************************/
extern void disable_ChargeDoingKeyFlag(void);
/************************************************************
	使能充电满状态标志
************************************************************/
extern void enable_ChargeFinishedKeyFlag(void);
/************************************************************
	使能充电满状态标志
************************************************************/
extern void disable_ChargeFinishedKeyFlag(void);
/************************************************************
	充电检测并通过led显示充电过程
************************************************************/
extern void doChargeDoingKeyMotion(PWR_CHARGE_MODE_ENUM *chg_mod);
/************************************************************
	检测充电中、充电满led提示超时
************************************************************/
extern void periodDetectChargeShiningTimeout(void);
/************************************************************
	定时执行充电指示灯闪烁  100ms计时累加一次
************************************************************/
extern void cycleChargeShiningExecute(void);

//检查是否允许进入关机状态，如果允许，关机
extern void cycleCheckSystemOff(void);

//不同意定时关机，将关机使能标志位清空
extern void disAllowSystemOff(void);

//允许定时关机，将关机使能标志位使能
extern void allowSystemOff(void);

//处理关机按键
extern void do_power_key_press(void);

extern void offAllLedsForSystemOff(void);

//获取电池剩余电量百分比
extern void GetBatteryPowerLeftPercent(u8 *percent);

#if HW_VERSION == HW_VERSION_BC_PS_V20 || HW_VERSION == HW_VERSION_BC_PS_V21
//进入待机模式
s8 enter_standby_mode(void);

//离开待机模式
s8 leave_standby_mode(void);
#endif

#endif
/*********************************************end of file*********************************************/
