/********************************************************
*                                                                                                            
* 文 件 名： WashMachineDataManage.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2014-12-24
* 作    者： 联锁组
* 功能描述： 洗车机配置数据管理  
* 修改记录：   
*
********************************************************/ 

#include "WashMachineConfigDataManage.h"




WashMachineConfigDataStruct WashMachineConfigDataStru[WASHMACHINE_SUM_MAX];   /*定义洗车机数据配置结构体,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题*/
UINT16 LocalCiWashMachineIdBuf[WASHMACHINE_SUM_MAX] = {0u};                    /*定义本地联锁洗车机映射数组*/
UINT16 WashMachineCurSum = 0u;                                                 /*洗车机当前总数*/




/*
* 功能描述： 获取洗车机当前总数
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 洗车机当前总数
*/
UINT16 GetWashMachineSum(void)
{
	UINT16 retVal = 0u;
    if (WashMachineCurSum >= WASHMACHINE_SUM_MAX)
    {
        retVal = 0U;
    }
    else
    {
        retVal = WashMachineCurSum;
    }
	return retVal;
}

/*
* 功能描述： 获取指定数组下标对应的洗车机ID
* 参数说明： const UINT16 bufIndex, 数组下标    
* 返回值  ： 0: 获取数据失败
*			>0: 洗车机ID    
*/
UINT16 GetWashMachineId(const UINT16 bufIndex)
{
	UINT16 retVal = 0u;
	if (bufIndex < GetWashMachineSum())
	{
		retVal = LocalCiWashMachineIdBuf[bufIndex];
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机索引号
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： SWITCH_SUM_MAX: 获取数据失败
*			<SWITCH_SUM_MAX: 查找成功
*/
UINT16 GetWashMachineIdConfigBufIndex(const UINT16 washMachineId)
{
	UINT16 retVal = 0u;
	if ((washMachineId >= 1u) && (washMachineId < WASHMACHINE_SUM_MAX))
	{
        retVal = washMachineId;
	}
	else
	{
		retVal = WASHMACHINE_SUM_MAX;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机所属联锁ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 所属联锁ID      
*/
UINT8 GetWashMachineBelongCiId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = 0u;
	
	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/
	
	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].BelongCiId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}

/*
* 功能描述： 获取指定ID洗车机工作就绪继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 工作就绪继电器ID   
*/
UINT16 GetWashMachineReadyRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].WashMachineReadyRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID洗车机请求确认继电器ID 
* 参数说明： const UINT16 washMachineId, 洗车机ID 
* 返回值  ： 0: 获取数据失败
*			>0: 请求确认继电器ID    
*/
UINT16 GetWashMachineReqVerifyRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].WashMachineRequestVerifyRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}



/*
* 功能描述： 获取指定ID洗车机列车紧急停车继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 列车紧急停车继电器    
*/
UINT16 GetTrainEmergencyStopRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].TrainEmergencyStopRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}


/*
* 功能描述： 获取指定ID洗车机允许车头清洗继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 允许车头清洗继电器   
*/
UINT16 GetHeadWashAllowRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].HeadWashAllowRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}


/*
* 功能描述： 获取指定ID洗车机允许车尾清洗继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 允许车尾清洗继电器   
*/
UINT16 GetTailWashAllowRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].TailWashAllowRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机允许出洗车库继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 允许出洗车库继电器  
*/
UINT16 GetTrainOutWashPortAllowRelay(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].TrainOutWashPortAllowRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;

}



/*
* 功能描述： 获取指定ID洗车机洗车请求继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 洗车请求继电器 
*/
UINT16 GetWashTrainRequestRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].WashTrainRequestRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}


