/********************************************************
*                                                                                                            
* 文 件 名： OverlapConfigDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-19
* 作    者： 联锁组
* 功能描述： 保护区段配置数据管理头文件  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _OVERLAP_CONFIG_DATA_MANAGE_H_
#define _OVERLAP_CONFIG_DATA_MANAGE_H_


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



#ifdef __cplusplus
extern "C" {
#endif


/*保护区段条件道岔结构体*/
typedef struct S_Overlap_Condition_Switch
{
    UINT16 SwitchId;      		/*道岔ID (配置字段)*/
	UINT8 SwitchPosition;      	/*道岔位置(参见道岔位置定义) (配置字段)*/
} OverlapConditionSwitchStruct;

/*保护区段防护道岔结构体*/
typedef struct S_Overlap_Protect_Switch
{
	UINT16 ProtectSwitchId;      		/*防护道岔ID (配置字段)*/
	UINT8 ProtectPosition;      	    /*防护位置(配置字段)*/
} OverlapProtectSwitchStruct;


/*保护区段配置数据结构体*/
typedef struct S_OverlapConfigDataStruct
{
    UINT16 OverlapId;            													/*保护区段组ID (配置字段)*/
	UINT8 BelongCiId;																/*保护区段组所属联锁ID (配置字段)*/
	UINT8 BelongVirCiId;															/*保护区段组所属虚拟联锁ID (配置字段)*/
	UINT8 PhySecSum;            													/*包含物理区段数目 (配置字段)*/ 
	UINT16 PhySecIdBuf[OVERLAP_PHYSEC_SUM_MAX];  									/*包含物理区段ID数组 (配置字段)*/
	UINT8 SwitchSum;      	    													/*包含道岔数目 (配置字段)*/
	OverlapConditionSwitchStruct ConditionSwitchStru[OVERLAP_CONDISWIT_SUM_MAX];	/*条件道岔结构数组(配置字段)*/
	UINT8 ProtectSwitchSum;                                                         /*关联防护道岔道岔数目 (配置字段)*/
	OverlapProtectSwitchStruct ProtectSwitchStru[OVERLAP_PROTECTSWI_SUM_MAX];       /*关联防护道岔结构数组 (配置字段)*/
	UINT8 TriPhySecSum;         													/*自动信号overlap道岔触发物理区段数目 (配置字段)*/ 
	UINT16 TriPhySecIdBuf[OVERLAP_TRIGPHYSEC_SUM_MAX];    							/*自动信号overlap道岔触发物理区段ID数组 (配置字段)*/
	UINT8 RetRoutAndTrkPhySecSum;													/*保护区段包含折返进路及折返轨物理区段总数*/ 
	UINT16 ReturnRouteIdBuf[OVLP_RETROUTSEC_N_RETTRKPHYSEC_SUM_MAX];				/*折返进路ID数组*/
	UINT16 RetTrkPhySecIdBuf[OVLP_RETROUTSEC_N_RETTRKPHYSEC_SUM_MAX];				/*折返轨物理区段ID数组*/	
	UINT8 InvSecAndConSwiSum;														/*保护区段包含侵限区段及条件道岔总数*/ 
	UINT16 InvSecAndConSwiIdBuf[OVLP_INVASECT_N_CONDSWIT_SUM_MAX];					/*侵限区段及条件道岔数组*/
	UINT16 InvOppOverlapIdBuff[OVLP_INVA_OPP_OVLP_SUM_MAX];							/*侵限敌对保护区段数组*/
	UINT8 InvOppOverlapSum;															/*侵限敌对保护区段总数*/
	UINT16 FloodGateIdBuff[OVLP_FLOODGATE_SUM_MAX];							        /*关联防淹门数组(配置字段)*/
	UINT8 FloodGateIdSum;	                                                        /*关联防淹门总数(配置字段)*/

	/*  2022-2-28，车车新增 */
	UINT8 cLogicSectionSum;															/* 保护区段包含的逻辑区段数量 */
	UINT16 szLogicSectionIdBuf[OVLP_LOGICSECTION_SUM_MAX];							/* 保护区段包含逻辑区段ID数组,未根据锁闭方向考虑区段顺序 */
	UINT16 OverlapRouteSum;															/*保护区段进路总数*/
	UINT16 OverlapRouteIdBuf[OVERLAP_ROUTE_SUM_MAX];								/*保护区段进路数组*/
	UINT16 AxisSecFarId;                                						    /*保护区段最远端计轴区段ID*/
	UINT16 wOverlapThisZhaoChaRelayId;                                              /*保护区段本端照查继电器ID*/
	UINT16 wOverlapThatZhaoChaRelayId;                                              /*保护区段对端照查继电器ID*/
} OverlapConfigDataStruct;

