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

#ifndef _SPKS_CONFIG_DATA_MANAGE_H_
#define _SPKS_CONFIG_DATA_MANAGE_H_

#include "CommonTypes.h"
#include "SpksDefine.h"
#include "../System/SystemParameterManage.h"
typedef struct  
{
	UINT16 spksId;									/* spks编号 */	
	UINT16 colRelayId;									/* spks对应的采集继电器ID ：继电器表 */				
	UINT16 displayRelayId;								/* 采集对应继电器  ：继电器表 */
	UINT16 cutRelayId;                                  /*spks旁路继电器ID ：继电器表*/
	UINT16 repRelayId;                                  /*spks复示继电器ID ：继电器表*/
	UINT16 cutDisplayRelayId;                            /*spks旁路指示灯继电器ID ：继电器表*/
	UINT16 menjinJSRelayId;                                      /*spks门禁解锁继电器ID ：继电器表*/
	UINT16 spksPhySecIdBuff[SPKS_MAX_SEC_NUM];			/* spks对应的封锁物理区段列表,电子地图表中 */	
	UINT16  phySecNum;									/* spks对应的封锁物理区段数量 */
	UINT8 belongCiId;								/* 计算： 所属联锁ID */
	UINT8 belongVirCIid;                                 /*获取所属虚拟联锁ID*/
	UINT8 VirtualAttribute;							/*虚拟属性*/

	UINT8 IstotalSpksFlag;                          /*本SPKS是总SPKS标志（注：拥有管辖的spks时，设置此标志）*/
	UINT8 IncludeSpksNum;                          /*SPKS管理的SPKS数目*/
	UINT16 IncludeSpksIdBuf[INCLUDELESPKS_MAX_NUM];                          /*SPKS管理的SPKSID数组*/
	UINT16 outsideRelayId;                          /*室外SPKS ID*/
	UINT16 wSpksLogSecIdBuff[SPKS_MAX_LOG_SEC_NUM];			/* spks对应的封锁逻辑区段列表,电子地图表中 */
	UINT16  wSpksLogSecNum;									/* spks对应的封锁逻辑区段数量 */
	UINT16 wSpksRelPlatFormId;  /*SPKS关联站台ID*/
} SpksDataConfigStruct;


typedef struct
{
	UINT16 mjId;					                /* 关联的spks编号 */
	UINT16 mjjsRelayId;								/* 门禁解锁继电器ID ：继电器表 */
	UINT8 belongCiId;								/* 所属联锁ID */
	UINT8 relSpkscount;                               /*关联的SPKS数量*/
	UINT16 relSpksIdBuff[MJ_MAX_SPKSNUM];            /*关联的SPKS数量*/
} MJDataConfigStruct;

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

extern UINT16 totalSpksNum;/*本联锁和相邻联锁发送给本联锁Spks总数*/
extern UINT16 localCiMJBuff[MJ_SUM_MAX];  /*整理后本联锁门禁数组*/

