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

#ifndef _PARSE_PACK_CI_DATA_H_
#define _PARSE_PACK_CI_DATA_H_


#include "CommonTypes.h"
#include "Convert.h"
#include "ParsePackDefine.h"
#include "ParsePackCommon.h"
#include "ParsePackAtsData.h"
#include "../Mask/MaskDefine.h"
#include "../Mask/MaskConfigDataManage.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../DataManage/DeviceDataManage.h"
#include "../ParsePack/CiInterfaceDefine.h"
#include "../FloodGate/FloodGateDefine.h"
#include "../CutoffPoint/CutoffPointConfigDataManage.h"
#include "SectionStateProcess_define.h"
#include "../SPKS/SpksDefine.h"
#include "../Relay/RelayDataManage.h"

#define HLHT_CI_INTER_TYPE ((UINT16)0x0606)/*互联互通CI-CI接口类型*/
#define HLHT_CI_INTER_VER ((UINT8)0x01)/*互联互通CI-CI协议版本*/

#define SWITCH_STATUS_PACKET ((UINT16)0x0201)			/*道岔状态信息类型*/

#define PHYSIC_SEC_STATUS_PACKET ((UINT16)0x0202)		/*物理区段状态信息类型*/

#define LOGIC_SEC_STATUS_PACKET ((UINT16)0x0203)		/*逻辑区段状态信息类型*/

#define SIGNAL_STATUS_PACKET ((UINT16)0x0204)			/*信号机状态信息类型*/

#define PSD_STATUS_PACKET ((UINT16)0x0205)				/*站台门状态信息类型*/

#define EMERGEBTN_STATUS_PACKET ((UINT16)0x0206)		/*紧急关闭按钮状态信息类型*/

#define ZHAOCHA_STATUS_PACKET ((UINT16)0x0207)			/*照查状态信息类型*/

#define FLOOD_GATE_STATUS_PACKET ((UINT16)0x0208)		/*防淹门状态信息类型*/

#define START_LOCK_STATUS_PACKET ((UINT16)0x0209)		/*上电锁闭状态信息类型*/

#define LINSHI_XIANSU_STATUS_PACKET ((UINT16)0x020a)	/*临时限速信息类型*/

#define CITY_DEF_STATUS_PACKET ((UINT16)0x020b)			/*城市自定义信息类型*/

#define MANUFAC_DEF_STATUS_PACKET ((UINT16)0x020c)		/*厂商自定义信息类型*/

#define MANUFAC_DEF_INFO_VER_WL   ((UINT8)0x01)		/*厂商自定义信息版本（微联）*/

#define PSD_NUM_PER_BYTE ((UINT8)2)					/*PSD字节常量*/
#define BIT_NUM_PER_PSD ((UINT8)(8U / PSD_NUM_PER_BYTE))	/*PSD字节常量*/
#define ESB_NUM_PER_BYTE ((UINT8)4)					/*紧急停车按钮字节常量*/
#define BIT_NUM_PER_ESB ((UINT8)(8 / ESB_NUM_PER_BYTE))	/*紧急停车字节常量*/

#define ZCJ_NUM_PER_BYTE ((UINT8)4)					/*紧急停车按钮字节常量*/
#define BIT_NUM_PER_ZCJ ((UINT8)(8U / ZCJ_NUM_PER_BYTE))	/*紧急停车字节常量*/

#define TSR_NUM_PER_BYTE ((UINT8)4)					/*TSR按钮字节常量*/
#define BIT_NUM_PER_TSR ((UINT8)(8U / TSR_NUM_PER_BYTE))	/*TSR字节常量*/

#define DEV_NUM_PER_BYTE ((UINT8)4U)					    /*每一个字节包含的设备数目*/
#define BIT_NUM_PER_DEV  ((UINT8)(8U / DEV_NUM_PER_BYTE))	/*每一个设备所占比特位数目*/


#define PACKET_LENGTH_LEN ((UINT8)2)					/*数据总长度*/
#define PACKET_TYPE_LEN ((UINT8)2)						/*数据类型长度*/
#define PACKET_EMPTY_LEN ((UINT8)2)					/*预留字节长度*/

#define BIT_MASK_00000011B ((UINT8)0X03)

#define BIT_VAL_00000000B ((UINT8)0X00)
#define BIT_VAL_00000001B ((UINT8)0X01)
#define BIT_VAL_00000010B ((UINT8)0X02)
#define BIT_VAL_00000011B ((UINT8)0X03)
#define BIT_VAL_00010001B ((UINT8)0x11)
#define BIT_VAL_00010010B ((UINT8)0x12)
#define BIT_VAL_00010100B ((UINT8)0x14)
#define BIT_VAL_00011000B ((UINT8)0x18)
#define BIT_VAL_11111111B ((UINT8)0xFF)

