/********************************************************
*                                                                                                            
* 文 件 名： FloodGateDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2020-6-24
* 作    者： 联锁组
* 功能描述： 防淹门动态数据管理头文件  
* 函数包括： 
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _FLOODGATE_DATA_MANAGE_H_
#define _FLOODGATE_DATA_MANAGE_H_

#include "FloodGateDefine.h"
#include "FloodGateConfigDataManage.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"


/*列车同意防淹门关门请求结构体*/
typedef struct S_FloodGate_CloseTrainAns
{
	UINT16 wTrainId;   /*列车ID*/
	UINT8 wFloodGateCloseIvocFlag;  /*防淹门关门请求同意标志*/
} FloodGateTrainAnsStruct;

/*防淹门数据结构体*/
typedef struct S_FloodGateDataStruct
{
	UINT16 FloodGateId;				/*防淹门ID (初始化字段)*/

	UINT8  CurOpenLockStateFromFYM;      /*当前开门且锁闭状态 (动态字段)：FLOOD_GATE_OPENLOCK、FLOOD_GATE_NOT_OPENLOCK*/
	UINT8  CurCloseRequestStateFromFYM;		/*当前关门请求状态（动态字段）：FLOOD_GATE_CLOSEREQ、FLOOD_GATE_NOT_CLOSEREQ*/

	/*当检查防淹门关联区段全部空闲，且关门请求继电器吸起有效时，发申请*/
	UINT8 CurAgreeCloseAckFromZC;/*当前zc回复关门许可：FLOOD_GATE_ALLOWCLOSE_ZC、FLOOD_GATE_NOT_ALLOWCLOSE_ZC*/


	UINT8  CurAgreeCloseStateIn;	 /*当前同意关门输入状态（动态字段）:FLOOD_GATE_AGREE_CLOSE、FLOOD_GATE_NOT_AGREE_CLOSE*/
	/*当前同意关门状态需综合如下两个条件：
	* 条件1：当前关门请求状态；
	* 
	* 条件2：CI检查是否满足关门条件，条件2又分为如下两种情况，任一情况满足，则条件2满足
	*		情况1：与zc通信故障时，且防淹门关联物理区段全部空闲
	*		情况2：与zc通信良好时，且防淹门所在区段全部空闲，且ZC回复防淹门关闭许可有效；
	*
	* 条件1为当前关门请求为是，且条件2满足，当前同意关门状态才为同意；
	*/
	UINT8  CurAgreeCloseStateOut;	 /*当前同意关门输出状态（动态字段）:FLOOD_GATE_AGREE_CLOSE、FLOOD_GATE_NOT_AGREE_CLOSE*/

	UINT32 CurYGJCrossLineStartCount;/*当前YGJ混线开始时间*/

	UINT32 CurFloodGateDelayCloseStartCyc;		/*防淹门接近区段占压延时关门开始时间*/
	UINT8 FloodGateCloseApplyIvocSum;			/*防淹门关门申请列车数量*/
	UINT16 FloodGateCloseApplyIvocId[FLOOD_GATE_APPLY_TRAIN_SUM_MAX];	/*防淹门关门申请列车ID*/

	UINT8 FloodGateCloseAnsIvocSum;				/*防淹门关门允许，列车回复数量*/
	FloodGateTrainAnsStruct	FloodGateCloseFromIvocStru[FLOOD_GATE_APPLY_TRAIN_SUM_MAX];		/*列车同意防淹门关门请求结构体*/
	UINT8 FloodGateAccessUTFlag;				/*防淹门接近区段是否有非通信车标志*/
} FloodGateDataStruct;

/*******************************全局变量声明*******************************/
extern FloodGateDataStruct FloodGateDataStru[FLOOD_GATE_SUM_MAX];   /*定义防淹门动态数据*/

/*
* 功能描述： 获取防淹门数据结构体指针
* 参数说明：    
* 返回值  ： 
            FloodGateDataStruct *  
*/
FloodGateDataStruct *GetFloodGateData(void);

/*
* 功能描述： 获取指定ID防淹门开门锁闭状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门开门锁闭状态
*/
UINT8 GetFloodGateCurOpenLockState(const UINT16 floodGateId);


/*
* 功能描述： 设置指定ID防淹门开门锁闭状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 1: 成功
*			 0: 失败
*/
UINT8 SetFloodGateCurOpenLockState(const UINT16 floodGateId,const UINT8 openLockSt);

/*
* 功能描述： 获取指定ID防淹门关门请求状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门关门请求状态
*/
UINT8 GetFloodGateCurCloseRequestSta(const UINT16 floodGateId);


/*
* 功能描述： 设置指定ID防淹门关门请求状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 1: 成功
*			 0: 失败
*/
UINT8 SetFloodGateCurCloseRequestSta(const UINT16 floodGateId,const UINT8 closeReqSt);



/*
* 功能描述： 获取指定ID防淹门当前同意关门输出状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门同意关门状态
*/
UINT8 GetFloodGateCurAgreeCloseOutSta(const UINT16 floodGateId);


