/********************************************************
*                                                                                                            
* 文 件 名： ESBDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-20
* 作    者： 联锁组
* 功能描述： 紧急停车按钮数据管理头文件  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _ESB_DATA_MANAGE_H_
#define _ESB_DATA_MANAGE_H_


#include "ESBDefine.h"
#include "ESBConfigDataManage.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"


#ifdef __cplusplus
extern "C" {
#endif


/*紧急停车按钮数据结构体*/
typedef struct S_EsbDataStruct
{
	UINT16 EsbId;         /*紧急停车按钮ID (初始化字段)*/
	UINT8 EsbState;      /*紧急停车按钮状态 (动态字段)-ESS与PEP的融合状态*/
	UINT8 EssState;      /*Ess按钮状态 (动态字段)--虚拟属性才具备*/
	UINT8 EsbActualState;	/*ESB停车按钮状态--ATS抬起/按下状态（虚拟属性才具备）*/
	UINT8 CutStatus;	 /*紧急停车按钮旁路状态*/
	UINT8 EsbRelateRelayDriveState; /*紧急停车闪灯、稳灯和蜂鸣器继电器驱动状态机*/
	UINT8 EssSteadyState;	/*ESS稳灯状态（用于虚拟联锁向ATS反馈）--0x55 需要设置稳灯；0xaa不需要设置稳灯*/
	UINT8 EssFlashState;	/*ESS闪灯状态（用于虚拟联锁向ATS反馈）--0x55 需要设置闪灯；0xaa不需要设置闪灯*/
	UINT8 EsbErrorFlag;      /*自复式紧急停车按钮故障标志，0x55未故障，0xaa故障*/
	UINT8 EsbRelayDownState;  /*紧急关闭按钮采集继电器落下状态，0x55：正常采集落下，0xaa：通信异常落下*/
	UINT8 CancelEsbErrorFlag;      /*自复式取消紧急停车按钮故障标志，0x55未故障，0xaa故障*/
	UINT32 EsbPressCycNum;   /*紧急关闭按钮按下周期*/
	UINT32 CancelEsbPressCycNum;   /*取消紧急关闭按钮正常按下周期*/
	UINT32 CancelEsbErrTriggerPressCycNum;   /*取消紧急关闭按钮误触发按下周期*/
	UINT8 CancelEsbValidFlag;  /*取消紧急关闭按钮有效标志，0x55无效，0xaa有效*/
	UINT8 CancelEsbRelayDownState;  /*取消紧急关闭按钮采集继电器落下状态，0x55：正常采集落下，0xaa：通信异常落下*/
	UINT32 EsbCutPressCycNum;   /*紧急关闭旁路按钮正常按下周期*/
	UINT32 EsbCutErrTriggerPressCycNum;   /*紧急关闭旁路按钮误触发按下周期*/
	UINT8 EsbCutErrorFlag;      /*紧急关闭旁路按钮故障标志，0x55-未故障，0xaa-故障*/
	UINT8 EsbCutRelayDownState;  /*紧急关闭旁路按钮采集继电器落下状态，0x55-正常采集落下，0xaa-通信异常落下*/
} EsbDataStruct;

/*******************************全局变量声明*******************************/
extern EsbDataStruct EsbDataStru[ESB_SUM_MAX];   /*定义ESB数据结构体*/


/*
* 功能描述： 获取指定ESB数据
* 参数说明：    
* 返回值  ： 
            EsbDataStruct *  
*/
EsbDataStruct *GetEsbData(void);

/*
* 功能描述： 获取指定ID紧急停车按钮状态
* 参数说明： const UINT16 esbId, 紧急停车按钮ID    
* 返回值  ： 0: 获取数据失败
*			>0: 紧急停车按钮状态      
*/
UINT8 GetEsbState(const UINT16 esbId);

/*
* 功能描述： 设置指定ID紧急停车按钮状态
* 参数说明： const UINT16 esbId, 紧急按钮ID
*			 const UINT8 esbState, 紧急按钮状态   
* 返回值  ： 0: 设置失败
*			 1: 设置成功  
*/
UINT8 SetEsbState(const UINT16 esbId, const UINT8 esbState);

