/********************************************************
*                                                                                                            
* 文 件 名： RouteConfigDataManage.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-13
* 作    者： 联锁组
* 功能描述： 进路配置数据管理  
* 修改记录： 1. 20150723修改了RouteConfigDataManage()函数，改为只读取属于本联锁的进路数据 
*            2. 20150723增加了AddExtendRouteIdDataManage()函数，读取相邻联锁发送给本联锁的进路数据。
*
********************************************************/ 

#include "../Switch/SwitchDataManage.h"
#include "RouteConfigDataManage.h"

RouteConfigDataStruct RouteConfigDataStru[ROUTE_SUM_MAX];   /*定义进路配置数据结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
UINT16 LocalCiRouteIdBuf[ROUTE_SUM_MAX] = {0u};                   /*定义本地联锁进路ID映射数组*/
INT16 RouteCurSum = 0;   /*进路当前总数(本联锁和相邻联锁发送给本联锁的进路总数),进路的特殊处理*/

/*
* 功能描述： 获取指定ID进路索引号
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： ROUTE_SUM_MAX: 获取数据失败
*			<ROUTE_SUM_MAX: 查找成功
*/
UINT16 GetRouteConfigBufIndex(const UINT16 routeId)
{
	UINT16 retVal = ROUTE_SUM_MAX; 
	if ((1u <= routeId) && (ROUTE_SUM_MAX > routeId))
	{
        retVal = routeId;
	}
	else
	{
		;
	}

	return retVal;
}

/*
* 功能描述： 获取进路当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 进路当前总数
*/
UINT16 GetRouteCurSum(void)
{
	UINT16 retVal = 0u;
    if (RouteCurSum >= (INT16)ROUTE_SUM_MAX )
    {
        retVal = ROUTE_SUM_MAX;
    }
	else if (RouteCurSum < 0)
	{
		retVal = 0u;
	}
	else
    {
        retVal = (UINT16)RouteCurSum;
    }
	return retVal;
}

/*
* 功能描述： 获取整个进路数据
* 参数说明：   
* 返回值  ： 
            RouteConfigDataStruct*  
*/
RouteConfigDataStruct *GetRouteConfigData(void)
{
	return RouteConfigDataStru;
}


/*
* 功能描述： 获取指定数组下标对应的进路ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 进路ID      
*/
UINT16 GetRouteId(const UINT16 bufIndex)
{
	UINT16 retVal = CI_ERROR;
	if (bufIndex < GetRouteCurSum())
	{
		retVal = LocalCiRouteIdBuf[bufIndex];
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路所属联锁ID
* 参数说明： UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID      
*/
UINT8 GetRouteBelongCiId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BelongCiId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路方向
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID
*/
UINT8 GetRouteDirection(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteDirection;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路类型
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路类型    
*/
UINT8 GetRouteType(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteType;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID配置进路类型
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： 0: 获取数据失败
*			>0: 进路类型
*/
UINT8 GetConfigRouteType(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].ConfigRouteType;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路引导属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路引导属性      
*/
UINT8 GetRouteLeadProperty(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].LeadProperty;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路自动进路属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动进路属性      
*/
UINT8 GetRouteAutoRouteProperty(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].AutoRouteProperty;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路自动信号属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动信号属性      
*/
UINT8 GetRouteAutoSigProperty(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 property = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		property = RouteConfigDataStru[bufIndex].AutoSigProperty;
	}
	else
	{
		property = CI_ERROR;
	}
	return property;
}


/*
* 功能描述： 获取指定ID进路反向属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 反向进路属性      
*/
UINT8 GetRouteReverseProperty(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 property = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		property = RouteConfigDataStru[bufIndex].ReverseRouteProperty;
	}
	else
	{
		property = CI_ERROR;
	}
	return property;
}

/*
* 功能描述： 获取指定ID进路信号开放显示颜色
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路信号开放颜色      
*/
UINT8 GetRouteSignalOpenColor(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;
	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteSignalOpenColor;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路引导信号开放显示颜色
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路信号开放颜色      
*/
UINT8 GetRouteLeadSignalOpenColor(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;
	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].LeadOpenColor;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路起始信号机ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路起始信号机ID
*/
UINT16 GetRouteStartSignalId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].StartSignalId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路终止信号机ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路终止信号机ID
*/
UINT16 GetRouteEndSignalId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].EndSignalId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路包含物理区段数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 物理区段数目
*/
UINT8 GetRoutePhysicalSectionSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RoutePhySecSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路包含物理区段结构体
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： null：获取数据失败
*           !null: 进路物理区段结构指针
*/
RoutePhysicalSectionStruct* GetRouteSectionData(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RoutePhysicalSectionStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RoutePhySectionStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路包含道岔数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔数目
*/
UINT8 GetRouteSwitchSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteSwitchSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路包含道岔数据
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 道岔结构指针
*/
RouteSwitchStruct* GetRouteSwitchData(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteSwitchStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteSwitchStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路关联防护道岔数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔数目
*/
UINT8 GetRouteRelatedProtectSwitchSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteProtectSwitchSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路关联防护道岔数据
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 道岔结构指针
*/
RouteProtectSwitchStruct* GetRouteRelatedProtSwitchData(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteProtectSwitchStruct* pRetVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		pRetVal = RouteConfigDataStru[bufIndex].RouteProtectSwitchStru;
	}
	else
	{
		pRetVal = NULL;
	}
	return pRetVal;
}

/*
* 功能描述： 获取指定ID进路最远端道岔区段ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔数目
*/
UINT16 GetRouteLastSwichPhySecId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteLastSwichPhySecId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路包含带动道岔数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 道岔数目
*/
UINT8 GetRouteAssocSwitchSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteAssocSwitchSum;
	}

	return retVal;
}


/*
* 功能描述： 获取指定ID进路包含的指定带动道岔的数据
* 参数说明： const UINT16 routeId, 进路ID    
*			const UINT8 drvSwiIndex 带动道岔索引
*			RouteAssocSwitchStruct * pRouteAssocSwitchStru 带动道岔数据结构
* 返回值  ： 	无 
*				
*/
void GetRouteAssocSwitchData(const UINT16 routeId, const UINT8 drvSwiIndex, RouteAssocSwitchStruct * pRouteAssocSwitchStru)
{
	UINT16 bufIndex = 0u;  /*数组下标*/

	if(NULL != pRouteAssocSwitchStru)
	{
		bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

		if(bufIndex < ROUTE_SUM_MAX)
		{
			if(drvSwiIndex < RouteConfigDataStru[bufIndex].RouteAssocSwitchSum)
			{
				*pRouteAssocSwitchStru = RouteConfigDataStru[bufIndex].RouteAssocSwitchStru[drvSwiIndex];			
			}

		}

	}
}

