/********************************************************
*                                                                                                            
* 文 件 名： 2oo2InterfaceDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-26
* 作    者： 联锁组
* 功能描述： 安全计算机接口数据管理  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _2OO2_INTERFACE_DATA_MANAGE_H_
#define _2OO2_INTERFACE_DATA_MANAGE_H_


#include "../System/SystemConfigDefine.h"
#include "../System/CiSystemDefine.h"
#include "CommonTypes.h"
#include "CommonQueue.h"
#include "../Transmit/TransmitStateDataManage.h"

#ifdef PLATFORM_2OO2
#include "sfpplatform.h"
#include "RsspWl.h"
#include "FsfbProtcl.h"
#endif





/*上电获取FSIO数据周期数*/
#define START_GET_FSIO_CYCLE_NUM                  ((UINT16)20)        /*上电获取FSIO数据周期数*/


#ifdef __cplusplus
extern "C" {
#endif

/*平台通信状态结构体*/
typedef struct S_PlatComStatusStruct
{
    UINT8* SystemType;   /*通信的系统设备类型*/
    UINT8* SystemNum;   /*通信的系统设备数量*/
    UINT8* SystemIdBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX];    /*通信的系统设备ID数组*/
    UINT8* CommunicationStatusBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX];  /*通信状态数组 与ID数组对应*/
} PlatComStatusStruct;

/*全局变量声明*/
extern PlatComStatusStruct PlatComStatusStru[TRANSMIT_OBJECT_SUM_MAX]; /*定义平台通信关系数据结构体*/
extern QueueStruct* FsfbToCiDataQueue;		                             /*Fsfb到CI数据队列*/
extern QueueStruct* CiToFsfbDataQueue;		                             /*CI到Fsfb数据队列*/
extern QueueStruct* ProtocolToCiDataQueue;                               /*协议到应用的数据队列*/
extern QueueStruct* CiToProtocolDataQueue;                               /*CI到协议数据队列*/
extern QueueStruct* AtsToCiDataQueue;		                             /*ATS到CI数据队列*/
extern QueueStruct* CiToAtsDataQueue;		                             /*CI到ATS数据队列*/
extern QueueStruct* XianDiToCiDataQueue;		                         /*现地到CI数据队列*/
extern QueueStruct* CiToXianDiDataQueue;		                         /*CI到现地数据队列*/
extern QueueStruct* IoToCiDataQueue;		                             /*IO到CI数据队列*/
extern QueueStruct* CiToIoDataQueue;		                             /*CI到IO数据队列*/
extern QueueStruct* ZcToCiDataQueue;		                             /*ZC到CI数据队列*/
extern QueueStruct* CiToZcDataQueue;		                             /*CI到Zc数据队列*/
extern QueueStruct* LEUToCiDataQueue;		                             /*LEU到CI数据队列*/
extern QueueStruct* CiToLEUDataQueue;		                             /*CI到LEU数据队列*/
extern QueueStruct* VobcToCiDataQueue;		                             /*Vobc到CI数据队列*/
extern QueueStruct* CiToVobcDataQueue;		                             /*CI到Vobc数据队列*/
extern QueueStruct* PlatformToCiDataQueue;		                         /*Platform到CI数据队列*/
extern QueueStruct* CiToPlatformDataQueue;		                         /*CI到platform数据队列*/
extern QueueStruct* PscToCiDataQueue;		                             /*Psc到CI数据队列*/
extern QueueStruct* CiToPscDataQueue;		                             /*CI到Psc数据队列*/
extern QueueStruct* CiRecvFromCiDataQueue;	                             /*CI接受其他CI数据队列*/
extern QueueStruct* CiSendToCiDataQueue;	                             /*CI发送到其他CI数据队列*/

extern QueueStruct* AxisToCiDataQueue;		                             /*Axis到CI数据队列*/
extern QueueStruct* CiToAxisDataQueue;		                             /*CI到Axis数据队列*/
extern QueueStruct* OcToCiDataQueue;									 /*Oc到Ci的数据队列*/
extern QueueStruct* CiToOcDataQueue;									 /*Ci到Oc的数据队列*/

