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

#include "NonAutoReturnConfigDataManage.h"
#include "NonAutoReturnDataManage.h"
#include "DeviceDataManage.h"



NonAutoReturnDataStruct NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX];   /*无人自动折返动态结构体*/

/*
* 功能描述： 获取无人折返数据结构体指针
* 参数说明：
* 返回值  ：
			NonAutoReturnDataStruct *
*/
NonAutoReturnDataStruct* GetNonReturnData(void)
{
	return NonReturnDataStru;
}

/*
* 功能描述： 获取指定ID无人自动折返按钮命令列车ID
* 参数说明： const UINT16 autoReturnId, 自动折返ID
* 返回值  ： 0: 获取数据失败
*			>0: 无人自动折返按钮指示灯继电器ID
*/
UINT16 GetNonRtnCmdSetTrainId(const UINT16 nonReturnId)
{
	UINT16 trainId = CI_ERROR;
	UINT16 bufIndex = 0U;
	bufIndex = GetNonReturnBufIndex(nonReturnId);
	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		trainId = NonReturnDataStru[bufIndex].cmdSetTrainId;
	}
	else
	{
		; /*返回 0*/
	}

	return trainId;
}

/*
* 功能描述： 设置指定ID无人自动折返按钮命令列车ID
* 参数说明： const UINT16 autoReturnId, 自动折返ID
* 返回值  ：无
*			
*/
void SetNonRtnCmdSetTrainId(const UINT16 nonReturnId,const UINT16 trainId)
{
	UINT16 bufIndex = 0U;
	bufIndex = GetNonReturnBufIndex(nonReturnId);
	if (bufIndex < NON_AUTO_RETURN_SUM_MAX)
	{
		
		NonReturnDataStru[bufIndex].cmdSetTrainId = trainId;
	}
	else
	{
		; /*DO NOTHING*/
	}
}

/*
* 功能描述： 获取无人折返灯的闪灯状态
* 参数说明： UINT16 devId 无人折返灯设备ID
* 返回值  ：无人折返灯闪灯状态
*			0x55 闪灯状态有效
*			0xAA 闪灯状态无效
* by cgh 20240904
*/
UINT8 GetAutoRtnIndictFlashState(UINT16 devId)
{
	UINT16 wBufIndex = 0U;
	UINT8 retValue = VOBCTOCIAUTORTN_INDICT_MASK_INVALID;

	wBufIndex = GetNonReturnBufIndex(devId);
	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		retValue = NonReturnDataStru[wBufIndex].VobcToCIAutoRtnIndicFlashState;
	}
	else
	{
		; 
	}

	return retValue;
}

/*
* 功能描述： 获取无人折返灯的稳灯状态
* 参数说明： UINT16 devId 无人折返灯设备ID
* 返回值  ：无人折返灯稳灯状态
*			0x55 稳灯状态有效
*			0xAA 稳灯状态无效
* by cgh 20240904
*/
UINT8 GetAutoRtnIndictSteadyState(UINT16 devId)
{
	UINT16 wBufIndex = 0U;
	UINT8 retValue = VOBCTOCIAUTORTN_INDICT_MASK_INVALID;

	wBufIndex = GetNonReturnBufIndex(devId);

	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		retValue = NonReturnDataStru[wBufIndex].VobcToCIAutoRtnIndicSteadyState;
	}
	else
	{
		;
	}

	return retValue;
}

/*
* 功能描述： 设置无人折返灯的闪灯状态
* 参数说明： UINT16 devId 无人折返灯设备ID
*            UINT8 state无人折返灯闪灯状态
*            VOBCTOCIAUTORTN_INDICT_MASK_VALID 0x55	有效状态
*			 VOBCTOCIAUTORTN_INDICT_MASK_INVALID 0xAA	无效状态
* 返回值  ：void
* by cgh 20240904
*/
void SetAutoRtnIndictFlashState(UINT16 devId, UINT8 state)
{
	UINT16 wBufIndex = 0U;
	wBufIndex = GetNonReturnBufIndex(devId);

	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		if ((VOBCTOCIAUTORTN_INDICT_MASK_VALID == state) || (VOBCTOCIAUTORTN_INDICT_MASK_INVALID == state))
		{
			NonReturnDataStru[wBufIndex].VobcToCIAutoRtnIndicFlashState = state;
		}
		else
		{
			; 
		}
	}
	else
	{
		; /*DO NOTHING*/
	}
}

/*
* 功能描述： 设置无人折返灯的稳灯状态
* 参数说明： UINT16 devId 无人折返灯设备ID
*            UINT8 state 无人折返灯稳灯状态
*            VOBCTOCIAUTORTN_INDICT_MASK_VALID 0x55	有效状态
*			 VOBCTOCIAUTORTN_INDICT_MASK_INVALID 0xAA	无效状态
* 返回值  ：void
* by cgh 20240904
*/
void SetAutoRtnIndictSteadyState(UINT16 devId, UINT8 state)
{
	UINT16 wBufIndex = 0U;
	wBufIndex = GetNonReturnBufIndex(devId);

	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		if ((VOBCTOCIAUTORTN_INDICT_MASK_VALID == state) || (VOBCTOCIAUTORTN_INDICT_MASK_INVALID == state))
		{
			NonReturnDataStru[wBufIndex].VobcToCIAutoRtnIndicSteadyState = state;
		}
		else
		{
			;
		}
	}
	else
	{
		; /*DO NOTHING*/
	}
}