/*物理区段上电锁闭设置标志*/
#define HLHT_STARTLOCK_SET_NO					((UINT8)0xaa)	/*未设置*/
#define HLHT_STARTLOCK_SET_YES					((UINT8)0x55)	/*设置*/

/*给相邻联锁发送的物理区段锁闭方向是否取反标志*/
#define PHYSEC_LOCKDIRECTION_OPPST_NO					((UINT8)0x55)	/*不取反*/
#define PHYSEC_LOCKDIRECTION_OPPST_YES					((UINT8)0xAA)	/*取反*/
#define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT				((UINT8)0xFF)	/*默认值*/

#define CICI_VERSION					((UINT16)29) /*cici接口版本号，每次修改接口需要升级版本号——Last Modified On 2025.09.22*/
#define CICI_BEGIN_TO_STATION_LEN		((UINT16)16) /*从开始到站场长度止  cgh增加4个字节CI-CI校验信息*/
#define CICI_ONE_SWITCH_LEN				((UINT16)13) /*一个道岔数据长度*/
#define CICI_ONE_PHYSEC_LEN				((UINT16)23U)/*一个物理区段数据长度*/
#define CICI_ONE_LOGSEC_LEN				((UINT16)10)/*一个逻辑区段数据长度*/
#define CICI_ONE_SIGNAL_LEN				((UINT16)11)/*一个信号机数据长度*/
#define CICI_ONE_PSD_LEN				((UINT16)5)/*一个屏蔽门数据长度*/
#define CICI_ONE_ESB_LEN				((UINT16)4)/*一个ESB数据长度*/
#define CICI_ONE_ROUTE_LEN				((UINT16)12)/*一个进路数据长度*/
#define CICI_ONE_PHYSEC_LOCKSTATE_LEN	((UINT16)10)/*一个物理区段锁闭状态数据长度*/
#define CICI_ONE_SPKS_LEN				((UINT16)4)	/*一个SPKS数据长度*/
#define CICI_ONE_VIRTUAL_RELAY_LEN		((UINT16)3)	/*一个虚拟SPKS数据长度*/
#define CICI_ONE_FLOODGATE_LEN			((UINT16)7)	/*一个防淹门数据长度*/
#define CICI_ONE_OVERLAP_LEN			((UINT16)16)/*一个保护区段数据长度*/
#define CICI_ONE_LOGSEC_LOCKSTATE_LEN   ((UINT16)12)/*一个逻辑区段锁闭状态数据长度*/
#define CICI_ONE_CUT_OFFPOINT_LEN		((UINT16)9)/*一个分界点数据长度*/
#define CICI_ONE_CMD_LEN				((UINT16)6) /*一个命令长度*/
#define CICI_ONE_DR_CMD_LEN				((UINT16)16) /*一个动态进路命令长度*/
#define CICI_ONE_AUTOROUTE_LEN			(UINT16)(3) /*一个自动通过进路长度*/

/*相邻联锁间动态进路命令类型*/
#define CICI_DR_CMD_HALF					((UINT8)0x55)	/*半截子进路*/
#define CICI_DR_CMD_FULL					((UINT8)0xaa)	/*完整子进路*/
#define CICI_DR_CMD_LOGIC					((UINT8)0xbb)	/*逻辑子进路*/

/*物理区段数据结构体*/
typedef struct S_IntconPhySecDataStruct
{
	UINT8 RLockState;                  /*物理区段进路锁闭状态 (动态字段)*/
	UINT8 PLockState;                  /*物理区段保护锁闭状态 (动态字段)*/
	UINT8 LockDirect;
}IntconPhySecDataStrut;

