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

#ifndef _PHYSICAL_SECTION_DATA_MANAGE_H_
#define _PHYSICAL_SECTION_DATA_MANAGE_H_


#include "SectionDefine.h"
#include "PhysicalSectionConfigDataManage.h"
#include "AxisSectionConfigDataManage.h"
#include "LogicSectionConfigDataManage.h"
#include "CommonTypes.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../System/CiSystemDefine.h"
#include "../LogRecord/LogRecord.h"

#ifdef __cplusplus
extern "C" {
#endif


/*物理区段数据结构体*/
typedef struct S_PhysicalSectionDataStruct
{
    UINT16 PhysicalSectionId;         /*物理区段ID (初始化字段)*/
	UINT8 SecUseState;                /*物理区段征用状态(未征用/征用) (动态字段)*/
	UINT16 SecUseBelongRouteId;	      /*区段进路征用所属进路ID (动态字段)*/
	UINT16 SecProUseBelongRouteId;    /*区段防护征用所属进路ID (动态字段)，同一物理区段进路征用和防护征用的进路id不可能相等*/
	
	UINT16 SecUseBelongLogRouteId;     /*区段进路征用所属逻辑进路ID (动态字段)*/
	UINT8 LockState;                  /*物理区段锁闭状态 (动态字段)*/
    UINT8 FLockState;                 /*物理区段封锁状态 (动态字段)*/
	UINT16 RLockBelongRouteId;	      /*区段进路锁闭所属进路ID (动态字段)*/
	UINT16 PLockBelongRouteId;        /*区段防护锁闭所属进路ID (动态字段)*/
	UINT16 OtherCiPLockBelongRouteId;   /*其它控区发送的区段防护锁闭所属进路ID (动态字段)*/
	UINT8 LockDirection;              /*物理区段锁闭方向 (动态字段)*/
	UINT8 PreOccupyState;   	      /*之前采集状态(空闲/占用) (动态字段)*/
	UINT8 CurOccupyState;   	      /*当前采集状态(空闲/占用) (动态字段)*/
	UINT8 PreMergeOccupyState;        /*之前融合后状态(空闲/占用) (动态字段)*/
	UINT8 CurMergeOccupyState;        /*当前融合后状态(空闲/占用) (动态字段)*/
	UINT8 PreAndMergeOccupyState;      /*之前与占用原则融合后状态(空闲/占用) (动态字段)*/
	UINT8 CurAndMergeOccupyState;      /*当前与占用原则融合后状态(空闲/占用) (动态字段)*/

	/*宋家庄站全电子联锁需要使用 OC轨道占用状态与当前计轴轨道占用状态进行融合*/
	UINT8 PreOcGdOccupyState;		/*之前oc轨道占用状态(动态字段)*/
	UINT8 CurOcGdOccupyState;		/*当前oc轨道占用状态(动态字段)*/
	UINT8 PreAxleGdOccupyState;		/*之前计轴轨道占用状态(动态字段)*/
	UINT8 CurAxleGdOccupyState;		/*当前计轴轨道占用状态(动态字段)*/

	UINT8 ArbState;                   /*ARB状态 (动态字段)*/
	UINT8 StopSteadyFlag;             /*区段停稳信息(未停稳/停稳) (动态字段)*/
	UINT32 SecColOccupyStartCycNum;   /*区段采集占用起始周期 (动态字段)*/
    UINT32 SecCurOccupyStartCycNum;   /*区段当前占用开始周期 (动态字段)*/
	UINT32 SecOccuToClearStartCycNum; /*区段占用变空闲开始周期 (动态字段)*/
	UINT32 AutoUnlockStartCycNum;     /*自动解锁延时开始周期 (动态字段)*/
    UINT32 FaultUnlockStartCycNum;    /*区故解解锁延时开始周期 (动态字段)*/
	UINT8 SectionResetType;		  /*区段计轴复位类型*/
    UINT32 SectionResetStartCycNum;   /*区段计轴复位开始周期 (动态字段)*/
	UINT8  ProtectSecLockDelayTimeFlag;/*保护区段锁闭延时标志(动态字段)*/
	UINT8  StopCheckFlag;			   /*物理区段停止检查标志(未设置/设置) (动态字段)*/
	UINT8 JumpLockState;               /*跳跃锁闭状态 (动态字段)*/
	UINT8 PhySecPreResetState;         /*计轴预复位状态 (动态字段)*/
	UINT8 chPreResetBack;              /*预复位命令反馈*/
	UINT8 chDirectResetRst;            /*直接复位结果*/
	UINT8 chDirectResetBack;           /*直接复位命令反馈*/
	UINT32 SecJumpDelayUnlockStartCycNum; /*区段跳跃锁闭延时解锁开始周期 (动态字段)*/
	UINT8 JumpLockDelayUnlockFlag;		/*跳跃锁闭延时解锁设置标志（动态字段）*/
	UINT32 LockDelayStartCycNum;		/* 物理区段延时锁闭起始周期号(动态字段) */
	UINT8 FLockType;/*物理区段封锁产生的原因，可能是SPKS导致，也可能是现地封锁区段导致。该区段主要用于SPKS恢复重开信号逻辑*/
	UINT8 UtOrCtOccFlag;			/*在解锁保护区段时，记录上一个周期进路内最后一个物理区段车的占用类型*/
	UINT32 UtOrCtOccuStartCycNum;   /*区段当前占用开始周期 (动态字段)，当占用类型变化时需重新赋值*/
	UINT8	JumpLockStateToZC;/*给ZC发送的跳跃锁闭状态*/
	UINT16 wPhyErrUnlockTime;/*物理区段区故解延时时间*/
	UINT8 cAreaUrgentBrakeState;  /*区域紧急制动状态*/

	UINT16 StopSteadyTrainId;			/*停稳列车ID*/
	UINT8 chABLTrainFlag; /*是否ABL列车标志 0xaa是ABL占用*/
	UINT8 chPreABLTrainFlag; /*上一周期ABL列车标志 0xaa是ABL占用 每周期更新*/
	UINT32 dwAblTagSetCyc; /*ABL标志设置周期*/
	UINT8 cPhySecInHumidRailFlag;  /*物理区段湿轨标志：0x55 无效；0xAA 有效*/
} PhysicalSectionDataStruct;

extern PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX];   /*定义物理区段数据结构体*/

