/********************************************************
*                                                                                                            
* 文 件 名： ParsePackZcData.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-28
* 作    者： 联锁组
* 功能描述： Zc数据解析组包头文件  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _PARSE_PACK_ZC_DATA_H_
#define _PARSE_PACK_ZC_DATA_H_



#include "CommonTypes.h"
#include "Convert.h"
#include "ParsePackDefine.h"
#include "ParsePackCommon.h"
#include "../Mask/MaskDefine.h"
#include "../Mask/MaskConfigDataManage.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../ParsePack/ParsePackTmcData.h"


#define CI_ZC_INTERFACE_INFOTYPE	((UINT16)0x0106)	/*互联互通CI_ZC接口信息类型*/
#define CI_ZC_PRTCL_VER				((UINT16)0x65)		/*CI_ZC协议版本号，根据《IFAO-3048-ZC-CI接口说明书》修改*/
#define ZC_TO_TIOC_MASK_MSG			((UINT16)0x0201u)	/*ZC发送TIOC码位信息类型*/
#define TIOC_TO_ZC_MASK_MSG			((UINT16)0x0202u)	/*TIOC发送ZC码位信息类型*/
#define ZC_TO_TIOC_TSR_MSG			((UINT16)0x0203u)	/*ZC发送TIOC临时限速信息类型*/
#define ZC_TO_TIOC_WLB_MSG			((UINT16)0x0204u)	/*ZC发送TIOC紧急制动信息类型*/
#define ZC_TO_TIOC_SNOW_MSG			((UINT16)0x0205u)	/*ZC发送TIOC雨雪模式信息类型*/
#define ZC_TO_TIOC_ITELINECUT_MSG	((UINT16)0x0206U)	/*ZC发送TIOC的全线ITE切除状态信息类型*/
#define ZC_TO_RC_CBTC_CROSS_MSG		((UINT16)0x0207U)	/*ZC发送给RC的主控CBTC列车跨压信息*/
#define RC_TO_ZC_TACS_CROSS_MSG		((UINT16)0x0208u)	/*RC发送给ZC的主控TACS列车跨压信息*/
#define ZC_TSR_VALID				((UINT8)0x55U)		/*ZC发送临时限速有效*/

#ifdef __cplusplus
extern "C" {
#endif

/*ZC发送的紧急制动信息*/
typedef struct S_EbInputInfoStruct
{
	UINT8 cWlbValidFlag;	/*全线紧急有效标志 aa有效 */
	UINT8 cSecEbSum; /*区间紧急制动数量*/
	UINT16 wEbPhySecId[ZC_TO_CI_EB_MAX]; /*区间紧急制动区段数组*/
} EbInputInfoStruct;

/*进路动态数据结构体*/
typedef struct S_ZcToCiDataStruct
{
	UINT8 ZcId; /*Zc ID*/
	UINT16 ZcMaskValueBufLen; /*ZC到CI码位值Buf长度*/
	UINT8 ZcMaskValueBuf[ZC_TO_CI_MASK_SUM_MAX]; /*ZC到CI码位值Buf*/

	TsrInputInfoStruct tsrInputInfoStru;/* 临时限速信息 */
	EbInputInfoStruct esbInputInfoStruct; /*紧急制动信息*/
	UINT8 cSnowValidFlag;				/* 全线雨雪模式命令有效标志 */
	UINT8 cAreaSnowPlatFormNum;  /*区间雨雪站台数量*/
	AreaSnowInfoStruct szAreaSnowInfo[LOCAL_AREA_SNOW_SUM_MAX];  /*区间雨雪数组*/
	UINT8 chLocalSnowValidFlag;				/* 本地雨雪模式命令有效标志 */
	UINT8 cIteLineCutState;				/* ITE全线切除状态 */
	UINT8 cAreaIteCutNum;  /*区间ITE切除数量*/
	UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX];  /*区间ITE切除ID数组*/
	UINT8 cRecvCbtcCrossFrameTag;	/*接收到主控CBTC列车跨压信息帧标志*/
	UINT8 wCbtcCrossNum;			/*CBTC主控列车跨压数量*/
	UINT16 wCbtcCrossSignalId[ALL_CBTC_CROSS_SUM_MAX];	/*CBTC主控列车跨压信号机ID*/
	UINT8 wCbtcCrossTrainId[ALL_CBTC_CROSS_SUM_MAX];	/*CBTC主控列车跨压列车ID*/
} ZcToCiDataStruct;