#ifdef __cplusplus
extern "C" {
#endif

    /*命令数据帧结构体*/
    typedef struct S_ToCiCommandDataStruct
    {
        UINT8 SourceCiId;                 /*发送方联锁ID*/
        UINT8 TargetCiId;                 /*接收方联锁ID*/
        UINT16 CommandID;      	    /*命令ID*/
		UINT32 CycleNo;				/*命令周期*/
        UINT16 Param1;			    /*参数1*/
        UINT16 Param2;			    /*参数2*/
	} ToCiCommandDataStruct;

    /*邻站站场信息结构*/
    typedef struct S_BordCiToXianDiDataStruct
    {
        UINT8 CiId;                                        /*联锁ID*/
        UINT16 MaskDataLen;                                 /*站场信息长度*/
        UINT8 MaskData[CI_TO_ATS_DATA_LEN_MAX];           /*码位数据*/

    }BordCiToXianDiDataStruct;

	/* 相连通信设备数 */
	typedef struct S_CI_TRANSMIT_STRU
	{
		UINT16 srcCiId;/*发送方CI编号*/

		UINT16 destCiId;					    /* 目标联锁ID */
		UINT16 signalNum;						/* 信号机数量 配置 */
		UINT16 signalIdBuf[SIGNAL_SUM_MAX];		
		UINT16 phySecNum;						/* 物理区段 配置 */ 
		UINT16 phySecIdBuf[PHYSICAL_SECTION_SUM_MAX];
		UINT16 phySecIdLockDirFlag[PHYSICAL_SECTION_SUM_MAX];/*物理区段锁闭方向是否取反标志*/
		UINT16 logicSecNum;						/* 逻辑区段 配置 */ 
		UINT16 logicSecIdBuf[LOGIC_SECTION_SUM_MAX];
		UINT16 switchNum;						/* 道岔 配置 */
		UINT16 switchIdBuf[SWITCH_SUM_MAX];
		UINT16 psdNum;							/* 屏蔽门 配置 */
		UINT16 psdIdBuf[PSD_SUM_MAX];
		UINT16 esbNum;							/* 紧急停车按钮 配置 */
		UINT16 esbIdBuf[ESB_SUM_MAX];			
		UINT16 routeNum;
		UINT16 routeIdBuf[ROUTE_SUM_MAX];		/* 进路信息 配置 */
		UINT16 overlapNum;
		UINT16 overlapIdBuf[OVERLAP_SUM_MAX];		/* 保护区段信息 配置 */
		UINT16 phySecIdBufSumhOfOtherCi;		/* 具有锁闭所有区段 */
		UINT16 wPhySecIdBufOfOtherCi[PHYSICAL_SECTION_SUM_MAX];
		UINT16 spksNum;							/* 需要发送的SPKS数量 */
		UINT16 spksIdBuff[SPKS_SUM_MAX];		/* SPKS按钮 */
		UINT16 zcjNum;							/* 需要发送的ZCJ数量 */
		UINT16 zcjIdBuf[ZCJ_SUM_MAX];		/* ZCJ IdBuf */
		UINT16 floodGateNum;			/*需发送防淹门数量*/
		UINT16 floodGateIdBuf[FLOOD_GATE_SUM_MAX];/*需发送的防淹门数据*/
		UINT16 autoRouteNum;						/* 需要发送的自动通过进路的数量 */
		UINT16 autoRouteIdBuf[AUTO_ROUTE_SUM_MAX];	/* 自动通过进路 */
		/*新增分界点数据*/
		UINT16 wCutoffPointNum;			/*需发送分界点数量*/
		UINT16 wCutoffPointBuf[CUTOFF_POINT_SUM_MAX];		/*需发送分界点IDbuff*/
		UINT16 routeleaveLogSumOfOtherCi;		    /* 需发送离去区段检查的所有逻辑区段数量 */
		UINT16 wrouteleaveLogIdBufOfOtherCi[CI_TO_CI_LEAVE_LOGSEC_ROUTE_NUM];/* 需发送离去区段检查的逻辑区段IDbuff */
		UINT16 wNeedCheckSwitchStateRouteSum;                  /*需要检查道岔状态的进路数目*/
		UINT16 szNeedCheckSwStateRouteBuf[ROUTE_SUM_MAX];   /*需要检查道岔状态的进路ID数组*/
		UINT16 wNeedCheckProSwtStateOlpNum;  /*需要检查防护道岔状态的保护区段数量*/
		UINT16 szNeedCheckProSwtStateOlpIdBuf[OVERLAP_SUM_MAX];  /*需要检查防护道岔状态的保护区段ID数组*/
		UINT16 wSwitchSumOfOtherCi;  /*涉及到保护区段征用的其它控区道岔数量*/
		UINT16 szSwitchIdBufOfOtherCi[SWITCH_SUM_MAX];  /*涉及到保护区段征用的其它控区道岔数量*/
	} CiTransmitStruct;

	/* 相邻TIOC发来的通信车 */
	typedef struct
	{
		UINT8 chTiocId;					/* 相邻TIOC编号 */
		UINT8 chCtNum;					/* 通信车数量 */
		UINT16 szCtId[TRAIN_SUM_MAX];	/* 列车ID */
		UINT8 chEaTrainNum;				/* 疏散区域数量 */
		UINT16 szEaTrainId[EA_MAX_NUM];	/* 疏散列车ID */
		UINT8 szPaType[EA_MAX_NUM];		/* 疏散区域类型 */
		UINT32 dwEaBuildCyc[EA_MAX_NUM];		/* 疏散区域建立时间 */
	}TiocTransmitCtStruct;

	/*相邻联锁间部分路径命令结构体*/
	typedef struct S_ToCiDrCmdDataStruct
	{
		UINT8 cSourceCiId;   /*发送方联锁ID*/
		UINT8 cTargetCiId;   /*接收方联锁ID*/
		UINT8 cCmdType;   /*命令类型*/
		UINT8 cLogSecSeqDir;  /*逻辑区段序列方向*/
		UINT8 cLogSecSum;  /*部分进路的逻辑区段数量*/
		UINT16 wLogSecIdBuff[MAX_ROUTE_IN_LT_NUM];  /*部分进路的逻辑区段序列*/
		UINT16 wTrainId;  /*列车ID*/
		UINT8 cTrainLocLogSecSum;  /*列车脚下逻辑区段数量*/
		UINT16 wTrainLocLogSecIdBuff[SIZE_MAX_SECTION_BT_TRAIN];  /*列车脚下逻辑区段序列*/
		UINT8 cSwitchMoveFlag;  /*半截进路可动道岔标志*/
		UINT32 CycleNo;	   /*命令周期*/
		UINT16 wRelStartSignalId;  /*序列内首个逻辑区段关联的始端信号机ID*/
	}ToCiDrCmdDataStruct;

	/*相邻RC间的区间雨雪站台信息*/
	typedef struct S_ToCiAreaSnowStruct
	{
		UINT8 cSourceCiId;  /*发送方联锁ID*/
		UINT8 cTargetCiId;  /*接收方联锁ID*/
		UINT8 cPlatFormNum;  /*区间雨雪站台数量*/
		AreaSnowInfoStruct szPlatFormInfo[CI_TO_CI_AREA_SNOW_SUM_MAX];  /*区间雨雪信息数组*/
	} ToCiAreaSnowStruct;

	/*相邻RC间的区间ITE切除信息*/
	typedef struct S_ToCiAreaIteCutStruct
	{
		UINT8 cSourceCiId;  /*发送方联锁ID*/
		UINT8 cTargetCiId;  /*接收方联锁ID*/
		UINT8 cAreaIteCutNum;  /*区间ITE切除数量*/
		UINT16 wAreaIteCutId[CI_TO_CI_AREA_SNOW_SUM_MAX];  /*区间ID数组*/
	} ToCiAreaIteCutStruct;

	/*******************************全局变量声明*******************************/
	extern ToCiCommandDataStruct RecvCiCmdDataStru[RECVCI_CMD_DATA_STRU_SUM_MAX];
	extern UINT16 RecvCiCmdDataStruCurSum;
	extern ToCiCommandDataStruct SendCiCmdDataStru[SENDCI_CMD_DATA_STRU_SUM_MAX];
	extern UINT16 SendCiCmdDataStruCurSum;
	extern UINT16 PhySecIdBufOfOtherCi[PHYSICAL_SECTION_SUM_MAX];
	extern UINT8 PhySecIdBufSumhOfOtherCi;
	extern UINT16 ciTransNum;
	extern TiocTransmitCtStruct g_szTiocCt[TRANSMIT_OBJECT_DEVICE_SUM_MAX];
	extern UINT8 g_transmitTiocNum;
	extern ToCiDrCmdDataStruct RecvCiDrCmdDataStru[RECVCI_CMD_DATA_STRU_SUM_MAX];
	extern UINT8 RecvCiDrCmdSum;
	extern ToCiDrCmdDataStruct SendCiDrCmdDataStru[RECVCI_CMD_DATA_STRU_SUM_MAX];
	extern UINT8 SendCiDrCmdSum;
	extern ToCiAreaSnowStruct szRecvCiAreaSnow[CI_COM_CI_MAX_NUM];
	extern ToCiAreaSnowStruct szSendCiAreaSnow[CI_COM_CI_MAX_NUM];
	extern ToCiAreaIteCutStruct szRecvCiAreaIteCut[CI_COM_CI_MAX_NUM];
	extern ToCiAreaIteCutStruct szSendCiAreaIteCut[CI_COM_CI_MAX_NUM];

/*
* 功能描述： 解析CI数据
* 参数说明： void    
* 返回值  ： 0: 解析失败
*			 1: 解析成功        
*/
UINT8 ParseCiToCiData(void);

/*
* 功能描述： 解析CI单帧数据
* 参数说明： void    
* 返回值  ： 0:解析失败
*			 1:解析成功      
*/
UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength);