/*
* 功能描述： 获取指定ID进路敌对信号数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 敌对信号数目
*/
UINT8 GetRouteEnemySignalSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteEnemySignalSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路敌对信号数据
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 敌对信号结构指针
*/
RouteEnemySignalStruct* GetRouteEnemySignalData(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteEnemySignalStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteEnemySigStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路侵限物理区段数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 侵限物理区段数目
*/
UINT8 GetRouteIntrudePhySectionSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteIntruPhySecSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路侵限区段数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 侵限物理区段结构指针
*/
RouteIntrudePhySectionStruct* GetRouteIntrudePhySectionData(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteIntrudePhySectionStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteIntruPhySecStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路点式接近区段条件数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*           >0: 点式接近物理区段数目
*/
UINT8 GetRouteBlocNearSecConditionSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocNearConditionSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路点式接近物理区段结构数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 点式接近物理区段ID数组指针
*/
RouteNearPhySectionStruct* GetRouteBlocNearPhySectionStru(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteNearPhySectionStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocNearPhySecStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路CBTC接近区段条件数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*           >0: 点式接近物理区段数目
*/
UINT8 GetRouteCbtcNearSecConditionSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;
	
	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
	
	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CbtcNearConditionSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路CBTC接近物理区段结构数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: CBTC接近物理区段ID数组指针
*/
RouteNearLogicSectionStruct* GetRouteCbtcNearLogSectionStru(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteNearLogicSectionStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CbtcNearLogSecStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路点灯逻辑区段数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*           >0: 点灯逻辑区段数目
*/
UINT8 GetRouteLightLogSectionSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteLightLogSecSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路点灯逻辑区段ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 点灯逻辑区段ID数组指针
*/
UINT16* GetRouteLightLogSectionIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteLightLogSecIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路折返信号机数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*           >0: 折返信号机数目
*/
UINT8 GetRouteReturnSignalSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteReturnSigSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路折返信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 折返信号机ID数组指针
*/
UINT16* GetRouteReturnSignalIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteReturnSigIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路防护区段组数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*           >0: 防护区段组数目
*/
UINT8 GetRouteOverlapSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OverlapSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路防护区段组ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 防护区段组ID数组指针
*/
UINT16* GetRouteOverlapIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OverlapIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路离去物理区段ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 离去物理区段ID
*/
UINT16 GetRouteLeavePhySecId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;/*返回值*/

	UINT8 railwayType = CI_TRADITION_RAILWAY;

	railwayType = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*获取线路类型*/

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		if(CI_TRADITION_RAILWAY == railwayType)
		{/*传统城轨*/
			retVal = RouteConfigDataStru[bufIndex].RouteLeavePhySecId;
		}/* zt 删除单轨相关代码 2022-02-15 */
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路停稳物理区段ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 停稳物理区段ID
*/
UINT16 GetRouteStopSteadyPhySecId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].StopSteadyPhySecId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路本端照查继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ：  0: 获取数据失败
*			 >0: 本端照查继电器ID
*/
UINT16 GetRouteThisZhaoChaRelayId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].ThisZhaoChaRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路取消照查继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ：  0: 获取数据失败
*			 >0: 取消继电器ID
*/
UINT16 GetRouteCancleZhaoChaRelayId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].cancelZhaochaRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}

