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

#ifndef _PARSE_PACK_ITE_DATA_H_
#define _PARSE_PACK_ITE_DATA_H_


#include "CommonTypes.h"
#include "Convert.h"
#include "ParsePackDefine.h"
#include "ParsePackCommon.h"
#include "../HLHTMsgHead/HLHTCommonDataPacketHead.h"
#include "../HLHTMsgHead/HLHTHeadContexManage.h"
#include "../QueryFiles/dquCIInterFace.h"


#define ITE_TO_CI_DATA_LEN_MAX		  ((UINT16)1000U)        /*ITE到CI组包数据最大值*/
#define ITE_CI_INTERFACE_INFOTYPE	  ((UINT16)0x010AU)     /*ITE->CI接口*/

#define ITE_CI_INFO_TYPE_POSITION	 ((UINT16)0x0201U)		/*ITE->CI位置信息帧*/
#define CI_ITE_INFO_TYPE_HEART		 ((UINT16)0x0202U)		/*CI->ITE心跳帧*/
#define CI_ITE_PRTCL_VER		     CI_IVOC_PRTCL_VER		/*CI_ITE协议版本号*/

#ifdef __cplusplus
extern "C" {
#endif

/*与联锁通信的ITE信息*/
typedef struct S_IteToCiDataStruct
{
	UINT16 wIteId;  /*ITE ID，不带0x19标识符*/
	UINT16 wIteLogId;  /*ITE逻辑ID*/
	UINT16 wTrainHeadLinkId;  /*列车车头所处link ID*/
	UINT32 dwTrainHeadLinkOffset;  /*列车车头所处link偏移量*/
	UINT16 wTrainTailLinkId;  /*列车车尾所处link ID*/
	UINT32 dwTrainTailLinkOffset;  /*列车车尾所处link偏移量*/
	UINT8 cTrainDir;  /*列车运行方向（0x55：逻辑正，0xAA：逻辑反）*/
	UINT16 wForWardOffset;  /*位置向前方向误差（cm）*/
	UINT16 wBackOffset;  /*位置向后方向误差（cm）*/
	UINT32 dwComStartCycCount;  /*与ITE通信起始周期*/
} IteToCiDataStruct;


extern IteToCiDataStruct IteToCiDataStru[ITE_TO_CI_SUM_MAX];
extern UINT8 IteToCiSum;
/*
* 功能描述：获取与CI通信的ITE通信结构体数组
* 参数说明：void
* 返 回 值：NULL 获取失败
*           非NULL 与CI通信的ITE通信结构体数组
* Created By LQ 2024.06.06
*/
IteToCiDataStruct* GetIteToCiDataStru(void);

/*
* 功能描述：获取与CI通信的ITE通信结构体总数
* 参数说明：无
* 返 回 值：与CI通信的ITE通信结构体总数
* Created By LQ 2024.06.06
*/
UINT8 GetIteToCiSum(void);

/*
* 功能描述：解析处理ITE数据
* 参数说明：const UINT8* dataBuf 数据缓冲区
*           const UINT16 dataLength 数据长度
*           const UINT8 systemId 源设备ID
*           const UINT16 logId ITE互联互通ID（1端或2端标识）
* 返回值  ：CI_ERROR 0 数据解析失败
*			CI_SUCCESS 1 数据解析成功
* Created By LQ 2024.06.05
*/
UINT8 ParseIteToCiData(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId, const UINT16 logId);

/*
* 功能描述：解析处理ITE单帧数据
* 参数说明：const UINT8* dataBuf, 数据缓冲区
*           const UINT16 dataLength, 数据长度
*           const UINT8 systemId, 源设备ID
*           VobcToCiDataStru vobcToci数据结构体指针
*			UINT8* saveGalHead,通用报文头是否保留,1:保留，0:不保留
*           const UINT16 logId，互联互通4IP VOBC的1端或2端标识
* 返回值  ：CI_ERROR 0 数据解析失败
*			CI_SUCCESS 1 数据解析成功
* Created By LQ 2024.06.05
*/
UINT8 ParseIteToCiDataFrame(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId, IteToCiDataStruct* pstIteToCiDataStru, UINT8* pSaveGalHead, const UINT16 logId);

/*
* 功能描述：组CI到ITE数据
* 参数说明：void
* 返 回 值：CI_ERROR 0 组包失败
*			CI_SUCCESS 1 组包成功
* Created By LQ 2024.06.06
*/
UINT8 PackCiToIteData(void);

/*
* 功能描述：组CI到ITE单帧数据
* 参数说明：const UINT8 iteId 目标ITE ID
*           const UINT16 iteLogId 目标ITE的逻辑ID（1端或2端）
* 返 回 值：0:组数据失败
*			1:组数据成功
*/
UINT8 PackCiToIteDataFrame(const UINT8 iteId, const UINT16 iteLogId);

/*
* 功能描述：从ITE发送给CI的信息结构体数组中，删除指定位置及之后的数据
* 参数说明：const UINT8 index ITE发送给CI的信息结构体数组的位置索引
* 返 回 值：无
* Created By LQ 2024.06.05
*/
void RemoveIteToCiMsgAt(const UINT8 index);

#ifdef __cplusplus
}
#endif

#endif
