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

#ifndef _PARSE_PACK_AXLE_DATA_H_
#define _PARSE_PACK_AXLE_DATA_H_


#include "ParsePackDefine.h"
#include "CommonTypes.h"
#include "CommonQueue.h"
#include "Convert.h"
#include "../Route/RouteConfigDataManage.h"
#include "../Route/RouteDataManage.h"
#include "../ReverseRoute/ReverseRouteConfigDataManage.h"
#include "../Relay/RelayDefine.h"
#include "../Relay/RelayConfigDataManage.h"
#include "../Relay/RelayDataManage.h"
#include "../Signal/SignalDataManage.h"
#include "../Signal/SignalConfigDataManage.h"
#include "../Switch/SwitchDataManage.h"
#include "../Switch/SwitchConfigDataManage.h"
#include "../Section/PhysicalSectionConfigDataManage.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "../psd/PSDConfigDataManage.h"
#include "../psd/PSDDataManage.h"
#include "../esb/ESBDataManage.h"
#include "../DataManage/DeviceDataManage.h"
#include "../Garagedoor/GaragedoorDataManage.h"

#ifdef LOGPRINT
#include "../LogRecord/LogRecord.h"
#endif

#define SEC_NUM_PER_BYTE ((UINT8)4)					        /*每一个字节包含区段数目*/
#define BIT_NUM_PER_SEC  ((UINT8)(8 / SEC_NUM_PER_BYTE))	/*每一个区段所占比特位数目*/

/*与联锁通信的区段信息*/
typedef struct S_AxisDataStruct
{
	UINT16 PhySecId;                        /*物理区段ID*/
	UINT8 gdRelayState;						/*股道继电器状态，落下：0x55，吸起：0xaa*/
	UINT8 showAndReplyInfo;                 /*bit0、bit1复零反馈，bit2、bit3预留，bit4到bit7表示信息（动态字段）*/
	UINT8 faultInfo;					    /*故障信息，bit0区段故障、bit1板卡故障、bit2区段上电、bit3通信故障、bit4负轴故障、bit5磁头故障、bit6预留、bit7轨旁上电(动态字段)*/
	UINT8 PreResetRst; /*预复位结果*/
	UINT8 chPreResetBack; /*预复位命令反馈*/
	UINT8 chDirectResetRst; /*直接复位结果*/
	UINT8 chDirectResetBack; /*直接复位命令反馈*/
	UINT8 State; /*状态*/

} AxisCollDataStruct;

typedef struct S_AxisToCiDataStruct
{
	UINT16 axisSystemId;
	UINT32 axisEtcsId; /*计轴互联互通ID*/
	UINT32 ciEtcsId; /*CI互联互通ID*/
	UINT8 deviceType;                            				   /*发送设备类型:动态字段*/
	UINT8 SectionSum;                              				   /*区段数量: 动态字段*/
	UINT8 PhySecIdx[PHYSICAL_SECTION_SUM_MAX]; /*物理区段在计轴区段信息结构体数组中位置数组*/
	AxisCollDataStruct  axisDataStr[CI_INCLUDE_AXIS_MAX_SUM];  	   /*计轴区段信息结构体数组*/
}AxisToCiDataStruct;


extern AxisToCiDataStruct axisToCiDataStru[AXIS_TO_CI_SUM_MAX];	/*Axis到CI数据帧结构体*/


#ifdef __cplusplus
extern "C" {
#endif

/*
* 功能描述： 解析处理计轴通信采集数据
* 参数说明： const UINT8* dataBuf, 数据缓冲区
*            const UINT16 dataLength, 数据长度
*            const UINT8 systemId, 源设备ID
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功      
*/
UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId);

/*
* 功能描述： 获取计轴采集数据结构体数组
* 参数说明： void    
* 返回值  ： NULL: 获取失败
*           !NULL: 采集板结构体数组指针      
*/
AxisToCiDataStruct* GetCollAxisDataStruct(void);

#if 0
/*
* 功能描述： 解析处理计轴通信采集数据
* 参数说明： 
* 返回值  ： 0: 数据解析失败
*			 1: 数据解析成功      
*/
UINT8 ParseAxisToCiData();
#endif

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

/*
* 功能描述： 组Axis数据
* 参数说明： UINT8 axisSysId,计轴区段ID
* 返回值  ： 0:组数据失败
*			 1:组数据成功      
*/
UINT8 PackCiToAxisData( UINT8 axisSysId);

/*
* 功能描述： 初始化计轴到CI数据结构体axisToCiDataStru
* 参数说明：
* 返回值  ： CI_ERROR: 初始化失败
*			 CI_SUCCESS: 初始化成功
*/
UINT8 InitAxleToCiDataStru(void);

/*
* 功能描述： 计算物理区段在计轴系统中的下标
* 参数说明： const UINT8 chAxleId, 计轴系统ID
*            const UINT16 wIndexInAxle, 计轴系统中物理区段的序号
*            UINT8* pAxleDataStrIdx, 计轴系统里物理区段ID下标
* 返回值  ： CI_ERROR: 获取失败
*			 CI_SUCCESS: 获取成功
* by cgh 20250415
*/
UINT8 GetInAxlePhySecIdx(const UINT8 chAxleId, const UINT16 wIndexInAxle, UINT8* pAxleDataStrIdx);


#ifdef __cplusplus
}
#endif

#endif