/*
* 功能描述： 获取指定ID洗车机车头停稳继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 车头停稳继电器
*/
UINT16 GetTrainHeadStopSteadyRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].TrainHeadStopSteadyRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机车尾停稳继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 车尾停稳继电器
*/
UINT16 GetTrainTailStopSteadyRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].TrainTailStopSteadyRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述：	整理读入的洗车机配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 WashMachineConfigDataManage(void)
{
    UINT16 ii = 0u;            			            /*游标*/
    UINT16 jj = 0u;            			            /*游标*/
    UINT16 washMachineConfigDataSum = 0u;        	/*洗车机设备配置数据总数*/
    UINT8 retVal = CI_ERROR;
   
    washMachineConfigDataSum = GetWashMachineSum(); /*获取洗车机的总数 大于等于WASHMACHINE_SUM_MAX返回0*/
    
	for (ii = 0u; ii < WASHMACHINE_SUM_MAX; ii++)
	{
		if (jj == washMachineConfigDataSum)
		{/*遍历有效数据完毕*/

			break;
		}
		else
		{
		}

		if (WashMachineConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
		{/*该部分为无效数据*/

			LocalCiWashMachineIdBuf[jj] = WashMachineConfigDataStru[ii].WashMachineId;
			jj++;
		}
		else
		{
		}
	}
    return CI_SUCCESS;
}

/*
* 功能描述： 获取指定ID洗车机暂停洗车继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 暂停洗车继电器ID
*/
UINT16 GetPauseTrainWashRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].PauseTrainWashRequestRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机通过请求继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID  
* 返回值  ： 0: 获取数据失败
*			>0: 通过请求继电器
*/
UINT16 GetPassRequestRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].TrainPassRequestRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}
/*
* 功能描述： 获取指定ID洗车机所属虚拟联锁ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取失败或者本集中区无洗车机
*			>0: 所属虚拟联锁ID      
*/
UINT8 GetWashMachineBelongVirCiId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 retVal = 0u;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (WASHMACHINE_SUM_MAX > bufIndex)
	{
		retVal = WashMachineConfigDataStru[bufIndex].BelongVirCiId;
	}

	return retVal;

}

/*
* 功能描述： 获取指定ID洗车机洗车模式反馈继电器
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 洗车模式反馈继电器
* by cgh 20231109
*/
UINT16 GetWashModeBackRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].WashModeBackRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机洗车模式继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 全自动自动洗车模式继电器
* by cgh 20231109
*/
UINT16 GetWashModeRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].WashModeRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车同意按钮继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车同意按钮继电器ID
* by cgh 20231109
*/
UINT16 GetDownWashAllowRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashAllowRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车同意指示灯继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车同意指示灯继电器ID
* by cgh 20231109
*/
UINT16 GetDownWashAllowLightRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashAllowLightRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车同意通过按钮继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车同意通过按钮继电器ID
* by cgh 20231109
*/
UINT16 GetDownWashAllowPassRelayId(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashAllowPassRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车线控制台表示灯1关联进路ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车线控制台表示灯1关联进路ID
* by cgh 20231109
*/
UINT16 GetDownWashRelateRoute1Id(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashRelateRoute1Id;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车线控制台表示灯1关联进路状态检查类型
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车线控制台表示灯1关联进路状态检查类型
* by cgh 20231109
*/
UINT8 GetDownWashRelRoute1CheckType(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT8 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashRelateRoute1CheckType;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车线控制台表示灯1继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车线控制台表示灯1继电器ID
* by cgh 20231109
*/
UINT16 GetDownWashRelRoute1LightRelay(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashRelRoute1LightRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车线控制台表示灯2关联进路ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车线控制台表示灯2关联进路ID
* by cgh 20231109
*/
UINT16 GetDownWashRelateRoute2Id(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashRelateRoute2Id;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车线控制台表示灯2关联进路状态检查类型
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车线控制台表示灯2关联进路状态检查类型
* by cgh 20231109
*/
UINT8 GetDownWashRelRoute2CheckType(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT8 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashRelateRoute2CheckType;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述： 获取指定ID洗车机降级模式洗车线控制台表示灯2继电器ID
* 参数说明： const UINT16 washMachineId, 洗车机ID
* 返回值  ： 0: 获取数据失败
*			>0: 降级模式洗车线控制台表示灯2继电器ID
* by cgh 20231109
*/
UINT16 GetDownWashRelRoute2LightRelay(const UINT16 washMachineId)
{
	UINT16 bufIndex = 0U;  /*数组下标*/
	UINT16 retVal = 0U;

	bufIndex = GetWashMachineIdConfigBufIndex(washMachineId);  /*获取洗车机数组下标*/

	if (bufIndex < WASHMACHINE_SUM_MAX)
	{
		retVal = WashMachineConfigDataStru[bufIndex].wDownWashRelRoute2LightRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}