

/******************************************************************************
** 文件名:  Deployment.h
** 描 述:   部署功能模块代码实现
*******************************************************************************/

#ifndef DEPLOYMENT_H_
#define DEPLOYMENT_H_

#include "DeploymentExtern.h"
#include "CommonCRC.h"
#include "Convert.h"
#include "CommonMemory.h"

#define AIM_LOG_FATAL 0u   /** 维护日志--维护级别 */
#define AIM_LOG_ERROR 1u  /*维护日志--错误级别*/
#define AIM_LOG_WARING 2u  /*维护日志--警告级别*/
#define AIM_LOG_DEBUG 3u   /*维护日志--调试级别*/
#define AIM_LOG_LEVEL AIM_LOG_DEBUG   /*维护日志--当前日志级别*/


#define EXIT_OP_DEFAULT    0X00u       /* 命令消息默认值 */
#define EXIT_OP_FIRST_REQUEST 0XA1u    /* 退出运营命令首次请求 */
#define EXIT_OP_SECOND_REQUEST 0XA2u   /* 退出运营命令再次请求*/
#define EXIT_OP_FIRST_REPLY 0X51u      /* 退出运营命令首次确认 */
#define EXIT_OP_SECOND_REPLY 0X52u     /* 退出运营命令再次确认*/

#define EXIT_OP_TIMEOUT 120000u     /* 退出运营超时时间，单位：毫秒 */

#define MSG_NO_REFRESH 0x00u    /* 信息未更新 */
#define MSG_REFRESH 0xffu       /* 信息已更新 */

#define PERMIT_EXIT_OP_STATUS 0x00u  /** 允许退出运营 */
#define FORBID_EXIT_OP_STATUS 0x01u  /** 禁止退出运营 */

#define FORBID_EXIT_OP_REASON_0  0x00u  /** 默认值 */
#define FORBID_EXIT_OP_REASON_1  0x01u  /** CRC校验失败 */
#define FORBID_EXIT_OP_REASON_2  0x02u  /** 信息非法（板卡类型、通道ID与首次信息不一致） */
#define FORBID_EXIT_OP_REASON_3  0x03u  /** 再次请求回复的首次确认时间戳不一致 */
 

#ifdef WIN32
#define DP_LOG_PRINT(fmt,...)  printf(fmt,##__VA_ARGS__)
#else
#define DP_LOG_PRINT(fmt,...)  printf(fmt,##__VA_ARGS__)
#endif


/** 退出运营相关结构体 */
typedef struct 
{
	UINT8 inputMsgType;     /* 输入信息类型 */
	UINT8 outputMsgType;     /* 输出信息类型 */

	UINT8 boardType;  /* 板卡类型 */
	UINT8 chanelID;  /* 通道id */
	UINT32 recvLastRequestTimestamp;   /* 收到的最新时间戳 */
	UINT32 ReplytTime;   /* 首次请求时间 */

	UINT16 maxTimeout;     /* 最大超时时间 */
	UINT16 curTimeout;     /* 当前超时时间 */
	
	UINT32 innerTime;      /** 内部计时 */
	UINT8 exitOperateStatus;   /* 退出运营状态 */

	UINT8 opStatus;     /** 确认结果 */
	UINT8 opReason;     /** 原因 */

	p_DPrintf pfun;    /* 打印函数注册 */
}EXIT_OP_STRUCT;


/* 退出运营首次请求 */
typedef struct
{
	UINT8 refreshFlag; /* 本周期更新标志 */
	UINT8 boardType;  /* 板卡类型 */
	UINT8 chanelID;  /* 通道id */
	UINT32 firstRequstTime;  /* 首次请求时间 */
	UINT8 exitOpCmd;   /* 退出运营命令 */
	UINT32 exitOpCmdCrc;   /* 退出运营命令CRC */
	UINT32 msgCrc;    /* 信息帧CRC */
}EXIT_OP_FIRST_REQ_STRUCT;

/* 退出运营再次请求 */
typedef struct
{
	UINT8 refreshFlag; /* 本周期更新标志 */
	UINT8 boardType;  /* 板卡类型 */
	UINT8 chanelID;  /* 通道id */
	UINT32 secondRequstTime;  /* 再次请求时间 */
	UINT32 firstReplyTime;   /**  收到的最近一次首次确认信息中的时间戳 */
	UINT8 exitOpCmd;   /* 退出运营命令 */
	UINT32 exitOpCmdCrc;   /* 退出运营命令CRC */
	UINT32 msgCrc;    /* 信息帧CRC */
}EXIT_OP_SEC_REQ_STRUCT;


#endif
