/********************************************************
*                                                                                                            
* 文 件 名： 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_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数组*/
} ZcToCiDataStruct;

/*通信车位置信息*/
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;


#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);

#ifdef __cplusplus
}
#endif

#endif