/*
* 功能描述： 清除区段防护锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID      
* 返回值:	1:成功
			0:失败              
*/
UINT16 ClearPhySecPLock(const UINT16 phySectionId);

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

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

/*
* 功能描述： 设置指定ID物理区段征用状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 useState, 征用状态
*            const UINT16 routeId, 进路ID
* 返回值  ： void   
*/
void SetPhySecUseState(const UINT16 phySectionId, const UINT8 useState, const UINT16 routeId);

/*
* @brief 设置指定ID物理区段的逻辑征用状态
* @param const UINT16 phySectionId, 物理区段ID
*         const UINT8 useState, 征用状态
*         const UINT16 routeId, 逻辑进路ID
* @return 无
* @note：by cgh 20231010
*/
UINT8 SetPhySecUseStateByLogRoute(const UINT16 phySectionId, const UINT8 useState, const UINT16 logrouteId);

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

/*
* 功能描述： 获取指定ID物理区段征用所属逻辑进路ID
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 征用所属进路ID
*/
UINT16 GetPhySecUseLogRouteId(const UINT16 phySectionId);

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

/*
* 功能描述： 设置指定ID物理区段锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 lockState, 锁闭状态
*            const UINT16 routeId, 进路ID
*            const UINT8 lockDirection, 锁闭方向
* 返回值  ： 无
*			      
*/
void SetPhySecLockState(const UINT16 phySectionId, const UINT8 lockState, const UINT16 routeId, const UINT8 lockDirection);

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

/*
* 功能描述： 设置指定ID物理区段封锁状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 fLockState, 封锁状态
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetPhySecFLockState(const UINT16 phySectionId, const UINT8 fLockState);

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

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

/*
* 功能描述：设置指定物理区段防护锁闭所属进路ID
* 参数说明：const UINT16 wPhySectionId 物理区段ID
*           const UINT16 wPLockRouteId 防护锁闭所属进路ID
* 返 回 值：无
* Created By LQ 2024.06.11
*/
void SetPhySecPLockRouteId(const UINT16 wPhySectionId, const UINT16 wPLockRouteId);

