/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: 	Sino
Version: 	V0.0
Date: 		2020/04/26
History:
	V2.0	2020/04/26		 Preliminary
********************************************************************************/
#include "Main.h"


//充电器和负载检测
BOOL	bChgerStartCheckFlg;
BOOL	bChgerChkingFlg;
BOOL	bLoadStartCheckFlg;
BOOL	bLoadChkingFlg;
U8	xdata	ucChgerRCnt;
U8	xdata	ucLoadRCnt;

/*************************************************************************************************
* 函数名: LoadCheck
* 参  数: 无
* 返回值: 无
* 描  述: 负载检测，欠压和过流保护后，需启动负载锁定功能
*************************************************************************************************/
void LoadCheck(void)
{
    if(bLoadStartCheckFlg)				            //如果发生欠压保护，且电压已经恢复；如果已经发生过流保护
    {
		bLoadStartCheckFlg = 0;
		bLoadChkingFlg = 1;
		ucLoadRCnt = 0;
		AFELoadCheckEn();				            //开启AFE负载检测
    }
    else if(bLoadChkingFlg)
    {
		AFERdStatus();
        if(!bAfeLoad)					            //检测到负载释放
        {
            if(++ucLoadRCnt >= LOAD_DELAY_CNT)
            {
				bLoadChkingFlg = 0;
				ucLoadRCnt = 0;
				AFELoadCheckDis();		            //关闭负载检测
				if(bUVLock)
				{
					bUV = 0;			            //释放欠压、过流
				}
				bOCD1 = 0;
				bOCD2 = 0;
				if(bAFE_SC)
				{
					bAFE_SC = 0;
					AFEClrFlg();		            //清除短路保护标志
				}
			}
		}
	}
}


/*************************************************************************************************
* 函数名: ChgerCheck
* 参  数: 无
* 返回值: 无
* 描  述: 检测充电器，当发生欠压后检测充电器是否连接；当发生充电过流后检测充电器是否移除
*************************************************************************************************/
void ChgerCheck(void)
{
	if(bChgerStartCheckFlg)
	{
		bChgerStartCheckFlg = 0;
		bChgerChkingFlg = 1;
		ucChgerRCnt = 0;
		AFEChgerCheckEn();				            //开启充电器检测
	}
	else if(bChgerChkingFlg)
	{
		AFERdStatus();
		if(!bAfeChger)					            //充电器移除
		{
			if(++ucChgerRCnt >= CHGER_DELAY_CNT)
			{
				bChgerChkingFlg = 0;
				ucChgerRCnt = 0;
				AFEChgerCheckDis();		            //关闭充电器检测
				if(bOVLock)
				{
					bOV = 0;			            //释放过压
                    bAFE_OV = 0;
                    AFEClrFlg();
				}
				bOCC = 0;
			}
		}
	}
}
