/**
  ******************************************************************************
  * @file    regmap.h
  * @author  AndyChen
  * @version V1.0
  * @date    2015-xx-xx
  * @brief   Modbus register address map
  ******************************************************************************
  * @attention
  *  
  ******************************************************************************
  */ 

/* Define to prevent recursive inclusion --------------------------------------*/

#ifndef __REGMAP_H

#define __REGMAP_H

/* Includes -------------------------------------------------------------------*/

#include <stm32f10x.h>

/* Exported_Macros ------------------------------------------------------------*/

typedef uint16_t uint16;
typedef uint32_t uint32;

/* Exported_Types -------------------------------------------------------------*/

//2 byte aligned
#pragma pack(2)

/*-------------------------------设备序列号------------------------------------*/

//address: 0000~0039
typedef	struct
{											/* Register		Type  		 R/W */
	uint16		serialNum[4];				  /* 0	  64bit integer	 r/w */
	
	uint16		hardwareVerSn[3];			/* 1	  32bit integer	 r/w */
	uint16		firmwareVer[3];				/* 6 	  32bit integer    r/w */
	uint16		firmwareCRC;				  /* 8 		16bit integer	 r/w */
	uint16		firmwareVerDate_year;			/* 9		32bit integer	 r/w */	
	uint16		firmwareVerDate_month;			/* 9		32bit integer	 r/w */	
	uint16		firmwareVerDate_day;			/* 9		32bit integer	 r/w */	
	
	uint16		psSerialNum[4];				/* 11		64bit integer	 r/w */
	uint16		tsSerialNum[4];				/* 15		64bit integer	 r/w */
	
	uint16		supersonicA1[4];			/* 19		64bit integer	 r/w */
	uint16		supersonicA2[4];			/* 23		64bit integer	 r/w */
	uint16		supersonicA3[4];			/* 27		64bit integer	 r/w */
	
	uint16		supersonicB1[4];			/* 31		64bit integer	 r/w */
	uint16		supersonicB2[4];			/* 35		64bit integer	 r/w */
	uint16		supersonicB3[4];			/* 39		64bit integer	 r/w */
	
} deviceSerialNum_t;

/*-------------------------------设备配置参数-----------------------------------*/

//Part I 
//address: 1001~1030
typedef struct
{											/* Register		Type  		 R/W */
	uint16		systemMode;					/* 1001 	 16bit integer   r/w */
	
	float		mid_distance;			/* 1002 	 16bit float     r/w */
	float		up_distance;	
	float		down_distance;	
	float		mid_a_compensate_time;			
	float		mid_b_compensate_time;				
	float		up_a_compensate_time;			
	float		up_b_compensate_time;				
	float		down_a_compensate_time;			
	float		down_b_compensate_time;			
	float		set_sound_speed;			
	
	u16			device_id[4];

	//25
	u16			mid_A_level;			
	u16			mid_B_level;
	u16			up_A_level;			
	u16			up_B_level;	
	u16			down_A_level;			
	u16			down_B_level;			
	u16			device_type;
	
	//32
	/*加了6个地址*/
	u16			device_gprs_ip[2];
	u16			device_gprs_port;
	//35
	u16     measure_channel;
	float		flow_mid;
	float		flow_up;
	float		flow_down;

	u16			current_open_state;
	u16			current_flow_max;
} deviceConfigParam_t1;

