1728 lines
63 KiB
C
Raw Normal View History

2023-05-05 11:53:54 +08:00
/******************************************************************************
* Description: : Include File Section
******************************************************************************/
#include"Dcm_Cfg.h"
/******************************************************************************
* Description: : Global Variable Definition Section
******************************************************************************/
/******************************************************************************
* Description: : Static Variable Definition Section
******************************************************************************/
/*SID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
#if 0
/*SID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
typedef struct
{
uint8 SupportSession; /*֧<>ֵĻỰģʽ*/
uint8 SupportSecurityAccess; /*֧<>ֵİ<D6B5>ȫȨ<C8AB><C8A8>*/
uint8 SupportRequestAddress; /*֧<>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ*/
uint8 MinDL; /*SID <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>СDL*/
uint8 SubCount; /*<2A>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint8 Sid; /*SID */
ServerDealfunc SidFunction;
}TsDcm_h_SidCheckInfoType;
#endif
const TsDcm_h_SidCheckInfoType CaDcm_h_SidCheckInfoTable[DCM_SUPPORTSID_COUNT]={
// <20>Ựģʽ <09><> <09><>ȫȨ<C8AB><C8A8> <09><> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ <09><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>СDL<44><4C><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 2 , 3 , 0x10 , &MngDcm_SessionControlService},
{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 2 , 1 , 0x11 , &MngDcm_ECUResetService},
{ DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS , 2 , 2 , 0x27 , &MngDcm_SecurityAccessService},
{ DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 3 , 3 , 0x28 , &MngDcm_CommunicationControlService},
{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 2 , 1 , 0x3E , &MngDcm_TesterPresentService},
{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 2 , 2 , 0x85 , &MngDcm_DTCSettingControlService},
{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 3 , 0 , 0x22 , &MngDcm_ReadDidDataService},
{ DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITYACCESS_LEVEL_L1 , DCM_PHYSICAL_ADDRESS , 4 , 0 , 0x2E , &MngDcm_WriteDidDataService},
//{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 4 , 0 , 0x14 , &MngDcm_CleanDTCService},
//{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 2 , 5 , 0x19 , &MngDcm_ReadDTCInfoService},
//{ DCM_EXTEND_SESSION , DCM_SECURITYACCESS_LEVEL_L1 , DCM_PHYSICAL_ADDRESS , 4 , 0 , 0x2F , &MngDcm_IOCtrlDIDService},
{ DCM_PROGRAMME_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS , 4 , 3 , 0x31 , &MngDcm_RoutineControlService},
{ DCM_PROGRAMME_SESSION , DCM_SECURITYACCESS_LEVEL_L2 , DCM_PHYSICAL_ADDRESS , 5 , 0 , 0x34 , &MngDcm_RequestDownloadService},
{ DCM_PROGRAMME_SESSION , DCM_SECURITYACCESS_LEVEL_L2 , DCM_PHYSICAL_ADDRESS , 3 , 0 , 0x36 , &MngDcm_TransmitDataService},
{ DCM_PROGRAMME_SESSION , DCM_SECURITYACCESS_LEVEL_L2 , DCM_PHYSICAL_ADDRESS , 1 , 0 , 0x37 , &MngDcm_TransmitExitService}
};
/*10<31><30><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_SubCheckType CaDcm_h_10SubCheckTable[DCM_10SUB_COUNT]={
{0x01,2,&MngDcm_DefaultSessionDeal},
{0x02,2,&MngDcm_ProgramSessionDeal},
{0x03,2,&MngDcm_ExtendedSessionDeal}
};
/*11<31><31><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_SubCheckType CaDcm_h_11SubCheckTable[DCM_11SUB_COUNT]={
{0x01,2,&MngDcm_SoftResetDeal},
// {0x02,2,&MngDcm_SoftResetDeal},
{0x03,2,&MngDcm_SoftResetDeal}
};
/*19<31><39><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
#if 0
const TsDcm_h_SubCheckType CaDcm_h_19SubCheckTable[DCM_19SUB_COUNT]={
{0x01,3,&MngDcm_ReportNumberOfDTCByStatusMask},
{0x02,3,&MngDcm_ReportDTCByStatusMask},
// {0x04,6,&MngDcm_ReportDTCSnapshotRecordByDTCNumber},
// {0x06,6,&MngDcm_ReportDTCExtendedDataRecordByDTCNumber},
{0x0A,2,&MngDcm_ReportSupportedDTC}
};
#endif
/*27<32><37><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_WithParaSubCheckType CaDcm_h_27SubCheckTable[DCM_27SUB_COUNT]={
//{0x01,2,&MngDcm_RequestSeekDeal},
//{0x02,6,&MngDcm_KeyCkeckDeal},
{0x11,2,&MngDcm_RequestSeekDeal},
{0x12,6,&MngDcm_KeyCkeckDeal},
};
/*28<32><38><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_WithParaSubCheckType CaDcm_h_28SubCheckTable[DCM_28SUB_COUNT]={
{0x00,3,&MngDcm_CtrlCommunication},
{0x01,3,&MngDcm_CtrlCommunication},
{0x03,3,&MngDcm_CtrlCommunication},
};
/*3E<33><45><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_SubCheckType CaDcm_h_3ESubCheckTable[DCM_3ESUB_COUNT]={
{0x00,2,&MngDcm_TesterPresentDeal}
};
/*85<38><35><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_SubCheckType CaDcm_h_85SubCheckTable[DCM_85SUB_COUNT]={
{0x01,2,&MngDcm_DTCSettingEnable},
{0x02,2,&MngDcm_DTCSettingDisenable}
};
/*2C<32><43><EFBFBD><EFBFBD> <20>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>*/
const TsDcm_h_SubCheckType CaDcm_h_2CSubCheckTable[DCM_2CSUB_COUNT]={
{0x01,8,&MngDcm_DynamicaDefineNewDid},
{0x03,4,&MngDcm_ClearDynamicaDid}
};
/*2F <20><><EFBFBD><EFBFBD> DID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_DidCheckType CaDcm_h_IODidCheckInfoTable[DCM_IO_DIDSUP_COUNT]={
{DCM_EXTEND_SESSION,DCM_SECURITYACCESS_LEVEL_L1,2,0x6300,&Dcm_DidServices_0x6300_WriteData},
{DCM_EXTEND_SESSION,DCM_SECURITYACCESS_LEVEL_L1,2,0x6308,&Dcm_DidServices_0x6308_WriteData},
{DCM_EXTEND_SESSION,DCM_SECURITYACCESS_LEVEL_L1,2,0x630B,&Dcm_DidServices_0x630B_WriteData},
{DCM_EXTEND_SESSION,DCM_SECURITYACCESS_LEVEL_L1,2,0x630C,&Dcm_DidServices_0x630C_WriteData},
{DCM_EXTEND_SESSION,DCM_SECURITYACCESS_LEVEL_L1,2,0x630E,&Dcm_DidServices_0x630E_WriteData},
};
/*22 <20><><EFBFBD><EFBFBD> DID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_DidCheckType CaDcm_h_ReadDidCheckInfoTable[DCM_READ_DIDSUP_COUNT + DCM_PERIODIC_DATA_COUNT]={
{0x07,0x07, 8,0x0200,&Dcm_DidServices_0x0200_ReadData},
{0x07,0x07, 8,0x0201,&Dcm_DidServices_0x0201_ReadData},
//{0x07,0x07, 8,0xF110,&Dcm_DidServices_0xF110_ReadData},
//{0x07,0x07, 8,0xF112,&Dcm_DidServices_0xF112_ReadData},
{0x07,0x07, 8,0xF113,&Dcm_DidServices_0xF113_ReadData},
{0x07,0x07,16,0xF180,&Dcm_DidServices_0xF180_ReadData},
{0x07,0x07, 1,0xF186,&Dcm_DidServices_0xF186_ReadData},
{0x07,0x07,11,0xF187,&Dcm_DidServices_0xF187_ReadData},
{0x07,0x07,10,0xF18A,&Dcm_DidServices_0xF18A_ReadData},
{0x07,0x07, 3,0xF18B,&Dcm_DidServices_0xF18B_ReadData},
{0x07,0x07,17,0xF190,&Dcm_DidServices_0xF190_ReadData},
{0x07,0x07,16,0xF195,&Dcm_DidServices_0xF195_ReadData},
{0x07,0x07,16,0xF193,&Dcm_DidServices_0xF193_ReadData},
//{0x07,0x07, 8,0xF197,&Dcm_DidServices_0xF197_ReadData},
{0x07,0x07,16,0xF198,&Dcm_DidServices_0xF198_ReadData},
{0x07,0x07, 4,0xF199,&Dcm_DidServices_0xF199_ReadData},
{0x07,0x07, 4,0xF19D,&Dcm_DidServices_0xF19D_ReadData},
//{0x07,0x07, 1,0x6300,&Dcm_DidServices_0x6300_ReadData},
//{0x07,0x07, 1,0x6308,&Dcm_DidServices_0x6308_ReadData},
//{0x07,0x07, 1,0x630B,&Dcm_DidServices_0x630B_ReadData},
//{0x07,0x07, 1,0x630C,&Dcm_DidServices_0x630C_ReadData},
//{0x07,0x07, 1,0x630D,&Dcm_DidServices_0x630D_ReadData},
//{0x07,0x07, 1,0x630F,&Dcm_DidServices_0x630F_ReadData},
//{0x07,0x07, 1,0xDF00,&Dcm_DidServices_0xFD00_ReadData},
#if (defined (DAMING_CAN_BOOT) && (DAMING_CAN_BOOT == YES))
{0x07,0x07,1,0xF188,&Dcm_DidServices_0xF193_ReadData},
{0x07,0x07,1,0xF191,&Dcm_DidServices_0xF195_ReadData},
#endif
/*********************End of SID $22******************************/
};
/*2E <20><><EFBFBD><EFBFBD> DID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_DidCheckType CaDcm_h_WriteDidCheckInfoTable[DCM_WRITE_DIDSUP_COUNT]={
{0x06,DCM_SECURITYACCESS_LEVEL_L1,16,0xF198,&Dcm_DidServices_0xF198_WriteData},
{0x06,DCM_SECURITYACCESS_LEVEL_L1, 4,0xF199,&Dcm_DidServices_0xF199_WriteData},
};
/*Rid FF00 <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_RidSubCheckType CaDcm_h_RidFF00SubCheckTable[DCM_RIDFF00_SUB_COUNT]=
{
{0x01,13,&MngDcm_RoutineFF00Start},
{0x02,5,&MngDcm_RoutineFF00Stop},
{0x03,5,&MngDcm_RoutineFF00Result}
};
/*Rid FF01 <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_RidSubCheckType CaDcm_h_RidFF01SubCheckTable[DCM_RIDFF01_SUB_COUNT]=
{
{0x01,4,&MngDcm_RoutineFF01Start},
{0x02,5,&MngDcm_RoutineFF01Stop},
{0x03,5,&MngDcm_RoutineFF01Result}
};
/*Rid FF02 <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_RidSubCheckType CaDcm_h_RidFF02SubCheckTable[DCM_RIDFF02_SUB_COUNT]=
{
{0x01,4,&MngDcm_RoutineFF02Start},
{0x02,4,&MngDcm_RoutineFF02Stop},
{0x03,4,&MngDcm_RoutineFF02Result}
};
/*Rid 202 <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_RidSubCheckType CaDcm_h_Rid0202SubCheckTable[DCM_RIDF001_SUB_COUNT]=
{
{0x01,8,&MngDcm_Routine0202Start },
{0x02,5,&MngDcm_Routine0202Stop },
{0x03,5,&MngDcm_Routine0202Result}
};
/*Rid <20>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD>б<EFBFBD>*/
const TsDcm_h_RidCheckType CaDcm_h_RidCheckInfoTable[DCM_31RID_COUNT]={
{DCM_PROGRAMME_SESSION,DCM_SECURITYACCESS_LEVEL_L2, ROUTINECTRL_DID_EraseMemory, CaDcm_h_RidFF00SubCheckTable},
{DCM_PROGRAMME_SESSION,DCM_SECURITYACCESS_LEVEL_L2, ROUTINECTRL_DID_CheckProgrammingDependencies, CaDcm_h_RidFF01SubCheckTable},
{DCM_PROGRAMME_SESSION,DCM_SECURITYACCESS_LEVEL_L2, ROUTINECTRL_DID_CheckProgrammingIntegrity, CaDcm_h_Rid0202SubCheckTable},
{DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION,DCM_SECURITYACCESS_DEFAULT, ROUTINECTRL_DID_CheckProgrammingPreconditions,CaDcm_h_RidFF02SubCheckTable},
};
/******************************************************************************
* Description: : Static Function Prototype Declaration
*****************************************************************************/
/*@<40><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static uint8 MngDcm_SubCheckAvailable(uint8 LeDcm_u_ListLenth,uint8 LeDcm_u_Sub,const TsDcm_h_SubCheckType LeDcm_h_SubTable[]);
static uint8 MngDcm_SubCheckDL(uint8 LeDcm_u_SubIndex,uint16 LeDcm_u_DL,const TsDcm_h_SubCheckType LeDcm_h_SubTable[]);
static uint8 MngDcm_ReadDidCheckDL(uint16 LeDcm_u_DL);
static uint8 MngDcm_2AReadDidCheckDL(uint16 LeDcm_u_DL);
static uint8 MngDcm_WriteDidCheckDL(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
static uint8 MngDcm_IoDidCheckDL(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
static uint8 MngDcm_DidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Did,const TsDcm_h_DidCheckType LeDcm_h_DidTable[]);
static uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
static uint8 MngDcm_DidCheckSecurityAccess(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
static uint8 MngDcm_RidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Rid,const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
static uint8 MngDcm_RidCheckSession(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
static uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
static uint8 MngDcm_RidCheckDL(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSubIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
static uint8 MngDcm_RidSubAvailable(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSub,uint8 LeDcm_u_ListLength,const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
static void MngDcm_ReadDidDataPack(uint8* LeDcm_u_Buffer,uint8* LeDcm_u_Post,uint16 LeDcm_u_Did,uint8* LeDcm_u_Data,uint8 LeDcm_u_Length);
/******************************************************************************
* Description: : Write User Function Code
*****************************************************************************/
/*@<40><><EFBFBD><EFBFBD>ͷע<CDB7>͸<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>մ˸<D5B4>ʽע<CABD><D7A2>*/
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SIDCheckAvailable(uint8 LeDcm_u_Sid)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_Sid <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SIDCheckAvailable(uint8 LeDcm_u_Sid)
{
uint8 i;
uint8 LeDcm_u_TempResult = DCM_NORESULT;
for(i=0 ; i < DCM_SUPPORTSID_COUNT; i++)
{
if(LeDcm_u_Sid == CaDcm_h_SidCheckInfoTable[i].Sid)
{
LeDcm_u_TempResult = i;
break;
}
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SIDCheckSession(uint8 LeDcm_u_SidIndex)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_SidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰģʽ<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SIDCheckSession(uint8 LeDcm_u_SidIndex)
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SupportSession&(MngDcm_GetDiagnosticSession())))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SIDCheckSecurityAccess(uint8 LeDcm_u_SidIndex)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_SidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <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> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SIDCheckSecurityAccess(uint8 LeDcm_u_SidIndex)
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SupportSecurityAccess&(MngDcm_GetSecurityAccessSts())))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SIDFuncAddressAvailable(uint8 LeDcm_u_SidIndex)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_SidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <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> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SIDFuncAddressAvailable(uint8 LeDcm_u_SidIndex)
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SupportRequestAddress&VeDcm_h_RqustInfo.RequstSty))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SIDCheckMinDL(uint8 LeDcm_u_SidIndex,uint8 LeDcm_u_DL)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_SidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>LeDcm_u_DL <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>СDL
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SIDCheckMinDL(uint8 LeDcm_u_SidIndex,uint16 LeDcm_u_DL)
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].MinDL <= LeDcm_u_DL)
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SubCheckAvailable(uint8 LeDcm_u_ListLenth,uint8 LeDcm_u_Sub,const TsDcm_h_SubCheckType LeDcm_h_SubTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_ListLenth <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LeDcm_u_Sub <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD>
LeDcm_h_SubTable[] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <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> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SubCheckAvailable(uint8 LeDcm_u_ListLenth,uint8 LeDcm_u_Sub,const TsDcm_h_SubCheckType LeDcm_h_SubTable[])
{
uint8 i;
uint8 LeDcm_u_TempResult = DCM_NORESULT;
for(i=0 ; i < LeDcm_u_ListLenth; i++)
{
if((LeDcm_u_Sub&0x7F)== LeDcm_h_SubTable[i].Sub)
{
LeDcm_u_TempResult = i;
break;
}
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_SubCheckDL(uint8 LeDcm_u_SubIndex,uint8 LeDcm_u_DL,const TsDcm_h_SubCheckType LeDcm_h_SubTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_SubIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LeDcm_u_DL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL
LeDcm_h_SubTable[] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SID<EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <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> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_SubCheckDL(uint8 LeDcm_u_SubIndex,uint16 LeDcm_u_DL,const TsDcm_h_SubCheckType LeDcm_h_SubTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(LeDcm_h_SubTable[LeDcm_u_SubIndex].DL == LeDcm_u_DL)
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_ReadDidCheckDL(uint8 LeDcm_u_DL)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_DL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD><EFBFBD>Ч<EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD>
*****************************************************************************/
uint8 MngDcm_ReadDidCheckDL(uint16 LeDcm_u_DL)
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(LeDcm_u_DL>2&&LeDcm_u_DL<(DCM_READDID_MAXNUMBER*2+2)&&(LeDcm_u_DL%2==1))
{
LeDcm_u_TempResult = LeDcm_u_DL/2;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_ReadDidCheckDL(uint8 LeDcm_u_DL)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_DL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD><EFBFBD>Ч<EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD>
*****************************************************************************/
uint8 MngDcm_2AReadDidCheckDL(uint16 LeDcm_u_DL)
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if((LeDcm_u_DL>2)&&((LeDcm_u_DL<=DCM_PERIODIC_DATA_COUNT)))
{
LeDcm_u_TempResult = LeDcm_u_DL-2;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_WriteDidCheckDL(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_DidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID <EFBFBD><EFBFBD>2<EFBFBD>ֵ<EFBFBD>DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LaDcm_h_DidTable[] 2<EFBFBD>ֵ<EFBFBD>DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : 2E <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD><EFBFBD>Ч<EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD>
*****************************************************************************/
uint8 MngDcm_WriteDidCheckDL(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(((LaDcm_h_DidTable[LeDcm_u_DidIndex].DataLength +3U) == VeDcm_h_RqustInfo.DL))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
uint8 MngDcm_IoDidCheckDL(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if((((LaDcm_h_DidTable[LeDcm_u_DidIndex].DataLength +3U) == VeDcm_h_RqustInfo.DL))||(((LaDcm_h_DidTable[LeDcm_u_DidIndex].DataLength +2U) == VeDcm_h_RqustInfo.DL)))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_DidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Did,const TsDcm_h_DidCheckType LeDcm_h_DidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_ListLenth <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LeDcm_u_Did <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID
LaDcm_h_DidTable[] DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID<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> DCM_NORESULT û<EFBFBD>ҵ<EFBFBD>
*****************************************************************************/
uint8 MngDcm_DidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Did,const TsDcm_h_DidCheckType LeDcm_h_DidTable[])
{
uint8 i;
uint8 LeDcm_u_TempResult = DCM_NORESULT;
for(i=0 ; i < LeDcm_u_ListLenth; i++)
{
if(LeDcm_u_Did == LeDcm_h_DidTable[i].Did)
{
LeDcm_u_TempResult = i;
break;
}
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_DidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID<EFBFBD><EFBFBD>DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LaDcm_h_DidTable[] DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ģʽ<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (LaDcm_h_DidTable[LeDcm_u_DidIndex].SupportSession&(MngDcm_GetDiagnosticSession())))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_DidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID<EFBFBD><EFBFBD>DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LaDcm_h_DidTable[] DID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <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> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
uint8 MngDcm_DidCheckSecurityAccess(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (LaDcm_h_DidTable[LeDcm_u_DidIndex].SupportSecurityAccess&(MngDcm_GetSecurityAccessSts())))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_RidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Rid,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_ListLenth <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LeDcm_u_Rid <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID
LeDcm_h_RidTable[] RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : 31<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<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> DCM_NORESULT û<EFBFBD>ҵ<EFBFBD>
*****************************************************************************/
uint8 MngDcm_RidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Rid,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
{
uint8 i;
uint8 LeDcm_u_TempResult = DCM_NORESULT;
for(i=0 ; i < LeDcm_u_ListLenth; i++)
{
if(LeDcm_u_Rid == LeDcm_h_RidTable[i].Rid)
{
LeDcm_u_TempResult = i;
break;
}
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_RidCheckSession(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_RidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LeDcm_h_RidTable[] RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ģʽ<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : 31<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ǰģʽ<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>RID
*****************************************************************************/
uint8 MngDcm_RidCheckSession(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (LeDcm_h_RidTable[LeDcm_u_RidIndex].SupportSession&(MngDcm_GetDiagnosticSession())))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_RidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LeDcm_h_RidTable[] RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <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> : 2015-10-10
*<EFBFBD><EFBFBD>ע : 31<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
*****************************************************************************/
uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(_FALSE != (LeDcm_h_RidTable[LeDcm_u_RidIndex].SupportSecurityAccess&(MngDcm_GetSecurityAccessSts())))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_RidSubAvailable(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSub,uint8 LeDcm_u_ListLength,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_RidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LeDcm_u_RidSub <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sub
LeDcm_u_ListLength RID֧<EFBFBD>ֵ<EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LeDcm_h_RidTable[] RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD>ֵ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sub
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : 31<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD>Ƿ<EFBFBD>֧<EFBFBD>ֵ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sub
*****************************************************************************/
uint8 MngDcm_RidSubAvailable(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSub,uint8 LeDcm_u_ListLength,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
{
uint8 i;
uint8 LeDcm_u_TempResult = DCM_NORESULT;
for(i=0 ; i < LeDcm_u_ListLength; i++)
{
if((LeDcm_u_RidSub&0x7F) == LeDcm_h_RidTable[LeDcm_u_RidIndex].RidSubTable[i].Sub)
{
LeDcm_u_TempResult = i;
break;
}
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_RidIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LeDcm_u_RidSubIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SUB<EFBFBD><EFBFBD>RID֧<EFBFBD>ֵ<EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
LeDcm_h_RidTable[] RID<EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : 31<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DL<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
*****************************************************************************/
uint8 MngDcm_RidCheckDL(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSubIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
{
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
if(((LeDcm_h_RidTable[LeDcm_u_RidIndex].RidSubTable[LeDcm_u_RidSubIndex].DL) == VeDcm_h_RqustInfo.DL))
{
LeDcm_u_TempResult = DCM_CHECK_OK;
}
return LeDcm_u_TempResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void MngDcm_ReadDidDataPack(uint8* LeDcm_u_Buffer,uint8* LeDcm_u_Post,uint16 LeDcm_u_Did,uint8* LeDcm_u_Data,uint8 LeDcm_u_Length)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : LeDcm_u_Buffer <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LeDcm_u_Post Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
LeDcm_u_Did <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID
LeDcm_u_Data <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Դ<EFBFBD><EFBFBD>ַ
LeDcm_u_Length <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_TempResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 22 DID <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע : <EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>DID<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>22<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>DIDʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
*****************************************************************************/
void MngDcm_ReadDidDataPack(uint8* LeDcm_u_Buffer,uint8* LeDcm_u_Post,uint16 LeDcm_u_Did,uint8* LeDcm_u_Data,uint8 LeDcm_u_Length)
{
uint8 i;
uint8 LeDcm_u_DidHigh;
uint8 LeDcm_u_DidLow;
LeDcm_u_DidLow = LeDcm_u_Did&0xFF;
LeDcm_u_DidHigh = LeDcm_u_Did>>8;
LeDcm_u_Buffer[(*LeDcm_u_Post)] = LeDcm_u_DidHigh;
(*LeDcm_u_Post)++;
LeDcm_u_Buffer[(*LeDcm_u_Post)] = LeDcm_u_DidLow;
(*LeDcm_u_Post)++;
for(i = 0;i < LeDcm_u_Length;i++)
{
LeDcm_u_Buffer[(*LeDcm_u_Post) + i] = LeDcm_u_Data[i];
}
(*LeDcm_u_Post) = (*LeDcm_u_Post) + LeDcm_u_Length;
}
/**********************************************<2A><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD>**************/
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_SessionControlService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 10 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_SessionControlService(void)
{
uint8 LeDcm_u_SubInex = 0xFF;
uint8 LeDcm_u_DLCheckResult;
uint8 LaDcm_u_TempBuffer[6];
TeDcm_h_ResultType LeDcm_u_FinallyResult;
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ //<2F><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_10SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_10SubCheckTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT == LeDcm_u_SubInex)
{
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; /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ӧ*/
}
else
{
/*<2A><><EFBFBD><EFBFBD>NRC12*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
else
{
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubInex,VeDcm_h_RqustInfo.DL,CaDcm_h_10SubCheckTable);
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_10SubCheckTable[LeDcm_u_SubInex].SubFunction();
}
else
{
/*<2A><><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;
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_ECUResetService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 11 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_ECUResetService(void)
{
uint8 LeDcm_u_SubInex = 0xFF;
uint8 LeDcm_u_DLCheckResult;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
uint8 LaDcm_u_TempBuffer[6];
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; //<2F><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_11SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_11SubCheckTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT == LeDcm_u_SubInex)
{
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; /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ӧ*/
}
else
{
/*<2A><><EFBFBD><EFBFBD>NRC12*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
else
{
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubInex,VeDcm_h_RqustInfo.DL,CaDcm_h_11SubCheckTable);
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_11SubCheckTable[LeDcm_u_SubInex].SubFunction();
}
else
{
/*<2A><><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;
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_ReadDidDataService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
#if (defined (DID_RECORD) && (DID_RECORD == YES))
uint16 DidList[16];
uint8 Didcnt;
#endif
TeDcm_h_ResultType MngDcm_ReadDidDataService(void)
{
uint8 i = 0U;
uint8 LeDcm_u_DidNumber;
uint8 LeDcm_u_NotSupDidNumber =0U;
uint8 LeDcm_u_DidIndex;
uint8 LeDcm_u_SessionCheckResult;
uint8 LeDcm_u_SecurityAccessCheckResult;
uint8 LeDcm_u_FuncDealResult;
uint16 LeDcm_u_CurrentDid;
uint8 LaDcm_u_TempBuffer[6];
uint8 LeDcm_u_SingleDidBuffer[DCM_ONEDID_MAXDATALENGTH];
uint8 LeDcm_u_SingleDidDataLength;
uint8 LeDcm_u_CollectDataBuffer[DCM_TXBUFFER_LENGTH - 2U];
uint8 LeDcm_u_CollectDataPost = 1U;
uint8 LeDcm_u_BreakFlag = 0U;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
LeDcm_u_DidNumber = MngDcm_ReadDidCheckDL(VeDcm_h_RqustInfo.DL); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<D6B5><CEAA><EFBFBD>ϸ<EFBFBD> <20><> DID <20><>Ŀ */
if(DCM_CHECK_NOK != LeDcm_u_DidNumber)
{
VeDcm_h_RqustInfo.DidCount = LeDcm_u_DidNumber; /*<2A><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>DID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><EFBFBD><E1B9B9><EFBFBD><EFBFBD> */
MngDcm_DataMoveDeal(VeDcm_h_RqustInfo.Did,0,VeDcm_P_DataAddress,1,LeDcm_u_DidNumber*2); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD>*/
while(VeDcm_h_RqustInfo.DidCount > _NULL)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>did <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> uint16 <20><><EFBFBD>͵<EFBFBD> did <20><><EFBFBD>ڱȽ<DAB1> */
LeDcm_u_CurrentDid = (((uint16)VeDcm_h_RqustInfo.Did[i])<<8) + ((uint16)VeDcm_h_RqustInfo.Did[i+1U]);
i = i + 2U; /*ָ<><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>did */
#if (defined (DID_RECORD) && (DID_RECORD == YES))
DidList[Didcnt++] = LeDcm_u_CurrentDid;
#endif
LeDcm_u_DidIndex = MngDcm_DidCheckAvailable(DCM_READ_DIDSUP_COUNT + DCM_PERIODIC_DATA_COUNT,LeDcm_u_CurrentDid,CaDcm_h_ReadDidCheckInfoTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>DID*/ /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰDID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT != LeDcm_u_DidIndex)
{
LeDcm_u_SessionCheckResult = MngDcm_DidCheckSession(LeDcm_u_DidIndex,CaDcm_h_ReadDidCheckInfoTable); /*<2A><><EFBFBD>鵱ǰģʽ<C4A3>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>DID*/
if(DCM_CHECK_OK == LeDcm_u_SessionCheckResult)
{
LeDcm_u_SecurityAccessCheckResult = MngDcm_DidCheckSecurityAccess(LeDcm_u_DidIndex,CaDcm_h_ReadDidCheckInfoTable); /*<2A><><EFBFBD>鵱ǰȨ<C7B0><C8A8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>*/
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
{
LeDcm_u_FuncDealResult = CaDcm_h_ReadDidCheckInfoTable[LeDcm_u_DidIndex].Function(LeDcm_u_SingleDidBuffer,&LeDcm_u_SingleDidDataLength); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>DID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
VeDcm_h_RqustInfo.DidCount = VeDcm_h_RqustInfo.DidCount - 1U; /*<2A><>ȥ<EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>DID*/
if(DCM_CHECK_OK !=LeDcm_u_FuncDealResult) /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NRC*/
{
/*<2A><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>ֵ<EFBFBD><D6B5>ΪNRC*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[LeDcm_u_FuncDealResult]); /*<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;
break;
}
else
{
MngDcm_ReadDidDataPack(LeDcm_u_CollectDataBuffer,&LeDcm_u_CollectDataPost,LeDcm_u_CurrentDid,LeDcm_u_SingleDidBuffer,LeDcm_u_SingleDidDataLength); /*<2A><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>DID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}
}
else
{
/*<2A><><EFBFBD><EFBFBD>NRC 33*/
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;
LeDcm_u_BreakFlag = 1U;
break;
}
}
else
{
LeDcm_u_NotSupDidNumber++; /*<2A><>ǰ<EFBFBD><C7B0>֧<EFBFBD>ּ<EFBFBD>1*/
VeDcm_h_RqustInfo.DidCount--; /*<2A><>ȥ<EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>DID*/
}
}
else
{
LeDcm_u_NotSupDidNumber++; /*<2A><>ǰ<EFBFBD><C7B0>֧<EFBFBD>ּ<EFBFBD>1 <20><>֧<EFBFBD>ֵ<EFBFBD>DID <20><>ʱ<EFBFBD><CAB1><EFBFBD>ɵ<EFBFBD>ǰ<EFBFBD><C7B0>֧<EFBFBD><D6A7>*/
VeDcm_h_RqustInfo.DidCount--; /*<2A><>ȥ<EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>DID*/
}
}
/*<2A><><EFBFBD><EFBFBD>DID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if(0U==LeDcm_u_BreakFlag)
{
if(LeDcm_u_NotSupDidNumber == LeDcm_u_DidNumber)
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC 31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*<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_CollectDataBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
SetCanTp_TxBuffer(LeDcm_u_CollectDataPost,LeDcm_u_CollectDataBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
LeDcm_u_FinallyResult = CeDcm_e_ResultPosRsp;
}
}
else
{}
}
else
{
/*<2A><><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;
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_ReadMemoryDataService
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 23 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2016-12-25
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_ReadMemoryDataService(void)
{
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_SecurityAccessService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 27 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_SecurityAccessService(void)
{
uint8 LeDcm_u_SubIndex = 0xFF;
uint8 LeDcm_u_DLCheckResult;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
uint8 LaDcm_u_TempBuffer[6];
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; ; /*<2A><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ*/
LeDcm_u_SubIndex = MngDcm_SubCheckAvailable(DCM_27SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_27SubCheckTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT == LeDcm_u_SubIndex)
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC12*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
else
{
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubIndex,VeDcm_h_RqustInfo.DL,CaDcm_h_27SubCheckTable);
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_27SubCheckTable[LeDcm_u_SubIndex].SubFunction( CaDcm_h_27SubCheckTable[LeDcm_u_SubIndex].Sub);
}
else
{
/*<2A><><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;
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_CommunicationControlService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 28 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_CommunicationControlService(void)
{
uint8 LeDcm_u_SubIndex = 0xFF;
uint8 LeDcm_u_DLCheckResult;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
uint8 LaDcm_u_TempBuffer[6];
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; //<2F><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
LeDcm_u_SubIndex = MngDcm_SubCheckAvailable(DCM_28SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_28SubCheckTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT == LeDcm_u_SubIndex)
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC12*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
else
{
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubIndex,VeDcm_h_RqustInfo.DL,CaDcm_h_28SubCheckTable);
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_28SubCheckTable[LeDcm_u_SubIndex].SubFunction(VeDcm_P_DataAddress[2]);
}
else
{
/*<2A><><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;
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_WriteDidDataService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2E <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_WriteDidDataService(void)
{
uint8 i = 0U;
uint8 LeDcm_u_DidIndex;
uint8 LeDcm_u_DLCheckResult;
uint8 LeDcm_u_SessionCheckResult;
uint8 LeDcm_u_SecurityAccessCheckResult;
uint8 LeDcm_u_FuncDealResult;
uint8 LaDcm_u_TempBuffer[6];
uint16 LeDcm_u_CurrentDid;
uint8 LeDcm_u_DidDataLength;
uint8 LeDcm_u_CollectDataBuffer[4U];
uint8 LeDcm_u_CollectDataPost = 3U;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
MngDcm_DataMoveDeal(VeDcm_h_RqustInfo.Did,0,VeDcm_P_DataAddress,1,2); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD>*/
LeDcm_u_CurrentDid = (((uint16)VeDcm_h_RqustInfo.Did[0])<<8) + ((uint16)VeDcm_h_RqustInfo.Did[1]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>did <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> uint16 <20><><EFBFBD>͵<EFBFBD> did <20><><EFBFBD>ڱȽ<DAB1> */
#if (defined (DID_RECORD) && (DID_RECORD == YES))
DidList[Didcnt++] = LeDcm_u_CurrentDid;
#endif
LeDcm_u_DidIndex = MngDcm_DidCheckAvailable(DCM_WRITE_DIDSUP_COUNT,LeDcm_u_CurrentDid,CaDcm_h_WriteDidCheckInfoTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>DID*/ /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰDID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT != LeDcm_u_DidIndex)
{
if((LeDcm_u_CurrentDid == 0xF15A)&&(VeDcm_h_RqustInfo.DL == 33)) /* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Boot<6F><74><EFBFBD><EFBFBD> */
{
LeDcm_u_DLCheckResult = DCM_CHECK_OK;
}
else
LeDcm_u_DLCheckResult = MngDcm_WriteDidCheckDL(LeDcm_u_DidIndex,CaDcm_h_WriteDidCheckInfoTable); /*<2A><><EFBFBD><EFBFBD>DL<44>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> */
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
MngDcm_DataMoveDeal(VeDcm_h_RqustInfo.WriteData,0,VeDcm_P_DataAddress,3,CaDcm_h_WriteDidCheckInfoTable[LeDcm_u_DidIndex].DataLength); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DID <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD>*/
LeDcm_u_DidDataLength = CaDcm_h_WriteDidCheckInfoTable[LeDcm_u_DidIndex].DataLength;
LeDcm_u_SessionCheckResult = MngDcm_DidCheckSession(LeDcm_u_DidIndex,CaDcm_h_WriteDidCheckInfoTable); /*<2A><><EFBFBD>鵱ǰģʽ<C4A3>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>DID*/
if(DCM_CHECK_OK == LeDcm_u_SessionCheckResult)
{
LeDcm_u_SecurityAccessCheckResult = MngDcm_DidCheckSecurityAccess(LeDcm_u_DidIndex,CaDcm_h_WriteDidCheckInfoTable); /*<2A><><EFBFBD>鵱ǰȨ<C7B0><C8A8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>*/
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
{
LeDcm_u_FuncDealResult = CaDcm_h_WriteDidCheckInfoTable[LeDcm_u_DidIndex].Function(VeDcm_h_RqustInfo.WriteData,&LeDcm_u_DidDataLength); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>DID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if(DCM_CHECK_OK !=LeDcm_u_FuncDealResult) /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NRC*/
{
/*<2A><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>ֵ<EFBFBD><D6B5>ΪNRC*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[LeDcm_u_FuncDealResult]); /*<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_CollectDataBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
LeDcm_u_CollectDataBuffer[1] = VeDcm_h_RqustInfo.Did[0];
LeDcm_u_CollectDataBuffer[2] = VeDcm_h_RqustInfo.Did[1];
SetCanTp_TxBuffer(3U,LeDcm_u_CollectDataBuffer); /*<2A><><EFBFBD>ýӿڷ<D3BF><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
}
}
else
{
/*<2A><><EFBFBD><EFBFBD>NRC 33*/
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
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC 31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*<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
{
/*<2A><><EFBFBD><EFBFBD>NRC 13*/
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
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_WriteMemoryDataService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 3D <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2016-12-25
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_WriteMemoryDataService(void)
{
TeDcm_h_ResultType LeDcm_u_FinallyResult;
/*<2A><><EFBFBD><EFBFBD>NRC22*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_DynamicaDefineIdentifier(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2C <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2016-12-25
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_DynamicaDefineIdentifier(void)
{
TeDcm_h_ResultType LeDcm_u_FinallyResult;
/*<2A><><EFBFBD><EFBFBD>NRC22*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_RoutineControlService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 31 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_RoutineControlService(void)
{
uint8 LeDcm_u_RidIndex;
uint8 LeDcm_u_DLCheckResult;
uint8 LeDcm_u_RidSubIndex;
uint8 LeDcm_u_SessionCheckResult;
uint8 LeDcm_u_SecurityAccessCheckResult;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
uint8 LaDcm_u_TempBuffer[6];
VeDcm_h_RqustInfo.Rid = (((uint16)VeDcm_P_DataAddress[2])<<8) + ((uint16)VeDcm_P_DataAddress[3]); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RID <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD>*/
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; /*sub*/ //<2F><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
LeDcm_u_RidIndex = MngDcm_RidCheckAvailable(DCM_31RID_COUNT,VeDcm_h_RqustInfo.Rid,CaDcm_h_RidCheckInfoTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>RID*/ /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰRID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT != LeDcm_u_RidIndex)
{
LeDcm_u_SessionCheckResult = MngDcm_RidCheckSession(LeDcm_u_RidIndex,CaDcm_h_RidCheckInfoTable); /*<2A><><EFBFBD>鵱ǰģʽ<C4A3>Ƿ<EFBFBD>֧<EFBFBD>ָ<EFBFBD>RID*/
if(DCM_CHECK_OK == LeDcm_u_SessionCheckResult)
{
LeDcm_u_SecurityAccessCheckResult = MngDcm_RidCheckSecurityAccess(LeDcm_u_RidIndex,CaDcm_h_RidCheckInfoTable);
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
{
LeDcm_u_RidSubIndex = MngDcm_RidSubAvailable(LeDcm_u_RidIndex,VeDcm_h_RqustInfo.Sub,DCM_RIDFF02_SUB_COUNT,CaDcm_h_RidCheckInfoTable);
if(DCM_NORESULT != LeDcm_u_RidSubIndex)
{
LeDcm_u_DLCheckResult = MngDcm_RidCheckDL(LeDcm_u_RidIndex,LeDcm_u_RidSubIndex,CaDcm_h_RidCheckInfoTable); /*<2A><><EFBFBD><EFBFBD>DL<44>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> */
//LeDcm_u_DLCheckResult = DCM_CHECK_OK; //boot add //todo
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_RidCheckInfoTable[LeDcm_u_RidIndex].RidSubTable[LeDcm_u_RidSubIndex].Function(); /*<2A><><EFBFBD>ö<EFBFBD>Ӧ<EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}
else
{
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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
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
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
}
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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
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
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
}
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
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7E]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : TeDcm_h_ResultType MngDcm_TesterPresentService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 3E <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_TesterPresentService(void)
{
uint8 LeDcm_u_SubInex = 0xFF;
uint8 LeDcm_u_DLCheckResult;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
uint8 LaDcm_u_TempBuffer[6];
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ //<2F><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_3ESUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_3ESubCheckTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT == LeDcm_u_SubInex)
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC12*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
else
{
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubInex,VeDcm_h_RqustInfo.DL,CaDcm_h_3ESubCheckTable);
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_3ESubCheckTable[LeDcm_u_SubInex].SubFunction();
}
else
{
/*<2A><><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;
}
}
return LeDcm_u_FinallyResult;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :TeDcm_h_ResultType MngDcm_DTCSettingControlService(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : void
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ : LeDcm_u_FinallyResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 85 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>ʱ<EFBFBD><EFBFBD> : 2015-10-10
*<EFBFBD><EFBFBD>ע :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_DTCSettingControlService(void)
{
uint8 LeDcm_u_SubIndex = 0xFF;
uint8 LeDcm_u_DLCheckResult;
TeDcm_h_ResultType LeDcm_u_FinallyResult;
uint8 LaDcm_u_TempBuffer[6];
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; /*<2A><>TP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ*/
if(MngDcm_GetDiagnosticSession() != DCM_EXTEND_SESSION)
{
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>Ӧ*/
return CeDcm_e_ResultNoRsp;
}
else
{
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>*/
return CeDcm_e_ResultNoRsp;
}
}
LeDcm_u_SubIndex = MngDcm_SubCheckAvailable(DCM_85SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_85SubCheckTable); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>*/
if(DCM_NORESULT == LeDcm_u_SubIndex)
{
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
{
/*<2A><><EFBFBD><EFBFBD>NRC12*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*<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; /*<2A><><EFBFBD><EFBFBD>Ӧ*/
}
}
else
{
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubIndex,VeDcm_h_RqustInfo.DL,CaDcm_h_85SubCheckTable);
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
{
LeDcm_u_FinallyResult = CaDcm_h_85SubCheckTable[LeDcm_u_SubIndex].SubFunction();
}
else
{
/*<2A><><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;
}
}
return LeDcm_u_FinallyResult;
}