/*
* 功能描述： 设置指定ID防淹门当前同意关门输出状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 1: 成功
*			 0: 失败
*/
UINT8 SetFloodGateCurAgreeCloseOutSta(const UINT16 floodGateId,const UINT8 agreeCloseSt);

/*
* 功能描述： 获取指定ID防淹门当前同意关门采集状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门同意关门状态
*/
UINT8 GetFloodGateCurAgreeCloseSta(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门当前同意关门采集状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 1: 成功
*			 0: 失败
*/
UINT8 SetFloodGateCurAgreeCloseSta(const UINT16 floodGateId,const UINT8 agreeCloseSt);


/*
* 功能描述： 获取指定ID防淹门zc回复关门许可
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门关门请求状态
*/
UINT8 GetFloodGateCurZCAgrCloseAck(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门zc回复关门许可
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 1: 成功
*			 0: 失败
*/
UINT8 SetFloodGateCurZCAgrCloseAck(const UINT16 floodGateId,const UINT8 allowCloseSt);


/*
* 功能描述： 获取指定ID防淹门当前逻辑上的关门状态
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门状态
*/
UINT8 GetFloodGateCurLogicCloseState(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门YGJ混线开始时间
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门混线开始时间
*/
UINT32 GetFloodGateCurYGJCrosLStartCnt(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门YGJ混线开始时间
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 1: 成功
*			 0: 失败
*/
UINT8 SetFloodGateCurYGJCrosLStartCnt(const UINT16 floodGateId,const UINT32 crossLineStartCount);

/*
* 功能描述： 获取指定ID防淹门防淹门接近区段占压延时关门开始时间
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防淹门混线开始时间
*/
UINT32 GetFloodGateDelayCloseStartCnt(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门防淹门接近区段占压延时关门开始时间
* 参数说明： const UINT16 floodGateId, 防淹门ID
*			 const UINT32 floodGateDelayCloseStartCount		延迟关门起始周期
* 返回值  ： void
*/
void SetFloodGateDelayCloseStartCnt(const UINT16 floodGateId, const UINT32 floodGateDelayCloseStartCount);

/*
* 功能描述： 获取指定ID防淹门关门申请列车数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防淹门关门申请列车数量
*/
UINT8 GetFloodGateCloseApplyIvocSum(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门关门申请列车数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
*			 const UINT8 wTrainSum ,防淹门关门申请列车数量
* 返回值  ： void
*/
void SetFloodGateCloseApplyIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum);

/*
* 功能描述： 获取指定ID防淹门关门申请列车ID
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防淹门关门申请列车ID
*/
UINT16* GetFloodGateCloseApplyIvocId(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门关门申请列车ID
* 参数说明： const UINT16 floodGateId, 防淹门ID
*			 const UINT16* applyIvocBuf	，申请的列车ID地址
* 返回值  ： void
*/
void SetFloodGateCloseApplyIvocId(const UINT16 floodGateId, const UINT16* applyIvocBuf);

/*
* 功能描述： 获取指定ID防淹门列车同意防淹门关门请求结构体
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0: 获取数据失败
*			>0: 列车同意防淹门关门请求结构体
*/
FloodGateTrainAnsStruct* GetFloodGateCloseFromIvocStru(const UINT16 floodGateId);


/*
* 功能描述： 设置指定ID防淹门列车同意防淹门关门请求标志
* 参数说明： UINT16 floodGateId, 防淹门ID
*			 UINT16 wTrainId, 列车ID
*			 UINT8 agreeFlag	允许关门标志
* 返回值  ： void
*/
void SetFloodGateAllowCloseFlagIVOC(UINT16 floodGateId, UINT16 wTrainId, UINT8 agreeFlag);


/*
* 功能描述： 清除指定ID防淹门列车同意防淹门关门请求标志
* 参数说明： UINT16 floodGateId, 防淹门ID
* 返回值  ： void
*/
void ClearFloodGateAllowClosFlagIVOC(UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门接近区段是否有UT占压标志
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防淹门接近区段是否有UT占压标志
*/
UINT8 GetFloodGateAccessUTFlag(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门接近区段是否有UT占压标志
* 参数说明： const UINT16 floodGateId, 防淹门ID
*			 const UINT8 accessUTFlag，是否有UT占压标志
* 返回值  ： void
*/
void SetFloodGateAccessUTFlag(const UINT16 floodGateId, const UINT8 accessUTFlag);

/*
* 功能描述： 获取指定ID防淹门列车回复允许关门列车数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防淹门列车回复允许关门列车数量
*/
UINT8 GetFloodGateCloseAnsIvocSum(const UINT16 floodGateId);

/*
* 功能描述： 设置指定ID防淹门列车回复允许关门列车数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
*			 const UINT8 wTrainSum ,列车回复允许关门列车数量
* 返回值  ： 0u: 获取数据失败
*			>0u: 防淹门列车回复允许关门列车数量
*/
void SetFloodGateCloseAnsIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum);

#endif