From 13d0f023c66191ad07b371b3948380592c9db915 Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 21 Jan 2026 15:25:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanUds.c | 578 ++++++++++++++++++++++++++++++------------------------- CanUds.h | 3 +- 2 files changed, 323 insertions(+), 258 deletions(-) diff --git a/CanUds.c b/CanUds.c index 74d1f80..434f386 100644 --- a/CanUds.c +++ b/CanUds.c @@ -150,7 +150,7 @@ static uint8_t WriteDataByIdentifier_2E(tCanUds *env) { // начало --------------------------- Управление --------------------------------------------------------- // начало --------------------------- Управление --------------------------------------------------------- -static uint8_t IoDataByIdentifier_2F(tCanUds *env) { +static uint8_t InputOutputControlByIdentifier_2F(tCanUds *env) { if ((env->data.len < 4) || (env->data.data[3] != UDS_io_returnControlToECU) || @@ -170,263 +170,327 @@ static uint8_t IoDataByIdentifier_2F(tCanUds *env) { // конец --------------------------- Управление --------------------------------------------------------- // конец --------------------------- Управление --------------------------------------------------------- + +// начало --------------------------- Перезагрузка --------------------------------------------------------- +// начало --------------------------- Перезагрузка --------------------------------------------------------- +// начало --------------------------- Перезагрузка --------------------------------------------------------- + +static uint8_t ECUReset_11(tCanUds *env) { + + if (env->data.len != 2) { + return setResponseError(env, UDS_ECUResetService, + UDS_error_incorrectMessageLengthOrInvalidFormat); + } + + if ((env->data.data[1] == 1) || (env->data.data[1] == 3)) { + + env->dataResponse[0] = UDS_ECUResetService | 0b1000000;; + env->dataResponse[1] = env->data.data[1]; + + return 2; + } + + return setResponseError(env, UDS_ECUResetService, UDS_error_sub_functionNotSupported); +} +// конец --------------------------- Перезагрузка --------------------------------------------------------- +// конец --------------------------- Перезагрузка --------------------------------------------------------- +// конец --------------------------- Перезагрузка --------------------------------------------------------- + + +// начало --------------------------- Очистка ошибок --------------------------------------------------------- +// начало --------------------------- Очистка ошибок --------------------------------------------------------- +// начало --------------------------- Очистка ошибок --------------------------------------------------------- + +static uint8_t UDS_ClearDiagnosticInformation_14(tCanUds *env) { + + if (env->data.len != 4) { + return setResponseError(env, UDS_ClearDiagnosticInformation, + UDS_error_incorrectMessageLengthOrInvalidFormat); + } + + + return setResponseError(env, UDS_ClearDiagnosticInformation, UDS_error_requestOutOfRange); +} +// конец --------------------------- Очистка ошибок --------------------------------------------------------- +// конец --------------------------- Очистка ошибок --------------------------------------------------------- +// конец --------------------------- Очистка ошибок --------------------------------------------------------- + +// начало --------------------------- Чтение ошибок --------------------------------------------------------- +// начало --------------------------- Чтение ошибок --------------------------------------------------------- +// начало --------------------------- Чтение ошибок --------------------------------------------------------- + +static uint8_t UDS_ReadDTCInformation_19(tCanUds *env) { + + if (env->data.len != 3) { + return setResponseError(env, UDS_ReadDTCInformation, + UDS_error_incorrectMessageLengthOrInvalidFormat); + } + + + return setResponseError(env, UDS_ReadDTCInformation, UDS_error_sub_functionNotSupported); +} +// конец --------------------------- Чтение ошибок --------------------------------------------------------- +// конец --------------------------- Чтение ошибок --------------------------------------------------------- +// конец --------------------------- Чтение ошибок --------------------------------------------------------- + + const eUds_com uds_com[256] = { - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {DiagnosticSessionControl_10, "DiagnosticSessionControl_10"}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {ReadDataByIdentifier_22, "ReadDataByIdentifier_22"}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {WriteDataByIdentifier_2E, "WriteDataByIdentifier_2E"}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""} + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {DiagnosticSessionControl_10, "DiagnosticSessionControl_10"}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {ECUReset_11, "ECUReset_11"}, + {NULL, ""}, + {NULL, ""}, + {UDS_ClearDiagnosticInformation_14, "UDS_ClearDiagnosticInformation_14"}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {UDS_ReadDTCInformation_19, "UDS_ReadDTCInformation_19"}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {ReadDataByIdentifier_22, "ReadDataByIdentifier_22"}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {WriteDataByIdentifier_2E, "WriteDataByIdentifier_2E"}, + {InputOutputControlByIdentifier_2F, "InputOutputControlByIdentifier_2F"}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""} }; diff --git a/CanUds.h b/CanUds.h index f3fcbef..07f5861 100644 --- a/CanUds.h +++ b/CanUds.h @@ -39,7 +39,8 @@ typedef enum { UDS_error_incorrectMessageLengthOrInvalidFormat = 0x13, UDS_error_responseTooLong= 0x14, UDS_error_requestOutOfRange= 0x31, - UDS_error_securityAccessDenied= 0x33 + UDS_error_securityAccessDenied= 0x33, + UDS_error_sub_functionNotSupported = 0x12 } eUdsResponseError;