#include "UDS_2EService_Main.h" /** *2E服务函数入口 *@param A_TA_type 收到数据的地址 *@param A_Length 收到数据的长度 *@param A_Data 收到数据的数据 */ void UDS_Service_2E_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_Data[]) { uint8_t NRC = positiveResponse; setDiagMSG(A_TA_type, A_Length, A_Data); if(NRC == positiveResponse) { NRC = UDS_2EService_NRC11(); /*2E服务是否支持功能寻址*/ } if(NRC == positiveResponse) { NRC = UDS_2EService_NRC7F(); /*2E服务会话是否支持验证*/ } if(NRC == positiveResponse) { NRC = UDS_2EService_NRC13_MinLengthCheck(); /*2E服务最小长度验证*/ } if(NRC == positiveResponse) { NRC = UDS_2EService_NRC31(); /*2E服务超出请求范围验证*/ } if(NRC == positiveResponse) { NRC = UDS_2EService_NRC13_TotalLengthCheck(); /*2E服务总长度长度验证*/ } if(NRC == positiveResponse) { NRC = UDS_2EService_NRC33(); /*2E服务解锁等级验证*/ } /*if(NRC == positiveResponse) { NRC = UDS_2EService_NRC22(); }车厂要求再做 if(NRC == positiveResponse) { NRC = UDS_2EService_Sub_NRC31(); }车厂要求再做(内部参数)*/ if(NRC == positiveResponse) { UDS_2EService_DID(); /*2E服务DID判断*/ } clearDiagMSG(); /*清除诊断信息*/ } /** *2E服务子功能 */ void UDS_2EService_DID(void) { switch(getDID(DiagMSG.msgData.DidDetail.DID_H, DiagMSG.msgData.DidDetail.DID_L))/*2E服务DID判断*/ { case 0xF183u: UDS_2EService_DID_F183(); /*引导软件数字指纹(预留) */ break; case 0xF184u: UDS_2EService_DID_F184(); /*应用软件数字指纹*/ break; case 0xF185u: UDS_2EService_DID_F185(); /*应用数据数字指纹(预留) */ break; case 0xF190u: UDS_2EService_DID_F190(); /*车辆标识号 VIN*/ break; case 0xF1F0u: UDS_2EService_DID_F1F0(); /*IC 资源程序软件版本号 */ break; case 0xF1F1u: UDS_2EService_DID_F1F1(); /*IC 总版本号*/ break; case 0x605Cu: UDS_2EService_DID_605C(); /*LDWS(车道偏离)系统开关*/ break; case 0x605Du: UDS_2EService_DID_605D(); /*AFS 系统开关*/ break; case 0x605Eu: UDS_2EService_DID_605E(); /*HUD 系统开关*/ break; case 0x605Fu: UDS_2EService_DID_605F(); /*ACC 系统开关 */ break; case 0x6060u: UDS_2EService_DID_6060(); /*称重系统开关 */ break; case 0x6062u: UDS_2EService_DID_6062(); /*车速里程表 K 值*/ break; case 0x6063u: UDS_2EService_DID_6063(); /*发动机速比*/ break; case 0x6064u: UDS_2EService_DID_6064(); /* 单位*/ break; case 0x6068u: UDS_2EService_DID_6068(); /*语言*/ break; case 0x606Du: UDS_2EService_DID_606D(); /*轮胎防盗使能开关*/ break; case 0x606Eu: UDS_2EService_DID_606E(); /*换挡提示设置*/ break; case 0x606Fu: UDS_2EService_DID_606F(); /*油箱容量设置*/ break; case 0x6070u: UDS_2EService_DID_6070(); /*HAS 系统开关*/ break; case 0x6071u: UDS_2EService_DID_6071(); /*ESC 系统开关 */ break; case 0x6072u: UDS_2EService_DID_6072(); /* 盘式制动磨损报警功能*/ break; case 0x6073u: UDS_2EService_DID_6073(); /*挂车设置*/ break; case 0x6074u: UDS_2EService_DID_6074(); /*排放配置*/ break; case 0x6075u: UDS_2EService_DID_6075(); /*超速报警车型信号 */ break; case 0x6076u: UDS_2EService_DID_6076(); /*总里程(注:当总里程被写成任何值时,短里程都应该为 0)*/ break; case 0x60C9u: UDS_2EService_DID_60C9(); /*尿素箱容积*/ break; case 0x60CAu: UDS_2EService_DID_60CA(); /*主油箱容积*/ break; case 0x60CBu: UDS_2EService_DID_60CB(); /*副油箱容积*/ break; case 0x60CCu: UDS_2EService_DID_60CC(); /*油箱类型*/ break; case 0x60CDu: UDS_2EService_DID_60CD(); /*油箱类型*/ break; case 0x60CEu: UDS_2EService_DID_60CE(); /*TCU 类型 */ break; case 0x60CFu: UDS_2EService_DID_60CF(); /*驱动能源类型*/ break; case 0x60D0u: UDS_2EService_DID_60D0(); /*驱动形式*/ break; case 0x60D1u: UDS_2EService_DID_60D1(); /*蓄电池容量*/ break; case 0x60D2u: UDS_2EService_DID_60D2(); /*电池管理系统 */ break; default: break; } } /** *2E服务DIDF183 *引导软件数字指纹(预留) */ void UDS_2EService_DID_F183(void) { memcpy(Ser2EToDFlashInfo.DID_F183,DiagMSG.msgData.DidDetail.Data,sizeof(Ser2EToDFlashInfo.DID_F183)); write2EData(Write2EData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DIDF184 *应用软件数字指纹 */ void UDS_2EService_DID_F184(void) { memcpy(Ser2EToDFlashInfo.DID_F184,DiagMSG.msgData.DidDetail.Data,sizeof(Ser2EToDFlashInfo.DID_F184)); write2EData(Write2EData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DIDF185 *应用数据数字指纹(预留) */ void UDS_2EService_DID_F185(void) { memcpy(Ser2EToDFlashInfo.DID_F185,DiagMSG.msgData.DidDetail.Data,sizeof(Ser2EToDFlashInfo.DID_F184)); write2EData(Write2EData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DIDF190 *车辆标识号 VIN */ void UDS_2EService_DID_F190(void) { memcpy(Ser2EToDFlashInfo.DID_F190,DiagMSG.msgData.DidDetail.Data,sizeof(Ser2EToDFlashInfo.DID_F190)); write2EData(Write2EData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DIDF1F0 *IC 资源程序软件版本号 */ void UDS_2EService_DID_F1F0(void) { memcpy(Ser2EToDFlashInfo.DID_F1F0,DiagMSG.msgData.DidDetail.Data,sizeof(Ser2EToDFlashInfo.DID_F1F0)); write2EData(Write2EData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DIDF1F1 *IC 总版本号 */ void UDS_2EService_DID_F1F1(void) { memcpy(Ser2EToDFlashInfo.DID_F1F1,DiagMSG.msgData.DidDetail.Data,sizeof(Ser2EToDFlashInfo.DID_F1F1)); write2EData(Write2EData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DID605C *LDWS(车道偏离)系统开关 */ void UDS_2EService_DID_605C(void) { uint8_t i; memcpy(&EOL_Data_Type.DID_605C,DiagMSG.msgData.DidDetail.Data,1u); memset(&EOL_Data_Type.DID_605C,2,(sizeof(EOL_Data_Type) - 4)); //memset(&Ser2EToDFlashInfo.DID_F183,3,sizeof(Ser2EToDFlashInfo) - 4); //memset(&Ser27_FlowCtrlCnt.RandNum,1,sizeof(Ser27_FlowCtrlCnt) - 4); //memset(&DiagFlag.JumpToBootFlag,1,sizeof(DiagFlag) - 4); //write2EData(Write2EData); //WriteDFlashData(EEPROM_BLOCK_UDS_S27, (uint32_t *)&Ser27_FlowCtrlCnt.Flag, sizeof(Ser27_FlowCtrlCnt) / 4u, NeedWait); //WriteDFlashData(EEPROM_BLOCK_UDS_FLAG, (uint32_t *)&DiagFlag.Flag, sizeof(DiagFlag) / 4u, NeedWait);/**/ write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID605D *AFS 系统开关 */ void UDS_2EService_DID_605D(void) { memcpy(&EOL_Data_Type.DID_605D,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID605E *HUD 系统开关 */ void UDS_2EService_DID_605E(void) { memcpy(&EOL_Data_Type.DID_605E,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID605F *ACC 系统开关 */ void UDS_2EService_DID_605F(void) { memcpy(&EOL_Data_Type.DID_605F,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6060 *称重系统开关 */ void UDS_2EService_DID_6060(void) { memcpy(&EOL_Data_Type.DID_6060,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6062 *车速里程表 K 值 */ void UDS_2EService_DID_6062(void) { memcpy(EOL_Data_Type.DID_6062,DiagMSG.msgData.DidDetail.Data,sizeof(EOL_Data_Type.DID_6062)); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6063 * 发动机速比 */ void UDS_2EService_DID_6063(void) { memcpy(&EOL_Data_Type.DID_6063,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6064 * 单位 */ void UDS_2EService_DID_6064(void) { memcpy(&EOL_Data_Type.DID_6064,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6068 * 语言 */ void UDS_2EService_DID_6068(void) { memcpy(&EOL_Data_Type.DID_6068,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID606D * 轮胎防盗使能开关 */ void UDS_2EService_DID_606D(void) { memcpy(&EOL_Data_Type.DID_606D,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID606E * 换挡提示设置 */ void UDS_2EService_DID_606E(void) { memcpy(&EOL_Data_Type.DID_606E,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID606F * 油箱容量设置 */ void UDS_2EService_DID_606F(void) { memcpy(EOL_Data_Type.DID_606F,DiagMSG.msgData.DidDetail.Data,sizeof(EOL_Data_Type.DID_606F)); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6070 * HAS 系统开关 */ void UDS_2EService_DID_6070(void) { memcpy(&EOL_Data_Type.DID_6070,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6071 * ESC 系统开关 */ void UDS_2EService_DID_6071(void) { memcpy(&EOL_Data_Type.DID_6071,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6072 * 盘式制动磨损报警功能 */ void UDS_2EService_DID_6072(void) { memcpy(&EOL_Data_Type.DID_6072,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6073 * 挂车设置 */ void UDS_2EService_DID_6073(void) { memcpy(&EOL_Data_Type.DID_6073,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6074 * 排放配置 */ void UDS_2EService_DID_6074(void) { memcpy(&EOL_Data_Type.DID_6074,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data); } /** *2E服务DID6075 * 超速报警车型信号 */ void UDS_2EService_DID_6075(void) { memcpy(&EOL_Data_Type.DID_6075,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID6076 * 总里程(注:当总里程被写成任何值时,短里程都应该为 0) */ void UDS_2EService_DID_6076(void) { uint32_t temp; temp = toUint32_t(0x00u, DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1], DiagMSG.msgData.DidDetail.Data[2]); Data_Mileage_Clear(); Data_ODO_Modify(temp * 10u); /*具体策略????*/ UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60C9 *尿素箱容积 */ void UDS_2EService_DID_60C9(void) { memcpy(&EOL_Data_Type.DID_60C9,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60CA *主油箱容积 */ void UDS_2EService_DID_60CA (void) { memcpy(EOL_Data_Type.DID_60CA,DiagMSG.msgData.DidDetail.Data,sizeof(EOL_Data_Type.DID_60CA)); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60CB *副油箱容积 */ void UDS_2EService_DID_60CB(void) { memcpy(EOL_Data_Type.DID_60CB,DiagMSG.msgData.DidDetail.Data,sizeof(EOL_Data_Type.DID_60CB)); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60CC *油箱类型 */ void UDS_2EService_DID_60CC(void) { memcpy(&EOL_Data_Type.DID_60CC,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60CD *发动机类型 */ void UDS_2EService_DID_60CD(void) { memcpy(EOL_Data_Type.DID_60CD,DiagMSG.msgData.DidDetail.Data,sizeof(EOL_Data_Type.DID_60CD)); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60CE *TCU 类型 */ void UDS_2EService_DID_60CE(void) { memcpy(&EOL_Data_Type.DID_60CE,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60CF *驱动能源类型 */ void UDS_2EService_DID_60CF(void) { memcpy(&EOL_Data_Type.DID_60CF,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60D0 *驱动形式 */ void UDS_2EService_DID_60D0(void) { memcpy(&EOL_Data_Type.DID_60D0,DiagMSG.msgData.DidDetail.Data,1); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60D1 *蓄电池容量 */ void UDS_2EService_DID_60D1(void) { memcpy(&EOL_Data_Type.DID_60D1,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); } /** *2E服务DID60D2 *电池管理系统 */ void UDS_2EService_DID_60D2(void) { memcpy(&EOL_Data_Type.DID_60D2,DiagMSG.msgData.DidDetail.Data,1u); write2EData(WriteEOLData); UDS_Service_Response(0x2Eu, POSITIVE_RSP, DIAG_ID_Tx, 2u, DiagMSG.msgData.Data); }