/*
* 功能描述： 获取指定ID进路对端照查继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ：  0: 获取数据失败
*			 >0: 对端照查继电器ID
*/
UINT16 GetRouteThatZhaoChaRelayId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].ThatZhaoChaRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路封锁信号机数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 封锁信号机数目
*/
UINT8 GetRouteFengSuoSignalSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteFSSignalSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路封锁信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 封锁信号机ID数组指针
*/
UINT16* GetRouteFengSuoSignalIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 * retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteFSSignalIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路开放需关闭信号机数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 开放需关闭信号机数目
*/
UINT8 GetRouteOpenNeedCloseSigSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OpenNeedCloseSigSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路开放需关闭信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 开放需关闭信号机ID数组指针
*/
UINT16* GetRouteOpenNeedCloseSigIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal =  NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OpenNeedCloseSigIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路开放需开放信号机数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 开放需开放信号机数目
*/
UINT8 GetRouteOpenNeedOpenSigSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OpenNeedOpenSigSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路开放需开放信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 开放需开放信号机ID数组指针
*/
UINT16* GetRouteOpenNeedOpenSigIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;  

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OpenNeedOpenSigIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路CBTC开放需开放信号机数目
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： 0: 获取数据失败
*			>0: 开放需开放信号机数目
*/
UINT8 GetRouteCbtcNeedOpenSigSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CBTCOpenNeedOpenSigSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路CBTC开放需开放信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： NULL: 获取数据失败
*			!NULL: 开放需开放信号机ID数组指针
*/
UINT16* GetRouteCbtcNeedOpenSigIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CBTCOpenNeedOpenSigIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID进路不能同时开放信号机数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 不能同时开放信号机数目
*/
UINT8 GetRouteOnlyOneOpenSigSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OnlyOneOpenSigSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路不能同时开放信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 不能同时开放信号机ID数组指针
*/
UINT16* GetRouteOnlyOneOpenSigIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL; 

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].OnlyOneOpenSigIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路第一个物理区段ID
* 参数说明： const UINT16 routeId, 进路ID      
* 返回值  ： 0: 不是进路第一区段
*			>0: 进路第一区段ID
*/
UINT16 GetRouteFirstPhySectionId(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 phySecSum = 0u;  /*进路物理区段总数*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex >= ROUTE_SUM_MAX)
	{
		retVal = CI_ERROR;
	}
	else
	{
		phySecSum = RouteConfigDataStru[bufIndex].RoutePhySecSum;

		if (phySecSum > 0u)
		{
			retVal = RouteConfigDataStru[bufIndex].RoutePhySectionStru[0].PhysicalSectionId;
		}
		else
		{
			retVal = CI_ERROR;
		}
	}
	return retVal;
	

}


/*
* 功能描述： 获取指定ID进路最后一个物理区段ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 不是进路最后一个区段
*			>0: 进路最后一个物理区段ID
*/
UINT16 GetRouteLastPhySectionId(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 phySecSum = 0u;  /*进路物理区段总数*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex >= ROUTE_SUM_MAX)
	{
		retVal = CI_ERROR;
	}
	else
	{
		phySecSum = RouteConfigDataStru[bufIndex].RoutePhySecSum;

		if (phySecSum > 0u)
		{
			retVal = RouteConfigDataStru[bufIndex].RoutePhySectionStru[phySecSum-1U].PhysicalSectionId;
		}
		else
		{
			retVal = CI_ERROR;
		}
	}
	
	return retVal;

}


/*
* 功能描述： 获取指定ID进路物理区段下一物理区段ID
* 参数说明： const UINT16 routeId, 进路ID 
*            const UINT16 phySectionId, 物理区段ID     
* 返回值  ： CI_ERROR: 失败
*			 >0: 下一物理区段ID
*/
UINT16 GetRouteNextPhySecId(const UINT16 routeId, const UINT16 phySectionId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 phySecSum = 0u;  /*进路物理区段总数*/
	UINT8 ii = 0u;  /*循环变量*/
	UINT16 retVal = CI_ERROR; 

	UINT8 railwayType = CI_TRADITION_RAILWAY;

	UINT16 phySecInx = 0u;

	UINT16 phySecIdt = 0u;
	UINT16 switchIdt = 0u;
	UINT8 switchPos = 0u;

	UINT8 switchCurPos = 0u;

	UINT16 switchInx = 0u;

	UINT8 switIsMatch = CI_FALSE;

	RouteConfigDataStruct *pRouteConfDataStru = NULL;

	railwayType = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/**/

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex >= ROUTE_SUM_MAX)
	{
		retVal = CI_ERROR;
	}
	else
	{
		phySecSum = RouteConfigDataStru[bufIndex].RoutePhySecSum;

		if (phySecSum == 0u)
		{
			retVal = CI_ERROR;
		}
		else
		{
			/*查找物理区段ID*/
			for (ii = 0u; ii < phySecSum; ii++)
			{
				if (phySectionId == RouteConfigDataStru[bufIndex].RoutePhySectionStru[ii].PhysicalSectionId)
				{
					if (ii < (phySecSum - 1u))
					{
						/*非最后区段*/
						retVal = RouteConfigDataStru[bufIndex].RoutePhySectionStru[ii+1U].PhysicalSectionId;
					}
					else if (ii == (phySecSum - 1u))
					{
						if(CI_TRADITION_RAILWAY == railwayType)
						{
							/*最后区段返回离去区段*/
							retVal = RouteConfigDataStru[bufIndex].RouteLeavePhySecId;
						}/* zt 删除单轨相关代码 2022-02-15 */
						else
						{

						}
					}
					else
					{
						retVal = CI_ERROR;
					}

					break;
				}
			}
		}
	}

	return retVal;
}


/*
* 功能描述：	整理读入的进路配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 RouteConfigDataManage(void)
{
    UINT16 ii = 0u;      /*游标*/
    UINT16 jj = 0u;      /*游标*/
    UINT16 routeConfigDataSum = 0u;      /*进路设备配置数据总数*/
	UINT8 retVal = CI_SUCCESS;

    /*保存进路ID索引数组*/
    routeConfigDataSum = GetRouteCurSum();
    if (routeConfigDataSum >= ROUTE_SUM_MAX)
    {/*配置数据总数错误*/
        
        retVal = CI_ERROR;
	}
	else
	{
		for (ii = 0u; ii < ROUTE_SUM_MAX; ii++)
		{
			if (jj == routeConfigDataSum)
			{/*遍历有效数据完毕*/

				break;
			}

			if (RouteConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
			{/*该部分为有效数据*/
				LocalCiRouteIdBuf[jj] = RouteConfigDataStru[ii].RouteId;
				jj++;
			}
 
		}
	}


    return retVal;
}


/*
* 功能描述： 获取Bloc进路紧急停车按钮数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数目      
*/
UINT8 GetRouteBlocEsbSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocEsbSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取Cbtc进路紧急停车按钮数目
* 参数说明： const UINT16 routeId, 进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数目      
*/
UINT8 GetRouteCbtcEsbSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CbtcEsbSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取Bloc进路紧急停车按钮数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数组指针      
*/
UINT16* GetRouteBlocEsbIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 * retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocEsbIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取Cbtc进路紧急停车按钮数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数组指针      
*/
UINT16* GetRouteCbtcEsbIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;  

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CbtcEsbIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取Bloc进路屏蔽门数目
* 参数说明： const UINT16 routeId, 进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数目      
*/
UINT8 GetRouteBlocPsdSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocPsdSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取Cbtc进路屏蔽门数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数目      
*/
UINT8 GetRouteCbtcPsdSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CbtcPsdSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取Bloc进路屏蔽门数组
* 参数说明： const UINT16 routeId, 进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数组指针      
*/
UINT16* GetRouteBlocPsdIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;
	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocPsdIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取Cbtc进路屏蔽门数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数组指针      
*/
UINT16* GetRouteCbtcPsdIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CbtcPsdIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}


