/********************************************************
*                                                                                                            
* 文 件 名： SpksConfigDataManage.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2014-12-05
* 作    者： 联锁组
* 功能描述： SPKS开关相关配置  
* 函数包括： 
* 使用注意：
* 修改记录：   
*
********************************************************/ 
#include "SpksConfigDataManage.h"
#include "../System/CiSystemDefine.h"
#include "PhysicalSectionConfigDataManage.h"

SpksDataConfigStruct spksDataConfigBuff[SPKS_SUM_MAX];		/* 配置数据,cgh-合并CID-2539-1：此处声明不进行初始化，统一放到InitAllStaticDataStr函数中进行初始化，为解决生成内核过大得问题 */
UINT16 spksDataConfigIdxBuff[SPKS_SUM_MAX] = { 0u };					/* 索引表 */
MJDataConfigStruct MjDataConfigBuff[MJ_SUM_MAX];   /*存放门禁解锁继电器信息  20230417lc*/
INT16 gmjSum = 0;
INT16 spksSum = 0;

UINT16 totalSpksNum = 0u;/*本联锁和相邻联锁发送给本联锁Spks总数*/
UINT16 localCiMJBuff[MJ_SUM_MAX] = { 0u };   /*整理后本联锁门禁数组*/
	/*
	* 功能描述： 获取指定ID的SPKS的索引号
	* 参数说明： const UINT16 spksId, spksId
	* 返回值  ： SPKS_SUM_MAX: 获取数据失败
	*			<SPKS_SUM_MAX: 查找成功
	*/
	UINT16 GetSpksConfigBufIndex(const UINT16 spksId)
	{
		UINT16 index = SPKS_SUM_MAX;
		
		if((spksId >= 1u) && (spksId < SPKS_SUM_MAX))
		{
			/* 由于目前索引映射方式直接是设备ID，因此该处直接使用设备ID */
			index = spksId;
		}

		return index;
	}
	

	/*
	* 功能描述：  获取指定ID的SPKS对应物理区段个数
	* 参数说明：  SPKS对应的索引
	* 返回值  ： 
	* 返回值  ： 0: 获取数据失败
	*			>0: 查找成功
	*/
	UINT16 GetSpksPhySecSumByIndex(UINT16 spksIndex)
	{
		UINT16 phySecCount = 0u;
		
		if((spksIndex >= 1u) && (spksIndex < SPKS_SUM_MAX))
		{
			phySecCount = spksDataConfigBuff[spksIndex].phySecNum;
		}
		else
		{
			phySecCount = 0u;
		}
		return phySecCount;
	}

	/*
	* 功能描述：  获取指定ID的SPKS的制定索引的物理区段ID
	* 参数说明：spksIndex:spks索引，secIndex：物理区段序号  
	* 返回值  ： 
	*		 0: 返回
	*		>0: 对应物理区段ID
	*/
	UINT16 GetSpksPhySecId(UINT16 spksIndex,UINT16 secIndex)
	{
		UINT16 phySecId = 0u;

		if((spksIndex >= 1u) && (spksIndex < SPKS_SUM_MAX) && (secIndex < SPKS_MAX_SEC_NUM))
		{
			phySecId = spksDataConfigBuff[spksIndex].spksPhySecIdBuff[secIndex];
		}
		else
		{
			phySecId = 0u;
		}

		return phySecId;
	}

	/*
	* 功能描述： 获取SPKS当前总数
	* 参数说明： void    
	* 返回值  ： 0: 获取数据失败
	*			>0: SPKS当前总数
	*/
	UINT16 GetSpksSum(void)
	{
		UINT16 sum = 0u;
		if (spksSum >= (INT16)SPKS_SUM_MAX)
		{
			sum = SPKS_SUM_MAX ;
		}
		else if (spksSum < 0)
		{
			sum = 0u ;
		}
		else
		{
			sum = (UINT16)spksSum;
		}

		return sum;
	}

	/* 功能描述： 获取指定索引号的SPKS的ID
	* 参数说明： const UINT16 spksIndex, spks索引
	* 返回值  ： 0: 获取数据失败
	*			>0: 查找成功
	*/
	UINT16 GetSpksIdByIndex(const UINT16 spksIndex)
	{
		UINT16 ret = 0u;
		if (spksIndex < GetTotalSpksCurNum() )
		{
			ret = spksDataConfigIdxBuff[spksIndex];
		}

		return ret;
	}

	/*
	* 功能描述：	整理读入的SPKS配置数据
	* 参数说明：	无
	* 返回值  ：	CI_SUCCESS,整理成功
	*				CI_ERROR,整理失败
	*/
	UINT8 SpksConfigDataManage(void)
	{
		UINT16 ii = 0u;      /*游标*/
		UINT16 jj = 0u;      /*游标*/
		UINT16 spksDataSum = 0u;      /*信号机设备配置数据总数*/
		UINT8 ret = CI_ERROR;
		UINT8 localCiId = GetSystemParaLocalCiId();

		/*保存信号机ID索引数组*/
		spksDataSum = GetSpksSum();
		totalSpksNum = spksDataSum;
		if (spksDataSum < SPKS_SUM_MAX)
		{/*配置数据总数错误*/

			for (ii = 0u; ii < SPKS_SUM_MAX; ii++)
			{
				if (jj == spksDataSum)
				{/*遍历有效数据完毕*/

					break;
				}
				if(localCiId == spksDataConfigBuff[ii].belongCiId)				
				{/*该部分为有效数据*/

					spksDataConfigIdxBuff[jj] = spksDataConfigBuff[ii].spksId;
					jj++; 
				}
			}
			ret = CI_SUCCESS; 
		}
				
		return ret;

	}

	/*
	* 功能描述： 获取指定ID对应的采集继电器ID
	* 参数说明： UINT16 spksId    
	* 返回值  ： 0: 获取数据失败
	*			>0: 继电器ID
	*/
	UINT16 GetSpksColRelayId(UINT16 spksId)
	{
		UINT16 bufIndex = 0u;  /*数组下标*/
		UINT16 ret = 0u;

		bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

		if (bufIndex < SPKS_SUM_MAX)
		{
			ret =  spksDataConfigBuff[bufIndex].colRelayId;
		}
		
		return ret;
	}

	/*
	* 功能描述： 获取指定ID对应的旁路继电器ID
	* 参数说明： UINT16 spksId    
	* 返回值  ： 0: 获取数据失败
	*			>0: 继电器ID
	*/
	UINT16 GetSpksCutRelayId(UINT16 spksId)
	{
		UINT16 bufIndex = 0u;  /*数组下标*/
		UINT16 ret = 0u;

		bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

		if (bufIndex < SPKS_SUM_MAX)
		{
			ret =  spksDataConfigBuff[bufIndex].cutRelayId;
		}

		return ret;
	}

	/*
	* 功能描述： 获取指定ID对应的表示继电器ID
	* 参数说明： void    
	* 返回值  ： 0: 获取数据失败
	*			>0: 继电器ID
	*/
	UINT16 GetSpksDisRelayId(UINT16 spksId)
	{
		UINT16 bufIndex = 0u;  /*数组下标*/
		UINT16 ret = 0u;

		bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

		if (bufIndex < SPKS_SUM_MAX)
		{
			ret =  spksDataConfigBuff[bufIndex].displayRelayId;
		}

		return ret;
	}

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


		bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

		if (bufIndex < SPKS_SUM_MAX)
		{
			ciId = spksDataConfigBuff[bufIndex].belongCiId;
		}
		else
		{
			ciId = 0u;
		}

		return ciId;
	}

	/*
	* 功能描述：	整理读入的相邻联锁Spks配置数据
	* 参数说明：	spksSum SPKS数量
	*				spksIdBuff 相邻联锁发送给本联锁的SpksID配置数据
	* 返回值  ：	1,整理成功
	*				0,整理失败
	*/
	UINT8 AddExtendSpksIdDataManage(UINT16 spksNum,const UINT16 *spksIdBuff)
	{
		UINT16  index = 0u;  /*数组下标*/
		UINT16  ii = 0u;
		UINT8 retVal = 1u;

		if ((totalSpksNum + spksNum) >= SPKS_SUM_MAX)
		{/*入口防护*/
			retVal = 0u;
		}
		else
		{
			index = totalSpksNum;
			totalSpksNum += spksNum;
			for(ii = 0u;ii< spksNum;ii++)
			{
				spksDataConfigIdxBuff[index+ii] = spksIdBuff[ii];/*追加到spksDataConfigIdxBuff*/
			}
		}

		return retVal;
	}

	/*
	* 功能描述： 获取相邻联锁发送给本联锁以及本联锁Spks当前总数
	* 参数说明： void    
	* 返回值  ： 0: 获取数据失败
	*			>0: Spks当前总数
	*/
	UINT16 GetTotalSpksCurNum(void)
	{
		UINT16 retVal  = 0u;
		if (totalSpksNum >= SPKS_SUM_MAX)
		{
			retVal = 0u;
		}
		else
		{
			retVal = totalSpksNum;
		}
		return retVal;
	}

	/*
	* 功能描述： 获取指定ID SPKS的虚拟属性
	* 参数说明： const UINT16 spksId, SPKS ID    
	* 返回值  ： 0: 获取数据失败
	*			>0: SPKS的虚拟属性      
	*/
	UINT8 GetSpksVirtualAttribute(const UINT16 spksId)
	{
		UINT16 bufIndex = 0u;  /*数组下标*/
		UINT8 retVal = CI_ERROR;

		bufIndex = GetSpksConfigBufIndex(spksId);  /*获取SPKS数组下标*/

		if (bufIndex < SPKS_SUM_MAX)
		{
			retVal = spksDataConfigBuff[bufIndex].VirtualAttribute;
		}
		else
		{
			retVal = CI_ERROR;
		}
		return retVal;
	}

