/********************************************************
*                                                                                                            
* 文 件 名： NonRouteDataManage.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-11-17
* 作    者： 联锁组
* 功能描述： 非进路调车数据管理  
* 修改记录：   
*
********************************************************/ 

#include "NonRouteDataManage.h"



NonRouteDataStruct NonRouteDataStruArr[NONROUTE_ID_NUM_MAX];/*非进路数据结构体数组*/

/*
* 功能描述： 获取非进路数组首元素指针
* 参数说明： void
* 返回值  ： 非进路数组首元素指针   
*/
NonRouteDataStruct* GetNonRouteDataPtr(void)
{
	return NonRouteDataStruArr;
}

/*
* 功能描述： 获取对应id的非进路结构体指针
* 参数说明： void
* 返回值  ： 非进路结构体指针   
*/
NonRouteDataStruct* GetNonRouteDataById(UINT8 nonRouteId)
{
	NonRouteDataStruct *pRetNonRoute = NULL;
	UINT8 i=0;
	for (;i<NONROUTE_ID_NUM_MAX;i++)
	{
		if(NonRouteDataStruArr[i].NonRouteId == nonRouteId)
		{
			pRetNonRoute = NonRouteDataStruArr + i;
			break;
		}
	}
	return pRetNonRoute;
}


/*
* 功能描述： 获取指定非进路ID的非进路调车状态
* 参数说明： nonRouteDiaocheID:非进路调车ID    
* 返回值  ： NONROUTE_STATE_IDLE   		: 非进路空闲
*			 NONROUTE_STATE_XUANPAI		: 非进路选排
* 			 IDNONROUTE_STATE_LOCK 		: 非进路锁闭
			 NONROUTE_STATE_DELAY_UNLOCK: 非进路延时解锁
*			 0                          : 数据无效    
*/
UINT8 GetNonRouteStateById(const UINT8 nonRouteDiaocheID)
{
	UINT8 nonRouteState = NONROUTE_STATE_INVALID;
	NonRouteDataStruct* pNonRoute = GetNonRouteDataById((UINT8)nonRouteDiaocheID);
	if(pNonRoute!=NULL)
	{
		nonRouteState = pNonRoute->NonRouteState;
	}
	else
	{

	}
	return nonRouteState;
}

/*
* 功能描述： 设置非进路调车状态
* 参数1说明：const UINT8 nonRouteId，非进路id
* 参数2说明： const UINT8 nonRouteState, 非进路状态    
* 返回值  ： 1:设置成功 
*			 0:设置失败
*/
UINT8 SetNonRouteStateById(const UINT8 nonRouteId,const UINT8 nonRouteStateToSet)
{
	UINT8 reVal = CI_ERROR;

	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);

	if( NULL != pNonRoute)
	{
		reVal = CI_SUCCESS;
		if (NONROUTE_STATE_IDLE == nonRouteStateToSet)
		{ /*非进路空闲*/
			pNonRoute->XuanPaiStartCycleNum = 0u;  /*清除非进路选排起始周期*/
			pNonRoute->DelayUnlockStartCycleNum = 0u;  /*清除非进路选排起始周期*/
		}
		else if(NONROUTE_STATE_XUANPAI == nonRouteStateToSet)
		{ /*非进路选排*/
			pNonRoute->XuanPaiStartCycleNum = Get2oo2CurCycleNum();
		}
		else if(NONROUTE_STATE_LOCK == nonRouteStateToSet)
		{ /*非进路锁闭*/

		}
		else if (NONROUTE_STATE_LOCKERR ==nonRouteStateToSet)
		{ /*非进路异常锁闭*/
			pNonRoute->DelayUnlockStartCycleNum = 0u;
		}
		else if (NONROUTE_STATE_OPEN ==nonRouteStateToSet)
		{ /*非进路开放*/

		}
		else if(NONROUTE_STATE_DELAY_UNLOCK == nonRouteStateToSet)
		{ /*非进路延时解锁*/
			pNonRoute->DelayUnlockStartCycleNum = Get2oo2CurCycleNum();
		}
		else if (NONROUTE_STATE_FAULTDELAY_UNLOCK ==nonRouteStateToSet)
		{ /*非进路故障延时解锁*/
			pNonRoute->DelayUnlockStartCycleNum = Get2oo2CurCycleNum();
		}
		else
		{
			reVal = CI_ERROR;
		}
		pNonRoute->NonRouteState = nonRouteStateToSet;
	}
	else
	{
		reVal = CI_ERROR;
	}

	return reVal;
}


/*
* 功能描述： 获取非进路选排开始时间
* 参数说明： void   
* 返回值  ： 选排开始时间
*/
UINT32 GetNonRouteXuanPaiStartCycById(UINT8 nonRouteId)
{
	UINT32 dwTime = 0u;

	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);

	if(pNonRoute !=NULL)
	{
		dwTime = pNonRoute->XuanPaiStartCycleNum ;
	}
	else
	{

	}
	return dwTime;
}



/*
* 功能描述： 设置非进路信号开放起始周期
* 参数说明： const UINT32 sigOpenStartCycleNum, 信号开放起始周期
* 返回值  ： void
*/
void SetNonRouteSigOpenStartCycById(const UINT8 nonRouteId, const UINT32 sigOpenStartCycleNum)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	if(pNonRoute !=NULL)
	{
		pNonRoute->SigOpenStartCycleNum = sigOpenStartCycleNum;
	}
	else
	{

	}
}


