215 lines
8.4 KiB
C
215 lines
8.4 KiB
C
|
|
|||
|
/******************************************************************************
|
|||
|
| File Name : Dcm.c
|
|||
|
| Description: <EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|------------------------------------------------------------------------------
|
|||
|
| (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-10-10 1.0.1 chenlianwen <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
*****************************************************************************/
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
* Description: : Include File Section
|
|||
|
******************************************************************************/
|
|||
|
#include "Dcm.h"
|
|||
|
#include "can_drv.h"
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
* Description: : Global Variable Definition Section
|
|||
|
******************************************************************************/
|
|||
|
const uint16 PeriodicDidServeTxTmMax[5]={0xFFFF,1000,500,100,0xFFFF};
|
|||
|
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
* Description: : Static Variable Definition Section
|
|||
|
******************************************************************************/
|
|||
|
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
* Description: : Static Function Prototype Declaration
|
|||
|
*****************************************************************************/
|
|||
|
|
|||
|
static void MngDcm_ConditionStateControl(void);
|
|||
|
/******************************************************************************
|
|||
|
* Description: : Write User Function Code
|
|||
|
*****************************************************************************/
|
|||
|
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void MngDcm_MainFunction(void)
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : void
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
*<EFBFBD>༭ʱ<EFBFBD><EFBFBD> : 2015-10-10
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD>ע :
|
|||
|
*****************************************************************************/
|
|||
|
void MngDcm_MainFunction(void)
|
|||
|
{
|
|||
|
uint8 LeDcm_u_SidIndex;
|
|||
|
uint8 LeDcm_u_CheckSessionResult;
|
|||
|
uint8 LeDcm_u_CheckSecurityAccessResult;
|
|||
|
uint8 LeDcm_u_CheckAddressResult;
|
|||
|
uint8 LaDcm_u_TempBuffer[6];
|
|||
|
uint8 LeDcm_u_CheckMinDLResult;
|
|||
|
uint8 LeDcm_u_CollectInfoResult;
|
|||
|
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
MngDcm_ConditionStateControl();
|
|||
|
|
|||
|
/*<2A><>ȡTP<54><50><EFBFBD><EFBFBD><EFBFBD>ݽӿ<DDBD> DL SID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
LeDcm_u_CollectInfoResult = MngDcm_CollectRequstInfo();
|
|||
|
|
|||
|
if(DCM_CHECK_OK == LeDcm_u_CollectInfoResult)
|
|||
|
{
|
|||
|
MngDcm_ResetS3serverTime(); /*S3server <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>*/
|
|||
|
LeDcm_u_SidIndex = MngDcm_SIDCheckAvailable(VeDcm_h_RqustInfo.Sid); /*<2A><><EFBFBD><EFBFBD>SID<49>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
|
|||
|
if( DCM_NORESULT!=LeDcm_u_SidIndex)
|
|||
|
{
|
|||
|
|
|||
|
LeDcm_u_CheckSessionResult = MngDcm_SIDCheckSession(LeDcm_u_SidIndex); /*<2A><><EFBFBD><EFBFBD>ģʽ<C4A3>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
|
|||
|
if(DCM_CHECK_OK == LeDcm_u_CheckSessionResult)
|
|||
|
{
|
|||
|
|
|||
|
LeDcm_u_CheckSecurityAccessResult = MngDcm_SIDCheckSecurityAccess(LeDcm_u_SidIndex); /*<2A><><EFBFBD>鰲ȫȨ<C8AB><C8A8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
if(DCM_CHECK_OK == LeDcm_u_CheckSecurityAccessResult )
|
|||
|
{
|
|||
|
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
|||
|
{
|
|||
|
LeDcm_u_CheckAddressResult = MngDcm_SIDFuncAddressAvailable(LeDcm_u_SidIndex); /*<2A>Ƿ<EFBFBD>֧<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ѱַ*/
|
|||
|
if(DCM_CHECK_NOK == LeDcm_u_CheckAddressResult) /*<2A><>֧<EFBFBD><D6A7>*/
|
|||
|
{
|
|||
|
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ӧ*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LeDcm_u_CheckMinDLResult = MngDcm_SIDCheckMinDL(LeDcm_u_SidIndex,VeDcm_h_RqustInfo.DL); /*<2A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СDL*/
|
|||
|
if( DCM_CHECK_OK == LeDcm_u_CheckMinDLResult)
|
|||
|
{
|
|||
|
LeDcm_u_FinallyResult = CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SidFunction(); /*<2A><><EFBFBD><EFBFBD>SID<49><44><EFBFBD>ں<EFBFBD><DABA><EFBFBD>*/
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>NRC13
|
|||
|
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
|
|||
|
LeDcm_u_CheckMinDLResult = MngDcm_SIDCheckMinDL(LeDcm_u_SidIndex,VeDcm_h_RqustInfo.DL); /*<2A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СDL*/
|
|||
|
if( DCM_CHECK_OK == LeDcm_u_CheckMinDLResult)
|
|||
|
{
|
|||
|
LeDcm_u_FinallyResult = CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SidFunction(); /*<2A><><EFBFBD><EFBFBD>SID<49><44><EFBFBD>ں<EFBFBD><DABA><EFBFBD>*/
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>NRC13
|
|||
|
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC33]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>NRC7F
|
|||
|
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7F]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
|||
|
{
|
|||
|
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ӧ*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
|||
|
|
|||
|
}else
|
|||
|
{//<2F><><EFBFBD><EFBFBD>NRC11
|
|||
|
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC11]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
|||
|
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
|||
|
}
|
|||
|
}
|
|||
|
}else
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if(DCM_S3SEVERTIMER_CONTINUE == GetCanTp_u_S3Sts())
|
|||
|
{
|
|||
|
MngDcmS3ServerCountCutDown(); /*S3server <20><>ʱ <20><> <20><>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʱ*/
|
|||
|
}
|
|||
|
|
|||
|
MngDcmKeyErrorDelayCountCutDown(); /*27 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ*/
|
|||
|
|
|||
|
DtcDiagConditionChk();
|
|||
|
if(GetDtcEnable())
|
|||
|
CanDTC_Task();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void MngDcm_ConditionStateControl(void)
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : void
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(S3severtime<EFBFBD><EFBFBD>)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
*<EFBFBD>༭ʱ<EFBFBD><EFBFBD> : 2015-10-10
|
|||
|
|
|||
|
*<EFBFBD><EFBFBD>ע :
|
|||
|
*****************************************************************************/
|
|||
|
void MngDcm_ConditionStateControl(void)
|
|||
|
{
|
|||
|
if(0U == MngDcm_GetS3serverTime())
|
|||
|
{
|
|||
|
MngDcm_ChangeToDefaltSession();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|