HWBS/ECU_APP/CanNw/CanNw.c

717 lines
20 KiB
C
Raw Normal View History

2023-08-21 16:48:00 +08:00
#include "CanNw.h"
CAN_NW_STATE euNwState;
unsigned char ucNwSendPduType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>ѡ<EFBFBD><D1A1> 0<><30><EFBFBD>رշ<D8B1><D5B7><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>
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;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
Can_Nw_Init();
}
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void CanNwHandle(void)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>10ms
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣬰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>
*/
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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
}
}
else
{
FlgTemp = 0;
if(FlgTemp1 == 0)
{
C0CTRH |= 0x0300; // <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ģʽ
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; //˯<><CBAF>ģʽ<C4A3><CABD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>Ϣģʽ
//<2F><><EFBFBD><EFBFBD>100ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiNwPduCycCnt = 0;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP) //<2F><><EFBFBD>ػ<EFBFBD><D8BB>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
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<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //<2F><><EFBFBD><EFBFBD><EFBFBD>źų<C5BA>ʱ1S<31><53>
//if(uiNwLocWkpOffCnt == NM_TIMEOUT)
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
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<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //<2F><><EFBFBD><EFBFBD><EFBFBD>źų<C5BA>ʱ1S<31><53>
/*
if(uiNwLocWkpOffCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
uiNwTimCnt = 500-uiNwPduCycCnt;;
ucNwSendPduType = SEND_APP_PDU;
}
*/
//SW030BT03
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
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<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //<2F><><EFBFBD><EFBFBD><EFBFBD>źų<C5BA>ʱ1S<31><53>
/*
if(uiNwLocWkpOffCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
uiNwTimCnt = 500-uiNwPduCycCnt;;
ucNwSendPduType = SEND_APP_PDU;
}
*/
//SW030BT03
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
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<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
if(uiNwRMSCnt == NM_TIMEOUT) //1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
euNwState = CAN_NW_NOS_REPEAT_MESSAGE; //<2F>ظ<EFBFBD>״̬ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiNwTimCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0<EFBFBD><30>
uiSetNwPduCycVal = NM_NORMAL_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>200ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
ucNwSendPduType = SEND_NWAPP_PDU;
}
}
}
else
{
//if(uiNwTimCnt > REPEAT_MESSAGE_TIMER_THR) //<2F><><EFBFBD><EFBFBD><EFBFBD>źų<C5BA>ʱ1S<31><53>
/*
if(uiNwLocWkpOffCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
uiNwTimCnt = 0;
ucNwSendPduType = SEND_APP_PDU;
}
*/
//SW030BT03
if(uiNwRMSCnt == NM_TIMEOUT)
{
euNwState = CAN_NW_READY_SLEEP; //<2F>ظ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>˯<EFBFBD><CBAF>ģʽ
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; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
ucNwSendPduType = SEND_NWAPP_PDU;
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
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; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
ucNwSendPduType = SEND_NWAPP_PDU;
}
else /*if(ucActiveWakeupBit == REMOTE_ACTIVE_WAKEUP)*/
{
uiNwRMSCnt = REPEAT_MESSAGE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
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; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
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; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
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; //<2F><><EFBFBD><EFBFBD>1S<31><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱ<EFBFBD><CAB1>
uiSetNwPduCycVal = REPEAT_NW_CYCLE_TIMER_THR; //<2F><><EFBFBD><EFBFBD>100ms<6D><73><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>NW_PDU
uiNwTimCnt = 0;
ucNwSendPduType = SEND_NWAPP_PDU;
uiNwPduCycCnt = 0;
if(ucActiveWakeupBit == LOCAL_ACTIVE_WAKEUP) //<2F><><EFBFBD>ػ<EFBFBD><D8BB>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
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)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD><CBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ִ<><D6B4>˯<EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>Ѻ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD> "euNwState = CAN_NW_RESERVED"
if(ucNwNetIdelFlg == 1)
{
uiNwTimCnt = 0;
ucNwSendPduType = SEND_DISABLE;
FlgTemp = 0;
FlgTemp1 = 0;
C0CTRH |= 0x0300; // <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ģʽ
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һֱ<D2BB><D6B1>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) //<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>"0"
{
ucNwPowerUpFlg = 1u;
uiNwTimCnt = 0u;
ucRemWkpTemp = 0;
}
else
{
if(uiNwTimCnt > (NM_NORMAL_CYCLE_TIMER_THR+REPEAT_NW_CYCLE_TIMER_THR)||(*RemoteSource == 1)) //300ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Զ<EFBFBD>̱<EFBFBD>־λ
{
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;
}