2483 lines
91 KiB
C
Raw Normal View History

2023-05-05 11:53:54 +08:00
/******************************************************************************
* Description: : Include File Section
******************************************************************************/
#include "boot_macrodriver.h"
#include "Dcm_App.h"
#include "Dcm_extern.h"
#include "crc.h"
#include "Dcm_Cfg.h"
#include "fsl_user.h"
#include "pfdl_user.h"
extern uint8 GetCanTxCmpltd(void);
/******************************************************************************
* Description: : Global Variable Definition Section
******************************************************************************/
TsDcm_h_RquestInfo VeDcm_h_RqustInfo; /*提取请求信息的结构体*/
uint8 VaDcm_u_NegRspTxBuffer[3]; /*负响应发送数据的缓存数组*/
uint8* VeDcm_P_DataAddress ; /*TP层数据地址*/
extern uint16 ADval_Power;
/******************************************************************************
* Description: : Static Variable Definition Section
******************************************************************************/
static uint16 SeDcm_u_DL; /*TP层数据长度*/
static uint8 SeDcm_u_RequstSty; /*TP层数据请求方式*/
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 = 0x0202;
static uint8 SeDcm_u_DownLoadState;
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;
static uint32 LastProgramingAddr;
static uint32 SeFCL_Programing_dw_FlashAddr,LastSeFCL_Programing_dw_FlashAddr;
static uint32 SeFCL_Programing_dw_DataLen;
/******************************************************************************
* 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);
/******************************************************************************
* Description: : Write User Function Code
*****************************************************************************/
void resetS3Server(void)
{
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*重置S3server计时*/
}
/******************************************************************************
* : 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 = _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;
TeCanTp_e_RxBufferSts CanTp_e_RxBufferSts;
MngDcm_CleanRequstInfo(); /* 清请求数据*/
CanTp_e_RxBufferSts = GetCanTp_e_RxBufferSts(&SeDcm_u_RequstSty,&SeDcm_u_DL,&VeDcm_P_DataAddress);
if((CeCanTp_e_Full == CanTp_e_RxBufferSts) ||(CeCanTp_e_SF_Full == CanTp_e_RxBufferSts))
{
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); /*应用报文收发使能*/
if(_FALSE == (VeDcm_h_RqustInfo.Sub&0x80)) /*判断正响应抑制位*/
{
if( DCM_RESET_READY == DcmResetReady && (GetAppValid() == APP_VALID)&&(GetAppEndValid() == APP_VALID))
{
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] = 0xAA;
KamData.boot_enable = 0;
SetMcu_SoftReset();
}
else
{
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;
uint32_t ReprogmaValid;
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(_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] = 0xAA;
SetMcu_SoftReset();
#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; /*设置为不响应*/
SetMcu_SoftReset();
}
//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
{
/*设置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;
}
return LeDcm_u_Result;
}
/*------------ boot add 394 -----------------*/
/******************************************************************************
* : void BootProgramSessionDeal(void)
* : void
* : void
* :
* : 2015-10-10
* :
*****************************************************************************/
void BootProgramSessionDeal(void)
{
SeDcm_u_S3ServerTimeSts = DCM_S3SEVERTIMER_CONTINUE; /*S3server 计时继续*/
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*S3server 计时计数值重新装载*/
SeDcm_u_DiagnosticSession = DCM_PROGRAMME_SESSION; /*会话模式编程模式*/
SeDcm_u_SecurityAccessState = DCM_SECURITYACCESS_DEFAULT; /*安全模式 锁定*/
SeDcm_u_DtcSetSts = DCM_DTCSET_DISENABLE; /*DTC设置使能*/
SeDcm_u_NetworkMsgSts = DCM_MSGTXRX_ENABLE; /*网络管理报文收发使能*/
SeDcm_u_NormalMsgSts = DCM_MSGTXRX_DISENABLE; /*应用报文收发使能*/
}
/******************************************************************************
* : void BootDefaultSessionDeal(void)
* : void
* : void
* :
* : 2015-10-10
* :
*****************************************************************************/
void BootDefaultSessionDeal(void)
{
SeDcm_u_S3ServerTimeSts = DCM_S3SEVERTIMER_STOP; /*S3server 计时停止*/
SeDcm_w_S3ServerTime = DCM_S3SEVERTIMEOUT; /*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); /*应用报文收发使能*/
}
/*------------ boot add 394 -----------------*/
/******************************************************************************
* : 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;
if(SeDcm_u_DiagnosticSession != DCM_PROGRAMME_SESSION)
{
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(_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; /*设置为不响应*/
}
}
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_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;
uint32 Temp_ReprogmaValid;
//重启ECU接口
if(_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] = 0xAA;
KamData.RspData[4] = 0xAA;
KamData.RspData[5] = 0xAA;
KamData.RspData[6] = 0xAA;
KamData.RspData[7] = 0xAA;
// 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
{
KamData.AckReq = 0;
SetCanTp_TxBuffer(0U,LaDcm_u_TempBuffer); /*调用接口发送响应数据 0数据为不响应*/
LeDcm_u_Result = CeDcm_e_ResultNoRsp; /*设置为不响应*/
}
KamData.boot_enable = 0;
if(LeDcm_u_Result == CeDcm_e_ResultPosRsp)
{
//while(GetCanTxCmpltd() != 1){}
SetMcu_SoftReset();
}
else
SetMcu_SoftReset();
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];
TeDcm_h_ResultType LeDcm_u_Result;
//SeDcm_u_KeyErrorDelayCount = 0;
if(SaDcm_u_RequestCounter < 5)
{
SaDcm_u_RequestCounter++;
KamData.SeedReqTimes = SaDcm_u_RequestCounter | 0xB0;
if(SaDcm_u_RequestCounter == 5)
{
SaDcm_u_RequestDelayCount = DCM_SASERVERSTS_ERRORDELAY_COUNT;
SeDcm_u_KeyErrorCount = 3;
KamData.KeyErrTimes = SeDcm_u_KeyErrorCount | 0xB0;
}
}//fcb
if(0==SeDcm_u_KeyErrorDelayCount && 0==SaDcm_u_RequestDelayCount)
{
if(SaDcm_u_RequestCounter == 5)
{
SaDcm_u_RequestCounter=0;
KamData.SeedReqTimes = 0;
}
if(_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
{
if(SaDcm_u_RequestCounter < 2)
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];
TeDcm_h_ResultType LeDcm_u_Result;
uint32 LeDcm_w_Key;
if(DCM_SASERVERSTS_REQUESTKEY & SeDcm_u_SecurityAccessServerSts)
{
SaDcm_u_RequestCounter = 0;
KamData.SeedReqTimes = 0;
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 | 0xB0;
}
else /*密钥验证通过*/
{
SeDcm_u_KeyErrorCount = 0U; /*密钥错误次数清零*/
KamData.KeyErrTimes = 0;
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(_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(_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;
}
/*------------ boot add 766 -----------------*/
/******************************************************************************
* : TeDcm_h_ResultType MngDcm_RoutineFF00Start(void)
* : void
* : LeDcm_u_Result
* : 31 FF00
* : 2015-11-03
* :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_RoutineFF00Start(void)
{
fsl_u08 ret;
uint8 LaDcm_u_TempBuffer[5];
TeDcm_h_ResultType LeDcm_u_Result;
uint32 Temp_AppValid;
uint32 LeDcm_w_Address; /*地址*/
uint32 LeDcm_w_DataLength; /*数据长度*/
uint8 BootCnt[16];
/*提取地址参数*/
LeDcm_w_Address = (((uint32)VeDcm_P_DataAddress[5])<<24U) + (((uint32)VeDcm_P_DataAddress[6])<<16U) + (((uint32)VeDcm_P_DataAddress[7])<<8U) + VeDcm_P_DataAddress[8];
/*提取数据长度数*/
LeDcm_w_DataLength = (((uint32)VeDcm_P_DataAddress[9])<<24U) + (((uint32)VeDcm_P_DataAddress[10])<<16U) + (((uint32)VeDcm_P_DataAddress[11])<<8U) + VeDcm_P_DataAddress[12];
if(DCM_DS_FLASHCRC_COMPLETE != SeDcm_u_DownLoadState)
{
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;
}
if((LeDcm_w_Address < 0xA000 || LeDcm_w_Address > 0x19FFF) || LeDcm_w_DataLength > 0x10000)
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
return 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);
Temp_AppValid = 0xFFFFFFFF;
if( 0 == DF_Write(((unsigned char*)(&Temp_AppValid)),INDEX_APP_VALID,sizeof(Temp_AppValid))) //R_FDL_OK
{
// 78
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
if(LeDcm_w_Address >= 0xA000 && LeDcm_w_Address <= 0x19FFF)
{
ret = prFslStart();
if (FSL_OK == ret)
{
// 78
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
ret = prFslErase(APP_START_BLOCK,APP_TOTAL_BLOCK);
SeDcm_u_DownLoadState = DCM_DS_ERASE_COMPLETE;
NOP();
/**************************************************/
GetRTE_Dcm_DidServices_0x0200_ReadData(BootCnt);
GetRTE_Dcm_DidServices_0x0201_ReadData(BootCnt + 8);
if(BootCnt[8] == 0xFF)
BootCnt[8] = 1;
else
BootCnt[8]++;
if (FSL_OK == prFslStart())
{
prFslErase(104,1);
prFslWrite(DID_0200_ADDR,(fsl_u08*)BootCnt,16);
}
/**************************************************/
}
if(FSL_OK == ret)
{
if(_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
{
//MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
//SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
//LeDcm_u_Result = CeDcm_e_ResultNegRsp;
if(_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_FAILURE;
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;
}
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];
uint8 BootCnt[16];
TeDcm_h_ResultType LeDcm_u_Result;
#if 1
if(CeDcm_e_RidStop == SeDcm_u_RidFF01Sts)
{
//处理函数
if(DCM_DS_APPCRC_COMPLETE != SeDcm_u_DownLoadState)
{
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_FAILURE;
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
return LeDcm_u_Result;
}
if((GetAppValid() == APP_VALID)&&(GetAppEndValid() == APP_VALID))
{
GetRTE_Dcm_DidServices_0x0200_ReadData(BootCnt);
GetRTE_Dcm_DidServices_0x0201_ReadData(BootCnt + 8);
if(BootCnt[0] == 0xFF)
BootCnt[0] = 1;
else
BootCnt[0]++;
BootCnt[8]=0; //下载成功后201清零
if (FSL_OK == prFslStart())
{
prFslErase(104,1);
prFslWrite(DID_0200_ADDR,(fsl_u08*)BootCnt,16);
}
if(_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
{
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_FAILURE;
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
{
/*设置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;
}
/*------------ boot add 766-----------------*/
/******************************************************************************
* : 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(_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(_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(_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(_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(_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(_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_Routine0202Start(void)
{
/*------------ boot add 1245 -----------------*/
static uint32 CrcValue;
uint32 Temp_AppValid,Temp_ReprogramValid;
uint8 LaDcm_u_TempBuffer[5];
TeDcm_h_ResultType LeDcm_u_Result;
// 78
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]);
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer);
if(CeDcm_e_RidStop == SeDcm_u_RidF001Sts)
{
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;
CrcValue = (((uint32)VeDcm_P_DataAddress[4])<<24U) + (((uint32)VeDcm_P_DataAddress[5])<<16U) + (((uint32)VeDcm_P_DataAddress[6])<<8U) + VeDcm_P_DataAddress[7];
if(FLASH_DRIVER_ADDR == SeFCL_Programing_dw_FlashAddr) /* Flash Driver*/
{
if(CrcValue == GetCrc32_Ram(0xFFFFFFFF,FLASH_DRIVER_ADDR,FLASH_DRIVER_SIZE))
{
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
SeDcm_u_DownLoadState = DCM_DS_FLASHCRC_COMPLETE;
}
else
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_FAILURE;
}
else
{
if(CrcValue == GetCrc32(0xFFFFFFFF,APP_START_ADDR,APP_SIZE))
{
KamData.boot_enable = 0;
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_SUCCESS;
SeDcm_u_DownLoadState = DCM_DS_APPCRC_COMPLETE;
}
else
LaDcm_u_TempBuffer[4] = DCM_RIDRESULT_FAILURE;
}
SetCanTp_TxBuffer(5U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp;
}
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;
/*------------ boot add 1245 -----------------*/
}
TeDcm_h_ResultType MngDcm_Routine0202Stop(void)
{
}
TeDcm_h_ResultType MngDcm_Routine0202Result(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(_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*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultNegRsp;
}
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(_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
{
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(_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_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(_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(_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)
{
/*------------ boot add -----------------*/
uint32 Temp_ReprogmaValid;
if(DCM_PROGRAMME_SESSION == SeDcm_u_DiagnosticSession)
{
KamData.boot_enable = 0;
SetMcu_SoftReset();
}
/*------------ boot add -----------------*/
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); /*应用报文收发使能*/
}
/******************************************************************************
* : 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)
{
if(SeDcm_u_KeyErrorDelayCount > 0)
{
SeDcm_u_KeyErrorDelayCount--;
if(SeDcm_u_KeyErrorDelayCount == 0)
{
SeDcm_u_KeyErrorCount = 0U;
KamData.KeyErrTimes = 0;
}
}
if(SaDcm_u_RequestDelayCount > 0)
{
SaDcm_u_RequestDelayCount--;
if(SaDcm_u_RequestDelayCount == 0)
{
SaDcm_u_RequestCounter = 0U;
KamData.SeedReqTimes = 0;
}
}
}
/******************************************************************************
* : 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
* :
*****************************************************************************/
uint8 MngDcm_34AddrChk(uint32 Addr,uint32 Size)
{
if(((Addr == APP_START_ADDR) && (Size == APP_SIZE)) || (((Addr == FLASH_DRIVER_ADDR) && (Size == FLASH_DRIVER_SIZE))||(Addr == DM_FLASH_DRIVER_ADDR)))
return DCM_CHECK_OK;
else
return DCM_CHECK_NOK;
}
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];
uint8 BootCnt[16];
TeDcm_h_ResultType LeDcm_u_FinallyResult;
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];
SeFCL_Programing_dw_FlashAddr = LeDcm_w_Address;
SeFCL_Programing_dw_DataLen = LeDcm_w_DataLength;
if((DCM_DATAFOMATLDENTIFER == LeDcm_u_dataFomatldentifier)&&(LeDcm_u_addressAndLengthFomatldentifier == DCM_ADDRESSANDLENGTHFOMATLDENTIFER))
{
if(VeDcm_h_RqustInfo.DL == 11U)
{
if(DCM_CHECK_OK == MngDcm_34AddrChk(LeDcm_w_Address,LeDcm_w_DataLength))
{
if((DM_FLASH_DRIVER_ADDR == SeFCL_Programing_dw_FlashAddr) || (FLASH_DRIVER_ADDR == SeFCL_Programing_dw_FlashAddr))
{
SeFCL_Programing_dw_FlashAddr = FLASH_DRIVER_ADDR;
SeFCL_Programing_dw_DataLen = FLASH_DRIVER_SIZE;
/*
GetRTE_Dcm_DidServices_0x0200_ReadData(BootCnt);
GetRTE_Dcm_DidServices_0x0201_ReadData(BootCnt + 8);
if(BootCnt[8] == 0xFF)
BootCnt[8] = 1;
else
BootCnt[8]++;
if (FSL_OK == prFslStart())
{
prFslErase(104,1);
prFslWrite(DID_0200_ADDR,(fsl_u08*)BootCnt,16);
}
*/
CaDcm_w_SingleAllowDateLength = 0x0042;
}
else
{
CaDcm_w_SingleAllowDateLength = 0x0202;
SeFCL_Programing_dw_FlashAddr = APP_START_ADDR;
SeFCL_Programing_dw_DataLen = 0x10000;
if(SeDcm_u_DownLoadState != DCM_DS_ERASE_COMPLETE)
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC70]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
return LeDcm_u_FinallyResult;
}
else
{
SeDcm_u_DownLoadState = DCM_DS_APPDOWNLOAD_REQUEST;
}
}
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] = (uint8)(CaDcm_w_SingleAllowDateLength&0xFF); /*单次允许的最大数据 低字节*/
LaDcm_u_TempBuffer[2] = (uint8)(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_NRC70]); /*整理负响应数据*/
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; /*负响应*/
}
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;
static uint16 ProgramByteCnt;
static uint16 RemaindProgramByteCnt,LastRemaindProgramByteCnt;
static uint8 ProgramDataBuf[1024];
uint8 *pWriteBuf;
fsl_u08 LeDcm_FCC_Ret;
uint16 TempCnt,TempCnt1;
static uint16 FlashDrvCpyCnt;
unsigned char *flashdata;
if(CeDcm_e_DownLoadRequested==SeDcm_u_DownLoadDataSts||CeDcm_e_DownLoadDuringTransmit == SeDcm_u_DownLoadDataSts||CeDcm_e_DownLoadTransmited == SeDcm_u_DownLoadDataSts)
{
LeDcm_w_SingleTransmitDataCount = VeDcm_h_RqustInfo.DL - 2U; /*提取传输的数据量 剔除服务参数字节*/
SeDcm_w_TransmitDataCount = SeDcm_w_TransmitDataCount + LeDcm_w_SingleTransmitDataCount; /*记录传输数据量*/
/*判断传输数据累计是否超过 请求下载的数据量 单次传输长度是否超出 34服务回应的允许的数据量*/
LeDcm_u_BlockSequenceCount = VeDcm_P_DataAddress[1]; /*提取 36 请求参数 BlockSequenceCount*/
LeDcm_u_BlockExpect = (uint8)(((uint16)SeDcm_u_BlockSequenceCountSts + 1)&0x00ff);
if((uint32_t)LeDcm_w_SingleTransmitDataCount * LeDcm_u_BlockSequenceCount <= APP_SIZE)
{
if(VeDcm_h_RqustInfo.DL != CaDcm_w_SingleAllowDateLength)/*MaxNumberofBlockLength*/
{
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;
}
if(((0x01 == LeDcm_u_BlockSequenceCount)&&(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadRequested))
|| (((LeDcm_u_BlockSequenceCount== LeDcm_u_BlockExpect)||(LeDcm_u_BlockSequenceCount == LeDcm_u_BlockExpect-1))&&(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadDuringTransmit||CeDcm_e_DownLoadTransmited == SeDcm_u_DownLoadDataSts)))
{
if((0x01 == LeDcm_u_BlockSequenceCount)&&(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadRequested))
{
RemaindProgramByteCnt = 0;
FlashDrvCpyCnt = 0;
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadDuringTransmit; /*置数据下载状态为 正在传输*/
}
//如果SequenceCount不变,覆盖缓冲区
if((LeDcm_u_BlockSequenceCount == LeDcm_u_BlockExpect-1) && (FLASH_DRIVER_ADDR != SeFCL_Programing_dw_FlashAddr))
{
flashdata = (unsigned char *)LastSeFCL_Programing_dw_FlashAddr;
for(TempCnt=0;TempCnt<LastRemaindProgramByteCnt;TempCnt++)
{
ProgramDataBuf[TempCnt] = (__far unsigned char *)flashdata;
flashdata++;
}
SeFCL_Programing_dw_FlashAddr = LastSeFCL_Programing_dw_FlashAddr;
RemaindProgramByteCnt = LastRemaindProgramByteCnt;
SeDcm_w_TransmitDataCount -= LeDcm_w_SingleTransmitDataCount;
}
else if((LeDcm_u_BlockSequenceCount == LeDcm_u_BlockExpect-1) && (FLASH_DRIVER_ADDR == SeFCL_Programing_dw_FlashAddr))
{
FlashDrvCpyCnt -= LeDcm_w_SingleTransmitDataCount;
SeDcm_w_TransmitDataCount -= LeDcm_w_SingleTransmitDataCount;
}
ProgramByteCnt = (LeDcm_w_SingleTransmitDataCount + RemaindProgramByteCnt)>>8; /* 上次剩余数据长度及本次数据长度之和 取0x100整数倍 */
for(TempCnt = 0;(RemaindProgramByteCnt + TempCnt) < (ProgramByteCnt<<8);TempCnt++)
ProgramDataBuf[RemaindProgramByteCnt + TempCnt] = VeDcm_P_DataAddress[TempCnt + 2]; /* 转移0x100整数倍数据到专用缓冲区 */
if(ADval_Power<285)
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC93]); /*整理负响应数据 传输数据暂停*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
}
else if(ADval_Power>574)
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC92]); /*整理负响应数据 传输数据暂停*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_FinallyResult = CeDcm_e_ResultNegRsp; /*负响应*/
}
if(VeDcm_h_RqustInfo.DL == CaDcm_w_SingleAllowDateLength)/*MaxNumberofBlockLength*/
{
SeDcm_u_BlockSequenceCountSts = LeDcm_u_BlockSequenceCount;
if(SeDcm_w_TransmitDataCount == SeDcm_w_DownLoadDataLength) /* 目标接收长度接收完成 */
{
SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadTransmited; /*置数据下载状态为 传输完毕*/
RemaindProgramByteCnt = LeDcm_w_SingleTransmitDataCount + RemaindProgramByteCnt - (ProgramByteCnt<<8);
SeDcm_w_TransmitDataCount = 0U;
if(RemaindProgramByteCnt > 0)
ProgramByteCnt += 1;
for(TempCnt1 = 0;TempCnt1 < RemaindProgramByteCnt ;TempCnt++,TempCnt1++)
ProgramDataBuf[RemaindProgramByteCnt + TempCnt] = VeDcm_P_DataAddress[TempCnt + 2]; /* 转移0x100整数倍数据到专用缓冲区 */
for(;(RemaindProgramByteCnt + TempCnt) < (ProgramByteCnt<<8);TempCnt++) /* 数据全部传输完成如果数据不满足0x100整数倍则填入0xFF */
ProgramDataBuf[RemaindProgramByteCnt + TempCnt] = 0xFF;
RemaindProgramByteCnt = 0;
}
LastRemaindProgramByteCnt = RemaindProgramByteCnt;
RemaindProgramByteCnt = LeDcm_w_SingleTransmitDataCount + RemaindProgramByteCnt - (ProgramByteCnt<<8);
if(FLASH_DRIVER_ADDR == SeFCL_Programing_dw_FlashAddr) /* Flash Driver*/
{
for(TempCnt1 = 2;FlashDrvCpyCnt < SeFCL_Programing_dw_DataLen;)
{
fsl_code_buf[FlashDrvCpyCnt++] = VeDcm_P_DataAddress[TempCnt1++];
if(TempCnt1 >= (LeDcm_w_SingleTransmitDataCount + 2))
break;
}
//if(ADval_Power>262 && ADval_Power<621)
{
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
{
//78响应
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC78]); /*整理负响应数据*/
SetCanTp_Tx_78Neg(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
if (FSL_OK == prFslStart())
{
pWriteBuf = ProgramDataBuf;
LastSeFCL_Programing_dw_FlashAddr = SeFCL_Programing_dw_FlashAddr;
for(;ProgramByteCnt > 0;ProgramByteCnt--)
{
//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 = prFslWrite(SeFCL_Programing_dw_FlashAddr,(fsl_u08*)pWriteBuf,0x100);
SeFCL_Programing_dw_FlashAddr += 0x100;
pWriteBuf += 0x100;
}
}
if(LeDcm_FCC_Ret == FSL_OK)
{
LaDcm_u_TempBuffer[0] = VeDcm_h_RqustInfo.Sid + 0x40;
LaDcm_u_TempBuffer[1] = LeDcm_u_BlockSequenceCount;
SetCanTp_TxBuffer(2U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
//SeFCL_Programing_dw_FlashAddr += (ProgramByteCnt<<8);
for(TempCnt += 2,TempCnt1 = 0;TempCnt1 < RemaindProgramByteCnt;TempCnt++,TempCnt1++)
ProgramDataBuf[TempCnt1] = VeDcm_P_DataAddress[TempCnt]; /* 转移取出的0x100整数倍数据盛夏的数据转移到专用缓冲区 */
LeDcm_u_FinallyResult = CeDcm_e_ResultPosRsp;
}
else
{
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC11]); /*整理负响应数据*/
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
{
//20190112更改36服务超出最大区块时发NRC31
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_NRC31]); /*整理负响应数据 传输数据暂停*/
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
* : LeDcm_u_FinallyResult
* : 37
* : 2015-10-10
* :
*****************************************************************************/
TeDcm_h_ResultType MngDcm_TransmitExitService(void)
{
uint8 LaDcm_u_TempBuffer[2];
TeDcm_h_ResultType LeDcm_u_FinallyResult;
//SeDcm_u_DownLoadDataSts = CeDcm_e_DownLoadTransmited;
if(SeDcm_u_DownLoadDataSts == CeDcm_e_DownLoadTransmited)
{
if((VeDcm_h_RqustInfo.DL == 1U))// ||(VeDcm_h_RqustInfo.DL == 2U))
{
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; /*置数据下载状态为 退出传输 空闲状态*/
SeDcm_u_RidF001Sts = CeDcm_e_RidStop;
#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)
{
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; /*读取储存的次数*/
if((SaDcm_u_RequestCounter>>4)==0x0B)SaDcm_u_RequestCounter &= 0x0F;
else SaDcm_u_RequestCounter = 0;
if((SeDcm_u_KeyErrorCount>>4)==0x0B)SeDcm_u_KeyErrorCount &= 0x0F;
else SeDcm_u_KeyErrorCount = 0;
if(SeDcm_u_KeyErrorCount >= 3 )
{
SeDcm_u_KeyErrorDelayCount = DCM_SASERVERSTS_ERRORDELAY_COUNT;
}
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;
}