/*
* 功能描述： 校验相邻CI间单帧数据
* 参数说明： UINT8* dataBuf		输入数据信息
*			 UINT16 dataLength   输入数据长度
*			 UINT8 *errNo		校验失败故障码
* 返回值  ： CI_ERROR:校验失败
*			 CI_SUCCESS:校验成功
*/
UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength, UINT8 *errNo);

/*
* 功能描述： 组CI数据
* 参数说明： UINT8 targetDeviceId, 目标设备ID  
* 返回值  ： 0: 组包失败
*			 1: 组包成功           
*/
UINT8 PackCiToCiData(UINT8 targetDeviceId);



/*
* 功能描述： 获取本联锁具有锁闭状态管理权的物理区段ID数组总数
* 参数说明： void    
* 返回值  ： 0: 获取失败
*			 >0: 发送锁闭状态的物理区段ID数组总数
*/
UINT8 GetPhySecIdBufSumhOfOtherCi(void);

/*
* 功能描述： 获取本联锁具有锁闭状态管理权的物理区段ID
* 参数说明： const UINT16 bufIndex, 物理区段ID数组下标  
* 返回值  ： 0: 获取失败
*			 >0: 发送锁闭状态的物理区段ID
*/
UINT16 GetPhySecIdBufOfOtherCi(const UINT16 bufIndex);


