1004 lines
25 KiB
C
1004 lines
25 KiB
C
|
/******************************************************************************
|
|||
|
| 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;
|
|||
|
}
|