/*
* 功能描述： 获取无人折返按钮继电器
* 参数说明： UINT16 devId 无人折返设备ID
* 返回值  ：无人折返按钮继电器ID
* by cgh 20240904
*/
UINT16 GetNonRtnAdhesionRealyId(UINT16 devId)
{
	UINT16 wBufIndex = 0U;
	UINT16 retValue = 0U;

	wBufIndex = GetNonReturnBufIndex(devId);
	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		retValue = NonReturnDataStru[wBufIndex].RtnRelayAdhesionState.AdhesionRealyId;
	}
	else
	{
		;
	}

	return retValue;
}

/*
* 功能描述： 获取无人折返按钮继电器粘连状态
* 参数说明： UINT16 devId 无人折返设备ID
* 返回值  ： 0: 获取数据失败
*			>0:无人折返按钮继电器粘连状态
* by cgh 20240904
*/
UINT8 GetNonRtnAdhesionState(UINT16 devId)
{
	UINT16 wBufIndex = 0U;
	UINT8 retValue = 0U;

	wBufIndex = GetNonReturnBufIndex(devId);
	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		retValue = NonReturnDataStru[wBufIndex].RtnRelayAdhesionState.AdhesionState;
	}
	else
	{
		;
	}

	return retValue;
}

/*
* 功能描述： 设置无人折返按钮继电器粘连状态
* 参数说明： UINT16 devId 无人折返灯设备ID
*            UINT8 state 无人折返按钮继电器粘连状态
* 返回值  ：void
* by cgh 20240904
*/
void SetNonRtnAdhesionState(UINT16 devId, UINT8 state)
{
	UINT16 wBufIndex = 0U;
	wBufIndex = GetNonReturnBufIndex(devId);

	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		if ((RTN_RELAY_ADHESION_NO == state) || (RTN_RELAY_ADHESION_YES == state))
		{
			NonReturnDataStru[wBufIndex].RtnRelayAdhesionState.AdhesionState = state;
		}
		else
		{
			; /*不设置*/
		}
	}
	else
	{
		; /*DO NOTHING*/
	}
}

/*
* 功能描述： 获取无人折返按钮继电器继电器吸起周期
* 参数说明： UINT16 devId 无人折返设备ID
* 返回值  ： 无人折返按钮继电器继电器吸起周期
* by cgh 20240904
*/
UINT32 GetNonRtnRelayUpCycNum(UINT16 devId)
{
	UINT16 wBufIndex = 0U;
	UINT32 retValue = 0U;

	wBufIndex = GetNonReturnBufIndex(devId);
	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		retValue = NonReturnDataStru[wBufIndex].RtnRelayAdhesionState.RelayUpCycNum;
	}
	else
	{
		;
	}

	return retValue;
}

/*
* 功能描述： 设置无人折返按钮继电器继电器吸起周期
* 参数说明： UINT16 devId 无人折返灯设备ID
*            UINT32 state 无人折返按钮继电器继电器吸起周期
* 返回值  ：void
* by cgh 20240904
*/
void SetNonRtnRelayUpCycNum(UINT16 devId, UINT32 state)
{
	UINT16 wBufIndex = 0U;
	wBufIndex = GetNonReturnBufIndex(devId);

	if (NON_AUTO_RETURN_SUM_MAX > wBufIndex)
	{
		NonReturnDataStru[wBufIndex].RtnRelayAdhesionState.RelayUpCycNum = state;
	}
	else
	{
		; /*DO NOTHING*/
	}
}

/*
* 功能描述： 检查无人折返按钮是否存在粘连
* 参数说明： UINT8 devId 电子地图中无人折返按钮ID
* 返回值  ： RTN_RELAY_ADHESION_NO 不存在
*	         RTN_RELAY_ADHESION_YES 存在
* by cgh 20241031
*/
UINT8 CheckNonReturnExistAdhesion(UINT8 devId)
{
	UINT8 chRetVal = RTN_RELAY_ADHESION_NO;
	UINT16 NonAutoReturnCurSum = 0U;/*无人折返按钮当前总数*/
	UINT16 ii = 0U;
	UINT16 wNonAutoRtnId = 0U;/*无人折返ID*/
	UINT16 wCurNonAutoRtnButonId = 0U;/*无人折返关联按钮ID*/
	UINT8 chNonRtnAdhesionState = 0U;/*无人折返粘连状态*/

	if ((0U < devId) && (NON_AUTO_RETURN_SUM_MAX > devId))
	{
		NonAutoReturnCurSum = GetNonAutoReturnCurSum();
		for (ii = 0U; ii < NonAutoReturnCurSum; ii++)
		{
			wNonAutoRtnId = GetNonReturnId(ii);
			wCurNonAutoRtnButonId = GetNonRtnRelButtonId(wNonAutoRtnId);
			if (devId == wCurNonAutoRtnButonId)
			{
				chNonRtnAdhesionState = GetNonRtnAdhesionState(wNonAutoRtnId);
				if (RTN_RELAY_ADHESION_YES == chNonRtnAdhesionState)
				{
					chRetVal = RTN_RELAY_ADHESION_YES;
					/*找到一个无人折返存在粘连就退出循环*/
					break;
				}
				else
				{
					;
				}
			}
			else
			{
				; /*继续查找*/
			}
		}
	}
	else
	{
		/*入参检查失败，返回失败*/
	}

	return chRetVal;
}