/********************************************************
*
* 文 件 名： LogicalRouteDataManage.h
* 版权说明： 北京交控科技有限公司
* 创建时间： 2023-10-10
* 作    者： 联锁组
* 功能描述： 逻辑进路数据管理函数的头文件
* 函数包括：
* 使用注意：
* 修改记录：
* by cgh 20231010创建
*
********************************************************/

#ifndef _LOGICAL_ROUTE_DATA_MANAGE_H_
#define _LOGICAL_ROUTE_DATA_MANAGE_H_


#include "CommonTypes.h"
#include "RouteDefine.h"
#include "SectionDefine.h"
#include "LogicSectionConfigDataManage.h"
#include "RouteConfigDataManage.h"



#ifdef __cplusplus
extern "C" {
#endif


/*逻辑进路配置数据结构体*/
typedef struct S_LogicalRouteDataStruct
{
	UINT16 wLogRouteId;								                 /*逻辑进路ID */
	UINT8 chLogRouteDir;								             /*逻辑进路方向（运营方向） */
	UINT8 chLogicRouteState;										 /*逻辑进路状态*/
	UINT8 chLogRouteLevel;							                 /*逻辑进路监督级别(点式/CBTC) (动态字段)*/
	UINT8 chLogRouteBelongCiId;                                      /*逻辑进路所属联锁*/
	UINT8 chLogicRouteOpenColor;									 /*逻辑进路开放颜色*/
	UINT16 wLogRouteInLogSecSum;                                     /*逻辑进路包含的逻辑区段数量*/
	UINT16 szLogRouteInLogSecIdBuf[MAX_ROUTE_IN_LT_NUM];             /*逻辑进路包含的逻辑区段ID数组*/
	UINT8 chLogRouteSwitchMoveFlag;                                  /*逻辑进路是否可动道岔标志*/
	UINT16 wLogRouteTrainLogSecSum;                                  /*逻辑进路列车脚下逻辑区段数量*/
	UINT16 szLogRouteTrainLogSecIdBuf[MAX_ROUTE_IN_LT_NUM];          /*逻辑进路列车脚下逻辑区段ID数组*/
	UINT16 wLogRouteRelateBeginSigId;                                /*逻辑进路关联始端信号机ID*/
	UINT32 dwLogRouteChuXuanStartCycNum;                             /*逻辑进路初选起始周期号*/
	UINT32 dwLogRouteXuanPaiStartCycNum;						     /*逻辑进路选排起始周期号*/
	UINT32 dwLogRouteLockStartCycNum;							     /*逻辑进路锁闭起始周期号*/
	UINT32 dwDelayErrLockStartCycNum;                                /*区故解延时解锁起始周期号*/
	UINT8 chLogRouteRecoverOpenState;                                /*逻辑进路信号重开标志*/
	UINT16 szLogRouteApplyResTrainId;                                /*逻辑进路ATS请求资源列车ID*/
	UINT8 chLogRouteRelatePsdSum;                                    /*逻辑进路关联屏蔽门数量*/
	UINT16 szLogRouteRelatePsdIdBuf[ROUTE_PSD_SUM_MAX];              /*逻辑进路关联屏蔽门ID数组*/
	UINT8 chLogRouteRelateEsbSum;                                    /*逻辑进路关联紧急停车按钮数量*/
	UINT16 szLogRouteRelateEsbIdBuf[ROUTE_ESB_SUM_MAX];              /*逻辑进路关联紧急停车按钮ID数组*/
	
	UINT16 routeInSwitOtherPosLogSecSum;                            /*进路内道岔关联的非进路内逻辑区段数量*/
	UINT16 routeInSwitOtherPosLogSecIdBuf[MAX_ROUTE_IN_LT_NUM];   /*进路内道岔关联的非进路内逻辑区段ID数组*/
	UINT16 routeOutLogSecSum;						          /*进路包含物理区段关联的非进路内且非道岔关联的逻辑区段数量 */
	UINT16 routeOutLogSecSumIdBuf[MAX_ROUTE_IN_LT_NUM];	  /*进路包含物理区段关联的非进路内且非道岔关联的逻辑区段ID数组 */

} LogicalRouteDataStruct;

/*******************************全局变量声明*******************************/
extern LogicalRouteDataStruct LogicalRouteDataStru[ROUTE_LOGICAL_SUM_MAX];
extern UINT16 LogicalRouteSum;
extern UINT16 LogicalRouteIdBuff[ROUTE_LOGICAL_SUM_MAX];

/**
* @brief 逻辑进路状态主处理函数
* @param 无
* @return 无
* @note：
*/
void LogicalRouteProcess(void);

/**
* @brief 初始化逻辑进路数据
* @param 无
* @return 逻辑进路总数
* @note：by cgh 20231010
*/
void InitialLogicalRouteData(void);

/**
* @brief 逻辑进路数据初始化
* @param const UINT16 wIndex 逻辑进路索引
* @return 逻辑进路总数
* @note：by cgh 20231012
*/
void LogicalRouteDataInitial(const UINT16 wIndex);

/**
* @brief 获取逻辑进路总数
* @param 无
* @return 逻辑进路总数
* @note：by cgh 20231010
*/
UINT16 GetLogicalRouteSum(void);

/**
* @brief 获取逻辑进路结构体
* @param 无
* @return 逻辑进路结构体
* @note：by lq 20231016
*/
LogicalRouteDataStruct* GetLogicalRouteStr(void);

/**
* @brief 获取逻辑进路ID数组
* @param const UINT16 wIndex 逻辑进路索引
* @return 逻辑进路ID
* @note：by cgh 20231010
*/
UINT16 GetLogicalRouteId(const UINT16 wIndex);

/**
* @brief 获取逻辑进路索引
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路索引
* @note：by cgh 20231010
*/
UINT16 GetLogRouteBufIndex(const UINT16 wLogRouteId);

/**
* @brief 获取最小可用逻辑进路（ID最小，状态空闲）
* @param 无
* @return 逻辑进路ID
* @note：by cgh 20231011
*/
UINT16 GetUsableLogicalRouteId(void);

/**
* @brief 设置逻辑进路方向
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogRouteDir 逻辑进路方向
* @return 无
* @note：by cgh 20231010
*/
void SetLogicalRouteDir(const UINT16 wLogRouteId, const UINT8 chLogRouteDir);

/**
* @brief 获取逻辑进路方向
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路方向
* @note：by cgh 20231010
*/
UINT8 GetLogicalRouteDir(const UINT16 wLogRouteId);

/**
* @brief 逻辑进路状态设置管理，逻辑进路状态设置必须通过本函数
* @param const UINT16 wLogRouteId, 逻辑进路ID      const UINT8 chLogRouteState 逻辑进路状态
* @return CI_ERROR
			CI_SUCCESS
* @note：by cgh 20231012
*/
void SetLogRouteStateManage(const UINT16 wLogRouteId, const UINT8 chLogRouteState);

/**
* @brief 逻辑进路状态有效性检查
* @param const UINT8 chLogRouteState 逻辑进路状态
* @return CI_ERROR: 数据无效   CI_SUCCESS: 数据有效
* @note：by cgh 20231010
*/
UINT8 LogRouteStateValidCheck(const UINT8 chLogRouteState);



/**
* @brief 设置逻辑进路状态
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogicRouteState 逻辑进路状态
* @return CI_ERROR 设置失败
*         CI_SUCCESS  设置成功
* @note：by cgh 20231010
*/
UINT8 SetLogicalRouteState(const UINT16 wLogRouteId, const UINT8 chLogicRouteState);

/*
* 功能描述： 清除逻辑进路物理区段之前占用状态
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： CI_ERROR:清除失败
*			 CI_SUCCESS:清除成功
*/
void CleanLogRoutePhySecPreOccuSta(const UINT16 wLogRouteId);

/**
* @brief 获取逻辑进路状态
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路状态
* @note：by cgh 20231010
*/
UINT8 GetLogicalRouteState(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路监督级别
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogRouteLevel 逻辑进路监督级别
* @return 无
* @note：by cgh 20231010
*/
void SetLogicalRouteLevel(const UINT16 wLogRouteId, const UINT8 chLogRouteLevel);

/**
* @brief 获取逻辑进路监督级别
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路方向
* @note：by cgh 20231010
*/
UINT8 GetLogicalRouteLevel(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路所属联锁
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogRouteBelongCiId 逻辑进路所属联锁
* @return 无
* @note：by cgh 20231010
*/
void SetLogicalRouteBelongCiId(const UINT16 wLogRouteId, const UINT8 chLogRouteBelongCiId);

/**
* @brief 获取逻辑进路所属联锁
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路所属联锁
* @note：by cgh 20231010
*/
UINT8 GetLogicalRouteBelongCiId(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路开放颜色
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogRouteDir 逻辑进路开放颜色
* @return 无
* @note：by cgh 20231011
*/
void SetLogicalRouteOpenColor(const UINT16 wLogRouteId, const UINT8 chLogRouteOpenColor);

/**
* @brief 获取逻辑进路开放颜色
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路方向
* @note：by cgh 20231011
*/
UINT8 GetLogicalRouteOpenColor(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路包含的逻辑区段数据
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogRouteInLogSecSum 逻辑进路包含的逻辑区段数目
* @param const UINT16* wLogRouteInLogSecIdbuf 逻辑进路包含的逻辑区段ID数组
* @return 无
* @note：by cgh 20231011
*/
void SetLogicalRouteInLogSecData(const UINT16 wLogRouteId, const UINT8 wLogRouteInLogSecSum, const UINT16* wLogRouteInLogSecIdbuf);

/**
* @brief 获取逻辑进路包含的逻辑区段数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路包含的逻辑区段数量
* @note：by cgh 20231011
*/
UINT16 GetLogicalRouteInLogSecSum(const UINT16 wLogRouteId);

/**
* @brief 获取逻辑进路包含的逻辑区段ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路包含的逻辑区段ID
* @note：by cgh 20231011
*/
UINT16* GetLogicalRouteInLogSecId(const UINT16 wLogRouteId);

/**
* @brief 获取进路内道岔关联的非进路内逻辑区段数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路包含的逻辑区段数量
* @note：by cgh 20231011
*/
UINT16 GetLogRInSwitOtherPosLogSecSum(const UINT16 wLogRouteId);

/**
* @brief 获取进路内道岔关联的非进路内逻辑区段ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路包含的逻辑区段ID
* @note：by cgh 20231011
*/
UINT16* GetLogRInSwitOtherPosLogSecID(const UINT16 wLogRouteId);
/**
* @brief 获取进路包含物理区段关联的非进路内且非道岔关联的逻辑区段数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路包含的逻辑区段数量
* @note：by cgh 20231011
*/
UINT16 GetLogicalRouteOutLogSecSum(const UINT16 wLogRouteId);


/**
* @brief 获取进路包含物理区段关联的非进路内且非道岔关联的逻辑区段ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路包含的逻辑区段ID
* @note：by cgh 20231011
*/
UINT16* GetLogicalRouteOutLogSecID(const UINT16 wLogRouteId);
/**
* @brief 设置逻辑进路是否可动道岔标志
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogRouteLevel 逻辑进路是否可动道岔标志
* @return 无
* @note：by cgh 20231010
*/
void SetLogicalRouteSwitchMoveFlag(const UINT16 wLogRouteId, const UINT8 chLogRouteSwitchMoveFlag);

/**
* @brief 获取逻辑进路是否可动道岔标志
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路是否可动道岔标志
* @note：by cgh 20231010
*/
UINT8 GetLogicalRouteSwitchMoveFlag(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路列车脚下的逻辑区段数据
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogRouteTrainLogSecSum 逻辑进路列车脚下的逻辑区段数目
* @param const UINT16 wLogRouteTrainLogSecId 逻辑进路列车脚下的逻辑区段ID数组
* @return 无
* @note：by cgh 20231011
*/
void SetLogicalRouteTrainLogSecData(const UINT16 wLogRouteId, const UINT16 wLogRouteTrainLogSecSum, const UINT16* wLogRouteTrainLogSecId);

/**
* @brief 获取逻辑进路列车脚下的逻辑区段数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路列车脚下的逻辑区段数量
* @note：by cgh 20231011
*/
UINT16 GetLogicalRouteTrainLogSecSum(const UINT16 wLogRouteId);

/**
* @brief 获取逻辑进路列车脚下的逻辑区段ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路列车脚下的逻辑区段ID
* @note：by cgh 20231011
*/
UINT16* GetLogicalRouteTrainLogSecId(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路关联始端信号机ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogRouteRelateBeginSigId 逻辑进路关联始端信号机ID
* @return 无
* @note：by cgh 20231011
*/
void SetLogicalRouteRelateBeginSigId(const UINT16 wLogRouteId, const UINT16 wLogRouteRelateBeginSigId);

/**
* @brief 获取逻辑进路关联始端信号机ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路关联始端信号机ID
* @note：by cgh 20231011
*/
UINT16 GetLogicalRouteRelateBeginSigId(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路初选起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 dwCyc 逻辑进路初选起始周期号
* @return 无
* @note：by cgh 20231011
*/
void SetLogRouteChuXuanStartCycNum(const UINT16 wLogRouteId, const UINT32 dwCyc);

/**
* @brief 获取逻辑进路初选起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路初选起始周期号
* @note：by cgh 20231011
*/
UINT32 GetLogRouteChuXuanStartCycNum(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路选排起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 dwCyc 逻辑进路选排起始周期号
* @return 无
* @note：by cgh 20231011
*/
void SetLogRouteXuanPaiStartCycNum(const UINT16 wLogRouteId, const UINT32 dwCyc);

/**
* @brief 获取逻辑进路选排起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路选排起始周期号
* @note：by cgh 20231011
*/
UINT32 GetLogRouteXuanPaiStartCycNum(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路锁闭起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 dwCyc 逻辑进路锁闭起始周期号
* @return 无
* @note：by cgh 20231011
*/
void SetLogRouteLockStartCycNum(const UINT16 wLogRouteId, const UINT32 dwCyc);

/**
* @brief 获取逻辑进路锁闭起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路锁闭起始周期号
* @note：by cgh 20231011
*/
UINT32 GetLogRouteLockStartCycNum(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路区故解延时解锁起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 dwCyc 逻辑进路区故解延时解锁起始周期号
* @return 无
* @note：by cgh 20231011
*/
void SetLogRouteDelayErrLockStartCyc(const UINT16 wLogRouteId, const UINT32 dwCyc);

/**
* @brief 获取逻辑进路区故解延时解锁起始周期号
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路区故解延时解锁起始周期号
* @note：by cgh 20231011
*/
UINT32 GetLogRouteDelayErrLockStartCyc(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路信号重开标志
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param  const UINT8 chLogRouteRecoverOpenState 逻辑进路信号重开标志
* @return 无
* @note：by cgh 20231010
*/
void SetLogicalRouteRecoverOpenState(const UINT16 wLogRouteId, const UINT8 chLogRouteRecoverOpenState);

/**
* @brief 获取逻辑进路信号重开标志
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路信号重开标志
* @note：by cgh 20231010
*/
UINT8 GetLogicalRouteRecoverOpenState(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路ATS请求资源列车数据
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogRouteApplyResTrainId 逻辑进路ATS请求资源列车ID
* @return 无
* @note：by cgh 20231011
*/
void SetLogRouteApplyResTrainData(const UINT16 wLogRouteId, const UINT16 wLogRouteApplyResTrainId);

/**
* @brief 获取逻辑进路ATS请求资源列车ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路ATS请求资源列车ID
* @note：by cgh 20231011
*/
UINT16 GetLogicalRouteApplyResTrainId(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路关联屏蔽门数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogRouteRelatePsdId 逻辑进路关联屏蔽门ID
* @return 无
* @note：by cgh 20231011
*/
void SetLogicalRouteRelatePsdIdData(const UINT16 wLogRouteId, const UINT16 wLogRouteRelatePsdId);

/**
* @brief 获取逻辑进路关联屏蔽门数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路关联屏蔽门数量
* @note：by cgh 20231011
*/
UINT8 GetLogicalRouteeRelatePsdSum(const UINT16 wLogRouteId);

/**
* @brief 获取逻辑进路关联屏蔽门ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路关联屏蔽门ID
* @note：by cgh 20231011
*/
UINT16* GetLogicalRouteRelatePsdId(const UINT16 wLogRouteId);

/**
* @brief 设置逻辑进路关联紧急停车按钮数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogRouteRelateEsbId 逻辑进路关联紧急停车按钮ID
* @return 无
* @note：by cgh 20231011
*/
void SetLogicalRouteRelateEsbIdData(const UINT16 wLogRouteId, const UINT16 wLogRouteRelateEsbId);

/**
* @brief 获取逻辑进路关联紧急停车按钮数量
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路关联紧急停车按钮数量
* @note：by cgh 20231011
*/
UINT8 GetLogicalRouteeRelateEsbSum(const UINT16 wLogRouteId);

/**
* @brief 获取逻辑进路关联紧急停车按钮ID
* @param const UINT16 wLogRouteId 逻辑进路ID
* @return 逻辑进路关联紧急停车按钮ID
* @note：by cgh 20231011
*/
UINT16* GetLogicalRouteRelateEsbId(const UINT16 wLogRouteId);

/**
* @brief 逻辑进初选处理
* @param  wLogRouteId 逻辑进路ID
* @return 无
* @note：
*/
void LogRouteFirstXuanPaiProc(const UINT16 wLogRouteId);

/**
* @brief 逻辑进路选排处理
* @param  wLogRouteId 逻辑进路ID
* @return 无
* @note：
*/
void LogRouteXuanPaiProc(const UINT16 wLogRouteId);

/**
* @brief 逻辑进路锁闭处理
* @param  wLogRouteId 逻辑进路ID
* @return 无
* @note：
*/
void LogRouteLockProc(const UINT16 wLogRouteId);

/**
* @brief 逻辑进路异常锁闭处理
* @param  wLogRouteId 逻辑进路ID
* @return 无
* @note：
*/
void LogRouteLockErrManage(const UINT16 wLogRouteId);

/*
* 功能描述： 设置逻辑进路锁闭列车脚下锁闭状态
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetLogRouteTrainLocLogSecState(const UINT16 wLogRouteId, const UINT8 lockState);

/*
* 功能描述： 设置逻辑进路锁闭列车脚下物理区段锁闭状态, 需要先执行逻辑区段锁闭处理
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetLogRouteTrainLocPhySecState(const UINT16 wLogRouteId, const UINT8 lockState);

/*
* 功能描述： 设置逻辑进路内的物理区段征用状态
* 参数说明： const UINT16 logRouteId, 进路ID
*            const UINT8 useState, 征用状态
* 返回值  ： 无
* LC
*/
void SetLogRouteSectionUsingState(const UINT16 logRouteId, const UINT8 useState);

/*
* 功能描述： 逻辑进路的逻辑区段资源解锁管理
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： void
* 创建： fan 2023-10-11
*/
void LogRouteLgcSecResUnlockManage(const UINT16 logRouteId);

/*
* 功能描述： 检查逻辑区段的逻辑进路解锁条件
* 参数说明： const UINT16 logSecId, 逻辑区段ID
const UINT16 preLogSecId, 上一个逻辑区段ID
const UINT16 logRouteId, 逻辑进路ID
* 返回值  ： CI_SUCCESS检查通过 CI_ERROR检查失败
* 创建： fan 2023-10-11
*/
UINT8 CheckLogRouteLgcSecResUnlock(const UINT16 logSecId, const UINT16 preLogSecId, const UINT16 logRouteId);

/*
* 功能描述： 逻辑区段的逻辑进路解锁处理
* 参数说明： const UINT16 logRouteId, 逻辑进路ID
const UINT16 logSectionId 逻辑区段ID
const UINT16 preLogSecId 上一个逻辑区段ID
* 返回值  ： void
* 创建 ： fan  20231012
*/
void LgcSecLogicalUnlockProc(const UINT16 logRouteId, const UINT16 logSectionId, const UINT16 preLogSecId);

/**
* @brief 逻辑进路信号开放处理
* @param  wLogRouteId 逻辑进路ID
* @return 无
* @note：
*/
void LogRouteOpenManage(const UINT16 wLogRouteId);

/*
* 功能描述： 检查指定ID逻辑进路列车脚下资源是否包含该逻辑区段
* 参数说明： const UINT16 routeId, 进路ID
*			 const UINT16 lgcSecId
* 返回值  ： CI_SUCCESS: 在列车脚下资源中
*            CI_ERROR: 不在列车脚下资源中
*/
UINT8  CheckLgcSecHaveTrainLocRoute(const UINT16 logRouteId, const UINT16 lgcSecId);

/*
* 功能描述： 确定指定ID逻辑进路始端信号机开放颜色处理
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： 无
* Created By LQ 2023/10/11
*/
void LogicRouteOpenColorProc(const UINT16 logRouteId);

/**
* @brief 逻辑进路区故解延时解锁处理
* @param const UINT16 wLogicalRouteId 逻辑进路ID
* @return 无
* @note：by cgh 20231012
*/
void LogRouteUnlockDelayManage(const UINT16 wLogicalRouteId);

/*
功能描述: 逻辑进路锁闭驱动道岔处理
输入参数:	const UINT16 logRouteId 进路ID
输出参数:	无
返回值:		CI_SUCCESS,如果道岔锁闭处理成功
            CI_ERROR,如果道岔锁闭处理失败
*/
UINT8 LogRouteLockDriveSwitch(const UINT16 logRouteId);

/*
* 功能描述： 获取逻辑进路内逻辑区段防护道岔信息
* 参数说明： const UINT16 logRouteId, 进路ID
*            OUT RouteProtectSwitchStruct szRouteProtectSwitchStruct[ROUTE_PHYSICALSECTION_SUM_MAX] 输出防护道岔ID数组
*
* 返回值  ： 0失败 >0物理区段数量
*
*/
UINT8 GetLogRouteProSwData(const UINT16 logRouteId, OUT RouteProtectSwitchStruct szRouteProSwitchStruct[ROUTE_PROTECTSWI_SUM_MAX]);

/*
* 功能描述： 获取逻辑进路内道岔信息
* 参数说明： const UINT16 logRouteId, 进路ID
*            OUT RouteProtectSwitchStruct szRouteProtectSwitchStruct[ROUTE_PHYSICALSECTION_SUM_MAX] 输出道岔ID数组
*
* 返回值  ： 0失败 >0道岔数量
*
*/
UINT8 GetLogRouteSWData(const UINT16 logRouteId, OUT RouteSwitchStruct szRouteSwitchStruct[ROUTE_SWITCH_SUM_MAX]);

/*
* 功能描述： 设置逻辑进路逻辑区段锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetLogRouteSecLockState(const UINT16 logRouteId, const UINT8 lockState);

/*
* 功能描述： 设置逻辑进路防护道岔防护锁闭状态
* 参数说明： const UINT16 logRouteId, 进路ID
*            const UINT8 lockCommand, 锁闭状态
* 返回值  ： void
*/
void SetLogRouteProSwLockState(const UINT16 logRouteId, const UINT8 lockCommand);

/**
* @brief 设置逻辑区段对应所有逻辑进路区故解延时解锁周期
* @param const UINT32 dwCyc 周期号
* @return 无
* @note：by cgh 20231013
*/
void SetLogSecLogRDelayErrLockCyc(const UINT16 wLogSectionId, const UINT32 dwCyc);

/*
* 功能描述： 逻辑进路区段征用检查处理
* 参数说明： const UINT16 logRouteId   逻辑进路号
* 返回值  ： CI_ERROR
*            CI_SUCCESS
* 故障编码： EFUNC_CHECK_SECTION_USE
*/
UINT8 LogRoutePhySecUseLogicProcess(const UINT16 logRouteId);

/*
* 功能描述： 逻辑进路内区段未征用状态检查
* 参数说明： UINT16 const routeId
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteAllSecUseVainCheck(UINT16 const logRouteId, UINT16* pDevId, UINT8* pDevState);

/*
*函数功能：区段处于进路征用时，检查区段道岔状态与进路内要求的是否一致
*参数说明：const UINT16 devId 物理区段ID
*          const UINT16 routeId 已经征用或要征用该区段的进路
*返回值：0：失败
*        1：成功
*/
UINT8 CheckPhysecUseStateInLogRoute(const UINT16 devId, const UINT16 logRouteId);

/*
*函数功能：检查逻辑进路防护道岔所在区段的征用
*参数说明：const UINT16 logRouteId  逻辑进路
*输出参数：UINT16* pDevId , UINT8* pDevState
*返回值：0：失败
*        1：成功
*/
UINT8 CheckProSwUseStateInLogRoute(UINT16 const logRouteId, UINT16* pDevId, UINT8* pDevState);

/*
*函数功能：获取指定ID逻辑进路包含的物理区段
*参数说明：const UINT16 wlogicRouteId 逻辑进路ID
*          UINT16 szPhySecId[] 逻辑进路包含的物理区段ID数组（返回）
*返回值：0: 获取失败
*        >0: 获取成功
* Created By LQ 2023/10/14
*/
UINT8 GetLogicRouteIncPhySec(const UINT16 wlogicRouteId, UINT16 szPhySecId[]);

/*
*函数功能：获取指定ID逻辑进路车脚下包含的物理区段(且物理区段包含在逻辑进路中才计入)
*参数说明：const UINT16 wlogicRouteId 逻辑进路ID
*          UINT16 szPhySecId[] 逻辑进路车脚下包含的物理区段ID数组（返回）
*返回值：0: 获取失败
*        >0: 获取成功
*/
UINT8 GetLogicRouteTrainLogIncPhySec(const UINT16 wlogicRouteId, UINT16 szPhySecId[]);


/*
*函数功能：初始化逻辑进路内属于同一进路物理区段，不属于本进路，且不属于道岔防护区域逻辑区段+属于同一道岔防护区段逻辑区段，不属于本进路的逻辑区段
* 参数说明：UINT16 const logRouteId 逻辑进路ID
* 返回值：0，失败；1，成功
* ********************************************/
void LogRouteOutLgcSecConfigDataInit(UINT16 const logRouteId);

/*
功能描述: 逻辑进路驱动道岔处理
输入参数 : const UINT16 routeId 进路ID
输出参数 : const UINT8 DrivFlag 道岔驱动标志
返回值 : 无
*/
void LogRouteDrvInnerSwitch(const UINT16 logRouteId, const UINT8 DrivFlag);

/*
* 功能描述： 检查逻辑进路内道岔及防护道岔位置正确
* 参数说明： const UINT16 logRouteId, 进路ID
* 返回值  ： UINT8
*	CI_SUCCESS:道岔位置正确
*	CI_ERROR:道岔位置不正确
*/
UINT8 ChekLogRouteSwPosRight(const UINT16 logRouteId);

/*
* 功能描述： 检查逻辑进路锁闭是否有道岔驱动超时
* 参数说明： const UINT16 logRouteId, 进路ID
* 返回值  ： UINT8
CI_SUCCESS:进路无道岔驱动超时
CI_ERROR:进路有道岔驱动超时
*/
UINT8 ChekLogRouteSwDrvOvTime(const UINT16 logRouteId);

/**
* @brief 区故解解锁逻辑进路
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogSecId 逻辑区段ID
* @return 无
* @note：by cgh 20231020
*/
void ErrLockFaultUnLockLogRoute(const UINT16 wLogSecId, const UINT16 wLogRouteId);

/**
* @brief 逻辑进路脚下逻辑区段逻辑锁闭处理
* @param const UINT16 wLogRouteId 逻辑进路ID
* @param const UINT16 wLogSecId 逻辑区段ID
* @return CI_SUCCESS：处理逻辑进路脚下逻辑锁闭成功
*		  CI_ERROR：处理逻辑进路脚下逻辑锁闭失败
*/
UINT8 LogSecLockInLogRouteProcess(const UINT16 wLogRouteId, const UINT16 wLogSecId);

/*
* 功能描述： 找到逻辑进路内第一个逻辑锁闭的逻辑区段
* 参数说明： const UINT16 wLogRouteId 逻辑进路ID
* 返回值  ： = 0 无效
*            > 0 逻辑区段ID
* by cgh 20250529
*/
UINT16 GetLogRouteFirLogLockLogId(const UINT16 wLogRouteId);

#ifdef __cplusplus
}
#endif

#endif
