#ifndef __CANNW_H
#define __CANNW_H

#include "CanNwConfig.h"
#include "appTask.h"
/***************************************************************/
/*
		          奇瑞新能源 网络管理模块

	描述：参考Autosar网络管理
	日期：2018\06\20

*/
/***************************************************************/

/*
	网络管理状态机切换
缩略语：
	RMS = Repeat Message State      重复消息状态
	NOS = Normal Operation State    正常运行状态
*/
typedef enum
{
	CAN_NW_RESERVED,            	//0   		缺省
	CAN_NW_RMS_SLEEP,				//1		睡眠模式到重复消息模式
	CAN_NW_RMS_PREPARE_SLEEP,		//2   		准备进入睡眠模式到重复消息模式
	CAN_NW_RMS_NORMAL_OPERATION,	//3		正常操作模式到重复消息模式
	CAN_NW_RMS_READY_SLEEP,			//4    	准备睡眠模式到重复消息模式
	CAN_NW_NOS_REPEAT_MESSAGE,		//5		重复消息模式到正常操作状态
	CAN_NW_NOS_READY_SLEEP,         //6   		准备睡眠模式到正常操作状态
	CAN_NW_GOTO_SLEEP,               //7           网络超时2.5S后进入睡眠模式
	CAN_NW_READY_SLEEP 
}CAN_NW_STATE;

/*
	网络超时设置
	时间单位：10MS
*/
#define NM_TIMEOUT_TIMER_THR     		2000U
#define REPEAT_MESSAGE_TIMER_THR 		1600U
#define WAIT_BUS_SLEEP_TIMER_THR        2000U
#define REPEAT_NW_CYCLE_TIMER_THR       500U
#define NM_NORMAL_CYCLE_TIMER_THR       500U
#define IMMEDIATENM_CYCLE_TIMER_THR     20U
#define NM_TIMEOUT                    	0U
#define T_NM_ImmediateCycleTime         20U



#define PASSIVE_WAKEUP              		0U
#define LOCAL_ACTIVE_WAKEUP             	1U
#define REMOTE_ACTIVE_WAKEUP             	2U


#define SEND_DISABLE                     0
#define SEND_APP_PDU  					 1
#define SEND_NWAPP_PDU                   2

extern unsigned char ucNwSendPduType;

extern CAN_NW_STATE euNwState;

extern unsigned int uiNwTimCnt;
extern unsigned int uiNwToutCnt;
extern unsigned int uiNwRMSCnt;
extern unsigned int uiNwBsSlpCnt;
extern unsigned int uiSetNwPduCycVal;
extern unsigned int uiNwPduCycCnt;
extern unsigned char ucActiveWakeupBit;
extern unsigned char ucNwPowerUpFlg;
extern unsigned char ucRemoteWakupFlg;
extern unsigned char ucNwNetIdelCheck;
extern unsigned char ucNwNetIdelFlg;
extern unsigned char ucPreLocWkpStu;
extern unsigned int uiNwLocWkpOffCnt;
extern unsigned char ImmediateNM_count;
extern unsigned char RepeatMessageReq;
extern unsigned char DiagMsgRcvFlag;
extern unsigned int  DiagCnt;



#define  NW_NET_INACTIVE  0
#define  NW_NET_ACTIVE    1

extern unsigned char ucNetActiveFlg;    //0 自清洁功能关闭；1自清洁功能开启

void CanNwInit(void);
void CanNwHandle(void);




#endif
