#include "Data_CoolantTemperature.h"
#include "CAN_Communication_Matrix.h"
#include "GaugesInterface.h"
#include "GPIO.h"
//-------------------------------------------
//水温数据处理 wangboyu
//-------------------------------------------
//断码显示
//-------------------------------------------
//344 - 3.1.1.	水温计显示
//-------------------------------------------
static struct
{
	uint8_t Value ;
	uint8_t Valid ;
	uint8_t CurSeg ;
}CoolantVariable ;

static uint8_t CalCoolant_CurSeg(uint8_t Valid,uint8_t Temp);
static uint8_t CalCoolant_TarSeg(uint16_t CanMsg);
/*-------------------------------------------------------------------------
 * Function Name  : Coolant_KL30_Init
 * Description    : 水温KL30初始化
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
void Coolant_KL30_Init(void)
{
	CoolantVariable.Valid = 0 ;
	CoolantVariable.Value = 0 ;
	CoolantVariable.CurSeg = 0 ;

}
void Coolant_KL15_ON_Init(void)
{
	CoolantVariable.Valid = 0 ;
	CoolantVariable.Value = 0 ;
	CoolantVariable.CurSeg = 0 ;
}
void Coolant_KL15_OFF_Init(void)
{
	CoolantVariable.Valid = 0 ;
	CoolantVariable.Value = 0 ;
	CoolantVariable.CurSeg = 0 ;
}
void Coolant_Wakeup_Init(void)
{
	CoolantVariable.Valid = 0 ;
	CoolantVariable.Value = 0 ;
	CoolantVariable.CurSeg = 0 ;
}
void Coolant_Sleep_Init(void)
{
	CoolantVariable.Valid = 0 ;
	CoolantVariable.Value = 0 ;
	CoolantVariable.CurSeg = 0 ;
}
/*-------------------------------------------------------------------------
 * Function Name  : Coolant_Processing_Service
 * Description    : 水温
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
static uint8_t wbyTestSeg = 0 ;
void Coolant_Processing_Service(void)
{
	static uint8_t Timer2s = 0 ;

	uint8_t TargetSeg = 0 ;

	uint8_t Msg_CoolTemp = 0 ;

	if(CAN_MSG_Status(ID_CanMsg18FEEE00_Msg_Count) == 0x55u)
	{//timeout
		CoolantVariable.Valid = 0 ;
		Timer2s = 0 ;
	}
	else
	{
		Msg_CoolTemp = Get_ID_18FEEE00_Sig_Engine_Coolant_Temperature();
		
		if(Msg_CoolTemp > 0xFA)
		{
			//if(Timer2s  < 100)
			//{
			//	Timer2s ++ ;
			//}
			//else
			{
				CoolantVariable.Valid = 0 ;
			}			
		}
		else
		{
			Timer2s = 0 ;
			CoolantVariable.Valid = 1 ;
			CoolantVariable.Value = Msg_CoolTemp ;

			TargetSeg = CalCoolant_TarSeg(Msg_CoolTemp);			
		}
	}

	if(Msg_CoolTemp < 40)
	{
		Msg_CoolTemp = 0 ;
	}
	else
	{
		Msg_CoolTemp -= 40 ;
	}
	//CoolantVariable.CurSeg = CalCoolant_CurSeg(CoolantVariable.Valid,Msg_CoolTemp);
	//TargetSeg - 目标段
	//CoolantVariable.Valid - 有效值
	//CoolantVariable.CurSeg - 当前段
	CoolantVariable.CurSeg = Coolant_Temp_Filter(TargetSeg, CoolantVariable.Valid);
	
}
/*-------------------------------------------------------------------------
 * Function Name  : CalCoolant_TarSeg
 * Description    : 根据有效报文 得到 目标格
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
static uint8_t CalCoolant_TarSeg(uint16_t CanMsg)
{
	uint8_t TargetSeg = 0 ;
	if(CanMsg >= 0x00 && CanMsg <= 0x59)
	{
		TargetSeg = 0 ;
	}
	if(CanMsg >= 0x5A && CanMsg <= 0x5E)
	{
		TargetSeg = 1 ;
	}
	if(CanMsg >= 0x5F && CanMsg <= 0x64)
	{
		TargetSeg = 2 ;
	}
	if(CanMsg >= 0x65 && CanMsg <= 0x69)
	{
		TargetSeg = 3 ;
	}
	if(CanMsg >= 0x6A && CanMsg <= 0x6F)
	{
		TargetSeg = 4 ;
	}
	if(CanMsg >= 0x70 && CanMsg <= 0x74)
	{
		TargetSeg = 5 ;
	}
	if(CanMsg >= 0x75 && CanMsg <= 0x8D)
	{
		TargetSeg = 6 ;
	}
	if(CanMsg >= 0x8E && CanMsg <= 0x8F)
	{
		TargetSeg = 7 ;
	}
	if(CanMsg >= 0x90 && CanMsg <= 0x91)
	{
		TargetSeg = 8 ;
	}
	if(CanMsg >= 0x92 && CanMsg <= 0x93)
	{
		TargetSeg = 9 ;
	}
	if(CanMsg >= 0x94 && CanMsg <= 0x95)
	{
		TargetSeg = 10 ;
	}
	if(CanMsg == 0x96)
	{
		TargetSeg = 11 ;
	}
	if(CanMsg >= 0x97)
	{
		TargetSeg = 12 ;
	}

	return TargetSeg ;
}
/*-------------------------------------------------------------------------
 * Function Name  : CalCoolant_CurSeg
 * Description    : 计算当前段
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
static uint8_t CalCoolant_CurSeg(uint8_t Valid,uint8_t Temp)
{
	uint8_t u8Result = 0u;

	if(Valid)
	{	
		SetGaugesPara(TempGauges,Temp);	
		u8Result = GetGaugesCurrentPos(TempGauges) ;
	}
	else
	{
		//范围外/CAN中断
		u8Result = 0 ;
	}

	return u8Result ;
}
/*-------------------------------------------------------------------------
 * Function Name  : Coolant_Get_ActualValue
 * Description    : 水温值.结果带偏移 - 40
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
uint8_t Coolant_Get_ActualValue(void)
{
    uint8_t u8Result = 0u;
	u8Result = CoolantVariable.Value ;
    return u8Result;
}
/*-------------------------------------------------------------------------
 * Function Name  : Coolant_Get_Valid
 * Description    : 
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
uint8_t Coolant_Get_Valid(void)
{
    uint8_t u8Result = 0u;
	u8Result = CoolantVariable.Valid ;
    return u8Result;
}
/*-------------------------------------------------------------------------
 * Function Name  : Coolant_Get_CurSeg
 * Description    : 水温当前段
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
uint8_t Coolant_Get_CurSeg(void)
{
    uint8_t u8Result = 0u;
	u8Result = CoolantVariable.CurSeg ;
    return u8Result;
}