/*
* 功能描述： 获取进路内方第一逻辑区段ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 内方第一逻辑区段ID      
*/
UINT16 GetRouteInFirstLogSecId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].InFirstLogSecId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取进路内方最后一个逻辑区段ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 内方最后一逻辑区段ID      
*/
UINT16 GetRouteInLastLogSecId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].InLastLogSecId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID进路对端照查物理区段数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 对端照查物理区段数目
*/
UINT8 GetRouteThatZhaoChaPhySecSum(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT8 retVal = 0u;
    bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
    
    if (bufIndex < ROUTE_SUM_MAX)
    {
        retVal = RouteConfigDataStru[bufIndex].ThatZhaoChaPhySecSum;
    }
    else
    {
        retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路对端照查物理区段ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 对端照查物理区段ID数组指针
*/
UINT16* GetRouteThatZhaoChaPhySecIdBuf(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16 * retVal = NULL;
    
    bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
    
    if (bufIndex < ROUTE_SUM_MAX)
    {
        retVal = RouteConfigDataStru[bufIndex].ThatZhaoChaPhySecIdBuf;
    }
    else
    {
        retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路抵触进路ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 抵触进路ID数组指针
*/
UINT16* GetRouteOpposedRouteIdBuf(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16* returnValue = NULL;
    
    bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
    
    if (bufIndex < ROUTE_SUM_MAX)
    {
        returnValue = RouteConfigDataStru[bufIndex].OpposedRouteIdBuf;
    }
	return returnValue;
}

/*
* 功能描述： 获取指定ID进路抵触进路ID数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数目
*/
UINT8 GetRouteOpposedRouteIdSum(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT8 returnValue = CI_ERROR;
    
    bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
    
    if (bufIndex < ROUTE_SUM_MAX)
    {
        returnValue = RouteConfigDataStru[bufIndex].OpposedRouteSum;
    }
	return returnValue;
}

/*
* 功能描述： 获取以指定ID进路的起始信号机作为终端信号机的折返进路ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 以指定ID进路的起始信号机作为终端信号机的折返进路ID数组指针
*/
UINT16* GetReturnEndSigAsStartSigRoute(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16* returnValue = NULL;
    bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
    
    if (bufIndex < ROUTE_SUM_MAX)
    {
        returnValue = RouteConfigDataStru[bufIndex].SignalOpposedRouteIdBuf;
    }

	return returnValue;
}

/*
* 功能描述：  获取以指定ID进路的起始信号机作为终端信号机的折返进路数目
* 参数说明：  const UINT16 routeId, 进路ID    
* 返回值  ： 以指定ID进路的起始信号机作为终端信号机的折返进路数目
*/
UINT8 GetRtnEndSigAsStartSigRouteSum(const UINT16 routeId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT8 returnValue = CI_ERROR;
    bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
    
    if (bufIndex < ROUTE_SUM_MAX)
    {
        returnValue = RouteConfigDataStru[bufIndex].SignalOpposedRouteSum;
    }
	
	return returnValue;
}


/*
* 功能描述： 获取Bloc其他联锁检查数目
* 参数说明： const UINT16 routeId, 进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数目      
*/
UINT8 GetRouteBlocOtherCiSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 ret = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].BlockOtherCiSum;
	}
	else
	{
		ret = CI_ERROR;
	}

	return ret;
}


/*
* 功能描述： 获取Cbtc进路其他联锁检查条件数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮数目      
*/
UINT8 GetRouteCbtcOtherCiSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 ret = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].CbtcOtherCiSum;
	}
	else
	{
		ret = CI_ERROR;
	}

	return ret;
}

/*
* 功能描述： 获取Bloc进路其他联锁检查条件数组
* 参数说明： const UINT16 routeId, 进路ID     
* 返回值  ：  Bloc进路其他联锁检查条件数组     
*/

RouteOtherCheckStruct* GetRouteBlocOtherCiBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/

	RouteOtherCheckStruct* ret = NULL;


	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].BlockOtherCiBuff;
	}
	else
	{
		ret = NULL;
	}

	return ret;
}

/*
* 功能描述： 获取Cbtc进路其他联锁检查条件数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取失败
*			!= NULL: CBTC进路其他联锁检查条件数组     
*/

RouteOtherCheckStruct* GetRouteCbtcOtherCiBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteOtherCheckStruct*  ret = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff;
	}
	else
	{
		ret = NULL;
	}

	return ret;
}

/*
* 功能描述： 获取防淹门数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 防淹门数目      
*/
UINT16 GetRouteFloodGateSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 ret = (UINT16)CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].floodGateSum;
	}
	else
	{
		ret = CI_ERROR;
	}

	return ret;
}

/*
* 功能描述： 获取防淹门ID数组
* 参数说明： const UINT16 routeId, 进路ID     
* 返回值  ： 防淹门ID数组      
*/
UINT16* GetRouteFloodGateBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* ret = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].floodGateIdBuf;
	}
	else
	{
		ret = NULL;
	}

	return ret;
}

/*
* 功能描述：	整理读入的相邻联锁进路配置数据
* 参数说明：	routeSum 进路数量
*				routeIdBuff 相邻联锁发送给本联锁的进路ID配置数据
* 返回值  ：	1,整理成功
*				0,整理失败
*/
UINT8 AddExtendRouteIdDataManage(UINT16 routeSum,const UINT16 *routeIdBuff)
{
	UINT16  index = 0u;  /*数组下标*/
	UINT16  ii = 0u;
	UINT8 retVal = 1u;

	if (((UINT16)RouteCurSum + routeSum) >= ROUTE_SUM_MAX)
	{/*入口防护*/
		retVal = 0u;
	}
	else
	{
		index = (UINT16)RouteCurSum;
		RouteCurSum += (INT16)routeSum;
		for(ii = 0u;ii< routeSum;ii++)
		{
			LocalCiRouteIdBuf[index+ii] = routeIdBuff[ii];/*追加到LocalCiRouteIdBuf*/
		}
	}

	return retVal;
}
/*
* 功能描述： 获取风井进路属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 风井进路属性 
*/
UINT8 GetAirShaftRouteType(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 ret = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].AirShaftRouteType;
	}

	return ret;
}
/*
* 功能描述： 获取自动触发进路属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动触发进路属性 
*/
UINT8 GetAutoTriggerType(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 ret = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		ret = RouteConfigDataStru[bufIndex].AutoTriggerType;
	}

	return ret;
}
/*
* 功能描述： 获取指定ID进路触发物理区段结构数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 触发物理区段ID数组指针
*/
RouteTriggerPhySectionStruct* GetRouteBlocTrigLogSecStru(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	RouteTriggerPhySectionStruct* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocTriggerPhySecStru;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}
/*
* 功能描述： 检查进路所包含的物理区段书否全为列检库区段
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： CI_SUCCESS: 全为列检库区段
*			CI_ERROR: 不全为列检库区段
*/
UINT8 CheckRoutePhysicalType(const UINT16 routeId)
{
	RoutePhysicalSectionStruct* physicalStru = NULL;  /*以折返信号机为始端的进路包含的物理区段信息*/
	UINT8 routeSecNum = 0u;	/*以折返信号机为始端的进路包含的物理区段数量*/
	UINT8 ii = 0u;
	UINT8 reVal = CI_ERROR;
	routeSecNum = GetRoutePhysicalSectionSum(routeId);
	physicalStru = GetRouteSectionData(routeId);
	if (NULL == physicalStru)
	{
		/*无检查项*/
		reVal = CI_ERROR;
	}
	else
	{
		/*开始检查*/
		for (ii = 0u; ii < routeSecNum; ii++)
		{
			if (PHYSICAL_SECTION_LJK_YES != GetPhySecLjkFlag(physicalStru[ii].PhysicalSectionId))
			{
				reVal = CI_ERROR;
				break;
			}
			else
			{
				reVal = CI_SUCCESS;
			}
		}
	}			
	return reVal;
}