/*
* 功能描述： 清组CI命令数据
* 参数说明： targetDeviceId 目标联锁ID    
* 返回值  ： void     
*/
void ClearPackCICmdData(UINT8 targetDeviceId);

/*
* 功能描述： 获取CI接受其他CI命令结构体数组长度
* 参数说明： void    
* 返回值  ： 0: 获取失败
*           >0: 命令结构体数组长度      
*/
UINT16 GetCiRecvCiCmdStruCurSum(void);

/*
* 功能描述： 获取CI接受其他CI命令结构体数组
* 参数说明： void    
* 返回值  ： NULL: 获取失败
*           !NULL: 命令结构体数组指针      
*/
ToCiCommandDataStruct *GetCiRecvCiCmdDataStruct(void);

/*
* 功能描述： 添加CI发送到其他联锁命令信息
* 参数说明： UINT8 cmdID, 命令ID
*			 UINT16 cmdParam1, 命令参数1
*			 UINT16 cmdParam2, 命令参数2
*			 UINT8 toCiId, 发送到的联锁ID
* 返回值  ： 0: 添加失败
*			 1: 添加成功        
*/
void AddCiSendToCiCmdInfo(UINT8 cmdID, UINT16 cmdParam1, UINT16 cmdParam2, UINT8 toCiId);

/*
* 功能描述： 初始化本联锁具有锁闭状态管理权的物理区段ID数组,通过配置数据
* 参数说明： void  
* 返回值  ： 返回成功
*/
UINT8 InitPhySecIdBufOfOtherCiByConf(void);

/*
* 功能描述： 检查本联锁具有锁闭状态管理权的物理区段ID是否已添加
* 参数说明： const UINT8 chDetCiId 目标联锁ID
*		     const UINT16 wPhySecId 物理区段ID
* 返回值  ： CI_SUCCESS 未添加
*	         CI_ERROR   已添加
* edit cgh 20240107
*/
UINT8 CheckPhyBufOfOtherCiExist(const UINT8 chDetCiId, const UINT16 wPhySecId);

/*
* 功能描述： 清CI接收到的其他联锁命令数据
* 参数说明： void    
* 返回值  ： void   
*/
void ClearCiRevCiCmdData(void);

/*
* 功能描述： 解析互联互通接口的CI到CI数据
* 参数说明：
UINT8* dataBuf,数据帧字节数组
const UINT16 dataLength,数组帧字节数组中有效数据的长度
const UINT8 systemId,发送方联锁编号
* 返回值  ： 0:解析失败
*			 1:解析成功
*/
UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId);

/*
* 功能描述： 获取指定CI->本CI的接口数据
* 参数说明： srcId 向本CI发送数据的联锁ID
* 返回值  ： NULL，失败  非NULL 相连联锁设备
*/
CiTransmitStruct* GetSrcCiTransInfo(UINT8 srcId);
/*
* 功能描述： 获取本CI->指定CI的接口数据
* 参数说明： dstId 目标CI编号
* 返回值  ： NULL，失败  非NULL 相连联锁设备
*/
CiTransmitStruct* GetDstCiTransInfo(UINT8 dstId);

/*
功能描述:
构建互联互通联锁至联锁数据
输入参数:
UINT8 targetDeviceId 目标联锁ID
输出参数:
QueueStruct* ciToCiDataQueue 联锁至联锁数据队列指针
返回值:
CI_SUCCESS,成功;CI_ERROR,失败.
*/
UINT8 PackHLHTCiToCiData(UINT8 targetDeviceId);

/*
* 功能描述： 校验CI到CI的帧数据长度合法性
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 totalLength, 数据总长度
*			 UINT8 * errNo,错误码地址
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功      
*/
UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT8 * errNo);

/**
* @brief 初始化TIOC间接口通信车记录
* @param 无
* @return 无
* @note：
*/
void TiocTransCtInit(void);

/**
* @brief 获取指定TIOC通信车存储索引
* @param 无
* @return 索引
* @note：
*/
UINT8 GetTiocTransmitIndex(UINT8 chTiocId);

/**
* @brief 获取指定TIOC通信车传输数量
* @param 无
* @return 数量
* @note：
*/
UINT8 GetTiocTransmitCtNum(UINT8 chTiocId);

/**
* @brief 获取指定TIOC通信车ID
* @param 无
* @return ID地址
* @note：
*/
UINT16 * GetTiocTransmitCtIds(UINT8 chTiocId);

/**
* @brief 获取指定TIOC疏散防护区域传输数量
* @param 无
* @return 数量
* @note：
*/
UINT8 GetTiocTransmitEaNum(UINT8 chTiocId);

