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

#ifndef _SWITCH_CONFIG_DATA_MANAGE_H_
#define _SWITCH_CONFIG_DATA_MANAGE_H_


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


#ifdef __cplusplus
extern "C" {
#endif


typedef struct S_SwitchConfigDataStruct
{
    UINT16 SwitchId;           /*道岔ID (配置字段)*/
	UINT8 BelongCiId;          /*所属联锁ID (配置字段)*/
	UINT16 BelongOcId;          /*所属OC ID (配置字段)*/
	UINT8 BelongVirCI;         /*所属虚拟联锁*/
	UINT16 DSwitchOtherId;     /*双动道岔另一个道岔ID (配置字段)*/
	UINT16 SwitchPhySecId;     /*道岔物理区段ID (配置字段)*/
	UINT16 SwitchPhySecIdNum;  /*多开道岔所属物理区段数量 (配置字段)*/
	UINT16 FcRelayId;          /*道岔反操继电器ID (配置字段)*/
	UINT16 ZDbRelayId;          /*道岔总定表继电器ID (配置字段)*/
	UINT16 ZFbRelayId;          /*道岔总反表继电器ID (配置字段)*/
	/*单轨与城市轨道交通公用继电器*/
	UINT16 DbRelayId;          /*道岔定表继电器ID (配置字段)  即单开定位表示继电器ID*/
	UINT16 FbRelayId;          /*道岔反表继电器ID (配置字段)   即单开反表表示继电器ID*/
	UINT16 YcRelayId;          /*道岔允操继电器ID (配置字段) 即单开定位操作继电器ID*/
	UINT16 DcRelayId;          /*道岔定操继电器ID (配置字段) 即单开反位操作继电器ID*/
	UINT16 wShadowDbRelayId;   /*影子模式道岔定表继电器ID (配置字段)  迪斯尼*/
	UINT16 wShadowFbRelayId;   /*影子模式道岔反表继电器ID (配置字段)  迪斯尼*/
	/*以下为单轨道岔相关继电器*/
	UINT16 GZJId;				/*故障继电器ID (配置字段)*/
	UINT16 JTYJaId;				/*现场状态继电器ID (配置字段)*/
	UINT16 QQJId;				/*现场请求继电器ID(配置字段)*/
	UINT16 SJFId;				/*锁闭继电器ID (配置字段)*/
	UINT16 TYJId;				/*同意现场控制继电器ID (配置字段)*/
	UINT16 ThreeNId;			/*三开N位表示继电器ID(配置字段)*/
	UINT16 ThreeLId;			/*三开L位表示继电器ID (配置字段)*/
	UINT16 ThreeRId;			/*三开R位表示继电器ID(配置字段)*/
	UINT16 FiveNId;			/*五开N位表示继电器ID (配置字段)*/	
	UINT16 FiveL1Id;			/*五开L1位表示继电器ID(配置字段)*/
	UINT16 FiveL2Id;			/*五开L2位表示继电器ID(配置字段)*/
	UINT16 FiveR1Id;			/*五开R1位表示继电器ID (配置字段)*/
	UINT16 FiveR2Id;			/*五开R2位表示继电器ID (配置字段)*/
	UINT16 ThreeNYCId;			/*三开N位操作继电器ID(配置字段)*/
	UINT16 ThreeLYCId;			/*三开L位操作继电器ID (配置字段)*/
	UINT16 ThreeRYCId;			/*三开R位操作继电器ID(配置字段)*/
	UINT16 FiveNYCId;			/*五开N位操作继电器ID (配置字段)*/	
	UINT16 FiveL1YCId;			/*五开L1位操作继电器ID(配置字段)*/
	UINT16 FiveL2YCId;			/*五开L2位操作继电器ID(配置字段)*/
	UINT16 FiveR1YCId;			/*五开R1位操作继电器ID (配置字段)*/
	UINT16 FiveR2YCId;			/*五开R2位操作继电器ID (配置字段)*/
	UINT16 DFHRelayId;			/*道岔的DFH继电器ID（配置字段）*/
	UINT16 HostSwitchIdBuf[SWITCH_HOST_SWITCH_MAX_NUM];/*主体道岔ID数组*/
	UINT16 HostSwitchNum;	/*主体道岔ID长度*/
	UINT16 SwitchLogSecSum;     /*道岔关联的逻辑区段数*/
	UINT16 SwitchLogSecIdBuf[SWITCH_LOG_TRACK_MAX_NUM]; /*道岔关联的逻辑区段数组*/
	UINT8 SwitchIsThisLine;       /*道岔是否本线路*/
	UINT16 DsRelayId;             /*道岔单锁继电器ID*/
	UINT16 DsQRelayId;            /*道岔单锁前节点继电器ID*/
	UINT16 DsHRelayId;            /*道岔单锁后节点继电器ID*/
	UINT16 ByPassRelayId;          /*道岔旁路继电器ID*/

	UINT16 wProtectSwitchNum;								/*防护道岔数组长度    add by qw.liu 2022-02-08*/
	UINT16 wszProtectSwitchIdBuf[SWITCH_PROTECT_SWITCH_MAX_NUM];/*防护主体道岔ID数组  add by qw.liu 2022-02-08*/

	UINT32 dwSwitchKilo;			/*道岔公里标*/
	UINT8 chKiloType;				/*公里标类型*/

	UINT16 DbDrvRelayId;          /*道岔定表驱动继电器ID (配置字段-联络线使用)*/
	UINT16 FbDrvRelayId;	      /*道岔反表驱动继电器ID (配置字段-联络线使用)*/
	UINT16 DsDrvRelayId;          /*道岔单锁驱动继电器ID (配置字段-联络线使用)*/
	UINT16 DsDrvQRelayId;         /*道岔单锁前节点驱动继电器ID (配置字段-联络线使用)*/
	UINT16 DsDrvHRelayId;         /*道岔单锁后节点驱动继电器ID (配置字段-联络线使用)*/
} SwitchConfigDataStruct;

typedef struct S_OC_SwitchConfigDataStruct
{
	UINT16 SwitchId;				/*道岔ID(配置字段)*/
	UINT16 BelongOcId;				/*所属OCID(配置字段)*/
}OCSwitchConfigDataStruct;

/*旧版OC道岔配置数据表*/
typedef struct S_OC_SwitchConfigDataStruct_2
{
	UINT16 SwitchId;				/*道岔ID(配置字段)*/
	UINT16 BelongOcId;				/*所属OCID(配置字段)*/
	UINT8  SwitchModuleIdAddrA;		/*A系道岔模块ID(配置字段)*/
	UINT8  SwitchMachinePosAddrA;	/*A系转辙机位置(配置字段)*/
	UINT8  SwitchModuleIdAddrB;		/*B系道岔模块ID(配置字段)*/
	UINT8  SwitchMachinePosAddrB;	/*B系转辙机位置(配置字段)*/
}OCSwitchConfigDataStruct_2;

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

/*
* 功能描述： 获取指定ID道岔索引号
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： SWITCH_SUM_MAX: 获取数据失败
*			<SWITCH_SUM_MAX: 查找成功
*/
UINT16 GetSwitchConfigBufIndex(const UINT16 switchId);

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

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

/*
* 功能描述： 获取指定ID道岔数据
* 参数说明：     
* 返回值  ： SwitchConfigDataStruct *   
*/
SwitchConfigDataStruct *GetSwitchConfigData(void);

/*
* 功能描述： 获取指定ID道岔所属联锁ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID      
*/
UINT8 GetSwitchBelongCiId(const UINT16 switchId);

/*
* 功能描述： 获取双动道岔另一个道岔ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 进路当前总数
*/
UINT16 GetDSwitchOtherId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔类型
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 道岔类型      
*/
UINT8 GetSwitchType(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔相关物理区段ID
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 相关物理区段ID      
*/
UINT16 GetSwitchPhySectionId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔定位表示继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 定位表示继电器ID      
*/
UINT16 GetSwitchDbRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔反位表示继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 反位表示继电器ID      
*/
UINT16 GetSwitchFbRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔允操继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 允操继电器ID      
*/
UINT16 GetSwitchYcRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔定操继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 允操继电器ID      
*/
UINT16 GetSwitchDcRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔反操继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 允操继电器ID      
*/
UINT16 GetSwitchFcRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔总定位表示继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 定位表示继电器ID      
*/
UINT16 GetSwitchZDbRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔总反位表示继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 反位表示继电器ID      
*/
UINT16 GetSwitchZFbRelayId(const UINT16 switchId);

/*
* 功能描述：	整理读入的道岔配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 SwitchConfigDataManage(void);

/*
* 功能描述：	整理读入的相邻联锁道岔配置数据
* 参数说明：	switchSum 道岔数量
*				switchIdBuff 相邻联锁发送给本联锁的道岔ID配置数据
* 返回值  ：	1,整理成功
*				0,整理失败
*/
UINT8 AddExtendSwitchIdDataManage(UINT16 switchSum,const UINT16 *switchIdBuff);

/*
* 功能描述： 获取相邻联锁发送给本联锁以及本联锁道岔当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 本联锁和相邻联锁发送给本联锁信号机总数
*/
UINT16 GetTotalSwitchCurNum(void);

/*
* 功能描述： 获取故障继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchGZJId(const UINT16 switchId);

/*
* 功能描述： 获取现场状态继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchJTYJaId(const UINT16 switchId);
/*
* 功能描述： 获取现场请求继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchQQJId(const UINT16 switchId);
/*
* 功能描述： 获取锁闭继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchSJFId(const UINT16 switchId);
/* zt 删除单轨相关代码 2022-02-15 */
/*
* 功能描述： 获取三开N位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchThreeNId(const UINT16 switchId);
/*
* 功能描述： 获取三开L位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchThreeLId(const UINT16 switchId);
/*
* 功能描述： 获取三开R位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchThreeRId(const UINT16 switchId);
/*
* 功能描述： 获取五开N位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveNId(const UINT16 switchId);
/*
* 功能描述： 获取五开L1位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveL1Id(const UINT16 switchId);
/*
* 功能描述： 获取五开L2位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveL2Id(const UINT16 switchId);
/*
* 功能描述： 获取五开R1位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveR1Id(const UINT16 switchId);
/*
* 功能描述： 获取五开R2位表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveR2Id(const UINT16 switchId);
/*
* 功能描述： 获取三开N位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchThreeNYCId(const UINT16 switchId);
/*
* 功能描述： 获取三开L位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchThreeLYCId(const UINT16 switchId);
/*
* 功能描述： 获取三开R位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchThreeRYCId(const UINT16 switchId);
/*
* 功能描述： 获取五开N位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveNYCId(const UINT16 switchId);
/*
* 功能描述： 获取五开L1位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveL1YCId(const UINT16 switchId);
/*
* 功能描述： 获取五开L2位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveL2YCId(const UINT16 switchId);
/*
* 功能描述： 获取五开R1位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveR1YCId(const UINT16 switchId);
/*
* 功能描述： 获取五开R2位操作继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔当前总数
*/
UINT16 GetSwitchFiveR2YCId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔DFH继电器ID
	* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: DFH继电器ID      
*/
UINT16 GetSwitchDFHRelayId(const UINT16 switchId);

/* zt 删除单轨相关代码 2022-02-15 */

/*
* 功能描述： 获取指定ID道岔相关主体道岔ID数组
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 相关主体道岔ID数组      
*/
UINT16* GetSwitchHostSwitchIdBuf(const UINT16	switchId);

/*
* 功能描述： 获取指定ID道岔主体道岔数目
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 相关主体道岔数量    
*/
UINT16 GetSwitchHostSwitchNum(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔所属Oc ID
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 所属Oc ID
*/
UINT16 GetSwitchBelongOcId(const UINT16 switchId);
/*
* 功能描述： 获取指定ID道岔所属虚拟联锁ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属虚拟联锁ID      
*/
UINT8 GetSwitchBelongVirCiId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔是否本线路
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 是否本线路      
*/
UINT8 GetSwitchIsThisLineState(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔单锁继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 单锁继电器ID      
*/
UINT16 GetSwitchDsRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔单锁前节点继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 单锁前节点继电器ID      
*/
UINT16 GetSwitchDsQRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔单锁后节点继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 单锁后节点继电器ID      
*/
UINT16 GetSwitchDsHRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔旁路继电器ID
* 参数说明： const UINT16 switchId, 道岔ID    
* 返回值  ： 0: 获取数据失败
*			>0: 旁路继电器ID      
*/
UINT16 GetSwitchByPassRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔关联的逻辑区段数
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 道岔关联的逻辑区段数
*/
UINT16 GetSwitchLogSecSum(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔关联的逻辑区段ID数组
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： NULL: 获取数据失败
*			非NULL: 关联的逻辑区段ID数组
*/
UINT16* GetSwitchLogSecBuf(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔防护道岔数目
* 参数说明： const UINT16 wSwitchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 相关主体道岔数量
* 创建	  ： qw.liu 2022-03-01
*/
UINT16 GetSwitchProtectSwitchNum(const UINT16 wSwitchId);

/*
* 功能描述： 获取指定ID道岔相关防护道岔道岔ID数组
* 参数说明： const UINT16 wSwitchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 相关主体道岔ID数组
* 创建	  ： qw.liu 2022-03-01
*/
UINT16* GetSwitchProtectSwitchIdBuf(const UINT16 wSwitchId);

/*
* 功能描述： 获取指定ID道岔影子模式反位表示继电器ID
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 反位表示继电器ID
*/
UINT16 GetSwitchShadowFbRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔影子模式定位表示继电器ID
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 定位表示继电器ID
*/
UINT16 GetSwitchShadowDbRelayId(const UINT16 switchId);

/**
* @brief 获取道岔公里标
* @param const UINT16 switchId 道岔ID
* @return 道岔所处公里标
*/
UINT32 GetSwitchKmById(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔反位驱动继电器ID（联络线使用）
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 反位驱动继电器ID
*/
UINT16 GetSwitchFbDrvRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔定位驱动继电器ID（联络线使用）
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 定位驱动继电器ID
*/
UINT16 GetSwitchDbDrvRelayId(const UINT16 switchId);

/*
* 功能描述： 获取指定ID道岔单锁驱动继电器ID（联络线使用）
* 参数说明： const UINT16 switchId, 道岔ID
* 返回值  ： 0: 获取数据失败
*			>0: 定位驱动继电器ID
*/
UINT16 GetSwitchDsDrvRelayId(const UINT16 switchId);
#ifdef __cplusplus
}
#endif

#endif
