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

#ifndef _AXIS_SECTION_CONFIG_DATA_MANAGE_H_
#define _AXIS_SECTION_CONFIG_DATA_MANAGE_H_


#include "SectionDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "AxisConfigDataManage.h"



#ifdef __cplusplus
extern "C" {
#endif

/*计轴区段包含道岔结构体*/
typedef struct S_Axis_Switch
{
	UINT16 SwitchId;   /*道岔ID*/	
	UINT8 SwitchPosition;  /*道岔位置*/	
} AxisSwitchStruct;
/*计轴区段配置数据结构体*/
typedef struct S_AxisSectionConfigDataStruct
{
    UINT16 AxisSectionId;      		/*计轴区段ID (配置字段)*/
	UINT16 RelativePhySecId;        /*相关物理区段ID (配置字段)*/
	UINT8 LogSectionSum;            /*包含逻辑区段数目 (配置字段)*/
	UINT16 LogSectionIdBuf[AXIS_INCLUDE_LOG_SUM_MAX];   /*逻辑区段ID数组 (配置字段)*/
	UINT8 AxisSwitchSum;            /*计轴包含的道岔数量*/    
	AxisSwitchStruct AxisSwitchIdStru[AXIS_INCLUDE_SWITCH_SUM_MAX];       /*计轴包含的道岔ID*/
	UINT8	chLinkNum;				/*包含link数量*/
	UINT16	szLinkIdBuff[AXIS_INCLUDE_LINK_SUM_MAX];		/*包含link编号*/
	UINT16 wOrgnAxisId;				/* 起点计轴编号 */
	UINT16 wTmnlAxisId;				/* 终点计轴编号 */
	UINT8 chLinkLine;				/* 联络线标志 */
	UINT8 chEntrance;				/* 入口属性 */
	UINT8 chStorageLineProperty;    /*存车线属性*/
	UINT8 cBorderAttr;    /*边界计轴区段属性*/
	UINT8 chAxisLinXian;			/*计轴临线属性-是否为本线路-电子地图Link表获得*/
	UINT32 dwAxisTotalLen;   /*计轴关联link总长*/
	UINT8 cAcCbtcAttr;  /*计轴区段CBTC区域属性：0x55-具有CBTC区域属性，0xaa-不具有CBTC区域属性*/
	UINT8 chRelateProSwSum; /* add by mpt 20260331  计轴区段关联防护道岔数量*/
	AxisSwitchStruct wRelateProSwId[AXIS_RELATE_PRO_SW_SUM_MAX];/* add by mpt 20260331  计轴区段关联防护道岔ID数组*/

} AxisSectionConfigDataStruct;

extern AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX];   /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
extern UINT16 LocalCiAxisSectionIdBuf[AXIS_SECTION_SUM_MAX];
extern INT16 AxisSectionCurSum;
extern UINT16 totalAxisNum;

/*
* 功能描述： 获取计轴区段当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 计轴当前总数
*/
UINT16 GetAxisSecCurSum(void);

/*
* 功能描述： 获取计轴区段配置数据
* 参数说明： void    
* 返回值  ：计轴区段配置数据结构体指针
*/
AxisSectionConfigDataStruct* GetAxisSecConfigData(void);

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

/*
* 功能描述： 获取指定ID计轴区段索引号
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： AXIS_SECTION_SUM_MAX: 获取数据失败
*			<AXIS_SECTION_SUM_MAX: 查找成功
*/
UINT16 GetAxisSecConfigBufIndex(const UINT16 axisSectionId);

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

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

/*
* 功能描述： 获取指定ID计轴区段逻辑区段ID数组
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 逻辑区段ID数组指针      
*/
UINT16* GetAxisSecLogSectionIdBuf(const UINT16 axisSectionId);

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

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

/*
* 功能描述： 获取指定ID计轴区段道岔ID数组
* 参数说明： const UINT16 axisSectionId, 计轴区段ID    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔ID数组指针      
*/
AxisSwitchStruct* GetAxisSwitchIdStru(const UINT16 axisSectionId);

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

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

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

/*
* 功能描述： 获取指定ID计轴区段起点计轴器编号
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 起点计轴器编号
*/
UINT16 GetAxisOrgnAxisId(const UINT16 axisSectionId);

/*
* 功能描述： 获取指定ID计轴区段终点计轴器编号
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 起点计轴器编号
*/
UINT16 GetAxisTmnlAxisId(const UINT16 axisSectionId);

/**
* @brief 获取计轴区段ID映射数组地址以及计轴区段当前总数
* @param 无
* @return 计轴区段当前总数
*/
UINT16 GetLocalCiAxisSectionIdBuf(const UINT16 **pIdBuff);


/**
* @brief 获取计轴区段ID在LocalCiAxisSectionIdBuf中的索引值
* @param 无
* @return 计轴在LocalCiAxisSectionIdBuf中的索引值
*/
UINT16 GetLocalCiAxisSectionIndex(UINT16 axisID);

/*
* 功能描述： 获取指定ID计轴区段所属TIOC编号
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 计轴区段所属TIOC编号
*/
UINT16 GetAxisBelongTioc(const UINT16 wAcId);

/*
* 功能描述： 获取指定ID计轴区是否为联络线计轴区段
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： AXIS_SEC_LINK_LINE_YES: 联络线计轴区段
*			 AXIS_SEC_LINK_LINE_NO: 非联络线计轴区段
*/
UINT8 GetAxisSecLinkLineFlag(const UINT16 axisSectionId);