/*ZC发送的信号机动态数据结构体*/
typedef struct S_SignalDataStructZC
{
	UINT16 SignalId;      											/*信号机ID (配置字段)*/
	UINT8 LightExtinctState;   /*信号机亮灭状态ZC(0x55：灭灯，0xaa：亮灯)*/
	UINT8 SignalCrossState;		/*通信车跨压通过信号机状态ZC(0x55：未跨压，0xaa：跨压)*/
}SignalDataStructZC;

/*ZC发送的逻辑区段动态数据结构体*/
typedef struct S_LogicSectionDataStructZC
{
	UINT16 LogicSectionId;		/*逻辑区段ID (初始化字段)*/
	UINT8 LinShiXianSuSetFlag;	/*逻辑区段临时限速设置状态ZC(0x55-已未设置临时限速，0xAA-已设置临时限速，0xFF-临时限速无效)*/
	UINT8 OccupyState;		 /*逻辑区段初始占用状态ZC(0x55-未占用，0xAA-非通信车占用，0xBB-通信车占用)*/
	UINT8 TXOccupyState;     /*逻辑区段通信车占用状态ZC(0x55-无车或非通信车占用，0xAA-通信车占用)*/
}LogicSectionDataStructZC;

/*ZC发送的计轴区段动态数据结构体*/
typedef struct S_AxisSectionDataStructZC
{
	UINT16 AxisSectionId;      		/*计轴区段ID (初始化字段)*/
	UINT8 AxisArbState;             /*计轴ARB状态(0x55-未ARB，0xaa-ARB)*/
}AxisSectionDataStructZC;

/*ZC发送的物理区段动态数据结构体*/
typedef struct S_PhysicalSectionDataStructZC
{
	UINT16 PhysicalSectionId;          /*物理区段ID (初始化字段)*/
	UINT8 StopSteadyFlag;             /*区段停稳信息ZC(0x55-未停稳，0xAA-停稳)*/
}PhysicalSectionDataStructZC;

/*ZC发送的进路动态数据结构体*/
typedef struct S_RouteDataStructZC
{
	UINT16 RouteId;															/*进路ID (初始化字段)*/
	UINT8 StopensureFlag;												    /*停车保证标志ZC(0x55：已设置，0xAA：未设置) */
}RouteDataStructZC;

/*ZC发送的CBTC主控列车跨压结构体*/
typedef struct S_CbtcCrossStructZC
{
	UINT16 wSignalId;				/*跨压信号机ID*/
	UINT8 wTrainId;					/*跨压列车ID*/
}CbtcCrossStructZC;

/*存储ZC发送的动态数据结构体*/
typedef struct S_ZcToCiDynamicDataStruct
{
	UINT8 cSnowValidFlagZc;  /* 全线雨雪模式命令有效标志ZC */
	UINT8 cAreaSnowPlatFormNumZc;  /*区间雨雪站台数量ZC*/
	AreaSnowInfoStruct szAreaSnowInfoZc[LOCAL_AREA_SNOW_SUM_MAX];  /*区间雨雪数组ZC*/
	UINT8 chLocalSnowValidFlagZc;				/* 本地雨雪模式命令有效标志ZC */
	SignalDataStructZC szSignalDataStruZc[SIGNAL_SUM_MAX]; /*信号机数据结构体ZC（按顺序存储数据）*/
	LogicSectionDataStructZC LogicSectionDataStruZc[LOGIC_SECTION_SUM_MAX];   /*定义逻辑区段数据结构体ZC（按顺序存储数据）*/
	AxisSectionDataStructZC AxisSectionDataStruZc[AXIS_SECTION_SUM_MAX];   /*定义计轴区段数据结构体ZC（按顺序存储数据）*/
	PhysicalSectionDataStructZC PhysicalSectionDataStruZc[PHYSICAL_SECTION_SUM_MAX];    /*定义物理区段数据结构体ZC（按顺序存储数据）*/
	RouteDataStructZC szRouteDataStruZc[ROUTE_SUM_MAX];     /*进路数据结构体ZC（按顺序存储数据）*/
} ZcToCiDynamicDataStruct;