/**
* @brief 获取指定TIOC疏散车ID
* @param 无
* @return ID地址
* @note：
*/
UINT16 * GetTiocTransmitEaIds(UINT8 chTiocId);

/**
* @brief 获取指定TIOC防护区域类型
* @param 无
* @return 类型地址
* @note：
*/
UINT8 * GetTiocTransmitPaTypes(UINT8 chTiocId);

/**
* @brief 获取指定TIOC疏散区域建立时间
* @param 无
* @return 类型地址
* @note：
*/
UINT32 * GetTiocTransmitPaBuildCyc(UINT8 chTiocId);

/*
* 功能描述： 清组CI动态进路命令数据
* 参数说明： targetDeviceId 目标联锁ID
* 返回值  ： void
*
*/
void ClearPackCiDrCmdData(UINT8 targetDeviceId);

/*
* 功能描述： 添加CI发送到其他联锁动态进路命令包含的逻辑区段信息
* 参数说明： UINT8 cmdType 命令类型
*            UINT8 logSecSqeDir 逻辑区段序列方向
*            UINT8 logSecSum 逻辑区段数量
*			 UINT16 logSecIdBuff[] 逻辑区段ID数组
*			 UINT8 toCiId 发送到的联锁ID
*/
void AddCiSendToCiDrCmdLogSecInfo(UINT8 cmdType, UINT8 logSecSqeDir, UINT8 logSecSum, UINT16 logSecIdBuff[], UINT8 toCiId);

/*
* 功能描述： 添加CI发送到其他联锁动态进路命令包含的半截进路信息
* 参数说明： UINT16 trainId 列车ID
*            UINT8 trainLocLogSecSum 列车脚下逻辑区段数量
*			 UINT16 trainLocLogSecIdBuff[] 列车脚下逻辑区段ID数组
*			 UINT8 switchMoveFlag 半截进路可动道岔标志
*            UINT16 startSignalId 首个逻辑区段关联的始端信号机ID
*/
void AddCiSendToCiDrCmdHalfInfo(UINT16 trainId, UINT8 trainLocLogSecSum, UINT16 trainLocLogSecIdBuff[], UINT8 switchMoveFlag, UINT16 startSignalId);

/*
* 功能描述： 获取CI接收其他CI动态进路命令结构体数组长度
* 参数说明： void
* 返回值  ： 0: 获取失败
*           >0: 命令总数
*/
UINT8 GetCiRecvCiDrCmdStruCurSum(void);

/*
* 功能描述： 获取CI接收其他CI动态进路命令结构体数组
* 参数说明： void
* 返回值  ： NULL: 获取失败
*           !NULL: 命令结构体数组指针
*/
ToCiDrCmdDataStruct* GetCiRecvCiDrCmdDataStruct(void);

/*
* 功能描述： 清CI接收到的其他联锁动态进路命令数据
* 参数说明： 无
* 返回值  ： 无
*/
void ClearCiRevCiDrCmdData(void);

/*
* 功能描述： 校验相邻CI间版本信息和ID
* 参数说明： const UINT8* dataBuf		输入数据信息
*			 UINT8* Index    数据索引(出参，入参)
* 返回值  ： CI_ERROR:校验失败
*			 CI_SUCCESS:校验成功
*/
UINT8 CheckCiIDAndVer(const UINT8* dataBuf, UINT8* Index);

/*
* 功能描述：校验相邻CI发送的待解析的道岔数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiSwitchData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的物理区段数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiPhySecData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的逻辑区段数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiLogSecData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的信号机数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiSignalData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的命令数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiCommandData(const UINT8* dataBuf, UINT16* index);


/*
* 功能描述：校验相邻CI发送的待解析的防淹门数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiFloodGateData(const UINT8* dataBuf, UINT16* index);


/*
* 功能描述：校验相邻CI发送的待解析的保护区段数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiOverlapData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的自动通过进路数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiAutoRouteData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的本联锁中由其他联锁管理的逻辑区段锁闭数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiLogicLockData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验动态进路命令信息
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiDrCmdData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的共管物理区段锁闭数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiCommonPhyLockData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的SPKS数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiSpksData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的虚拟继电器数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiVirRelayData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的区间疏散数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiEaData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的待解析的分界点通信车数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiCfpCTData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的PSD数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiPsdData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的ESB数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiEsbData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的进路数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiRouteData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的分界点数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CheckCiToCiCfpData(const UINT8* dataBuf, UINT16* index);


/*
* 功能描述：校验相邻CI发送的分界点中包络的数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
*/
UINT8 CiToCiEnvelopeCheck(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述： 添加相邻联锁发送给本联锁的区间雨雪信息
* 参数说明： UINT8 cSrcCiId 发送方CI
*            UINT8 cDstCiId 接收方CI
*			 UINT16 wAreaSnowId 区间ID
*            UINT8 cAreaSnowLevel 区间湿轨级别
* 返 回 值： 无
* Modified By LQ 2025.5.28
*/
void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaSnowId, UINT8 cAreaSnowLevel);

