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

#ifndef _AXIS_SECTION_DATA_MANAGE_H_
#define _AXIS_SECTION_DATA_MANAGE_H_


#include "SectionDefine.h"
#include "AxisSectionConfigDataManage.h"
#include "CommonTypes.h"
#include "AxisSort_api.h"


#ifdef __cplusplus
extern "C" {
#endif



/*计轴区段数据结构体*/
typedef struct S_AxisSectionDataStruct
{
    UINT16 AxisSectionId;      		/*计轴区段ID (初始化字段)*/
	UINT8 AxisArbState;             /*计轴ARB状态 (动态字段)*/
	UINT8 BelongCiId;				/*计轴区段所属联锁ID(初始化字段)*/
	UINT8 BelongVirCIid;           /*计轴区段所属虚拟联锁ID(初始化字段)*/

	UINT8	AxisJumpLockApplyFlag;		/*跳跃锁闭申请标志*/
	UINT8	AxisJumpLockCancelApplyFlag; /*跳跃锁闭取消申请标志*/
	UINT32	AxisJumpLockApplyCylce;		/*跳跃锁闭申请周期号*/

	UINT8	AxisJumpLockState;		/*跳跃锁闭状态*/
	UINT8   AxisOccStatus;          /*计轴占用状态 */ 
	UINT32 dwAxisOccCycNum;         /*计轴占用起始周期*/
	UINT16 wPosMonitorTrainId;  /*计轴区段关联的位置监督有效的列车ID*/
	UINT32 dwUtOccupyCycNum;         /*最近坏车占用周期*/
	UINT8 cAxisTXSafeLocFlag;  /*计轴区段列车安全位置覆盖标志：0x55-无效；0xAA-有效*/
} AxisSectionDataStruct;


extern AxisSectionDataStruct AxisSectionDataStru[AXIS_SECTION_SUM_MAX];
/*
* 功能描述： 获取计轴区段数据
* 参数说明：    
* 返回值  ： 
            AxisSectionDataStruct*
*/
AxisSectionDataStruct *GetAxisSecData(void);
/*
* 功能描述： 获取指定ID计轴区段所属联锁ID
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID      
*/
UINT8 GetAxisSectionBelongCiId(const UINT16 axisSectionId);

/*
* 功能描述： 获取指定ID计轴区段ARB状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: ARB状态      
*/
UINT8 GetAxisSecArbState(const UINT16 axisSectionId);

/*
* 功能描述： 设置指定ID计轴区段ARB状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 arbState, ARB状态
* 返回值  ： 无
*			      
*/
void SetAxisSecArbState(const UINT16 axisSectionId, const UINT8 arbState);

/*
* 功能描述： 获取指定ID计轴区段跳跃锁闭申请标志
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭申请标志      
*/
UINT8 GetAxisSecJumpLockApplyFlag(const UINT16 axisSectionId);

/*
* 功能描述： 设置指定ID计轴区段跳跃锁闭申请标志
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 jumpLockApplyFlag, 跳跃锁闭申请标志
* 返回值  ： 无
*			        
*/
void SetAxisSecJumpLockApplyFlag(const UINT16 axisSectionId, const UINT8 jumpLockApplyFlag);

/*
* 功能描述： 获取指定ID计轴区段跳跃锁闭取消申请标志
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭申请标志      
*/
UINT8 GetAxisSecJLockCancelApplyFlag(const UINT16 axisSectionId);

/*
* 功能描述： 设置指定ID计轴区段跳跃锁闭取消申请标志
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 jumpLockCancelApplyFlag, 跳跃锁闭取消申请标志
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetAxisSecJLockCancelApplyFlag(const UINT16 axisSectionId, const UINT8 jumpLockCancelApplyFlag);

/*
* 功能描述： 获取指定ID计轴区段跳跃锁闭状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭申请标志      
*/
UINT8 GetAxisJumpLockState(const UINT16 axisSectionId);

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

/*
* 功能描述： 获取指定ID计轴区段跳跃锁闭申请周期号
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 跳跃锁闭申请周期号      
*/
UINT32 GetAxisSecJumpLockApplyCylce(const UINT16 axisSectionId);

/*
* 功能描述： 设置指定ID计轴区段跳跃锁闭取消申请标志
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 jumpLockApplyCycle, 跳跃锁闭申请周期号
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetAxisSecJumpLockApplyCylce(const UINT16 axisSectionId, const UINT32 jumpLockApplyCycle);
/*
* 功能描述： 获取指定ID计轴区段所属虚拟联锁ID
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属虚拟联锁ID      
*/
UINT8 GetAxisSectionBelongVirCiId(const UINT16 axisSectionId);

/*
* 功能描述： 获取指定ID计轴区段占用状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： AXIS_SECTION_OCCUPY_NO: 未占用
*			AXIS_SECTION_OCCUPY_YES: 占用      
*/
UINT8 GetAxisOccupyState(const UINT16 axisSectionId);

/*
* 功能描述： 设置指定ID计轴区段占用状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 occupyState, 占用状态
* 返回值  ： 无
*			        
*/
void SetAxisOccupyState(const UINT16 axisSectionId, const UINT8 occupyState);

/**
* @brief 获取计轴区段锁闭所属进路ID
* @param 计轴区段ID
* @return 计轴区段锁闭所属进路ID，0:未锁闭
*/
UINT16 GetAxisSecLockBelongRoute(const UINT16 wAcId);

/*
* 功能描述： 设置指定ID计轴区段包含的逻辑区段跳跃锁闭状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 jumpLockState, 跳跃锁闭状态
* 返回值  ： void
* 备注：仅用于给ATS发码位显示，不参与逻辑检查,by-cgh-2023.06.28
*/
void SetAxisInCludeLogJumpLockState(const UINT16 axisSectionId, const UINT8 jumpLockState);

/*
* 功能描述： 设置指定计轴区段包含的逻辑区段ARB状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 chState,ARB状态
* 返回值  ： void
* 备注：by-cgh-2023.09.05
*/
void SetAxisIncludeLogSecArbState(const UINT16 wAxisSectionId, const UINT8 chState);

/*
* 功能描述： 设置指定计轴区段关联的物理区段ARB状态
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
*			 const UINT8 chState,ARB状态
* 返回值  ： void
* 备注：by-cgh-2023.09.05
*/
void SetAxisRelatePhySecArbState(const UINT16 wAxisSectionId, const UINT8 chState);

/*
* 功能描述： 获取指定ID计轴区段占用起始周期号
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 占用起始周期号
* by cgh 20240815
*/
UINT32 GetAxisSecOccCyc(const UINT16 axisSectionId);

/*
* 功能描述：设置指定ID计轴区段位置监督有效的列车ID
* 参数说明：const UINT16 wAxisSectionId 计轴区段ID
*			const UINT16 wTrainId 列车ID
* 返 回 值：无
* Created By LQ 2024.08.18
*/
void SetAxisPosMonitorTrainId(const UINT16 wAxisSectionId, const UINT16 wTrainId);

/*
* 功能描述：获取指定ID计轴区段位置监督有效的列车ID
* 参数说明：const UINT16 wAxisSectionId 计轴区段ID
* 返 回 值：255 获取失败
*           <255 列车ID
* Created By LQ 2024.08.18
*/
UINT16 GetAxisPosMonitorTrainId(const UINT16 wAxisSectionId);

/*
* 功能描述：获取指定ID计轴区段最近坏车占用周期号
* 参数说明：const UINT16 wAxisSectionId 计轴区段ID
* 返 回 值：UINT32_MAX 获取失败 其他：最近坏车占用周期号
* Created By fan 2024.08.19
*/
UINT32 GetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId);
/*
* 功能描述：设置指定ID计轴区段最近坏车占用周期号
* 参数说明：const UINT16 wAxisSectionId 计轴区段ID UINT32 周期号
* 返 回 值：无
* Created By fan 2024.08.19
*/
void SetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId, const UINT32 dwCycNum);