/*通信车位置信息*/
typedef struct S_ComTrainPosDataStruct
{
    UINT8 TrainId; /*列车 ID*/
    UINT8 OcuupySectionSum; /*占压区段数量*/
    UINT16 OcuupySectionIdBuf[TRAIN_OCCUPY_SECTION_MAX]; /*占压区段ID数组*/
} ComTrainPosDataStruct;


#ifndef SFP_PROTOCOL

extern ComTrainPosDataStruct ComTrainPosDataStru[ZC_TO_CI_TRAIN_MAX];
extern UINT16 ComTrainSum;
extern UINT8 lineIdentity;
extern ZcToCiDynamicDataStruct gZcToCiDymDataStru;  /*ZC动态数据结构体*/
extern UINT8 gCbtcCrossNumZc;
extern CbtcCrossStructZC gCbtcCrossStructZc[ALL_CBTC_CROSS_SUM_MAX];

#endif

/*
* 功能描述： 解析ZC单帧数据
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 dataLength, 数据长度
*            const UINT8 systemId, 源设备ID
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功      
*/
UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId);

/*
* 功能描述： 组ZC数据
* 参数说明： UINT8 deviceId,设备id
* 返回值  ： 0:组数据失败
*			 1:组数据成功      
*/
UINT8 PackCiToZcData( UINT8 deviceId);

/*
* 功能描述： 获取ZC码位值Buf
* 参数说明： void    
* 返回值  ： NULL: 获取失败
*           !NULL: Buf指针      
*/
UINT8* GetZcMaskValueBuf(void);

/*
* 功能描述： 获取ZC码位值Buf长度
* 参数说明： void    
* 返回值  ： 0: 获取失败
*           >0: Buf长度   
*/
UINT16 GetZcMaskValueBufLen(void);

/*
* 功能描述： 获取ZC码位中的ZCID
* 参数说明： void    
* 返回值  ： 0: 获取失败
*           >0: ZCID  
*/
UINT8 GetZcMaskZcId(void);

/*
* 功能描述： 获取列车数量
* 参数说明： void    
* 返回值  ： 列车数量 
*/
UINT16 GetComTrainSum(void);

/*
* 功能描述： 获取列车占用信息
* 参数说明： void    
* 返回值  ： 列车数量 
*/
ComTrainPosDataStruct* GetComTrainPosDataStru(void);

/*
* 功能描述： 删除该逻辑区段的CT占用信息
* 参数说明： const UINT16 logSecId, 逻辑区段ID
* 返回值  ： void
*/
void DeleteLogSecCTInfo(const UINT16 logSecId);

/*
* 功能描述： 清除ZC数据
* 参数说明： void
* 返回值  ： void
*/
void ClearZcData(void);

/*
* 功能描述： 解析ZC到CI码位数据
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 dataLength, 数据长度
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功
*/
UINT8 ParseMaskData(UINT8* dataBuf, UINT16 dataLen);

/*
* 功能描述： 解析ZC到CI临时限速数据
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 dataLength, 数据长度
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功
*/
UINT8 ParseZcTsrData(UINT8* dataBuf, UINT16 dataLen);

/*
* 功能描述： 解析ZC到CI紧急制动限速数据
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 dataLength, 数据长度
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功
*/
UINT8 ParseZcEbData(UINT8* dataBuf, UINT16 dataLen);

/*
* 功能描述： 解析ZC到CI雨雪数据
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 dataLength, 数据长度
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功
*/
UINT8 ParseZcSnowData(UINT8* dataBuf, UINT16 dataLen);

/*
* 功能描述： 获取ZC信息数据结构体
* 参数说明： void
* 返回值  ： ZC信息结构体指针
*/
ZcToCiDataStruct* GetZcToCiDataStru(void);

/*
* 功能描述：解析ZC到CI的ITE切除状态数据
* 参数说明：INT8* dataBuf 数据缓冲区
*           UINT16 dataLength 数据长度
* 返 回 值：CI_ERROR 0 数据解析失败
*			CI_SUCCESS 1 数据解析成功
* Created By LQ 2024.07.12
*/
UINT8 ParseZcIteCutData(UINT8* dataBuf, UINT16 dataLen);

/**
* @brief 获取ZC发送的进路停车保证标志
* @param[in] UINT16 wDeviceId 设备ID
* @return 进路停车保证标志
* @note by cgh 20251106
*/
UINT8 GetRouteStopensureFlagZc(UINT16 wDeviceId);