/*
* 功能描述： 获取指定ID进路初始敌对状态
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： ROUTE_INIT_EMEMY: 初始化敌对
*			 ROUTE_INIT_NOT_EMEMY: 初始化无敌对
*/
UINT8 GetRouteInitEnemyStatus(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = ROUTE_INIT_ENEMY;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInitEnemyStatus;
	}
	else
	{
		retVal = ROUTE_INIT_ENEMY;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路初始侵限状态
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： ROUTE_INIT_INSTRU: 初始化侵限
*			 ROUTE_INIT_NOT_INSTRU: 初始化无侵限
*/
UINT8 GetRouteInitInstruStatus(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = ROUTE_INIT_INSTRU;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInitInstruStatus;
	}
	else
	{
		retVal = ROUTE_INIT_INSTRU;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路初始封锁状态
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： ROUTE_INIT_FS: 初始化封锁
*			 ROUTE_INIT_NOT_FS: 初始化无封锁
*/
UINT8 GetRouteInitFSStatus(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = ROUTE_INIT_FS;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInitFSStatus;
	}
	else
	{
		retVal = ROUTE_INIT_FS;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路调车同意按钮继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： >0: 调车请求继电器ID
*			 0: 没有配置
*/
UINT16 GetRouteDCTAJId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].DCRouteTAJId;
	}
	else
	{
		retVal = 0u;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路调车请求继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： >0: 调车请求继电器ID
*			 0: 没有配置
*/
UINT16 GetRouteDCQJId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].DCRouteDCQJId;
	}
	else
	{
		retVal = 0u;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路调车请求继电器2ID
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： >0: 调车请求继电器2ID
*			 0: 没有配置
* by cgh 20250603
*/
UINT16 GetRouteDCQJTwoId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].DCRouteDCQJTwoId;
	}
	else
	{
		retVal = 0U;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路状态初锁/初锁异常/预先锁闭延时解锁属性
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路延时解锁属性      
*/
UINT8 GetRouteNeedDelayUnlock(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteNeedDelayUnlock;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路继电接口下的取消照查继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ：  0: 获取数据失败
*			 >0: 取消继电器ID
*/
UINT16 GetRouteCancleZCRelayId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].CancelZhaoChaRelayOnRelayIntrf;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}

/*
* 功能描述： 获取指定ID进路继电接口下的本端照查继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ：  0: 获取数据失败
*			 >0: 继电接口下的本端照查继电器ID
*/
UINT16 GetRouteRelayBenDuanZcIdOnRelay(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RelayBenDuanZcIdOnRelayIntrf;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}

/*
* 功能描述： 获取指定ID进路继电接口下的对端照查继电器ID
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ：  0: 获取数据失败
*			 >0: 继电接口下的对端照查继电器ID
*/
UINT16 GetRouteRelayDuiDuanZcIdOnRelay(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].RelayDuiDuanZcIdOnRelayIntrf;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}

/**********************************************************************************/
/*
* 功能描述： 获取指定ID进路内是否有方向变化点
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 是否有方向变化点
*/
UINT8 GetRouteHaveDirChangePointIn(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].HaveDirChangePointInRoute;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路与保护区段之间是否有方向变化点
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 是否有方向变化点
*/
UINT8 GetRouteHaveDirChangePointAfter(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].HaveDirChangePointAfterRoute;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路指定区段锁闭是否取反
* 参数说明： const UINT16 routeId, 进路ID    
*			 const UINT16 phySecId，物理区段ID
* 返回值  ： 0: 失败
*			>0: 是否取反
*/
UINT8 GetRoutePhySecShouldLockOppose(const UINT16 routeId,const UINT16 phySecId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;
	UINT16 ii = 0u;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		for (ii=0u;ii<RouteConfigDataStru[bufIndex].RoutePhySecSum;ii++)
		{
			if (RouteConfigDataStru[bufIndex].RoutePhySectionStru[ii].PhysicalSectionId == phySecId)
			{
				retVal = RouteConfigDataStru[bufIndex].RoutePhySectionStru[ii].LockDirShouldOpposedToRoute;
				break;
			}
			else
			{
			}
		}
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID进路所属虚拟联锁ID
* 参数说明： UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 所属虚拟联锁ID      
*/
UINT8 GetRouteBelongVirCiId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].BelongVirCIid;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路包含的逻辑区段数量
* 参数说明： const UINT16 routeId, 进路ID    
*			 
* 返回值  ： 0: 获取失败
*			>0: 逻辑区段数
*/
UINT16 GetRouteLogSectionSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInLogTrackSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路包含的逻辑区段ID数组
* 参数说明： const UINT16 routeId, 进路ID    
*			 
* 返回值  ： NULL: 获取失败
*			 非空: 逻辑区段ID数组
*/
UINT16* GetRouteLogSectionIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
	if (ROUTE_SUM_MAX > bufIndex) 
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInLogTrackIdBuf;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路内道岔关联的非进路内逻辑区段ID数量
* 参数说明： const UINT16 routeId, 进路ID
*
* 返回值  ： 0: 获取失败
*			>0: 逻辑区段数
* add 20221005 适配进路驱动道岔提前扳动
*/
UINT16 GetRouteSwitOtherLogSecSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInSwitOtherPosLogSecSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路内道岔关联的非进路内逻辑区段ID数组
* 参数说明： const UINT16 routeId, 进路ID
*
* 返回值  ： NULL: 获取失败
*			 非空: 逻辑区段ID数组
* add 20221005 适配进路驱动道岔提前扳动
*/
UINT16* GetRouteSwitOtherPosLogSecIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteInSwitOtherPosLogSecIdBuf;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路包含物理区段关联的非进路内且非道岔关联的逻辑区段ID数量
* 参数说明： const UINT16 routeId, 进路ID
*
* 返回值  ： 0: 获取失败
*			>0: 逻辑区段数
* add 20221005 适配进路驱动道岔提前扳动
*/
UINT16 GetRouteOutLogSecSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteOutLogSecSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路包含物理区段关联的非进路内且非道岔关联的逻辑区段ID数组
* 参数说明： const UINT16 routeId, 进路ID
*
* 返回值  ： NULL: 获取失败
*			 非空: 逻辑区段ID数组
* add 20221005 适配进路驱动道岔提前扳动
*/
UINT16* GetRouteOutLogSecSumIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].RouteOutLogSecSumIdBuf;
	}
	return retVal;
}