#ifdef __cplusplus
extern "C" {
#endif


	/*
	* 功能描述： 获取指定ID的SPKS的索引号
	* 参数说明： const UINT16 spksId, spks ID
	* 返回值  ： SPKS_SUM_MAX: 获取数据失败
	*			<SPKS_SUM_MAX: 查找成功
	*/
	UINT16 GetSpksConfigBufIndex(const UINT16 spksId);
	
	/*
	* 功能描述： 获取指定索引号的SPKS的ID
	* 参数说明： const UINT16 spksIndex, spksID
	* 返回值  ： SPKS_SUM_MAX: 获取数据失败
	*			<SPKS_SUM_MAX: 查找成功
	*/
	UINT16 GetSpksIdByIndex(const UINT16 spksIndex);

	/*
	* 功能描述：  获取指定ID的SPKS对应物理区段个数
	* 参数说明：  SPKS对应的索引
	* 返回值  ： 
	* 返回值  ： 0: 获取数据失败
	*			>0: 查找成功
	*/
	UINT16 GetSpksPhySecSumByIndex(UINT16 spksIndex);

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

	/*
	* 功能描述： 获取SPKS当前总数
	* 参数说明： void    
	* 返回值  ： 0: 获取数据失败
	*			>0: SPKS当前总数
	*/
	UINT16 GetSpksSum(void);

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

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

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

	/*
	* 功能描述：	整理读入的SPKS配置数据
	* 参数说明：	无
	* 返回值  ：	CI_SUCCESS,整理成功
	*				CI_ERROR,整理失败
	*/
	UINT8 SpksConfigDataManage(void);

	/*
	* 功能描述： 获取指定IDSpks所属联锁ID
	* 参数说明： const UINT16 spksId, 信号机ID    
	* 返回值  ： 0: 获取数据失败
	*			>0: 所属联锁ID      
	*/
	UINT8 GetSpksBelongCiId(const UINT16 spksId);

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

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

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

/*
* 功能描述： 获取指定ID spks复示继电器ID
* 参数说明： const UINT16 spksId
* 返回值  ：  0: 获取数据失败
*		 >0: spks复视继电器ID
*/
UINT16 GetSpksRepRelayId(const UINT16 spksId);




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

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

/*
* 功能描述： 设置总SPKS标志
* 参数说明： UINT16 spksId  SPKS ID
*            UINT8 totalspksFlag 总SPKS标志
* 返回值  ： 无
*/
void SetSpksIstotalSpksFlag(UINT16 spksId, UINT8 totalspksFlag);
/*
* 功能描述： 获取总SPKS标志
* 参数说明： UINT16 spksId  SPKS ID
*            UINT8 totalspksFlag 总SPKS标志
* 返回值  ： 总SPKS标志
*/
UINT8 GetSpksIstotalSpksFlag(UINT16 spksId);
/*
* 功能描述： 设置总SPKS包含的spks数目
* 参数说明： UINT16 spksId  SPKS ID
*            UINT8 totalspksFlag 总SPKS标志
* 返回值  ： 无
*/
void SetSpksIncludeSpksNum(UINT16 spksId, UINT8 includeSpksNum);
/*
* 功能描述： 获取SPKS包含SPKS数目
* 参数说明： UINT16 spksId  SPKS ID
*
* 返回值  ： 无
*/
UINT8 GetSpksIncludeSpksNum(UINT16 spksId);
/*
* 功能描述： 获取总SPKS标志
* 参数说明： UINT16 spksId  SPKS ID
*
* 返回值  ： 总SPKS ID数组
*/
UINT16* GetSpksIncludeSpksIdBuf(UINT16 spksId);

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


/*
* 功能描述： 门禁当前总数
* 参数说明： void
* 返回值  ： 0: 获取数据失败
*			>0: 门禁当前总数
*/
UINT16 GetMjjsSum(void);

/* 功能描述： 获取指定索引号的门禁解锁继电器ID
	* 参数说明： const UINT16 spksIndex, spks索引
	* 返回值  ： 0: 获取数据失败
	*			>0: 查找成功
	*/
UINT16 GetMjjsRelayId(const UINT16 mjid);



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

/*获取门禁继电器对应的spks总数*/
UINT8 GetSpksCountByMjID(const UINT16 mjid);

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

/*
* 功能描述： 获取指定ID门禁数组下标
* 参数说明： const UINT16 signalId, 信号机D
* 返回值  ： SIGNAL_SUM_MAX: 获取数据失败
*			<SIGNAL_SUM_MAX: 查找成功
*/
UINT16 GetMJBufIndex(const UINT16 mjid);

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

/*
* 功能描述：	整理读入的门禁配置数据
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 MjConfigDataManage(void);

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

/*
* 功能描述： 获取指定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]);

/*
* 功能描述： 获取指定ID区间雨雪站台所属控区
* 参数说明： const UINT16 wPlatFormId 区间雨雪站台ID
* 返回值  ： 0: 获取数据失败
*			>0: 区间雨雪站台所属控区
* Created By LQ 2023.11.23
*/
UINT8 GetAreaSnowPlatFormBelongCiId(const UINT16 wPlatFormId);


/*
* 功能描述： 检查指定SPKS是否包含本控区的区段
* 参数说明： const UINT16 spksId SPKS ID
* 返回值  ： CI_SUCCESS: 不包含本控区的区段
*			CI_ERROR: 包含本控区的区段
*           UINT8_MAX：查询失败
* Created By LQ 2023.11.14
*/
UINT8 CheckSpksRelSecBelongCI(const UINT16 wSpksId);

#ifdef __cplusplus
};
#endif

#endif