215 lines
8.4 KiB
C
215 lines
8.4 KiB
C
|
||
/******************************************************************************
|
||
| 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();
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|