Обновление после командировки 02.07.2026 (Внесены изменения для IO)

This commit is contained in:
cfif 2026-07-02 14:35:39 +03:00
parent a173d70e34
commit 7f41f90d47
1 changed files with 109 additions and 64 deletions

173
CanUds.c
View File

@ -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);