/********************************************************
*                                                                                                            
* 文 件 名： AutoRouteConfigDataManage.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-20
* 作    者： 联锁组
* 功能描述： 自动进路配置数据管理  
* 修改记录：   
*
********************************************************/ 

#include "AutoRouteConfigDataManage.h"


AutoRouteConfigDataStruct AutoRouteConfigDataStru[AUTO_ROUTE_SUM_MAX];   /*定义自动进路数据配置结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
UINT16 LocalCiAutoRouteIdBuf[AUTO_ROUTE_SUM_MAX] = {0u};                   /*定义本地联锁自动进路ID映射数组*/
INT16 AutoRouteCurSum = 0;   /*自动进路当前总数*/
GroupAutoRouteConfigDataStruct GroupAutoRouteConfigDataStru[GROUP_AUTO_ROUTE_SUM_MAX] = {0u}; /*定义组合自动进路数据配置结构体*/


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

/*
* 功能描述： 获取指定数组下标对应的自动进路进路ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 自动进路进路ID      
*/
UINT16 GetAutoRouteRouteId(const UINT16 bufIndex)
{
	UINT16 returnValue = CI_ERROR;
	UINT16 routeCurSum = 0u;
	routeCurSum = GetAutoRouteRouteCurSum();
	if (bufIndex < routeCurSum)
	{
		returnValue = LocalCiAutoRouteIdBuf[bufIndex];
	}
	return returnValue;
}

/*
* 功能描述： 获取指定ID自动进路数组下标
* 参数说明： const UINT16 AutoRouteId, 自动进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动进路ID      
*/
UINT16 GetAutoRouteBufIndex(const UINT16 AutoRouteId)
{
	UINT16 returnValue = AUTO_ROUTE_SUM_MAX;

	if ((AutoRouteId >= 1u) && (AutoRouteId < AUTO_ROUTE_SUM_MAX))
	{
        returnValue = AutoRouteId;
	}
	
	return returnValue;
}

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

	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取自动进路数组下标*/

    if (bufIndex < AUTO_ROUTE_SUM_MAX)
    {
       belongCiId = AutoRouteConfigDataStru[bufIndex].BelongCiId;
    }
	return belongCiId;
}


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

	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取自动进路数组下标*/

    if (bufIndex < AUTO_ROUTE_SUM_MAX)
    {
        routeSum = AutoRouteConfigDataStru[bufIndex].RouteSum;
    }
	return routeSum;
}


/*
* 功能描述： 获取指定ID自动进路包含进路数组
* 参数说明： const UINT8 autoRouteId, 自动进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路数组
*/
UINT16* GetAutoRouteIncludeRouteBuf(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* routeIdBuf = NULL;

	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取自动进路数组下标*/

    if (bufIndex < AUTO_ROUTE_SUM_MAX)
    {
        routeIdBuf = AutoRouteConfigDataStru[bufIndex].RouteIdBuf;
    }
	return routeIdBuf;
}

/*
* 功能描述：	整理读入的自动进路配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 AutoRouteConfigDataManage(void)
{
    UINT16 ii = 0u;      /*游标*/
    UINT16 jj = 0u;      /*游标*/
    UINT16 autoRouteConfigDataSum = 0u;      /*自动进路设备配置数据总数*/
	UINT8 returnValue = CI_SUCCESS;
	UINT8 localCiId = 0u;
	localCiId = GetSystemParaLocalCiId();
    /*保存自动进路Id索引数组*/
    autoRouteConfigDataSum = GetAutoRouteRouteCurSum();
    if (autoRouteConfigDataSum >= AUTO_ROUTE_SUM_MAX)
    {/*配置数据总数错误*/
        
        returnValue = CI_ERROR;
	}
	else
	{
		for (ii = 0u; ii < AUTO_ROUTE_SUM_MAX; ii++)
		{
			if (jj == autoRouteConfigDataSum)
			{/*autoRouteConfigDataSum为0表示数据没有配置自动进路；autoRouteConfigDataSum大于0表示遍历有效数据完毕*/
	            
				break;
			}
	        
			if (AutoRouteConfigDataStru[ii].BelongCiId == localCiId)
			{/*该部分为有效数据*/
	            
				LocalCiAutoRouteIdBuf[jj] = AutoRouteConfigDataStru[ii].AutoRouteId;
				jj++; 
			}
		}	
	}
	return returnValue;
}




