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

#ifndef _FLOODGATE_CONFIG_DATA_MANAGE_H_
#define _FLOODGATE_CONFIG_DATA_MANAGE_H_


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



#ifdef __cplusplus
extern "C" {
#endif

/*逻辑区段关联联络线道岔设备结构体*/
typedef struct S_FloodGate_AccessPhySec
{
	UINT16 AccessPhySecId;   /*接近区域物理区段ID*/
	UINT8 AccessPhySecDir;  /*接近区段接近方向*/
} FloodGateAccessPhySecStruct;

/*防淹门配置数据结构体*/
typedef struct S_FloodGateConfigDataStruct
{
    UINT16 FloodGateId;          /*防淹门ID (配置字段)*/
	UINT16 CloseApplyRelayId;				/*关门请求继电器ID (配置字段)*/
    UINT16 OpenLockRelayId;              /*开门且锁闭继电器ID (配置字段)*/
    UINT16 AllowCloseRelayId;		/*允许关门继电器ID (配置字段)*/

	UINT16 AccessPhySecNum;								/*防淹门接近物理区段数量（计算）*/
	FloodGateAccessPhySecStruct AccessPhySecStru[FLOOD_GATE_PROTECT_PHYSECTION_NUM_MAX];

	UINT16 AccessAxisNum;				/*防淹门接近区域计轴区段数量*/
	UINT16 AccessAxisId[FLOOD_GATE_ACCESS_AXIS_NUM_MAX];		/*防淹门接近区域计轴区段ID*/

	UINT16 ProtectPhySecNum;								/*防淹门防护物理区段数量（计算）*/
	UINT16 ProtectPhySecIdBuf[FLOOD_GATE_ACCESS_PHYSECTION_NUM_MAX]; /*防淹门防护物理区段id数组（计算）*/
	
	UINT16 ProtectAxisNum;				/*防淹门防护区域计轴区段数量*/
	UINT16 ProtectAxisId[FLOOD_GATE_PROTECT_AXIS_NUM_MAX];		/*防淹门防护区域计轴区段ID*/
	UINT8 BelongCiId;								/* 计算： 所属联锁ID */
	UINT8 BelongVirId;                                /*所属虚拟联锁ID*/
} FloodGateConfigDataStruct;

/*******************************全局变量声明*******************************/
extern FloodGateConfigDataStruct FloodGateConfigDataStru[FLOOD_GATE_SUM_MAX];   /*定义防淹门数据配置结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
extern UINT16 LocalCiFloodGateIdBuf[FLOOD_GATE_SUM_MAX];                   /*定义本地联锁防淹门ID映射数组*/
extern INT16 FloodGateCurSum;   /*防淹门当前总数*/
extern UINT16 TotalFloodGateNum;/*本联锁和相邻联锁发送给本联锁防淹门总数*/


/*
* 功能描述： 获取防淹门当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门当前总数
*/
UINT16 GetFloodGateCurSum(void);

/*
* 功能描述： 获取指定数组下标对应的防淹门ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门ID      
*/
UINT16 GetFloodGateId(const UINT16 bufIndex);

/*
* 功能描述： 获取指定ID防淹门数组下标
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门ID      
*/
UINT16 GetFloodGateBufIndex(const UINT16 floodGateId);

/*
* 功能描述： 获取指定数组下标对应的关门请求继电器ID
* 参数说明： const UINT16 floodGateId, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门ID      
*/
UINT16 GetFloodGateCloseApplyRelayId(const UINT16 floodGateId);

/*
* 功能描述： 获取指定数组下标对应的开门且锁闭继电器ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门ID      
*/
UINT16 GetFloodGateOpenLockRelayId(const UINT16 floodGateId);

/*
* 功能描述： 获取指定数组下标对应的允许请求继电器ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门ID      
*/
UINT16 GetFloodGateAllowRequestRelayId(const UINT16 floodGateId);
/*
* 功能描述： 获取指定ID防淹门所属联锁ID
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID
*/
UINT8 GetFloodGateBelongCiId(const UINT16 floodGateId);


/*
* 功能描述：	整理读入的防淹门配置数据
* 参数说明：	无
* 返回值  ：	1,整理成功
*				0,整理失败
*/
UINT8 FloodGateConfigDataManage(void);

/*
* 功能描述：	整理读入的相邻联锁防淹门数据
* 参数说明：	
*				UINT16 floodGateSum,			 相邻联锁发给本联锁的防淹门数量
*				const UINT16 *floodGateIdBuff,   相邻联锁发给本联锁的物理区段ID
* 返回值  ：	0-失败	1-成功
*/
UINT8 AddExtendFloodGateIdDataManage(UINT16 floodGateSum,const UINT16 *floodGateIdBuff);


/*
* 功能描述： 获取相邻联锁发送给本联锁以及本联锁防淹门当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门当前总数
*/
UINT16 GetTotalFloodGateCurSum(void);

/*
* 功能描述： 获取指定ID防淹门接近区域区段数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 接近区段数量
*/
UINT16 GetFloodGateAccessPhySecNum(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门接近区域区段信息结构体
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 接近区域区段结构体
*/
FloodGateAccessPhySecStruct* GetFloodGateAccessPhyDataStru(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门防护区域区段数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防护区域区段数量
*/
UINT16 GetFloodGateProtectPhySecNum(const UINT16 floodGateId);


/*
* 功能描述： 获取指定ID防淹门防护区域区段Id数组指针
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateProtectPhyIDBuf(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门所属联锁ID
* 参数说明： const UINT16 floodGateId, 防淹门ID    
* 返回值  ： 0u: 获取数据失败
*			>0u: 所属联锁ID
*/
UINT8 GetFloodGateBelongVirCiId(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门接近区域计轴区段数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防护区域区段数量
*/
UINT16 GetFloodGateAccessAxisNum(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门接近区域计轴区段Id数组指针
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateAccessAxisIDBuf(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门防护区域计轴区段数量
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防护区域区段数量
*/
UINT16 GetFloodGateProtectAxisNum(const UINT16 floodGateId);

/*
* 功能描述： 获取指定ID防淹门防护区域计轴区段Id数组指针
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateProtectAxisIDBuf(const UINT16 floodGateId);

#ifdef __cplusplus
}
#endif

#endif