/*
* 功能描述： 获取指定ID 紧急停车按钮旁路状态
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: spks按钮状态
*/
UINT8 GetEsbCutState(const UINT16 esbId);

/*
* 功能描述： 设置指定ID 旁路状态
* 参数说明： const UINT16 esbId, 紧急停车按钮
*			 const UINT8 esbCutState, 旁路状态
* 返回值  ： 无
*			  
*/
void SetEsbCutState(const UINT16 esbId, const UINT8 esbCutState);

/*
* 功能描述： ESB状态初始化
* 参数说明： 无
* 返回值  ： 0: 设置失败
*			 1: 设置成功
*/
UINT8 EsbDataManageInit(void);

/*
* 功能描述： 设置指定ESB ID相关继电器驱动处理状态机
* 参数说明： const UINT16 esbId, 紧急停车按钮
*			 const UINT8 state, 状态机
* 返回值  ： 无
* cgh-合并CID-2349-1：
*/
void SetEsbRelateRelayDriveProState(const UINT16 esbId, const UINT8 state);

/*
* 功能描述： 获取指定ESB ID相关继电器驱动处理状态机
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: esb相关继电器驱动处理状态机
* cgh-合并CID-2349-1：
*/
UINT8 GetEsbRelateRelayDriveProState(const UINT16 esbId);

/*
* 功能描述： 设置指定ESB ID对应的ESS稳灯状态
* 参数说明： const UINT16 esbId, 紧急停车按钮
*			 const UINT8 state, 状态机
* 返回值  ： 无
* cgh-合并CID-2349-1：
*/
void SetEsbRelateEssSteadyState(const UINT16 esbId, const UINT8 state);
/*
* 功能描述： 获取指定ESB ID对应的ESS稳灯状态
* 参数说明： const UINT16 esbId, 紧急停车按钮
* 返回值  ： 无
* 备注：cgh-合并CID-2349-1：
*/
UINT8 GetEsbRelateEssSteadyState(const UINT16 esbId);

/*
* 功能描述： 设置指定ESB ID对应的ESS闪灯状态
* 参数说明： const UINT16 esbId, 紧急停车按钮
*			 const UINT8 state, 状态机
* 返回值  ： 无
* 备注：cgh-合并CID-2349-1：
*/
void SetEsbRelateEssFlashState(const UINT16 esbId, const UINT8 state);

/*
* 功能描述： 获取指定ESB ID对应的ESS闪灯状态
* 参数说明： const UINT16 esbId, 紧急停车按钮
* 返回值  ： 无
* 备注：cgh-合并CID-2349-1：
*/
UINT8 GetEsbRelateEssFlashState(const UINT16 esbId);
/*
* 功能描述： 设置指定ID紧急停车按钮实际状态（根据ATS按钮状态设置-虚拟属性具备）
* 参数说明： const UINT16 esbId, 紧急按钮ID
*			 const UINT8 esbState, 紧急按钮状态
* 返回值  ： 0: 设置失败
*			 1: 设置成功
* cgh-合并CID-2349-1：
*
*/
void SetEsbAutualState(const UINT16 esbId, const UINT8 EsbState);

/*
* 功能描述： 获取指定ID紧急停车ESB按钮状态（根据ATS按钮状态设置-虚拟属性具备）
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: ESS按钮状态
*备注：cgh-合并CID-2349-1：
*/
UINT8 GetEsbAutualState(const UINT16 esbId);


/*
* 功能描述： 获取指定ID紧急停车ESS按钮状态
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: ESS按钮状态
*备注：cgh-合并CID-2349-1：
*/
UINT8 GetEssState(const UINT16 esbId);

/*
* 功能描述： 设置指定IDESS按钮状态
* 参数说明： const UINT16 esbId, 紧急按钮ID
*			 const UINT8 EssState, ESS按钮状态
* 返回值  ： 0: 设置失败
*			 1: 设置成功
*备注：cgh-合并CID-2349-1：
*/
void SetEssState(const UINT16 esbId, const UINT8 EssState);