/*
* 功能描述： 获取自动通过进路抵触自动通过进路数目
* 参数说明： const UINT16 autoRouteId, 自动折返进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数目      
*/
UINT8 GetAutoRouteOpposedRouteIdSum(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 returnValue = CI_ERROR;	
	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取数组下标*/

	if (bufIndex < AUTO_ROUTE_SUM_MAX)
	{
		returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedRouteIdSum;
	}
	return returnValue;
}

/*
* 功能描述： 获取自动通过进路抵触自动通过进路数组
* 参数说明： const UINT16 autoRouteId, 自动折返进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数组指针      
*/
UINT16* GetAutoRouteOpposedRouteIdBuf(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* returnValue = NULL;	
	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取数组下标*/

	if (bufIndex < AUTO_ROUTE_SUM_MAX)
	{
		returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedRouteIdBuf;
	}
	return returnValue;
}

/*
* 功能描述： 获取自动通过进路抵触自动折返进路数目
* 参数说明： const UINT16 AutoReturnId, 自动折返进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数目      
*/
UINT8 GetAutoRouteOpposedReturnIdSum(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 returnValue = CI_ERROR;	
	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取数组下标*/

	if (bufIndex < AUTO_ROUTE_SUM_MAX)
	{
		returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedReturnIdSum;
	}
	return returnValue;
}

/*
* 功能描述： 获取自动通过进路抵触自动折返进路数组
* 参数说明： const UINT16 AutoReturnId, 自动折返进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数组指针      
*/
UINT16* GetAutoRouteOpposedReturnIdBuf(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* returnValue = NULL;
	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取数组下标*/

	if (bufIndex < AUTO_ROUTE_SUM_MAX)
	{
		returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedReturnIdBuf;
	}
	return returnValue;
}
/*
* 功能描述： 获取自动通过进路抵触全自动折返进路数目
* 参数说明： const UINT16 AutoReturnId, 自动折返进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数目      
*/
UINT8 GetAutoRouteOpposedAllRtnIdSum(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 returnValue = CI_ERROR;	
	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取数组下标*/

	if (bufIndex < AUTO_ROUTE_SUM_MAX)
	{
		returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedAllReturnIdSum;
	}
	return returnValue;
}

/*
* 功能描述： 获取自动通过进路抵触全自动折返进路数组
* 参数说明： const UINT16 AutoReturnId, 自动折返进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数组指针      
*/
UINT16* GetAutoRouteOpposedAllRtnIdBuf(const UINT16 autoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* returnValue = NULL;
	bufIndex = GetAutoRouteBufIndex(autoRouteId);  /*获取数组下标*/

	if (bufIndex < AUTO_ROUTE_SUM_MAX)
	{
		returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedAllReturnIdBuf;
	}
	return returnValue;
}


/*
* 功能描述： 获取指定ID组合自动进路数组下标
* 参数说明： const UINT16 groupAutoRouteId, 组合自动进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动进路ID      
*/
UINT16 GetGroupAutoRouteBufIndex(const UINT16 groupAutoRouteId)
{
	UINT16 returnValue = GROUP_AUTO_ROUTE_SUM_MAX;

	if ((groupAutoRouteId >= 1u) && (GROUP_AUTO_ROUTE_SUM_MAX > groupAutoRouteId))
	{
		returnValue = groupAutoRouteId;
	}

	return returnValue;
}

/*
* 功能描述： 获取组合自动进路包含自动进路数量
* 参数说明： const UINT16 groupAutoRouteId, 组合自动进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 组合自动进路数量      
*/
UINT16 GetGroupAutoRouteHasRouteSum(const UINT16 groupAutoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 returnValue = CI_ERROR;	
	bufIndex = GetGroupAutoRouteBufIndex(groupAutoRouteId);  /*获取数组下标*/

	if (GROUP_AUTO_ROUTE_SUM_MAX > bufIndex)
	{
		returnValue = GroupAutoRouteConfigDataStru[bufIndex].InAutoRouteSum;
	}
	else
	{
	    /*无操作*/
	}
	return returnValue;
}

/*
* 功能描述： 获取组合自动进路包含自动进路ID数组
* 参数说明： const UINT16 groupAutoRouteId, 组合自动进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 组合自动进路包含自动进路ID数组      
*/
UINT16* GetGroupAutoRouteHasRouteIdBuff(const UINT16 groupAutoRouteId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* returnValue = NULL;	
	bufIndex = GetGroupAutoRouteBufIndex(groupAutoRouteId);  /*获取数组下标*/

	if (GROUP_AUTO_ROUTE_SUM_MAX > bufIndex)
	{
		returnValue = GroupAutoRouteConfigDataStru[bufIndex].InAutoRouteIdBuff;
	}
	else
	{
	    /*无操作*/
	}
	return returnValue;
}