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

#ifndef _PHYSICAL_SECTION_CONFIG_DATA_MANAGE_H_
#define _PHYSICAL_SECTION_CONFIG_DATA_MANAGE_H_


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



#ifdef __cplusplus
extern "C" {
#endif

/*直接相邻区段检查条件计轴结构体*/
typedef struct S_AdjacentSec_Condition_AcBuf
{
	UINT8 RelateAcNum;  /*条件计轴数量*/
	UINT16 AcIdBuf[PHYSICAL_INCLUDE_AXIS_SUM_MAX];	/*条件计轴ID数组*/
}NeighborSecConditionAcStruct;

typedef struct S_PhysicalSectionConfigData
{
    UINT16 PhysicalSectionId;      /*物理区段ID (配置字段)*/
	UINT8 BelongCiId;              /*所属联锁ID (配置字段)*/
	UINT8 BelongVirCI;               /*所属虚拟CI*/
	UINT16 BelongOcId;              /*所属OC ID (配置字段)*/
	UINT8 managedByZcFlag;         /*是否由ZC管辖(配置字段)*/
	UINT8 PhySecType;              /*物理区段类型(无岔区段/有岔区段) (配置字段)*/
	UINT8 LjkSecFlag;              /*列检库区段标志(非列检库区段/列检库区段) (配置字段)*/
	UINT8 QcxSecFlag;              /*牵出线区段标志(非牵出线区段/牵出线区段) (配置字段)*/
	UINT16 GdRelayId;              /*轨道继电器ID (配置字段)*/
	UINT16 wGdRelayId2;            /*轨道继电器ID2 (配置字段) 迪斯尼*/
	UINT16 RepGdRelayId;		/*复视轨道继电器ID*/
    UINT16 FWRelayId;              /*复位继电器ID (配置字段)*/
	UINT8 spksNum;				   /* 该物理区段对应的spks数量 计算 */
	UINT16 spksIdBuff[PHYSICAL_SECTION_SPKS_MAX_NUM];				/* 该物理区段对应spksId列表 */
	UINT8 relateOutStationSignalNum;				   /* 该物理区段对应的出站信号机数量 计算 */
	UINT16 relateOutStationSignalIdBuff[PHY_SEC_REL_OUTSTATION_SIGNAL_MAX_NUM];				/* 该物理区段对应出站信号机Id列表 */
	UINT32 trackSecBuf[PHY_SEC_TRACK_SEC_MAX_SUM];/*物理区段包含的轨道区段ID数组*/
	UINT8 trackSecNum;/*物理区段包含的轨道区段数量*/
	UINT16 proLockRouteIdBuf[PHY_SEC_PRO_LOCK_ROUTE_MAX_NUM];/*物理区段保护锁闭对应的进路ID数组*/
	UINT8 proLockRouteSum;/*物理区段保护锁闭对应的进路ID数量*/
	UINT16 ZFWRelayId;              /*总复位继电器ID (配置字段)*/
	UINT16 PreResetRelayId;      /*计轴预复位状态继电器ID (配置字段)*/
	UINT16 RepRelayTrainId;           /*复示轨道继电器ID (配置字段)*/
	UINT8  AxisSectionSum;            /*包含计轴区段数目 (配置字段)*/
	UINT16 AxisSectionIdBuf[PHYSICAL_INCLUDE_AXIS_SUM_MAX];   /*物理区段包含计轴区段ID数组 (初始化字段)*/
	UINT8 SecInvSecAndConSwiSum;													/*区段包含侵限区段及条件道岔总数*/ 
	UINT16 SecInvSecAndConSwiId[SEC_INVASECT_N_CONDSWIT_SUM_MAX];					/*侵限区段及条件道岔数组*/
	UINT16 LocatedFloodGateSum;		/*物理区段关联防淹门数量*/
	UINT16 LocatedFloodGateId[FLOOD_GATE_SUM_MAX];		/*所在防淹门Id*/
	UINT16 BelongAxleSysID;         /*物理区段所属计轴子系统ID*/
	UINT8 PhyIsThisLine;        /*物理区段是否本线路*/
	UINT16 ZFWShowRelayId;      /*计轴总复位表示灯*/
	UINT16 PhyIncludeSwitch[PHYSICAL_INCLUDE_SWITCH_SUM_MAX];/*定义物理区段包含道岔ID*/
	UINT8 PhyIncludeSwitchSum;/*定义物理区段包含道岔数目*/
	UINT16 wReleatedGd;	/* 关联车库门ID */
	UINT8  LogSectionSum;            /*包含逻辑区段数目 (配置字段)*/
	UINT16 LogSectionIdBuf[PHYSICAL_INCLUDE_LOG_SUM_MAX];   /*物理区段包含逻辑区段ID数组 (初始化字段)*/
	UINT16 GdDrvRelayId;              /*轨道驱动继电器ID (配置字段-联络线使用)*/
	UINT8 chAdjacentPhySecNum;  /*物理区段直接相邻物理区段数量*/
	UINT8 chNearPhySecNum;  /*物理区段单位距离非直接相邻内物理区段数量*/
	UINT32 wPhySecLen;			/*物理区段长度：关联最短计轴长度*/
	UINT16 AdjacentPhySecBuf[PHYSEC_ADJACENT_SEC_SUM_MAX];  /*物理区段直接相邻物理区段数组*/
	NeighborSecConditionAcStruct AdjacentSecAcData[PHYSEC_ADJACENT_SEC_SUM_MAX];/*直接相邻区段的检查计轴*/
	UINT16 IndirectNearPhySecBuf[PHYSEC_INDIRECTNEAR_SEC_SUM_MAX];  /*单位距离内内间接邻近物理区段数组*/
	NeighborSecConditionAcStruct TransitAcData[PHYSEC_INDIRECTNEAR_SEC_SUM_MAX];/*到间接相邻区段的跳转计轴*/
	UINT8 chArbPossibleTag; /*是否能判Arb*/
	UINT16 wIndexInAxle; /*在计轴系统中的索引*/
} PhysicalSectionConfigDataStruct;




typedef struct S_OC_PhysicalSectionConfigDataStruct
{
	UINT16 PhysicalSectionId;				/*物理区段ID(配置字段)*/
	UINT16 BelongOcId;						/*所属OCID(配置字段)*/
	UINT8  PhysicalSectionModuleIdAddrA;	/*A系物理区段模块ID(配置字段)*/
	UINT8  PhysicalSectionPosAddrA;			/*A系物理区段位置(配置字段)*/
	UINT8  PhysicalSectionModuleIdAddrB;	/*B系物理区段模块ID(配置字段)*/
	UINT8  PhysicalSectionPosAddrB;			/*B系物理区段位置(配置字段)*/
}OCPhysicalSectionConfigDataStruct;


/*******************************全局变量声明*******************************/
extern PhysicalSectionConfigDataStruct PhysicalSectionConfigDataStru[PHYSICAL_SECTION_SUM_MAX];   /*定义物理区段数据配置结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
extern UINT16 LocalCiPhysicalSectionIdBuf[PHYSICAL_SECTION_SUM_MAX];                   /*定义本地联锁物理区段ID映射数组*/
extern INT16 PhysicalSectionCurSum;
extern UINT16 totalPhysicalSectionNum;

/*
* 功能描述： 获取指定ID物理区段索引号
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： PHYSICAL_SECTION_SUM_MAX: 获取数据失败
*			<PHYSICAL_SECTION_SUM_MAX: 查找成功
*/
UINT16 GetPhySecConfigBufIndex(const UINT16 phySectionId);

/*
* 功能描述： 获取物理区段当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 物理区段当前总数
*/
UINT16 GetPhySecCurSum(void);
/*
* 功能描述： 获取指定ID包含计轴区段数目
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 征用状态      
*/
UINT8 GetPAxisSectionSum(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段包含计轴区段数组
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 逻辑区段ID数组指针  
*/
UINT16* GetPAxisSectionIdBuf(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段数据
* 参数说明：  
* 返回值  ： 
			PhysicalSectionConfigDataStruct*      
*/
PhysicalSectionConfigDataStruct* GetPhySecConfigData(void);

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

/*
* 功能描述： 获取指定ID物理区段所属联锁ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID      
*/
UINT8 GetPhySecBelongCiId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段类型
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 物理区段类型      
*/
UINT8 GetPhySecType(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段列检库区段标志
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 列检库区段标志      
*/
UINT8 GetPhySecLjkFlag(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段牵出线区段标志
* 参数说明： const UINT16 phySectionId, 区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 牵出线区段标志：0x55非牵出线 0xAA牵出线区段
* Create fan 20260415
*/
UINT8 GetPhySecQcxFlag(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段轨道继电器ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 轨道继电器ID      
*/
UINT16 GetPhySecGdRelayId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段复位继电器ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 复位继电器ID      
*/
UINT16 GetPhySecFWRelayId(const UINT16 phySectionId);

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

/*
* 功能描述： 获取指定物理区段SPKS的开关数
* 参数说明： phySecId
* 返回值  ： spks数量
*/
UINT8 GetPhySecSpksSum(UINT16 phySecId);

/*
* 功能描述： 获取指定物理区段 指定下表的SPKS的ID
* 参数说明： phySecId，物理区段
*			 spksIdIdx Spks下标
* 返回值  ： >0 spksId  0 出错
*/
UINT16 GetPhySecSpksIdBySpksIdx(UINT16 phySecId,UINT16 idx);

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

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

/*
* 功能描述： 获取以指定物理区段为外方第一物理区段的信号机数目
* 参数说明： phySecId
* 返回值  ： 信号机数量
*/
UINT8 GetPhySecAsOutFirstPhySecSigSum(UINT16 phySecId);

/*
* 功能描述： 获取以指定物理区段为外方第一物理区段的信号机ID
* 参数说明： phySecId，物理区段
*			 sigIdIdx 信号机下标
* 返回值  ： >0 sigId 0 :出错
*/
UINT16 GetPhySecAsOutFstPhySecSigId(UINT16 phySecId,UINT16 idx);

/*
* 功能描述： 获取指定ID轨道区段所属的物理区段ID
* 参数说明： const UINT16 trackSectionId, 轨道区段ID
* 返回值  ： ERROR: 获取数据失败
*			>0: 物理区段ID
*/
UINT16 GetTrackToPhySectionId(const UINT32 trackSectionId);

/*
* 功能描述： 获取指定物理区段保护锁闭时可能对应的进路ID数组
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ： 
	指定物理区段保护锁闭时可能对应的进路ID数组
*/
UINT16* GetPhySecProLockRouteIdBuf(const UINT16 phySecId);
/*
* 功能描述： 获取指定物理区段保护锁闭时可能对应的进路ID数量
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ：
指定物理区段保护锁闭时可能对应的进路ID数量
*/
UINT8 GetPhySecProLockRouteSum(const UINT16 phySecId);

/*
* 功能描述： 设置互联互通联锁到联锁通信接口物理区段上电锁闭状态
* 参数说明： UINT16 phySectionId，物理区段ID
*			const UINT8 lockState， 上电锁闭状态
* 返回值  ： 无
*          CI_ERROR，失败
*/
void SetPhySecStartLockStateHlht(UINT16 phySectionId, const UINT8 lockState);

/*
* 功能描述： 获取指定ID物理区段总复位继电器ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 总复位继电器ID      
*/
UINT16 GetPhySecZFWRelayId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段是否属于ZC管辖区域标志
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			0x55: 物理区段属于ZC管辖区域 
*			0xAA: 物理区段不属于ZC管辖区域
*/
UINT8 GetPhySecManagedByZcFlag(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段侵限物理区段数目
* 参数说明： const UINT16 phySectionId, 物理区段ID      
* 返回值  ： 0: 获取数据失败
*			>0: 侵限物理区段数目
*/
UINT8 GetSecIntrudePhySectionSum(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段侵限区段数组
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 侵限物理区段结构指针
*/
UINT16* GetSecIntrudePhySectionData(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段计轴预复位状态继电器ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 计轴预复位状态继电器ID      
*/
UINT16 GetPhySecPreResetRelayId(const UINT16 phySectionId);


/*
* 功能描述： 获取指定ID物理区段所在的防淹门数量
* 参数说明： const UINT16 phySectionId, 区段ID
* 返回值  ： 0: 没有防淹门
*			>0:	防淹门数量
*/
UINT16 GetPhySecLocatedFloodSum(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段所在的防淹门Id
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 没有防淹门
*			>0: 防淹门Id      
*/
UINT16* GetPhySecLocatedFloodId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID 物理区段复示轨道继电器ID
* 参数说明： const UINT16 phyId
* 返回值  ：  0: 获取数据失败
*		 >0: 物理区段复视轨道继电器ID
*/
UINT16 GetPhySecRepGdRelayId(const UINT16 phyId);

/*
* 功能描述： 获取指定ID物理区段所属的计轴子系统Id
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ： 0: 获取失败
*			 >0: 计轴子系统Id
*/
UINT8 GetPhySecBelongAxisSysId(const UINT16 phySecId);

/*
* 功能描述： 获取指定ID物理区段所属虚拟联锁ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属虚拟联锁ID      
*/
UINT8 GetPhySecBelongVirCiId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段总复位表示灯
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 总复位表示灯      
*/
UINT16 GetPhySecZFWShowRelayId(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段包含道岔
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 返回道岔ID数组		       
*/
UINT16* GetPhySecIncludeSwitch(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段包含道岔数目
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0:失败
*            >0:成功
*			       
*/
UINT8 GetPhyIncludeSwitchSum(const UINT16 phySectionId);
/*
* 功能描述： 设置指定ID物理区段包含道岔
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 失败
*			 1:成功       
*/
UINT8 SetPhySecIncludeSwitch(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段轨道继电器ID2
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 轨道继电器ID
*/
UINT16 GetPhySecGdRelayId2(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段关联车库门ID
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 物理区段关联车库门ID
*/
UINT16 GetPhySecReleatedGdId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定物理区段关联的逻辑区段Id数组
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ：获取指定物理区段关联的逻辑区段Id数组
*/
UINT16* GetPhySecIncLogSecIdBuf(const UINT16 phySecId);

/*
* 功能描述： 获取指定物理区段关联的逻辑区段数量
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ： 获取指定物理区段关联的逻辑区段数量
*/
UINT8 GetPhySecIncLogSecSum(const UINT16 phySecId);

/*
* 功能描述： 获取指定ID物理区段轨道驱动继电器ID
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 轨道驱动继电器ID
*/
UINT16 GetPhySecGdDrvRelayId(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段长度
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 物理区段关联最短计轴区段长度
*/
UINT32 GetPhySecRelayMinAcLen(const UINT16 phySectionId);
/*
* 功能描述： 获取指定ID物理区段是否本线路
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 是否本线路
*/
UINT8 GetPhyIsThisLineState(const UINT16 phySectionId);
/*
* 功能描述：添加物理区段直接相邻区段数组和物理区段长度
* 参数说明： const UINT16 wPhySecId
* 返回值  ：无
*Create fan 20240822
*/
void AddAdjacentPhySec(const UINT16 wPhySecId);
/*
* 功能描述：添加物理区段范围内相邻区段数组
* 参数说明： const UINT16 wPhySecId
* 返回值  ：无
*Create fan 20240822
*/
void AddNearPhySec(const UINT16 wPhySecId);
/*
* 功能描述：获取物理区段范围内直接相邻区段数量
* 参数说明： const UINT16 wPhySecId
* 返回值  ：直接相邻区段数量
* Create fan 20240822
*/
UINT8 GetAdjacentPhySecNum(const UINT16 wPhySecId);
/*
* 功能描述： 获取物理区段范围内直接相邻区段数组
* 参数说明： const UINT16 wPhySecId, 区段ID
* 返回值  ： NULL: 无
*			!NULL: 直接相邻区段数组id
* Create fan 20240822
*/
UINT16* GetAdjacentPhySecBuf(const UINT16 wPhySecId);
/*
* 功能描述：检查物理区段已有邻近范围内有无该区段 无则添加
* 参数说明： const UINT16 wPhySecId 待检查区段，UINT16 basePhysec基准，wPrePhySecId 直接相邻跳转区段,wSndPreSec一步间接跳转
* 返回值  ：CI_SUCCESS 新添加 CI_ERROR 已有
*Create fan 20240822
*/
UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId, const UINT16 wSndPreSec);

/*
* 功能描述：获取物理区段范围内间接相邻区段数量
* 参数说明： const UINT16 wPhySecId
* 返回值  ：间接相邻区段数量
* Create fan 20240822
*/
UINT8 GetNearPhySecNum(const UINT16 wPhySecId);

/*
* 功能描述： 获取物理区段范围内间接相邻区段数组
* 参数说明： const UINT16 wPhySecId, 区段ID
* 返回值  ： NULL: 无
*			!NULL:间接相邻区段数组id
* Create fan 20240822
*/
UINT16* GetIndirectNearPhySecBuf(const UINT16 wPhySecId);
/*
* 功能描述：	整理读入的物理区段配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
* 创建： fan 2024/08/23
*/
UINT8 PhySectionNearConfigDataManage(void);
/*
* 功能描述： 获取物理区段可否判断为Arb
* 参数说明： const UINT16 wPhySecId, 区段ID
* 返回值  ：CI_SUCCESS CI_ERROR配置数据不满足
* Create fan 20240822
*/
UINT8 GetPhyPossibleArbTag(const UINT16 wPhySecId);
/*
* 功能描述： 设置物理区段可否判断为Arb
* 参数说明： const UINT16 wPhySecId, 区段ID，UINT8 chArbTag
* 返回值  ：void
* Create fan 20240822
*/
void SetPhyPossibleArbTag(const UINT16 wPhySecId, UINT8 chArbTag);

/*
* 功能描述： 通过计轴系统的区段序号获取物理区段ID
* 参数说明： const UINT8 chAxleId 计轴系统ID
* 参数说明： const UINT16 wIndexInAxle, 计轴系统的区段序号
* 返回值  ： 0:失败
*            >0:物理区段ID
* by cgh 20250415
*/
UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle);
/*
* 功能描述：添加直接相邻区段检查计轴数据
* 参数说明： const UINT16 wPhySecId 物理区段 UINT8 chIndex相邻区段索引 UINT16 AcId计轴ID
* 返回值  ：无
*Create fan 20260303
*/
void AddNeighborPhyConditionAc(const UINT16 wPhySecId, UINT8 chIndex, UINT16 AcId);

/*
* 功能描述： 获取指定ID物理区段的ARB防护范围区段的跳转计轴序列
* 参数说明： const UINT16 phySectionId, 物理区段ID  UINT16 wNearSecID相邻区段
* 返回值  ： 0: 获取数据失败
*			>0: 计轴区段ID数组指针
*Create fan 202604010
*/
UINT16* GetPhySecNearSecTransitAcBuf(const UINT16 phySectionId, const UINT16 wNearSecID);

/*
* 功能描述： 获取指定ID物理区段的ARB防护范围区段的跳转计轴数量
* 参数说明： const UINT16 phySectionId, 物理区段ID  UINT16 wNearSecID相邻区段
* 返回值  ： 0: 获取数据失败
*			>0: 计轴区段ID数组指针
*Create fan 202604010
*/
UINT8 GetPhySecNearSecTransitAcNum(const UINT16 phySectionId, const UINT16 wNearSecID);
/*
* 功能描述：检查间接相邻区段的上一跳转区段是否属于区段的直接相邻范围
* 参数说明： const UINT16 wPhySecId，const UINT16 wPreSecId
* 返回值  ：CI_SUCCESS 是 CI_ERROR否
* Create fan 20260303
*/
UINT8 CheckPhySecIfAdjacent(const UINT16 wPhySecId, const UINT16 wPreSecId);

/*
* 功能描述：获取物理区段直接相邻区段条件计轴检查结果(是否可达)
* 参数说明： const UINT16 wPhySecId UINT16 wNearSec 直接相邻区段
* 返回值  ：直接相邻区段条件计轴检查结果 CI_ERROR不可达 CI_SUCCESS可达
* Create fan 20260303
*/
UINT8 GetAdjacentPhySecAcCheck(const UINT16 wPhySecId, UINT16 wNearSec);

/*
* 功能描述：获取存在跳转计轴时 一步间隔相邻区段是否可达
* 参数说明： constUINT16 wBasePhySec基准区段   wTransitAcId 跳转计轴区段
* 返回值  ：CI_ERROR不可达 CI_SUCCESS可达
* Create fan 20260410
*/
UINT8 GetTransitPhySecAcCheck(const UINT16 wBasePhySec , UINT16 wTransitAcId);


/*
* 功能描述：检查在物理区段中获取符合条件的跳转计轴ID
* 参数说明： const UINT16 wPhySecId 待检查区段，UINT16 basePhysec基准区段，wAdjPhySecId 间接区段的上一跳转区段
* 返回值  ：CI_SUCCESS 新添加 CI_ERROR 已有
*Create fan 20260410
*/
UINT16 GetTransitAcFromPreSec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId);

/*
* 功能描述：检查在二步间接物理区段中获取符合条件的跳转计轴ID
* 参数说明： const UINT16 wPhySecId 待检查区段，UINT16 basePhysec基准，wAdjPhySecId 直接相邻跳转区段,wSndPreSec一步间接跳转
* 返回值  ：0未找到 >0 计轴ID
*Create fan 20260410
*/
UINT16 GetSndTransitAcFromPreSce(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wAdjPhySecId, const UINT16 wSndPreSec);

#ifdef __cplusplus
}
#endif

#endif