/*
* 功能描述： 获取指定IDSpks所属虚拟联锁ID
* 参数说明： const UINT16 spksId, spksId    
* 返回值  ： 0: 获取数据失败
*			>0: 所属虚拟联锁ID      
*/
UINT8 GetSpksBelongVirCiId(const UINT16 spksId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 virciId = 0u;


	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (bufIndex < SPKS_SUM_MAX)
	{
		virciId = spksDataConfigBuff[bufIndex].belongVirCIid;
	}
	else
	{
		virciId = 0u;
	}

	return virciId;
}
/***********分界线 spks复示继电器********************************************/
/*
* 功能描述： 获取指定ID spks复示继电器ID
* 参数说明： const UINT16 spksId
* 返回值  ：  0: 获取数据失败
*		 >0: spks复视继电器ID
*/
UINT16 GetSpksRepRelayId(const UINT16 spksId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/

	UINT16 retVal = CI_ERROR;
	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取spks数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		retVal = spksDataConfigBuff[bufIndex].repRelayId;
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}



/*
* 功能描述： 获取指定旁路继电器ID对应的表示继电器ID
* 参数说明： void    
* 返回值  ： 0: 获取数据失败
*			>0: 继电器ID
*/
UINT16 GetSpksCutDisRelayId(UINT16 spksId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 ret = 0u;

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		ret =  spksDataConfigBuff[bufIndex].cutDisplayRelayId;
	}

	return ret;
}