//Part II 
//address: 1049~1100
typedef struct
{											/* Register		Type  		 R/W */

	
	float		flowCalibFactor[10];			/* 1049 	 32bit float	 r/w */	
// 	float		flowCalibFactor2;			/* 1051 	 32bit float	 r/w */
// 	float		flowCalibFactor3;			/* 1053 	 32bit float	 r/w */	
// 	float		flowCalibFactor4;			/* 1055 	 32bit float	 r/w */
// 	float		flowCalibFactor5;			/* 1057 	 32bit float	 r/w */	
// 	float		flowCalibFactor6;			/* 1059 	 32bit float	 r/w */
// 	float		flowCalibFactor7;			/* 1061 	 32bit float	 r/w */	
// 	float		flowCalibFactor8;			/* 1063 	 32bit float	 r/w */
// 	float		flowCalibFactor9;			/* 1065 	 32bit float	 r/w */	
// 	float		flowCalibFactor10;			/* 1067 	 32bit float	 r/w */
	
	float		flowSegmentPoint[10];			/* 1069 	 32bit float	 r/w */	
// 	float		flowSegmentPoint2;			/* 1071 	 32bit float	 r/w */
// 	float		flowSegmentPoint3;			/* 1073 	 32bit float	 r/w */	
// 	float		flowSegmentPoint4;			/* 1075 	 32bit float	 r/w */
// 	float		flowSegmentPoint5;			/* 1077 	 32bit float	 r/w */	
// 	float		flowSegmentPoint6;			/* 1079 	 32bit float	 r/w */
// 	float		flowSegmentPoint7;			/* 1081 	 32bit float	 r/w */	
// 	float		flowSegmentPoint8;			/* 1083 	 32bit float	 r/w */
// 	float		flowSegmentPoint9;			/* 1085 	 32bit float	 r/w */	
// 	float		flowSegmentPoint10;			/* 1087 	 32bit float	 r/w */
	
	float		mProbePostiveDelay;			/* 1089 	 16bit integer   r/w */
	float		mProbeReverseDelay;			/* 1091 	 16bit integer   r/w */
	float		uProbePostiveDelay;			/* 1093 	 16bit integer   r/w */
	float		uProbeReverseDelay;			/* 1095 	 16bit integer   r/w */
	float		dProbePostiveDelay;			/* 1097 	 16bit integer   r/w */
	float		dProbeReverseDelay;			/* 1099 	 16bit integer   r/w */
	
} deviceConfigParam_t2;

//Part III 
//address: 1101~1140
typedef struct
{											/* Register		Type  		 R/W */
	float		indicationError[10];			/* 1101 	 32bit float	 r/w */	
// 	float		indicationError2;			/* 1103 	 32bit float	 r/w */
// 	float		indicationError3;			/* 1105 	 32bit float	 r/w */	
// 	float		indicationError4;			/* 1107 	 32bit float	 r/w */
// 	float		indicationError5;			/* 1109 	 32bit float	 r/w */	
// 	float		indicationError6;			/* 1111 	 32bit float	 r/w */
// 	float		indicationError7;			/* 1113 	 32bit float	 r/w */	
// 	float		indicationError8;			/* 1115 	 32bit float	 r/w */
// 	float		indicationError9;			/* 1117 	 32bit float	 r/w */	
// 	float		indicationError10;			/* 1119 	 32bit float	 r/w */
	
	float		stdEquipmentFlow[10];			/* 1121 	 32bit float	 r/w */	
// 	float		stdEquipmentFlow2;			/* 1123 	 32bit float	 r/w */
// 	float		stdEquipmentFlow3;			/* 1125 	 32bit float	 r/w */	
// 	float		stdEquipmentFlow4;			/* 1127 	 32bit float	 r/w */
// 	float		stdEquipmentFlow5;			/* 1129 	 32bit float	 r/w */	
// 	float		stdEquipmentFlow6;			/* 1131 	 32bit float	 r/w */
// 	float		stdEquipmentFlow7;			/* 1133 	 32bit float	 r/w */	
// 	float		stdEquipmentFlow8;			/* 1135 	 32bit float	 r/w */
// 	float		stdEquipmentFlow9;			/* 1137 	 32bit float	 r/w */	
// 	float		stdEquipmentFlow10;			/* 1139 	 32bit float	 r/w */
	
	
} deviceConfigParam_t3;

