/**
* @file PFM_ControlFlowCheck.h
* @brief Platform Function Module:控制流状态监督
* @details
* 采用改进的CFCSS算法，静态签名为大质数，校验运算为大质数因式分解
* @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_CONTROLFLOWCHECH_H
#define PFM_CONTROLFLOWCHECH_H
#include "CM_Types.h"

#ifdef __cplusplus
extern "C"
{
#endif

#define PFM_CFC_PROC_NUM (49) /*设置参与控制流检查的总步骤数*/

#define WATCH_DOG_POLL_TIME (10u) /*看门狗轮询时间*/

extern CM_INT32 g_PFM_Check;
    /* 控制流检查算法初始化 */
    void PFM_CFC_Init(void);

    /* 控制流检查 */
    /* step：1，2，3 …… PFM_CFC_PROC_NUM */
    void PFM_CFC_Check(CM_INT32 step);

    /* 获取当前的执行阶段 */
    CM_INT32 PFM_CFC_GetCurStep(void);

    /* 平台状态监督 */
    void PFM_CFC_Monitor(void);

    /**
    * @brief 喂狗
    */
    void PFM_CFC_WatchDog(void);

	/**
	* @brief 主看门狗状态监督/备狗
	*/
	CM_THREAD_FUNC_T MSCP_WatchDog(void);
    /**
    * @brief 主狗喂狗
    */
    void PFM_CFC_WatchDog_Main(void);
	/**
	* @brief 备狗喂狗
	*/
	void PFM_CFC_WatchDog_Prepare(void);
#ifdef __cplusplus
}
#endif
#endif