/*
* 功能描述： 获取指定ID物理区段防护锁闭所属进路ID
* 参数说明： const UINT16 phySectionId, 区段ID
* 返回值  ： 防护锁闭所属进路ID
*/
UINT16 GetPhySecPLockBelongRouteId(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段之前采集状态
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 之前采集状态      
*/
UINT8 GetPhySecPreOccupyState(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段之前采集状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 preCollState, 之前采集状态
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetPhySecPreOccupyState(const UINT16 phySectionId, const UINT8 preCollState);

/*
* 功能描述： 获取指定ID物理区段当前采集状态
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 当前采集状态      
*/
UINT8 GetPhySecCurOccupyState(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段当前采集状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curCollState, 当前采集状态
* 返回值  ： 无
*			        
*/
void SetPhySecCurOccupyState(const UINT16 phySectionId, const UINT8 curCollState);

/*
* 功能描述： 获取指定ID物理区段之前融合状态
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 当前融合状态      
*/
UINT8 GetPhySecPreMergeState(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段当前融合状态
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 当前融合状态      
*/
UINT8 GetPhySecCurMergeState(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段当前与占用原则融合状态
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 当前融合状态      
*/
UINT8 GetPhySecCurAndMergeState(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段当前融合状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curProcState, 当前融合状态
* 返回值  ： 无
*			       
*/
void SetPhySecCurMergeState(const UINT16 phySectionId, const UINT8 curProcState);

/*
* 功能描述： 设置指定ID物理区段当前与占用原则融合状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curProcState, 当前融合状态
* 返回值  ： 无
*			        
*/
void SetPhySecCurAndMergeState(const UINT16 phySectionId, const UINT8 curProcState);

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

/*
* 功能描述： 设置指定ID物理区段停稳状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 stopSteadyState, 停稳状态
* 返回值  ：无
*			       
*/
void SetPhySecStopSteadyFlag(const UINT16 phySectionId, const UINT8 stopSteadyState);

/*
* 功能描述： 获取指定ID物理区段占用持续周期计数
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 占用持续周期计数      
*/
UINT32 GetSecCurOccupyStartCycNum(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段占用变空闲持续周期计数
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 占用持续周期计数      
*/
UINT32 GetSecOccuToClearStartCycNum(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段占用持续周期计数
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 cycCount, 占用持续周期计数
* 返回值  ：无
*			        
*/
void SetSecCurOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 设置指定ID物理区段占用变空闲持续周期计数
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 cycCount, 占用持续周期计数
* 返回值  ： 无
*			   
*/
void SetSecOccuToClearStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 获取指定ID物理区段自动解锁起始周期号
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动解锁起始周期号      
*/
UINT32 GetPhySecAutoUnlockStartCycNum(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段自动解锁起始周期号
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT32 startCycNum, 自动解锁起始周期号
* 返回值  ： 无
*			       
*/
void SetPhySecAutoUnlockStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 获取指定ID物理区段区故解解锁起始周期号
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动解锁起始周期号      
*/
UINT32 GetPhySecFaultUnlockStartCycNum(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段区故解解锁起始周期号
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT32 startCycNum, 自动解锁起始周期号
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetPhySecFaultUnlockStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 物理区段锁闭状态有效性检查
* 参数说明： const UINT8 lockState, 锁闭状态
* 返回值  ： 0: 数据无效
*			 1: 数据有效
*/
UINT8 PhySecLockStateValidCheck(const UINT8 lockState);

/*
* 功能描述： 清除指定ID物理区段之前融合状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curProcState, 当前融合状态
* 返回值  ： 无 
*			       
*/
void CleanPhySecPreMergeState(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段计轴复位起始周期号
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 计轴复位起始周期号      
*/
UINT32 GetPhySecResetStartCycNum(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段计轴复位起始周期号
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT32 startCycNum, 计轴复位起始周期号
* 返回值  ： 无
*			        
*/
void SetPhySecResetStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

UINT8 GetPhySecSectionResetType(const UINT16 phySectionId);

void SetPhySecSectionResetType(const UINT16 phySectionId, const UINT8 resetType);

/*
* 功能描述： 设置非本联锁指定ID物理区段锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 lockState, 锁闭状态
*            const UINT16 routeId, 进路ID
*            const UINT8 lockDirection, 锁闭方向
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetPhySecLockStateOtherCI(const UINT16 phySectionId, const UINT8 lockState, const UINT16 routeId, const UINT8 lockDirection);


/*
* 功能描述： 获取指定ID保护区段延时锁闭标志
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 计轴复位起始周期号      
*/
UINT8 GetProtectSecLockDelayTimeFlag(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID保护区段延时锁闭标志
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT32 startCycNum, 计轴复位起始周期号
* 返回值  ： 无
*			    
*/
void SetProtectSecLockDelayTimeFlag(const UINT16 phySectionId, const UINT8 delayTimeFlag);

/*
* 功能描述： 比较两个物理区段占用时间
* 参数说明： const UINT16 phySectionId, 本物理区段ID
*			 const UINT16 otherSectionId,  另外一个物理区段ID
* 返回值  ： 0: 失败
*			 1: 成功      
*/
UINT8 CompareOccuTime(const UINT16 sectionId, const UINT16 otherSectionId);

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

/*
* 功能描述： 设置指定ID物理区段Arb状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 arbState, Arb状态
* 返回值  ： 无
*			    
*/
void SetPhySecArbState(const UINT16 phySectionId, const UINT8 arbState);

/*
* 功能描述： 获取指定ID物理区段停止检查状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*           >0: 停止检查状态
*/
UINT8 GetPhySectionStopCheckFlag(const UINT16 phySectionId);


/*
* 功能描述： 设置指定ID物理区段停止检查状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*            const UINT8 stopCheckState, 停止检查状态
* 返回值  ： 无
*             
*/
void SetPhySectionStopCheckFlag(const UINT16 phySectionId, const UINT8 stopCheckState);

/*
* 功能描述： 获取指定ID物理区段跳跃锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭状态      
*/
UINT8 GetPhySecJumpLockState(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段跳跃锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 jumpLockState, 跳跃锁闭状态
* 返回值  ： 无
*			        
*/
void SetPhySecJumpLockState(const UINT16 phySectionId, const UINT8 jumpLockState);

/*
* 功能描述： 获取指定ID物理区段跳跃锁闭延时解锁起始周期号
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭延时解锁起始周期号      
*/
UINT32 GetPhySecJumpDelayUnlocStartCyc(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段跳跃锁闭延时解锁起始周期号
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT32 startCycNum, 跳跃锁闭延时解锁起始周期号
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetPhySecJumpDelayUnlocStartCyc(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 获取指定ID物理区段跳跃锁闭延时解锁设置标志
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*           >0: 跳跃锁闭延时解锁设置标志
*/
UINT8 GetPhySecJumpDelayUnlockFlag(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段跳跃锁闭延时解锁设置标志
* 参数说明： const UINT16 phySectionId, 物理区段ID
*            const UINT8 jumpDelayUnlockFlag, 跳跃锁闭延时解锁设置标志
* 返回值  ： 0: 设置数据失败
*            1: 设置数据成功
*/
UINT8 SetPhySecJumpDelayUnlockFlag(const UINT16 phySectionId, const UINT8 jumpDelayUnlockFlag);
/*
* 功能描述： 设置指定ID物理区段之前融合状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curProcState, 之前融合状态
* 返回值  ： 无
*			        
*/
void SetPhySecPreMergeState(const UINT16 phySectionId, const UINT8 preProcState);
/*
* 功能描述： 获取物理区段封锁状态标志
* 参数说明：UINT16 phySecId   物理区段Id
* 返回值  ： 未封锁: SPKS_STATUS_NO
*			 封锁: SPKS_STATUS_YES      
*/
UINT8 GetPhySecFlockFlag(UINT16 phySecId);


/*
* 功能描述： 获取指定ID物理区段延时锁闭起始周期号
* 参数说明： const UINT16 phySectionId, 区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 延时解锁起始周期号      
*/
UINT32 GetPhySecLockDelayStartCycNum(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段延时锁闭起始周期号
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT32 startCycNum, 延时锁闭起始周期号
* 返回值  ： 无
*			       
*/
void SetPhySecLockDelayStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 置所有物理区段的停稳信息为未停稳
* 参数说明： void
* 返回值  ： void      
*/
void ResetPhySecStopSteadyInfo(void);

/*
* 功能描述： 设置互联互通其它联锁物理区段锁闭状态
* 参数说明：
UINT16 phySectionId, 物理区段ID
const UINT8 lockState,锁闭状态
* 返回值  ：
无
*/
void SetPhySecLockStateHlht(UINT16 phySectionId, const UINT8 lockState);
/*
* 功能描述： 设置互联互通其它联锁物理区段进路锁闭所属的进路ID
* 参数说明：
UINT16 phySectionId, 物理区段ID
const UINT16 routeId,物理区段进路锁闭所属进路ID
* 返回值  ：
无
*/
void SetPhySecRLockRouteIdHlht(UINT16 phySectionId, const UINT16 routeId);
/*
* 功能描述： 设置互联互通其它联锁物理区段保护锁闭所属的进路ID
* 参数说明：
UINT16 phySectionId, 物理区段ID
const UINT16 routeId,物理区段保护锁闭所属的进路ID
* 返回值  ：
无
*/
void SetPhySecPLockRouteIdHlht(UINT16 phySectionId, const UINT16 routeId);

/*
* 功能描述： 设置互联互通其它联锁物理区段的锁闭方向
* 参数说明：
UINT16 phySectionId, 物理区段ID
const UINT8 lockDir,物理区段锁闭方向
* 返回值  ：
无
*/
void SetPhySecLockDirHlht(UINT16 phySectionId, const UINT8 lockDir);

/*
* 功能描述： 设置物理区段封锁类型
* 参数说明：
UINT16 phySectionId, 物理区段ID
const UINT8 fLockType,物理区段封锁类型
* 返回值  ：
无
*/
void SetPhySecFLockType(const UINT16 phySectionId, const UINT8 fLockType);

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

/*
* 功能描述： 获取计轴总复位继电器状态有效性
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ： CI_ERROR 无效
			CI_SUCCESS 有效
*/
UINT8 GetZFWValidByPhySecId(const UINT16 phySecId);

/*
* 功能描述： 获取计轴总复位继电器状态有效性
* 参数说明： const UINT16 ciId, ciId
* 返回值  ： UINT16 relayId, 总复位继电器ID
*/
UINT16 GetZFWRelayId(const UINT16 ciId);
/*
* 功能描述： 获取计轴总复位继电器状态有效性
* 参数说明： const UINT16 ciId, ciId
* 返回值  ： UINT16 relayId, 总复位继电器ID
*/
UINT16 GetZFWRelayId_UseVirCI(const UINT16 ciId,UINT8 virCIid);

/*
* 功能描述： 设置指定ID物理区段UT或CT占用起始周期号
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const  UINT32 startCycNum, 区段占用起始周期号
* 返回值  ： 无
*			  
*/
void SetSecUtOrCtOccuStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述： 获取指定ID物理区段UT或CT占用持续周期计数
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ：  0: 获取数据失败
*			>0: 占用持续周期计数     
*/
UINT32 GetSecUtOrCtOccuStartCycNum(const UINT16 phySectionId);

/*
* 功能描述：获取指定ID物理区段当前CT或UT占用状态
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ：0: 获取数据失败
*			0x55 无车占用 0xaa存在UT 0xbb存在CT
*/
UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId);

/*
* 功能描述：获取指定ID物理区段当前通信车占用状态
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ：0: 获取数据失败
*			>0: 当前占用状态
*/
UINT8 GetPhySecCurTxOccupyState(const UINT16 phySecId);

/*
* 功能描述： 获取指定ID物理区段CT或UT占用状态
* 参数说明： const UINT16 phySecId, 物理区段ID
* 返回值  ：0: 获取数据失败
*			>0: 当前占用状态
*/
UINT8 GetPhySecPreOccState(const UINT16 phySecId);

/*
* 功能描述： 设置指定ID物理区段CT或UT占用状态
* 参数说明： const UINT16 phySecId, 物理区段ID
			 const UINT8 flag 物理区段之前CT或UT占用状态
* 返回值  ： 无
*			   
*/
void SetPhySecPreOccState(const UINT16 phySecId, const UINT8 flag);

/*
* 功能描述： 设置指定ID物理区段当前计轴预复位状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 preResetState, 计轴预复位状态
* 返回值  ： 无
*			        
*/
void SetPhySecPreResetState(const UINT16 phySectionId, const UINT8 preResetState);

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

/*
* 功能描述： 设置指定ID物理区段当前计轴直接复位状态
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
*			 const UINT8 chResetState, 计轴直接复位状态
* 返回值  ： 无
* by cgh 20250326
*/
void SetPhySecDirectResetState(const UINT16 wPhySectionId, const UINT8 chResetState);

/*
* 功能描述： 获取指定ID物理区段计轴直接复位状态
* 参数说明： const UINT16 wPhySecId, 物理区段ID
* 返回值  ：0: 获取数据失败
*			>0: 当前计轴直接复位状态
* by cgh 20250326
*/
UINT8 GetPhySecDirectResetState(const UINT16 wPhySecId);

/*
* 功能描述： 设置指定ID物理区段当前计轴预复位反馈状态
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
*			 const UINT8 chPreResetBack, 计轴预复位反馈状态
* 返回值  ： 无
* by cgh 20250326
*/
void SetPhySecPreResetBack(const UINT16 wPhySectionId, const UINT8 chPreResetBack);

/*
* 功能描述： 获取指定ID物理区段计轴预复位反馈状态
* 参数说明： const UINT16 wPhySecId, 物理区段ID
* 返回值  ：0: 获取数据失败
*			>0: 当前计轴预复位反馈状态
* by cgh 20250326
*/
UINT8 GetPhySecPreResetBack(const UINT16 wPhySecId);

/*
* 功能描述： 设置指定ID物理区段当前计轴直接复位反馈状态
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
*			 const UINT8 chResetBack, 计轴直接复位反馈状态
* 返回值  ： 无
* by cgh 20250326
*/
void SetPhySecDirectResetBack(const UINT16 wPhySectionId, const UINT8 chResetBack);

/*
* 功能描述： 获取指定ID物理区段计轴直接复位反馈状态
* 参数说明： const UINT16 wPhySecId, 物理区段ID
* 返回值  ：0: 获取数据失败
*			>0: 当前计轴直接复位反馈状态
* by cgh 20250326
*/
UINT8 GetPhySecDirectResetBack(const UINT16 wPhySecId);


/*
* 功能描述： 获取指定ID物理区段给ZC的跳跃锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭状态      
*/
UINT8 GetPhySecJumpLockStateToZC(const UINT16 phySectionId);


/*
* 功能描述： 设置指定ID物理区段给ZC的跳跃锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 jumpLockState, 跳跃锁闭状态
* 返回值  ： 无
*			    
*/
void SetPhySecJumpLockStateToZC(const UINT16 phySectionId, const UINT8 jumpLockState);


/*
* 功能描述： 获取指定ID物理区段当前Oc的轨道采集状态
* 参数说明： const UINT16 phySectionId, 区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 当前采集状态
*/
UINT8 GetPhySecCurOcGdOccupyState(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段当前Oc轨道采集状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curCollState, 当前采集状态
* 返回值  ： 无
*			  
*/
void SetPhySecCurOcGdOccupyState(const UINT16 phySectionId, const UINT8 curCollState);

/*
* 功能描述： 设置指定ID物理区段当前计轴占用采集状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 curCollState, 当前采集状态
* 返回值  ： 0: 设置失败
*			 1: 设置成功
*/
UINT8 SetPhySecCurAxisGdOccupyState(const UINT16 phySectionId, const UINT8 curCollState);

/*
* 功能描述： 获取指定ID物理区段当前计轴区段轨道采集状态
* 参数说明： const UINT16 phySectionId, 区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 当前采集状态
*/
UINT8 GetPhySecCurAxisGdOccupyState(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段关联计轴区段ARB状态
* 参数说明：  UINT16 phySecId, 物理区段ID
*			  UINT8 arbState, arb状态
* 返回值  ： CI_ERROR: 设置失败
*			 1: 设置成功      
*/
void SetPhyContainAxisSecArbState(UINT16 phySecId,UINT8 arbState);
/*
* 功能描述： 设置指定ID物理区段防护征用状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 useState, 征用状态
*            const UINT16 routeId, 进路ID
* 返回值  ：void     
*/
void SetPhySecProtectUseState(const UINT16 phySectionId, const UINT8 useState, const UINT16 routeId);
/*
* 功能描述： 获取指定ID物理区段防护征用所属进路ID
* 参数说明： const UINT16 phySectionId, 物理区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 征用所属进路ID      
*/
UINT16 GetPhySecProtectUseRouteId(const UINT16 phySectionId);

/**
* @brief ARB设置处理函数
* @note 包络管理计算之后，调用此函数，设置所有物理区段的ARB状态
*/
void SetPhySecArbStateProc(void);

/*
* 功能描述： 获取指定的物理区段的计轴区段
* 参数说明： const UINT16 wPhySecId, 物理区段ID
* 返回值  ： UINT16_MAX 失败;其他 成功
*/
UINT16 GetAxisSecIdByPhySecIdAndSwSta(const UINT16 wPhySecId);

/*
* 功能描述： 根据逻辑区段跳跃锁闭状态设置物理区段跳跃锁闭状态
* 参数说明： const UINT16 logSectionId, 逻辑区段ID
* 返回值  ： 无
*/
void SetLogRelaPhySecJumpLockSta(const UINT16 logSectionId);
/*
* 功能描述： 检查物理区段是否被指定的SPKS封锁
* 参数说明： const UINT16 phySecId, 物理区段ID
			 const UINT16 spksId，指定的SPKS ID
* 返回值  ： 0: 检查失败
*			 1: 检查成功
* cgh-合并CID-2539-1
*/
UINT8 CheckPhySecFlockBlongSpks(const UINT16 phySecId, const UINT16 spksId);

/*
* 功能描述： 设置指定ID物理区段包含逻辑区段跳跃锁闭状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
*			 const UINT8 jumpLockState, 跳跃锁闭状态
* 返回值  ：无
* by-cgh-20230628-清除物理区段跳跃锁闭状态时同时清除逻辑区段跳跃锁闭状态
*/
void SetPhyIncludeLogJumpLockState(const UINT16 phySectionId, const UINT8 jumpLockState);

/*
* 功能描述： 设置物理区段延时区故解时间
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
*			const UINT16 wPhyErrUnlockTime 物理区段延时区故解时间
* by cgh 20230630 相邻联锁传递倒计时
*/
void SetPhyErrUnlockTime(const UINT16 wPhySectionId, const UINT16 wPhyErrUnlockTime);

/*
* 功能描述： 获物理区段延时区故解时间
* 参数说明： const UINT16 wLogSectionId, 物理区段ID
* 返回值：倒计时时间
* * by cgh 20230630 相邻联锁传递倒计时
*/
UINT16 GetPhyErrUnlockTime(const UINT16 wPhySectionId);

/*
* 功能描述：设置指定ID物理区段区域紧急制动状态
* 参数说明：const UINT16 wPhySecId 物理区段ID
*		    const UINT8 cAreaUrgentState 区域紧急制动状态
* 返回值  ：无
* Created By LQ 2023.11.09
*/
void SetPhySecAreaUrgentState(const UINT16 wPhySecId, const UINT8 cAreaUrgentState);

/*
* 功能描述：获取指定ID物理区段区域紧急制动状态
* 参数说明：const UINT16 wPhySecId 物理区段ID
* 返回值  ：0 获取失败
*          >0 区域紧急制动状态
* Created By LQ 2023.11.09
*/
UINT8 GetPhySecAreaUrgentState(const UINT16 wPhySecId);

/*
* 功能描述： 设置物理区段停稳列车ID
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
*			const UINT16 wPhyStopSteadyTrainId 物理区段停稳列车ID
*/
void SetPhyStopSteadyTrainId(const UINT16 wPhySectionId, const UINT16 wPhyStopSteadyTrainId);

/*
* 功能描述： 获物物理区段停稳列车ID
* 参数说明： const UINT16 wLogSectionId, 物理区段ID
* 返回值：物理区段停稳列车ID
*/
UINT16 GetPhyStopSteadyTrainId(const UINT16 wPhySectionId);

/*
* 功能描述： 获取指定ID物理区段的最小限速取值
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
* 返回值  ： UINT8_MAX: 获取数据失败
*			>0: 临时限速取值
* BY CGH 20240429
*/
UINT8 GetPhySecMinXiansuSpeed(const UINT16 wPhySectionId);

/*
* 功能描述：设置其它CI发送的物理区段防护锁闭所属进路ID
* 参数说明：const UINT16 wPhySectionId 物理区段ID
*           const UINT16 wPLockRouteId 防护锁闭所属进路ID
* 返 回 值：无
* Created By LQ 2024.06.11
*/
void SetPhySecOtherCiPLockRouteId(const UINT16 wPhySectionId, const UINT16 wPLockRouteId);

/*
* 功能描述：获物其它CI发送的物理区段防护锁闭所属进路ID
* 参数说明：const UINT16 wPhySectionId 物理区段ID
* 返 回 值：其它CI发送的物理区段防护锁闭所属进路ID
* Created By LQ 2024.06.11
*/
UINT16 GetPhySecOtherCiPLockRouteId(const UINT16 wPhySectionId);

/*
* 功能描述：获取指定ID物理区段防护锁闭所属进路命令发送标志
* 参数说明：const UINT16 wPhySecId 物理区段ID
* 返回值  ：CI_ERROR 0 不发送
*			CI_SUCCESS 1 发送
* Created By LQ 2024.06.11
*/
UINT8 GetPhySecPLockRouteCmdSendFlag(const UINT16 wPhySecId);

/*
* 功能描述： 获取指定ID物理区段ABL列车占用
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			0xaa ABL车占用 0x55 非ABL
*	Created By fan 2024.08.15
*/
UINT8 GetPhySecABLTrainFlag(const UINT16 phySectionId);

/*
* 功能描述： 获取指定ID物理区段之前ABL列车占用标志
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0: 获取数据失败
*			0xaa ABL车占用 0x55 非ABL
*	Created By fan 2024.08.15
*/
UINT8 GetPhySecPreABLTrainFlag(const UINT16 phySectionId);

/*
* 功能描述：设置指定ID物理区段ABL列车占用并更新设置周期
* 参数说明： const UINT16 phySectionId, 物理区段ID  ablTrainFlag 是否列车 0xaa是/0x55否
* 返回值  ：无
*	Created By fan 2024.08.15
*/
void SetPhySecABLTrainFlag(const UINT16 phySectionId, UINT8 ablTrainFlag);
/*
* 功能描述： 获取指定ID物理区段坏车占用标志
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： 0x55 未设置坏车占用 0xaa 坏车占用
*	Created By fan 2024.08.19
*/
UINT8 GetPhySecUTTrainFlag(const UINT16 phySectionId);

/*
* 功能描述： 设置指定ID物理区段内计轴区段坏车占用
* 参数说明： const UINT16 phySectionId, 物理区段ID, 坏车占用标志
* 返回值  ： 无
*	Created By fan 2024.08.19
*/
void SetPhySecUTTrainFlag(const UINT16 phySectionId, UINT8 ablTrainFlag);

/*
* 功能描述：获取指定ID物理区段湿轨标志
* 参数说明：const UINT16 phySectionId, 区段ID
* 返 回 值：0x55 无效
*			0xAA 有效
* Created By LQ 2024.09.20
*/
UINT8 GetPhySecInHumidRailFlag(const UINT16 phySectionId);

/*
* 功能描述：设置指定ID物理区段湿轨标志
* 参数说明：const UINT16 phySectionId, 物理区段ID
*			const UINT8 cInHumidRailFlag 物理区段湿轨标志
* 返 回 值：无
* Created By LQ 2024.09.20
*/
void SetPhySecInHumidRailFlag(const UINT16 phySectionId, const UINT8 cInHumidRailFlag);

/*
* 功能描述：设置区间湿轨关联的物理区段湿轨标志
* 参数说明：const UINT16 dwAreaHumidRailId 区间湿轨ID
* 返 回 值：无
* Created By LQ 2024.09.20
*/
void SetPlatFormRelPSHumidRailFlag(const UINT16 dwAreaHumidRailId);

/*
* 功能描述： 获取指定ID物理区段关联区段是否具备ARB状态
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： PHY_SECTION_ARB_NO: 未ARB
*			 PHY_SECTION_ARB_YES: ARB
* by cgh 20241030
*/
UINT8 GetPhySecRelLogSecExistArb(const UINT16 phySectionId);

/*
* 功能描述：获取指定ID物理区段采集占用起始周期
* 参数说明：const UINT16 phySectionId, 区段ID
* 返 回 值：物理区段采集占用起始周期
*/
UINT32 GetSecColOccupyStartCycNum(const UINT16 phySectionId);

/*
* 功能描述：设置指定ID物理区段采集占用起始周期
* 参数说明：const UINT16 phySectionId, 物理区段ID
*			const UINT8 startCycNum 采集占用起始周期
* 返 回 值：无
*/
void SetSecColOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum);

/*
* 功能描述：设置互联互通CI指定ID物理区段CT/UT占用状态
* 参数说明：const UINT16 phySecId, 物理区段ID
			const UINT8 flag 物理区段之前CT或UT占用状态
* 返 回 值：无
* Created By LQ 2025.05.28
*/
void SetHlhtPhySecCtOrUtOccState(const UINT16 phySecId, const UINT8 flag);

#ifdef __cplusplus
}
#endif

#endif
