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

#include "ReverseRouteConfigDataManage.h"

ReverseRouteConfigDataStruct ReverseRouteConfigDataStru[ROUTE_SUM_MAX] = {0u};   /*定义反向进路数据配置结构体 ROUTE_SUM_MAX:使用"进路总数宏",因为reverseRouteId进路ID依赖着进路ID,他没有独立出一类反向进路ID;ReverseRouteConfigDataStru[]中数组下标是按进路ID来映射的*/
UINT16 LocalCiReverseRouteIdBuf[REVERSE_ROUTE_SUM_MAX] = {0u};                   /*定义本地联锁反向进路ID映射数组REVERSE_ROUTE_SUM_MAX:LocalCiReverseRouteIdBuf[]中ID是相继存放的*/
INT16 ReverseRouteCurSum = 0;   /*反向进路当前总数*/


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


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

/*
* 功能描述： 获取指定ID反向进路数组下标
* 参数说明： const UINT16 reverseRouteId, 反向进路ID    
* 返回值  ： 0: 获取数据失败
*			>0: 指定ID反向进路数组下标      
*/
UINT16 GetReverseRouteBufIndex(const UINT16 reverseRouteId)
{
	UINT16 bufIndex = 0u;
    if ((reverseRouteId >= 1u) && (reverseRouteId < ROUTE_SUM_MAX))
	{/*ROUTE_SUM_MAX:使用"进路总数宏",因为reverseRouteId进路ID依赖的进路ID,他没有独立出一类反向进路ID*/
	
        bufIndex = reverseRouteId;
	}
	else
	{
		bufIndex = ROUTE_SUM_MAX;
	}
	
	return bufIndex;
}

/*
* 功能描述： 获取反向进路配置数据
* 参数说明： void    
* 返回值  ： 反向进路配置数据
*/
ReverseRouteConfigDataStruct* GetReverseRouteConfigData(void)
{
	return ReverseRouteConfigDataStru;
}


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


	bufIndex = GetReverseRouteBufIndex(reverseRouteId);  /*获取反向进路数组下标*/

    if (bufIndex < ROUTE_SUM_MAX)
	{/*ROUTE_SUM_MAX:使用"进路总数宏",因为reverseRouteId进路ID依赖的进路ID,他没有独立出一类反向进路ID*/
	
	    routeSum = ReverseRouteConfigDataStru[bufIndex].AutoSigRouteIncludeSum;
	}
	else
	{
		routeSum = CI_ERROR;
	}
	return routeSum;
}

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


	bufIndex = GetReverseRouteBufIndex(reverseRouteId);  /*获取反向进路数组下标*/

    if (bufIndex < ROUTE_SUM_MAX)
    {/*ROUTE_SUM_MAX:使用"进路总数宏",因为reverseRouteId进路ID依赖的进路ID,他没有独立出一类反向进路ID*/
    
        ciId = ReverseRouteConfigDataStru[bufIndex].BelongCiId;
    }
    else
    {
        ciId = CI_ERROR;
    }
	return ciId;
}

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

	bufIndex = GetReverseRouteBufIndex(reverseRouteId);  /*获取反向进路数组下标*/

    if (bufIndex < ROUTE_SUM_MAX)
	{/*ROUTE_SUM_MAX:使用"进路总数宏",因为reverseRouteId进路ID依赖的进路ID,他没有独立出一类反向进路ID*/
	
	    routeIdBuf = ReverseRouteConfigDataStru[bufIndex].AutoSigRouteIdBuf;
	}
	else
	{
		routeIdBuf = NULL;
	}
	return routeIdBuf;
}


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

    /*保存反向进路Id索引数组*/
    reverseRouteConfigDataSum = GetReverseRouteCurSum();
    if (reverseRouteConfigDataSum >= REVERSE_ROUTE_SUM_MAX)
    {/*配置数据总数错误*/
        
        retVal = CI_ERROR;
	}
	if(CI_SUCCESS == retVal)
	{
	    for (ii = 0u; ii < ROUTE_SUM_MAX; ii++)
	    {/*ROUTE_SUM_MAX:使用"进路总数宏",因为reverseRouteId进路ID依赖的进路ID,他没有独立出一类反向进路ID*/
	    
	        if (jj == reverseRouteConfigDataSum)
	        {/*遍历有效数据完毕*/
	            
	            break;
	        }
			
			if(0u != ReverseRouteConfigDataStru[ii].ReverseRouteId )
			{/*该部分为有效数据*/
				if (ReverseRouteConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
				{/*该部分为有效数据*/

					LocalCiReverseRouteIdBuf[jj] = ReverseRouteConfigDataStru[ii].ReverseRouteId;
					jj++; 
				}

			}
	        

	    }
	}
    return retVal;
}



