#ifndef UDS_FBL_MGR #define UDS_FBL_MGR #ifdef __cplusplus extern "C" { #endif #include "stdint.h" #include "stdbool.h" #include "string.h" #include "uds_response_code.h" #include "BootDiagTp.h" #include "uds_serviceapi.h" #define BOOT_SESSIONKEEP_TIMER (5000u) #define BOOT_ERASEWAIT_TIMER (80u) #define BOOT_PROGRAMWAIT_TIMER (1800u) #define BOOT_CHECKROUTINE_TIMER (1800u) #define BOOT_IDLEAPPRST_TIMER (20u) #define BOOT_DIAG_SEED_ERROR_TIMEOUT (60000u) #define BOOT_DELAY_TIMER (10000u) #define BOOT_CHECKDEPENDENCY_TIMER (1800u) #define POSITIVE_RSP (0x40) #define NEGATIVE_RSP (0x7F) #define UDS_GET_POSITIVE_RSP(server_id) (POSITIVE_RSP + server_id) #define UDS_GET_SUB_FUNCTION_SUPPRESS_POSRSP(byte) ((byte >> 7u)&0x01u) #define UDS_GET_SUB_FUNCTION(byte) (byte & 0x7fu) #define UDS_NRC_13_OCCUR(s,d) (s!=d) #define UDS_NRC_12_OCCUR(s,d) (0) #define UDS_NRC_22_OCCUR(s,d) (0) typedef uint8_t(*diag_subhandler_t )(uint8_t* pdidData); typedef uint8_t(*diag_sessionhandler_t)(UDSpacket_t* UDSpacket); typedef void(*diag_nrchandler_t )(uint8_t); typedef uint8_t uds_nrc; typedef struct { const uds_nrc* nrc_list; uint8_t nrc_cnt; }nrc_table_t; typedef struct { uint16_t sub_requestsid; uint8_t session_mask; bool SecurityLevel; uint16_t rx_dataLen; uint16_t tx_dataLen; diag_subhandler_t diag_subfunc; nrc_table_t nrc_table; }DIAG_sunfunction_t; typedef struct { uint8_t serviceid; diag_nrchandler_t diag_nrchandler; }DIAG_nrchandler_t; typedef struct { uint8_t serviceid; uint16_t minLength; bool SPRMB; diag_sessionhandler_t diag_sessionhandler; }DIAG_handler_t; typedef struct { uint16_t SessionCounter; /*5s*/ uint8_t IdleResetApp; uint16_t eraseCounter; /*80ms*/ uint16_t programCounter; /*1.8s*/ uint16_t checkRoutineCounter; /*130ms*/ uint16_t delayTimerCounter; /*10s*/ uint16_t checkDependency; /*1.8s*/ }BootIdle_Header_t; typedef enum { TIMER_UDS_SESSION = 0, TIMER_UDS_RESET, TIMER_UDS_ERASE, TIMER_UDS_PROGRAM, TIMER_UDS_ROUTINE, TIMER_UDS_DELAY, TIMER_UDS_DEPENDENCY }UDS_TIMER; typedef enum { FLASH_FBL = 0, FLASH_APPL, FLASH_DRIVER, FLASH_ERROR }FLASH_TYPE; typedef enum { CRC16_SUCCESS = 0, CRC16_FAILED }CRC16_VERIFY_TYPE; typedef struct { FLASH_TYPE flash_type; uint8_t download_sts; uint8_t checkmemory_sts; }FLASH_BLOCK_INFO; /******************************************************************************* ** Function Definitions ** *******************************************************************************/ bool Uds_Nrc22_Occur(void); bool Uds_Nrc12_Occur(uint8_t requestsid, const DIAG_sunfunction_t* funcList, uint16_t listSize); extern bool Uds_Nrc13_Occur(uint16_t sourceLength, uint16_t targetLength); extern bool Uds_Nrc37_Occur(void); extern bool Uds_Nrc24_Occur(void); extern bool Uds_Nrc35_Occur(void); extern bool Uds_Nrc36_Occur(void); extern bool Uds_Nrc7E_Occur(uint16_t requestsid, const DIAG_sunfunction_t* funcList, uint16_t listSize); extern bool Uds_Nrc33_Occur(uint16_t requestsid, const DIAG_sunfunction_t* funcList, uint16_t listSize); extern uint8_t udsFbl_GetCurrentSessionMode(void); extern void udsFbl_SetCurrentSessionMode(uint8_t SessionMode); extern bool udsFbl_Get_Security_Access_Sts(void); extern void udsFbl_Set_Security_Access_Sts(bool secStatus); extern uint8_t StdDiagnosticHandler(void); extern uint8_t StdFuncDiagnosticHandler(void); extern void DiagM_MainFunction(void); void udsFbl_SetCrcValue(uint16_t crc); uint32_t udsFbl_Get_Request_StartAddr(void); void udsFbl_Set_Request_StartAddr(uint32_t addr); uint32_t udsFbl_Get_Request_EndAddr(void); void udsFbl_Set_Request_EndAddr(uint32_t addr); bool udsFbl_Get_Request_Is_Trigger(void); void udsFbl_Set_Request_Is_Trigger(bool flag); uint32_t udsFbl_Get_Download_Addr(void); void udsFbl_Set_Download_Addr(uint32_t addr); uint8_t udsFbl_Get_Download_Block_Cnt(void); void udsFbl_Set_Download_Block_Cnt(uint8_t cnt); uint8_t udsFbl_Get_PreDownload_Block_Cnt(void); void udsFbl_Set_PreDownload_Block_Cnt(uint8_t cnt); uint8_t udsFbl_Get_Curr_Download_Type(void); void udsFbl_Set_Curr_Download_Type(uint8_t type); uint8_t udsFbl_Get_DownloadStatus(void); void udsFbl_Set_DownloadStatus(uint8_t status); uint16_t udsFbl_Get_maxNumberOfBlockLength(void); void udsFbl_Set_maxNumberOfBlockLength(uint16_t len); uint16_t udsFbl_GetCrcValue(void); bool udsFbl_Get_MsgRecvFlag(void); bool udsFbl_Get_FuncMsgRecvFlag(void); int Uds_init (void); extern UDSpacket_t UDSpacket; extern UDSpacket_t UDSpacket_Func; void udsFbl_StartTimer(uint8_t timer_type); void udsFbl_StopTimer(uint8_t timer_type); void udsFbl_Negative_Rsp(UDSpacket_t* qUDSpacket, uds_nrc nrc_type); void udsFbl_Positive_Rsp(UDSpacket_t* qUDSpacket, uint16_t length, bool sprmb_flag); FLASH_TYPE udsFbl_Get_FlashProgram_Type(void); void udsFbl_Set_FlashProgram_Type(FLASH_TYPE type); bool udsFbl_Get_Func_SPRMB(void); void udsFbl_Set_Func_SPRMB(bool flag); #ifdef __cplusplus } #endif #endif