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

#include "NonAutoReturnConfigDataManage.h"

NonAutoReturnConfigDataStruct NonReturnConfigDataStru[NON_AUTO_RETURN_SUM_MAX];   /*无人自动折返配置结构体*/
UINT16 LocalCiNonReturnIdBuf[NON_AUTO_RETURN_SUM_MAX] = {0u};                   /*定义本地联锁无人自动折返按钮映射数组*/
INT16 gNonReturnCurSum = 0;   /*无人自动折返当前总数*/

/*
* 功能描述： 获取指定ID无人折返下标
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 无人折返下标ID
*/
UINT16 GetNonReturnBufIndex(const UINT16 nonReturnId)
{
	UINT16 returnValue = NON_AUTO_RETURN_SUM_MAX;

	if ((nonReturnId >= 1u) && (nonReturnId < NON_AUTO_RETURN_SUM_MAX))
	{
		returnValue = nonReturnId;
	}
	else
	{
		returnValue = NON_AUTO_RETURN_SUM_MAX;
	}
	return returnValue;
}

/*
* 功能描述： 获取指定下标无人折返Id
* 参数说明： const UINT16 floodGateId, 防淹门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 无人折返下标ID
*/
UINT16 GetNonReturnId(const UINT16 bufIndex)
{
	UINT16 nonReturnId = CI_ERROR;

	UINT16 curSum = GetNonAutoReturnCurSum();

	if (bufIndex < curSum)
	{
		nonReturnId = LocalCiNonReturnIdBuf[bufIndex];
	}
	else
	{
		; /*返回 0*/
	}

	return nonReturnId;
}
/*
* 功能描述： 获取无人自动折返按钮当前总数
* 参数说明： void
* 返回值  ： 0: 获取数据失败
*			>0: 自动折返进路当前总数
*/
UINT16 GetNonAutoReturnCurSum(void)
{
	UINT16 nonReturnCurSum = 0u;
	if (gNonReturnCurSum >= (INT16)NON_AUTO_RETURN_SUM_MAX)
	{
		nonReturnCurSum = NON_AUTO_RETURN_SUM_MAX;
	}
	else if (gNonReturnCurSum < 0)
	{
		nonReturnCurSum = 0u;
	}
	else
	{
		nonReturnCurSum = (UINT16)gNonReturnCurSum;
	}
	return nonReturnCurSum;
}

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

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

	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		returnValue = NonReturnConfigDataStru[bufIndex].BelongCiId;
	}
	else
	{
		returnValue = CI_ERROR;
	}
	return returnValue;
}

/*
* 功能描述： 获取指定数组下标对应的无人自动折返按钮所属虚拟联锁ID
* 参数说明： const UINT16 bufIndex, 数组下标
* 返回值  ： 0: 获取数据失败
*			>0: 联锁ID
*/
UINT8 GetNonAutoBelongVirCiId(const UINT16 nonReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 returnValue = CI_ERROR;

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

	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		returnValue = NonReturnConfigDataStru[bufIndex].BelongVirCiId;
	}
	else
	{
		returnValue = CI_ERROR;
	}
	return returnValue;
}
/*
* 功能描述： 获取指定数组下标对应的无人自动折返按钮ID（实际为指示灯ID）
* 参数说明： const UINT16 bufIndex, 数组下标
* 返回值  ： 0: 获取数据失败
*			>0: 无人自动折返按钮ID
*/
UINT16 GetNonRtnRlyId(const UINT16 nonReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 returnValue = CI_ERROR;

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

	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		returnValue = NonReturnConfigDataStru[bufIndex].NonAutoRtnRlyId;
	}
	return returnValue;
}

/*
* 功能描述： 获取指定ID无人自动折返按钮指示灯继电器ID
* 参数说明： const UINT16 autoReturnId, 自动折返ID
* 返回值  ： 0: 获取数据失败
*			>0: 无人自动折返按钮指示灯继电器ID
*/
UINT16 GetNonRtnLghtRlyId(const UINT16 nonReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 returnValue = CI_ERROR;

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

	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		returnValue = NonReturnConfigDataStru[bufIndex].NonAutoRtnLghtRlyId;
	}
	return returnValue;
}

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

    /*保存无人折返进路Id索引数组*/
    autoReturnConfigDataSum = GetNonAutoReturnCurSum();
    if (autoReturnConfigDataSum >= NON_AUTO_RETURN_SUM_MAX)
    {/*配置数据总数错误*/
        
        returnValue = CI_ERROR;
	}
	else
	{    
		returnValue = CI_SUCCESS;
		for (ii = 0u; ii < NON_AUTO_RETURN_SUM_MAX; ii++)
		{
			if (jj == autoReturnConfigDataSum)
			{/*遍历有效数据完毕*/
	            
				break;
			}
	        
			if (NonReturnConfigDataStru[ii].BelongCiId == localCiId)
			{/*该部分为有效数据*/
	            
				LocalCiNonReturnIdBuf[jj] = NonReturnConfigDataStru[ii].NonAutoReturnId;
				jj++;
			}
		}
	}
	return returnValue;
}

/*
* 功能描述： 获取指定ID无人折返关联指示灯ID
* 参数说明： const UINT16 autoReturnId, 自动折返ID
* 返回值  ： 0: 获取数据失败
*			>0: 无人折返关联指示灯ID
* by cgh 20241031
*/
UINT16 GetNonRtnRelLightId(const UINT16 nonReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 returnValue = CI_ERROR;

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

	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		returnValue = NonReturnConfigDataStru[bufIndex].NonAutoReturnRelLightId;
	}
	else
	{
		;
	}
	return returnValue;
}

/*
* 功能描述： 获取指定ID无人折返关联按钮ID
* 参数说明： const UINT16 autoReturnId, 自动折返ID
* 返回值  ： 0: 获取数据失败
*			>0: 无人折返关联按钮ID
* by cgh 20241031
*/
UINT16 GetNonRtnRelButtonId(const UINT16 nonReturnId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 returnValue = CI_ERROR;

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

	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		returnValue = NonReturnConfigDataStru[bufIndex].NonAutoReturnRelButtonId;
	}
	else
	{
		;
	}
	return returnValue;
}



