/**
* @file PFM_InputOutput.h
* @brief Platform Function Module: 输入输出管理
* @details
* 平台输入微周期和输出微周期的2oo2、2x2功能实现
* @author GT-BU
* @date 2021.02.20
* @version V1.0
* @copyright TCT
* @par 修改日志
* <table>
* <tr><th>Date        <th>Version  <th>Author     <th>Description
* <tr><td>2021.02.01  <td>V1.0     <td>GT-BU      <td>创建初始版本
* </table>
*/
#ifndef PFM_INPUTOUTPUT_H
#define PFM_INPUTOUTPUT_H
#include "CM_Types.h"
#include "MSCP_APP_Interface.h"
#ifdef __cplusplus
extern "C"
{
#endif
	/*透传接收通道的长度定义*/
	#define PFM_RAW_LEN_SIZE (4u)
	#define PFM_RAW_DEVID_SIZE (2u)
	#define PFM_RAW_HEADER_SIZE (PFM_RAW_LEN_SIZE + PFM_RAW_DEVID_SIZE)
    /* 微周期控制初始化 */
    void PFM_Init(void);

    /* 双缓冲切换 */
    void PFM_BufSwich(void);

    /* 输入微周期处理 */
    void PFM_InputProc(void);

    /* 输出微周期处理 */
    void PFM_OutputProc(void);

    /* 周期后处理 */
    void PFM_EndProc(void);
    /**@brief 接收外网透传报文*/
    CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize);
    /**@brief 发送外网透传报文*/
    CM_UINT8 PFM_OutnetRaw_AppSend( IN const CM_UINT8* txBuf, IN CM_UINT32 txLen, IN CM_UINT16 dstName, IN CM_UINT16 dstLogicID, IN CM_UINT16 type);
    /* 内网透传数据接收 */
    CM_UINT32 PFM_InnetRaw_AppRecv(IN CM_INT32 ch, OUT CM_UINT16 *pSrcName, OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize);
    /* 快速接收内网透传报文*/
    CM_UINT32 PFM_InnetRaw_AppRecv_Fast(IN CM_INT32 ch, OUT CM_UINT16* pSrcName, OUT const CM_UINT8** rxBuf);
    /** @brief 接收内网透传辅助信息*/
    CM_UINT32 PFM_InnetRawHelpInfo_AppRecv(IN CM_INT32 ch, OUT CM_UINT8* MainInfoBuf,OUT CM_UINT8* PeerInfoBuf,IN CM_INT16 rxSize,OUT CM_UINT16 *PeerInfoLen);
    /* 内网透传数据发送 */
    CM_UINT8 PFM_InnetRaw_AppSend(IN CM_INT32 ch, IN CM_UINT16 dstName, IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen);
    /* 发送外网心跳报文 */
    CM_INT32 PFM_OutnetHeart_Send(void);
    /**
    * @brief 接收外网心跳报文
    */
    CM_UINT32 PFM_OutnetHeart_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize);

    /* 维护模式输入微周期处理(无宕机函数) */
    void PFM_InputProc_Crash(void);
    /* 维护模式输出微周期处理(无宕机函数) */
    void PFM_OutputProc_Crash(void);

    void PFM_GetRciTempBuf(OUT CM_UINT16* RedBuf, OUT CM_UINT16* BlueBuf);
#ifdef __cplusplus
}
#endif
#endif