//Part IV 
//address: 1141~1180
typedef struct
{											/* Register		Type  		 R/W */
	uint16		gprsTimeModeSet;			/* 1141 	 16bit integer   r/w */
	uint16		gprsTimeSet;				/* 1142 	 16bit integer   r/w */		
	
	float		temperatureRevC_K;			/* 1143 	 32bit float	 r/w */	
	float		temperaturePosB_B;			/* 1145 	 32bit float	 r/w */
	
	float		pressureRevC_K;				/* 1147 	 32bit float	 r/w */	
	float		pressurePosB_B;				/* 1149 	 32bit float	 r/w */
	
	float		tempThreshold_Min;			/* 1151 	 16bit integer	 r/w */	
	float		tempThreshold_Max;			/* 1153 	 16bit integer	 r/w */
	
	float		presThreshold_Min;			/* 1155 	 16bit integer	 r/w */	
	float		presThreshold_Max;			/* 1157 	 16bit integer	 r/w */
	
	float		flowThreshold_Max;			/* 1159 	 16bit integer	 r/w */

	float		flowThreshold_Min;			/* 1161 	 16bit integer	 r/w */

	float		smallflow_cut;				/* 1163 	 16bit integer	 r/w */
	
	uint16		pulseOutputMode;			/* 1165 	 16bit integer	 r/w */
	
	float		pulseCoefficient;			/* 1166,1167 	 32bit float	 r/w */

	uint16		warningInfoStatus;			/* 1168 	 32bit float	 r/w */
	uint16		paraInfoStatus;				/* 1169 	 32bit float	 r/w */		
	
	//uint16		reg_void;


//	uint16		visitorPassword;			/* 1169 	 16bit integer	 r/w */
	uint16		userPassword;				/* 1170 	 16bit integer	 r/w */
	uint16		authUsrPassword;			/* 1171 	 16bit integer	 r/w */
	
	uint16   monthbackup_set;      /* 1172 	 16bit integer	 r/w */
	uint16   daybackup_set;       /* 1173 	 16bit integer	 r/w */
	uint16   periodbackup_set;     /* 1174 	 16bit integer	 r/w */
	
	uint16   RTCtime_year;        /* 1175 	 16bit integer	 r/w */
	uint16   RTCtime_month;       /* 1176 	 16bit integer	 r/w */
	uint16   RTCtime_day;         /* 1177 	 16bit integer	 r/w */
	uint16   RTCtime_hour;        /* 1178 	 16bit integer	 r/w */
	uint16   RTCtime_min;         /* 1179 	 16bit integer	 r/w */
	uint16   RTCtime_sec;         /* 1180 	 16bit integer	 r/w */
	uint16		lowpluseMode;			/* 1181   16bit integer	 r/w */
	uint16		lowPluseWide;			/* 1182	 16bit integer	 r/w */
	uint16		lcd_mode;					/* 1183	 16bit integer	r/w */	
	uint16		open_intelligent_mode;				/* 1184   16bit float	 r/w */
	uint16		devSlaveAddr;			/* 1185 	 16bit integer	 r/w */
	uint16		devBaudRate;			/* 1186 	 16bit integer	 r/w */
	uint16		monthbackupLogNum;			/* 1187 	 16bit integer	 r/w */
	uint16		daybackupLogNum;			/* 1188 	 16bit integer	 r/w */
	uint16		periodbackupLogNum;			/* 1189 	 16bit integer	 r/w */
	
	uint16		monthbackuptranscmd;			/* 1190 	 16bit integer	 r/w */
	uint16		daybackuptranscmd;			/* 1191 	 16bit integer	 r/w */
	uint16		periodbackuptranscmd;			/* 1192 	 16bit integer	 r/w */
	uint16		eventlogtranscmd;			/* 1193 	 16bit integer	 r/w */
	uint16		paralogtranscmd;			/* 1194	 16bit integer	 r/w */
	uint16		othercmd;						/* 1195 	 16bit integer	 r/w */
	float		user_error[10];						/*1196-1215*/
	float		user_flow[10];						/*1216-1235*/
	uint16		password;						/* 1236	 16bit integer	 r/w */
	uint16		superpassword;					/* 1237	 16bit integer	 r/w */
	uint16		confirmpassword;				/* 1238	 16bit integer	 r/w */
	uint16		confirmsuperpassword;			/* 1239	 16bit integer	 r/w */
	float		user_cal_error[10];						/*1240-1259*/
	float		user_cal_flow[10];						/*1260-1279*/
	uint16		gas_type;					/*1280*/
	float		gas_factor;					/*1281,1282*/

	
} deviceConfigParam_t4;