extern OverlapConfigDataStruct OverlapConfigDataStru[OVERLAP_SUM_MAX];   /*定义OVERLAP数据配置结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
extern UINT16 LocalCiOverlapIdBuf[OVERLAP_SUM_MAX];                   /*定义本地联锁保护区段组ID映射数组*/
extern INT16 OverlapCurSum;   /*OVERLAP当前总数*/
/*
* 功能描述： 获取保护区段当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 保护区段当前总数
*/
UINT16 GetOverlapCurSum(void);

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

/*
* 功能描述： 获取保护区段所属联锁ID
* 参数说明： UINT16 overlapId, 保护区段组ID 
* 返回值  ： 0: 获取数据失败
*			>0: 保护区段所属联锁ID
*/
UINT8 GetOverlapBelongCiId(UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段数据
* 参数说明：    
* 返回值  ： OverlapConfigDataStruct *   
*/
OverlapConfigDataStruct *GetOverlapConfigData(void);

/*
* 功能描述： 获取指定ID保护区段索引号
* 参数说明： const UINT16 overlapId, 保护区段ID
* 返回值  ： OVERLAP_SUM_MAX: 获取数据失败
*			<OVERLAP_SUM_MAX: 查找成功
*/
UINT16 GetOverlapConfigBufIndex(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段组包含物理区段数目
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 包含物理区段数目      
*/
UINT8 GetOverlapPhySecSum(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段组包含物理区段ID数组
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 包含物理区段ID数组指针      
*/
UINT16* GetOverlapPhySecIdBuf(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段组包含道岔数目
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 包含道岔数目      
*/
UINT8 GetOverlapSwitchSum(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段关联防护道岔数目
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 包含保护区段组数目      
*/
UINT8 GetOverlapRelatedProtSwitSum(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段组包含条件道岔结构体数组
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 包含条件道岔结构体数组指针      
*/
OverlapConditionSwitchStruct* GetOverlapCondSwitchStruct(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段关联防护道岔结构数组
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 包含条件保护区段组结构体数组指针      
*/
OverlapProtectSwitchStruct* GetOverlapRelatedProtSwitStru(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段组自动信号overlap道岔触发物理区段数目
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动信号overlap道岔触发物理区段数目      
*/
UINT8 GetOverlapTriPhySecSum(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段组自动信号overlap道岔触发物理区段数组
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 自动信号overlap道岔触发物理区段数组指针      
*/
UINT16* GetOverlapTriPhySecIdBuf(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段第一个物理区段ID
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 物理区段ID      
*/
UINT16 GetOverlapFirstPhySecId(const UINT16 overlapId);

/*
* 功能描述：	整理读入的保护区段组配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 OverlapConfigDataManage(void);

/*
* 功能描述： 获取指定ID保护区段锁闭条件包含折返进路数目
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 包含折返进路数目
*/
UINT8 GetOvlpRetRoutAndTrkPhySecSum(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段锁闭条件包含折返轨物理区段数目
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 包含折返轨物理区段数目
*/
UINT8 GetOverlapRetTrkPhySecSum(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段锁闭条件包含折返进路ID
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 折返进路ID
*/
UINT16 GetOverlapReturnRouteId(const UINT16 overlapId, const UINT16 index);

/*
* 功能描述： 获取指定ID保护区段锁闭条件包含折返轨物理区段ID
* 参数说明： const UINT16 overlapId, 保护区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 折返轨物理区段ID
*/
UINT16 GetOverlapRetTrkPhySecId(const UINT16 overlapId, const UINT16 index);

/*
功能描述: 	获得指定保护区段关联的侵限区段及条件道岔数据数量
输入参数:	无
输出参数:	无
返回值:		[1, 65535]侵限区段及条件道岔数据数量
				0 无侵限区段或获取失败
*/
UINT16 GetOverlapInvSecAndConSwiSum(const UINT16 overlapId);

/*
功能描述: 	获得指定保护区段关联的侵限区段及条件道岔数据ID
输入参数:	无
输出参数:	无
返回值:		[1, 65535]侵限区段及条件道岔数据ID
				0 无侵限区段或获取失败
*/
UINT16 GetOverlapInvSecAndConSwiId(const UINT16 overlapId, const UINT16 index);


/*
功能描述: 	获得指定保护区段关联的侵限敌对保护区段数据数量
输入参数:	const UINT16 overlapId 保护区段ID
输出参数:	无
返回值:		[1, 65535]侵限敌对保护区段数据数量
				0 无侵限敌对保护区段或获取失败
*/
UINT16 GetOverlapInvOppOverlapSum(const UINT16 overlapId);

/*
功能描述: 	获得指定保护区段关联的侵限敌对保护区段ID
输入参数:	const UINT16 overlapId 保护区段ID
				const UINT16 index	 侵限敌对保护区段数据索引
输出参数:	无
返回值:		[1, 65535]侵限敌对保护区段数据ID
				0 无侵限敌对保护区段或获取失败
*/
UINT16 GetOverlapInvOppOverlapId(const UINT16 overlapId, const UINT16 index);

/*
功能描述: 	获得指定保护区段关联的防淹门数据数量
输入参数:	const UINT16 overlapId 保护区段ID
输出参数:	无
返回值:		[1, 65535]防淹门数据数量
				0 无防淹门或获取失败
*/
UINT16 GetOverlapFloodGateSum(const UINT16 overlapId);

/*
功能描述: 	获得指定保护区段关联的防淹门数据ID
输入参数:	const UINT16 overlapId 保护区段ID
输出参数:	无
返回值:		防淹门id数组指针
*/
UINT16* GetOverlapFloodGateBuf(const UINT16 overlapId);

/*
* 功能描述：	整理读入的相邻联锁保护区段配置数据
* 参数说明：	overlapSum 进路数量
*				overlapIdBuff 相邻联锁发送给本联锁的保护区段ID配置数据
* 返回值  ：	1,整理成功
*				0,整理失败
*/
UINT8 AddExtendOverlapIdDataManage(UINT16 overlapSum,const UINT16 *overlapIdBuff);

/*
* 功能描述： 获取保护区段所属虚拟联锁ID
* 参数说明： UINT16 overlapId, 保护区段组ID    
* 返回值  ： 0: 获取数据失败
*			>0: 保护区段所属虚拟联锁ID
*/
UINT8 GetOverlapBelongVirCiId(UINT16 overlapId);

/*
*功能描述: 	获得指定保护区段包含的逻辑区段数量
*输入参数:	const UINT16 overlapId 保护区段ID
*输出参数:	无
*返回值:	[0, 255]逻辑区段数量
*/
UINT8 GetOverlapLogicSectionSum(const UINT16 overlapId);

/*
功能描述: 	获获得指定保护区段包含的逻辑区段ID数组
输入参数:	const UINT16 overlapId 保护区段ID
输出参数:	无
返回值:		逻辑区段id数组指针
*/
UINT16* GetOverlapLogicSectionBuf(const UINT16 overlapId);
/*
功能描述: 	获得指定保护区段所属的进路ID数量
输入参数:	const UINT16 overlapId 保护区段ID
输出参数:	无
返回值:		[1, 65535]所属的进路ID数量
0 获取失败
修改：cgh-合并CID-2341-8：
*/
UINT16 GetOverlapRouteIdSum(const UINT16 overlapId);

/*
功能描述: 	获得指定保护区段所属的进路ID数组
输入参数:	const UINT16 overlapId 保护区段ID
输出参数:	无
返回值:		进路id数组指针
修改：cgh-合并CID-2341-8：
*/
UINT16* GetOverlapRouteIdBuf(const UINT16 overlapId);


/*
*功能描述: 	获得指定保护区段包含的最远端计轴
*输入参数:	const UINT16 overlapId 保护区段ID
*输出参数:	无
*返回值:	0 查询失败
*       >0 计轴区段ID
*/
UINT16 GetOverlapFarLogicSecID(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段第一个逻辑区段ID
* 参数说明： const UINT16 overlapId, 保护区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 逻辑区段ID
* by cgh 20240923
*/
UINT16 GetOverlapFirstLogSecId(const UINT16 overlapId);

/*
* 功能描述：判断其它控区保护区段是否存在防护道岔属于本控区
* 参数说明：const UINT16 wOverlapId 保护区段ID
* 返 回 值：0 不存在防护道岔跨控区的保护区段
*		   >0 保护区段所属联锁ID
* Created By LQ 2024.12.03
*/
UINT8 CheckOtherCiOlpHaveLocalCiPSw(const UINT16 wOverlapId);

/*
* 功能描述：获取保护区段指定防护道岔的防护位置
* 参数说明：const UINT16 wOverlapId 保护区段ID
*           const UINT16 wProSwitchId 防护道岔ID
* 返 回 值：0 失败
*			其它 防护位置
* Created By LQ 2024.12.05
*/
UINT8 GetOverlapProSwitchPos(const UINT16 wOverlapId, const UINT16 wProSwitchId);

/*
* 功能描述： 获取指定ID保护区段本端照查继电器ID
* 参数说明： const UINT16 overlapId, 保护区段ID
* 返回值  ： 本端照查继电器ID
* by cgh 20250617
*/
UINT16 GetOverlapThisZhaoChaRelayId(const UINT16 overlapId);

/*
* 功能描述： 获取指定ID保护区段对端照查继电器ID
* 参数说明： const UINT16 overlapId, 保护区段ID
* 返回值  ： 对端照查继电器ID
* by cgh 20250617
*/
UINT16 GetOverlapThatZhaoChaRelayId(const UINT16 overlapId);

#ifdef __cplusplus
}
#endif

#endif