/*
* 功能描述： 添加本联锁发送给指定ID相邻联锁的区间雨雪信息
* 参数说明： UINT8 cSrcCiId 发送方CI
*            UINT8 cDstCiId 接收方CI
*			 UINT16 wAreaId 区间ID
*            UINT8 cAreaSnowLevel 区间湿轨等级
* 返 回 值： 无
* Modified By LQ 2025.05.28
*/
void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId, UINT8 cAreaSnowLevel);

/*
* 功能描述： 获取相邻联锁发送给本联锁的区间雨雪信息
* 参数说明： 无
* 返回值  ： 其它联锁发送的区间雨雪信息
* Created By LQ 2023.11.16
*/
ToCiAreaSnowStruct* GetCiRecvAreaSnowInfo(void);

/*
* 功能描述： 获取本联锁发送给指定ID相邻联锁的区间雨雪信息
* 参数说明： const UINT8 cTargetCiId 目标联锁
* 返回值  ： 其它联锁发送的区间雨雪信息
* Created By LQ 2023.11.16
*/
ToCiAreaSnowStruct* GetCiSendAreaSnowInfo(const UINT8 cTargetCiId);

/*
* 功能描述： 清除相邻联锁发送给本联锁的区间雨雪信息
* 参数说明： const UINT8 cSrcCiId 发送方CI
* 返回值  ： 无
* Created By LQ 2023.11.16
*/
void ClearCiRecvAreaSnowInfo(const UINT8 cSrcCiId);

/*
* 功能描述： 清除本联锁发送给相邻联锁的区间雨雪信息
* 参数说明： 无
* 返回值  ： 无
* Created By LQ 2023.11.16
*/
void ClearCiSendAreaSnowInfo(void);

/*
* 功能描述：校验相邻CI发送的待解析的区间雨雪数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
* Created By LQ 2023.11.16
*/
UINT8 CheckCiToCiAreaSnowData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的命令是否重复
* 参数说明：const ToCiCommandDataStruct* pCiRecvCmdStr 接收的相邻CI命令
* 返回值  ：0 命令重复
*           1 命令不重复
* Created By LQ 2023.11.22
*/
UINT8 CheckCiRecvCmdIsRepeat(const ToCiCommandDataStruct* pCiRecvCmdStr);

/*
* 功能描述：校验相邻CI发送的动态进路命令是否重复
* 参数说明：const ToCiDrCmdDataStruct* pCiRecvDrCmdStr 接收的相邻CI动态进路命令
* 返回值  ：0 命令重复
*           1 命令不重复
* Created By LQ 2023.11.22
*/
UINT8 CheckCiRecvDrCmdIsRepeat(const ToCiDrCmdDataStruct* pCiRecvDrCmdStr);

/*
* 功能描述：校验相邻CI发送的待解析的分界点远程RM数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
* by cgh 20240221
*/
UINT8 CheckCiToCiCfpRrmData(const UINT8* dataBuf, UINT16* index);


/*
* 功能描述： 初始化本联锁需发送的离去逻辑区段ID数组,通过配置数据
* 参数说明： void
* 返回值  ： 返回成功
*/
UINT8 InitLeaveLogIdBufOfOtherCiByConf(void);

/*
* 功能描述：校验相邻CI发送的离去逻辑区段数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
* Created By LQ 2023.11.16
*/
UINT8 CheckCiToCiLeaveLogSecData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述： 初始化本联锁需发送的需要检查道岔状态的进路
* 参数说明： void
* 返回值  ： CI_SUCCESS 初始化成功
*            CI_ERROR 初始化失败
* by cgh 20241202
*/
UINT8 InitNeedCheckSwitchStaRoute(void);

/*
* 功能描述：校验相邻CI发送的需要检查道岔状态的进路数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返回值  ：0 校验失败
*           1 校验成功
* by cgh 20241202
*/
UINT8 CheckCiToCiNeedCheckSwRouteData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：初始化需要由本控区检查防护道岔状态的其它控区的保护区段
* 参数说明：void
* 返 回 值：1 成功
*           0 失败
* Created By LQ 2024.12.03
*/
UINT8 InitNeedCheckProSwtStaOverlap(void);

/*
* 功能描述：校验相邻CI发送的需要检查防护道岔状态的保护区段数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返 回 值：0 校验失败
*           1 校验成功
* Created By LQ 2024.12.03
*/
UINT8 CheckCiToCiNeedCheckSwOlpData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：校验相邻CI发送的防护道岔防护锁闭数据
* 参数说明：const UINT8* dataBuf 待解析的数据
*           UINT16* index 索引
* 返 回 值：0 校验失败
*           1 校验成功
* Created By LQ 2024.12.04
*/
UINT8 CheckCiToCiProSwPLockData(const UINT8* dataBuf, UINT16* index);

