2024-07-07 16:42:04 +08:00

717 lines
20 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "CanNw.h"
CAN_NW_STATE euNwState;
unsigned char ucNwSendPduType; //网络管理控制发送选择 0关闭发送 1发送APP报文 2发送网络管理APP报文
unsigned int uiNwTimCnt;
unsigned int uiNwToutCnt;
unsigned int uiNwRMSCnt;
unsigned int uiNwBsSlpCnt;
unsigned int uiSetNwPduCycVal;
unsigned int uiNwPduCycCnt;
unsigned int uiNwLocWkpOffCnt;
unsigned char ucActiveWakeupBit;
unsigned char ucRemoteWakupFlg;
unsigned char ucNwPowerUpFlg;
unsigned char ucNwNetIdelCheck;
unsigned char ucNwNetIdelFlg;
unsigned char ucPreLocWkpStu;
unsigned char ucNetActiveFlg;
unsigned char ImmediateNM_count;
unsigned int DiagCnt;
unsigned char RepeatMessageReq;
unsigned char DiagMsgRcvFlag;
unsigned char RSSDiagReq;
unsigned char CanNwWakeupSourceCheck(unsigned char LocalSource,unsigned char *RemoteSource);
unsigned char CanNwNetIdelCheck(unsigned char *IdelFlg);
void CanNwInit(void)
{
euNwState = CAN_NW_RESERVED;
uiNwTimCnt = 0u;
uiNwToutCnt = 0u;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR;
uiNwBsSlpCnt = 0u;
uiSetNwPduCycVal = REPEAT_NW_CYCLE_TIMER_THR;
ucActiveWakeupBit = PASSIVE_WAKEUP;
ucRemoteWakupFlg = 0u;
ucNwPowerUpFlg = 0u;
ucNwSendPduType = SEND_DISABLE;
uiNwPduCycCnt = 0;
ucNwNetIdelCheck = 0;
ucNwNetIdelFlg = 0;
ucPreLocWkpStu = PASSIVE_WAKEUP;
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
ucNetActiveFlg = 0;//网络管理使能
Can_Nw_Init();
}
/*
函数名void CanNwHandle(void)
调度周期时间10ms
相关说明:网络管理程序,包含唤醒检测,网络管理状态机切换,网络空闲检测
*/
void CanNwHandle(void)
{
static unsigned char FlgTemp = 0,FlgTemp1 = 0;
//if((euNwState == CAN_NW_RESERVED)||(euNwState == CAN_NW_GOTO_SLEEP))
if(euNwState == CAN_NW_RESERVED)
{
if((ucRemoteWakupFlg == 1)||(I_IGN_SIGN == IGN_ON))
{
FlgTemp1 = 0;
if(FlgTemp == 0)
{
FlgTemp = 1;
C0CTRH &= ~0x0300; // 设置正常模式
}
}
else
{
FlgTemp = 0;
if(FlgTemp1 == 0)
{
C0CTRH |= 0x0300; // 设置监听模式
FlgTemp1 = 1;
}
}
}
if(DiagMsgRcvFlag == 1)
{
DiagCnt = 5000;
DiagMsgRcvFlag = 0;
if(euNwState==CAN_NW_READY_SLEEP)RSSDiagReq=1;
}
ucActiveWakeupBit = CanNwWakeupSourceCheck(ucIgnStus,&ucRemoteWakupFlg);
ucNwNetIdelFlg = CanNwNetIdelCheck(&ucNwNetIdelCheck);
//CAN_2F6.Msg_Bit.NWM_STATE = euNwState;
switch(euNwState)
{
case CAN_NW_RESERVED:
{
if((ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)||(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP))
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
euNwState = CAN_NW_RMS_SLEEP; //睡眠模式到重复消息模式
//设置100ms周期发送NW_PDU
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiNwPduCycCnt = 0;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP) //本地唤醒进入立即发送网络管理报文模式
{
ImmediateNM_count = 0;
uiSetNwPduCycVal = IMMEDIATENM_CYCLE_TIMER_THR;
}
else
{
ImmediateNM_count = 5;
uiSetNwPduCycVal = REPEAT_NW_CYCLE_TIMER_THR;
}
}
else
{
euNwState = CAN_NW_RESERVED;
if(ucNwNetIdelFlg == 1)
{
if(uiNwTimCnt > 5000) //5sec goto sleep
{
ucNwSendPduType = SEND_DISABLE;
SleepDetect();
}
}
}
}
break;
case CAN_NW_RMS_SLEEP:
{
if(ImmediateNM_count >= 4 )uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
if((ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)||(ucNetActiveFlg == NW_NET_ACTIVE))
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //唤醒信号超时1S后
//if(uiNwLocWkpOffCnt == NM_TIMEOUT)
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 500-uiNwPduCycCnt;
ucNwSendPduType = SEND_APP_PDU;
}
}
}
break;
case CAN_NW_RMS_PREPARE_SLEEP:
{
if(ImmediateNM_count >= 4 )uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //唤醒信号超时1S后
/*
if(uiNwLocWkpOffCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 500-uiNwPduCycCnt;;
ucNwSendPduType = SEND_APP_PDU;
}
*/
//SW030BT03
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 500-uiNwPduCycCnt;
ucNwSendPduType = SEND_APP_PDU;
}
}
}
break;
case CAN_NW_RMS_NORMAL_OPERATION:
{
if(ImmediateNM_count >= 4 )uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //唤醒信号超时1S后
/*
if(uiNwLocWkpOffCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 500-uiNwPduCycCnt;;
ucNwSendPduType = SEND_APP_PDU;
}
*/
//SW030BT03
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 500-uiNwPduCycCnt;
ucNwSendPduType = SEND_APP_PDU;
}
}
}
break;
case CAN_NW_RMS_READY_SLEEP:
{
if(ImmediateNM_count >= 4 )uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S超时进入正常模式
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //重复状态模式进入正常模式
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0; //网络管理定时器重置为“0”
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //设置200ms周期发送NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //唤醒信号超时1S后
/*
if(uiNwLocWkpOffCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 0;
ucNwSendPduType = SEND_APP_PDU;
}
*/
//SW030BT03
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //重复状态进入准备睡眠模式
uiNwTimCnt = 500-uiNwPduCycCnt;
ucNwSendPduType = SEND_APP_PDU;
}
}
}
break;
case CAN_NW_NOS_REPEAT_MESSAGE:
{
//if((ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)||(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP))
if(RepeatMessageReq == 1)
{
RepeatMessageReq = 0;
euNwState = CAN_NW_RMS_NORMAL_OPERATION;
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR;
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
ImmediateNM_count = 5;
uiNwPduCycCnt = 0;
}
if((ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)||(ucNetActiveFlg == NW_NET_ACTIVE))
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
ucNwSendPduType = SEND_NWAPP_PDU;
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else
{
//if((uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR)||(uiNwRMSCnt == NM_TIMEOUT))
//if((uiNwLocWkpOffCnt == NM_TIMEOUT)&&(uiNwRMSCnt == NM_TIMEOUT)&&(DiagCnt==NM_TIMEOUT))
if(DiagCnt==NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP;
uiNwTimCnt = 500-uiNwPduCycCnt;;
ucNwSendPduType = SEND_APP_PDU;
}
}
}
break;
case CAN_NW_NOS_READY_SLEEP:
{
if(RepeatMessageReq == 1)
{
RepeatMessageReq = 0;
euNwState = CAN_NW_RMS_NORMAL_OPERATION;
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR;
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
ImmediateNM_count = 5;
uiNwPduCycCnt = 0;
}
//if((ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)||(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP))
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
ucNwSendPduType = SEND_NWAPP_PDU;
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else
{
//if((uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR)||(uiNwRMSCnt == NM_TIMEOUT))
//if((uiNwLocWkpOffCnt == NM_TIMEOUT)&&(uiNwRMSCnt == NM_TIMEOUT)&&(DiagCnt==NM_TIMEOUT))
if(DiagCnt==NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP;
uiNwTimCnt = 500-uiNwPduCycCnt;;
ucNwSendPduType = SEND_APP_PDU;
}
}
}
break;
case CAN_NW_READY_SLEEP:
{
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
euNwState = CAN_NW_NOS_READY_SLEEP;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0;
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
ucNwSendPduType = SEND_NWAPP_PDU;
}
else if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)
{
/*Wait In CAN_NW_NOS_READY_SLEEP */
ucNwSendPduType = SEND_APP_PDU;
if(RepeatMessageReq == 1)
{
RepeatMessageReq = 0;
euNwState = CAN_NW_RMS_READY_SLEEP;
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR;
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
ImmediateNM_count = 5;
uiNwPduCycCnt = 0;
}
}
else
{
if(RSSDiagReq == 1)
{
RSSDiagReq = 0;
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
euNwState = CAN_NW_NOS_READY_SLEEP;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiNwTimCnt = 0;
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
ucNwSendPduType = SEND_NWAPP_PDU;
}
if(uiNwTimCnt > NM_TIMEOUT_TIMER_THR)
{
euNwState = CAN_NW_GOTO_SLEEP;
uiNwTimCnt = 0;
ucNwSendPduType = SEND_DISABLE;
}
if(RepeatMessageReq == 1)
{
RepeatMessageReq = 0;
euNwState = CAN_NW_RMS_READY_SLEEP;
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR;
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR;
ImmediateNM_count = 5;
uiNwPduCycCnt = 0;
}
}
}
break;
case CAN_NW_GOTO_SLEEP:
{
if((ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)||(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP))
{
uiNwLocWkpOffCnt = NM_TIMEOUT_TIMER_THR;
euNwState = CAN_NW_RMS_PREPARE_SLEEP;
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //设置1S超时后进入正常模式定时器
uiSetNwPduCycVal = REPEAT_NW_CYCLE_TIMER_THR; //设置100ms周期发送NW_PDU
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiNwPduCycCnt = 0;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP) //本地唤醒进入立即发送网络管理报文模式
{
ImmediateNM_count = 0;
uiSetNwPduCycVal = IMMEDIATENM_CYCLE_TIMER_THR;
}
else
{
ImmediateNM_count = 5;
uiSetNwPduCycVal = REPEAT_NW_CYCLE_TIMER_THR;
}
}
else
{
if(uiNwTimCnt > WAIT_BUS_SLEEP_TIMER_THR)
{
//满足进入睡眠条件后 执行睡眠程序,注意唤醒后状态机必须切换到 "euNwState = CAN_NW_RESERVED"
if(ucNwNetIdelFlg == 1)
{
uiNwTimCnt = 0;
ucNwSendPduType = SEND_DISABLE;
FlgTemp = 0;
FlgTemp1 = 0;
C0CTRH |= 0x0300; // 设置监听模式
SleepDetect();
}
else
{
//waiting can bus idel
uiNwTimCnt = WAIT_BUS_SLEEP_TIMER_THR;
ucNwSendPduType = SEND_DISABLE;
}
}
}
}
break;
default:
{
euNwState = CAN_NW_GOTO_SLEEP;
uiNwTimCnt = 0;
}
break;
}
TxCanNwMsg_6B7.Msg_Part.RCP3_Address=0x36;
/*
if(euNwState == CAN_NW_RMS_SLEEP || euNwState == CAN_NW_RMS_PREPARE_SLEEP)
TxCanNwMsg_6B7.Msg_Part.RCP3_RMR=1;
else
TxCanNwMsg_6B7.Msg_Part.RCP3_RMR=0;
*/ //20190707一直是0
TxCanNwMsg_6B7.Msg_Part.RCP3_RMR=0;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
TxCanNwMsg_6B7.Msg_Part.RCP3_AWB = 1;
}
else
{
TxCanNwMsg_6B7.Msg_Part.RCP3_AWB = 0;
}
if((euNwState == CAN_NW_NOS_REPEAT_MESSAGE)||(euNwState == CAN_NW_NOS_READY_SLEEP))
{
TxCanNwMsg_6B7.Msg_Part.RCP3_NMSts = 1;
}
else
{
TxCanNwMsg_6B7.Msg_Part.RCP3_NMSts = 0;
}
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_2=0;
}
else
{
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_2=0;
}
if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)
{
TxCanNwMsg_6B7.Msg_Part.RCP3_Wakeup_reasons=2;
}
else if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP)
{
TxCanNwMsg_6B7.Msg_Part.RCP3_Wakeup_reasons=1;
}
else
{
TxCanNwMsg_6B7.Msg_Part.RCP3_Wakeup_reasons=0;
}
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_1=0;
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_4=0;
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_5=0;
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_6=0;
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_7=0;
TxCanNwMsg_6B7.Msg_Part.RCP3_Stayawake_reasons_8=0;
Copy_Array_to_Array(TxCanNwPdu_436.DB,TxCanNwMsg_6B7.Msg_Byte,8);
}
unsigned char CanNwWakeupSourceCheck(unsigned char LocalSource,unsigned char *RemoteSource)
{
static unsigned char ucRemWkpTemp = 0u;
unsigned char ucRtnTemp;
ucRtnTemp = PASSIVE_WAKEUP;
if(ucNwPowerUpFlg == 0u) //上电初始化后进入循环后网络管理定时器清"0"
{
ucNwPowerUpFlg = 1u;
uiNwTimCnt = 0u;
ucRemWkpTemp = 0;
}
else
{
if(uiNwTimCnt > (NM_NORMAL_CYCLE_TIMER_THR+REPEAT_NW_CYCLE_TIMER_THR)||(*RemoteSource == 1)) //300ms检测一次远程标志位
{
if(*RemoteSource == 1)
{
*RemoteSource = 0;
uiNwTimCnt = 0;
ucRemWkpTemp = 1;
}
else
{
ucRemWkpTemp = 0;
}
}
}
if(LocalSource == IGN_ON)
{
ucPreLocWkpStu = LOCAL_ACTIVE_WAKEUP;
ucRtnTemp = LOCAL_ACTIVE_WAKEUP;
}
else if(ucRemWkpTemp == 1)
{
if(ucPreLocWkpStu == LOCAL_ACTIVE_WAKEUP)
{
ucRtnTemp = PASSIVE_WAKEUP;
}
else
{
ucRtnTemp = REMOTE_ACTIVE_WAKEUP;
}
}
else
{
ucPreLocWkpStu = PASSIVE_WAKEUP;
ucRtnTemp = PASSIVE_WAKEUP;
}
return ucRtnTemp;
}
unsigned char CanNwNetIdelCheck(unsigned char *IdelFlg)
{
static unsigned int suiIdelTimCnt = 0;
static unsigned char sucIdelCheckCnt = 0;
if(++suiIdelTimCnt > 30)
{
if(*IdelFlg == 0)
{
if(++sucIdelCheckCnt > 3)
{
sucIdelCheckCnt = 3;
return 1;
}
else
{
suiIdelTimCnt = 0;
}
}
else
{
*IdelFlg = 0;
suiIdelTimCnt = 0;
sucIdelCheckCnt = 0;
}
if(suiIdelTimCnt > 40)
{
suiIdelTimCnt = 40;
}
}
return 0;
}