/**
* @file APP_API.h
* @brief 应用为平台提供的接口
* @details 一些由应用实现，由平台调用的函数，主要是应用初始化、应用周期逻辑等
* @author GT-BU 平台软件组
* @date 2021.3.1
* @version V1.0
* @copyright TCT
* @note 本文件采用doxygen格式编写，用于生成平台对外接口说明书
*/
#pragma once
#include "CM_Types.h"
#include "CommonTypes.h"
#include "MSCP_APP_API.h"

#ifdef __cplusplus
extern "C" {
#endif



    /** 应用周期调用函数集 */
    typedef struct
    {
        ENUM_CM_RETURN(*pApp1)(void); /**< 线程1入口函数 */
        ENUM_CM_RETURN(*pApp2)(void); /**< 线程2入口函数 */
        ENUM_CM_RETURN(*pApp3)(void); /**< 线程3入口函数 */
        ENUM_CM_RETURN(*pApp4)(void); /**< 线程4入口函数 */
        ENUM_CM_RETURN(*pApp5)(void); /**< 线程5入口函数 */
    }STRU_APP_FUNC_T;


/* 以上使用内网安全通信时需要定义 */



    /**
    * @brief 应用周期主逻辑
    * @return ENUM_CM_RETURN 函数执行结果
    * - ENUM_CM_TRUE 成功
    * - ENUM_CM_FALSE 失败（平台立即宕机）
    * @note
    * 当本系热备状态为：ENUM_2x2_SHUTDOWN，时
    * 本函数不执行；
    * 当本系热备状态为：ENUM_2x2_OFFLINE，ENUM_2x2_PRE_MASTER，ENUM_2x2_SLAVE，时
    * 本函数被周期执行，但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出；
    * 当本系热备状态为：ENUM_2x2_MASTER，时
    * 本函数被周期执行，并且所有输出信息被真实输出。
    */
    ENUM_CM_RETURN APP_API_MainFunc(void);

   /**
   * @brief 应用输入处理逻辑
   * @return ENUM_CM_RETURN 函数执行结果
   * - ENUM_CM_TRUE 成功
   * - ENUM_CM_FALSE 失败（平台立即宕机）
   * @note
   * 本函数在平台线程的输入阶段被调用
   * 注意平台线程在第N周期接收的输入数据，应用线程在第N+1周期才能读取到
   */
    ENUM_CM_RETURN APP_API_InputFunc(void);



    ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId);
    /**
    * @brief 输出ats转车数据备用通道判断函数(串口扩展版)。
    * @param UINT16 inSrcId ，UINT16 outSrcId ,UINT16 outDstId
    * @details 此函数指针为一个返回值,三个参数。
    * 		      返回值ENUM_CM_RETURN 0x55或0xaa
    * 		      参数1入参CM_UINT16 输入目标Id
    * 		      参数2出参CM_UINT16* 输出源Id
    * 		      参数3出参CM_UINT16* 输出目的Id
    */
    ENUM_CM_RETURN SerialOutAtsVobcFunc(UINT16 inSrcId IN, UINT16 * outSrcId OUT, UINT16* outDstId OUT);

    /**
        * @brief 输入ats转车数据备用通道判断函数(串口扩展版)。
        * @param UINT16 inSrcId
        * @details 此函数指针为一个返回值,三个参数。
        * 		      返回值ENUM_CM_RETURN 0x55 true或0xaa false
        * 		      参数1入参CM_UINT16 输入源Id
        */
    ENUM_CM_RETURN SerialInVobcAtsFunc(UINT16 inSrcId IN);
    /*
	* @func： 外网输入ID 红蓝网类型及ID缓存
	* @param： void
	* @return  ：VOID
	*/
	void SetOutNetPara(UINT8* pRxBuf, UINT32 dwLen, ENUM_OUTNET_CHN_T chOutNetType,UINT16* pOutBuf,INOUT UINT16 *pCurLen);
	/*
	* 功能描述： 处理平台网络数据类型信息
	* 参数说明： void
	* 返回值  ： void
	*/
	void ProcessPlatformNetData(void);

    /*
    * 功能描述： 退出运营处理
    * 参数说明： void
    * 返回值  ： void
    */
    void APP_API_ExitOperation(void);

	/*
	* @brief 提供给平台的初始化函数
	* @return无
	* @details
	* 给平台提供FS版本号，维护ID、内网参数，系统版本号
	**/
	void APP_API_Data_Init();
#ifdef __cplusplus
}
#endif