/*
* 功能描述： 获取指定ID自复式取消紧急停车按钮故障标志
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: 取消紧停按钮故障标志
*/
UINT8 GetCancelEsbErrFlag(const UINT16 esbId);

/*
* 功能描述：设置指定ID自复式取消紧急停车按钮故障标志
* 参数说明：const UINT16 esbId, 紧急停车按钮ID
*			const UINT8 cancelEsbErrFlag, 取消紧停按钮故障标志
* 返回值：无
*/
void SetCancelEsbErrFlag(const UINT16 esbId, const UINT8 cancelEsbErrFlag);

/*
* 功能描述： 设置紧急关闭按钮按下周期
* 输入参数： const UINT16 esbId  Esb ID
*            const UINT32 startCycNum 周期号
* 输出参数：无
* 返回值  ：无
*/
void SetEsbPressCycNum(const UINT16 esbId, const UINT32 startCycNum);

/*
* 功能描述： 获取紧急关闭按钮按下周期
* 输入参数： const UINT16 esbId  Esb ID
* 输出参数： 无
* 返回值  ： ESB按下周期
*/
UINT32 GetEsbPressCycNum(const UINT16 esbId);

/*
* 功能描述： 设置取消紧急关闭按钮按下周期
* 输入参数： const UINT16 esbId  Esb ID
*            const UINT32 startCycNum 周期号
* 输出参数：无
* 返回值  ：无
*/
void SetCancelEsbPressCycNum(const UINT16 esbId, const UINT32 startCycNum);

/*
* 功能描述： 获取取消紧急关闭按钮按下周期
* 输入参数： const UINT16 esbId  Esb ID
* 输出参数： 无
* 返回值  ： 取消紧急关闭按钮按下周期
*/
UINT32 GetCancelEsbPressCycNum(const UINT16 esbId);

/*
* 功能描述： 获取指定ID自复式取消紧急停车按钮有效标志
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取失败
*			>0: 取消紧急停车按钮有效标志
*/
UINT8 GetCancelEsbValidFlag(const UINT16 esbId);

/*
* 功能描述：设置指定ID自复式取消紧急停车按钮有效标志
* 参数说明：const UINT16 esbId, 紧急停车按钮ID
*			const UINT8 cancelEsbValidFlag, 取消紧停按钮有效标志
* 返回值：无
*/
void SetCancelEsbValidFlag(const UINT16 esbId, const UINT8 cancelEsbValidFlag);

/*
* 功能描述： 获取指定ID自复式紧急停车按钮故障标志
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: 紧停按钮故障标志
*/
UINT8 GetEsbErrFlag(const UINT16 esbId);

/*
* 功能描述：设置指定ID自复式紧急停车按钮故障标志
* 参数说明：const UINT16 esbId, 紧急停车按钮ID
*			const UINT8 cancelEsbErrFlag, 紧停按钮故障标志
* 返回值：无
*/
void SetEsbErrFlag(const UINT16 esbId, const UINT8 esbErrFlag);

/*
* 功能描述：设置取消紧急关闭按钮误触发按下周期
* 输入参数：const UINT16 esbId  Esb ID
*           const UINT32 startCycNum 周期号
* 输出参数：无
* 返回值  ：无
* Created By LQ 2024.04.10
*/
void SetCancelEsbErrTrigPressCycNum(const UINT16 esbId, const UINT32 startCycNum);

/*
* 功能描述： 获取取消紧急关闭按钮误触发按下周期
* 输入参数： const UINT16 esbId  Esb ID
* 输出参数： 无
* 返回值  ： 取消紧急关闭按钮误触发按下周期
* Created By LQ 2024.04.10
*/
UINT32 GetCancelEsbErrTrigPressCycNum(const UINT16 esbId);