extern UINT32* CurCycleNum;					                             /*当前周期号*/
extern UINT32 StartCycleNum;                                                /*上电周期号*/
extern UINT8* PlatComputerId;                                            /*平台本机联锁ID*/
extern UINT8* PlatRunMode;	                                             /*平台处理模式*/
extern UINT8* CiAndIoComState;                                           /*联锁与IO通信状态*/
extern UINT8* CiAndLeuComState;                                          /*联锁与LEU通信状态*/
extern UINT8* CiAndZcComState;                                           /*联锁与ZC通信状态*/
extern UINT8* CiAndCiComDeviceNum;                                       /*相邻联锁数量*/
extern UINT8* CiAndCiComIdBuf;                                           /*联锁与联锁通信设备ID*/
extern UINT8* CiAndCiComState;                                           /*联锁与联锁通信状态*/
extern UINT8* PlatSheBeiType;                                            /*平台对外设备类型*/

/*
* 功能描述： 平台初始化
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台ATS到CI接口队列
*/
UINT8 Initial2oo2Interface(void);


/*
* 功能描述： 获取平台通用协议到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台通用协议到CI接口队列
*/
QueueStruct* Get2oo2ProtocolToCiDataQueue(void);

/*
* 功能描述： 获取平台CI到通用协议接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI到通用协议接口队列
*/
QueueStruct* Get2oo2CiToProtocolDataQueue(void);



/*
* 功能描述： 获取平台Fsfb到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI到Fsfb接口队列
*/
QueueStruct* Get2oo2FsfbToCiDataQueue(void);

/*
* 功能描述： 获取平台CI到FsfbP接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI到Fsfb接口队列
*/
QueueStruct* Get2oo2CiToFsfbDataQueue(void);



/*
* 功能描述： 获取平台ATS到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台ATS到CI接口队列
*/
QueueStruct* Get2oo2AtsToCiDataQueue(void);

/*
* 功能描述： 获取平台CI到ATS接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI到ATS接口队列
*/
QueueStruct* Get2oo2CiToAtsDataQueue(void);

/*
* 功能描述： 获取平台CI到现地接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI到现地接口队列
*/
QueueStruct* Get2oo2CiToXianDiDataQueue(void);

/*
* 功能描述： 获取平台现地到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台现地到CI接口队列
*/
QueueStruct* Get2oo2XianDiToCiDataQueue(void);

/*
* 功能描述： 获取ZC到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: ZC到CI接口队列
*/
QueueStruct* Get2oo2ZcToCiDataQueue(void);

/*
* 功能描述： 获取CI到ZC接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到ZC接口队列
*/
QueueStruct* Get2oo2CiToZcDataQueue(void);

/*
* 功能描述： 获取平台CI从其他CI接收接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI接收CI接口队列
*/
QueueStruct* Get2oo2CiRecvCiDataQueue(void);

/*
* 功能描述： 获取CI发送到其他CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI发送CI接口队列
*/
QueueStruct* Get2oo2CiSendCiDataQueue(void);

/*
* 功能描述： 获取平台IO到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台IO到CI接口队列
*/
QueueStruct* Get2oo2IoToCiDataQueue(void);

/*
* 功能描述： 获取平台CI到IO接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: 平台CI到IO接口队列
*/
QueueStruct* Get2oo2CiToIoDataQueue(void);

/*
* 功能描述： 获取Leu到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: Leu到CI接口队列
*/
QueueStruct* Get2oo2LEUToCiDataQueue(void);

/*
* 功能描述： 获取CI到Leu接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Leu接口队列
*/
QueueStruct* Get2oo2CiToLEUDataQueue(void);

/*
* 功能描述： 获取CI到Vobc接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Vobc接口队列
*/
QueueStruct* Get2oo2VobcToCiDataQueue(void);

/*
* 功能描述： 获取CI到Vobc接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Vobc接口队列
*/
QueueStruct* Get2oo2CiToVobcDataQueue(void);

/*
* 功能描述： 获取CI到Oc接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Oc接口队列
*/
QueueStruct* Get2oo2CiToOcDataQueue(void);

/*
* 功能描述： 获取PSD到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: PSD到CI接口队列
*/
QueueStruct* Get2oo2PlatformToCiDataQueue(void);

/*
* 功能描述： 获取CI到Psd接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Psd接口队列
*/
QueueStruct* Get2oo2CiToPlatformDataQueue(void);


/*
* 功能描述： 获取Psc到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: Psc到CI接口队列
*/
QueueStruct* Get2oo2PscToCiDataQueue(void);