/***********分界线 spks复示继电器*********END***********************************/

/*
* 功能描述： 设置总SPKS标志
* 参数说明： UINT16 spksId  SPKS ID
*            UINT8 totalspksFlag 总SPKS标志
* 返回值  ： 无
*/
void SetSpksIstotalSpksFlag(UINT16 spksId, UINT8 totalspksFlag)
{
	UINT16 bufIndex = 0u;  /*数组下标*/

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		spksDataConfigBuff[bufIndex].IstotalSpksFlag = totalspksFlag;
	}
}
/*
* 功能描述： 获取总SPKS标志
* 参数说明： UINT16 spksId  SPKS ID
*            UINT8 totalspksFlag 总SPKS标志
* 返回值  ： 总SPKS标志
*/
UINT8 GetSpksIstotalSpksFlag(UINT16 spksId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8  reval = 0u;

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		reval = spksDataConfigBuff[bufIndex].IstotalSpksFlag;
	}
	return reval;
}


/*
* 功能描述： 设置总SPKS包含的spks数目
* 参数说明： UINT16 spksId  SPKS ID
*            UINT8 totalspksFlag 总SPKS标志
* 返回值  ： 无
*/
void SetSpksIncludeSpksNum(UINT16 spksId, UINT8 includeSpksNum)
{
	UINT16 bufIndex = 0u;  /*数组下标*/

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		spksDataConfigBuff[bufIndex].IncludeSpksNum = includeSpksNum;
	}
}

