/********************************************************
*
* 文 件 名： ReverseCutConfigDataManage.h
* 版权说明： 北京交控科技有限公司
* 创建时间： 2022-06-15
* 作    者： 联锁组
* 功能描述： 倒切装置配置数据管理头文件
* 修改记录：
*
********************************************************/

#ifndef _REVERSE_CUT_CONFIG_DATA_MANAGE_H_
#define _REVERSE_CUT_CONFIG_DATA_MANAGE_H_

#include "ReverseCutDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"


#ifdef __cplusplus
extern "C" {
#endif


	/*倒切配置数据结构体*/
	typedef struct S_ReverseCutConfigDataStruct
	{
		UINT16 wId;							/*手动编号，与继电器ID一致*/
		UINT8 chBelongCiId;					/*所属TIOC ID*/
		UINT16 wReverseRelayId;				/*倒切继电器ID (配置数据)*/
	}ReverseCutCfgDataStru;

	typedef struct S_ReverseBoardStruct
	{
		UINT16 wReversBoardId;	/*倒切板卡D*/
		UINT8 chDevType;				/*设备类型*/
		UINT16 wDevId;				/*板卡配置设备 ID*/
		UINT16 wBoardColOpenRelayId;          /* 常开采集继电器ID */
		UINT16 wBoardColCloseRelayId;          /* 常闭采集继电器ID */
	}ReverseBoardStruct;

	/*倒切开关及板卡配置数据结构体*/
	typedef struct S_ReverseSwitchDataStruct
	{
		UINT16 wId;							/*倒切开关编号*/
		UINT16 wColOpenRelayId;          /* 常开采集继电器ID */
		UINT16 wColCloseRelayId;          /* 常闭采集继电器ID */
		UINT16 wRelateBoardNum; /*关联板卡个数*/
		UINT8 chBelongCiId;/*所属联锁*/
		ReverseBoardStruct strRelateBoardBuf[REVERSE_BOARD_SUM_MAX]; /*关联板卡数据*/
	}ReverseSwitchCfgDataStru;




	/*******************************全局变量声明*******************************/
	extern ReverseCutCfgDataStru gstReverseCutCfgData[REVERSE_CUT_SUM_MAX];       /*定义倒切装置数据配置结构体*/
	extern UINT16 gReverseCutCfgIdBuf[REVERSE_CUT_SUM_MAX];				   /*定义倒切装置数据配置ID 缓存*/
	extern INT16 gReverseCutCfgSum;					   /*定义倒切装置数据配置总数 */
	extern ReverseSwitchCfgDataStru gLocalReverseData;/*定义属于本联锁的倒切柜数据*/
	/*
	* 功能描述： 获取倒切装置当前总数
	* 参数说明： void
	* 返回值  ： 0: 获取数据失败
	*			>0: 倒切装置当前总数
	*/
	UINT16 GetReverseCutCurSum(void);

	/*
	* 功能描述： 获取指定ID倒切索引号
	* 参数说明： const UINT16 wReverseCutId, 倒切ID
	* 返回值  ： LOGIC_SECTION_SUM_MAX: 获取数据失败
	*			<LOGIC_SECTION_SUM_MAX: 查找成功
	*/
	UINT16 GetReverseCutCfgBufIndex(const UINT16 wReverseCutId);

	/*
	* 功能描述： 获取指定数组下标对应的倒切ID
	* 参数说明： const UINT16 wBufIndex, 数组下标
	* 返回值  ： 0: 获取数据失败
	*			>0: 倒切ID
	*/
	UINT16 GetReverseCutId(const UINT16 wBufIndex);

	/*
	* 功能描述： 获取指定ID倒切继电器ID
	* 参数说明： const UINT16 wReverseCutId, 倒切ID
	* 返回值  ： 0: 获取数据失败
	*			>0: 倒切ID
	*/
	UINT16 GetReverseCutRelayId(const UINT16 wReverseCutId);

	/*
	* 功能描述： 获取指定ID倒切设备所属联锁ID
	* 参数说明： const UINT16 wReverseCutId, 倒切ID
	* 返回值  ： 0: 获取数据失败
	*			>0: 所属TIOC ID
	*/
	UINT8 GetReverseCutBelongCiId(const UINT16 wReverseCutId);

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

	/*
	* 功能描述： 获取本集中区倒切开关常开继电器
	* 参数说明： 无
	* 返回值  ： 0: 无倒切
	*     [1,65534]继电器ID
	*/
	UINT16 GetReverseSwitchOpenRelay(void);

	/*
	* 功能描述： 获取本集中区倒切开关常闭继电器
	* 参数说明： 无
	* 返回值  ： 0: 无倒切
	*     [1,65534]继电器ID
	*/
	UINT16 GetReverseSwitchCloseRelay(void);

	/*
	* 功能描述： 获取本集中区指定索引倒切板卡常开继电器
	* 参数说明： wIndex 索引
	* 返回值  ： 0: 无倒切
	*     [1,65534]继电器ID
	*   UINT16_MAX 错误
	*/
	UINT16 GetReverseBoardOpenRelay(UINT16 wIndex);

	/*
	* 功能描述： 获取本集中区指定索引倒切板卡常闭继电器
	* 参数说明： wIndex 索引
	* 返回值  ： 0: 无倒切
	*     [1,65534]继电器ID
	*/
	UINT16 GetReverseBoardCloseRelay(UINT16 wIndex);

	/*
	* 功能描述： 获取本集中区倒切板卡数量
	* 参数说明： 无
	* 返回值  ： 0: 无倒切  [1,42]板卡数量
	*/
	UINT16 GetReverseBoardNum(void);

	/**
	* @brief 获取本集中区倒切配置数据
	* @param[in]  无
	* @return 本集中区倒切配置数据
	* @note by fan 20260610
	*/
	const ReverseSwitchCfgDataStru * GetReverseCfgData(void);
#ifdef __cplusplus
}
#endif
#endif
