1939 lines
76 KiB
C
1939 lines
76 KiB
C
|
||
/******************************************************************************
|
||
| File Name : Dcm_Cfg.c
|
||
| Description: 诊断服务查表、服务配置
|
||
*****************************************************************************/
|
||
|
||
/******************************************************************************
|
||
* Description: : Include File Section
|
||
******************************************************************************/
|
||
|
||
#include"Dcm_Cfg.h"
|
||
|
||
/******************************************************************************
|
||
* Description: : Global Variable Definition Section
|
||
******************************************************************************/
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
* Description: : Static Variable Definition Section
|
||
******************************************************************************/
|
||
|
||
|
||
|
||
/*SID 条件检查项列表*/
|
||
#if 0
|
||
/*SID 条件检查项*/
|
||
typedef struct
|
||
{
|
||
uint8 SupportSession; /*支持的会话模式*/
|
||
uint8 SupportSecurityAccess; /*支持的安全权限*/
|
||
uint8 SupportRequestAddress; /*支持的请求方式*/
|
||
uint8 MinDL; /*SID 对应的最小DL*/
|
||
uint8 SubCount; /*子服务个数 */
|
||
uint8 Sid; /*SID */
|
||
ServerDealfunc SidFunction;
|
||
}TsDcm_h_SidCheckInfoType;
|
||
#endif
|
||
const TsDcm_h_SidCheckInfoType CaDcm_h_SidCheckInfoTable[DCM_SUPPORTSID_COUNT]={
|
||
// 会话模式 ; 安全权限 ; 请求方式 ;子服务最小DL;子服务个数;SID;处理函数地址
|
||
{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_DEFAULT_SESSION | DCM_EXTEND_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_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS , 8 , 0 , 0x23 , &MngDcm_ReadMemoryDataService},// 23服务缺失
|
||
{ DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION , DCM_SECURITYACCESS_LEVEL_L1 , DCM_PHYSICAL_ADDRESS , 4 , 0 , 0x2E , &MngDcm_WriteDidDataService},
|
||
//{ DCM_EXTEND_SESSION , DCM_SECURITYACCESS_LEVEL_L1 , DCM_PHYSICAL_ADDRESS , 4 , 0 , 0x3D , &MngDcm_WriteMemoryDataService},// 3D服务缺失
|
||
//{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS , 3 , 0 , 0x2A , &MngDcm_ReadDataByIdentifier},// 2A服务缺失
|
||
//{ DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS , 3 , 0 , 0x2A , &MngDcm_ReadDataByIdentifier},// 2A服务缺失
|
||
//{ DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS , 4 , 2 , 0x2C , &MngDcm_DynamicaDefineIdentifier}, // 2C服务缺失
|
||
//{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 4 , 0 , 0x14 , &MngDcm_CleanDTCService},// 14服务缺失
|
||
//{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT , DCM_PHYSICAL_ADDRESS | DCM_FUNCTIONAL_ADDRESS , 2 , 3 , 0x19 , &MngDcm_ReadDTCInfoService},// 19服务缺失
|
||
//{ DCM_EXTEND_SESSION , DCM_SECURITYACCESS_LEVEL_L1 , DCM_PHYSICAL_ADDRESS , 4 , 0 , 0x2F , &MngDcm_IOCtrlDIDService},// 2F服务缺失
|
||
//{DCM_DEFAULT_SESSION | DCM_EXTEND_SESSION , DCM_SECURITY_LEVEL_DEFAULT | DCM_SECURITYACCESS_LEVEL_L1 , DCM_PHYSICAL_ADDRESS , 4 , 0 , 0x2F , &MngDcm_IOCtrlDIDService},// 2F服务缺失
|
||
{ 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服务 子服务信息列表*/
|
||
const TsDcm_h_SubCheckType CaDcm_h_10SubCheckTable[DCM_10SUB_COUNT]={
|
||
{0x01,2,&MngDcm_DefaultSessionDeal},
|
||
{0x02,2,&MngDcm_ProgramSessionDeal},
|
||
{0x03,2,&MngDcm_ExtendedSessionDeal}
|
||
};
|
||
|
||
|
||
/*11服务 子服务信息列表*/
|
||
const TsDcm_h_SubCheckType CaDcm_h_11SubCheckTable[DCM_11SUB_COUNT]={
|
||
{0x01,2,&MngDcm_SoftResetDeal},
|
||
//{0x02,2,&MngDcm_SoftResetDeal},
|
||
{0x03,2,&MngDcm_SoftResetDeal}
|
||
};
|
||
|
||
/*19服务 子服务信息列表*/
|
||
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}
|
||
};
|
||
|
||
/*27服务 子服务信息列表*/
|
||
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服务 子服务信息列表*/
|
||
const TsDcm_h_WithParaSubCheckType CaDcm_h_28SubCheckTable[DCM_28SUB_COUNT]={
|
||
{0x00,3,&MngDcm_CtrlCommunication},
|
||
{0x01,3,&MngDcm_CtrlCommunication},
|
||
{0x03,3,&MngDcm_CtrlCommunication},
|
||
};
|
||
|
||
|
||
|
||
|
||
/*3E服务 子服务信息列表*/
|
||
const TsDcm_h_SubCheckType CaDcm_h_3ESubCheckTable[DCM_3ESUB_COUNT]={
|
||
{0x00,2,&MngDcm_TesterPresentDeal}
|
||
|
||
};
|
||
|
||
/*85服务 子服务信息列表*/
|
||
const TsDcm_h_SubCheckType CaDcm_h_85SubCheckTable[DCM_85SUB_COUNT]={
|
||
{0x01,2,&MngDcm_DTCSettingEnable},
|
||
{0x02,2,&MngDcm_DTCSettingDisenable}
|
||
};
|
||
|
||
/*2C服务 子服务信息列表*/
|
||
const TsDcm_h_SubCheckType CaDcm_h_2CSubCheckTable[DCM_2CSUB_COUNT]={
|
||
{0x01,8,&MngDcm_DynamicaDefineNewDid},
|
||
{0x03,4,&MngDcm_ClearDynamicaDid}
|
||
};
|
||
|
||
/*2F 服务 DID 条件检查项列表*/
|
||
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 服务 DID 条件检查项列表*/
|
||
const TsDcm_h_DidCheckType CaDcm_h_ReadDidCheckInfoTable[DCM_READ_DIDSUP_COUNT + DCM_PERIODIC_DATA_COUNT]={
|
||
{0x07,0x07,13,0xF187,&Dcm_DidServices_0xF187_ReadData},
|
||
{0x07,0x07,5,0xF18A,&Dcm_DidServices_0xF18A_ReadData},
|
||
{0x07,0x07,10,0xF197,&Dcm_DidServices_0xF197_ReadData},
|
||
{0x07,0x07,13,0xF188,&Dcm_DidServices_0xF195_ReadData},
|
||
{0x07,0x07,10,0xF191,&Dcm_DidServices_0xF191_ReadData},
|
||
{0x07,0x07,4,0x1701,&Dcm_DidServices_0x1701_ReadData},
|
||
{0x07,0x07,8,0x1702,&Dcm_DidServices_0x1702_ReadData},
|
||
{0x07,0x07,1,0x1706,&Dcm_DidServices_0x1706_ReadData},
|
||
{0x07,0x07,2,0x1707,&Dcm_DidServices_0x1707_ReadData},
|
||
{0x07,0x07,1,0x1708,&Dcm_DidServices_0x1708_ReadData},
|
||
{0x07,0x07,1,0x1709,&Dcm_DidServices_0x1709_ReadData},
|
||
{0x07,0x07,1,0x170B,&Dcm_DidServices_0x170B_ReadData},
|
||
//REVERSE
|
||
{0x07,0x07,13,0xF195,&Dcm_DidServices_0xF195_ReadData},
|
||
{0x07,0x07,10,0xF193,&Dcm_DidServices_0xF191_ReadData},
|
||
{0x07,0x07, 8,0x0200,&Dcm_DidServices_0x0200_ReadData},
|
||
{0x07,0x07, 8,0x0201,&Dcm_DidServices_0x0201_ReadData},
|
||
{0x07,0x07,16,0xF180,&Dcm_DidServices_0xF180_ReadData},
|
||
{0x07,0x07, 1,0xF186,&Dcm_DidServices_0xF186_ReadData},
|
||
{0x07,0x07, 3,0xF18B,&Dcm_DidServices_0xF18B_ReadData},
|
||
{0x07,0x07,17,0xF190,&Dcm_DidServices_0xF190_ReadData},
|
||
{0x07,0x07,16,0xF189,&Dcm_DidServices_0xF189_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},
|
||
|
||
#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 服务 DID 条件检查项列表*/
|
||
const TsDcm_h_DidCheckType CaDcm_h_WriteDidCheckInfoTable[DCM_WRITE_DIDSUP_COUNT]={
|
||
{0x06,DCM_SECURITYACCESS_LEVEL_L1, 8,0xF110,&Dcm_DidServices_0xF110_WriteData},
|
||
//{0x06,DCM_SECURITYACCESS_LEVEL_L1, 8,0xF112,&Dcm_DidServices_0xF112_WriteData},
|
||
{0x06,DCM_SECURITYACCESS_LEVEL_L1,17,0xF190,&Dcm_DidServices_0xF190_WriteData},
|
||
//{0x06,DCM_SECURITYACCESS_LEVEL_L1, 8,0xF197,&Dcm_DidServices_0xF197_WriteData},
|
||
{0x06,DCM_SECURITYACCESS_LEVEL_L1,16,0xF198,&Dcm_DidServices_0xF198_WriteData},
|
||
{0x06,DCM_SECURITYACCESS_LEVEL_L1, 4,0xF199,&Dcm_DidServices_0xF199_WriteData},
|
||
{0x06,DCM_SECURITYACCESS_LEVEL_L1, 4,0xF19D,&Dcm_DidServices_0xF19D_WriteData},
|
||
};
|
||
|
||
/*Rid FF00 检查列表*/
|
||
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 检查列表*/
|
||
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 检查列表*/
|
||
const TsDcm_h_RidSubCheckType CaDcm_h_RidFF02SubCheckTable[DCM_RIDFF02_SUB_COUNT]=
|
||
{
|
||
{0x01,4,&MngDcm_RoutineFF02Start},
|
||
{0x02,4,&MngDcm_RoutineFF02Stop},
|
||
{0x03,4,&MngDcm_RoutineFF02Result}
|
||
};
|
||
|
||
/*Rid F001 检查列表*/
|
||
const TsDcm_h_RidSubCheckType CaDcm_h_RidF001SubCheckTable[DCM_RIDF001_SUB_COUNT]=
|
||
{
|
||
{0x01,8,&MngDcm_RoutineF001Start },
|
||
{0x02,5,&MngDcm_RoutineF001Stop },
|
||
{0x03,5,&MngDcm_RoutineF001Result}
|
||
};
|
||
|
||
/*Rid 总检查列表*/
|
||
const TsDcm_h_RidCheckType CaDcm_h_RidCheckInfoTable[DCM_31RID_COUNT]={
|
||
{DCM_EXTEND_SESSION | DCM_PROGRAMME_SESSION,DCM_SECURITYACCESS_DEFAULT, ROUTINECTRL_DID_CheckProgrammingPreconditions,CaDcm_h_RidFF02SubCheckTable},
|
||
};
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
* Description: : Static Function Prototype Declaration
|
||
*****************************************************************************/
|
||
/*@静态函数声明*/
|
||
static uint8 MngDcm_SubCheckAvailable(uint8 LeDcm_u_ListLenth,uint8 LeDcm_u_Sub,__far const TsDcm_h_SubCheckType LeDcm_h_SubTable[]);
|
||
static uint8 MngDcm_SubCheckDL(uint8 LeDcm_u_SubIndex,uint16 LeDcm_u_DL,__far 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,__far const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
|
||
static uint8 MngDcm_IoDidCheckDL(uint8 LeDcm_u_DidIndex,__far const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
|
||
static uint8 MngDcm_DidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Did,__far const TsDcm_h_DidCheckType LeDcm_h_DidTable[]);
|
||
static uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,__far const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
|
||
static uint8 MngDcm_DidCheckSecurityAccess(uint8 LeDcm_u_DidIndex,__far const TsDcm_h_DidCheckType LaDcm_h_DidTable[]);
|
||
static uint8 MngDcm_RidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Rid,__far const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
|
||
static uint8 MngDcm_RidCheckSession(uint8 LeDcm_u_RidIndex,__far const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
|
||
static uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,__far const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
|
||
static uint8 MngDcm_RidCheckDL(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSubIndex,__far const TsDcm_h_RidCheckType LeDcm_h_RidTable[]);
|
||
static uint8 MngDcm_RidSubAvailable(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSub,uint8 LeDcm_u_ListLength,__far 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
|
||
*****************************************************************************/
|
||
/*@函数头注释格式,所有函数头按照此格式注释*/
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SIDCheckAvailable(uint8 LeDcm_u_Sid)
|
||
|
||
*参数 : LeDcm_u_Sid 请求的SID
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查SID的有效性
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SIDCheckSession(uint8 LeDcm_u_SidIndex)
|
||
|
||
*参数 : LeDcm_u_SidIndex 请求的SID在条件列表中的索引值
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前模式是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_SIDCheckSession(uint8 LeDcm_u_SidIndex)
|
||
{
|
||
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SupportSession&(MngDcm_GetDiagnosticSession())))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SIDCheckSecurityAccess(uint8 LeDcm_u_SidIndex)
|
||
|
||
*参数 : LeDcm_u_SidIndex 请求的SID在条件列表中的索引值
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前安全权限是否满足
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_SIDCheckSecurityAccess(uint8 LeDcm_u_SidIndex)
|
||
{
|
||
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SupportSecurityAccess&(MngDcm_GetSecurityAccessSts())))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SIDFuncAddressAvailable(uint8 LeDcm_u_SidIndex)
|
||
|
||
*参数 : LeDcm_u_SidIndex 请求的SID在条件列表中的索引值
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求方式是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_SIDFuncAddressAvailable(uint8 LeDcm_u_SidIndex)
|
||
{
|
||
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (CaDcm_h_SidCheckInfoTable[LeDcm_u_SidIndex].SupportRequestAddress&VeDcm_h_RqustInfo.RequstSty))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SIDCheckMinDL(uint8 LeDcm_u_SidIndex,uint8 LeDcm_u_DL)
|
||
|
||
*参数 : LeDcm_u_SidIndex 请求的SID在条件列表中的索引值,LeDcm_u_DL 客户端请求的 DL
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求的DL 是否满足索引的SID的最小DL
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SubCheckAvailable(uint8 LeDcm_u_ListLenth,uint8 LeDcm_u_Sub,const TsDcm_h_SubCheckType LeDcm_h_SubTable[])
|
||
|
||
*参数 : LeDcm_u_ListLenth 请求的SID的子服务信息列表长度
|
||
LeDcm_u_Sub 请求的子服务
|
||
LeDcm_h_SubTable[] 请求的SID的子服务信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求子服务是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_SubCheckAvailable(uint8 LeDcm_u_ListLenth,uint8 LeDcm_u_Sub,__far 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;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_SubCheckDL(uint8 LeDcm_u_SubIndex,uint8 LeDcm_u_DL,const TsDcm_h_SubCheckType LeDcm_h_SubTable[])
|
||
|
||
*参数 : LeDcm_u_SubIndex 请求的SID的子服务在子服务信息列表中的索引值
|
||
LeDcm_u_DL 请求的DL
|
||
LeDcm_h_SubTable[] 请求的SID的子服务信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求子服务是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_SubCheckDL(uint8 LeDcm_u_SubIndex,uint16 LeDcm_u_DL,__far 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;
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_ReadDidCheckDL(uint8 LeDcm_u_DL)
|
||
|
||
*参数 : LeDcm_u_DL 请求的DL
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求的DL是否满足要求
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 检查22 服务请求DL有效性函数
|
||
*****************************************************************************/
|
||
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;
|
||
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_ReadDidCheckDL(uint8 LeDcm_u_DL)
|
||
|
||
*参数 : LeDcm_u_DL 请求的DL
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求的DL是否满足要求
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 检查22 服务请求DL有效性函数
|
||
*****************************************************************************/
|
||
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;
|
||
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_WriteDidCheckDL(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
|
||
|
||
*参数 : LeDcm_u_DidIndex 请求的DID 在2E支持的DID信息列表中的索引值
|
||
LaDcm_h_DidTable[] 2E支持的DID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求的DL是否满足要求
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 2E 服务检查请求DL有效性函数
|
||
*****************************************************************************/
|
||
uint8 MngDcm_WriteDidCheckDL(uint8 LeDcm_u_DidIndex,__far 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,__far 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;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_DidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Did,const TsDcm_h_DidCheckType LeDcm_h_DidTable[])
|
||
|
||
*参数 : LeDcm_u_ListLenth 请求的DID信息列表长度
|
||
LeDcm_u_Did 请求的DID
|
||
LaDcm_h_DidTable[] DID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求的DID是支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 检测DID是否在列表中 如果存在 返回索引 不存在 返回 DCM_NORESULT 没找到
|
||
*****************************************************************************/
|
||
uint8 MngDcm_DidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Did,__far 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;
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
|
||
|
||
*参数 : LeDcm_u_DidIndex 请求的DID在DID信息列表中的索引值
|
||
LaDcm_h_DidTable[] DID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前会话模式是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,__far const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
|
||
{
|
||
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (LaDcm_h_DidTable[LeDcm_u_DidIndex].SupportSession&(MngDcm_GetDiagnosticSession())))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_DidCheckSession(uint8 LeDcm_u_DidIndex,const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
|
||
|
||
*参数 : LeDcm_u_DidIndex 请求的DID在DID信息列表中的索引值
|
||
LaDcm_h_DidTable[] DID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前安全权限是否满足要求
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_DidCheckSecurityAccess(uint8 LeDcm_u_DidIndex,__far const TsDcm_h_DidCheckType LaDcm_h_DidTable[])
|
||
{
|
||
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (LaDcm_h_DidTable[LeDcm_u_DidIndex].SupportSecurityAccess&(MngDcm_GetSecurityAccessSts())))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_RidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Rid,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
|
||
*参数 : LeDcm_u_ListLenth 请求的RID信息列表长度
|
||
LeDcm_u_Rid 请求的RID
|
||
LeDcm_h_RidTable[] RID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前请求的RID是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 31服务 检测RID是否在列表中 如果存在 返回索引 不存在 返回 DCM_NORESULT 没找到
|
||
*****************************************************************************/
|
||
uint8 MngDcm_RidCheckAvailable(uint8 LeDcm_u_ListLenth,uint16 LeDcm_u_Rid,__far 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;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_RidCheckSession(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
|
||
*参数 : LeDcm_u_RidIndex 请求的RID在RID信息列表中的索引值
|
||
LeDcm_h_RidTable[] RID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前会话模式是否支持
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 31服务 检查当前模式是否支持该RID
|
||
*****************************************************************************/
|
||
uint8 MngDcm_RidCheckSession(uint8 LeDcm_u_RidIndex,__far const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
{
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (LeDcm_h_RidTable[LeDcm_u_RidIndex].SupportSession&(MngDcm_GetDiagnosticSession())))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
|
||
*参数 : LeDcm_u_RidIndex 请求的RID在RID信息列表中的索引值
|
||
LeDcm_h_RidTable[] RID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查当前安全权限是否满足要求
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 31服务 检查权限是否满足要求
|
||
*****************************************************************************/
|
||
uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,__far const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
{
|
||
uint8 LeDcm_u_TempResult = DCM_CHECK_NOK;
|
||
|
||
if(DCM_FALSE != (LeDcm_h_RidTable[LeDcm_u_RidIndex].SupportSecurityAccess&(MngDcm_GetSecurityAccessSts())))
|
||
{
|
||
LeDcm_u_TempResult = DCM_CHECK_OK;
|
||
}
|
||
|
||
|
||
return LeDcm_u_TempResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_RidSubAvailable(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSub,uint8 LeDcm_u_ListLength,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
|
||
*参数 : LeDcm_u_RidIndex 请求的RID在RID信息列表中的索引值
|
||
LeDcm_u_RidSub 请求的Sub
|
||
LeDcm_u_ListLength RID支持的子服务信息列表长度
|
||
LeDcm_h_RidTable[] RID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查请求的RID是否支持当前请求的Sub
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 31服务 检查请求的RID是否支持当前请求的Sub
|
||
*****************************************************************************/
|
||
uint8 MngDcm_RidSubAvailable(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSub,uint8 LeDcm_u_ListLength,__far 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;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_RidCheckSecurityAccess(uint8 LeDcm_u_RidIndex,const TsDcm_h_RidCheckType LeDcm_h_RidTable[])
|
||
|
||
*参数 : LeDcm_u_RidIndex 请求的RID在RID信息列表中的索引值
|
||
LeDcm_u_RidSubIndex 请求的SUB在RID支持的子服务信息列表中的索引值
|
||
LeDcm_h_RidTable[] RID信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 检查请求的DL是否满足要求
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 31服务 检查请求的DL是否满足要求
|
||
*****************************************************************************/
|
||
uint8 MngDcm_RidCheckDL(uint8 LeDcm_u_RidIndex,uint8 LeDcm_u_RidSubIndex,__far 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;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcm_ReadDidDataPack(uint8* LeDcm_u_Buffer,uint8* LeDcm_u_Post,uint16 LeDcm_u_Did,uint8* LeDcm_u_Data,uint8 LeDcm_u_Length)
|
||
|
||
*参数 : LeDcm_u_Buffer 数据目标缓存数组
|
||
LeDcm_u_Post 目标缓存数组数据填充位置
|
||
LeDcm_u_Did 当前处理的DID
|
||
LeDcm_u_Data 数据的源地址
|
||
LeDcm_u_Length 数据长度
|
||
|
||
*返回值 : LeDcm_u_TempResult 处理结果
|
||
|
||
*描述 : 22 DID 读取服务的数据整理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 : 对单个DID的处理,22服务请求有多个DID时会多次调用
|
||
*****************************************************************************/
|
||
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;
|
||
|
||
}
|
||
|
||
|
||
|
||
/**********************************************诊断服务入口函数**************/
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_SessionControlService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 10 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]; /*调试暂用*/ //从TP数据提取
|
||
|
||
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_10SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_10SubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubInex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
}
|
||
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
|
||
{
|
||
/*设置NRC13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ECUResetService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 11 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]; //从TP数据提取
|
||
|
||
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_11SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_11SubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubInex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
|
||
}
|
||
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
|
||
{
|
||
/*设置NRC13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ReadDidDataService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 22 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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); /*函数返回值为不合格 或 DID 数目 */
|
||
if(DCM_CHECK_NOK != LeDcm_u_DidNumber)
|
||
{
|
||
VeDcm_h_RqustInfo.DidCount = LeDcm_u_DidNumber; /*将得到的DID 个数保存到 结构体中 */
|
||
|
||
|
||
MngDcm_DataMoveDeal(VeDcm_h_RqustInfo.Did,0,VeDcm_P_DataAddress,1,LeDcm_u_DidNumber*2); /*将具体DID 提取到结构体中*/
|
||
|
||
while(VeDcm_h_RqustInfo.DidCount > DCM_NULL)
|
||
{
|
||
/*将两个did 数组元素转换成 uint16 类型的 did 便于比较 */
|
||
LeDcm_u_CurrentDid = (((uint16)VeDcm_h_RqustInfo.Did[i])<<8) + ((uint16)VeDcm_h_RqustInfo.Did[i+1U]);
|
||
i = i + 2U; /*指向下一个did */
|
||
|
||
LeDcm_u_DidIndex = MngDcm_DidCheckAvailable(DCM_READ_DIDSUP_COUNT + DCM_PERIODIC_DATA_COUNT,LeDcm_u_CurrentDid,CaDcm_h_ReadDidCheckInfoTable); /*检查是否是否支持该DID*/ /*返回为当前DID索引或不支持*/
|
||
|
||
if(DCM_NORESULT != LeDcm_u_DidIndex)
|
||
{
|
||
|
||
LeDcm_u_SessionCheckResult = MngDcm_DidCheckSession(LeDcm_u_DidIndex,CaDcm_h_ReadDidCheckInfoTable); /*检查当前模式是否支持该DID*/
|
||
if(DCM_CHECK_OK == LeDcm_u_SessionCheckResult)
|
||
{
|
||
LeDcm_u_SecurityAccessCheckResult = MngDcm_DidCheckSecurityAccess(LeDcm_u_DidIndex,CaDcm_h_ReadDidCheckInfoTable); /*检查当前权限是否满足*/
|
||
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
|
||
{
|
||
LeDcm_u_FuncDealResult = CaDcm_h_ReadDidCheckInfoTable[LeDcm_u_DidIndex].Function(LeDcm_u_SingleDidBuffer,&LeDcm_u_SingleDidDataLength); /*查表调用具体DID处理函数*/
|
||
|
||
VeDcm_h_RqustInfo.DidCount = VeDcm_h_RqustInfo.DidCount - 1U; /*减去已处理的DID*/
|
||
|
||
if(DCM_CHECK_OK !=LeDcm_u_FuncDealResult) /*如果具体处理函数产生NRC*/
|
||
{
|
||
/*接收返回值作为NRC*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[LeDcm_u_FuncDealResult]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
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); /*将读取的DID数据整合到一个数组*/
|
||
}
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 33*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC33]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
LeDcm_u_BreakFlag = 1U;
|
||
break;
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
LeDcm_u_NotSupDidNumber++; /*当前不支持加1*/
|
||
VeDcm_h_RqustInfo.DidCount--; /*减去已处理的DID*/
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
LeDcm_u_NotSupDidNumber++; /*当前不支持加1 不支持的DID 暂时做成当前不支持*/
|
||
VeDcm_h_RqustInfo.DidCount--; /*减去已处理的DID*/
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/*所有DID处理完成*/
|
||
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); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 31*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
LeDcm_u_CollectDataBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
SetCanTp_TxBuffer(LeDcm_u_CollectDataPost,LeDcm_u_CollectDataBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultPosRsp;
|
||
}
|
||
}
|
||
else
|
||
{}
|
||
|
||
|
||
}
|
||
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;
|
||
}
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ReadMemoryDataService
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 23 服务入口函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
|
||
TeDcm_h_ResultType MngDcm_ReadMemoryDataService(void)
|
||
{
|
||
|
||
}
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_SecurityAccessService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 27 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]; ; /*从TP数据提取*/
|
||
|
||
LeDcm_u_SubIndex = MngDcm_SubCheckAvailable(DCM_27SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_27SubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubIndex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
|
||
}
|
||
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
|
||
{
|
||
/*设置NRC13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_CommunicationControlService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 28 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]; //从TP数据提取
|
||
|
||
LeDcm_u_SubIndex = MngDcm_SubCheckAvailable(DCM_28SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_28SubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubIndex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
}
|
||
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
|
||
{
|
||
/*设置NRC13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_WriteDidDataService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 2E 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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); /*将具体DID 提取到结构体中*/
|
||
|
||
LeDcm_u_CurrentDid = (((uint16)VeDcm_h_RqustInfo.Did[0])<<8) + ((uint16)VeDcm_h_RqustInfo.Did[1]); /*将两个did 数组元素转换成 uint16 类型的 did 便于比较 */
|
||
|
||
LeDcm_u_DidIndex = MngDcm_DidCheckAvailable(DCM_WRITE_DIDSUP_COUNT,LeDcm_u_CurrentDid,CaDcm_h_WriteDidCheckInfoTable); /*检查是否是否支持该DID*/ /*返回为当前DID索引或不支持*/
|
||
|
||
if(DCM_NORESULT != LeDcm_u_DidIndex)
|
||
{
|
||
LeDcm_u_DLCheckResult = MngDcm_WriteDidCheckDL(LeDcm_u_DidIndex,CaDcm_h_WriteDidCheckInfoTable); /*检查DL是否满足要求 */
|
||
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); /*将具体DID 提取到结构体中*/
|
||
LeDcm_u_DidDataLength = CaDcm_h_WriteDidCheckInfoTable[LeDcm_u_DidIndex].DataLength;
|
||
|
||
LeDcm_u_SessionCheckResult = MngDcm_DidCheckSession(LeDcm_u_DidIndex,CaDcm_h_WriteDidCheckInfoTable); /*检查当前模式是否支持该DID*/
|
||
if(DCM_CHECK_OK == LeDcm_u_SessionCheckResult)
|
||
{
|
||
LeDcm_u_SecurityAccessCheckResult = MngDcm_DidCheckSecurityAccess(LeDcm_u_DidIndex,CaDcm_h_WriteDidCheckInfoTable); /*检查当前权限是否满足*/
|
||
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
|
||
{
|
||
|
||
LeDcm_u_FuncDealResult = CaDcm_h_WriteDidCheckInfoTable[LeDcm_u_DidIndex].Function(VeDcm_h_RqustInfo.WriteData,&LeDcm_u_DidDataLength); /*查表调用具体DID处理函数*/
|
||
|
||
if(DCM_CHECK_OK !=LeDcm_u_FuncDealResult) /*如果具体处理函数产生NRC*/
|
||
{
|
||
/*接收返回值作为NRC*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[LeDcm_u_FuncDealResult]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
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); /*调用接口发送响应数据*/
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
/*设置NRC 33*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC33]); /*整理负响应数据*/
|
||
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
|
||
{
|
||
/*设置NRC 31*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
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
|
||
{
|
||
/*设置NRC31*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
|
||
}
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_WriteMemoryDataService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 3D 服务入口函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_WriteMemoryDataService(void)
|
||
{
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
/*设置NRC22*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_DynamicaDefineIdentifier(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 2C 服务入口函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_DynamicaDefineIdentifier(void)
|
||
{
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
/*设置NRC22*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_CleanDTCService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 14 服务入口函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_CleanDTCService(void)
|
||
{
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
uint8 LaDcm_u_TempBuffer;
|
||
uint32 DTC;
|
||
if(VeDcm_h_RqustInfo.DL == 4)
|
||
{
|
||
DTC = VeDcm_P_DataAddress[1];
|
||
DTC <<= 8;
|
||
DTC |= VeDcm_P_DataAddress[2];
|
||
DTC <<= 8;
|
||
DTC |= VeDcm_P_DataAddress[3];
|
||
//DTC = (uint32)((uint32)VeDcm_P_DataAddress[1])<<16 + (uint32)((uint32)VeDcm_P_DataAddress[2])<<8 + (uint32)VeDcm_P_DataAddress[3];
|
||
if((DTC == 0x800000)||(DTC == 0xFFFFFF))
|
||
{
|
||
if(DCM_ACTIVE == MngDcm_CleanDtc())
|
||
{
|
||
LaDcm_u_TempBuffer = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
SetCanTp_TxBuffer(1U,&LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ReadDTCInfoService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 19 服务入口函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_ReadDTCInfoService(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]; //从TP数据提取
|
||
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_19SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_19SubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubInex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
LeDcm_u_DLCheckResult = MngDcm_SubCheckDL(LeDcm_u_SubInex,VeDcm_h_RqustInfo.DL,CaDcm_h_19SubCheckTable);
|
||
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
|
||
{
|
||
LeDcm_u_FinallyResult = CaDcm_h_19SubCheckTable[LeDcm_u_SubInex].SubFunction();
|
||
}
|
||
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;
|
||
}
|
||
}
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_IOCtrlDIDService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 2F 服务入口函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_IOCtrlDIDService(void)
|
||
{
|
||
uint8 LeDcm_u_DidIndex;
|
||
uint8 LeDcm_u_SessionCheckResult;
|
||
uint8 LeDcm_u_DLCheckResult;
|
||
uint8 LeDcm_u_SecurityAccessCheckResult;
|
||
uint8 LeDcm_u_FuncDealResult;
|
||
uint8 LaDcm_u_TempBuffer[6];
|
||
uint16 LeDcm_u_CurrentDid;
|
||
uint8 LeDcm_u_DidDataLength;
|
||
uint8 LeDcm_u_CollectDataPost = 3U;
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
|
||
MngDcm_DataMoveDeal(VeDcm_h_RqustInfo.Did,0,VeDcm_P_DataAddress,1,2); /*将具体DID 提取到结构体中*/
|
||
|
||
LeDcm_u_CurrentDid = (((uint16)VeDcm_h_RqustInfo.Did[0])<<8) + ((uint16)VeDcm_h_RqustInfo.Did[1]); /*将两个did 数组元素转换成 uint16 类型的 did 便于比较 */
|
||
|
||
LeDcm_u_DidIndex = MngDcm_DidCheckAvailable(DCM_IO_DIDSUP_COUNT,LeDcm_u_CurrentDid,CaDcm_h_IODidCheckInfoTable); /*检查是否是否支持该DID*/ /*返回为当前DID索引或不支持*/
|
||
|
||
if(DCM_NORESULT != LeDcm_u_DidIndex)
|
||
{
|
||
MngDcm_DataMoveDeal(VeDcm_h_RqustInfo.WriteData,0,VeDcm_P_DataAddress,3,CaDcm_h_IODidCheckInfoTable[LeDcm_u_DidIndex].DataLength); /*将具体DID 提取到结构体中*/
|
||
|
||
LeDcm_u_SessionCheckResult = MngDcm_DidCheckSession(LeDcm_u_DidIndex,CaDcm_h_IODidCheckInfoTable); /*检查当前模式是否支持该DID*/
|
||
if(DCM_CHECK_OK == LeDcm_u_SessionCheckResult)
|
||
{
|
||
LeDcm_u_SecurityAccessCheckResult = MngDcm_DidCheckSecurityAccess(LeDcm_u_DidIndex,CaDcm_h_IODidCheckInfoTable); /*检查当前权限是否满足*/
|
||
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
|
||
{
|
||
LeDcm_u_DidDataLength = CaDcm_h_IODidCheckInfoTable[LeDcm_u_DidIndex].DataLength; //VeDcm_h_RqustInfo.DL ;
|
||
LeDcm_u_FuncDealResult = CaDcm_h_IODidCheckInfoTable[LeDcm_u_DidIndex].Function(VeDcm_h_RqustInfo.WriteData,&LeDcm_u_DidDataLength); /*查表调用具体DID处理函数*/
|
||
|
||
if(DCM_CHECK_OK !=LeDcm_u_FuncDealResult) /*如果具体处理函数产生NRC*/
|
||
{
|
||
/*接收返回值作为NRC*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[LeDcm_u_FuncDealResult]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
else
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Did[0];
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Did[1];
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.WriteData[0];
|
||
LaDcm_u_TempBuffer[4] = VeDcm_h_RqustInfo.WriteData[1];
|
||
LaDcm_u_TempBuffer[5] = VeDcm_h_RqustInfo.WriteData[2];
|
||
LeDcm_u_DidDataLength = VeDcm_h_RqustInfo.DL;
|
||
SetCanTp_TxBuffer(LeDcm_u_DidDataLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 33*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC33]); /*整理负响应数据*/
|
||
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
|
||
{
|
||
/*设置NRC 31*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC31*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineControlService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 31 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]); /*将具体RID 提取到结构体中*/
|
||
VeDcm_h_RqustInfo.Sub = VeDcm_P_DataAddress[1]; /*sub*/ //从TP数据提取
|
||
LeDcm_u_RidIndex = MngDcm_RidCheckAvailable(DCM_31RID_COUNT,VeDcm_h_RqustInfo.Rid,CaDcm_h_RidCheckInfoTable); /*检查是否是否支持该RID*/ /*返回为当前RID索引或不支持*/
|
||
if(DCM_NORESULT != LeDcm_u_RidIndex)
|
||
{
|
||
LeDcm_u_SessionCheckResult = MngDcm_RidCheckSession(LeDcm_u_RidIndex,CaDcm_h_RidCheckInfoTable); /*检查当前模式是否支持该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); /*检查DL是否满足要求 */
|
||
if(DCM_CHECK_OK == LeDcm_u_DLCheckResult)
|
||
{
|
||
LeDcm_u_FinallyResult = CaDcm_h_RidCheckInfoTable[LeDcm_u_RidIndex].RidSubTable[LeDcm_u_RidSubIndex].Function(); /*调用对应子函数处理 */
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
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
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
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
|
||
{
|
||
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
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
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7E]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
|
||
}
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_TesterPresentService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 3E 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]; /*调试暂用*/ //从TP数据提取
|
||
|
||
LeDcm_u_SubInex = MngDcm_SubCheckAvailable(DCM_3ESUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_3ESubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubInex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
}
|
||
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
|
||
{
|
||
/*设置NRC13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 :TeDcm_h_ResultType MngDcm_DTCSettingControlService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 85 服务入口函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
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]; /*从TP数据提取*/
|
||
|
||
if(MngDcm_GetDiagnosticSession() != DCM_EXTEND_SESSION)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
return CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7F]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
return CeDcm_e_ResultNoRsp;
|
||
|
||
}
|
||
}
|
||
|
||
|
||
LeDcm_u_SubIndex = MngDcm_SubCheckAvailable(DCM_85SUB_COUNT,VeDcm_h_RqustInfo.Sub,CaDcm_h_85SubCheckTable); /*检查子服务是否支持*/
|
||
if(DCM_NORESULT == LeDcm_u_SubIndex)
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC12*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC12]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
}
|
||
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
|
||
{
|
||
/*设置NRC13*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC13]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|