2024-05-26 08:08:32 +08:00

215 lines
8.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
| File Name : Dcm.c
| Description: Õï¶Ï·þÎñÈë¿Ú
|------------------------------------------------------------------------------
| (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 ³õʼ°æ
*****************************************************************************/
/******************************************************************************
* 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
*****************************************************************************/
/******************************************************************************
*º¯ÊýÃû³Æ : void MngDcm_MainFunction(void)
*²ÎÊý : void
*·µ»ØÖµ : void
*ÃèÊö : Õï¶Ï×ÜÈë¿Úº¯Êý
*±à¼­Ê±¼ä : 2015-10-10
*±¸×¢ :
*****************************************************************************/
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;
/*¸ù¾ÝÌõ¼þµ÷Õû²ÎÊý*/
MngDcm_ConditionStateControl();
/*»ñÈ¡TP²ãÊý¾Ý½Ó¿Ú DL SID ÇëÇóÀàÐÍ*/
LeDcm_u_CollectInfoResult = MngDcm_CollectRequstInfo();
if(DCM_CHECK_OK == LeDcm_u_CollectInfoResult)
{
MngDcm_ResetS3serverTime(); /*S3server ¼ÆÊ±¼ÆÊýÖµÖØÐÂ×°ÔØ*/
LeDcm_u_SidIndex = MngDcm_SIDCheckAvailable(VeDcm_h_RqustInfo.Sid); /*¼ì²éSIDÊÇ·ñÖ§³Ö*/
if( DCM_NORESULT!=LeDcm_u_SidIndex)
{
LeDcm_u_CheckSessionResult = MngDcm_SIDCheckSession(LeDcm_u_SidIndex); /*¼ì²éģʽÊÇ·ñÖ§³Ö*/
if(DCM_CHECK_OK == LeDcm_u_CheckSessionResult)
{
LeDcm_u_CheckSecurityAccessResult = MngDcm_SIDCheckSecurityAccess(LeDcm_u_SidIndex); /*¼ì²é°²È«È¨ÏÞÊÇ·ñÂú×ã*/
if(DCM_CHECK_OK == LeDcm_u_CheckSecurityAccessResult )
{
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
{
LeDcm_u_CheckAddressResult = MngDcm_SIDFuncAddressAvailable(LeDcm_u_SidIndex); /*ÊÇ·ñÖ§³Ö¹¦ÄÜѰַ*/
if(DCM_CHECK_NOK == LeDcm_u_CheckAddressResult) /*²»Ö§³Ö*/
{
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý 0Êý¾ÝΪ²»ÏìÓ¦*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
}
else
{
LeDcm_u_CheckMinDLResult = MngDcm_SIDCheckMinDL(LeDcm_u_SidIndex,VeDcm_h_RqustInfo.DL); /*ÊÇ·ñÂú×ã×îСDL*/
if( DCM_CHECK_OK == LeDcm_u_CheckMinDLResult)
{
LeDcm_u_FinallyResult = CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SidFunction(); /*µ÷ÓÃSIDÈë¿Úº¯Êý*/
}
else
{
//ÉèÖÃNRC13
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*ÕûÀí¸ºÏìÓ¦Êý¾Ý*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
}
}
}
else
{
LeDcm_u_CheckMinDLResult = MngDcm_SIDCheckMinDL(LeDcm_u_SidIndex,VeDcm_h_RqustInfo.DL); /*ÊÇ·ñÂú×ã×îСDL*/
if( DCM_CHECK_OK == LeDcm_u_CheckMinDLResult)
{
LeDcm_u_FinallyResult = CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SidFunction(); /*µ÷ÓÃSIDÈë¿Úº¯Êý*/
}
else
{
//ÉèÖÃNRC13
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*ÕûÀí¸ºÏìÓ¦Êý¾Ý*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
}
}
}
else
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC33]); /*ÕûÀí¸ºÏìÓ¦Êý¾Ý*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
}
}
else
{
//ÉèÖÃNRC7F
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7F]); /*ÕûÀí¸ºÏìÓ¦Êý¾Ý*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
}
}
else
{
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
{
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý 0Êý¾ÝΪ²»ÏìÓ¦*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
}else
{//ÉèÖÃNRC11
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC11]); /*ÕûÀí¸ºÏìÓ¦Êý¾Ý*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*µ÷Óýӿڷ¢ËÍÏìÓ¦Êý¾Ý*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
}
}
}else
{
}
if(DCM_S3SEVERTIMER_CONTINUE == GetCanTp_u_S3Sts())
{
MngDcmS3ServerCountCutDown(); /*S3server ¼ÆÊ± ºÍ ÃÜÔ¿´íÎóÑÓʱ¼ÆÊ±*/
}
MngDcmKeyErrorDelayCountCutDown(); /*27 ·þÎñÃÜÔ¿´íÎó´ÎÊýµ½´ïºóÑÓʱ*/
DtcDiagConditionChk();
if(GetDtcEnable())
CanDTC_Task();
}
/******************************************************************************
*º¯ÊýÃû³Æ : void MngDcm_ConditionStateControl(void)
*²ÎÊý : void
*·µ»ØÖµ : void
*ÃèÊö : ¸ù¾Ýµ±Ç°Ìõ¼þ(S3severtimeµÈ)µ÷Õû״̬²ÎÊý
*±à¼­Ê±¼ä : 2015-10-10
*±¸×¢ :
*****************************************************************************/
void MngDcm_ConditionStateControl(void)
{
if(0U == MngDcm_GetS3serverTime())
{
MngDcm_ChangeToDefaltSession();
}
}