/*
* 功能描述：设置ZC发送的进路停车保证标志
* 参数说明：const UINT16 routeId, 进路ID
*           const UINT8 stopensureFlag 停车保证标志
* 返 回 值：无
* Created By LQ 2025.11.06
*/
void SetRouteStopensureFlagZc(const UINT16 routeId, const UINT8 stopensureFlag);

/**
* @brief 获取ZC发送的信号机亮灭状态
* @param[in] UINT16 wDeviceId 设备ID
* @return 信号机亮灭状态
* @note by cgh 20251106
*/
UINT8 GetSignalLightExtinctStateZc(UINT16 wDeviceId);

/*
* 功能描述：设置ZC发送的信号机亮灭状态
* 参数说明：const UINT16 signalId, 信号机ID
*			const UINT8 ligheCloseState, 亮灭状态
* 返 回 值：无
* Created By LQ 2025.11.06
*/
void SetSignalLightExtinctStateZc(const UINT16 signalId, const UINT8 lightExtinctState);

/*
* 功能描述：获取ZC发送的通信车跨压通过信号机状态
* 参数说明：const UINT16 signalId, 信号机ID
* 返 回 值：0 获取失败
*			0x55 未跨压
*           0xaa 跨压
* Created By LQ 2025.11.06
*/
UINT8 GetSignalCrossStateZc(const UINT16 signalId);

/*
* 功能描述：设置ZC发送的通信车跨压通过信号机状态
* 参数说明：const UINT16 signalId, 信号机ID
* 返 回 值：无
* Created By LQ 2025.11.06
*/
void SetSignalCrossStateZc(const UINT16 signalId, const UINT8 signalCrossState);

/*
* 功能描述：获取ZC发送的逻辑区段临时限速设置状态
* 参数说明：const UINT16 logSectionId, 逻辑区段ID
* 返 回 值：0 获取数据失败
*			0x55 已未设置临时限速
*           0xAA 已设置临时限速
*           0xFF 临时限速无效
* Created By LQ 2025.11.06
*/
UINT8 GetLogSecLinShiXianSuStateZc(const UINT16 logSectionId);

/*
* 功能描述：设置ZC发送的逻辑区段临时限速设置状态
* 参数说明：const UINT16 logSectionId, 逻辑区段ID
*			const UINT8 linShiXianSuSetState, 临时限速设置状态
* 返 回 值：无
* Created By LQ 2025.11.06
*/
void SetLogSecLinShiXianSuStateZc(const UINT16 logSectionId, const UINT8 linShiXianSuSetState);

/*
* 功能描述：获取ZC发送的逻辑区段初始占用状态
* 参数说明：const UINT16 logSectionId, 逻辑区段ID
* 返 回 值：0 获取失败
*			0x55 未占用
*           0xAA 非通信车占用
*           0xBB 通信车占用
* Created By LQ 2025.11.06
*/
UINT8 GetLogSecOccupyStateZc(const UINT16 logSectionId);

/*
* 功能描述：设置ZC发送的逻辑区段初始占用状态
* 参数说明：const UINT16 logSectionId, 逻辑区段ID
*			const UINT8 curOccupyState, 当前占用状态
* 返 回 值：无
* Created By LQ 2025.11.06
*/
void SetLogSecOccupyStateZc(const UINT16 logSectionId, const UINT8 curOccupyState);

/*
* 功能描述：获取ZC发送的逻辑区段通信车占用状态
* 参数说明：const UINT16 logSectionId, 逻辑区段ID
* 返 回 值：0 获取失败
*			0x55 无车或非通信车占用
*           0xAA 通信车占用
* Created By LQ 2025.11.06
*/
UINT8 GetLogSecTXOccupyStateZc(const UINT16 logSectionId);

/*
* 功能描述：设置ZC发送的逻辑区段通信车占用状态
* 参数说明：const UINT16 logSectionId, 逻辑区段ID
*			const UINT8 curOccupyState, 当前占用状态
* 返 回 值：无
* Created By LQ 2025.11.06
*/
void SetLogSecTXOccupyStateZc(const UINT16 logSectionId, const UINT8 curOccupyState);