/*-------------------------------流量计计量信息------------------------------------*/

//address: 3000~3029
typedef struct
{											/* Register		Type  		 R/W */
	float		workConTotalFlow;			/* 3000		32bit float		 r/w */
	float		stdConTotalFlow;			/* 3002		32bit float		 r/w */
	
	float		workConInstantFlow;			/* 3004		32bit float		 r/w */
	float		stdConInstantFlow;			/* 3006		32bit float		 r/w */

	float		todayWorkFlow;				/* 3008		32bit float		 r/w */
	float		yesterdayWorkFlow;			/* 3010		32bit float		 r/w */

	float		monthWorkFlow;				/* 3012		32bit float		 r/w */
	float		lastmonthWorkFlow;			/* 3014		32bit float		 r/w */

	float		todayStdFlow;				/* 3016		32bit float		 r/w */
	float		yesterdayStdFlow;			/* 3018		32bit float		 r/w */

	float		monthStdFlow;				/* 3020		32bit float		 r/w */
	float		lastmonthStdFlow;			/* 3022		32bit float		 r/w */
	
	float   	temperatureValue;			/* 3024		32bit float		 r/w */	
	float   	pressureValue;				/* 3026		32bit float		 r/w */

	
	
} flowMeterMsrInfo_t;


typedef struct
{											/* Register Type   R */
	float		midA;						/* 4701 		r */
	float		midB;						/* 4703 	       r */
	float		time_A1;						/* 4705 		r */
	float		time_B1;						/* 4707 	       r */
	float		time_A2;						/* 4709 	       r */
	float		time_B2;						/* 4711 	       r */
	float		mid_sound;					/* 4713 	       r */	
	float		a_sound;					/* 4715 	       r */	
	float		b_sound;					/* 4717 	       r */	


	uint16		snrmidA;					/* 4719 	       r */	
	uint16		snrmidB;					/* 4720 	       r */	
	uint16		snrupA;						/* 4721 	       r */	
	uint16		snrupB;						/* 4722 	       r */	
	uint16		snrdownA;					/* 4723 	       r */	
	uint16		snrdownB;					/* 4724 	       r */	
	
	uint16		gainmidA;					/* 4725 	       r */	
	uint16		gainmidB;					/* 4726 	       r */	
	uint16		gainupA;					/* 4727 	       r */	
	uint16		gainupB;					/* 4728 	       r */	
	uint16		gaindownA;					/* 4729 	       r */	
	uint16		gaindownB;					/* 4730 	       r */	

	uint16		sigstremidA;				/* 4731 	       r */	
	uint16		sigstremidB;				/* 4732 	       r */	
	uint16		sigstreupA;					/* 4733 	       r */	
	uint16		sigstreupB;					/* 4734 	       r */	
	uint16		sigstredownA;				/* 4735 	       r */	
	uint16		sigstredownB;				/* 4736 	       r */	

	float		mid_flow;					/* 4737 		   r */ 
	float		up_flow;					/* 4739 		   r */ 
	float		down_flow;					/* 4741 		   r */ 

	u16			mid_A_level1;			
	u16			mid_B_level1;
	u16			up_A_level1;			
	u16			up_B_level1;	
	u16			down_A_level1;			
	u16			down_B_level1;	
	
	u16			mid_A_level2;			
	u16			mid_B_level2;
	u16			up_A_level2;			
	u16			up_B_level2;	
	u16			down_A_level2;			
	u16			down_B_level2;	
	
	
	float		updowncal_flow;
	float		midcal_flow;
	float		updowm_mid_rate;
	
	u16			system_state;
	float		mid_sig_rate;
	float		up_sig_rate;
	float		down_sig_rate;
	
} deviceMsrInfo_t;

typedef struct
{											/* Register Type   R */
  u16   system_workstatus;   //4001
} regworkstatusInfo_t;


#pragma pack()

/* Exported_Functions ---------------------------------------------------------*/


#endif
/******************* (C) COPYRIGHT 2015 AndyChen *******END OF FILE*************/