/*
* 功能描述： 获取CI到Psc接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Psc接口队列
*/
QueueStruct* Get2oo2CiToPscDataQueue(void);

/*
* 功能描述： 获取平台周期号
* 参数说明： void
* 返回值  ： 0: 获取数据失败
*           >0: 平台周期号
*/
UINT32 Get2oo2CurCycleNum(void);

/*
* 功能描述： 获取平台本机ID
* 参数说明： void
* 返回值  ： 0: 获取数据失败
*           >0: 平台本机ID
*/


UINT8 Get2oo2ComputerId(void);

/*
* 功能描述： 获取平台本机处理模式
* 参数说明： void
* 返回值  ： 0: 获取数据失败
*           >0: 平台本机处理模式
*/
UINT8 Get2oo2ProcessMode(void);

/*
* 功能描述： 获取平台其他主机处理模式
* 参数说明： void
* 返回值  ： 0: 获取数据失败
*           >0: 平台其他主机处理模式
*/
UINT8 Get2oo2OhterProcessMode(void);

/*
* 功能描述： 获取CI与其他设备通信的该设备数量
* 参数说明： const UINT8 systemType, 系统类型
* 返回值  ： 通信设备数目
*/
UINT8 Get2oo2CiAndOtherSysCommNum(const UINT8 systemType);



/*
* 功能描述： 获取CI与IO通信状态
* 参数说明： void
* 返回值  ： 
*/
UINT8 Get2oo2CiAndIoCommState(void);

/*
* 功能描述： 获取起始周期号
* 参数说明： void
* 返回值  ： 
*/
UINT32 Get2oo2StartCycleNum(void);

/*
* 功能描述： 获取平台设备类型
* 参数说明： void
* 返回值  ： 
*/
UINT8 Get2oo2SheBeiType(void);


/*
* 功能描述： 获取Axis到CI接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: Axis到CI接口队列
*/
QueueStruct* Get2oo2AxisToCiDataQueue(void);


/*
* 功能描述： 获取CI到Axis接口队列
* 参数说明： void
* 返回值  ： NULL: 获取数据失败
*           !NULL: CI到Axis接口队列
*/
QueueStruct* Get2oo2CiToAxisDataQueue(void);



/*
* 功能描述： 将队列中的数据传输出去
* 参数说明： UINT8* thisString, 本周期数据
* 返回值  ： 0: 打印失败
*			 1: 打印成功
*/
void SendOut_LogBuff();





void debug_infor_printf(char* debug_string, ...);
void debug_out_array(UINT8 mode, UINT8* debug_array, UINT16 len);
void DarkInfoPack(UINT16 mode, UINT8* debug_array, UINT16 len);

UINT8 OutnetSafeRecv(UINT16* srcTypeId, UINT16* srcLogicId, UINT8* data, UINT32* dataLen, UINT32 dataMaxLen);
UINT8 InnetSafeRecv(UINT16* srcTypeId, UINT16* srcLogicId, UINT8* data, UINT32* dataLen, UINT32 dataMaxLen);
UINT8 OutnetSafeSend(UINT16 dstTypeId, UINT16 dstLogicId, UINT8* data, UINT32 dataLen);
UINT8 InnetSafeSend(UINT16 dstTypeId, UINT16 dstLogicId, UINT8* data, UINT32 dataLen);

UINT32 InnetRawIoRecv(UINT8* data, UINT32 dataMaxLen);
UINT8 InnetRawIoSend(UINT8* data, UINT32 dataLen);
UINT32 InnetRawLeuRecv(UINT16* srcTypeId, UINT8* data, UINT32 dataMaxLen);

UINT8 InnetRawLeuSend(UINT16 dstTypeId, UINT8* data, UINT32 dataLen);


void InnetHeartFrameRecv(OUT UINT8* CC1_data, OUT UINT8* CC2_data, OUT UINT8* SEB1_data, OUT UINT8* SEB2_data, OUT UINT8* CC1_commFFlag, OUT UINT8* CC2_commFFlag, OUT UINT8* SEB1_commFFlag, OUT UINT8* SEB2_commFFlag);


UINT8 InnetChannelIODataRecv(UINT8* ioData);
#if (kPLATFORM == kWINDOWS)
#define TMP_BUF_LEN 10000
static UINT8 gTempDataBuf[TMP_BUF_LEN] = {0};		           /*数据临时数组*/
#endif

#ifdef __cplusplus
}
#endif

#endif