/*
* 功能描述： 获取非进路调车当前延时解锁时间
* 参数说明： void    
* 返回值  ： 非进路调车当前延时解锁时间
*/
UINT32 GetNonRouteDelayUnlockStartCyc(const UINT8 nonRouteId)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT32 unlockCycle = 0u;
	if(pNonRoute !=NULL)
	{
		unlockCycle = pNonRoute->DelayUnlockStartCycleNum;
	}
	else
	{

	}
	return unlockCycle;
}


/*
* 功能描述： 设置非进路调车当前延时解锁时间
* 参数说明： const UINT16 curDelayTime: 当前延时时间    
* 返回值  ： void
*/
void SetNonRouteDelayUnlockStartCyc(const UINT8 nonRouteId,const UINT32 delayTimeStartCycleNum)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);

	if(pNonRoute !=NULL)
	{
		pNonRoute->DelayUnlockStartCycleNum = delayTimeStartCycleNum;
	}
	else
	{

	}
}


/*
* 功能描述： 获取非进路取消标志
* 参数说明： void    
* 返回值  ： 非进路取消标志   
*/
UINT8 GetNonRouteCancelFlagById(const UINT8 nonRouteId)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT8 flag = 0u;
	if(pNonRoute !=NULL)
	{
		flag = pNonRoute->CancelFlag;
	}
	else
	{

	}
	return flag;
}


/*
* 功能描述： 设置非进路取消标志
* 参数说明： const UINT8 cancelFlag, 取消标志    
* 返回值  ： 0: 取消失败
*			 1: 取消成功
*/
UINT8 SetNonRouteCancelFlagById(const UINT8 nonRouteId,const UINT8 cancelFlag)
{
	UINT8 reVal = CI_ERROR;
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);

	if(pNonRoute !=NULL)
	{
		if ((NONROUTE_CANCEL_FLAG_NO == cancelFlag) ||
			(NONROUTE_CANCEL_FLAG_YES == cancelFlag))
		{
			pNonRoute->CancelFlag = cancelFlag;

			reVal = CI_SUCCESS;
		}
	}
	else
	{
		reVal = CI_ERROR;
	}
	

	
	return reVal;
}

/*
* 功能描述： 获取非进路故障取消过标志
* 参数说明： void    
* 返回值  ： 非进路取消过标志   
*/
UINT8 GetNonRouteHaveCancelFlagById(const UINT8 nonRouteId)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT8 retCancelFlag = 0u;
	if(pNonRoute !=NULL)
	{
		retCancelFlag = pNonRoute->HaveCancelFlag;
	}
	else
	{

	}
	return retCancelFlag;
}


/*
* 功能描述： 设置非进路故障取消过标志
* 参数说明： const UINT8 cancelFlag, 取消标志    
* 返回值  ： 0: 取消失败
*			 1: 取消成功
*/
UINT8 SetNonRouteHaveCancelFlagById(const UINT8 nonRouteId,const UINT8 haveCancelFlag)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT8 ret = CI_SUCCESS;
	if(pNonRoute !=NULL)
	{
		if ((NONROUTE_CANCEL_FLAG_NO == haveCancelFlag) ||
			(NONROUTE_CANCEL_FLAG_YES == haveCancelFlag))
		{
			pNonRoute->HaveCancelFlag = haveCancelFlag;

			ret = CI_SUCCESS;
		}
		else
		{
			ret = CI_ERROR;
		}
	}
	else
	{

	}
	return ret;
}


/*
* 功能描述： 获取非进路试车模式
* 参数说明： void    
* 返回值  ：    
*/
UINT8 GetNonRouteRunModeById(const UINT8 nonRouteId)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT8 runMode = 0u;
	if(pNonRoute !=NULL)
	{
		runMode = pNonRoute->RunMode;
	}
	else
	{

	}
	return runMode;
}


/*
* 功能描述： 设置非进路试车模式
* 参数说明： const UINT8 cancelFlag, 取消标志    
* 返回值  ： 0: 取消失败
*			 1: 取消成功
*/
UINT8 SetNonRouteRunModeById(const UINT8 nonRouteId,const UINT8 runFlag)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT8 ret = 0u;
	if(pNonRoute !=NULL)
	{
		if ((NONROUTE_RUN_MODE_TRAIN == runFlag) ||
			(NONROUTE_RUN_MODE_APPLY == runFlag))
		{
			pNonRoute->RunMode = runFlag;

			ret = CI_SUCCESS;
		}
		else
		{
			ret = CI_ERROR;
		}
	}
	else
	{

	}
	return ret;
}

/*
* 功能描述： 获取对应id的非进路信号机开放起始周期
* 参数说明： nonRouteId - 非进路id    
* 返回值  ： 起始周期
*/
UINT32 GetNonRouteSigOpenStartCycById(const UINT8 nonRouteId)
{
	NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
	UINT32 startCycle = 0u;
	if (pNonRoute!=NULL)
	{
		startCycle = pNonRoute->SigOpenStartCycleNum;
	}
	return startCycle;
}