/*
* 功能描述：设置取消紧急停车按钮采集继电器落下状态
* 参数说明：const UINT16 esbId 紧急停车按钮ID
*			const UINT8 cRelayDownState 继电器落下状态
* 返回值：无
* Created By LQ 2024.04.10
*/
void SetCancelEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState);

/*
* 功能描述： 获取取消紧急停车按钮采集继电器落下状态
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			 0x55: 正常落下
*            0xaa: 通信异常落下
* Created By LQ 2024.04.10
*/
UINT8 GetCancelEsbRelayDownState(const UINT16 esbId);

/*
* 功能描述：设置紧急关闭旁路按钮按下周期
* 输入参数：const UINT16 esbId  Esb ID
*           const UINT32 startCycNum 周期号
* 输出参数：无
* 返 回 值：无
* Cretaed By LQ 2025.03.28
*/
void SetEsbCutPressCycNum(const UINT16 esbId, const UINT32 startCycNum);

/*
* 功能描述：获取紧急关闭旁路按钮按下周期
* 输入参数：const UINT16 esbId  Esb ID
* 输出参数：无
* 返 回 值：紧急关闭旁路按钮按下周期
* Cretaed By LQ 2025.03.28
*/
UINT32 GetEsbCutPressCycNum(const UINT16 esbId);

/*
* 功能描述：设置紧急关闭旁路按钮误触发按下周期
* 输入参数：const UINT16 esbId  Esb ID
*           const UINT32 startCycNum 周期号
* 输出参数：无
* 返 回 值：无
* Cretaed By LQ 2025.03.28
*/
void SetEsbCutErrTrigPressCycNum(const UINT16 esbId, const UINT32 startCycNum);

/*
* 功能描述：获取紧急关闭旁路按钮误触发按下周期
* 输入参数：const UINT16 esbId  Esb ID
* 输出参数：无
* 返 回 值：紧急关闭旁路按钮误触发按下周期
* Cretaed By LQ 2025.03.28
*/
UINT32 GetEsbCutErrTrigPressCycNum(const UINT16 esbId);

/*
* 功能描述：设置紧急关闭旁路按钮采集继电器落下状态
* 参数说明：const UINT16 esbId 紧急停车按钮ID
*			const UINT8 cRelayDownState 继电器落下状态
* 返回值：无
* Created By LQ 2025.03.28
*/
void SetEsbCutRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState);

/*
* 功能描述： 获取紧急关闭旁路按钮采集继电器落下状态
* 参数说明： const UINT16 esbId 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			 0x55: 正常落下
*            0xaa: 通信异常落下
* Created By LQ 2025.03.28
*/
UINT8 GetEsbCutRelayDownState(const UINT16 esbId);

/*
* 功能描述：设置指定ID紧急关闭旁路按钮故障标志
* 参数说明：const UINT16 esbId, 紧急关闭按钮ID
*			const UINT8 cEsbCutErrFlag 紧急关闭旁路按钮故障标志
* 返回值：无
*/
void SetEsbCutErrFlag(const UINT16 esbId, const UINT8 cEsbCutErrFlag);

/*
* 功能描述： 获取指定ID紧急关闭旁路按钮故障标志
* 参数说明： const UINT16 esbId, 紧急关闭按钮ID
* 返回值  ： 0: 获取数据失败
*			>0: 紧停旁路按钮故障标志
*/
UINT8 GetEsbCutErrFlag(const UINT16 esbId);

/*
* 功能描述：设置紧急停车按钮采集继电器落下状态
* 参数说明：const UINT16 esbId 紧急停车按钮ID
*			const UINT8 cRelayDownState 继电器落下状态
* 返回值：无
* Created By LQ 2025.04.01
*/
void SetEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState);

/*
* 功能描述： 获取紧急停车按钮采集继电器落下状态
* 参数说明： const UINT16 esbId, 紧急停车按钮ID
* 返回值  ： 0: 获取数据失败
*			 0x55: 正常落下
*            0xaa: 通信异常落下
* Created By LQ 2025.04.01
*/
UINT8 GetEsbRelayDownState(const UINT16 esbId);

#ifdef __cplusplus
}
#endif

#endif