/*
* 功能描述： 获取进路逻辑区段的下一逻辑区段ID
* 参数说明： const UINT16 routeId, 进路ID 
*            const UINT16 logSectionId, 逻辑区段ID     
* 返回值  ： CI_ERROR: 失败
*			 >0: 下一逻辑区段ID
*/
UINT16 GetRouteNextLogSecId(const UINT16 routeId, const UINT16 logSectionId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 logSecSum = 0u;  /*进路逻辑区段总数*/
	UINT16 i = 0u;  /*循环变量*/
	UINT16* logSecIdBuf = NULL;
	UINT16 retVal = CI_ERROR; 

	/*获取进路逻辑区段信息*/
	bufIndex = GetRouteConfigBufIndex(routeId);  
	logSecSum = GetRouteLogSectionSum(routeId);
	logSecIdBuf = GetRouteLogSectionIdBuf(routeId);

	if (ROUTE_SUM_MAX > bufIndex)
	{
		if((0u < logSecSum) )
		{
			for(i = 0u; i < logSecSum; i++)
			{
				/*找到逻辑区段*/
				if(logSecIdBuf[i] == logSectionId)
				{
					/*当前区段不是进路最后逻辑区段*/
					if(i < (logSecSum - 1u))
					{
						/*返回下一逻辑区段*/
						retVal = logSecIdBuf[i + 1U];
					}
					/*最后一个逻辑区段*/
					else if(i == (logSecSum - 1u))
					{
						/*返回本逻辑区段*/
						retVal = logSecIdBuf[i]; 
					}
					else
					{
						/*返回错误*/
						retVal = CI_ERROR; 
					}
				}
				else
				{
				}
			}
		}
		else
		{
		}
	}
	else
	{
	}
	return(retVal);

}


/*
* 功能描述： 获取进路对应防护道岔的位置
* 参数说明： const UINT16 wRouteId, 进路ID
*            const UINT16 logSectionId, 逻辑区段ID
* 返回值  ： CI_ERROR: 失败
*			 : SwitchState
*			SWITCH_POSITION_DINGWEI:定位
*			SWITCH_POSITION_FANWEI: 反位
*			0xFF 进路无此防护道岔
*/
UINT8 GetRouteProtectSwitchState(const UINT16 wRouteId, const UINT16 wSwitchId)
{
	/* 进路关联防护道岔 */
	UINT8 chRetVal = CI_ERROR;
	UINT8 chProtectSwSum = 0U;
	UINT8 ii = 0U;
	RouteProtectSwitchStruct* stProtectSwBuf = NULL;

	chProtectSwSum = GetRouteRelatedProtectSwitchSum(wRouteId);
	stProtectSwBuf = GetRouteRelatedProtSwitchData(wRouteId);
	if ((ROUTE_PROTECTSWI_SUM_MAX > chProtectSwSum) && (NULL != stProtectSwBuf))
	{
		if ((0U != wSwitchId) && (UINT16_MAX != wSwitchId))
		{
			for (ii = 0U; ii < chProtectSwSum; ii++)
			{
				if (stProtectSwBuf[ii].ProtectSwitchId == wSwitchId)
				{
					chRetVal = stProtectSwBuf[ii].ProtectPosition;
					break;
				}
				else
				{
					/*继续执行*/
				}
			}

			if (ii == chProtectSwSum)
			{
				chRetVal = UINT8_MAX;
			}
		}
		else
		{
			chRetVal = CI_ERROR;
		}
	}
	else
	{
		chRetVal = CI_ERROR;
	}

	return chRetVal;

}


/*
* 功能描述： 获取进路是否包含防护道岔
* 参数说明： const UINT16 wRouteId, 进路ID
*            const UINT16 logSectionId, 逻辑区段ID
* 返回值  ： CI_ERROR: 失败
*			 ROUTE_INC_PROTECT_SW_YES: 包含
*			 ROUTE_INC_PROTECT_SW_NO:未包含
*/
UINT8 GetRouteIncProtectSwitch(const UINT16 wRouteId, const UINT16 wSwitchId)
{
	/* 进路关联防护道岔 */
	UINT8 chRetVal = CI_ERROR;
	UINT8 chProtectSwSum = 0U;
	UINT8 ii = 0U;
	RouteProtectSwitchStruct* stProtectSwBuf = NULL;

	chProtectSwSum = GetRouteRelatedProtectSwitchSum(wRouteId);
	stProtectSwBuf = GetRouteRelatedProtSwitchData(wRouteId);
	if ((ROUTE_PROTECTSWI_SUM_MAX > chProtectSwSum) && (NULL != stProtectSwBuf))
	{
		if ((0U != wSwitchId) && (UINT16_MAX != wSwitchId))
		{
			for (ii = 0U; ii < chProtectSwSum; ii++)
			{
				if (stProtectSwBuf[ii].ProtectSwitchId == wSwitchId)
				{
					chRetVal = ROUTE_INC_PROTECT_SW_YES;
					break;
				}
				else
				{
					/*继续执行*/
				}
			}

			if (ii == chProtectSwSum)
			{
				chRetVal = ROUTE_INC_PROTECT_SW_NO;
			}
		}
		else
		{
			chRetVal = CI_ERROR;
		}
	}
	else
	{
		chRetVal = CI_ERROR;
	}

	return chRetVal;

}
/*
* 功能描述： 获取进路最后一个逻辑区段
* 参数说明： const UINT16 routeId, 进路ID
*
* 返回值  ： 逻辑区段ID
*/
UINT16 GetRouteLastLogSectionId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;
	UINT16* logSecIdBuf = NULL;
	UINT16 logSecSum = 0u;  /*进路逻辑区段总数*/

	logSecSum = GetRouteLogSectionSum(routeId);
	logSecIdBuf = GetRouteLogSectionIdBuf(routeId);

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/
	if (ROUTE_SUM_MAX > bufIndex)
	{
		if (0u < logSecSum) 
		{
			retVal = logSecIdBuf[logSecSum];
		}
		else
		{
		}
	}
	else
	{
		retVal = 0u;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID进路始端信号机为终端的进路数目
* 参数说明： UINT16 routeId, 进路ID    
* 返回值  ： 始端信号机为终端的进路数目      
*/
UINT8 GetRouteStartSigisEndRouteSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].SigisEndSigRouteSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路始端信号机为终端的进路ID数组
* 参数说明： UINT16 routeId, 进路ID    
* 返回值  ： 始端信号机为终端的进路ID数组     
*/
UINT16* GetRouteStartSigisEndRouteBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (ROUTE_SUM_MAX > bufIndex)
	{
		retVal = RouteConfigDataStru[bufIndex].SigisEndSigRouteIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID进路后备开放需开放信号机ID数组
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： NULL: 获取数据失败
*			!NULL: 开放需开放信号机ID数组指针
*/
UINT16* GetBlocRouteOpenNeedOpenSigBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 *retVal = NULL;  

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocOpenNeedOpenSigIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID进路后备开放需开放信号机数目
* 参数说明： const UINT16 routeId, 进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 开放需开放信号机数目
*/
UINT8 GetBlocRouteOpenNeedOpenSigSum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].BlocOpenNeedOpenSigSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/****************************分段进路***************************************/