/*
* 功能描述： 获取指定ID计轴区是否为入口计轴区段
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： AXIS_SEC_LINK_LINE_YES: 入口计轴区段
*			 AXIS_SEC_LINK_LINE_NO: 非入口计轴区段
*/
UINT8 GetAxisSecEntranceFlag(const UINT16 axisSectionId);
/*
* 功能描述： 获取计轴序列连通后的计轴区段序列
* 参数说明： const UINT16 wAxisSecASum 计轴序列A数量
*			 UINT16* pAxisSecABuf 计轴序列AID存放地址
*			 const UINT16 wAxisSecBSum 计轴序列B数量
*			 UINT16* pAxisSecBBuf 计轴序列BID存放地址
* 返回值  ： 0 失败；其他成功
*/
UINT8 GetAxisSecListByStartingAndEnd(const UINT8 cAxisSecASum, UINT16* pAxisSecAIdBuf, const UINT8 cAxisSecBSum, UINT16* pAxisSecBIdBuf, UINT8 cDir, UINT16* pOutputIdBuf);

/**
* @brief 查询计轴前/后方计轴
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[out] UINT16 arACID[5] 相邻计轴ID
* param[out] UINT8* DirectionPointFlag 是否经过方向变化点 DIRECTIONPOINT_FLAG_VALID
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH  查询成功
* @note 无
*/
UINT8 FindAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[5], UINT8* DirectionPointFlag);


/**
 * @brief 获取计轴区段相邻逻辑区段
 * @param[in] UINT16 wAcId 计轴区段ID
 * @param[in] UINT8 chDir 方向
 * @param[out] UINT16 * pLgcIdBuf 逻辑区段ID缓冲区
 * @return 逻辑区段数量，UINT8_MAX失败，0线路终端
 * @note 无
 */
UINT8 FindACAdjacentLogSec(UINT16 wAcId, UINT8 chDir, UINT16 * pLgcIdBuf);

/*
* 功能描述： 获取计轴相邻逻辑区段状态
* 参数说明： UINT8 dir 方向
            UINT16 ACId 计轴区段ID
* 返回值  ： LOGICSECTION_OCCUPY_UT	非通信车占用
            LOGICSECTION_OCCUPY_NO 无车占用和通信车占用
*/
UINT8 GetACAdjoinLogSecStatus(UINT8 dir,UINT16 ACId);


/**
 * @brief 获取计轴关联的可提前驱动道岔岔区资源是否被征用
 * @param[in] UINT16 ACID 计轴区段id
 * @param[out] 无
 * @return CI_ERROR 计轴未征用
		   CI_SUCCESS 计轴征用
		   UINT8_MAX 查询错误
 * @note 
 */
UINT8 GetACRelSwLogSecLock(UINT16 ACID);

/**
* @brief 获取计轴区段对应的分界点ID
* @param[in] const UINT16 wAxisSecId 计轴区段ID
* @return 0 失败； 其它 分界点ID
* @note by cgh 20240221
*/
UINT16 GetAxisRelateCfpId(const UINT16 wAxisSecId);

/*
* 功能描述： 获取指定ID计轴区临线属性
* 参数说明： const UINT16 axisSectionId, 计轴区段ID
* 返回值  ： AXIS_SEC_LINXIAN_YES: 具备临线属性(非本线路)
*			 AXIS_SEC_LINXIAN_NO: 不具备临线属性(本线路)
*/
UINT8 GetAxisSecLinXianFlag(const UINT16 axisSectionId);

/*
* 功能描述： 获取指定ID计轴区段的存车线属性
* 参数说明： const UINT16 axisSectionId 计轴区段ID
* 返回值  ： 0 获取数据失败
*			 0x55 具有存车线属性
*            0xAA 不具有存车线属性
*/
UINT8 GetAxisSecStorageLineProperty(const UINT16 axisSectionId);

/*
* 功能描述： 获取指定ID计轴区段总长度
* 参数说明： const UINT16 axisSectionId 计轴区段ID
* 返回值  ： 0：错误   >0 计轴link总长度
*/
UINT32 GetAxisSecTotalLen(const UINT16 axisSectionId);

/*
* 功能描述：获取指定ID计轴区段的边界计轴区段属性
* 参数说明：const UINT16 axisSectionId 计轴区段ID
* 返 回 值：0 获取数据失败
*		    0x55 边界计轴区段
*           0xAA 非边界计轴区段
*/
UINT8 GetAxisSecBorderProperty(const UINT16 axisSectionId);

/*
* 功能描述：获取指定ID计轴区段的CBTC区域属性
* 参数说明：const UINT16 axisSectionId 计轴区段ID
* 返 回 值：0x55 具有CBTC区域属性
*           0xAA 不具有CBTC区域属性
* Created By LQ 2025.08.05
*/
UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId);

/*
* 功能描述：获取指定ID计轴区段的CBTC区域属性
* 参数说明：const UINT16 axisSectionId 计轴区段ID
* 返 回 值：0x55 具有CBTC区域属性
*           0xAA 不具有CBTC区域属性
* Created By LQ 2025.08.05
*/
UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId);
/*
* 功能描述： 获取指定ID计轴区段关联防护道岔数目
* 参数说明： const UINT16 wLogicSecId, 计轴区段ID
* 返回值  ： 0: 获取数据失败
*			>0: 道岔数目
*  创建	  :  mpt 20260331
*/
UINT8 GetAxisSecRelateProSwSum(const UINT16 wAxisSecId);
/*
* 功能描述： 获取指定ID计轴区段关联防护道岔结构体
* 参数说明： const UINT16 wLogicSecId, 计轴区段ID
* 返回值  ： NULL: 获取数据失败
*			非NULL: 道岔ID数组指针
* 创建	  : mpt 20260331
*/
AxisSwitchStruct* GetAxisSecRelateProSwStru(const UINT16 wAxisSecId);

#ifdef __cplusplus
}
#endif

#endif
