#include "powermanage.h"
#include "stm32f10x.h"
#include "adc.h"


/*外部内部电源io初始化*/
void power_io_dec_init(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = POWER_SELECT_DEC_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(POWER_SELECT_DEC_PIN_GROUP, &GPIO_InitStructure);		
	

	
	//////////////////////////////////////////////////////////////////////////////
	GPIO_InitStructure.GPIO_Pin = POWER_ELECTRIC_QUANTITY_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //模拟输入
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(POWER_ELECTRIC_QUANTITY_PIN_GROUP, &GPIO_InitStructure);		
	
}

/*外部内部电源lowpower*/
void power_io_dec_lower_power_init(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = POWER_SELECT_DEC_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(POWER_SELECT_DEC_PIN_GROUP, &GPIO_InitStructure);		
	

	
	//////////////////////////////////////////////////////////////////////////////
	GPIO_InitStructure.GPIO_Pin = POWER_ELECTRIC_QUANTITY_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //模拟输入
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(POWER_ELECTRIC_QUANTITY_PIN_GROUP, &GPIO_InitStructure);		
	
}


/*低压报警io*/
void undervol_io_power_init(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = UNDERVOL_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(UNDERVOL_PIN_GROUP, &GPIO_InitStructure);		
	
	//

	
}


/*低压报警io*/
void lowvol_io_power_init(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = LOWVOL_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(LOWVOL_PIN_GROUP, &GPIO_InitStructure);		
	
	/**/

	
}

/*低压报警io*/
void undervol_io_power_deinit(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = UNDERVOL_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(UNDERVOL_PIN_GROUP, &GPIO_InitStructure);		
	
	//

	
}


/*低压报警io*/
void lowvol_io_power_deinit(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = LOWVOL_PIN_NUM;   //amp
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
	GPIO_Init(LOWVOL_PIN_GROUP, &GPIO_InitStructure);		
	
	/**/

	
}




/*输出脉冲*/
void undervol_io_power(void)
{		
	/**/

	undervol_io_power_init();
	UNDERVOL_SIGNL_HIGH
	delay_ms(500);
	UNDERVOL_SIGNL_LOW
	undervol_io_power_deinit();

}

/*输出脉冲*/
void lowvol_io_power(void)
{		
	/**/
	lowvol_io_power_init();
	LOWVOL_SIGNL_HIGH
	delay_ms(500);
	LOWVOL_SIGNL_LOW
	lowvol_io_power_deinit();
}





/*读取电源io 状态*/
u8 power_io_get(void)
{
	u32 status;

	
	status = GPIOC->IDR & (1 << 2);
	status = status >> 2;
	
	//return POWER_BAT;
	
	if( HIGH == status )
	{
		return POWER_EXTERN;
	}else
	{
		return POWER_BAT;
	}

	
}



#define	AD_REF_VOL							3000
#define	AD_BAT_CH			      			13
#define	AD_CNT					    	  	10




/*读取电池电压*/

float get_bat_voltage(void)
{
	uint32	volt_ret;
	float	sample_vol;
	float	battery_vol;
	ad_data_s  data_ins;
	
	data_ins.ad_buffer_cnt		= AD_CNT;		  //发现有个问题  AD采样通道转化的时候，导致AD采集的数值 出现上一个通道的数。有时候是后面的数出现概率很大
	data_ins.ad_ch				= AD_BAT_CH;
	data_ins.ad_get_address_p	= ad_data;

	volt_ret = Get_vol_Average(&data_ins);//10 - channel  3300 - 3.3v vref
	if(volt_ret > 4096)
	{
		return	0;
	}
	else
	{
		sample_vol = (float)(volt_ret * AD_REF_VOL)/4096;
    	battery_vol = sample_vol * 5;
		
	}
	return battery_vol;
}




