1004 lines
25 KiB
C
Raw Permalink Normal View History

2023-08-21 16:48:00 +08:00
/******************************************************************************
| File Name : CanTp.c
| Description: Manages segmenting of data in the send direction,
| assembling of data in the receive direction,
| and monitoring of the data stream.
|------------------------------------------------------------------------------
| (c) This software is the proprietary of Wenzhou Changjiang AutoMobile (DAMING)
| All rights are reserved by DAMING.
|------------------------------------------------------------------------------
| Initials Name Company
| -------- -------------------- ----------------------------------------
| DAMING
|------------------------------------------------------------------------------
| R E V I S I O N H I S T O R Y
|------------------------------------------------------------------------------
| Date Version Author Description
| ---------- -------- ------ ----------------------------------------
| 2015-9-1 V1.0 LZY
*****************************************************************************/
/*
TP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 500us <EFBFBD><EFBFBD><EFBFBD>ڵļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡ <EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>ǵ<EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵Ľ<EFBFBD><EFBFBD><EFBFBD>
CAN<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> STmin<EFBFBD><EFBFBD>Ϊ5ms
<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>ʱǰ(1000 ms) <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>ʱǰ(1000 ms) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>TP<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>һ֡
<EFBFBD>ϲ<EFBFBD>ͨ<EFBFBD><EFBFBD>TP<EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>TP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>(<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ 78<EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>78<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ <EFBFBD>ӳ<EFBFBD>1<EFBFBD><EFBFBD>S3ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧʱ<EFBFBD><EFBFBD> 5S)
S3 <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>Ϊ ACTIVE <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ INACTIVE
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧʱ<EFBFBD>1S
TP<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>10% APP<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>90% <EFBFBD><EFBFBD>900ms APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TP<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL = 0<EFBFBD><EFBFBD>
APP<EFBFBD>ʱ<EFBFBD><EFBFBD>TP<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>һ֡
78<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ <EFBFBD>ӳ<EFBFBD>1<EFBFBD><EFBFBD>S3ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧʱ<EFBFBD><EFBFBD> 5S
*/
/******************************************************************************
* Description: : Include File Section
******************************************************************************/
//#include "global.h"
#include "CanTp.h"
/******************************************************************************
* Description: : Global Variable Definition Section
******************************************************************************/
/******************************************************************************
* Description: : Static Variable Definition Section
******************************************************************************/
#define DAMING_TRUE DCM_TRUE
#define DAMING_FALSE DCM_FALSE
#define DAMING_ACTIVE DCM_ACTIVE
#define DAMING_INACTIVE DCM_INACTIVE
static uint8 SaCanTp_u_RxSFBuffer[8]; /*<2A><>֡buffer*/
static TeCanTp_e_TpSts SeCanTp_e_TpSts;/*TP<54><EFBFBD><E3B9A4>״̬*/
static uint8 SeCanTp_u_BS;
static uint8 SeCanTp_u_STmin;
static uint8 SaCanTp_u_RxMFBuffer[CANTP_MFLEN_MAX];/*<2A><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>buffer*/
static uint16 SeCanTp_u_RxLen;
static TeCanTp_e_AddrMethod SeCanTp_e_AddrMethod;/*Ѱַ<D1B0><D6B7>ʽ*/
static uint16 SeCanTp_u_RxMFDataCnt;
static uint8 SeCanTp_u_LastSN;
static uint16 SeCanTp_u_Timer;
static TeCanTp_e_MFTimerSwitch SeCanTp_e_TimerSwitch;
static TeCanTp_e_TxSts SeCanTp_e_TxSts;/*<2A><><EFBFBD><EFBFBD>״̬*/
static uint8 SaCanTp_u_TxDataBuffer[CANTP_MFLEN_MAX];
static uint8 SaCanTp_u_TxBuffer[8];
static uint16 SeCanTp_u_TxLen;
static uint16 SeCanTp_u_TxMFIndex;
static TeCanTp_e_MFTxSts SeCanTp_e_MFTxSts;
static uint8 SeCanTp_u_MFTxSN;
static uint8 SeCanTp_u_MFTxSpacing;
static uint16 SeCanTp_w_RespTimer; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>*/
static uint8 SeCanTp_u_RespFlag;
/******************************************************************************
* Description: : Static Function Prototype Declaration
*****************************************************************************/
/******************************************************************************
* Description: : Write User Function Code
*****************************************************************************/
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeCanTp_e_AddrMethod* LeCanTp_p_AddrMethod , Addressing Method
uint16* LeCanTp_p_DL , Data Length
uint8* LeCanTp_p_DataAddr array of data pointer
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : get frame data
*<EFBFBD>ʱ<EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeCanTp_e_RxBufferSts GetCanTp_e_RxBufferSts(uint8* LeCanTp_p_AddrMethod , uint16* LeCanTp_p_DL , uint8** LeCanTp_p_DataAddr)
{
TeCanTp_e_RxBufferSts LeCanTp_e_RxSts;
if(SeCanTp_e_TpSts == CeCanTp_e_SF_Get)
{
SeCanTp_e_TpSts = CeCanTp_e_Answer;
*LeCanTp_p_AddrMethod = SeCanTp_e_AddrMethod;
*LeCanTp_p_DL = SeCanTp_u_RxLen;
*LeCanTp_p_DataAddr = SaCanTp_u_RxSFBuffer;
LeCanTp_e_RxSts = CeCanTp_e_Full;
}
else if(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)
{
SeCanTp_e_TpSts = CeCanTp_e_Answer;
*LeCanTp_p_AddrMethod = SeCanTp_e_AddrMethod;
*LeCanTp_p_DL = SeCanTp_u_RxLen;
*LeCanTp_p_DataAddr = SaCanTp_u_RxMFBuffer;
LeCanTp_e_RxSts = CeCanTp_e_Full;
}
else
{
LeCanTp_e_RxSts = CeCanTp_e_Empty;
}
return LeCanTp_e_RxSts;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : CanIf<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>TP<EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
*<EFBFBD>ʱ<EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
CanIf_CanIdType LeCanTp_e_CanId,
CanIf_CanDlcType LeCanTp_e_CanDlc,
const CanIf_CanDataType LeCanTp_e_CanSduPtr[])
{
uint8 LeCanTp_u_FrameInfo = 0;
uint8 LeCanTp_u_DataIndex;
(void)LeCanTp_e_Hrh;
(void)LeCanTp_e_CanDlc;
if(LeCanTp_e_CanId == CANTP_ADDR_PHY_REQ)
{
LeCanTp_u_FrameInfo = LeCanTp_e_CanSduPtr[0] >> 4;
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*<2A>ѽ<EFBFBD><D1BD>յ<EFBFBD><D5B5><EFBFBD>֡*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*<2A>ѽ<EFBFBD><D1BD>յ<EFBFBD><D5B5><EFBFBD>֡*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
{
if((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting))/*<2A><><EFBFBD><EFBFBD><EFBFBD>׶<EFBFBD> <20><><EFBFBD>Ͷ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
{
if(LeCanTp_u_FrameInfo == 3)/*FC*/
{
if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x00)/*FS<46>ж<EFBFBD> <20><><EFBFBD><EFBFBD>*/
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_CFGaving;
if(LeCanTp_e_CanSduPtr[1] == 0)
{
SeCanTp_u_BS = CANTP_MFLEN_MAX;
}
else
{
SeCanTp_u_BS = LeCanTp_e_CanSduPtr[1];
}
if(SeCanTp_u_STmin < 0x7FU)
{
SeCanTp_u_STmin = ((LeCanTp_e_CanSduPtr[2]-1)/CANTP_TASK)+1;
}
else
{
SeCanTp_u_STmin = 0;
}
SeCanTp_u_MFTxSpacing = 0;/*<2A><>ʼ<EFBFBD><CABC>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ*/
SeCanTp_u_Timer = 0;
}
else if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x01)/*FS<46>ж<EFBFBD> <20>ȴ<EFBFBD>*/
{
/*<2A>ȴ<EFBFBD> <20><><EFBFBD>ռ<EFBFBD>ʱ<EFBFBD><CAB1> <20>ٵ<EFBFBD>һ<EFBFBD><D2BB> bs*/
SeCanTp_u_Timer = 0;
}
else
{
/*<2A><><EFBFBD>ض<EFBFBD>֡*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
}
}
}
else{/*<2A><>֡*/}
}
else
{
if(LeCanTp_u_FrameInfo == 0)/*SF*/
{
SeCanTp_u_RxLen = LeCanTp_e_CanSduPtr[0]&0x0f;
if((SeCanTp_u_RxLen < 8) && (SeCanTp_u_RxLen > 0))
{
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*<2A><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;
for(LeCanTp_u_DataIndex = 0;LeCanTp_u_DataIndex < SeCanTp_u_RxLen;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxSFBuffer[LeCanTp_u_DataIndex] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex+1];
}
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
}
else
{/*<2A><>֡*/}
}
else if(LeCanTp_u_FrameInfo == 1)/*FF*/
{
SeCanTp_u_RxLen =(uint16)(((uint16)(LeCanTp_e_CanSduPtr[0] & 0x0f) << 8) + (uint16)LeCanTp_e_CanSduPtr[1]);
if(SeCanTp_u_RxLen > CANTP_MFLEN_MAX) // add for 15765-2-6.5.2.2
{
/*<2A><>֡*/
/*ֱ<>ӻظ<D3BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡*/
SaCanTp_u_TxBuffer[0] = 0x30;
SaCanTp_u_TxBuffer[1] = 2;
SaCanTp_u_TxBuffer[2] = CANTP_RX_STMIN;
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
}
else if(SeCanTp_u_RxLen > 7)
{
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;
/*<2A><><EFBFBD>ö<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
SeCanTp_u_RxMFDataCnt = 0;
/*<2A><><EFBFBD><EFBFBD>ǰ6<C7B0><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
for(LeCanTp_u_DataIndex = 2;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxMFBuffer[SeCanTp_u_RxMFDataCnt] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex];
SeCanTp_u_RxMFDataCnt++;
}
SeCanTp_u_LastSN = 1;
/*ֱ<>ӻظ<D3BB><D8B8><EFBFBD><EFBFBD><EFBFBD>֡*/
SaCanTp_u_TxBuffer[0] = 0x30;
SaCanTp_u_TxBuffer[1] = 0;
SaCanTp_u_TxBuffer[2] = CANTP_RX_STMIN;
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_TpSts = CeCanTp_e_MF_CFTakein;/*<2A>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>֡*/
SeCanTp_e_TimerSwitch = CeCanTp_e_Cr;
SeCanTp_u_Timer = 0;
}
else
{/*<2A><>֡*/}
}
else if(LeCanTp_u_FrameInfo == 2)/*CF*/
{
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)
{
/*<2A><><EFBFBD><EFBFBD>SN*/
SeCanTp_u_Timer = 0;
if((LeCanTp_e_CanSduPtr[0]&0x0F) == (SeCanTp_u_LastSN & 0x0F))
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SeCanTp_u_LastSN++;
if((LeCanTp_e_CanDlc < 8)&&(LeCanTp_e_CanDlc >0)&&(SeCanTp_u_RxMFDataCnt < (SeCanTp_u_RxLen - LeCanTp_e_CanDlc)))
{
SeCanTp_e_TpSts = CeCanTp_e_Idel; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLC
}
else
{
for(LeCanTp_u_DataIndex = 1;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
{
if(SeCanTp_u_RxMFDataCnt < SeCanTp_u_RxLen)
{
SaCanTp_u_RxMFBuffer[SeCanTp_u_RxMFDataCnt] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex];
SeCanTp_u_RxMFDataCnt++;
}
else
{
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
break;
}
if(SeCanTp_u_RxMFDataCnt == SeCanTp_u_RxLen)
{
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
break;
}
}
}
}
else
{
/*SN<53><4E><EFBFBD><EFBFBD> <20><>֡*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
}
else
{
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> <20><>֡<EFBFBD><D6A1><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>֡<EFBFBD>׶<EFBFBD> <20><>֡*/
}
}
else
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>֡ <20><> <20><><EFBFBD><EFBFBD>״̬֡*/
}
}
}
else
{
}
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : CanIf<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>TP<EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
*<EFBFBD>ʱ<EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
#if (CANTP_ADDRFUNC_MF_FORBID == DAMING_TRUE)
void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
CanIf_CanIdType LeCanTp_e_CanId,
CanIf_CanDlcType LeCanTp_e_CanDlc,
const CanIf_CanDataType LeCanTp_e_CanSduPtr[])
{
uint8 LeCanTp_u_FrameInfo = 0;
uint8 LeCanTp_u_DataIndex;
(void)LeCanTp_e_Hrh;
(void)LeCanTp_e_CanDlc;
if(LeCanTp_e_CanId == CANTP_ADDR_FUNC_REQ)
{
LeCanTp_u_FrameInfo = LeCanTp_e_CanSduPtr[0] >> 4;
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*<2A>ѽ<EFBFBD><D1BD>յ<EFBFBD><D5B5><EFBFBD>֡*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*<2A>ѽ<EFBFBD><D1BD>յ<EFBFBD><D5B5><EFBFBD>֡*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
{
if((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting))/*<2A><><EFBFBD><EFBFBD><EFBFBD>׶<EFBFBD> <20><><EFBFBD>Ͷ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
{
if(LeCanTp_u_FrameInfo == 3)/*FC*/
{
if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x00)/*FS<46>ж<EFBFBD> <20><><EFBFBD><EFBFBD>*/
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_CFGaving;
if(LeCanTp_e_CanSduPtr[1] == 0)
{
SeCanTp_u_BS = CANTP_MFLEN_MAX;
}
else
{
SeCanTp_u_BS = LeCanTp_e_CanSduPtr[1];
}
if(SeCanTp_u_STmin < 0x7FU)
{
SeCanTp_u_STmin = ((LeCanTp_e_CanSduPtr[2]-1)/CANTP_TASK)+1;
}
else
{
SeCanTp_u_STmin = 0;
}
SeCanTp_u_MFTxSpacing = 0;/*<2A><>ʼ<EFBFBD><CABC>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ*/
}
else if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x01)/*FS<46>ж<EFBFBD> <20>ȴ<EFBFBD>*/
{
/*<2A>ȴ<EFBFBD> <20><><EFBFBD>ռ<EFBFBD>ʱ<EFBFBD><CAB1> <20>ٵ<EFBFBD>һ<EFBFBD><D2BB> bs*/
SeCanTp_u_Timer = 0;
}
else
{
/*<2A><><EFBFBD>ض<EFBFBD>֡*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
}
}
}
}
else
{
if(LeCanTp_u_FrameInfo == 0)/*SF*/
{
SeCanTp_u_RxLen = LeCanTp_e_CanSduPtr[0]&0x0f;
if((SeCanTp_u_RxLen < 8) && (SeCanTp_u_RxLen > 0))
{
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*<2A><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
SeCanTp_e_AddrMethod = CeCanTp_e_Functional;
for(LeCanTp_u_DataIndex = 0;LeCanTp_u_DataIndex < SeCanTp_u_RxLen;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxSFBuffer[LeCanTp_u_DataIndex] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex+1];
}
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
}
else
{/*<2A><>֡*/}
}
else if(LeCanTp_u_FrameInfo == 1)/*FF*/
{
SeCanTp_u_RxLen =(uint16)(((uint16)(LeCanTp_e_CanSduPtr[0] & 0x0f) << 8) + (uint16)LeCanTp_e_CanSduPtr[1]);
if(SeCanTp_u_RxLen > 7)
{
SeCanTp_e_AddrMethod = CeCanTp_e_Functional;
/*<2A><><EFBFBD>ö<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
//SeCanTp_u_RxLen =(uint16)(((uint16)(LeCanTp_e_CanSduPtr[0] & 0x0f) << 8) + (uint16)LeCanTp_e_CanSduPtr[1]);
SeCanTp_u_RxMFDataCnt = 0;
/*<2A><><EFBFBD><EFBFBD>ǰ6<C7B0><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
for(LeCanTp_u_DataIndex = 2;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxMFBuffer[SeCanTp_u_RxMFDataCnt] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex];
SeCanTp_u_RxMFDataCnt++;
}
SeCanTp_u_LastSN = 1;
/*ֱ<>ӻظ<D3BB><D8B8><EFBFBD><EFBFBD><EFBFBD>֡*/
SaCanTp_u_TxBuffer[0] = 0x30;
SaCanTp_u_TxBuffer[1] = 0;
SaCanTp_u_TxBuffer[2] = CANTP_RX_STMIN;
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_TpSts = CeCanTp_e_MF_CFTakein;/*<2A>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>֡*/
SeCanTp_e_TimerSwitch = CeCanTp_e_Cr;
SeCanTp_u_Timer = 0;
}
else
{/*<2A><>֡*/}
}
else if(LeCanTp_u_FrameInfo == 2)/*CF*/
{
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)
{
/*<2A><><EFBFBD><EFBFBD>SN*/
if((LeCanTp_e_CanSduPtr[0]&0x0F) == ((SeCanTp_u_LastSN+1)&0x0F))
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SeCanTp_u_LastSN++;
for(LeCanTp_u_DataIndex = 1;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
{
if(SeCanTp_u_RxMFDataCnt < SeCanTp_u_RxLen)
{
SaCanTp_u_RxMFBuffer[SeCanTp_u_RxMFDataCnt] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex];
SeCanTp_u_RxMFDataCnt++;
}
else
{
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
break;
}
if(SeCanTp_u_RxMFDataCnt == SeCanTp_u_RxLen)
{
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
break;
}
}
}
else
{
/*SN<53><4E><EFBFBD><EFBFBD> <20><>֡*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
}
else
{
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> <20><>֡<EFBFBD><D6A1><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>֡<EFBFBD>׶<EFBFBD> <20><>֡*/
}
}
else
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>֡ <20><> <20><><EFBFBD><EFBFBD>״̬֡*/
}
}
}
else
{}
}
#else
void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
CanIf_CanIdType LeCanTp_e_CanId,
CanIf_CanDlcType LeCanTp_e_CanDlc,
const CanIf_CanDataType LeCanTp_e_CanSduPtr[])
{
uint8 LeCanTp_u_FrameInfo = 0;
uint8 LeCanTp_u_DataIndex;
(void)LeCanTp_e_Hrh;
(void)LeCanTp_e_CanDlc;
if(LeCanTp_e_CanId == CANTP_ADDR_FUNC_REQ)
{
LeCanTp_u_FrameInfo = LeCanTp_e_CanSduPtr[0] >> 4;
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*<2A>ѽ<EFBFBD><D1BD>յ<EFBFBD><D5B5><EFBFBD>֡*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*<2A>ѽ<EFBFBD><D1BD>յ<EFBFBD><D5B5><EFBFBD>֡*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
{
/*<2A><>֡*/
}
else
{
if(LeCanTp_u_FrameInfo == 0)/*SF*/
{
SeCanTp_u_RxLen = LeCanTp_e_CanSduPtr[0]&0x0f;
if(SeCanTp_u_RxLen < 8)
{
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*<2A><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
SeCanTp_e_AddrMethod = CeCanTp_e_Functional;
for(LeCanTp_u_DataIndex = 0;LeCanTp_u_DataIndex < SeCanTp_u_RxLen;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxSFBuffer[LeCanTp_u_DataIndex] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex+1];
}
SeCanTp_u_RespFlag = DAMING_TRUE;
SeCanTp_w_RespTimer = 1000U;
}
else
{/*<2A><>֡*/}
}
}
}
else
{}
}
#endif
/******************************************************************************
*<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>ע :
*****************************************************************************/
TeCanTp_e_TxResult SetCanTp_TxBuffer(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p_DataAddr[])
{
TeCanTp_e_TxResult LeCanTp_e_TxResult;
uint16 LeCanTp_s_Index;
/*ֻ<><D6BB><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>׶<EFBFBD> <20><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if ((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_TxSts == CeCanTp_e_Tx_Idle))
{
SeCanTp_u_RespFlag = DAMING_FALSE;
SeCanTp_w_RespTimer = 1000U;
if(LeCanTp_p_DL == 0)
{
/*<2A>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD>*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
else if(LeCanTp_p_DL < 8)
{
/*<2A><>֡ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>*/
SaCanTp_u_TxBuffer[0] = (uint8)LeCanTp_p_DL;
for(LeCanTp_s_Index = 1; LeCanTp_s_Index < 8; LeCanTp_s_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_s_Index] = 0x55;
}
for(LeCanTp_s_Index = 0; LeCanTp_s_Index < LeCanTp_p_DL; LeCanTp_s_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_s_Index + 1] = LeCanTp_p_DataAddr[LeCanTp_s_Index];
}
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
else
{
/*<2A><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>*/
SeCanTp_e_TxSts = CeCanTp_e_Tx_Busy;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ*/
for(LeCanTp_s_Index = 0; LeCanTp_s_Index < LeCanTp_p_DL; LeCanTp_s_Index++)
{
SaCanTp_u_TxDataBuffer[LeCanTp_s_Index] = LeCanTp_p_DataAddr[LeCanTp_s_Index];
}
SeCanTp_u_TxLen = LeCanTp_p_DL;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡*/
SaCanTp_u_TxBuffer[0] = 0x10 + (uint8)(LeCanTp_p_DL >> 8);
SaCanTp_u_TxBuffer[1] = (uint8)(LeCanTp_p_DL & 0x00ff);
for(SeCanTp_u_TxMFIndex = 0; SeCanTp_u_TxMFIndex < 6; SeCanTp_u_TxMFIndex++)
{
SaCanTp_u_TxBuffer[SeCanTp_u_TxMFIndex+2] = SaCanTp_u_TxDataBuffer[SeCanTp_u_TxMFIndex];
}
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_TimerSwitch = CeCanTp_e_Bs;
SeCanTp_u_Timer = 0;
SeCanTp_u_MFTxSN = 1;
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;
}
LeCanTp_e_TxResult = CeCanTp_e_Tx_Succeed;
}
else
{
LeCanTp_e_TxResult = CeCanTp_e_Tx_Wrong;
}
return LeCanTp_e_TxResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 78<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>ע :
*****************************************************************************/
TeCanTp_e_TxResult SetCanTp_Tx_78Neg(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p_DataAddr[])
{
TeCanTp_e_TxResult LeCanTp_e_TxResult;
uint8 LeCanTp_u_Index;
/*ֻ<><D6BB><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>׶<EFBFBD> <20><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if ((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_TxSts == CeCanTp_e_Tx_Idle))
{
if(LeCanTp_p_DL < 8)
{
/*<2A><>֡ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>*/
SaCanTp_u_TxBuffer[0] = (uint8)LeCanTp_p_DL;
for(LeCanTp_u_Index = 1; LeCanTp_u_Index < 8; LeCanTp_u_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_u_Index] = 0x55;
}
for(LeCanTp_u_Index = 0; LeCanTp_u_Index < LeCanTp_p_DL; LeCanTp_u_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_u_Index + 1] = LeCanTp_p_DataAddr[LeCanTp_u_Index];
}
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
LeCanTp_e_TxResult = CeCanTp_e_Tx_Succeed;
SeCanTp_w_RespTimer = 0u;
}
else
{
LeCanTp_e_TxResult = CeCanTp_e_Tx_Wrong;
}
}
else
{
LeCanTp_e_TxResult = CeCanTp_e_Tx_Wrong;
}
return LeCanTp_e_TxResult;
}
/******************************************************************************
*<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 InitCanTp_Parameter(void)
{
uint8 LeCanTp_u_InitIndex;
for(LeCanTp_u_InitIndex = 0; LeCanTp_u_InitIndex<8 ; LeCanTp_u_InitIndex++)
{
SaCanTp_u_RxSFBuffer[LeCanTp_u_InitIndex] = 0;/*<2A><>֡buffer*/
SaCanTp_u_TxBuffer[LeCanTp_u_InitIndex] = 0;
SaCanTp_u_TxDataBuffer[LeCanTp_u_InitIndex] = 0;
SaCanTp_u_RxMFBuffer[LeCanTp_u_InitIndex] = 0;/*<2A><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>buffer*/
}
SeCanTp_e_TpSts = CeCanTp_e_Idel;/*TP<54><EFBFBD><E3B9A4>״̬*/
SeCanTp_u_BS = 0;
SeCanTp_u_STmin = 10;
SeCanTp_u_RxLen = 0;
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;/*Ѱַ<D1B0><D6B7>ʽ*/
SeCanTp_u_RxMFDataCnt = 0;
SeCanTp_u_LastSN = 0;
SeCanTp_u_Timer = 0;
SeCanTp_e_TimerSwitch = 0;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;/*<2A><><EFBFBD><EFBFBD>״̬*/
SeCanTp_u_TxLen = 0;
SeCanTp_u_TxMFIndex = 0;
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_u_MFTxSN = 0;
SeCanTp_u_MFTxSpacing = 0;
SeCanTp_w_RespTimer = 1000U; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>*/
SeCanTp_u_RespFlag = DAMING_FALSE;
}
/******************************************************************************
*<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 MngCanTp_MainFunction(void)
{
uint8 LeCanTp_u_Index;
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)/*<2A><>ʱ*/
{
if(SeCanTp_e_TimerSwitch == CeCanTp_e_Cr)
{
if(SeCanTp_u_Timer > CANTP_CR_TIMEOUT)
{
/*<2A><>ʱ*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
else
{
SeCanTp_u_Timer++;
}
}
else
{
SeCanTp_e_TimerSwitch = CeCanTp_e_Cr;
SeCanTp_u_Timer = 0;
}
}
else
{
}
if(SeCanTp_u_RespFlag == DAMING_TRUE)/*APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ*/
{
if(SeCanTp_w_RespTimer > CANTP_APP_RESP_78NEG)
{
/*<2A><>ʱ*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_u_RespFlag = DAMING_FALSE;
SeCanTp_w_RespTimer = 1000U;
}
else
{
SeCanTp_w_RespTimer++;
}
}
else
{
SeCanTp_w_RespTimer = 1000U;
}
if(SeCanTp_e_TpSts == CeCanTp_e_Answer)
{
if(SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting)/*FC<46>ȴ<EFBFBD><C8B4><EFBFBD>ʱ*/
{
if(SeCanTp_e_TimerSwitch == CeCanTp_e_Bs)
{
if(SeCanTp_u_Timer > CANTP_BS_TIMEOUT)
{
/*<2A><>ʱ*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
}
else
{
SeCanTp_u_Timer++;
}
}
else
{
SeCanTp_e_TimerSwitch = CeCanTp_e_Bs;
SeCanTp_u_Timer = 0;
}
}
else
{}
if(SeCanTp_e_MFTxSts == CeCanTp_e_TX_CFGaving)/*<2A><><EFBFBD><EFBFBD>*/
{
/*CF*/
SeCanTp_u_MFTxSpacing++;
if(SeCanTp_u_BS > 0)
{
if(SeCanTp_u_MFTxSpacing > SeCanTp_u_STmin)
{
SeCanTp_u_MFTxSpacing = 1;
if(SeCanTp_u_TxMFIndex < (SeCanTp_u_TxLen-7))
{
SaCanTp_u_TxBuffer[0] = 0x20 + SeCanTp_u_MFTxSN;
for(LeCanTp_u_Index = 0; LeCanTp_u_Index < 7; LeCanTp_u_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_u_Index + 1] = SaCanTp_u_TxDataBuffer[SeCanTp_u_TxMFIndex++];
}
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_u_MFTxSN += 1;
SeCanTp_u_MFTxSN &= 0x0f;
if(SeCanTp_u_BS == 1u)
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡*/
SeCanTp_u_Timer = 0;
SeCanTp_e_TimerSwitch = CeCanTp_e_Bs;
}
else
{
SeCanTp_u_BS--;
}
}
else
{
/*<2A><><EFBFBD><EFBFBD>һ֡*/
uint8 LeCanTp_u_Cnt = SeCanTp_u_TxLen - SeCanTp_u_TxMFIndex;
SaCanTp_u_TxBuffer[0] = 0x20 + SeCanTp_u_MFTxSN;
for(LeCanTp_u_Index = 1; LeCanTp_u_Index < 8; LeCanTp_u_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_u_Index] = 0x55;
}
for(LeCanTp_u_Index = 0; LeCanTp_u_Index < LeCanTp_u_Cnt; LeCanTp_u_Index++)
{
SaCanTp_u_TxBuffer[LeCanTp_u_Index + 1] = SaCanTp_u_TxDataBuffer[SeCanTp_u_TxMFIndex++];
}
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
SeCanTp_u_BS = 0;
}
}
else
{}
}
else
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡*/
SeCanTp_u_Timer = 0;
SeCanTp_e_TimerSwitch = CeCanTp_e_Bs;
}
}
else
{
}
}
else
{
}
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ :
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : S3 ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
S3 <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>Ϊ DAMING_ACTIVE <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ DAMING_INACTIVE
*<EFBFBD>ʱ<EFBFBD><EFBFBD> :
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 GetCanTp_u_S3Sts(void)
{
uint8 LeCanTp_u_Ret;
if(SeCanTp_e_TpSts == CeCanTp_e_Idel)
{
LeCanTp_u_Ret = DAMING_ACTIVE;
}
else
{
LeCanTp_u_Ret = DAMING_INACTIVE;
}
return LeCanTp_u_Ret;
}