/*
* 功能描述：获取ZC发送的计轴区段ARB状态
* 参数说明：const UINT16 axisSectionId, 计轴区段ID
* 返 回 值：0 获取数据失败
*			0x55 未ARB状态
*           0xaa ARB
* Created By LQ 2025.11.07
*/
UINT8 GetAxisSecArbStateZc(const UINT16 axisSectionId);

/*
* 功能描述：设置ZC发送的计轴区段ARB状态
* 参数说明：const UINT16 axisSectionId, 计轴区段ID
*			const UINT8 arbState, ARB状态
* 返 回 值：无
* Created By LQ 2025.11.07
*/
void SetAxisSecArbStateZc(const UINT16 axisSectionId, const UINT8 arbState);

/*
* 功能描述：获取ZC发送的物理区段停稳状态
* 参数说明：const UINT16 phySectionId, 区段ID
* 返 回 值：0 获取数据失败
*			0x55 未停稳
*           0xAA 停稳
* Created By LQ 2025.11.07
*/
UINT8 GetPhySecStopSteadyZcOrVobc(const UINT16 phySectionId);

/*
* 功能描述：设置ZC发送的物理区段停稳状态
* 参数说明：const UINT16 phySectionId, 物理区段ID
*			const UINT8 stopSteadyState, 停稳状态
* 返 回 值：无
* Created By LQ 2025.11.07
*/
void SetPhySecStopSteadyZcOrVobc(const UINT16 phySectionId, const UINT8 stopSteadyState);

/*
* 功能描述：获取ZC发送的全线雨雪模式
* 参数说明：void
* 返 回 值：0x55 有效
*           0xAA 无效
* Created By LQ 2025.11.10
*/
UINT8 GetAllSnowModelZc(void);

/*
* 功能描述：设置ZC发送的全线雨雪模式
* 参数说明：UINT8 setmodle 全线雨雪模式
* 返 回 值：void
* Created By LQ 2025.11.10
*/
void SetAllSnowModelZc(UINT8 setmodle);

/*
* 功能描述：获取ZC发送的本地区间雨雪站台数量
* 参数说明：无
* 返 回 值：区间雨雪站台数量
* Created By LQ 2025.11.10
*/
UINT8 GetLocalAreaSnowNumZc(void);

/*
* 功能描述：获取ZC发送的本地区间雨雪信息
* 参数说明：无
* 返 回 值：区间雨雪信息
* Created By LQ 2025.11.10
*/
AreaSnowInfoStruct* GetLocalAreaSnowZc(void);

/*
* 功能描述：设置ZC发送的本地区间雨雪信息
* 参数说明：const UINT8 cAreaSnowNum 区间雨雪数量
*			const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] 区间雨雪数组
* 返 回 值：无
* Created By LQ 2025.11.10
*/
void SetLocalAreaSnowInfoZc(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]);

/*
* 功能描述：获取ZC发送的本地雨雪模式命令
* 参数说明：无
* 返 回 值：0x55 无效
*           0xAA 有效
* Created By LQ 2025.11.10
*/
UINT8 GetLocalSnowModelZc(void);

/*
* 功能描述：设置ZC发送的本地雨雪模式命令
* 参数说明：UINT8 setmodle 本地雨雪模式
* 返 回 值：无
* Created By LQ 2025.11.10
*/
void SetLocalSnowModelZc(UINT8 setmodle);

/*
* 功能描述：获取ZC发送的CBTC主控列车跨压数量
* 参数说明：无
* 返 回 值：跨压数量
* Created By wyd 2026.3.27
*/
UINT8 GetCbtcCrossNumZc(void);

/*
* 功能描述：获取ZC发送的CBTC主控列车跨压信息
* 参数说明：无
* 返 回 值：跨压信息
* Created By wyd 2026.3.27
*/
CbtcCrossStructZC *GetCbtcCrossStructZc(void);

/*
* 功能描述：设置ZC发送CBTC主控列车跨压信息
* 参数说明：UINT8 wCrossNum 跨压数量
*			UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX] 跨压信号机ID
*			UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX] 跨压列车ID
* 返 回 值：无
* 注意事项：RC接收CI->RC同步过来的该信息时，是直接赋值，没调用该接口函数
* Created By wyd 2026.3.26
*/
void SetCbtcCrossInfo(UINT8 wCrossNum, UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX],
	UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX]);

#ifdef __cplusplus
}
#endif

#endif
