From 7f41f90d4737c27bc24cda34de107377be676fa9 Mon Sep 17 00:00:00 2001 From: cfif Date: Thu, 2 Jul 2026 14:35:39 +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=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=2002.07.2026=20(=D0=92=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20IO)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanUds.c | 173 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 109 insertions(+), 64 deletions(-) diff --git a/CanUds.c b/CanUds.c index 4d2071d..fb7824a 100644 --- a/CanUds.c +++ b/CanUds.c @@ -519,7 +519,6 @@ static uint16_t WriteDataByIdentifier_2E(tCanUds *env) { // начало --------------------------- Управление --------------------------------------------------------- // начало --------------------------- Управление --------------------------------------------------------- // начало --------------------------- Управление --------------------------------------------------------- - static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { if (env->data->len < 4) { @@ -560,14 +559,14 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { env->dataResponse[2] = dataIdentifier_lo; env->dataResponse[3] = env->data->data[3]; - if (dataIdentifier_lo == 0x50) { - memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[2].data, size); - } else { - memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[dataIdentifier_lo].data, size); - } - if (env->data->data[3] == UDS_io_shortTermAdjustment) { + if (dataIdentifier_lo == 0x50) { + memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[2].data, size); + } else { + memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[dataIdentifier_lo].data, size); + } + // Motor_Def...MotorSealingValve (percent) if ((dataIdentifier_lo >= 0x60) && (dataIdentifier_lo <= 0x78)) { uint16_t percent = (env->data->data[4] << 8) | env->data->data[5]; @@ -711,7 +710,74 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { return size + 4; } else { - return size + 4; + + + // Motor_Def...MotorSealingValve (percent) + if ((dataIdentifier_lo >= 0x60) && (dataIdentifier_lo <= 0x78)) { + + uint8_t *pSet = (uint8_t *) &env->Status_Set_For_Model_output; + pSet[dataIdentifier_lo - 0x60 - 1] = 0; + return 4; + + } else { + + switch (dataIdentifier_lo) { + + // Doors Actuator + case 0x50: { + memset(&env->Status_Set_For_Model_output, 0, 24); + break; + } + + // IO + case 0x51: { + env->Status_Set_For_Model_output.IO = 0; + break; + } + + // PWM + case 0x52: { + env->Status_Set_For_Model_output.Pwm = 0; + break; + } + + // eComp + case 0x53: { + env->Status_Set_For_Model_output.eComp = 0; + break; + } + + // External + case 0x54: { + env->Status_Set_For_Model_output.External = 0; + break; + } + + // EMS + case 0x55: { + env->Status_Set_For_Model_output.EMS = 0; + break; + } + + // Ionizer_Aroma + case 0x56: { + env->Status_Set_For_Model_output.Ionizer_Aroma = 0; + break; + } + + // Duct Select + case 0x79: { + env->Status_Set_For_Model_output.Duct_Select = 0; + break; + } + + } + + } + + + + return 4; } @@ -719,38 +785,7 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { } } -/* - if (dataIdentifier_hi == 0xF1) { - if (uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].data != NULL) { - - - if (!isSecurityAccessDenied(env, uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].isPermissionSession)) { - return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_conditionsNotCorrect); - } - - if ((uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].isSecurity) && (!env->SA.stateSecurityAccess)) { - return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_securityAccessDenied); - } - - uint16_t size = uds_IoDataByIdentifier_2F_com_F1[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_F1[dataIdentifier_lo].data, &env->data->data[3], size); - - return 4; - } - - } -*/ return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange); } // конец --------------------------- Управление --------------------------------------------------------- @@ -1779,7 +1814,8 @@ void CanUdsInput_Set_Model(tCanUds *env) { countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Actuator_DoorsActuator); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, &env->Status_Sensor_For_Model_input, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, + &env->Status_Sensor_For_Model_input, 0, 0); } countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Tgt); @@ -1819,29 +1855,34 @@ void CanUdsInput_Set_Model(tCanUds *env) { countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Ionizer_Aroma); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Ionizer_Aroma, &env->Status_Ionizer_Aroma_For_Model_input, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Ionizer_Aroma, + &env->Status_Ionizer_Aroma_For_Model_input, 0, 0); } countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Select); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_input, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_input, 0, + 0); } } // Это на вход UDS static void CanUdsInput_Get_Model(tCanUds *env) { - osStatus_t status = osMessageQueueGet(env->queue_input_get_Status_Sensor, &env->Status_Sensor_For_Model_input, 0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_Actuator_DoorsActuator, &env->Status_Sensor_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_External, &env->Status_External_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_Ionizer_Aroma, &env->Status_Ionizer_Aroma_For_Model_input,0, 0); - status = osMessageQueueGet(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_input,0, 0); + osStatus_t status = osMessageQueueGet(env->queue_input_get_Status_Sensor, &env->Status_Sensor_For_Model_input, 0, + 0); + status = osMessageQueueGet(env->queue_input_get_Status_Actuator_DoorsActuator, &env->Status_Sensor_For_Model_input, + 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_External, &env->Status_External_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_input, 0, 0); + status = osMessageQueueGet(env->queue_input_get_Status_Ionizer_Aroma, &env->Status_Ionizer_Aroma_For_Model_input, 0, + 0); + status = osMessageQueueGet(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_input, 0, 0); //---------------------- tStatus_Sensor Status_Sensor; -------------------------------------------------------------- @@ -2066,16 +2107,19 @@ void CanUdsOutput_Set_Model(tCanUds *env) { osStatus_t status = osMessageQueuePut(env->queue_input_get_Status_Sensor, &env->Status_Set_For_Model_output, 0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, &env->Status_Actuator_DoorsActuator_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_External, &env->Status_External_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_Ionizer_Aroma, &env->Status_Ionizer_Aroma_For_Model_output,0, 0); - status = osMessageQueuePut(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_output,0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, + &env->Status_Actuator_DoorsActuator_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_External, &env->Status_External_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Ionizer_Aroma, &env->Status_Ionizer_Aroma_For_Model_output, + 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_output, 0, + 0); } @@ -2481,7 +2525,8 @@ void CanUds_Init( env->queue_output_set_Status_Set = osMessageQueueNew(1, sizeof(tStatus_Set_For_Model), NULL); - env->queue_output_set_Status_Actuator_DoorsActuator = osMessageQueueNew(1, sizeof(tStatus_Actuator_For_Model), NULL); + env->queue_output_set_Status_Actuator_DoorsActuator = osMessageQueueNew(1, sizeof(tStatus_Actuator_For_Model), + NULL); env->queue_output_set_Status_Duct_Tgt = osMessageQueueNew(1, sizeof(tStatus_Duct_Tgt_For_Model), NULL); env->queue_output_set_Status_Eva_Tgt = osMessageQueueNew(1, sizeof(tStatus_Eva_Tgt_For_Model), NULL); env->queue_output_set_Status_IO = osMessageQueueNew(1, sizeof(tStatus_IO_For_Model), NULL);