#ifndef _UDS_FBL_SERVICE_3E_SOURCE #define _UDS_FBL_SERVICE_3E_SOURCE /******************************************************************************* ** Include Section ** *******************************************************************************/ #include "uds_fbl_mgr.h" #include "uds_fbl_service3E.h" #include "uds_fbl_service10.h" /******************************************************************************* ** Version Information ** *******************************************************************************/ /******************************************************************************* ** Version Check ** *******************************************************************************/ /******************************************************************************* ** Macro definition ** *******************************************************************************/ /******************************************************************************* ** Global Data ** *******************************************************************************/ const uds_nrc nrc_3E00[2] = { UDSincorrectMessageLengthOrInvalidFormat,\ UDSsubfunctionNotSupported }; /*--------- <0x11> sub function config start-------------*/ static const DIAG_sunfunction_t SessionSubfunction[] = { {0x00 ,7,false,2,2,NULL,{nrc_3E00, 2}} }; /*===============================================================================================*/ /* uds_nrc service3E_nrc_check(UDSpacket_t* qUDSpacket) */ /* ----------------------------------------------------------------------------------------------*/ /* Function: 3E service negative response judgment */ /* Arguments: qUDSpacket : CAN message structure pointer */ /* Return: Response type */ /*===============================================================================================*/ uds_nrc service3E_nrc_check(UDSpacket_t* qUDSpacket) { uds_nrc returnType = 0; uint8_t const kwpdiag_num = (sizeof(SessionSubfunction)/sizeof(DIAG_sunfunction_t)); uint8_t index = 0; uint8_t requestsid; requestsid = UDS_GET_SUB_FUNCTION(qUDSpacket->Data.Byte[1]); for (index = 0; index < kwpdiag_num; index++) { nrc_table_t nrc_table = SessionSubfunction[index].nrc_table; uint16_t length = SessionSubfunction[index].rx_dataLen; uint8_t index_nrc = 0; /* Judge abnormal situations according to NRC priority */ for (index_nrc = 0; (index_nrc < nrc_table.nrc_cnt) && (returnType == 0); index_nrc++) { switch (nrc_table.nrc_list[index_nrc]) { case UDSincorrectMessageLengthOrInvalidFormat: if (Uds_Nrc13_Occur(qUDSpacket->size, length)) { returnType = UDSincorrectMessageLengthOrInvalidFormat; } break; case UDSsubfunctionNotSupported: if (Uds_Nrc12_Occur(requestsid, SessionSubfunction, kwpdiag_num)) { returnType = UDSsubfunctionNotSupported; } break; default: break; } } } return returnType; /* return highest priority nrc*/ } /*===============================================================================================*/ /* uint8_t ApplDiag_TesterPresentHandler_3e(UDSpacket_t* qUDSpacket) */ /* ----------------------------------------------------------------------------------------------*/ /* Function: 3E service entry processing function */ /* Arguments: qUDSpacket : CAN message structure pointer */ /* Return: Response type */ /*===============================================================================================*/ uint8_t ApplDiag_TesterPresentHandler_3e(UDSpacket_t* qUDSpacket) { uds_nrc returnType = 0; uint8_t subFunction; returnType = service3E_nrc_check(qUDSpacket); subFunction = UDS_GET_SUB_FUNCTION(qUDSpacket->Data.Byte[1]); if (UDSpositiveResp == returnType) { switch (subFunction) { case 0x00: udsFbl_StartTimer(TIMER_UDS_SESSION); /* start non-default session counter */ break; default: break; } } if(UDSpositiveResp == returnType) { qUDSpacket->Data.Byte[0] = UDS_GET_POSITIVE_RSP(qUDSpacket->Data.Byte[0]); qUDSpacket->size = 2; } else { /* do nothing */ } return returnType; } /******************************************************************************* ** End of File ** *******************************************************************************/ #endif /*_UDS_FBL_SERVICE_3E_SOURCE*/