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

#include "../AllAutoReturn/AllAutoReturnConfigDataManage.h"




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

/*
* 功能描述： 获取全自动折返进路当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 全自动折返进路当前总数
*/
UINT16 GetAllAutoReturnRouteCurSum(void)
{
	UINT16 allAutoReturnCurSum = 0u;

    if ((INT16)ALL_AUTO_RETURN_SUM_MAX <= AllAutoReturnCurSum)
    {
        allAutoReturnCurSum = ALL_AUTO_RETURN_SUM_MAX;
    }
	else if (0 > AllAutoReturnCurSum)
	{
		allAutoReturnCurSum = 0u;
	}
    else
    {
        allAutoReturnCurSum = (UINT16)AllAutoReturnCurSum;
    }

	return allAutoReturnCurSum;
}

/*
* 功能描述： 获取指定数组下标对应的全自动折返进路ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 全自动折返进路ID      
*/
UINT16 GetAllAutoReturnRouteId(const UINT16 bufIndex)
{
	UINT16 localCiAllAutoReturnId = CI_ERROR;
	UINT16 routeCurSum = 0u;
	routeCurSum = GetAllAutoReturnRouteCurSum();

	if (bufIndex < routeCurSum)
	{
		localCiAllAutoReturnId = LocalCiAllAutoReturnIdBuf[bufIndex];
	}

	return localCiAllAutoReturnId;
}

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

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

	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取全自动折返数组下标*/

    if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
	    routeSum = AllAutoReturnConfigDataStru[bufIndex].RouteSum;
	}

	return routeSum;
}

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

	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取全自动折返数组下标*/

    if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
    {
        belongCiId = AllAutoReturnConfigDataStru[bufIndex].BelongCiId;
    }

	return belongCiId;
}

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

	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取全自动折返数组下标*/

    if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
	    routeIdBuf = AllAutoReturnConfigDataStru[bufIndex].RouteIdBuf;
	}
	return routeIdBuf;
}

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

	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取全自动折返数组下标*/

    if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
    {
		rebackRouteIdBuf = AllAutoReturnConfigDataStru[bufIndex].RebackRouteIdBuf;
    }

	return rebackRouteIdBuf;
}
/*
* 功能描述： 获取指定ID全自动折返结构中折出进路Id数目
* 参数说明： const UINT16 allAutoReturnId, 全自动折返ID    
* 返回值  ： 0: 获取数据失败
*			>0: 进路ID
*/
UINT8 GetAllAutoReturnRebackRouteSum(const UINT16 allAutoReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 rebackRouteSum = CI_ERROR;
	
	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取全自动折返数组下标*/
	
    if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		rebackRouteSum = AllAutoReturnConfigDataStru[bufIndex].RebackRouteSum;
	}

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

    /*保存全自动折返进路Id索引数组*/
    allAutoReturnConfigDataSum = GetAllAutoReturnRouteCurSum();
    if (allAutoReturnConfigDataSum >= ALL_AUTO_RETURN_SUM_MAX)
    {/*配置数据总数错误*/
        
        returnValue = CI_ERROR;
	}
	else
	{
		for (ii = 0u; ii < ALL_AUTO_RETURN_SUM_MAX; ii++)
		{
			if (jj == allAutoReturnConfigDataSum)
			{/*allAutoReturnConfigDataSum为0表示数据没有配置全自动折返进路，allAutoReturnConfigDataSum大于0表示遍历有效数据完毕*/
            
				break;
			}
        
			if (AllAutoReturnConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
			{/*该部分为有效数据*/
            
				LocalCiAllAutoReturnIdBuf[jj] = AllAutoReturnConfigDataStru[ii].AllAutoReturnId;
				jj++;
			}
 
		}

	}

    return returnValue;
}

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

	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取数组下标*/

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedRouteIdSum;
	}
	return returnValue;
}

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

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedRouteIdBuf;
	}
	return returnValue;
}

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

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedReturnIdSum;
	}
	return returnValue;
}

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

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedReturnIdBuf;
	}
	return returnValue;
}


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

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedAllRtnIdSum;
	}
	return returnValue;
}

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

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedAllRtnIdBuf;
	}
	return returnValue;
}
/*
* 功能描述： 获取全自动折返进路中与折入抵触折出进路数目
* 参数说明： const UINT16 allAutoReturnId, 全自动折返进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数目      
*/
UINT8 GetAllAutoRtnInOppOutIdSum(const UINT16 allAutoReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 returnValue = CI_ERROR;
	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取数组下标*/

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnInOpposedOutSum;
	}
	return returnValue;
}

/*
* 功能描述： 获取全自动折返进路中与折入抵触折出进路数组
* 参数说明： const UINT16 routeId, 折入进路ID     
* 返回值  ： 0: 获取数据失败
*			>0: 抵触进路数组      
*/
UINT16* GetAllAutoRtnInOppOutIdBuf(const UINT16 allAutoReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* returnValue = NULL;

	bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId);  /*获取数组下标*/

	if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
	{
		returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnInOpposedOutBuf;
	}
	return returnValue;
}
