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

This commit is contained in:
cfif 2026-07-02 11:26:55 +03:00
parent 6987693757
commit a173d70e34
2 changed files with 447 additions and 15 deletions

389
CanUds.c
View File

@ -3,7 +3,6 @@
//
#include "CanUds.h"
#include "CanPorts.h"
#include "StatusData.h"
#include "memory.h"
#include "TesterPresent_3e.h"
#include "DiagnosticSessionControl_10.h"
@ -561,6 +560,12 @@ 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) {
// Motor_Def...MotorSealingValve (percent)
@ -571,7 +576,12 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange);
}
uint8_t *pSet = (uint8_t *) &env->Status_Set_For_Model_output;
pSet[dataIdentifier_lo - 0x60 - 1] = 1;
memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data->data[4], size);
return size + 4;
} else {
@ -579,6 +589,7 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
// Doors Actuator
case 0x50: {
for (uint8_t i = 0; i < 24; i += 2) {
uint16_t percent = (env->data->data[4 + i] << 8) | env->data->data[5 + 1 + i];
if (percent > 1000) {
@ -586,6 +597,9 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
}
memset(&env->Status_Set_For_Model_output, 1, 24);
break;
}
@ -598,6 +612,9 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
}
env->Status_Set_For_Model_output.IO = 1;
break;
}
@ -610,6 +627,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
env->Status_Set_For_Model_output.Pwm = 1;
break;
}
@ -622,6 +641,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
env->Status_Set_For_Model_output.eComp = 1;
break;
}
@ -634,6 +655,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
env->Status_Set_For_Model_output.External = 1;
break;
}
@ -646,6 +669,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
env->Status_Set_For_Model_output.EMS = 1;
break;
}
@ -658,6 +683,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
env->Status_Set_For_Model_output.Ionizer_Aroma = 1;
break;
}
@ -671,6 +698,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
UDS_error_requestOutOfRange);
}
env->Status_Set_For_Model_output.Duct_Select = 1;
break;
}
@ -680,6 +709,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data->data[4], size);
return size + 4;
} else {
return size + 4;
}
@ -1210,7 +1241,7 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
SIZE_HEX_BlockMain - 4,
SendUpdatePendingCrc, env, 200);
uint32_t crc32_file = (*(uint32_t * )(ADR_HEX_Mapped_BlockMain + SIZE_HEX_BlockMain - 4));
uint32_t crc32_file = (*(uint32_t *) (ADR_HEX_Mapped_BlockMain + SIZE_HEX_BlockMain - 4));
if (crc32_calc != crc32_file) {
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
@ -1222,7 +1253,7 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
crc32_calc = UdsCrc32Update_Hardware(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockCalib, SIZE_HEX_BlockCalib - 4,
SendUpdatePendingCrc, env, 200);
crc32_file = (*(uint32_t * )(ADR_HEX_Mapped_BlockCalib + SIZE_HEX_BlockCalib - 4));
crc32_file = (*(uint32_t *) (ADR_HEX_Mapped_BlockCalib + SIZE_HEX_BlockCalib - 4));
if (crc32_calc != crc32_file) {
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
@ -1248,7 +1279,7 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
return 4 + 1;
}
size_t size = D_sInternalFlashPage_Write(0x04000000, 0, (uint8_t * ) & NumberBank, 8);
size_t size = D_sInternalFlashPage_Write(0x04000000, 0, (uint8_t *) &NumberBank, 8);
if (size != 8) {
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
@ -1738,6 +1769,315 @@ static uint16_t RequestTransferExit_37(tCanUds *env) {
// конец --------------------------- RequestTransferExit ---------------------------------------------------------
// конец --------------------------- RequestTransferExit ---------------------------------------------------------
void CanUdsInput_Set_Model(tCanUds *env) {
osStatus_t status = osOK;
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Sensor);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_Sensor, &env->Status_Sensor_For_Model_input, 0, 0);
}
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);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Tgt);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_input, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Eva_Tgt);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_input, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_IO);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_input, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Pwm);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_input, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_eComp);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_input, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_External);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_External, &env->Status_External_For_Model_input, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_EMS);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_input, 0, 0);
}
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);
}
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);
}
}
// Это на вход 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);
//---------------------- tStatus_Sensor Status_Sensor; --------------------------------------------------------------
statusData.Status_Sensor.Ignition = env->Status_Sensor_For_Model_input.Ignition;
statusData.Status_Sensor.Battery = env->Status_Sensor_For_Model_input.Battery;
statusData.Status_Sensor.AMB = env->Status_Sensor_For_Model_input.AMB;
statusData.Status_Sensor.Incar_FL = env->Status_Sensor_For_Model_input.Incar_FL;
statusData.Status_Sensor.Incar_FR = env->Status_Sensor_For_Model_input.Incar_FR;
statusData.Status_Sensor.Incar_RL = env->Status_Sensor_For_Model_input.Incar_RL;
statusData.Status_Sensor.Incar_RR = env->Status_Sensor_For_Model_input.Incar_RR;
statusData.Status_Sensor.Eva_F = env->Status_Sensor_For_Model_input.Eva_F;
statusData.Status_Sensor.Eva_R = env->Status_Sensor_For_Model_input.Eva_R;
statusData.Status_Sensor.Pressure = env->Status_Sensor_For_Model_input.Pressure;
statusData.Status_Sensor.Duct_FL_Upper = env->Status_Sensor_For_Model_input.Duct_FL_Upper;
statusData.Status_Sensor.Duct_FL_Lower = env->Status_Sensor_For_Model_input.Duct_FL_Lower;
statusData.Status_Sensor.Duct_FR_Upper = env->Status_Sensor_For_Model_input.Duct_FR_Upper;
statusData.Status_Sensor.Duct_FR_Lower = env->Status_Sensor_For_Model_input.Duct_FR_Lower;
statusData.Status_Sensor.Duct_RL = env->Status_Sensor_For_Model_input.Duct_RL;
statusData.Status_Sensor.Duct_RR = env->Status_Sensor_For_Model_input.Duct_RR;
statusData.Status_Sensor.Duct_Side_FL = env->Status_Sensor_For_Model_input.Duct_Side_FL;
statusData.Status_Sensor.Duct_Side_FR = env->Status_Sensor_For_Model_input.Duct_Side_FR;
statusData.Status_Sensor.Duct_Side_RL = env->Status_Sensor_For_Model_input.Duct_Side_RL;
statusData.Status_Sensor.Duct_Side_RR = env->Status_Sensor_For_Model_input.Duct_Side_RR;
statusData.Status_Sensor.AQS = env->Status_Sensor_For_Model_input.AQS;
//---------------------- Status_Actuator_DoorsActuator ---------------------------------------------------------------
statusData.Status_Actuator_DoorsActuator_FB.Motor_Def = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Def;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_SFL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SFL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_CFL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CFL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Foot_1FL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_1FL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Foot_2FL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_2FL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_CFR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CFR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_SFR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SFR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Foot_1FR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_1FR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Foot_2FR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_2FR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_SRL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SRL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_CRL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CRL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Foot_RL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_RL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_CRR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CRR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Vent_SRR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SRR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Foot_RR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_RR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Temp1_FL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Temp2_FL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp2_FL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Temp1_FR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Temp2_FR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp2_FR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Temp_RL = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp_RL;
statusData.Status_Actuator_DoorsActuator_FB.Motor_Temp_RR = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp_RR;
statusData.Status_Actuator_DoorsActuator_FB.Motor_REC = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_REC;
statusData.Status_Actuator_DoorsActuator_FB.Motor_OSA = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_OSA;
statusData.Status_Actuator_DoorsActuator_FB.Motor_SealingValve = env->Status_Actuator_DoorsActuator_For_Model_input.Motor_SealingValve;
//---------------------- Status_Duct_Tgt -----------------------------------------------------------------------------
statusData.Status_Duct_Tgt_FB.DuctTgt_Vent_FL = env->Status_Duct_Tgt_For_Model_input.DuctTgt_Vent_FL;
statusData.Status_Duct_Tgt_FB.DuctTgt_Foot_FL = env->Status_Duct_Tgt_For_Model_input.DuctTgt_Foot_FL;
statusData.Status_Duct_Tgt_FB.DuctTgt_Vent_FR = env->Status_Duct_Tgt_For_Model_input.DuctTgt_Vent_FR;
statusData.Status_Duct_Tgt_FB.DuctTgt_Foot_FR = env->Status_Duct_Tgt_For_Model_input.DuctTgt_Foot_FR;
statusData.Status_Duct_Tgt_FB.DuctTgt_RL = env->Status_Duct_Tgt_For_Model_input.DuctTgt_RL;
statusData.Status_Duct_Tgt_FB.DuctTgt_RR = env->Status_Duct_Tgt_For_Model_input.DuctTgt_RR;
//---------------------- Status_Eva_Tgt ------------------------------------------------------------------------------
statusData.Status_Eva_Tgt_FB.EvaTgt_F = env->Status_Eva_Tgt_For_Model_input.EvaTgt_F;
statusData.Status_Eva_Tgt_FB.EvaTgt_R = env->Status_Eva_Tgt_For_Model_input.EvaTgt_R;
//---------------------- Status_IO -----------------------------------------------------------------------------------
statusData.Status_IO_FB._2_Way_Valve = env->Status_IO_For_Model_input._2_Way_Valve;
statusData.Status_IO_FB.IncarMotor_Front = env->Status_IO_For_Model_input.IncarMotor_Front;
statusData.Status_IO_FB.IncarMotor_Rear = env->Status_IO_For_Model_input.IncarMotor_Rear;
statusData.Status_IO_FB.ShutOff_Chiller = env->Status_IO_For_Model_input.ShutOff_Chiller;
statusData.Status_IO_FB.ShutOff_Front = env->Status_IO_For_Model_input.ShutOff_Front;
statusData.Status_IO_FB.ShutOff_Rear = env->Status_IO_For_Model_input.ShutOff_Rear;
statusData.Status_IO_FB.PTC_1 = env->Status_IO_For_Model_input.PTC_1;
statusData.Status_IO_FB.PTC_2 = env->Status_IO_For_Model_input.PTC_2;
//---------------------- Status_Pwm ----------------------------------------------------------------------------------
statusData.Status_Pwm_FB.Pwm_Front = env->Status_Pwm_For_Model_input.Pwm_Front;
statusData.Status_Pwm_FB.Pwm_Rear = env->Status_Pwm_For_Model_input.Pwm_Rear;
//---------------------- Status_eComp---------------------------------------------------------------------------------
statusData.Status_eComp_FB.eComp_Statue_Request = env->Status_eComp_For_Model_input.eComp_Statue_Request;
statusData.Status_eComp_FB.Pwm_Front = env->Status_eComp_For_Model_input.Pwm_Front;
statusData.Status_eComp_FB.LowTempValve = env->Status_eComp_For_Model_input.LowTempValve;
//---------------------- Status_External------------------------------------------------------------------------------
statusData.Status_External_FB.CoolingFan = env->Status_External_For_Model_input.CoolingFan;
//---------------------- Status_EMS-----------------------------------------------------------------------------------
statusData.Status_EMS_FB.EMS_Chiller_Req = env->Status_EMS_For_Model_input.EMS_Chiller_Req;
//---------------------- Status_Ionizer_Aroma-------------------------------------------------------------------------
statusData.Status_Ionizer_Aroma_FB.Ionizer = env->Status_Ionizer_Aroma_For_Model_input.Ionizer;
statusData.Status_Ionizer_Aroma_FB.AromatizationIntensivity = env->Status_Ionizer_Aroma_For_Model_input.AromatizationIntensivity;
//---------------------- Status_Duct_Select-------------------------------------------------------------------------
statusData.Status_Duct_Select_FB.Duct_FL = env->Status_Duct_Select_For_Model_input.Duct_FL;
statusData.Status_Duct_Select_FB.Duct_FR = env->Status_Duct_Select_For_Model_input.Duct_FR;
statusData.Status_Duct_Select_FB.Duct_RL = env->Status_Duct_Select_For_Model_input.Duct_RL;
statusData.Status_Duct_Select_FB.Duct_RR = env->Status_Duct_Select_For_Model_input.Duct_RR;
}
// Это с выхода UDS
void CanUdsOutput_Set_Model(tCanUds *env) {
//---------------------- Status_Set; --------------------------------------------------------------------------------
/*
env->Status_Set_For_Model_output.Motor_Def;
env->Status_Set_For_Model_output.Motor_Vent_SFL;
env->Status_Set_For_Model_output.Motor_Vent_CFL;
env->Status_Set_For_Model_output.Motor_Foot_1FL;
env->Status_Set_For_Model_output.Motor_Foot_2FL;
env->Status_Set_For_Model_output.Motor_Vent_CFR;
env->Status_Set_For_Model_output.Motor_Vent_SFR;
env->Status_Set_For_Model_output.Motor_Foot_1FR;
env->Status_Set_For_Model_output.Motor_Foot_2FR;
env->Status_Set_For_Model_output.Motor_Vent_SRL;
env->Status_Set_For_Model_output.Motor_Vent_CRL;
env->Status_Set_For_Model_output.Motor_Foot_RL;
env->Status_Set_For_Model_output.Motor_Vent_CRR;
env->Status_Set_For_Model_output.Motor_Vent_SRR;
env->Status_Set_For_Model_output.Motor_Foot_RR;
env->Status_Set_For_Model_output.Motor_Temp1_FL;
env->Status_Set_For_Model_output.Motor_Temp2_FL;
env->Status_Set_For_Model_output.Motor_Temp1_FR;
env->Status_Set_For_Model_output.Motor_Temp2_FR;
env->Status_Set_For_Model_output.Motor_Temp_RL;
env->Status_Set_For_Model_output.Motor_Temp_RR;
env->Status_Set_For_Model_output.Motor_REC;
env->Status_Set_For_Model_output.Motor_OSA;
env->Status_Set_For_Model_output.Motor_SealingValve;
env->Status_Set_For_Model_output.IO;
env->Status_Set_For_Model_output.Pwm;
env->Status_Set_For_Model_output.eComp;
env->Status_Set_For_Model_output.External;
env->Status_Set_For_Model_output.EMS;
env->Status_Set_For_Model_output.Ionizer_Aroma;
env->Status_Set_For_Model_output.Duct_Select;
*/
//---------------------- Status_Actuator_DoorsActuator ---------------------------------------------------------------
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Def = statusData.Status_Actuator_DoorsActuator.Motor_Def;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_SFL = statusData.Status_Actuator_DoorsActuator.Motor_Vent_SFL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_CFL = statusData.Status_Actuator_DoorsActuator.Motor_Vent_CFL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Foot_1FL = statusData.Status_Actuator_DoorsActuator.Motor_Foot_1FL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Foot_2FL = statusData.Status_Actuator_DoorsActuator.Motor_Foot_2FL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_CFR = statusData.Status_Actuator_DoorsActuator.Motor_Vent_CFR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_SFR = statusData.Status_Actuator_DoorsActuator.Motor_Vent_SFR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Foot_1FR = statusData.Status_Actuator_DoorsActuator.Motor_Foot_1FR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Foot_2FR = statusData.Status_Actuator_DoorsActuator.Motor_Foot_2FR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_SRL = statusData.Status_Actuator_DoorsActuator.Motor_Vent_SRL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_CRL = statusData.Status_Actuator_DoorsActuator.Motor_Vent_CRL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Foot_RL = statusData.Status_Actuator_DoorsActuator.Motor_Foot_RL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_CRR = statusData.Status_Actuator_DoorsActuator.Motor_Vent_CRR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Vent_SRR = statusData.Status_Actuator_DoorsActuator.Motor_Vent_SRR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Foot_RR = statusData.Status_Actuator_DoorsActuator.Motor_Foot_RR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Temp1_FL = statusData.Status_Actuator_DoorsActuator.Motor_Temp1_FL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Temp2_FL = statusData.Status_Actuator_DoorsActuator.Motor_Temp2_FL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Temp1_FR = statusData.Status_Actuator_DoorsActuator.Motor_Temp1_FR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Temp2_FR = statusData.Status_Actuator_DoorsActuator.Motor_Temp2_FR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Temp_RL = statusData.Status_Actuator_DoorsActuator.Motor_Temp_RL;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_Temp_RR = statusData.Status_Actuator_DoorsActuator.Motor_Temp_RR;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_REC = statusData.Status_Actuator_DoorsActuator.Motor_REC;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_OSA = statusData.Status_Actuator_DoorsActuator.Motor_OSA;
env->Status_Actuator_DoorsActuator_For_Model_output.Motor_SealingValve = statusData.Status_Actuator_DoorsActuator.Motor_SealingValve;
//---------------------- Status_Duct_Tgt -----------------------------------------------------------------------------
env->Status_Duct_Tgt_For_Model_output.DuctTgt_Vent_FL = statusData.Status_Duct_Tgt.DuctTgt_Vent_FL;
env->Status_Duct_Tgt_For_Model_output.DuctTgt_Foot_FL = statusData.Status_Duct_Tgt.DuctTgt_Foot_FL;
env->Status_Duct_Tgt_For_Model_output.DuctTgt_Vent_FR = statusData.Status_Duct_Tgt.DuctTgt_Vent_FR;
env->Status_Duct_Tgt_For_Model_output.DuctTgt_Foot_FR = statusData.Status_Duct_Tgt.DuctTgt_Foot_FR;
env->Status_Duct_Tgt_For_Model_output.DuctTgt_RL = statusData.Status_Duct_Tgt.DuctTgt_RL;
env->Status_Duct_Tgt_For_Model_output.DuctTgt_RR = statusData.Status_Duct_Tgt.DuctTgt_RR;
//---------------------- Status_Eva_Tgt ------------------------------------------------------------------------------
env->Status_Eva_Tgt_For_Model_output.EvaTgt_F = statusData.Status_Eva_Tgt.EvaTgt_F;
env->Status_Eva_Tgt_For_Model_output.EvaTgt_R = statusData.Status_Eva_Tgt.EvaTgt_R;
//---------------------- Status_IO -----------------------------------------------------------------------------------
env->Status_IO_For_Model_output._2_Way_Valve = statusData.Status_IO._2_Way_Valve;
env->Status_IO_For_Model_output.IncarMotor_Front = statusData.Status_IO.IncarMotor_Front;
env->Status_IO_For_Model_output.IncarMotor_Rear = statusData.Status_IO.IncarMotor_Rear;
env->Status_IO_For_Model_output.ShutOff_Chiller = statusData.Status_IO.ShutOff_Chiller;
env->Status_IO_For_Model_output.ShutOff_Front = statusData.Status_IO.ShutOff_Front;
env->Status_IO_For_Model_output.ShutOff_Rear = statusData.Status_IO.ShutOff_Rear;
env->Status_IO_For_Model_output.PTC_1 = statusData.Status_IO.PTC_1;
env->Status_IO_For_Model_output.PTC_2 = statusData.Status_IO.PTC_2;
//---------------------- Status_Pwm ----------------------------------------------------------------------------------
env->Status_Pwm_For_Model_output.Pwm_Front = statusData.Status_Pwm.Pwm_Front;
env->Status_Pwm_For_Model_output.Pwm_Rear = statusData.Status_Pwm.Pwm_Rear;
//---------------------- Status_eComp---------------------------------------------------------------------------------
env->Status_eComp_For_Model_output.eComp_Statue_Request = statusData.Status_eComp.eComp_Statue_Request;
env->Status_eComp_For_Model_output.Pwm_Front = statusData.Status_eComp.Pwm_Front;
env->Status_eComp_For_Model_output.LowTempValve = statusData.Status_eComp.LowTempValve;
//---------------------- Status_External------------------------------------------------------------------------------
env->Status_External_For_Model_output.CoolingFan = statusData.Status_External.CoolingFan;
//---------------------- Status_EMS-----------------------------------------------------------------------------------
env->Status_EMS_For_Model_output.EMS_Chiller_Req = statusData.Status_EMS.EMS_Chiller_Req;
//---------------------- Status_Ionizer_Aroma-------------------------------------------------------------------------
env->Status_Ionizer_Aroma_For_Model_output.Ionizer = statusData.Status_Ionizer_Aroma.Ionizer;
env->Status_Ionizer_Aroma_For_Model_output.AromatizationIntensivity = statusData.Status_Ionizer_Aroma.AromatizationIntensivity;
//---------------------- Status_Duct_Select-------------------------------------------------------------------------
env->Status_Duct_Select_For_Model_output.Duct_FL = statusData.Status_Duct_Select.Duct_FL;
env->Status_Duct_Select_For_Model_output.Duct_FR = statusData.Status_Duct_Select.Duct_FR;
env->Status_Duct_Select_For_Model_output.Duct_RL = statusData.Status_Duct_Select.Duct_RL;
env->Status_Duct_Select_For_Model_output.Duct_RR = statusData.Status_Duct_Select.Duct_RR;
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);
}
static const eUds_com uds_com[256] = {
{NULL, "", false},
@ -2015,6 +2355,9 @@ void ReceivedTP_func(void *arg, tCanTP_data *data) {
sendLogCanUdsHex(env, env->data->data, env->data->len);
LoggerFormatInfo(LOGGER, LOG_SIGN, "> %s [%d] %s", uds_com[com].desc, env->data->len, env->hexString)
#endif
if (osMutexAcquire(env->access, 5000) == osOK) {
uint8_t response_size = uds_com[com].func(env);
if (response_size) {
@ -2035,6 +2378,12 @@ void ReceivedTP_func(void *arg, tCanTP_data *data) {
}
}
osMutexRelease(env->access);
} else {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error ReceivedTP_func");
}
} else {
asm("nop");
}
@ -2053,7 +2402,9 @@ void CanUds(tCanUds *env) {
for (;;) {
if (osMutexAcquire(env->access, 1000) == osOK) {
if (osMutexAcquire(env->access, 5000) == osOK) {
CanUdsInput_Get_Model(env);
// Контроль TesterPresent
if ((env->currentSessionTesterPresentTimeout > 0) &&
@ -2071,6 +2422,8 @@ void CanUds(tCanUds *env) {
env->currentSession = UDS_session_defaultSession;
statusData.Status_Active_Diagnostic_Session.Active_Diagnostic_Session = env->currentSession;
memset(&env->Status_Set_For_Model_output, 0, sizeof(tStatus_Set_For_Model));
}
osMutexRelease(env->access);
@ -2088,6 +2441,7 @@ void CanSerialPortCanUds_Start(tCanUds *env) {
CanSerialPortFrameTp_Start(&env->canSerialPortFrameTp);
}
void CanUds_Init(
tCanUds *env,
tDiagnostic *Diagnostic,
@ -2113,6 +2467,31 @@ void CanUds_Init(
env->access = osMutexNew(NULL);
env->queue_input_get_Status_Sensor = osMessageQueueNew(1, sizeof(tStatus_Sensor_For_Model), NULL);
env->queue_input_get_Status_Actuator_DoorsActuator = osMessageQueueNew(1, sizeof(tStatus_Actuator_For_Model), NULL);
env->queue_input_get_Status_Duct_Tgt = osMessageQueueNew(1, sizeof(tStatus_Duct_Tgt_For_Model), NULL);
env->queue_input_get_Status_Eva_Tgt = osMessageQueueNew(1, sizeof(tStatus_Eva_Tgt_For_Model), NULL);
env->queue_input_get_Status_IO = osMessageQueueNew(1, sizeof(tStatus_IO_For_Model), NULL);
env->queue_input_get_Status_Pwm = osMessageQueueNew(1, sizeof(tStatus_Pwm_For_Model), NULL);
env->queue_input_get_Status_eComp = osMessageQueueNew(1, sizeof(tStatus_eComp_For_Model), NULL);
env->queue_input_get_Status_External = osMessageQueueNew(1, sizeof(tStatus_External_For_Model), NULL);
env->queue_input_get_Status_EMS = osMessageQueueNew(1, sizeof(tStatus_EMS_For_Model), NULL);
env->queue_input_get_Status_Ionizer_Aroma = osMessageQueueNew(1, sizeof(tStatus_Ionizer_Aroma_For_Model), NULL);
env->queue_input_get_Status_Duct_Select = osMessageQueueNew(1, sizeof(tStatus_Duct_Select_For_Model), NULL);
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_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);
env->queue_output_set_Status_Pwm = osMessageQueueNew(1, sizeof(tStatus_Pwm_For_Model), NULL);
env->queue_output_set_Status_eComp = osMessageQueueNew(1, sizeof(tStatus_eComp_For_Model), NULL);
env->queue_output_set_Status_External = osMessageQueueNew(1, sizeof(tStatus_External_For_Model), NULL);
env->queue_output_set_Status_EMS = osMessageQueueNew(1, sizeof(tStatus_EMS_For_Model), NULL);
env->queue_output_set_Status_Ionizer_Aroma = osMessageQueueNew(1, sizeof(tStatus_Ionizer_Aroma_For_Model), NULL);
env->queue_output_set_Status_Duct_Select = osMessageQueueNew(1, sizeof(tStatus_Duct_Select_For_Model), NULL);
setDefaultStatus();
env->filterReqId[0] = Diag_To_CCU_CANID;

View File

@ -11,6 +11,7 @@
#include "CanSpamTransmitter.h"
#include "CanSpamDebugTransmitter.h"
#include "AdcTasks.h"
#include "StatusData.h"
#define LOG_UDS 0
@ -237,6 +238,56 @@ typedef struct {
eUdsServices stateDownload;
tStatus_Sensor_For_Model Status_Sensor_For_Model_input;
tStatus_Actuator_For_Model Status_Actuator_DoorsActuator_For_Model_input;
tStatus_Duct_Tgt_For_Model Status_Duct_Tgt_For_Model_input;
tStatus_Eva_Tgt_For_Model Status_Eva_Tgt_For_Model_input;
tStatus_IO_For_Model Status_IO_For_Model_input;
tStatus_Pwm_For_Model Status_Pwm_For_Model_input;
tStatus_eComp_For_Model Status_eComp_For_Model_input;
tStatus_External_For_Model Status_External_For_Model_input;
tStatus_EMS_For_Model Status_EMS_For_Model_input;
tStatus_Ionizer_Aroma_For_Model Status_Ionizer_Aroma_For_Model_input;
tStatus_Duct_Select_For_Model Status_Duct_Select_For_Model_input;
osMessageQueueId_t queue_input_get_Status_Sensor;
osMessageQueueId_t queue_input_get_Status_Actuator_DoorsActuator;
osMessageQueueId_t queue_input_get_Status_Duct_Tgt;
osMessageQueueId_t queue_input_get_Status_Eva_Tgt;
osMessageQueueId_t queue_input_get_Status_IO;
osMessageQueueId_t queue_input_get_Status_Pwm;
osMessageQueueId_t queue_input_get_Status_eComp;
osMessageQueueId_t queue_input_get_Status_External;
osMessageQueueId_t queue_input_get_Status_EMS;
osMessageQueueId_t queue_input_get_Status_Ionizer_Aroma;
osMessageQueueId_t queue_input_get_Status_Duct_Select;
tStatus_Set_For_Model Status_Set_For_Model_output;
tStatus_Actuator_For_Model Status_Actuator_DoorsActuator_For_Model_output;
tStatus_Duct_Tgt_For_Model Status_Duct_Tgt_For_Model_output;
tStatus_Eva_Tgt_For_Model Status_Eva_Tgt_For_Model_output;
tStatus_IO_For_Model Status_IO_For_Model_output;
tStatus_Pwm_For_Model Status_Pwm_For_Model_output;
tStatus_eComp_For_Model Status_eComp_For_Model_output;
tStatus_External_For_Model Status_External_For_Model_output;
tStatus_EMS_For_Model Status_EMS_For_Model_output;
tStatus_Ionizer_Aroma_For_Model Status_Ionizer_Aroma_For_Model_output;
tStatus_Duct_Select_For_Model Status_Duct_Select_For_Model_output;
osMessageQueueId_t queue_output_set_Status_Set;
osMessageQueueId_t queue_output_set_Status_Actuator_DoorsActuator;
osMessageQueueId_t queue_output_set_Status_Duct_Tgt;
osMessageQueueId_t queue_output_set_Status_Eva_Tgt;
osMessageQueueId_t queue_output_set_Status_IO;
osMessageQueueId_t queue_output_set_Status_Pwm;
osMessageQueueId_t queue_output_set_Status_eComp;
osMessageQueueId_t queue_output_set_Status_External;
osMessageQueueId_t queue_output_set_Status_EMS;
osMessageQueueId_t queue_output_set_Status_Ionizer_Aroma;
osMessageQueueId_t queue_output_set_Status_Duct_Select;
tStaticThreadBlock(384) T_can_Uds;
} tCanUds;
@ -263,4 +314,6 @@ void CanUds_Init(
void CanSerialPortCanUds_Start(tCanUds *env);
void CanUdsOutput_Set_Model(tCanUds *env);
#endif //HVAC_M7_CANUDS_H