/*
* 功能描述： 获取SPKS包含SPKS数目
* 参数说明： UINT16 spksId  SPKS ID
*
* 返回值  ： 无
*/
UINT8 GetSpksIncludeSpksNum(UINT16 spksId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT8 reVal = 0u;

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		reVal = spksDataConfigBuff[bufIndex].IncludeSpksNum;
		if (INCLUDELESPKS_MAX_NUM < reVal)
		{
			reVal = 0u;
		}
	}

	return reVal;
}

/*
* 功能描述： 获取总SPKS标志
* 参数说明： UINT16 spksId  SPKS ID
*
* 返回值  ： 总SPKS ID数组
*/
UINT16* GetSpksIncludeSpksIdBuf(UINT16 spksId)
{
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16* pIncludeSpksIdBuf = NULL;

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		pIncludeSpksIdBuf = spksDataConfigBuff[bufIndex].IncludeSpksIdBuf;
	}

	return pIncludeSpksIdBuf;
}

/*
* 功能描述： 获取指定ID对应的室外表示灯继电器
* 参数说明：  UINT16 spksId  SPKS ID
* 返回值  ： 0: 获取数据失败
*			>0: 继电器ID
*/
UINT16 GetSpksOutsideRelayId(UINT16 spksId)
{
	UINT16 bufIndex = 0;  /*数组下标*/
	UINT16 ret = 0;

	bufIndex = GetSpksConfigBufIndex(spksId);  /*获取区段数组下标*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		ret = spksDataConfigBuff[bufIndex].outsideRelayId;
	}

	return ret;
}

/*
* 功能描述： 获取门禁当前总数
* 参数说明： void
* 返回值  ： 门禁当前总数
*/
UINT16 GetMjjsSum(void)
{
	UINT16 sum = 0U;
	if ((INT16)MJ_SUM_MAX <= gmjSum)
	{
		sum = MJ_SUM_MAX;
	}
	else if (0 > gmjSum)
	{
		sum = 0u;
	}
	else
	{
		sum = (UINT16)gmjSum;
	}
	return sum;
}

/* 功能描述： 获取指定门禁的门禁解锁继电器ID
* 参数说明： const UINT16 mjjsIndex, 索引
* 返回值  ： 0: 获取数据失败
*			>0: 门禁解锁继电器ID
*/
UINT16 GetMjjsRelayId(const UINT16 mjid)
{
	UINT16 retval = CI_ERROR;
	UINT16 buffIndex = 0u;
	buffIndex = GetMJBufIndex(mjid);

	if (MJ_SUM_MAX > buffIndex)
	{
		retval = MjDataConfigBuff[buffIndex].mjjsRelayId;
	}
	else
	{
		retval = 0U;
	}
	return retval;
}

/* 功能描述： 获取指定索引号的门禁解锁继电器对应的SPKS的ID
* 参数说明： const UINT16 mjjsIndex, 门禁解锁继电器索引
            const UINT16 spksIndex, spks索引
* 返回值  ： 0: 获取数据失败
*			>0: 查找成功
*/
UINT16 GetSpksIdByMjjsIndex(const UINT16 mjid, const UINT16 spksIndex)
{
	UINT16 retval = 0U;
	UINT16 buffIndex = 0u;
	buffIndex = GetMJBufIndex(mjid);

	if ((MJ_SUM_MAX > buffIndex) && (MJ_MAX_SPKSNUM > spksIndex))
	{
		retval = MjDataConfigBuff[buffIndex].relSpksIdBuff[spksIndex];
	}
	else
	{
	}
	return retval;
}

/*
* 功能描述： 获取门禁继电器对应的spks总数
* 参数说明：  UINT16 mjjsIndex  mjjs ID
* 返回值  ：门禁继电器对应的spks总数
*/
UINT8 GetSpksCountByMjID(const UINT16 mjid)
{
	UINT8 retval = CI_ERROR;
	UINT16 buffIndex = 0u;
	buffIndex = GetMJBufIndex(mjid);

	if (MJ_SUM_MAX > buffIndex)
	{
		retval = MjDataConfigBuff[buffIndex].relSpkscount;
	}
	else
	{
		retval = 0U;
	}
	return retval;

}

/* 功能描述： 获取指定门禁ID所属联锁
* 参数说明： const UINT16 mjid, 索引
* 返回值  ： 0: 获取数据失败
*			>0: 门禁解锁继电器所属联锁
*/
UINT8 GetMjBelongCIID(const UINT16 mjid)
{
	UINT8 retval = CI_ERROR;
	UINT16 buffIndex = 0u;
	buffIndex = GetMJBufIndex(mjid);

	if (MJ_SUM_MAX > buffIndex)
	{
		retval = MjDataConfigBuff[buffIndex].belongCiId;
	}
	else
	{
		retval = 0U;
	}
	return retval;
}
/*
* 功能描述： 获取指定ID门禁数组下标
* 参数说明： const UINT16 signalId, 信号机D
* 返回值  ： SIGNAL_SUM_MAX: 获取数据失败
*			<SIGNAL_SUM_MAX: 查找成功
*/
UINT16 GetMJBufIndex(const UINT16 mjid)
{
	UINT16 retVal = MJ_SUM_MAX;
	if ((1U <= mjid) && (MJ_SUM_MAX > mjid))
	{
		retVal = mjid;
	}

	return retVal;
}

/*
* 功能描述： 获取指定数组下标对应的门禁ID
* 参数说明： const UINT16 bufIndex 数组下标
* 返回值  ： 0: 获取数据失败
*			>0: 门禁ID
*/
UINT16 GetMJIdByIndex(const UINT16 mjIndex)
{
	UINT16 retVal = CI_ERROR;
	UINT16 wMJCurNum = 0U;

	wMJCurNum = GetMjjsSum();
	if (mjIndex < wMJCurNum)
	{
		retVal = localCiMJBuff[mjIndex];
	}
	else
	{
		retVal = CI_ERROR;
	}
	return retVal;
}

/*
* 功能描述：	整理读入的门禁配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 MjConfigDataManage(void)
{
	UINT16 ii = 0u;      /*游标*/
	UINT16 jj = 0u;      /*游标*/
	UINT16 curMjConfigDataSum = 0u;      /*当前联锁ESB设备配置数据总数*/
	UINT8 reVal = CI_SUCCESS;
	UINT8 localCi = 0u;

	localCi = GetSystemParaLocalCiId();
	curMjConfigDataSum = GetMjjsSum();
	if (curMjConfigDataSum >= MJ_SUM_MAX)
	{/*配置数据总数错误*/

		reVal = CI_ERROR;
	}
	else
	{
		for (ii = 0u; ii < MJ_SUM_MAX; ii++)
		{
			if (jj == curMjConfigDataSum)
			{/*遍历有效数据完毕*/

				break;
			}

			if (MjDataConfigBuff[ii].belongCiId == localCi)
			{/*该部分为有效数据，本联锁内*/

				localCiMJBuff[jj] = MjDataConfigBuff[ii].mjId;
				jj++;
			}
		}
	}


	return reVal;
}

