2195 lines
75 KiB
C
2195 lines
75 KiB
C
|
||
/******************************************************************************
|
||
| File Name : Dcm_App.c
|
||
| Description: 诊断服务具体处理
|
||
*****************************************************************************/
|
||
|
||
/******************************************************************************
|
||
* Description: : Include File Section
|
||
******************************************************************************/
|
||
#include "r_cg_macrodriver.h"
|
||
#include "Dcm_App.h"
|
||
#include "Dcm_extern.h"
|
||
#include "r_cg_userdefine.h"
|
||
#include "pfdl.h"
|
||
|
||
/******************************************************************************
|
||
* Description: : Global Variable Definition Section
|
||
******************************************************************************/
|
||
|
||
TsDcm_h_RquestInfo VeDcm_h_RqustInfo; /*提取请求信息的结构体*/
|
||
uint8 VaDcm_u_NegRspTxBuffer[3]; /*负响应发送数据的缓存数组*/
|
||
|
||
|
||
|
||
uint8* VeDcm_P_DataAddress ; /*TP层数据地址*/
|
||
|
||
//uint32_t ReprogmaValid = 0xAA5555AA;
|
||
|
||
|
||
/******************************************************************************
|
||
* Description: : Static Variable Definition Section
|
||
******************************************************************************/
|
||
|
||
|
||
static uint16 SeDcm_u_DL; /*TP层数据长度*/
|
||
static uint8 SeDcm_u_RequstSty; /*TP层数据请求方式*/
|
||
|
||
|
||
static uint16 SeDcm_w_S3ServerTime; /*S3ServerTime计数*/
|
||
static uint8 SeDcm_u_S3ServerTimeSts; /*S3计数状态 继续 或 停止*/
|
||
static uint8 SeDcm_u_DiagnosticSession ; /*诊断会话模式*/
|
||
static uint8 SeDcm_u_SecurityAccessState; /*安全权限状态*/
|
||
static uint8 SeDcm_u_DtcSetSts; /*DTC设置状态*/
|
||
static uint8 SeDcm_u_NetworkMsgSts; /*网络管理报文收发权限状态*/
|
||
//static
|
||
uint8 SeDcm_u_NormalMsgSts; /*应用报文收发权限状态*/
|
||
|
||
static uint16 SeDcm_u_KeyErrorCount; /*27 服务密钥错误次数计数*/
|
||
static uint16 SeDcm_u_KeyErrorDelayCount; /*27 服务密钥错误延时计数*/
|
||
static uint8 SaDcm_u_RequestCounter; /*27 服务种子请求计数 */
|
||
static uint16 SaDcm_u_RequestDelayCount;
|
||
|
||
static uint8 SeDcm_u_SecurityAccessServerSts; /*27 服务状态*/
|
||
|
||
static uint16 CeDcm_u_P2serverTime = 0x0032; /* P2server 时间 标定量*/
|
||
static uint16 CeDcm_u_P2ExtserverTime = 0x00C8; /* P2*server 时间 标定量*/
|
||
|
||
static uint32 SeDcm_w_SecurityAccessSeed = 0x12345678; /*27 服务 种子*/
|
||
static uint32 SeDcm_u_SecurityAccessKey; /*27 服务密钥*/
|
||
static uint32 CeDcm_w_SecurityAccessFBLMask = 0xAC856D89; /*27 服务掩码*/
|
||
|
||
static TeDcm_e_DownLoadStsType SeDcm_u_DownLoadDataSts; /*34 36 37 数据下载相关服务处理状态*/
|
||
static uint32 SeDcm_w_DownLoadDataLength; /*34 请求下载的数据长度*/
|
||
static uint32 SeDcm_w_TransmitDataCount; /*36 已传输的数据量计数*/
|
||
static uint8 SeDcm_u_BlockSequenceCountSts; /*36 传输块编号*/
|
||
static uint16 CaDcm_w_SingleAllowDateLength = 0x03E8;
|
||
|
||
static TeDcm_e_RidStsType SeDcm_u_RidFF02Sts; /*例程 FF02 状态*/
|
||
static TeDcm_e_RidStsType SeDcm_u_RidFF00Sts; /*例程 FF00 状态*/
|
||
static TeDcm_e_RidStsType SeDcm_u_RidFF01Sts; /*例程 FF01 状态*/
|
||
static TeDcm_e_RidStsType SeDcm_u_RidF001Sts; /*例程 F001 状态*/
|
||
static RidRunSts_T RidFF02RunSts; /* 例程 FF02 执行情况 */
|
||
|
||
static DcmReset_T DcmResetReady;
|
||
/******************************************************************************
|
||
* Description: : Static Function Prototype Declaration
|
||
*****************************************************************************/
|
||
|
||
static void MngDcm_CleanRequstInfo(void);
|
||
|
||
|
||
unsigned char DF_Write(unsigned char* write_buf,unsigned char data_num,unsigned char len);
|
||
RidRunSts_T GetRidFF02RunSts(void);
|
||
void CleanIoDid(void);
|
||
|
||
/******************************************************************************
|
||
* Description: : Write User Function Code
|
||
*****************************************************************************/
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcm_CleanRequstInfo(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : 清除请求信息
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void MngDcm_CleanRequstInfo(void)
|
||
{
|
||
uint8 i;
|
||
VeDcm_h_RqustInfo.DL= 0x00; /*有效字节长度*/
|
||
VeDcm_h_RqustInfo.Sid = 0x00; /*SID*/
|
||
VeDcm_h_RqustInfo.RequstSty = 0x00; /*请求方式*/
|
||
VeDcm_h_RqustInfo.Sub = 0x00; /*子服务*/
|
||
|
||
for(i = 0;i < 3;i++)
|
||
{
|
||
VeDcm_h_RqustInfo.DtcGroup[i] = 0x00; /*DTC组*/
|
||
}
|
||
|
||
VeDcm_h_RqustInfo.StateMask = 0x00; /*请求的 状态掩码*/
|
||
|
||
for(i = 0;i < 4;i++)
|
||
{
|
||
VeDcm_h_RqustInfo.Key[i] = 0x00; /*密钥信息*/
|
||
}
|
||
|
||
VeDcm_h_RqustInfo.CommType = 0x00; /*通讯类型*/
|
||
|
||
for(i = 0;i < DCM_READDID_MAXNUMBER*2 ;i++)
|
||
{
|
||
VeDcm_h_RqustInfo.Did[i] = 0x00; /*具体DID*/
|
||
}
|
||
|
||
VeDcm_h_RqustInfo.DidCount = DCM_NULL; /*DID个数*/
|
||
VeDcm_h_RqustInfo.Rid = 0x00; /*写操作目标DID*/
|
||
|
||
for(i = 0;i < DCM_WRITEDATA_MAXLENGTH;i++)
|
||
{
|
||
VeDcm_h_RqustInfo.WriteData[i] = 0x00; /*写入的数据*/
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_CollectRequstInfo(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_TempResult 数据获取结果 获取成功或失败
|
||
|
||
*描述 : 从TP层获取基本信息 请求方式、DL 、sid
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_CollectRequstInfo(void)
|
||
{
|
||
uint8 LeDcm_TempResult = DCM_CHECK_NOK;
|
||
MngDcm_CleanRequstInfo(); /* 清请求数据*/
|
||
|
||
|
||
if(CeCanTp_e_Full == GetCanTp_e_RxBufferSts(&SeDcm_u_RequstSty,&SeDcm_u_DL,&VeDcm_P_DataAddress))
|
||
{
|
||
LeDcm_TempResult = DCM_CHECK_OK;
|
||
if(CeCanTp_e_Physical ==SeDcm_u_RequstSty)
|
||
{
|
||
VeDcm_h_RqustInfo.RequstSty = DCM_PHYSICAL_ADDRESS;
|
||
}
|
||
else
|
||
{
|
||
VeDcm_h_RqustInfo.RequstSty = DCM_FUNCTIONAL_ADDRESS;
|
||
}
|
||
|
||
VeDcm_h_RqustInfo.DL = SeDcm_u_DL;
|
||
VeDcm_h_RqustInfo.Sid = VeDcm_P_DataAddress[0];
|
||
}
|
||
else
|
||
{}
|
||
|
||
return LeDcm_TempResult;
|
||
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_DtcAvailableCheck(uint8* LeDcm_u_Dtc,const TsDcm_h_DtcGroupType LeDcm_u_DtcTable[])
|
||
|
||
*参数 : LeDcm_u_Dtc 需要查找的DTC
|
||
LeDcm_u_DtcTable[] 支持的DTC列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 数据获取结果 获取成功或失败
|
||
|
||
*描述 : 检查DTC是否支持
|
||
|
||
*编辑时间 : 2015-10-23
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_DtcAvailableCheck(uint8* LeDcm_u_Dtc,const TsDcm_h_DtcGroupType LeDcm_u_DtcTable[])
|
||
{
|
||
uint8 i;
|
||
uint8 LeDcm_u_TempResult = DCM_NORESULT;
|
||
for(i=0 ; i < DCM_SUPDTC_COUNT; i++)
|
||
{
|
||
if((LeDcm_u_Dtc[0] == LeDcm_u_DtcTable[i].DtcHigh)&&(LeDcm_u_Dtc[1] == LeDcm_u_DtcTable[i].DtcMiddle)&&(LeDcm_u_Dtc[2] == LeDcm_u_DtcTable[i].DtcLow))
|
||
{
|
||
LeDcm_u_TempResult = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return LeDcm_u_TempResult;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_ExtDataRecordAvailableCheck(uint8 LeDcm_u_ExtDataRecord,const DTCExtDataRecordType LeDcm_u_ExtDataRecordTable[])
|
||
|
||
*参数 : LeDcm_u_ExtDataRecord 请求的ExtDataRecord
|
||
ExtDataRecordTable[] 支持的ExtDataRecord信息列表
|
||
|
||
*返回值 : LeDcm_u_TempResult 数据获取结果 获取成功或失败
|
||
|
||
*描述 : 检查参数 ExtDataRecord 是否支持
|
||
|
||
*编辑时间 : 2015-10-23
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_ExtDataRecordAvailableCheck(uint8 LeDcm_u_ExtDataRecord,const DTCExtDataRecordType LeDcm_u_ExtDataRecordTable[])
|
||
{
|
||
uint8 i;
|
||
uint8 LeDcm_u_TempResult = DCM_NORESULT;
|
||
for(i=0 ; i < DCM_19SUPDTCEXTDATARECORD_COUNT; i++)
|
||
{
|
||
if(LeDcm_u_ExtDataRecord == LeDcm_u_ExtDataRecordTable[i].DTCExtDataRecordNumber)
|
||
{
|
||
LeDcm_u_TempResult = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return LeDcm_u_TempResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_DefaultSessionDeal(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 进入 默认会话模式 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_DefaultSessionDeal(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[6];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
uint32 DcmResetDelay;
|
||
|
||
SeDcm_u_S3ServerTimeSts = DCM_S3SEVERTIMER_STOP; /*S3server 计时停止*/
|
||
if( DCM_PROGRAMME_SESSION == SeDcm_u_DiagnosticSession)
|
||
DcmResetReady = DCM_RESET_READY;
|
||
SeDcm_u_DiagnosticSession = DCM_DEFAULT_SESSION; /*会话模式 默认模式*/
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_DEFAULT; /*安全模式锁定*/
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_ENABLE; /*DTC设置使能*/
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发使能*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发使能*/
|
||
//CleanIoDid();
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
LaDcm_u_TempBuffer[2] = (uint8)(CeDcm_u_P2serverTime>>8);
|
||
LaDcm_u_TempBuffer[3] = (uint8)(CeDcm_u_P2serverTime&0xFF);
|
||
LaDcm_u_TempBuffer[4] = (uint8)(CeDcm_u_P2ExtserverTime>>8);
|
||
LaDcm_u_TempBuffer[5] = (uint8)(CeDcm_u_P2ExtserverTime&0xFF);
|
||
|
||
SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
|
||
if( DCM_RESET_READY == DcmResetReady)
|
||
{
|
||
while(++DcmResetDelay < 80000);
|
||
SetMcu_SoftReset();
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ProgramSessionDeal(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 进入 编程会话模式 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_ProgramSessionDeal(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[6];
|
||
uint32 ResetDelayCnt = 0;
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
SeDcm_u_S3ServerTimeSts = DCM_S3SEVERTIMER_CONTINUE; /*S3server 计时继续*/
|
||
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*S3server 计时计数值重新装载*/
|
||
if( DCM_DEFAULT_SESSION != SeDcm_u_DiagnosticSession )
|
||
{
|
||
// 78
|
||
//MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
|
||
//SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
|
||
|
||
SeDcm_u_DiagnosticSession = DCM_PROGRAMME_SESSION; /*会话模式编程模式*/
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_DEFAULT; /*安全模式 锁定*/
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_ENABLE; /*DTC设置使能*/
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发使能*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_DISENABLE; /*应用报文收发使能*/
|
||
//ReprogmaValid = 0xAA5555AA;
|
||
//if( 0 == DF_Write((uint8*)(&ReprogmaValid),GetIndexNumber(INDEX_REPROGMA),sizeof(ReprogmaValid))) //R_FDL_OK => 0
|
||
if(1)
|
||
{
|
||
KamData.boot_enable = RPRGRM_REQ_VALID;
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
KamData.AckReq = ACK_REQ;
|
||
KamData.AckLenth = 7;
|
||
KamData.RspData[0] = 0x06;
|
||
KamData.RspData[1] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
KamData.RspData[2] = VeDcm_h_RqustInfo.Sub;
|
||
KamData.RspData[3] = (uint8)(CeDcm_u_P2serverTime>>8);
|
||
KamData.RspData[4] = (uint8)(CeDcm_u_P2serverTime&0xFF);
|
||
KamData.RspData[5] = (uint8)(CeDcm_u_P2ExtserverTime>>8);
|
||
KamData.RspData[6] = (uint8)(CeDcm_u_P2ExtserverTime&0xFF);
|
||
KamData.RspData[7] = 0x55;
|
||
#if 0
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
LaDcm_u_TempBuffer[2] = (uint8)(CeDcm_u_P2serverTime>>8);
|
||
LaDcm_u_TempBuffer[3] = (uint8)(CeDcm_u_P2serverTime&0xFF);
|
||
LaDcm_u_TempBuffer[4] = (uint8)(CeDcm_u_P2ExtserverTime>>8);
|
||
LaDcm_u_TempBuffer[5] = (uint8)(CeDcm_u_P2ExtserverTime&0xFF);
|
||
while(++ResetDelayCnt < 100000);
|
||
SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
#endif
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
KamData.AckReq = 0;
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
//ResetDelayCnt = 0;
|
||
//while(++ResetDelayCnt < 10000);
|
||
SetMcu_SoftReset();
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 22*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7E]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ExtendedSessionDeal(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 进入 扩展会话模式 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_ExtendedSessionDeal(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[6];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
SeDcm_u_S3ServerTimeSts = DCM_S3SEVERTIMER_CONTINUE; /*S3server 计时继续*/
|
||
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*S3server 计时计数值重新装载*/
|
||
if(SeDcm_u_DiagnosticSession != DCM_EXTEND_SESSION)
|
||
{
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_ENABLE; /*DTC设置使能*/
|
||
SeDcm_u_DiagnosticSession = DCM_EXTEND_SESSION; /*会话模式 扩展模式*/
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发使能*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发使能*/
|
||
}
|
||
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_DEFAULT; /*安全模式 锁定*/
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
LaDcm_u_TempBuffer[2] = (uint8)(CeDcm_u_P2serverTime>>8);
|
||
LaDcm_u_TempBuffer[3] = (uint8)(CeDcm_u_P2serverTime&0xFF);
|
||
LaDcm_u_TempBuffer[4] = (uint8)(CeDcm_u_P2ExtserverTime>>8);
|
||
LaDcm_u_TempBuffer[5] = (uint8)(CeDcm_u_P2ExtserverTime&0xFF);
|
||
|
||
//SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_L2_UNLOCK; /*置安全权限为 解锁状态 */
|
||
|
||
SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_SoftResetDeal(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 11 03 请求软件复位 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_SoftResetDeal(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
static uint32 ResetDelayCnt;
|
||
|
||
//重启ECU接口
|
||
if(SeDcm_u_DiagnosticSession != DCM_DEFAULT_SESSION)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
KamData.AckReq = ACK_REQ;
|
||
KamData.AckLenth = 3;
|
||
KamData.RspData[0] = 0x02;
|
||
KamData.RspData[1] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
KamData.RspData[2] = VeDcm_h_RqustInfo.Sub;
|
||
KamData.RspData[3] = 0x55;
|
||
KamData.RspData[4] = 0x55;
|
||
KamData.RspData[5] = 0x55;
|
||
KamData.RspData[6] = 0x55;
|
||
KamData.RspData[7] = 0x55;
|
||
#if 0
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
#endif
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
KamData.AckReq = 0;
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
if(LeDcm_u_Result == CeDcm_e_ResultPosRsp)
|
||
{
|
||
#if 0
|
||
while(ResetDelayCnt < 0x80000)
|
||
{
|
||
ResetDelayCnt++;
|
||
}
|
||
#endif
|
||
SetMcu_SoftReset();
|
||
}
|
||
else
|
||
SetMcu_SoftReset();
|
||
}
|
||
else
|
||
{
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC7F]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RequestSeekDeal( uint8 SecurityLevel)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 27 请求种子 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RequestSeekDeal( uint8 SecurityLevel)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[6],savebuf[4];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
//SeDcm_u_KeyErrorDelayCount = 0;
|
||
|
||
if(SaDcm_u_RequestCounter < 5)
|
||
{
|
||
SaDcm_u_RequestCounter++;
|
||
KamData.SeedReqTimes = SaDcm_u_RequestCounter | 0x10;
|
||
if(SaDcm_u_RequestCounter == 5)
|
||
{
|
||
SaDcm_u_RequestDelayCount = DCM_SASERVERSTS_ERRORDELAY_COUNT;
|
||
SeDcm_u_KeyErrorCount = 3;
|
||
KamData.KeyErrTimes = SeDcm_u_KeyErrorCount | 0x10;
|
||
}
|
||
|
||
ReadFlashData(savebuf,0x000F1800,4);
|
||
savebuf[0] = SaDcm_u_RequestCounter;
|
||
savebuf[1] = SeDcm_u_KeyErrorCount;
|
||
WriteDataflash(savebuf,0x000F1800,4);
|
||
|
||
}//fcb
|
||
|
||
if(0==SeDcm_u_KeyErrorDelayCount && 0==SaDcm_u_RequestDelayCount)
|
||
{
|
||
if(SaDcm_u_RequestCounter == 5)
|
||
{
|
||
SaDcm_u_RequestCounter=0;
|
||
KamData.SeedReqTimes = 0;
|
||
|
||
ReadFlashData(savebuf,0x000F1800,4);
|
||
savebuf[0] = SaDcm_u_RequestCounter;
|
||
savebuf[1] = SeDcm_u_KeyErrorCount;
|
||
WriteDataflash(savebuf,0x000F1800,4);
|
||
|
||
}
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
if(MngDcm_GetSecurityAccessSts() != DCM_SECURITYACCESS_DEFAULT)
|
||
{
|
||
LaDcm_u_TempBuffer[2] = 0;
|
||
LaDcm_u_TempBuffer[3] = 0;
|
||
LaDcm_u_TempBuffer[4] = 0;
|
||
LaDcm_u_TempBuffer[5] = 0;
|
||
}
|
||
else
|
||
{
|
||
SeDcm_w_SecurityAccessSeed = GetSeed();
|
||
LaDcm_u_TempBuffer[2] = (uint8)(SeDcm_w_SecurityAccessSeed>>24)&0xFF;
|
||
LaDcm_u_TempBuffer[3] = (uint8)(SeDcm_w_SecurityAccessSeed>>16)&0xFF;
|
||
LaDcm_u_TempBuffer[4] = (uint8)(SeDcm_w_SecurityAccessSeed>>8)&0xFF;
|
||
LaDcm_u_TempBuffer[5] = (uint8)SeDcm_w_SecurityAccessSeed&0xFF;
|
||
}
|
||
SeDcm_u_SecurityAccessServerSts |= DCM_SASERVERSTS_REQUESTKEY; /*置27 服务为 已请求种子*/
|
||
|
||
SeDcm_u_SecurityAccessKey = GENERIC_ALGORITHM(SeDcm_w_SecurityAccessSeed,SecurityLevel);
|
||
|
||
SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp; /*设置为不响应*/
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 37*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC37]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_KeyCkeckDeal(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 27 密钥校验 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_KeyCkeckDeal(uint8 dummy)
|
||
{
|
||
uint8 i;
|
||
uint8 LaDcm_u_TempBuffer[2],savebuf[4];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
uint32 LeDcm_w_Key;
|
||
|
||
|
||
if(DCM_SASERVERSTS_REQUESTKEY & SeDcm_u_SecurityAccessServerSts)
|
||
{
|
||
SaDcm_u_RequestCounter = 0;
|
||
KamData.SeedReqTimes = SaDcm_u_RequestCounter;
|
||
for(i = 0;i < DCM_SASERVER_KEYLENGTH;i++) /*获取客户端发送过来的密钥*/
|
||
{
|
||
VeDcm_h_RqustInfo.Key[i] = VeDcm_P_DataAddress[i+2];
|
||
}
|
||
|
||
LeDcm_w_Key = ((uint32)VeDcm_h_RqustInfo.Key[0]<<24) + ((uint32)VeDcm_h_RqustInfo.Key[1]<<16) + ((uint32)VeDcm_h_RqustInfo.Key[2]<<8) + VeDcm_h_RqustInfo.Key[3];
|
||
|
||
if(LeDcm_w_Key != SeDcm_u_SecurityAccessKey) /*密钥校验*/
|
||
//if(LeDcm_w_Key != SeDcm_w_SecurityAccessSeed) /*密钥校验*/
|
||
{
|
||
SeDcm_u_KeyErrorCount++; /*密钥不符合 密钥错误数加1*/
|
||
KamData.KeyErrTimes = SeDcm_u_KeyErrorCount | 0x10;
|
||
|
||
ReadFlashData(savebuf,0x000F1800,4);
|
||
savebuf[0] = SaDcm_u_RequestCounter;
|
||
savebuf[1] = SeDcm_u_KeyErrorCount;
|
||
WriteDataflash(savebuf,0x000F1800,4);
|
||
|
||
}
|
||
else /*密钥验证通过*/
|
||
{
|
||
SeDcm_u_KeyErrorCount = 0U; /*密钥错误次数清零*/
|
||
KamData.KeyErrTimes = SeDcm_u_KeyErrorCount;
|
||
|
||
ReadFlashData(savebuf,0x000F1800,4);
|
||
savebuf[0] = SaDcm_u_RequestCounter;
|
||
savebuf[1] = SeDcm_u_KeyErrorCount;
|
||
WriteDataflash(savebuf,0x000F1800,4);
|
||
|
||
if(dummy == 0x02)
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_L1_UNLOCK; /*置安全权限为 解锁状态 */
|
||
else if(dummy == 0x12)
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_L2_UNLOCK; /*置安全权限为 解锁状态 */
|
||
}
|
||
|
||
if(0 == SeDcm_u_KeyErrorCount) /*密钥没有错误*/
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80))
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SeDcm_u_SecurityAccessServerSts = DCM_SECURITYACCESS_DEFAULT; /*置27 服务为 默认状态 */
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
|
||
}
|
||
else if(SeDcm_u_KeyErrorCount>0&&SeDcm_u_KeyErrorCount<DCM_SASERVER_KEYERRORCOUNT) /*密钥错误次数在允许范围*/
|
||
{
|
||
/*设置NRC 35*/
|
||
SeDcm_u_SecurityAccessServerSts = DCM_SECURITYACCESS_DEFAULT; /*置27 服务为 默认状态 */
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC35]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
|
||
}
|
||
else
|
||
{
|
||
/*密钥错误次数超出允许范围*/ /*设置NRC 36*/
|
||
SeDcm_u_SecurityAccessServerSts = DCM_SECURITYACCESS_DEFAULT; /*置27 服务为 默认状态 */
|
||
SeDcm_u_KeyErrorDelayCount = DCM_SASERVERSTS_ERRORDELAY_COUNT; /*开启密钥错误次数超出后 27服务允许访问延时 */
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC36]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
SeDcm_u_SecurityAccessServerSts = DCM_SECURITYACCESS_DEFAULT; /*置27 服务为 默认状态 */
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF02Start(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF02 开始 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF02Start(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
|
||
if(CeDcm_e_RidStop == SeDcm_u_RidFF02Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SeDcm_u_RidFF02Sts = CeDcm_e_RidStart; /*置例程当前状态*/
|
||
|
||
//必要的化 插 78
|
||
//处理函数
|
||
RidFF02RunSts = Rid_Finish;
|
||
|
||
SeDcm_u_RidFF02Sts = CeDcm_e_RidStop; /*置例程当前状态*/
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SeDcm_u_RidFF02Sts = CeDcm_e_RidStart; /*置例程当前状态*/
|
||
|
||
//必要的化 插 78
|
||
//处理函数
|
||
RidFF02RunSts = Rid_Finish;
|
||
|
||
SeDcm_u_RidFF02Sts = CeDcm_e_RidStop; /*置例程当前状态*/
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
RidRunSts_T GetRidFF02RunSts(void)
|
||
{
|
||
return RidFF02RunSts;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF00Start(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF00 开始 处理函数
|
||
|
||
*编辑时间 : 2015-11-03
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF00Start(void)
|
||
{
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
#if 0
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(CeDcm_e_RidStop == SeDcm_u_RidFF00Sts)
|
||
{
|
||
// 78
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
|
||
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
|
||
|
||
if(CeFCC_Programing_e_Succeed == SetFCC_Programing_EraseFlash(FCC_PROGRAMING_APPCODE_SECTORONE))
|
||
{
|
||
SetWd_FeedWdg();
|
||
// 78
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
|
||
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
|
||
//处理函数
|
||
SetFCC_Programing_EraseFlash(FCC_PROGRAMING_APPCODE_SECTORTWO);
|
||
SetWd_FeedWdg();
|
||
// 78
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
|
||
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
|
||
//处理函数
|
||
SetFCC_Programing_EraseFlash(FCC_PROGRAMING_APPCODE_SECTORTHR);
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SeDcm_u_RidFF00Sts = CeDcm_e_RidStart; /*置例程当前状态*/
|
||
|
||
|
||
SeDcm_u_RidFF00Sts = CeDcm_e_RidStop; /*置例程当前状态*/
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC72]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
#endif
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF01Start(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF01 开始 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF01Start(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
#if 0
|
||
if(CeDcm_e_RidStop == SeDcm_u_RidFF01Sts)
|
||
{
|
||
//处理函数
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
|
||
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
|
||
if(CeFCC_Programing_e_Succeed == SetFCC_Programing_Check())
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SeDcm_u_RidFF01Sts = CeDcm_e_RidStart; /*置例程当前状态*/
|
||
|
||
SeDcm_u_RidFF01Sts = CeDcm_e_RidStop; /*置例程当前状态*/
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC72]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
#endif
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF02Stop(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF02 停止 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF02Stop(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
|
||
if(CeDcm_e_RidStart == SeDcm_u_RidFF02Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF02Stop(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF00 停止 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF00Stop(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(CeDcm_e_RidStart == SeDcm_u_RidFF00Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF02Result(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF01 停止 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF01Stop(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(CeDcm_e_RidStart == SeDcm_u_RidFF01Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF02Result(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF02 请求结果 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF02Result(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(CeDcm_e_RidStop == SeDcm_u_RidFF02Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF00Result(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF00 请求结果 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF00Result(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(CeDcm_e_RidStop == SeDcm_u_RidFF00Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_RoutineFF01Result(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 31 服务 FF01 请求结果 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RoutineFF01Result(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[5];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(CeDcm_e_RidStop == SeDcm_u_RidFF01Sts)
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
LaDcm_u_TempBuffer[3] = VeDcm_h_RqustInfo.Rid&0xFF;
|
||
LaDcm_u_TempBuffer[2] = VeDcm_h_RqustInfo.Rid>>8;
|
||
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
|
||
|
||
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 24*/
|
||
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
|
||
TeDcm_h_ResultType MngDcm_RoutineF001Start(void)
|
||
{
|
||
|
||
}
|
||
TeDcm_h_ResultType MngDcm_RoutineF001Stop(void)
|
||
{
|
||
|
||
}
|
||
TeDcm_h_ResultType MngDcm_RoutineF001Result(void)
|
||
{
|
||
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_EnableCommunication(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 28 允许通讯 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_CtrlCommunication(uint8 CommunicationType)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
|
||
if(SeDcm_u_DiagnosticSession != 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;
|
||
|
||
}
|
||
}
|
||
|
||
if( (CommunicationType >= 1) && ( CommunicationType <= 3))
|
||
{
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
if( CommunicationType == 3)
|
||
{
|
||
SeDcm_u_NetworkMsgSts = 3 - VeDcm_h_RqustInfo.Sub; /*网络管理报文收发使能*/
|
||
SeDcm_u_NormalMsgSts = 3 - VeDcm_h_RqustInfo.Sub; /*应用报文收发使能*/
|
||
}
|
||
else if(CommunicationType == 1)
|
||
SeDcm_u_NormalMsgSts = 3 - VeDcm_h_RqustInfo.Sub; /*应用报文收发使能*/
|
||
else
|
||
SeDcm_u_NetworkMsgSts = 3 - VeDcm_h_RqustInfo.Sub; /*网络管理报文收发使能*/
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/*设置NRC 31*/
|
||
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty)
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
|
||
}
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_DisenableCommunication(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 28 禁止通讯 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_DisenableCommunication(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_DISENABLE; /*网络管理报文收发关闭*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_DISENABLE; /*应用报文收发关闭*/
|
||
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_DISENABLE; /*网络管理报文收发关闭*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_DISENABLE; /*应用报文收发关闭*/
|
||
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
TeDcm_h_ResultType MngDcm_EnableCommunication(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(0x02 != VeDcm_h_RqustInfo.Sub) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发关闭*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发关闭*/
|
||
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发关闭*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发关闭*/
|
||
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
TeDcm_h_ResultType MngDcm_EnableCommunication_SID_0x29(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(0x02 != VeDcm_h_RqustInfo.Sub) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发关闭*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发关闭*/
|
||
|
||
|
||
SetCanTp_TxBuffer(1U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发关闭*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发关闭*/
|
||
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
uint8 GetNormalMsgSts(void)
|
||
{
|
||
return (SeDcm_u_NormalMsgSts);
|
||
|
||
}
|
||
|
||
uint8 GetNetworkMsgSts(void)
|
||
{
|
||
return(SeDcm_u_NetworkMsgSts);
|
||
}
|
||
|
||
unsigned char SX11GetNormalMsgSts(void)
|
||
{
|
||
return (3 - SeDcm_u_NormalMsgSts);
|
||
}
|
||
|
||
unsigned char SX11GetNetworkMsgSts(void)
|
||
{
|
||
return(3 - SeDcm_u_NetworkMsgSts);
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_TesterPresentDeal(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 3E 诊断在线 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_TesterPresentDeal(void)
|
||
{
|
||
|
||
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*重置S3server计时*/
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
void resetS3Server(void)
|
||
{
|
||
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*重置S3server计时*/
|
||
}
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_DTCSettingEnable(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 85 DTC 设置使能 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_DTCSettingEnable(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
uint8 temp;
|
||
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty && (SeDcm_u_DiagnosticSession != DCM_EXTEND_SESSION))
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
return CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_ENABLE;
|
||
DtcStutasInit();
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_DTCSettingDisenable(void)
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 85 DTC 设置禁止 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_DTCSettingDisenable(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
|
||
if(DCM_FUNCTIONAL_ADDRESS == VeDcm_h_RqustInfo.RequstSty && (SeDcm_u_DiagnosticSession != DCM_EXTEND_SESSION))
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
return CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_DISENABLE;
|
||
|
||
if(DCM_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = VeDcm_h_RqustInfo.Sub;
|
||
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
|
||
}
|
||
else
|
||
{
|
||
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNoRsp;
|
||
}
|
||
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
|
||
uint8 GetDtcEnable(void)
|
||
{
|
||
return SeDcm_u_DtcSetSts;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_DynamicaDefineNewDid(void)
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 2C 创建新动态DID 处理函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
|
||
TeDcm_h_ResultType MngDcm_DynamicaDefineNewDid(void)
|
||
{
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
/*设置NRC22*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : TeDcm_h_ResultType MngDcm_ClearDynamicaDid(void)
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_Result 处理结果
|
||
|
||
*描述 : 2C 创建新动态DID 处理函数
|
||
|
||
*编辑时间 : 2016-12-25
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
|
||
TeDcm_h_ResultType MngDcm_ClearDynamicaDid(void)
|
||
{
|
||
TeDcm_h_ResultType LeDcm_u_Result;
|
||
/*设置NRC22*/
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC22]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_Result = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
return LeDcm_u_Result;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcm_ChangeToDefaltSession(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : 跳转到 默认会话模式 处理函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void MngDcm_ChangeToDefaltSession(void)
|
||
{
|
||
SeDcm_u_S3ServerTimeSts = DCM_S3SEVERTIMER_STOP; /*S3server 计时停止*/
|
||
SeDcm_u_DiagnosticSession = DCM_DEFAULT_SESSION; /*会话模式 默认模式*/
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_DEFAULT; /*安全模式锁定*/
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_ENABLE; /*DTC设置使能*/
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发使能*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE | (DCM_MSGTXRX_ENABLE<<1); /*应用报文收发使能*/
|
||
//CleanIoDid();
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcmS3ServerAndKeyErrorCountCutDown(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : S3ServerTime 计数自减
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void MngDcmS3ServerCountCutDown(void)
|
||
{
|
||
if(SeDcm_w_S3ServerTime > 0)
|
||
{
|
||
SeDcm_w_S3ServerTime--;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcmKeyErrorDelayCountCutDown(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : 密钥错误超出允许次数 延时 计数自减
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void MngDcmKeyErrorDelayCountCutDown(void)
|
||
{
|
||
unsigned char savebuf[4];
|
||
if(SeDcm_u_KeyErrorDelayCount > 0)
|
||
{
|
||
SeDcm_u_KeyErrorDelayCount--;
|
||
if(SeDcm_u_KeyErrorDelayCount == 0)
|
||
{
|
||
SeDcm_u_KeyErrorCount = 0U;
|
||
KamData.KeyErrTimes = SeDcm_u_KeyErrorCount;
|
||
ReadFlashData(savebuf,0x000F1800,4);
|
||
savebuf[0] = SaDcm_u_RequestCounter;
|
||
savebuf[1] = SeDcm_u_KeyErrorCount;
|
||
WriteDataflash(savebuf,0x000F1800,4);
|
||
}
|
||
}
|
||
if(SaDcm_u_RequestDelayCount > 0)
|
||
{
|
||
SaDcm_u_RequestDelayCount--;
|
||
if(SaDcm_u_RequestDelayCount == 0)
|
||
{
|
||
SaDcm_u_RequestCounter = 0U;
|
||
KamData.SeedReqTimes = SaDcm_u_RequestCounter;
|
||
ReadFlashData(savebuf,0x000F1800,4);
|
||
savebuf[0] = SaDcm_u_RequestCounter;
|
||
savebuf[1] = SeDcm_u_KeyErrorCount;
|
||
WriteDataflash(savebuf,0x000F1800,4);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcm_PrepareNegRsp(uint8 LeDcm_u_Sid,uint8 LeDcm_u_Nrc)
|
||
|
||
*参数 : LeDcm_u_Sid 请求的sid 要回应的NRC的索引
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : 整理负响应数据
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void MngDcm_PrepareNegRsp(uint8 LeDcm_u_Sid,uint8 LeDcm_u_Nrc)
|
||
{
|
||
VaDcm_u_NegRspTxBuffer[0] = 0x7F; /*负响应*/
|
||
VaDcm_u_NegRspTxBuffer[1] = LeDcm_u_Sid; /*sid*/
|
||
VaDcm_u_NegRspTxBuffer[2] = LeDcm_u_Nrc; /*NRC*/
|
||
}
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void MngDcm_PrepareNegRsp(uint8 LeDcm_u_Sid,uint8 LeDcm_u_Nrc)
|
||
|
||
*参数 : TargetAddress 目标数组,TargetPost 目标数组的起始位置,SourceAddress 源数组,SourcePost 源数组位置,
|
||
DataLength 需移动的数据长度
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : 移动数据 处理
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void MngDcm_DataMoveDeal(uint8* TargetAddress,uint8 TargetPost,uint8* SourceAddress,uint8 SourcePost,uint8 DataLength)
|
||
{
|
||
|
||
uint8 i;
|
||
|
||
for(i = 0;i < DataLength; i ++)
|
||
{
|
||
TargetAddress[TargetPost + i] = SourceAddress[SourcePost + i];
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 :TeDcm_h_ResultType MngDcm_RequestDownloadService(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 34 服务函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
TeDcm_h_ResultType MngDcm_RequestDownloadService(void)
|
||
{
|
||
uint8 LeDcm_u_dataFomatldentifier; /*数据格式*/
|
||
uint8 LeDcm_u_addressAndLengthFomatldentifier; /*地址和数据长度格式*/
|
||
uint32 LeDcm_w_Address; /*地址*/
|
||
uint32 LeDcm_w_DataLength; /*数据长度*/
|
||
uint8 LeDcm_u_SidIndex;
|
||
uint8 LeDcm_u_SecurityAccessCheckResult;
|
||
uint8 LaDcm_u_TempBuffer[6];
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
#if 0
|
||
|
||
LeDcm_u_dataFomatldentifier = VeDcm_P_DataAddress[1];
|
||
LeDcm_u_addressAndLengthFomatldentifier = VeDcm_P_DataAddress[2];
|
||
|
||
/*提取地址参数*/
|
||
LeDcm_w_Address = (((uint32)VeDcm_P_DataAddress[3])<<24U) + (((uint32)VeDcm_P_DataAddress[4])<<16U) + (((uint32)VeDcm_P_DataAddress[5])<<8U) + VeDcm_P_DataAddress[6];
|
||
/*提取数据长度数*/
|
||
LeDcm_w_DataLength = (((uint32)VeDcm_P_DataAddress[7])<<24U) + (((uint32)VeDcm_P_DataAddress[8])<<16U) + (((uint32)VeDcm_P_DataAddress[9])<<8U) + VeDcm_P_DataAddress[10];
|
||
|
||
if((DCM_DATAFOMATLDENTIFER == LeDcm_u_dataFomatldentifier)&&(LeDcm_u_addressAndLengthFomatldentifier == DCM_ADDRESSANDLENGTHFOMATLDENTIFER))
|
||
{
|
||
if(VeDcm_h_RqustInfo.DL == 11U)
|
||
{
|
||
if(CeFCC_Programing_e_Succeed == SetFCC_Programing_AddrSize(LeDcm_w_Address,LeDcm_w_DataLength))
|
||
{
|
||
LeDcm_u_SidIndex = MngDcm_SIDCheckAvailable(VeDcm_h_RqustInfo.Sid);
|
||
LeDcm_u_SecurityAccessCheckResult = MngDcm_SIDCheckSecurityAccess(LeDcm_u_SidIndex);
|
||
if(DCM_CHECK_OK == LeDcm_u_SecurityAccessCheckResult)
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = DCM_LENGTHFOMATLDENTIFER;
|
||
LaDcm_u_TempBuffer[3] = CaDcm_w_SingleAllowDateLength&0xFF; /*单次允许的最大数据 低字节*/
|
||
LaDcm_u_TempBuffer[2] = CaDcm_w_SingleAllowDateLength>>8; /*单次允许的最大数据 高字节*/
|
||
SetCanTp_TxBuffer(4U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadRequested; /*置数据下载状态为 已请求下载*/
|
||
SeDcm_w_DownLoadDataLength = LeDcm_w_DataLength; /*记录 34 请求下载的数据长度*/
|
||
SeDcm_w_TransmitDataCount = 0U;
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultPosRsp;
|
||
}
|
||
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
|
||
{
|
||
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; /*负响应*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
#endif
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 :
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 36 服务函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
|
||
TeDcm_h_ResultType MngDcm_TransmitDataService(void)
|
||
{
|
||
uint16 LeDcm_w_SingleTransmitDataCount;
|
||
uint8 LeDcm_u_BlockSequenceCount;
|
||
uint8 LeDcm_u_BlockExpect;
|
||
uint8 LaDcm_u_TempBuffer[6]; /*响应数据缓存数组*/
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
#if 0
|
||
TeFCC_Programing_e_Result LeDcm_FCC_Ret;
|
||
|
||
if(CeDcm_e_DownLoadRequested==SeDcm_u_DownLoadDataSts||CeDcm_e_DownLoadDuringTransmit == SeDcm_u_DownLoadDataSts)
|
||
{
|
||
LeDcm_w_SingleTransmitDataCount = VeDcm_h_RqustInfo.DL - 2U; /*提取传输的数据量 剔除服务参数字节*/
|
||
SeDcm_w_TransmitDataCount = SeDcm_w_TransmitDataCount + LeDcm_w_SingleTransmitDataCount; /*记录传输数据量*/
|
||
/*判断传输数据累计是否超过 请求下载的数据量 单次传输长度是否超出 34服务回应的允许的数据量*/
|
||
if(SeDcm_w_TransmitDataCount <= SeDcm_w_DownLoadDataLength)
|
||
{
|
||
LeDcm_u_BlockSequenceCount = VeDcm_P_DataAddress[1]; /*提取 36 请求参数 BlockSequenceCount*/
|
||
LeDcm_u_BlockExpect = (uint8)(((uint16)SeDcm_u_BlockSequenceCountSts + 1)&0x00ff);
|
||
|
||
if(((0x01 == LeDcm_u_BlockSequenceCount)&&(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadRequested))
|
||
|| ((LeDcm_u_BlockSequenceCount== LeDcm_u_BlockExpect)&&(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadDuringTransmit)))
|
||
{
|
||
if(VeDcm_h_RqustInfo.DL <= CaDcm_w_SingleAllowDateLength)/*MaxNumberofBlockLength*/
|
||
{
|
||
SeDcm_u_BlockSequenceCountSts = LeDcm_u_BlockSequenceCount;
|
||
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadDuringTransmit; /*置数据下载状态为 正在传输*/
|
||
|
||
if(SeDcm_w_TransmitDataCount == SeDcm_w_DownLoadDataLength)
|
||
{
|
||
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadTransmited; /*置数据下载状态为 传输完毕*/
|
||
SeDcm_w_TransmitDataCount = 0U;
|
||
}
|
||
|
||
//78响应
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]); /*整理负响应数据*/
|
||
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
|
||
//调用接口 编程
|
||
LeDcm_FCC_Ret = SetFCC_Programing_Code(VeDcm_h_RqustInfo.DL-2,&VeDcm_P_DataAddress[2]);
|
||
|
||
if(LeDcm_FCC_Ret == CeFCC_Programing_e_Succeed)
|
||
{
|
||
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
LaDcm_u_TempBuffer[1] = LeDcm_u_BlockSequenceCount;
|
||
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultPosRsp;
|
||
}
|
||
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_NRC31]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC73]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC71]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
#endif
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 :
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : LeDcm_u_FinallyResult 处理结果
|
||
|
||
*描述 : 37 服务函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
|
||
TeDcm_h_ResultType MngDcm_TransmitExitService(void)
|
||
{
|
||
uint8 LaDcm_u_TempBuffer[2];
|
||
TeDcm_h_ResultType LeDcm_u_FinallyResult;
|
||
if(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadTransmited)
|
||
{
|
||
if(VeDcm_h_RqustInfo.DL == 1U)
|
||
{
|
||
LaDcm_u_TempBuffer[0] = LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
|
||
SetCanTp_TxBuffer(1U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
|
||
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadRelax; /*置数据下载状态为 退出传输 空闲状态*/
|
||
#if 0
|
||
SetFCC_Programing_Finish();
|
||
#endif
|
||
}
|
||
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
|
||
{
|
||
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC24]); /*整理负响应数据*/
|
||
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
|
||
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
|
||
}
|
||
|
||
return LeDcm_u_FinallyResult;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 : void InitDcm_Parameter (void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : void
|
||
|
||
*描述 : DCM 初始化函数
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
void InitDcm_Parameter (void)
|
||
{
|
||
unsigned char readbuf[33];
|
||
SeDcm_u_DiagnosticSession = DCM_DIAGNOSTIC_SESSION_DEFAULT; /*会话模式 默认会话*/
|
||
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_DEFAULT; /*安全模式 锁定状态*/
|
||
SeDcm_u_DtcSetSts = DCM_DTCSET_ENABLE; /*DTC设置使能*/
|
||
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发使能*/
|
||
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_ENABLE |(DCM_MSGTXRX_ENABLE<<1); /*应用报文收发使能*/
|
||
SeDcm_u_KeyErrorDelayCount = 0;//DCM_SASERVERSTS_ERRORDELAY_COUNT_DEFAULT; /*默认27服务上电延时*/
|
||
SeDcm_u_SecurityAccessServerSts = DCM_SECURITYACCESS_DEFAULT; /*置27 服务为 默认状态 */
|
||
SeDcm_u_KeyErrorCount = 0U; /*置27 密钥错误次数初始为0 */
|
||
|
||
//SaDcm_u_RequestCounter = KamData.SeedReqTimes;
|
||
//SeDcm_u_KeyErrorCount = KamData.KeyErrTimes; /*读取储存的次数*/
|
||
ReadFlashData(readbuf,0x000F1800,4);
|
||
|
||
SaDcm_u_RequestCounter = readbuf[0];
|
||
SeDcm_u_KeyErrorCount = readbuf[1]; /*读取储存的次数*/
|
||
|
||
if(SaDcm_u_RequestCounter > 6)SaDcm_u_RequestCounter=0;
|
||
if(SeDcm_u_KeyErrorCount > 4)SeDcm_u_KeyErrorCount=0;
|
||
/*
|
||
if((SaDcm_u_RequestCounter>>4)==0x01)SaDcm_u_RequestCounter &= 0x0F;
|
||
else SaDcm_u_RequestCounter = 0;
|
||
|
||
if((SeDcm_u_KeyErrorCount>>4)==0x01)SeDcm_u_KeyErrorCount &= 0x0F;
|
||
else SeDcm_u_KeyErrorCount = 0;
|
||
*/
|
||
if(SeDcm_u_KeyErrorCount >= 3 )
|
||
{
|
||
SeDcm_u_KeyErrorDelayCount = DCM_SASERVERSTS_ERRORDELAY_COUNT;
|
||
//SaDcm_u_RequestCounter=5;
|
||
}
|
||
|
||
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadRelax; /*置下载处理状态为 空闲*/
|
||
|
||
SeDcm_u_RidFF02Sts = CeDcm_e_RidStop; /*置例程初始状态*/
|
||
SeDcm_u_RidFF00Sts = CeDcm_e_RidStop;
|
||
SeDcm_u_RidFF01Sts = CeDcm_e_RidStop;
|
||
|
||
RidFF02RunSts = Rid_Idle;
|
||
//DtcInit();
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 : uint16 MngDcm_GetS3serverTime()
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : SeDcm_w_S3ServerTime S3ServerTime当前计数值
|
||
|
||
*描述 : 获取S3ServerTime当前计数值
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint16 MngDcm_GetS3serverTime(void)
|
||
{
|
||
return SeDcm_w_S3ServerTime;
|
||
}
|
||
|
||
void MngDcm_ResetS3serverTime(void)
|
||
{
|
||
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT;
|
||
}
|
||
/******************************************************************************
|
||
*函数名称 : uint8 MngDcm_GetS3serverTimeSts(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : SeDcm_u_S3ServerTimeSts S3ServerTime当前计数 计数状态
|
||
|
||
*描述 : 获取S3ServerTime当前计数 计数状态
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_GetS3serverTimeSts(void)
|
||
{
|
||
return SeDcm_u_S3ServerTimeSts;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
*函数名称 :uint8 MngDcm_GetDiagnosticSession(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : SeDcm_u_DiagnosticSession 当前会话模式
|
||
|
||
*描述 : 获取当前会话模式
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_GetDiagnosticSession(void)
|
||
{
|
||
return SeDcm_u_DiagnosticSession;
|
||
}
|
||
|
||
/******************************************************************************
|
||
*函数名称 :uint8 MngDcm_GetSecurityAccessSts(void)
|
||
|
||
*参数 : void
|
||
|
||
*返回值 : SeDcm_u_SecurityAccessState 当前安全权限
|
||
|
||
*描述 : 获取当前安全权限
|
||
|
||
*编辑时间 : 2015-10-10
|
||
|
||
*备注 :
|
||
*****************************************************************************/
|
||
uint8 MngDcm_GetSecurityAccessSts(void)
|
||
{
|
||
return SeDcm_u_SecurityAccessState;
|
||
}
|
||
|