2483 lines
91 KiB
C
2483 lines
91 KiB
C
|
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
* 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;
|
|||
|
}
|
|||
|
|