diff --git a/CanUds.c b/CanUds.c index bc3a944..b59603f 100644 --- a/CanUds.c +++ b/CanUds.c @@ -222,6 +222,21 @@ void ReceivedTP_func(void *arg, tCanTP_data *data) { } */ + + + +void setResponseErrorPending(tCanUds *env, eUdsServices service, eUdsResponseError error) { + env->dataResponsePending[0] = 0x7F; + env->dataResponsePending[1] = service; + env->dataResponsePending[2] = error; + + CanSerialPortFrameTpTransmit(&env->canSerialPortFrameTp, env->dataResponsePending, + 3, PROTOCOL_CAN_ADR_UDS, WAIT_FRAME_WRITE); +} + + + + static void setDefaultSecurityAccess(tCanUds *env) { env->SA.requestSequenceRequestSeed = false; env->SA.stateSecurityAccess = false; @@ -300,11 +315,11 @@ static uint16_t DiagnosticSessionControl_10(tCanUds *env) { // Нормальный таймаут. Важно: Клиент может отправлять TesterPresent для поддержания сессии // 50 мс - diagnosticSessionsType->P2 = 500; + diagnosticSessionsType->P2 = 50; // Расширенный таймаут. Например, ECU может обрабатывать сложный запрос 2 секунды и отправлять NRC 0x78, затем ответ - // 5000 мс - diagnosticSessionsType->P2Ex = 5000; + // 500 мс + diagnosticSessionsType->P2Ex = 500; return 6; } @@ -958,6 +973,8 @@ static uint16_t vUDS_routine_Compare_Checksum(tCanUds *env, eUdsRoutineControlTy return 0xFF00 | UDS_error_incorrectMessageLengthOrInvalidFormat; } + setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending); + uint32_t crc32_calc = UdsCrc32((uint8_t *) 0x01100000, 512 * 1024); uint32_t crc32_received = (env->data->data[4] << 24) | (env->data->data[5] << 16) | (env->data->data[6] << 8) | env->data->data[7]; @@ -979,6 +996,8 @@ static uint16_t vUDS_routine_Erase_Memory(tCanUds *env, eUdsRoutineControlType u return 0xFF00 | UDS_error_sub_functionNotSupported; } + setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending); + bool result = env->clear_flash_func(0x01100000, 512 * 1024); // bool result = FLASHDRIVER_FlashEraseBlock(FLASH_BLOCK_SELECT1); diff --git a/CanUds.h b/CanUds.h index 5832598..ab7cb42 100644 --- a/CanUds.h +++ b/CanUds.h @@ -65,7 +65,8 @@ typedef enum { UDS_error_requestSequenceError = 0x24, UDS_error_exceededNumberOfAttempts = 0x36, UDS_error_requiredTimeDelayNotExpired = 0x37, - UDS_error_generalProgrammingFailure = 0x72 + UDS_error_generalProgrammingFailure = 0x72, + UDS_error_requestCorrectlyReceived_ResponsePending = 0x78 } eUdsResponseError; @@ -158,6 +159,7 @@ typedef struct { tCanTP_data *data; uint8_t dataResponse[1024]; + uint8_t dataResponsePending[4]; uint8_t filterIdCount; uint32_t filterReqId[16];