/*
功能描述:
构建互联互通联锁至联锁报文头第二步
输入参数:
无
输出参数:
UINT8 * pInputData 数据缓存指针
UINT16 appDataLen 应用数据长度
返回值:
CI_SUCCESS,成功;CI_ERROR,失败.
*/
UINT8 PackHlhtPacketHeadPha2(UINT8 * pInputData, UINT16 appDataLen);

/*
功能描述:
构建互联互通联锁至联锁报文头第一步
输入参数:
UINT8 dstCiId 目标联锁ID
输出参数:
UINT8 * pInputData 数据缓存指针
UINT16 * pHeadDataLen 报文头长度变量指针
UINT8 * * ppLenItemAddr 报文头中存放应用长度的地址的指针
返回值:
CI_SUCCESS,成功;CI_ERROR,失败.
*/
UINT8 PackHlhtPacketHeadPha1(UINT8 dstCiId, UINT8 * pInputData, UINT16 * pHeadDataLen, UINT8 * * ppLenItemAddr);

/*
* 功能描述：初始化需要本控区保护区段征用的其它控区的防护道岔
* 参数说明：void
* 返 回 值：1 成功
*           0 失败
* Created By LQ 2024.12.17
*/
UINT8 InitNeedOlapUsingOtherCiProSw(void);

/*
* 功能描述：清除相邻联锁发送给本联锁的区间ITE切除信息
* 参数说明：const UINT8 cSrcCiId 发送方CI
* 返 回 值：无
* Created By LQ 2025.04.14
*/
void ClearCiRecvAreaIteCutInfo(const UINT8 cSrcCiId);

/*
* 功能描述：清除本联锁发送给相邻联锁的区间ITE切除信息
* 参数说明：无
* 返 回 值：无
* Created By LQ 2025.04.14
*/
void ClearCiSendAreaIteCutInfo(void);

/*
* 功能描述： 获取相邻联锁发送给本联锁的区间ITE切除信息
* 参数说明： 无
* 返 回 值： 接收其它联锁的区间ITE切除信息
* Created By LQ 2025.04.14
*/
ToCiAreaIteCutStruct* GetCiRecvAreaIteCutInfo(void);

/*
* 功能描述：获取本联锁发送给指定ID相邻联锁的区间ITE切除信息
* 参数说明：const UINT8 cTargetCiId 目标联锁
* 返 回 值：发送给其它联锁的区间ITE切除信息
* Created By LQ 2023.11.16
*/
ToCiAreaIteCutStruct* GetCiSendAreaIteCutInfo(const UINT8 cTargetCiId);

/*
* 功能描述：添加相邻联锁发送给本联锁的区间ITE切除信息
* 参数说明：UINT8 cSrcCiId 发送方CI
*           UINT8 cDstCiId 接收方CI
*			UINT16 wAreaId 区间ID
* 返 回 值：无
* Created By LQ 2025.04.14
*/
void AddCiRecvAreaIteCutInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId);

/*
* 功能描述：添加本联锁发送给指定ID相邻联锁的区间ITE切除信息
* 参数说明：UINT8 cSrcCiId 发送方CI
*           UINT8 cDstCiId 接收方CI
*			UINT16 wAreaId 区间ID
* 返 回 值：无
* Created By LQ 2025.04.14
*/
void AddCiSendAreaIteCutInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId);

/*
* 功能描述：校验相邻CI发送的待解析的区间ITE切除数据
* 参数说明：const UINT8* dataBuf 待解析的数据；
*           UINT16* index 索引
* 返 回 值：0 校验失败
*           1 校验成功
* Created By LQ 2024.04.15
*/
UINT8 CheckCiToCiAreaIteCutData(const UINT8* dataBuf, UINT16* index);

/*
* 功能描述：组互联互通厂商自定义帧
* 参数说明：UINT8 *pInputData 输入数据指针
*           UINT16 *pItemLen 该项数据在输入数据中的长度（出参）
*           const UINT8 dstCiId 目标联锁ID
* 返 回 值：CI_SUCCESS 1 组包成功
*         CI_ERROR 0 组包失败
* Created By LQ 2025.05.23
*/
UINT8 PackManufacDefPacket(UINT8* pInputBuf, UINT16* pItemLen, const UINT8 dstCiId);

/*
* 功能描述：解析互联互通厂商自定义帧
* 参数说明：const UINT8 *pInputData 输入数据指针
*           UINT16 *pItemLen 该项数据在输入数据中的长度
*           const UINT8 srcCiId 源联锁ID
* 返 回 值：CI_SUCCESS 1 解析成功
*           CI_ERROR 0 解析失败
* Created By LQ 2025.05.26
*/
UINT8 ParseManufacDefPacket(const UINT8* pInputData, UINT16* pItemLen, const UINT8 srcCiId);

#ifdef __cplusplus
}
#endif

#endif
