#ifndef __UDS_COMMON_H #define __UDS_COMMON_H #include "CANFD.h" #include "stdint.h" #include "RTE_CAN.h" #include "CAN_APP.h" #include "UDS_DTC.h" #include "abstract.h" #include "EOL_Para.h" #include "Radar_R3.h" #include "ODOReset.h" #include "MBD_Model.h" #include "Work_Flash.h" #include "Services_ODO.h" #include "s6j3360_HWDG.h" #include "Sound_Player.h" #include "Services_TripA.h" #include "Common_Interface.h" #include "Services_Interval.h" #include "UDS_ISO14229_Server.h" #include "DoCAN_ISO15765_Config.h" #include "Services_ODO_Internal.h" #include "Communication_Over_CAN.h" #include "UDS_ISO14229_Server_Config.h" /** *正负反馈 */ #define POSITIVE_RSP (uint8_t) 0x00 /*正反馈*/ #define NEGATIVE_RSP (uint8_t) (!POSITIVE_RSP) /*负反馈*/ /** *DFlash */ #define NoNeedWait 0x00u #define NeedWait 0x01u #define JumpToBoot02 0x58856336u #define JumpToBoot82 0x85583663u /** *10服务和子服务 *诊断会话 */ #define DiagnosticSessionControl 0x10u #define DefaultSession 0x01u #define ProgrammingSession 0x02u #define ExtendedDiagnosticSession 0x03u /** *11服务和子服务 *ECU复位 */ #define ECUReset 0x11u #define HardReset 0x01u #define SoftReset 0x03u /** *14服务和子服务 *清除故障信息 */ #define ClearDiagnosticInformation 0x14u /** *19服务和子服务 *读取故障信息 */ #define ReadDTCInformation 0x19u #define ReportNumberOfDTCByStatusMask 0x01u #define ReportDTCByStatusMask 0x02u #define ReportDTCSnapshotRecordByDTCNumber 0x04u #define ReportSupportedDTC 0x0Au #define NoSupport 0x00u #define NeedSupport 0x01u #define NormalVottage 0x00u #define LowVottage 0x01u #define HightVottage 0x02u #define AgeingCount 100u #define OfflineLoopMultiple 5u #define MaxDTCPendingCount 1u #define MinimumVoltage 9000u #define RestoreMinimumVoltage 9500u #define MaximumVoltage 16000u #define RestoreMaximumVoltage 15500u #define LowVoltageTimer 2000u #define HightVoltageTimer 1000u #define DTCError 0x01u #define DTCErrorThisCycle 0x02u #define DTCPending 0x04u #define DTCConfirmed 0x08u #define DTCNoTestLastClear 0x10u #define DTCErrorLastClear 0x20u #define DTCNoTestThisCycle 0x40u #define DTCNoError 0xFEu #define DTCMask 0x09u #define KL15DTCEnableTimer 3500u #define H_LVoltageDTCEnableTimer 500u #define BusOffDTCEnableTimer 1000u /** *22服务和子服务 *通过DID来读数据 */ #define ReadDataByIdentifier 0x22u /** *27服务和子服务 *安全访问 */ #define SecurityAccess 0x27u #define requestSeed_LV1 0x01u #define sendKey_LV1 0x02u #define requestSeed_LV11 0x11u #define sendKey_LV11 0x12u #define NormalKeyUnlock 0x01u #define NormalKeyLock 0x00u #define BootKeyUnlock 0x02u #define BootKeyLock 0x00u #define SER27_MAX_REQ_SEED_NUM 0x03u #define SER27_MAX_INVAILD_KEY_NUM 0x03u #define SER27_CLEAR_REQ_SEEDED 0x00u #define SER27_REQ_SEEDED 0x01u #define SER27_ERR_DELAY_TIMER_EN 0x01u #define SER27_ERR_DELAY_SER_PERIOD 100u #define SER27_ERR_DELAY_TIMEOUT 10000u /** *28服务和子服务 *通讯控制 */ #define CommunicationControl 0x28u #define enableRxAndTx 0x00u #define enableRxAndDisableTx 0x01u #define disableRxAndEnableTx 0x02u #define disableRxAndTx 0x03u #define normalMsg 0x01u #define networkManagementMsg 0x02u #define networkManagementMsgAndnormalMsg 0x03u /** *2E服务和子服务 *通过DID来写数据 */ #define WriteDataByIdentifier 0x2Eu #define WriteBootData 0x00u #define Write2EData 0x01u /** *2F服务和子服务 *通过DID来控制ECU */ #define InputOutputControlByIdentifier 0x2Fu #define WhiteColor 0x01u #define BlackColor 0x02u #define RedColor 0x03u #define GreenColor 0x04u #define BlueColor 0x05u #define GaugeSpeed 0x01u #define GaugeTacho 0x02u #define GaugeFuel 0x03u #define GaugeEngCoolantTemp 0x04u #define ZeroPosition 0x00u #define HalfPosition 0x01u #define FullPosition 0x02u #define Contrl 0x03u #define Resume 0x00u /** *31服务和子服务 *历程控制 */ #define RoutineControl 0x31u #define startRoutine 0x01u #define stopRoutine 0x02u #define requestRoutineResults 0x03u #define MaintenanceReset 0X62F1u #define CheckMemory 0x0202u #define UpdateConditionCheck 0x0203u #define ECU_selftest 0xDFF0u #define EraseMemory 0xFF00u #define CheckProgrammingDependencies 0xFF01u #define RoutineCompletedSuccessfully 0x04u #define RoutineCompletedUnsuccessfully 0x05u /** *3E服务和子服务 *维持当前会话 */ #define TesterPresent 0x3Eu #define ZeroSubFunction 0x00u /** *85服务和子服务 *故障检测控制 */ #define ControlDTCSetting 0x85u #define DTCSettingOn 0x01u #define DTCSettingOff 0x02u /** *诊断支持的否定响应代码 */ #define positiveResponse 0x00u #define serviceNotSupported 0x11u #define subFunctionNotSupported 0x12u #define incorrectMessageLength 0x13u #define responseTooLong 0x14u #define conditionsNotCorrect 0x22u #define requestSequenceError 0x24u #define requestOutOfRange 0x31u #define securityAccessDenied 0x33u #define invalidKey 0x35u #define exceedNumberOfAttempts 0x36u #define requiredTimeDelayNotExpired 0x37u #define uploadDownloadNotAccepted 0x70u #define transferDataSuspended 0x71u #define generalProgrammingFailure 0x72u #define wrongBlockSequenceCounter 0x73u #define requestCorrectlyReceivedResponsePending 0x78u #define subfunctionNotSupportinActiveSession 0x7Eu #define serviceNotSupportedInActiveSession 0x7Fu #define engineIsRunning 0x83u #define engineIsNotRunning 0x84u #define engineRunTimeTooLow 0x85u #define voltageTooHigh 0x92u #define voltageTooLow 0x93u #define getDID(DID_H, DID_L) ((uint16_t)(((uint16_t)(DID_H)) << 8u) | (uint16_t)(DID_L)) #define toUint16_t(data0, data1) ((uint16_t)(((uint16_t)(data0)) << 8u) | (uint16_t)(data1)) #define toUint32_t(data0, data1, data2, data3) ((uint32_t)(((uint32_t)(data0)) << 24u) | (uint32_t)(((uint32_t)(data1)) << 16u) | (uint32_t)(((uint32_t)(data2)) << 8u) | (uint32_t)(data3)) #define isBCD(data) ((((uint8_t)((data) & 0x0Fu)) < 0x0Au) && (((uint8_t)(((uint8_t)((data) & 0xF0u)) >> 4u )) < 0x0Au)) /** * TYPEDEFS */ typedef union { uint8_t Data[500]; struct { uint8_t SubID :7; uint8_t PositiveSuppression :1; uint8_t Data[499]; } SidDetail; struct { uint8_t DID_H; uint8_t DID_L; uint8_t Data[498]; } DidDetail; struct { uint32_t Parameter :24; uint8_t Data[497]; } S14Detail; struct { uint8_t SubID; uint8_t DID_H; uint8_t DID_L; uint8_t Data[497]; } S31Detail; struct { uint8_t SubID :7; uint8_t PositiveSuppression :1; uint8_t ContrlType; uint8_t Data[498]; }S28Detail; } msgDataUnion; typedef struct { uint32_t msgID; uint16_t msgDLC; msgDataUnion msgData; } DiagMSGUnion; typedef struct { uint8_t LV1Ctrl; uint8_t LV1DelayCtrl; uint16_t LV1DelayTimer; uint8_t LV1SafetyStatus; uint8_t LV1Seed[4]; uint8_t LV1Key[4]; } Ser27_FlowCtrlUnion; typedef struct { uint32_t Flag; uint32_t JumpToBootFlag; uint32_t AppValidFlag; uint32_t S11Flag; } DiagFlagUnion; typedef struct { uint32_t Flag; uint8_t LV1ReqSeedCnt; uint8_t LV1InvaidKyeCnt; uint8_t LV11_ReqSeedCnt; uint8_t LV11_InvaidKyeCnt; uint32_t RandNum; } Ser27_FlowCtrlCntUnion; typedef struct { uint32_t Flag; uint8_t DID_0200; uint8_t DID_0201; uint8_t DID_F180[16]; uint8_t DID_F187[21]; uint8_t DID_F189[16]; //uint8_t DID_F191[16]; uint8_t DID_F193[16]; uint8_t DID_F198[16]; uint8_t DID_F199[4]; } BootToDFlashInfoUnion; typedef struct { uint32_t Flag; uint8_t DID_F190[17]; uint8_t DID_F1A2[4]; uint8_t DID_F112[8]; uint8_t DID_F197[8]; uint8_t DID_DFEC[64]; uint8_t DID_DFED[64]; uint8_t DID_DFEE[64]; uint8_t DID_DFEF[64]; uint8_t DID_F101[16]; uint8_t DID_F110[8]; uint8_t DID_F102[24]; uint8_t DID_7101[3]; uint8_t DID_7102[3]; uint8_t DID_7103[1]; } Ser2EToDFlashInfoUnion; typedef struct { uint16_t ECUPowerVoltage; uint8_t OccurrenceCounter; uint16_t VehicleSpeed; uint32_t FirstMalfunction; uint32_t LastMalfunction; struct { uint8_t sec; uint8_t min; uint8_t hour; uint8_t month; uint8_t day; uint8_t year; }Time; } SnapshotUnion; typedef struct { uint8_t DTCStatus; uint8_t DTCAgeing; uint8_t DTCCount; uint8_t DTCPendingCount; SnapshotUnion Snapshot; } DTCUnion; typedef struct { uint32_t Flag; DTCUnion DTC[14u]; } DTCToDFlashInfoUnion; typedef void (*InitFunction)(void); extern uint8_t S31DID62F3RequestStatus; extern DiagMSGUnion DiagMSG; extern DiagFlagUnion DiagFlag; extern Ser27_FlowCtrlUnion Ser27_FlowCtrl; extern Ser27_FlowCtrlCntUnion Ser27_FlowCtrlCnt; extern BootToDFlashInfoUnion BootToDFlashInfo; extern Ser2EToDFlashInfoUnion Ser2EToDFlashInfo; extern DTCToDFlashInfoUnion DTCToDFlashInfo; void setSessionType(uint8_t status); uint8_t getSessionType(void); void setDiagMSG(uint32_t Identifier, uint16_t dlc, uint8_t Data[]); DiagMSGUnion getDiagMSG(void); void clearDiagMSG(void); uint16_t getSpeed(void); uint16_t getESpeed(void); uint16_t getKL30Voltage(void); uint8_t getKL15Status(void); uint8_t getSecurityLevel(void); void Ser27_ChangeSessionHandle(void); void UDS_RESET(void); void UDS_Delay(uint16_t count); void UDS_S11_Sand(uint8_t subid); void UDS_S11_Confirm(void); void UDS_NRC78_Sand(uint8_t sid); void UDS_SendNRCRsp(uint8_t sid,uint8_t status); void UDS_14_SendRsp(uint8_t sid); void UDS_50us_Service(void); void UDS_10ms_Service(void); void UDS_KL15_init(void); void UDS_Slepp(void); void MsgLostTimer(uint16_t timer); void ReceivedMsg(uint32_t MsgID, uint8_t DLC); void S3_Service(uint16_t timer); void S3_ServiceClear(void); void S3_ServiceWait(void); void S3_ServiceTimeOut(void); void Ser27_ErrDelayTimerService(uint16_t timer); void ControlMessageCommunication(uint8_t Type, uint8_t Status); void enableDTCTimer(uint16_t Timer); uint8_t isDTCEnable(void); void setDTCEnableTimer(uint16_t Timer); void OpenDTCTest(void); void CloseDTCTest(void); uint8_t DTCTestIsOpen(void); void DTCAgeing(void); void ReadAllDFlashData(void); uint8_t ReadDFlashData(uint8_t u8BlockNum, uint32_t u32Data[], uint16_t u16Len, InitFunction initFunction); uint8_t WriteDFlashData(uint8_t u8BlockNum, uint32_t u32Data[], uint16_t u16Len, uint8_t isWait); void AllFlagInit(void); void Ser27ToDFlashInfoInit(void); void BootToDFlashInfoInit(void); void Ser2EToDFlashInfoInit(void); void DTCToDFlashInfoInit(void); void DTCConfigurationInit(void); extern uint32_t Get_7101_Value(void); extern uint32_t Get_7102_Value(void); extern uint8_t Get_7103_Value(void); extern void Clear7103_Cbk(void); #endif