/*
* 功能描述： 获取指定ID进路的分段进路属性
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： ROUTE_MAIN_PROPERTY: 主进路
*           ROUTE_SUB_PROPERTY   子进路
*			ROUTE_INIT_PROPERTY: 普通进路
*            0u                 获取失败
*/
UINT8 GetRouteMainorSubPropert(const UINT16 routeId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT8 retVal = 0U;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].MainOrSubData.MainRouteProperty;
	}
	else
	{
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID主进路的子进路数目
* 参数说明： const UINT16 mainrouteId, 进路ID
* 返回值  ： >0  ROUTE_SUB_PROPERTY   子进路数目
*			0  读取失败
*/
UINT8 GetSubRouteSum(const UINT16 mainrouteId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT8 retVal = 0U;

	bufIndex = GetRouteConfigBufIndex(mainrouteId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		if (ROUTE_MAIN_PROPERTY == RouteConfigDataStru[bufIndex].MainOrSubData.MainRouteProperty)
		{
			retVal = RouteConfigDataStru[bufIndex].MainOrSubData.RouteSubSum;
		}
		else
		{
			/*非主进路，返回0*/
		}

	}
	else
	{
		/*返回0*/
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID主进路的子进路ID数据
* 参数说明： const UINT16 mainrouteId, 进路ID
* 返回值  ： !NULL   子进路数据
*			NULL   读取失败
*/
UINT16* GetSubRouteBuff(const UINT16 mainrouteId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(mainrouteId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		if (ROUTE_MAIN_PROPERTY == RouteConfigDataStru[bufIndex].MainOrSubData.MainRouteProperty)
		{
			retVal = RouteConfigDataStru[bufIndex].MainOrSubData.RouteSubIdBuf;
		}
		else
		{
			/*非主进路，返回NULL*/
		}

	}
	else
	{
		/*返回NULL*/
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID子进路的对应的主进路数量
* 参数说明： const UINT16 subrouteId, 进路ID
* 返回值  ： >0   主进路数量
*			0   读取失败
*/
UINT8 GetMainRouteSum(const UINT16 subrouteId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT8 retVal = 0U;

	bufIndex = GetRouteConfigBufIndex(subrouteId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		if (ROUTE_SUB_PROPERTY == RouteConfigDataStru[bufIndex].MainOrSubData.MainRouteProperty)
		{
			retVal = RouteConfigDataStru[bufIndex].MainOrSubData.RouteBelMainSum;
		}
		else
		{
			/*非子进路，返回NULL*/
		}

	}
	else
	{
		/*返回NULL*/
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID主进路的对应的主进路数据
* 参数说明： const UINT16 subrouteId, 进路ID
* 返回值  ： !NULL   主进路数据
*			NULL   读取失败
*/
UINT16* GetMainRouteBuff(const UINT16 subrouteId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 *retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(subrouteId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		if (ROUTE_SUB_PROPERTY == RouteConfigDataStru[bufIndex].MainOrSubData.MainRouteProperty)
		{
			retVal = RouteConfigDataStru[bufIndex].MainOrSubData.RouteBelMainIdBuf;
		}
		else
		{
			/*非子进路，返回NULL*/
		}

	}
	else
	{
		/*返回NULL*/
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路声光报警信号开放延时标志
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： 0: 获取数据失败
*			>0: 延时标志
*/
UINT8 GetRouteSGBJDelayFlag(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].cSGBJDelayOpenFlag;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路关联的声光报警器数量
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ：  0: 获取数据失败
*			 >0: 关联的声光报警器数量
*/
UINT16 GetRouteRelSGBJNum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].wRelatedSGBJNum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路关联的声光报警器ID数组
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： NULL: 获取数据失败
*			 非NULL: 关联的声光报警器ID数组
*/
UINT16* GetRouteRelSGBJIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].szRelatedSGBJId;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路CBTC区域属性
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： 0: 获取数据失败
*			>0: CBTC区域属性
* Created By LQ 2023.12.08
*/
UINT8 GetRouteCbtcProperty(const UINT16 routeId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].cCbtcProperty;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID进路第一离去逻辑区段ID
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： 0: 获取数据失败
*			>0: 离去逻辑区段ID
* BY LC
*/
UINT16 GetRouteLeaveLogicSecId(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = CI_ERROR;/*返回值*/

	UINT8 railwayType = CI_TRADITION_RAILWAY;

	railwayType = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*获取线路类型*/

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		if (CI_TRADITION_RAILWAY == railwayType)
		{/*传统城轨*/
			retVal = RouteConfigDataStru[bufIndex].RouteLeaveLogicSecId;
		}
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路关联转换进路折返进信号机ID
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： 0: 未配置对应数据
*			>0: 对应信号机ID
* Created by fan 202400812
*/
UINT16 GetRouteTransRoutZFSigID(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0U; 

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].wRelatedTransZFSigId;
	}
	else
	{
		retVal = 0U;
	}
	return retVal;
}

/*
* 功能描述： 获取指定不属于本联锁进路是否有道岔属于本联锁
* 参数说明： const UINT16 wRouteId, 进路ID
* 返回值  ： 0：不存在
*			 > 0 进路所属联锁
* BY CGH 20241202
*/
UINT8 GetOthCiRouteExistLocalCiSw(const UINT16 wRouteId)
{
	UINT8 chRetVal = CI_ERROR;
	UINT8 chLocalCiId = 0U;/*本地联锁ID*/
	UINT8 chRouteBelCiId = 0U;/*进路所属联锁ID*/
	UINT8 chRouteSwitchSum = 0U;/*进路道岔数目*/
	RouteSwitchStruct* szRouteSwitchData = NULL;/*进路道岔数据*/
	UINT8 ii = 0U;
	UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁ID*/
	UINT8 chRouteProSwitchSum = 0U;/*进路防护道岔数目*/
	RouteProtectSwitchStruct* szRouteProSwitchData = NULL;/*进路防护道岔数据*/

	chLocalCiId = GetSystemParaLocalCiId();

	if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId))
	{
		chRouteBelCiId = GetRouteBelongCiId(wRouteId);
		chRouteSwitchSum = GetRouteSwitchSum(wRouteId);
		szRouteSwitchData = GetRouteSwitchData(wRouteId);
		chRouteProSwitchSum = GetRouteRelatedProtectSwitchSum(wRouteId);
		szRouteProSwitchData = GetRouteRelatedProtSwitchData(wRouteId);

		if ((chLocalCiId != chRouteBelCiId) && (0U != chRouteBelCiId) && (0U != chLocalCiId))
		{
			if (NULL != szRouteSwitchData)
			{
				for (ii = 0U; ii < chRouteSwitchSum; ii++)
				{
					chSwitchBelCiId = GetSwitchBelongCiId(szRouteSwitchData[ii].SwitchId);
					if (chLocalCiId == chSwitchBelCiId)
					{
						chRetVal = chRouteBelCiId;
						break;
					}
					else
					{
						; /*继续检查*/
					}
				}
				if (ii == chRouteSwitchSum)
				{
					if (NULL != szRouteProSwitchData)
					{
						for (ii = 0U; ii < chRouteProSwitchSum; ii++)
						{
							chSwitchBelCiId = GetSwitchBelongCiId(szRouteProSwitchData[ii].ProtectSwitchId);
							if (chLocalCiId == chSwitchBelCiId)
							{
								chRetVal = chRouteBelCiId;
								break;
							}
							else
							{
								; /*继续检查*/
							}
						}
					}
					else
					{
						;
					}
				}
				else
				{
					; /*已经有道岔属于本控区，不再检查防护道岔*/
				}
			}
			else
			{
				;
			}
		}
		else
		{
			; /*本联锁进路*/
		}
	}
	else
	{
		; 
	}

	return chRetVal;
}

/*
* 功能描述： 检查进路道岔所属联锁
* 参数说明： const UINT16 wRouteId, 进路ID
*	         UINT8* chCiId  道岔所属联锁
* 返回值  ： CI_ERROR：存在道岔属于其它联锁
*            CI_SUCCESS：道岔完全属于进路所在联锁
* BY CGH 20241203
*/
UINT8 CheckRouteSwitchBelCi(const UINT16 wRouteId,UINT8* chCiId)
{
	UINT8 chRetVal = CI_ERROR;
	UINT8 chRouteBelCiId = 0U;/*进路所属联锁ID*/
	UINT8 chRouteSwitchSum = 0U;/*进路道岔数目*/
	RouteSwitchStruct* szRouteSwitchData = NULL;/*进路道岔数据*/
	UINT8 ii = 0U;
	UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁ID*/

	if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId) && (NULL != chCiId))
	{
		chRetVal = CI_SUCCESS;
		chRouteBelCiId = GetRouteBelongCiId(wRouteId);
		chRouteSwitchSum = GetRouteSwitchSum(wRouteId);
		szRouteSwitchData = GetRouteSwitchData(wRouteId);
		*chCiId = 0U;

		if (NULL != szRouteSwitchData)
		{
			for (ii = 0U; ii < chRouteSwitchSum; ii++)
			{
				chSwitchBelCiId = GetSwitchBelongCiId(szRouteSwitchData[ii].SwitchId);
				if (chRouteBelCiId != chSwitchBelCiId)
				{
					chRetVal = CI_ERROR;
					*chCiId = chSwitchBelCiId;
					break;
				}
				else
				{
					; /*继续检查*/
				}
			}
		}
		else
		{
			chRetVal = CI_ERROR;
		}
	}
	else
	{
		chRetVal = CI_ERROR;
	}

	return chRetVal;
}

/*
* 功能描述： 检查进路防护道岔所属联锁
* 参数说明： const UINT16 wRouteId, 进路ID
*            UINT8* chCiId  道岔所属联锁
* 返回值  ： CI_ERROR：存在道岔属于其它联锁
*            CI_SUCCESS：道岔完全属于进路所在联锁
* BY CGH 20241203
*/
UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId,UINT8* chCiId)
{
	UINT8 chRetVal = CI_ERROR;
	UINT8 chRouteBelCiId = 0U;/*进路所属联锁ID*/
	UINT8 ii = 0U;
	UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁ID*/
	UINT8 chRouteProSwitchSum = 0U;/*进路防护道岔数目*/
	RouteProtectSwitchStruct* szRouteProSwitchData = NULL;/*进路防护道岔数据*/

	if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId) && (NULL != chCiId))
	{
		chRetVal = CI_SUCCESS;
		chRouteBelCiId = GetRouteBelongCiId(wRouteId);
		chRouteProSwitchSum = GetRouteRelatedProtectSwitchSum(wRouteId);
		szRouteProSwitchData = GetRouteRelatedProtSwitchData(wRouteId);
		*chCiId = 0U;

		if (NULL != szRouteProSwitchData)
		{
			for (ii = 0U; ii < chRouteProSwitchSum; ii++)
			{
				chSwitchBelCiId = GetSwitchBelongCiId(szRouteProSwitchData[ii].ProtectSwitchId);
				if (chRouteBelCiId != chSwitchBelCiId)
				{
					chRetVal = CI_ERROR;
					*chCiId = chSwitchBelCiId;
					break;
				}
				else
				{
					; /*继续检查*/
				}
			}
		}
		else
		{
			chRetVal = CI_ERROR;
		}
	}
	else
	{
		chRetVal = CI_ERROR;
	}

	return chRetVal;
}
/*
* 功能描述： 获取指定ID进路关联的风井物理区段数量
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ：  0: 获取数据失败
*			 >0: 关联的风井物理区段数量
* 创建：2026.03.04 by yx
*/
UINT8 GetRouteAiaShaftSecNum(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = CI_ERROR;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].airShaftRouteSecSum;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID进路关联的风井物理区段ID数组
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： NULL: 获取数据失败
*			 非NULL: 关联的风井物理区段ID数组
* 创建：2026.03.04 by yx
*/
UINT16* GetRouteAiaShaftSecIdBuf(const UINT16 routeId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* retVal = NULL;

	bufIndex = GetRouteConfigBufIndex(routeId);  /*获取进路数组下标*/

	if (bufIndex < ROUTE_SUM_MAX)
	{
		retVal = RouteConfigDataStru[bufIndex].wAirShaftRouteSecIdBuf;
	}
	else
	{
		retVal = NULL;
	}
	return retVal;
}