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

#ifndef _PARSE_PACK_COMMON_H_
#define _PARSE_PACK_COMMON_H_


#include "CommonTypes.h"
#include "ParsePackDefine.h"
#include "../Mask/MaskConfigDataManage.h"
#include "../Switch/SwitchDataManage.h"
#include "../Signal/SignalDataManage.h"
#include "../Section/AxisSectionDataManage.h"
#include "../Section/LogicSectionDataManage.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "../Section/SectionDefine.h"
#include "../Route/RouteDataManage.h"
#include "../Route/RouteConfigDataManage.h"
#include "../ReverseRoute/ReverseRouteConfigDataManage.h"
#include "../esb/ESBDataManage.h"
#include "../psd/PSDDataManage.h"
#include "../Overlap/OverlapDataManage.h"
#include "../System/SystemParameterManage.h"
#include "../Transmit/TransmitStateDataManage.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../DataManage/DeviceDataManage.h"
#include "../Indicator/IndicatorDataManage.h"
#include "../Relay/RelayDataManage.h"
#include "../AutoReturn/AutoReturnDataManage.h"
#include "../AutoRoute/AutoRouteDataManage.h"
#include "../AllAutoReturn/AllAutoReturnDataManage.h"
#include "../Garagedoor/GaragedoorDataManage.h"
#include "../VirtualDevice/VirtualDevDataManage.h"
#include "../ParsePack/ParsePackOcData.h"
#include "../DataManage/PlatDataManage.h"
#include "../IO/DeviceRelayDataProcess.h"

#ifdef __cplusplus
extern "C" {
#endif



#define HEART_FRAME_MAX_SUM            ((UINT16)20U)   /*一周期内从平台获取的心跳帧最大数量*/
#define HEART_FRAME_MAX_LENGTH         ((UINT16)100U)   /*一条心跳帧最大字节数量*/
#define HEART_FRAME_REAL_LENGTH         ((UINT16)28U)   /*一条心跳帧实际字节数量*/
#define IO_DATA_LENGTH               ((UINT32)50U)   /*一条IO状态帧的字节数量*/
#define IO_DATA_DATA_LENGTH               ((UINT32)16U)   /*一条IO状态帧的实际内容的字节数量*/


	extern PlatHeartDataStruct RecvHeartDataStru;
	extern PlatGPIODataStruct RecvPlatDataStruGPIO;
	extern PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance;
/*
* 功能描述： 信号机相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 SignalMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 道岔相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 物理区段相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 逻辑区段相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 保护区段相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 OverlapMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 进路相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 站台相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： SPKS相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功
*/
UINT8 SPKSMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);


/*
* 功能描述： 洗车机相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功
*/
UINT8 WashManchineMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);


/*
* 功能描述： 车库门相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功
*/
UINT8 GaragedoorMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 生成码位
* 参数说明： const UINT8 localCiId, 本机联锁站ID
*			 const UINT8 destSystemType, 目标系统类型
*            UINT8* dataBuf, 码位buf
* 返回值  ： 0: 生成失败
*			 1: 生成成功      
*/
UINT8 MaskPack(const UINT8 destSystemType, UINT8* dataBuf);

/*
* 功能描述： 解析码位
* 参数说明： const UINT8* SourceDataBuf, 源数据缓冲区
*			 const UINT16 SourceDataLength, 源数据总长度
*			 UINT16 MaskSum, 码位数量 （实际的码位数量，可能小于SourceDataLength*8）
*			 UINT8* TargetDataBuf, 目标数据缓冲区
* 返回值  ： 0: 解析失败
*			 >0: 解析成功      
*/
UINT8 GetMaskValue(UINT8* TargetDataBuf, const UINT16 MaskSum, const UINT8* SourceDataBuf, const UINT16 SourceDataLength);				

/*
* 功能描述： 设置码位
* 参数说明： const UINT16 maskId, 码位ID
*            UINT8* dataBuf, 码位buf
* 返回值  ： 0: 生成失败
*			 1: 生成成功      
*/
void SetMaskValue(const UINT16 maskId,UINT8* dataBuf);

/*
* 功能描述： 计算保护区段有效码位
* 参数说明： const UINT16 rtOverlapLockedId, 保护区段ID
* 返回值  ： 
		CI_SUCCESS: 保护区段有效
*		CI_ERROR: 保护区段无效
*/
UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId);