/**
* 功能：查询更新计轴上坏车占用状态
* 输入参数：无
* 返回值：无
* Create:  fan 2024/08/20
*/
void AxisSecUtOccpyUpdate(void);

/*
* 功能描述：获取指定ID计轴区段列车安全位置覆盖标志
* 参数说明：const UINT16 axisSectionId 计轴区段ID
* 返 回 值：0x55 无效
*			0xAA 有效
* Created By LQ 2025.12.01
*/
UINT8 GetAxisTXSafeLocFlag(const UINT16 axisSectionId);

/*
* 功能描述：设置指定ID计轴区段列车安全位置覆盖标志
* 参数说明：const UINT16 axisSectionId 计轴区段ID
*			const UINT8 cFlag 标志
* 返 回 值：无
* Created By LQ 2025.12.01
*/
void SetAxisTXSafeLocFlag(const UINT16 axisSectionId, const UINT8 cFlag);

/*
* 功能描述：清除计轴区段列车安全位置覆盖标志
* 参数说明：无
* 返 回 值：无
* Created By LQ 2025.12.01
*/
void ClearAxisTXSafeLocFlag(void);

/*
* 功能描述：获取存在计轴道岔位置是否满足（四开视为满足）
* 参数说明：UINT16 wAcId 计轴区段
* 返回值  ：CI_ERROR  CI_SUCCESS满足
* Create fan 20260410
*/
UINT8 GetAcSwitchPosCheck(UINT16 wAcId);

#ifdef __cplusplus
}
#endif

#endif
