#ifndef UWater_TEMPERATURE_CALCULATE_APP_H
#define	UWater_TEMPERATURE_CALCULATE_APP_H 

#include "UWater_gp22_app.h"

/************************************************宏定义相关**********************************/
#define START_CALIBREATE    	0//开启校准单程时间
#define STOP_CALIBREATE     	1//停止校准单程时间
#define NOT_ALLOW_CALIBREATE    2//空管下不允许校准单程时间


#define  TOF_UP     0//up单程时间角标
#define  TOF_DOWN   1//down单程时间角标
#define  UP_AM_AVERAGE     2//up振幅均值角标
#define  DOWN_AM_AVERAGE   3//down振幅均值角标


#define  RTCC_TOF_CALIBERATE_TIME_OUT     180//   3分钟超时防护超时防护时间，(活塞台子冲水+流量稳定)
#define  TOF_COMPENSATION_COEFFICIENT    (float)4 //单程时间差值补偿系数
/************************************************规约消息管理相关**********************************/
typedef struct 
{
	u8 tof_caliberate_msg; //单程时间补偿数据存储标志
	
} STRUCT_TEMP_INVERSE_MSG; 

typedef enum
{
    TofCaliberateMsg = 0, //单程时间补偿数据存储标志
	

	/*对外消息总个数*/
	Msg_TotalCount=1
} TempInverse_MsgTypeDef;

#define TEMP_INVERSE_MSG_TYPE_CNT  Msg_TotalCount

typedef union 
{
    STRUCT_TEMP_INVERSE_MSG MsgStruct;
    u8 MsgBuf[TEMP_INVERSE_MSG_TYPE_CNT];
} TEMP_IVVERSE_UNION_MSG;  


#define  TemperatureCalculateParameterTotal  4 //温度反算参数
typedef union
{
	struct 
	{		
		u32   gp30_tof_up_filter_value_test;//检定数据
		u32   gp30_tof_down_filter_value_test;//检定数据
        u32   up_am_average;//up振幅均值角标
        u32   down_am_average;//down振幅均值角标
	}Temp_Inverse_Data;
	
	u32 Temp_Inverse[TemperatureCalculateParameterTotal];
	
}Temp_Inverse_Data1;


//对外接口函数
void Tof_And_AM_Data_Collect(u8 i,u32 s_g_tof_am_pointer);//单程时间与振幅原始数据采集
void Gp30_Tof_Collect_and_Deal(void);//单程时间采集与处理
void  Water_Meter_Temp_calculate(u32 time_dof_temp_float);//单程时间校准与温度计算
u8 TempInverseCheckMsgApp(TempInverse_MsgTypeDef msgType);//查询反算标志
u8 TempInverseClearMsgApp(TempInverse_MsgTypeDef msgType);//清零反算标志
u32 GetTemperatureCalculateParameter(u8 flag);//单程时间获取
void GP30_tof_buchang_filter(u8 flag);//获取单程时间校准命令
void FanSuan_Caliberate_Timeout(void);//反算校准超时查询和处理函数

extern const float sound_speed_in_water[101];

#endif
