/*! * @file uds_interface.h * @brief customized service sequence definition. Modify the file according to the requirements. * */ #ifndef UDS_INTERFACE_H #define UDS_INTERFACE_H #include "uds_types.h" #if BOOTLOADER_CODE_FLAG == 0 #define UDS_SERVICE_FOREACH(func)\ /*00*/ func(0x10,UDS_10_Service_Session_Control,0)\ /*01*/ func(0x11,UDS_11_Service_Ecu_Reset,0)\ /*02*/ func(0x14,UDS_14_Service_Clear_DTC,0)\ /*03*/ func(0x19,UDS_19_Service_Read_DTC,0) \ /*04*/ func(0x22,UDS_22_Service_Read_Data,0)\ /*05*/ func(0x2E,UDS_2E_Service_Write_Data,1) \ /*06*/ func(0x27,UDS_27_Service_Security_Access,0) \ /*07*/ func(0x3E,UDS_3E_Service_Tester_Present,0) \ /*08*/ func(0x31,UDS_31_Service_Routine_Ctrl,0) \ /*09*/ func(0x28,UDS_28_Service_Communication_Control,0) \ /*10*/ func(0x85,UDS_85_Service_Control_DTC,0) \ /*12*/ func(0x7F,UDS_Service_NRC,0) #else #define UDS_SERVICE_FOREACH(func)\ /*00*/ func(0x10,UDS_10_Service_Session_Control,0)\ /*01*/ func(0x11,UDS_11_Service_Ecu_Reset,0)\ /*02*/ func(0x22,UDS_22_Service_Read_Data,0)\ /*03*/ func(0x2E,UDS_2E_Service_Write_Data,1) \ /*04*/ func(0x27,UDS_27_Service_Security_Access,0) \ /*05*/ func(0x3E,UDS_3E_Service_Tester_Present,0) \ /*06*/ func(0x31,UDS_31_Service_Routine_Ctrl,0) \ /*07*/ func(0x28,UDS_28_Service_Communication_Control,0) \ /*08*/ func(0x85,UDS_85_Service_Control_DTC,0) \ /*09*/ func(0x34,UDS_34_Service_Request_Download,1) \ /*10*/ func(0x36,UDS_36_Service_Transfer_Data,1) \ /*11*/ func(0x37,UDS_37_Service_Transfer_Exit,0) \ /*12*/ func(0x7F,UDS_Service_NRC,0) #endif #define GENERATE_UDS_SERVICE_INDEX(sid,service,rx_end_flag) Index_Sid_##sid, #define GENERATE_UDS_SERVICE_TABLE(sid,service,rx_end_flag) service, #define GENERATE_UDS_SERVICE_ID(sid,name,rx_end_flag) sid , typedef enum _UDS_SERVICE_INDEX { UDS_SERVICE_FOREACH(GENERATE_UDS_SERVICE_INDEX) UDS_SERVICE_NUM, }UDS_SERVICE_INDEX; typedef enum{ _UDS_DEFAULT_SESSION=0x01, _UDS_PROGRAM_SESSION=0x02, _UDS_EXT_SESSION=0x03, // _UDS_STD_DIAG_SESSION=0x81, // _UDS_PRO_DIAG_SESSION=0x85, // _UDS_EXT_DIAG_SESSION=0x90, }UDS_SESSION; typedef enum { DOWNLOAD_SEQUENCE_IDLE, DOWNLOAD_SEQUENCE_34, DOWNLOAD_SEQUENCE_36, DOWNLOAD_SEQUENCE_37, }DownloadSequenceType; #define UDS_UP_LEN (FMC_PAGE_SIZE) typedef struct { bool start; /*!< Sequence start state */ uint8_t index; /*!< Sequence index to be serviced */ }UDS_Demo_Service_Ctrl_T; typedef struct{ bool RxEraseFlg; bool RxProgramFlag; bool UpCompFlg; bool UpChkProgIntegFlg; bool UpModleFlg; bool EraseMemoryFlg; //bool SecureFlg; //bool SecureSw; uint8_t EraseMemorySts; uint32_t OffSetAdd; uint32_t EraseAddress; uint32_t EraseLength; uint16_t GetCrc; uint16_t CalcCrc; uint32_t dLen; uint32_t StackTopAdr; uint32_t checksum; #if BOOTLOADER_CODE_FLAG uint8_t Buf[UDS_UP_LEN]; #endif bool RoutineEraseMemoryFlg; bool RoutineChkProgIntegrityFlg; bool RoutineChkProgIntegrityPass; bool PrintFingerFlg; bool RoutineEraseMemoryErr; //uint16_t FlashDriverDlength; uint8_t Sn; uint32_t totalRecvLength; DownloadSequenceType DownloadSeq; }_UdsUpData; typedef struct{ bool ResetMcuFlg; bool UdsTxFlg; bool UdsTxCompFlg; bool KeyLockFlg; bool PhyFlg; bool TxCompFlg; bool AlreadSendSeed; bool StartFlg; bool IsUdsFlg; bool BattErrFlg; bool HsCanErrFlg; bool TypeVech; bool UpDataFlg; bool CanRxOkFlg; bool BusOffNoSendFlg; bool ChkProgPreconditionFlg; bool Sid2FWaitResFlg; uint8_t IOCP; uint16_t IOCS; uint8_t SwErrCnt; uint8_t VersionMod; uint8_t CheckDtc5S; uint8_t DtcFlg; uint8_t DtcErr; uint8_t FrameType; uint8_t RequestFlg; uint8_t SessionDiagModel; uint8_t RxSessionDiagModel; uint8_t Id; uint8_t RstTimer; uint8_t MultFrameComp; uint8_t SeedKeyIsOK; uint8_t SeedKeyLevel; uint8_t NcmDisRxAndTx; uint8_t NmcmDisRxAndTx; uint8_t EnRxAndTx0x29; uint8_t DisDTCRecord; uint8_t KeyErrCnt; uint8_t KeyErrLockTimer; uint8_t TxUdsChann; uint8_t ReqCmdBuf[20]; uint16_t SessionTimer;//不是默认会话的情况下,定时运转一段时间后会回到默认会话层 uint16_t RxDlc; uint16_t RxMulDlc; uint16_t TxTimerOut; uint16_t RxBlockCnt; uint16_t SwImageErrTimer; uint16_t BusOffNoSendTimer; uint16_t CanID; uint16_t IoDid; uint16_t Nrc78Timer; }__UDSService; extern uint8_t UDS_SeedKeyBuf[8]; extern __UDSService UdsService; extern _UdsUpData UdsUpData; extern const uint8_t UDSsid[]; extern UDS_Demo_Service_Ctrl_T Service_Ctrl; void GotoDefaultSession(void); bool CheckIsBeyonSession(INT8U CurSession,INT8U SelfSession,INT8U Type); bool CheckUdsDlcIsOk(INT16U RxDlc,INT16U rDlc); bool CheckSubSidNeedPosResp(INT8U SubSID); bool CheckIsKeyOk(void); bool CanRxConStatus(void); bool CheckIsSupportBootloaderRead_Sid22(uint16_t did); bool CheckIsSupportSubFunc_Sid19(uint8_t sub); bool CheckIsSupportSubFunc_Sid11(uint8_t sub); /*! * @brief Demo Service Function to start service sequencce * This function is used to start service sequencce */ void UDS_Demo_Services_Start(void); /*! * @brief Demo Service Function to call the services in sequencce * This function is used to call the services in sequencce */ void UDS_Demo_Services_Sequence(void); /*! * @brief Demo service function to calculate key according to seed. * The function is used to calculate key according to seed. * * @param rsp_buf Response buf pointer */ void UDS_Demo_Calculate_Key(uint8_t* rsp_buf); /*! * @brief Demo Service Function for positive response callback * This function is used for positive response callback */ void UDS_Pos_Response_Callback(void); /*! * @brief Demo Service Function for negtive response callback * This function is used for negtive response callback */ void UDS_Neg_Response_Callback(void); #endif