/********************************************************
*                                                                                                            
* 文 件 名： VirtualDeviceDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2016-12-16
* 作    者： 联锁组
* 功能描述： 虚拟设备动态数据管理  
* 修改记录：   
*
********************************************************/ 
#ifndef __VIRTUALDEV_CONFIG_DATA_MANAGE_H_
#define __VIRTUALDEV_CONFIG_DATA_MANAGE_H_

#include "VirtualDevDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#include "../Indicator/IndicatorDataManage.h"
#include "../Signal/SignalDataManage.h"

#ifdef __cplusplus
extern "C" {
#endif

/*虚拟自动折返按钮设备类型数据结构体*/
typedef struct S_VirtualZDZFAJDataStruct
{
	UINT8 belongCiId;												/*所属联锁ID*/
	UINT8 virtualDevType;											/*自动折返设备类型*/
	UINT8 btnState;													/*无人折返按钮状态*/
}VirtualZDZFAJDataStruct;

/*虚拟联锁无人折返指示灯使用*/
typedef struct s_VirCIRtnIndicatorState_stru
{
	UINT8 VirCiIndicatorDevId;/*指示灯设备ID*/
	UINT8 VirCiFlashState;/*闪灯状态*/
	UINT8 VirCiSteadyState;/*稳灯状态*/
}VirCIRtnIndicatorState;


/*虚拟联锁相关数据*/
typedef struct S_Virtual_CI_Attri_Struct
{
	UINT8 virtualCiId;/*本联锁所属虚拟联锁ID*/
	UINT8 chAllSignalBrightFlag;/*全站亮灯标志*/
	UINT8 chAllSwitchYLockFlag;/*全站引导总锁标志*/
	UINT8 chLabourCancelLinShiXianState;/*人工取消临时限速*/
	UINT8 cimode;/*控制模式*/
	UINT8 autoTriggerflag;/*自动触发标识*/
	UINT8 ZfwFlag;   /*总复位标识*/
	UINT32 ZfwStartCycNum;/*总复位命令开始周期*/
	UINT32 ZfwValidCycNum; /*ZFW总复位继电器有效周期*/
	UINT8 ZfwjHunXianFLag;/*总复位混线标志*/
	UINT8 IncludeOCNum;/*本虚拟联锁包含的OC数量*/
	UINT8 IncludeOCid[VIRTUAL_CI_INCLUDE_OC_MAX];/*本虚拟联锁包含的OC的ID*/
    IndicatorDataStruct IndicatorData[VIRTUAL_CI_INDICATOR_SUM_MAX];/*本虚拟联锁包含的指示灯*/
	IndicatorConfigDataStruct IndicatorConfigData[VIRTUAL_CI_INDICATOR_SUM_MAX];/*本虚拟联锁包含的指示灯配置数据*/
	UINT16 localCiIndicatorIdBuf[VIRTUAL_CI_INDICATOR_SUM_MAX];/*本虚拟联锁指示灯ID映射*/
	UINT8 IndicatorConfigDataNum;/*本虚拟联锁包含的指示灯配置数量*/
	VirCIRtnIndicatorState VirCIRtnIndicatorStaData[RTNINDICATOR_SUM_MAX];/*本虚拟联锁包含的无人折返指示灯数据*/

}VirtualCIAttriStruct;

/*表示报警灯继电器结构体*/
typedef struct S_LocalCIRelay_BaoJingDengStru
{
	UINT16 wId;                                /*ID*/
	UINT8 wBelongCiId;                        /*所属联锁*/
	UINT8 wBelongVirCIid;                       /*所属虚拟联锁*/
	UINT16 wBjdID;                             /*报警灯ID*/
	UINT8 wBjdDevID;                           /*报警灯设备ID*/
} LocalCIRelay_BaoJingDengStr;
/*本联锁包含虚拟联锁*/
typedef struct S_VirtualCIStruct
{
	UINT8 LocalCiID;/*本联锁ID*/
	VirtualCIAttriStruct virtualCi[VIRTUAL_CI_MAX];/*本联锁所属虚拟联锁ID数组*/
	UINT8 virtualCiNum;/*本联锁虚拟联锁数目*/
	LocalCIRelay_BaoJingDengStr LocalCIBaojingdeng[LOCAL_CI_INDICATOR_SUM_MAX];/*本联锁包含的报警灯数*/
	UINT16 LocalCIBaojingdengNum;
}VirtualCIStruct;


extern VirtualZDZFAJDataStruct VirtualZDZFAJData;

extern VirtualCIStruct g_VirtualCIStructData;/*仅存储本机联锁包含虚拟联锁*/

/*
* 功能描述： 获取虚拟折返按键的设备类型
* 参数说明： 无   
* 返回值  ： 无人折返按键的设备类型
*/
UINT8 GetVirtualZDZFDevType(void);

#if 0
/*
* 功能描述： 获取虚拟折返按键对应折返灯的闪灯状态
* 参数说明： 无   
* 返回值  ： 无人折返灯的闪灯状态
*/
UINT8 GetVirtualZDZFFlashState(void);

/*
* 功能描述： 获取虚拟折返按键对应折返灯的稳灯状态
* 参数说明： 无   
* 返回值  ： 无人折返灯的稳灯状态
*/
UINT8 GetVirtualZDZFSteadyState(void);

#endif
/*
* 功能描述： 获取虚拟折返按键的设置状态
* 参数说明： 无   
* 返回值  ： 无人折返按键的设置状态
*/
UINT8 GetVirtualZDZFButtonState(void);

/*
* 功能描述： 获取虚拟折返按键对应折返灯的所属联锁ID
* 参数说明： 无   
* 返回值  ：虚拟折返按键的所属联锁ID
*/
UINT8 GetVirtualZDZFBelongCiId(void);

/*
* 功能描述： 设置指定ID 虚拟无人折返按钮的设置状态
* 参数说明： const UINT8 state, 按钮设置状态
* 返回值  ： 无     
*/
void SetVirtualZDZFButtonState(const UINT8 state);

/*
* 功能描述： 初始化虚拟无人折返按钮设备状态
* 参数说明： 无   
* 返回值  ： 无
*/
void InitVirtualZDZFData(void);

/*
* 功能描述： 获取指定虚拟联锁全站点灯状态
* 参数说明： 虚拟联锁ID
* 返回值  ： 全站点灯状态
*
*/
UINT8 GetVirCIAllSignalBrightState(UINT8 VirCIid);
/*
* 功能描述： 设置指定虚拟联锁全站点灯状态
* 参数说明： 虚拟联锁ID,全站点灯状态
* 返回值  ： 无
*
*/
void SetVirCIAllSignalBrightState(UINT8 VirCIid, UINT8 state);
/*
* 功能描述： 获取本联锁包含虚拟联锁数量
* 参数说明： 无
* 返回值  ： 虚拟联锁数量
*
*/
UINT8 GetVirtualCINum(void);
/*
* 功能描述： 获取指定索引虚拟联锁ID
* 参数说明： 无
* 返回值  ： 指定虚拟联锁ID
*
*/
UINT8 GetVirtualCIid(UINT8 index);
/*
* 功能描述： 获取指定虚拟联锁引导总锁状态
* 参数说明： 虚拟联锁ID
* 返回值  ： 全站点灯状态
*
*/
UINT8 GetVirCIAllSwitchYLockState(UINT8 VirCIid);
/*
* 功能描述： 设置指定虚拟联锁引导总锁状态
* 参数说明： 虚拟联锁ID,引导总锁状态
* 返回值  ： 无
*
*/
void SetVirCIAllSwitchYLockState(UINT8 VirCIid, UINT8 state);
/*
* 功能描述： 获取指定虚拟联锁临时限速状态
* 参数说明： 虚拟联锁ID
* 返回值  ： 临时限速状态
*
*/
UINT8 GetVirCILabourCancelLSXianSta(UINT8 VirCIid);
/*
* 功能描述： 设置指定虚拟联锁临时限速状态
* 参数说明： 虚拟联锁ID,临时限速状态
* 返回值  ： 无
*
*/
void SetVirCILabourCancelLSXianSta(UINT8 VirCIid, UINT8 state);

/*
* 功能描述： 获取指定OC所属虚拟联锁
* 参数说明： ocid  oc的ID
* 返回值  ： 虚拟联锁ID
*
*/
UINT8 GetOCBelongVirCIid(const UINT8 ocid);
/*
* 功能描述： 设置指定虚拟联锁ID指示器状态
* 参数说明：  const UINT8 virCIid     虚拟联锁ID
*            const UINT8 indicatorId, 指示器ID
*			 const UINT8 indicatorState, 指示器状态
* 返回值  ： 0: 设置失败
*			 1: 设置成功
*/
void SetVirCIIndicatorState(const UINT8 virCIid, UINT8 indicatorId, const UINT8 indicatorState);
/*
* 功能描述： 获取指定虚拟联锁ID指示器状态
* 参数说明：  const UINT8 virCIid     虚拟联锁ID
*            const UINT8 indicatorId, 指示器ID
* 返回值  ： 大于0 : 虚拟联锁ID指示器状态
*            等于0 : 失败
*/
UINT8 GetVirCIIndicatorState(const UINT8 virCIid, UINT8 indicatorId);
/*
* 功能描述： 获取指定虚拟联锁指示灯配置数组
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
* 返回值  ： 指定虚拟联锁指示灯数组
*/
IndicatorConfigDataStruct* GetVirCIIndicatorConfigDataBuff(const UINT8 virCIid);
/*
* 功能描述： 设置指定虚拟联锁指示灯配置数量
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*			const UINT8 indicatorNum 虚拟联锁指示灯配置数量
* 返回值  ： void
*/
void SetVirCIIndicatorConfigDataNum(const UINT8 virCIid, const UINT8 indicatorNum);
/*
* 功能描述： 获取指定虚拟联锁指示灯配置数量
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
* 返回值  ： 虚拟联锁指示灯配置数量
*/
UINT8 GetVirCIIndicatorConfigDataNum(const UINT8 virCIid);
/*
* 功能描述： 获取指定虚拟联锁指示灯配置继电器数量
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
* 返回值  ： 配置继电器数量
*/
UINT8 GetVirCIIndicConfDataRelaySum(const UINT8 virCIid, const UINT8 indicatorId);
/*
* 功能描述： 获取指定虚拟联锁指示灯配置继电器数组
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*			 const UINT8 indicatorId 指示灯ID
* 返回值  ： 配置继电器数组
*/
UINT16* GetVirCIIndicConfDataRelayBuf(const UINT8 virCIid, const UINT8 indicatorId);

/*
* 功能描述： 获取指定虚拟联锁指示灯配置开关
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*            const UINT8 indicatorId  指示灯ID
*
* 返回值  ： 指示灯配置开关状态
*/
UINT8 GetVirCIIndicConfDataAvalFlag(const UINT8 virCIid, const UINT8 indicatorId);

/*
* 功能描述： 获取指定虚拟联锁指示灯ID映射数组
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
* 返回值  ： 指示灯ID映射数组
*/
UINT8* GetVirCIlocalCiIndicatorIdBuf(const UINT8 virCIid);

/*
* 功能描述：	整理读入的指示灯ID映射数组
* 参数说明：	无
* 返回值  ：	CI_SUCCESS,整理成功
*				CI_ERROR,整理失败
*/
UINT8 InitVirCIlocalCiIndicatorIdBuf(void);

/*
* 功能描述： 获取指定虚拟联锁指示灯ID
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*            UINT8 index  索引
*
* 返回值  ： 指示灯ID
*/
UINT8 GetVirCIlocalCiIndicatorId(const UINT8 virCIid, UINT8 index);

/*
* 功能描述： 获取指定虚拟联锁指示灯类型
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*            const UINT8 indicatorId  指示灯ID
*
* 返回值  ： 配置继电器类型
*/
UINT8 GetVirCIIndicatorType(const UINT8 virCIid, const UINT8 indicatorId);

/*
* 功能描述： 设置指定虚拟联锁工作模式
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*             UINT8 mode  设置模式
*
* 返回值  ： void
*/
void SetVirCImode(UINT8 virCIid, UINT8 mode);

/*
* 功能描述： 获取指定虚拟联锁工作模式
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
*
* 返回值  ： 工作模式
*/
UINT8 GetVirCImode(UINT8 virCIid);

/*
* 功能描述： 设置指定虚拟联锁自动触发标志
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*             UINT8 setFlag   自动触发标志
*
* 返回值  ： void
*/
void SetVirCIautoTriggerFlag(UINT8 virCIid, UINT8 setFlag);
/*
* 功能描述： 获取指定虚拟联锁自动触发标志
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
*
* 返回值  ： 自动触发标志
*/
UINT8 GetVirCIautoTriggerFlag(UINT8 virCIid);

/*
* 功能描述： 设置指定虚拟联锁总复位标志
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*             UINT8 setFlag 总复位标志
*
* 返回值  ： void
*/
void SetVirCIZfwFlag(UINT8 virCIid, UINT8 setFlag);
/*
* 功能描述： 设置指定虚拟联锁总复位标志
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
*
* 返回值  ： 总复位标志
*/
UINT8 GetVirCIZfwFlag(UINT8 virCIid);

/*
* 功能描述： 设置指定虚拟联锁总复位开始周期
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*             UINT32 cyc 设置周期
*
* 返回值  ： void
*/
void SetVirCIZfwStartCycNum(UINT8 virCIid, UINT32 cyc);

/*
* 功能描述： 获取指定虚拟联锁总复位开始周期
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
*
* 返回值  ： 总复位开始周期
*/
UINT32 GetVirCIZfwStartCycNum(UINT8 virCIid);

/*
* 功能描述： 设置指定虚拟联锁总复位继电器有效周期
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*             UINT32 cyc 设置周期
*
* 返回值  ： void
*/
void SetVirCIZfwValidCycNum(UINT8 virCIid, UINT32 cyc);

/*
* 功能描述： 获取指定虚拟联锁总复位继电器有效周期
* 参数说明：
*            const UINT8 virCIid  虚拟联锁ID
*
*
* 返回值  ： 总复位开始周期
*/
UINT32 GetVirCIZfwValidCycNum(UINT8 virCIid);

/*
* 功能描述： 设置计轴总复位标志
* 参数说明： UINT8 setFlag设置标志
* 返回值  ：void
*/
void SetPhySecZfwManage(UINT8 virCIid, UINT8 setFlag);

/*
* 功能描述： 获取本联锁包含指示灯数目
* 参数说明： UINT8 setFlag设置标志
* 返回值  ：void
*/
UINT16 GetLocalCIBaojingdengNum(void);

/*
* 功能描述： 获取本联锁包含指示灯行ID
* 参数说明： UINT16 index 索引
* 返回值  ：void
*/
UINT16 GetLocalCIBaojingdengWId(UINT16 index);

/*
* 功能描述： 获取本联锁包含指示灯ID或类型
* 参数说明： UINT16 index 索引
* 返回值  指示灯ID或类型
*/
UINT8 GetLocalCIIndicatorIDOrType(UINT16 index);

/*
* 功能描述： 获取本联锁包含指示灯所属虚拟联锁
* 参数说明： UINT16 index 索引
* 返回值  ：虚拟联锁id
*/
UINT16 GetLocalCIBaojingdengBelongVir(UINT16 index);
/*
* 功能描述： 设置指定虚拟联锁无人折返闪灯状态
* 参数说明： UINT8 devId 指示灯设备ID，UINT8 virCIid 虚拟联锁ID,UINT8 state设置标志
* 返回值  ：void
*/
void SetVirCIautoRtnIndictFlashState(UINT8 devId, UINT8 virCIid, UINT8 state);
/*
* 功能描述： 获取指定虚拟联锁无人折返闪灯状态
* 参数说明：UINT8 devId 指示灯设备ID
*           UINT8 virCIid 虚拟联锁ID
* 返回值  ：虚拟联锁无人折返闪灯状态
*/
UINT8 GetVirCIautoRtnIndictFlashState(UINT8 devId, UINT8 virCIid);
/*
* 功能描述： 设置指定虚拟联锁无人折返稳灯状态
* 参数说明： UINT8 devId 指示灯设备ID，UINT8 virCIid 虚拟联锁ID,UINT8 state设置标志
* 返回值  ：void
*/
void SetVirCIautoRtnIndictSteadyState(UINT8 devId, UINT8 virCIid, UINT8 state);
/*
* 功能描述： 获取指定虚拟联锁无人折返稳灯状态
* 参数说明： UINT8 devId 指示灯设备ID
*            UINT8 virCIid 虚拟联锁ID
* 返回值  ： 联锁无人折返稳灯状态
*/
UINT8 GetVirCIautoRtnIndictSteadyState(UINT8 devId, UINT8 virCIid);
/*
* 功能描述： 设置指定虚拟联锁混线标志
* 参数说明：UINT8 virCIid 虚拟联锁ID,UINT8 setFlag 设置标志
* 返回值  ：void
*/
void SetVirCIZfwHunxianFlag(UINT8 virCIid, UINT8 setFlag);
/*
* 功能描述： 获取指定虚拟联锁混线标志
* 参数说明：UINT8 virCIid 虚拟联锁ID
* 返回值  ：混线标志
*/
UINT8 GetVirCIZfwHunxianFlag(UINT8 virCIid);
/*
* 功能描述： 获取指定虚拟联锁ID的报警灯设备ID
* 参数说明：  const UINT8 virCIid     虚拟联锁ID
*            const UINT8 indicatorId  报警灯ID
* 返回值  ： 大于0 : 虚拟联锁ID的报警灯设备ID
*            等于0 : 失败
*/
UINT8 GetVirCIIndicatorDevId(const UINT8 virCIid, UINT8 indicatorId);

/*
* 功能描述： 获取指定虚拟联锁是否属于本真实联锁管辖
* 参数说明： const UINT8 chVirCiId  虚拟的ID
* 返回值  ： CI_ERROR   虚拟联锁不属于本真实联锁管辖
*            CI_SUCCESS 虚拟联锁属于本真实联锁管辖
*cgh-20230529-修复YF0083-808
*/
UINT8 GetVirCIBelongLocalCI(const UINT8 chVirCiId);
/*
* 功能描述： 获取本虚拟联锁无人折返指示灯设备ID
* 参数说明： UINT8 virCIid 虚拟联锁ID
*            UINT8 index 索引
* 返回值  ：>0 本虚拟联锁指示灯设备ID
*			0 本虚拟联锁只有一个无人折返时索引为1返回零或者没有无人折返返回零
*/
UINT8 GetVirCiRtnIndictDeviceId(UINT8 virCIid, UINT8 index);
#ifdef __cplusplus
}
#endif
#endif


