//#include "driver_adc.h"
#include "user_driver.h"
#include "u_power.h"
#include "u_main.h"
#include "u_light_ctrl.h"
#include "Drv_adc.h" 

#define POWER_DET_CHN		(0x02)
#define POWER_DET_PORT		(0x32)
#define POWER_ADC_ERR_PVT	(10500) // ��·ʱ�ĵ�ѹ��Ӧֵ ����10.5V  ���ﵥλΪmV

#define ADC_CHECK         (1)

extern void light_state_upload(void);

static void power_check_cb(void)
{
	static int det_cnt = 0, adc_temp_mean = 0, undervoltage_cnt = 0;
  uint32_t adc_val=0;
	
	adc_temp_mean += ADC_GetVoltage(ADC_CHANNEL_5); //��ȡadc����
	//U_UART_PRINTF("ad=%d\n", adc_temp_mean);
	++det_cnt;
	if (det_cnt >= 3)
	{
		det_cnt = 0;
		adc_temp_mean /= 3;
		if(adc_temp_mean<0)adc_temp_mean=0;//�����Ǵ���ֵ
		adc_temp_mean = (adc_temp_mean*123);//Ӳ��˥������12.3 ��ԭӲ��˥��������
		adc_temp_mean/=10;
		if (adc_temp_mean < POWER_ADC_ERR_PVT && g_light_para.power_st)
		{
			if (++undervoltage_cnt >= 2)
			{
				light_power_set(GLO_DIS);
				light_state_upload();
			}	
		}
		else
		{
			undervoltage_cnt = 0;
		}
		
		//U_UART_PRINTF("m_ad=%d mV\n", adc_temp_mean);
		
		adc_temp_mean = 0;
		u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb);

	}
	else if (det_cnt == 1)
	{
		u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK / 100, power_check_cb);
	}

}

void power_check_init(void)
{
	
	#if 0
	//bk3431
	GPIO_config(POWER_DET_PORT >> 4, POWER_DET_PORT & 0x0F, 2);	
	ADC_Init(POWER_DET_CHN);
	#endif
	#if(ADC_CHECK==1)
	ADC_Configuration();		
	u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb);
	#endif

}