/*
* 功能描述： 获取指定ID Spks关联的站台ID
* 参数说明： const UINT16 spksId SPKS ID
* 返回值  ： 0: 获取数据失败
*			>0: SPKS关联的站台ID
* Created By LQ 2023.11.14
*/
UINT16 GetSpksRelPlatFormId(const UINT16 wSpksId)
{
	UINT16 retVal = CI_ERROR;
	UINT16 bufIndex = 0u;  /*数组下标*/

	bufIndex = GetSpksConfigBufIndex(wSpksId);  /*获取SPKS数组下标*/

	if (bufIndex < SPKS_SUM_MAX)
	{
		retVal = spksDataConfigBuff[bufIndex].wSpksRelPlatFormId;
	}
	else
	{
		/*入参非法，返回失败*/
	}

	return retVal;
}

/*
* 功能描述： 获取指定ID区间雨雪站台关联的SPKS数量
* 参数说明： const UINT16 wPlatFormId 站台ID
*            UINT16 pPlatFormRelSpksId[] 站台关联的SPKS ID数组（出参）
* 返回值  ： 0: 获取数据失败
*			>0: 站台关联的SPKS数量
* Created By LQ 2023.11.14
*/
UINT8 GetPlatFormRelSpksNum(const UINT16 wPlatFormId, UINT16 pPlatFormRelSpksId[PLATFORM_REL_SPKS_NUM_MAX])
{
	UINT8 retVal = CI_ERROR;
	UINT16 ii = 0U;
	UINT16 wSpksCurSum = 0U;  /*SPKS当前总数*/
	UINT16 wSpksId = 0U;
	UINT16 wTempPlatFormId = 0U;  /*SPKS关联站台ID*/
	UINT8 cRelSpksNum = 0U;  /*站台关联的SPKS数量*/

	if ((0U != wPlatFormId) && (NULL != pPlatFormRelSpksId))
	{
		wSpksCurSum = GetTotalSpksCurNum();  /*获取本控区及相邻控区传来的SPKS总数*/
		for (ii = 0U; ii < wSpksCurSum; ii++)
		{
			wSpksId = GetSpksIdByIndex(ii);
			wTempPlatFormId = GetSpksRelPlatFormId(wSpksId);

			if (wPlatFormId == wTempPlatFormId)
			{
				if (PLATFORM_REL_SPKS_NUM_MAX > cRelSpksNum)
				{
					pPlatFormRelSpksId[cRelSpksNum] = wSpksId;
					cRelSpksNum++;
				}
				else
				{
					cRelSpksNum = CI_ERROR;  /*数量超限停止遍历，返回失败*/
					break;
				}
			}
			else
			{
				/*继续遍历*/
			}

		}

		retVal = cRelSpksNum;
	}
	else
	{
		/*入参非法，返回0*/
	}

	return retVal;
}

