215 lines
8.4 KiB
C
Raw Permalink Normal View History

2024-07-07 16:42:04 +08:00
/******************************************************************************
| 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();
}
}