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

#include "../AutoReturn/AutoReturnConfigDataManage.h"




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


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

    return autoReturnCurSum;
}

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

	return returnValue;
}

/*
* 功能描述： 获取指定ID自动折返进路数组下标
* 参数说明： const UINT16 autoReturnId, 自动折返ID    
* 返回值  ： 0: 获取数据失败
*			>0: 自动折返进路ID      
*/
UINT16 GetAutoReturnBufIndex(const UINT16 autoReturnId)
{
	UINT16 returnValue = AUTO_RETURN_SUM_MAX;
    if ((autoReturnId >= 1u) && (autoReturnId < AUTO_RETURN_SUM_MAX))
	{
        returnValue = autoReturnId;
	}
	
	return returnValue;
}

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

	bufIndex = GetAutoReturnBufIndex(autoReturnId);  /*获取自动折返数组下标*/

    if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
	    returnValue = AutoReturnConfigDataStru[bufIndex].RouteSum;
	}

	return returnValue;
}

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

	bufIndex = GetAutoReturnBufIndex(autoReturnId);  /*获取自动折返数组下标*/

    if (bufIndex < AUTO_RETURN_SUM_MAX)
    {
        returnValue = AutoReturnConfigDataStru[bufIndex].BelongCiId;
    }

    return returnValue;
}

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

	bufIndex = GetAutoReturnBufIndex(autoReturnId);  /*获取自动折返数组下标*/

    if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
	    returnValue = AutoReturnConfigDataStru[bufIndex].RouteIdBuf;
	}

	return returnValue;
}

/*
* 功能描述： 获取指定ID自动折返结构中折出进路Id
* 参数说明： const UINT16 autoReturnId, 自动折返ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路ID
*/
UINT16 GetAutoReturnRebackRouteId(const UINT16 autoReturnId)
{
    UINT8 includeRouteSum = 0u;
    UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 returnValue = CI_ERROR;

	bufIndex = GetAutoReturnBufIndex(autoReturnId);  /*获取自动折返数组下标*/

    if (bufIndex < AUTO_RETURN_SUM_MAX)
    {
        includeRouteSum = AutoReturnConfigDataStru[bufIndex].RouteSum;

        if ((includeRouteSum >= 1u) && (includeRouteSum < AUTO_RETURN_INCLROUTE_SUM_MAX))
        {
            returnValue = AutoReturnConfigDataStru[bufIndex].RouteIdBuf[includeRouteSum - 1U];
        }
	}
	return returnValue;
}

/*
* 功能描述：	整理读入的自动折返进路配置数据
* 参数说明：	无
* 返回值  ：	1,整理成功
*				0,整理失败
*/
UINT8 AutoReturnConfigDataManage(void)
{
    UINT16 ii = 0u;      /*游标*/
    UINT16 jj = 0u;      /*游标*/
    UINT16 autoReturnConfigDataSum = 0u;      /*自动折返进路设备配置数据总数*/
	UINT8 returnValue = CI_SUCCESS;
	UINT8 localCiId = 0u;
	localCiId = GetSystemParaLocalCiId();

    /*保存自动折返进路Id索引数组*/
    autoReturnConfigDataSum = GetAutoReturnRouteCurSum();
    if (autoReturnConfigDataSum >= AUTO_RETURN_SUM_MAX)
    {/*配置数据总数错误*/
        
        returnValue = CI_ERROR;
	}
	else
	{    
		for (ii = 0u; ii < AUTO_RETURN_SUM_MAX; ii++)
		{
			if (jj == autoReturnConfigDataSum)
			{/*遍历有效数据完毕*/
	            
				break;
			}
	        
			if (AutoReturnConfigDataStru[ii].BelongCiId == localCiId)
			{/*该部分为有效数据*/
	            
				LocalCiAutoReturnIdBuf[jj] = AutoReturnConfigDataStru[ii].AutoReturnId;
				jj++;
			}
		}
	}
	return returnValue;
}

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

	bufIndex = GetAutoReturnBufIndex(autoReturnId);  /*获取数组下标*/

	if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
		returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedRouteIdSum;
	}
	return returnValue;
}

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

	if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
		returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedRouteIdBuf;
	}
	return returnValue;
}

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

	if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
		returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedReturnIdSum;
	}
	return returnValue;
}

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

	if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
		returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedReturnIdBuf;
	}
	return returnValue;
}


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

	if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
		returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedAllReturnIdSum;
	}
	return returnValue;
}
/*
* 功能描述： 获取自动折返进路抵触全自动折返进路数组
* 参数说明： const UINT16 AutoReturnId, 自动折返进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数组指针      
*/
UINT16* GetAutoRtnOppAllReturnIdBuf(const UINT16 autoReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* returnValue = NULL;
	bufIndex = GetAutoReturnBufIndex(autoReturnId);  /*获取数组下标*/

	if (bufIndex < AUTO_RETURN_SUM_MAX)
	{
		returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedAllReturnIdBuf;
	}
	return returnValue;
}