/*
* 功能描述： 获取指定ID区间雨雪站台所属控区
* 参数说明： const UINT16 wPlatFormId 区间雨雪站台ID
* 返回值  ： 0: 获取数据失败
*			>0: 区间雨雪站台所属控区
* Created By LQ 2023.11.23
*/
UINT8 GetAreaSnowPlatFormBelongCiId(const UINT16 wPlatFormId)
{
	UINT8 retVal = CI_ERROR;
	UINT16 ii = 0U;
	UINT16 wSpksCurSum = 0U;  /*SPKS当前总数*/
	UINT16 wSpksId = 0U;
	UINT16 wTempPlatFormId = 0U;  /*SPKS关联站台ID*/

	if (0U != wPlatFormId)
	{
		wSpksCurSum = GetTotalSpksCurNum();  /*获取本控区及相邻控区传来的SPKS总数*/
		for (ii = 0U; ii < wSpksCurSum; ii++)
		{
			wSpksId = GetSpksIdByIndex(ii);
			wTempPlatFormId = GetSpksRelPlatFormId(wSpksId);

			if (wPlatFormId == wTempPlatFormId)
			{
				retVal = GetSpksBelongCiId(wSpksId);  /*返回SPKS所属控区ID*/
			}
			else
			{
				/*继续遍历*/
			}
		}
	}
	else
	{
		/*入参非法，返回0*/
	}

	return retVal;
}



/*
* 功能描述： 检查指定SPKS是否包含本控区的区段
* 参数说明： const UINT16 spksId SPKS ID
* 返回值  ： CI_SUCCESS: 不包含本控区的区段
*			CI_ERROR: 包含本控区的区段
*           UINT8_MAX：查询失败
* Created By LQ 2023.11.14
*/
UINT8 CheckSpksRelSecBelongCI(const UINT16 wSpksId)
{
	UINT8 retVal = CI_ERROR;
	UINT16 bufIndex = 0u;  /*数组下标*/
	UINT16 phySecSum = 0U;  /*SPKS包含的物理区段数目*/
	UINT16 tmpPphySecId = 0U;
	UINT16 i = 0U;
	UINT8 cPhySecBelongCiId = 0U;
	UINT8 localCIID = 0U;

	bufIndex = GetSpksConfigBufIndex(wSpksId);  /*获取SPKS数组下标*/
	localCIID = GetSystemParaLocalCiId();	/*获取本地联锁ID*/

	if (SPKS_SUM_MAX > bufIndex)
	{
		phySecSum = GetSpksPhySecSumByIndex(bufIndex);
		retVal = CI_SUCCESS;
		if ((SPKS_MAX_SEC_NUM >= phySecSum) && (0U < phySecSum))
		{
			for (i = 0U; i < phySecSum; i++)
			{
				tmpPphySecId = GetSpksPhySecId(bufIndex, i);
				cPhySecBelongCiId = GetPhySecBelongCiId(tmpPphySecId);

				/*SPKS关联的物理区段存在所属本联锁的区段*/
				if ((localCIID == cPhySecBelongCiId) && (0U != localCIID))
				{

					retVal = CI_ERROR;
					break;

				}
			}
		}
		else
		{
			/*返回失败*/
			retVal = UINT8_MAX;
		}
	}
	else
	{
		/*入参非法，返回失败*/
		retVal = UINT8_MAX;
	}
	return retVal;
}