From 2f142a2721c4fc68ad25d4f4db8d1d1e4dff03c6 Mon Sep 17 00:00:00 2001 From: cfif Date: Thu, 29 Jan 2026 13:33:53 +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 | 52 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/CanUds.c b/CanUds.c index 3a5168d..e51f9ab 100644 --- a/CanUds.c +++ b/CanUds.c @@ -310,20 +310,58 @@ static uint16_t WriteDataByIdentifier_2E(tCanUds *env) { static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { - if (env->data.len < 5) { + if (env->data.len < 4) { return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_incorrectMessageLengthOrInvalidFormat); } - if ((env->data.data[3] != UDS_io_returnControlToECU) && - (env->data.data[3] != UDS_io_shortTermAdjustment)) { - return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_conditionsNotCorrect); - } - uint8_t dataIdentifier_hi = env->data.data[1]; uint8_t dataIdentifier_lo = env->data.data[2]; +// uint16_t dataIdentifier = (dataIdentifier_hi << 8) | dataIdentifier_lo; - return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange); + if ((env->data.data[3] != UDS_io_returnControlToECU) && + (env->data.data[3] != UDS_io_shortTermAdjustment)) { + return setResponseError(env, UDS_ECUResetService, UDS_error_sub_functionNotSupported); + } + + if (dataIdentifier_hi == 0xCF) { + + if (uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data != NULL) { + uint16_t size = uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].size; + + if (env->data.len != size + 4) { + return setResponseError(env, UDS_InputOutputControlByIdentifier, + UDS_error_incorrectMessageLengthOrInvalidFormat); + } + + env->dataResponse[0] = UDS_InputOutputControlByIdentifier | 0b1000000; + env->dataResponse[1] = dataIdentifier_hi; + env->dataResponse[2] = dataIdentifier_lo; + env->dataResponse[3] = env->data.data[3]; + //memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[3], size); + + return 4; + } + + } + + if (dataIdentifier_hi == 0xF1) { + + if (uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].data != NULL) { + uint16_t size = uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].size; + + env->dataResponse[0] = UDS_WriteDataByIdentifier | 0b1000000; + env->dataResponse[1] = dataIdentifier_hi; + env->dataResponse[2] = dataIdentifier_lo; + env->dataResponse[3] = env->data.data[3]; + //memcpy(uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].data, &env->data.data[3], size); + + return 4; + } + + } + + return setResponseError(env, UDS_WriteDataByIdentifier, UDS_error_requestOutOfRange); } // конец --------------------------- Управление --------------------------------------------------------- // конец --------------------------- Управление ---------------------------------------------------------