/*
* 功能描述： 防淹门相关码位处理
* 参数说明： UINT8 MaskType, 码位类型
*			 UINT16 DeviceId, 设备ID
*			 UINT16 MaskId, 码位ID
*			 UINT8* dataBuf, 数据缓冲区
* 返回值  ： 0: 码位处理失败
*			 1: 码位处理成功  
*/
UINT8 FloodGateMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf);

/*
* 功能描述： 组包发送CIM通信状态信息
* 参数说明： void    
* 返回值  ： 无
*
*/
void PackCiToCimCommData(void);

/*
* 功能描述： 组包发送CIM信号机断丝状态信息
* 参数说明： void    
* 返回值  ： 无
*
*/
void PackCiToCimSignalDsData(void);

/*
* 功能描述： 处理配置虚拟联锁下的无人折返按钮码位
* 参数说明： void    
* 返回值  ： 无
*
*/
void DealAutoReturnButtonMask_Vir(UINT16 DeviceId, UINT16 MaskId, UINT8* pdataBuf);

/*
* 功能描述： 组包发送CIM继电器混线信息
* 参数说明： void    
* 返回值  ： 无
*
*/
void PackCiToCimRelayHunXianData(void);

/*
* 功能描述： 组包发送CIM屏蔽门报警帧类型
* 参数说明： void
* 返回值  ： 无
* cgh-合并CID-2349-4：
*/
void PackCiToCimPsdAlarmData(void);

/*
* 功能描述： 组包发送CIM继电器驱动采集不一致报警信息
* 参数说明： void
* 返回值  ： 无
* cgh-合并CID-2349-4：
*/
void PackCiToCimRelayDriAndCollDiff(void);

/*
* 功能描述： 组包发送CIM信号机驱动超时信息
* 参数说明： void
* 返回值  ： 无
* cgh-合并CID-2349-4：
*
*/
void PackCiToCimSigDriOutTimeData(void);

/*
* 功能描述： 组包发送版本号信息
* 参数说明： void
* 返回值  ： 无
*
*/
void PackCiToCimVerData(void);


/*
* 功能描述： 组包发送设备状态信息
* 参数说明： void
* 返回值  ： 无
*
*/
void PackCiToCimDeviceData(void);


/*
* 功能描述： 输出AIM数据
* 参数说明：AIM输出信息组帧函数
* 返回值  ： 无
*/
void AIMOutput(void);

/*
* 功能描述： 输出AIM数据
* 参数说明：
 * @param[in]	UINT8 chDevType			目标设备类型
 * @param[in]	UINT8 chDevID			目标设备ID
 * @param[in]	UINT8 g_szOutBuffer[]	实际数据输出首地址
 * @param[in]	UINT16 wLength			实际数据长度
* 返回值  ： 无
*
*/
void ProtocolInfoSend(UINT8 chDevType, UINT8 chDevID, UINT8 g_szOutBuffer[], UINT16 wLength);

/*
* 功能描述： 组包发送执行单元报警信息
* 参数说明： void
* 返回值  ： 无
*
*/
void PackCiToCimUnitAlarmData(void);

/*
* 功能描述：解析平台通控心跳帧报文
* 参数说明：UINT8* datdaBuff：心跳数据缓存
*          UINT32 dataLength  心跳帧长度
* 返回值  ：void
* BY LC
*/
UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf);


/*
* 功能描述：解析平台扩展板心跳帧报文
* 参数说明：UINT8* datdaBuff：心跳数据缓存
*          UINT32 dataLength  心跳帧长度
* 返回值  ：void
* BY LC
*/
UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf);


/*
* 功能描述：平台心跳帧报文处理
* 参数说明：无
* 返回值  ：无
* BY LC
*/
UINT8 PlatHeartFrameProcess(void);


/*
* 功能描述：平台通道数据处理
* 参数说明：无
* 返回值  ：CI_ERROR 处理失败
*          CI_SUCCESS 处理成功
* BY LC
*/
void PlatChannelIODataProcess(void);

/*
* 功能描述：解析平台IO状态数据
* 参数说明：UINT8* datdaBuff：IO数据缓存
* 返回值  ：无
* BY LC
*/
void ParasePlantIOData(UINT8* dataBuf);

/*
* 功能描述： 组包发送CIM飞车报警状态信息
* 参数说明： void
* 返回值  ： 无
* BY fan 20241021
*/
void PackCiToCimFlyProtectData(void);

/*
* 功能描述： 组包发送CIM双系IO采集不一致信息
* 参数说明： void
* 返回值  ： 无
*/
void PackCiToCimCollDiffData(void);

#ifdef __cplusplus
}
#endif

#endif
