diff --git a/CanUds.c b/CanUds.c index f2fbd6d..5870a18 100644 --- a/CanUds.c +++ b/CanUds.c @@ -49,6 +49,602 @@ extern tStatus_Duct_Select_For_Model model_Status_Duct_Select_For_Model_output; extern uint32_t generate_key(uint32_t seed); +//начало ---------------------------------------------------------------------------------------------------------------------- +//начало -----------------------------------------------ОЧРЕДИ----------------------------------------------------------------- +//начало ---------------------------------------------------------------------------------------------------------------------- + +static uint16_t getActProc(uint16_t maxPos, uint16_t pos) { + + uint16_t proc; + + if (maxPos > 0) { + proc = (pos * 1000) / maxPos; + } else { + proc = 0; + } + + if (proc > 1000) { + proc = 1000; + } + + return proc; +} + +// Тут данные должны быть с модели &env->Status_Sensor_For_Model_input и т.д. +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, &rtY.Status_Sensort_model_IO, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Actuator_DoorsActuator); + if (countQueue_space) { + + + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Def = getActProc( + rtY.Status_Actuator_model_IO.Motor_Def, Actuator_Ch0_Status_Model.in_CPOS_ALL[0]); + +// LoggerFormatInfo(LOGGER, LOG_SIGN, "Motor_Def = %d (max = %d value = %d)", model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Def, rtY.Status_Actuator_model_IO.Motor_Def, Actuator_Ch0_Status_Model.in_CPOS_ALL[0]) + + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_REC = getActProc( + rtY.Status_Actuator_model_IO.Motor_REC, Actuator_Ch0_Status_Model.in_CPOS_ALL[1]); + +// LoggerFormatInfo(LOGGER, LOG_SIGN, "Motor_REC = %d (max = %d value = %d)", model_Status_Actuator_DoorsActuator_For_Model_input.Motor_REC, rtY.Status_Actuator_model_IO.Motor_REC, Actuator_Ch0_Status_Model.in_CPOS_ALL[1]) + + + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_OSA = getActProc( + rtY.Status_Actuator_model_IO.Motor_OSA, Actuator_Ch0_Status_Model.in_CPOS_ALL[2]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Temp1_FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[3]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CFL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_CFL, Actuator_Ch0_Status_Model.in_CPOS_ALL[4]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SFL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_SFL, Actuator_Ch0_Status_Model.in_CPOS_ALL[5]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp2_FL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Temp2_FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[6]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_1FL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Foot_1FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[7]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_2FL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Foot_2FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[8]); + + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Temp1_FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[0]); + +// LoggerFormatInfo(LOGGER, LOG_SIGN, "Motor_Temp1_FR = %d (max = %d value = %d)", model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FR, rtY.Status_Actuator_model_IO.Motor_Temp1_FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[0]) + + + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CFR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_CFR, Actuator_Ch1_Status_Model.in_CPOS_ALL[1]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SFR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_SFR, Actuator_Ch1_Status_Model.in_CPOS_ALL[2]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp2_FR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Temp2_FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[3]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_1FR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Foot_1FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[4]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_2FR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Foot_2FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[5]); + + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp_RR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Temp_RR, Actuator_Ch2_Status_Model.in_CPOS_ALL[0]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp_RL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Temp_RL, Actuator_Ch2_Status_Model.in_CPOS_ALL[1]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SRL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_SRL, Actuator_Ch2_Status_Model.in_CPOS_ALL[2]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_RL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Foot_RL, Actuator_Ch2_Status_Model.in_CPOS_ALL[3]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CRL = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_CRL, Actuator_Ch2_Status_Model.in_CPOS_ALL[4]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CRR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_CRR, Actuator_Ch2_Status_Model.in_CPOS_ALL[5]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_RR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Foot_RR, Actuator_Ch2_Status_Model.in_CPOS_ALL[6]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SRR = getActProc( + rtY.Status_Actuator_model_IO.Motor_Vent_SRR, Actuator_Ch2_Status_Model.in_CPOS_ALL[7]); + model_Status_Actuator_DoorsActuator_For_Model_input.Motor_SealingValve = getActProc( + rtY.Status_Actuator_model_IO.Motor_SealingValve, Actuator_Ch2_Status_Model.in_CPOS_ALL[8]); + + + status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, + &model_Status_Actuator_DoorsActuator_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, &rtY.Status_Duct_Tgt_model_IO, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Eva_Tgt); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &rtY.Status_Eva_Tgt_model_IO, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_IO); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_input_get_Status_IO, &model_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, &model_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, &model_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, &model_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, &model_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, + &model_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, &rtY.Status_Duct_Select_model_IO, 0, + 0); + } +} + +// Это на вход UDS +static void CanUdsInput_Get_Model(tCanUds *env) { + + osStatus_t status = osOK; + +//---------------------- tStatus_Sensor Status_Sensor; -------------------------------------------------------------- + uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Sensor); + + if (countQueue_space == 0) { + + status = osMessageQueueGet(env->queue_input_get_Status_Sensor, &env->Status_Sensor_For_Model_input, + 0, + 0); + + if (status == osOK) { + 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 --------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Actuator_DoorsActuator); + + if (countQueue_space == 0) { + + status = osMessageQueueGet(env->queue_input_get_Status_Actuator_DoorsActuator, + &env->Status_Actuator_DoorsActuator_For_Model_input, + 0, 0); + + if (status == osOK) { + 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 ----------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Tgt); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_input, 0, 0); + + if (status == osOK) { + 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 ------------------------------------------------------------------------------ + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Eva_Tgt); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_input, 0, 0); + + if (status == osOK) { + 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 ----------------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_IO); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_input, 0, 0); + + if (status == osOK) { + + 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 ---------------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Pwm); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_input, 0, 0); + + if (status == osOK) { + 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--------------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_eComp); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_input, 0, 0); + + if (status == osOK) { + + 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------------------------------------------------------------------------------ + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_External); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_External, &env->Status_External_For_Model_input, 0, 0); + + if (status == osOK) { + + statusData.Status_External_FB.CoolingFan = env->Status_External_For_Model_input.CoolingFan; + } + } +//---------------------- Status_EMS----------------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_EMS); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_input, 0, 0); + + if (status == osOK) { + + statusData.Status_EMS_FB.EMS_Chiller_Req = env->Status_EMS_For_Model_input.EMS_Chiller_Req; + } + } +//---------------------- Status_Ionizer_Aroma------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Ionizer_Aroma); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_Ionizer_Aroma, + &env->Status_Ionizer_Aroma_For_Model_input, 0, + 0); + if (status == osOK) { + 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------------------------------------------------------------------------- + countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Select); + + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_input, 0, + 0); + + if (status == osOK) { + 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 +static void CanUdsOutput_Set_Model(tCanUds *env) { + +//---------------------- 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 = osOK; + + uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Set); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Set, &env->Status_Set_For_Model_output, 0, + 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Actuator_DoorsActuator); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Actuator_DoorsActuator, + &env->Status_Actuator_DoorsActuator_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Tgt); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Eva_Tgt); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_output, 0, 0); + } + + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_IO); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_IO, &env->Status_IO_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Pwm); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Pwm, &env->Status_Pwm_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_eComp); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_eComp, &env->Status_eComp_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_External); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_External, &env->Status_External_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_EMS); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_EMS, &env->Status_EMS_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Ionizer_Aroma); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Ionizer_Aroma, + &env->Status_Ionizer_Aroma_For_Model_output, + 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Select); + if (countQueue_space) { + status = osMessageQueuePut(env->queue_output_set_Status_Duct_Select, &env->Status_Duct_Select_For_Model_output, + 0, + 0); + } + +} + + +// Это на вход модели +void CanUdsOutput_Get_Model(tCanUds *env) { + + osStatus_t status = osOK; + + + uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Set); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Set, &model_Status_Set_For_Model_output, 0, + 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Actuator_DoorsActuator); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Actuator_DoorsActuator, + &model_Status_Actuator_DoorsActuator_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Tgt); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Duct_Tgt, &model_Status_Duct_Tgt_For_Model_output, 0, + 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Eva_Tgt); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Eva_Tgt, &model_Status_Eva_Tgt_For_Model_output, 0, 0); + } + + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_IO); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_IO, &model_Status_IO_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Pwm); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Pwm, &model_Status_Pwm_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_eComp); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_eComp, &model_Status_eComp_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_External); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_External, &model_Status_External_For_Model_output, 0, + 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_EMS); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_EMS, &model_Status_EMS_For_Model_output, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Ionizer_Aroma); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Ionizer_Aroma, + &model_Status_Ionizer_Aroma_For_Model_output, + 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Select); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_output_set_Status_Duct_Select, &model_Status_Duct_Select_For_Model_output, + 0, + 0); + } + +} + + + +//конец ---------------------------------------------------------------------------------------------------------------------- +//конец -----------------------------------------------ОЧРЕДИ----------------------------------------------------------------- +//конец ---------------------------------------------------------------------------------------------------------------------- + +static void setDefaultSecurityAccess(tCanUds *env) { + env->SA.requestSequenceRequestSeed = false; + env->SA.stateSecurityAccess = false; + env->SA.counter_max_attempts_default = 0; + env->SA.time_counter_max_attempts_default = 0; +} + +static void setDefaultValue(tCanUds *env) { + +#if (LOG_UDS == 1) + LoggerFormatInfo(LOGGER, LOG_SIGN, "Resetting the session to default: %d", + UDS_session_defaultSession) +#endif + setDefaultSecurityAccess(env); + set_CCU_Mute(env->canSpamTransmitter, false); + set_DBG_CCU_Mute(env->canSpamDebugTransmitter, false); + set_NoBitsDTC(env->Diagnostic, false); + memset(&env->Status_Set_For_Model_output, 0, sizeof(tStatus_Set_For_Model)); +} + + + static char strPrintfDebug_UDS[80]; static void PrintfDebug(uint8_t *data, uint8_t dlc) { @@ -257,12 +853,6 @@ void SendUpdatePendingFlashClear(void *env) { } -static void setDefaultSecurityAccess(tCanUds *env) { - env->SA.requestSequenceRequestSeed = false; - env->SA.stateSecurityAccess = false; - env->SA.counter_max_attempts_default = 0; - env->SA.time_counter_max_attempts_default = 0; -} uint16_t setResponseError(tCanUds *env, eUdsServices service, eUdsResponseError error) { env->dataResponse[0] = 0x7F; @@ -327,7 +917,8 @@ static uint16_t DiagnosticSessionControl_10(tCanUds *env) { env->currentSession = com->sub_function; - setDefaultSecurityAccess(env); + //setDefaultSecurityAccess(env); + setDefaultValue(env); statusData.Status_Active_Diagnostic_Session.Active_Diagnostic_Session = env->currentSession; } @@ -544,6 +1135,20 @@ static uint16_t WriteDataByIdentifier_2E(tCanUds *env) { // начало --------------------------- Управление --------------------------------------------------------- // начало --------------------------- Управление --------------------------------------------------------- // начало --------------------------- Управление --------------------------------------------------------- +static void GetUpdateQueueIO(tCanUds *env) { + + setResponseErrorPending(env, UDS_InputOutputControlByIdentifier, UDS_error_requestCorrectlyReceived_ResponsePending); + + for (uint8_t i = 0; i < 15; ++i) { + CanUdsOutput_Set_Model(env); + CanUdsInput_Get_Model(env); + SystemDelayMs(10); + } + + +} + + static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { if (env->data->len < 4) { @@ -585,12 +1190,13 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { env->dataResponse[3] = env->data->data[3]; if (env->data->data[3] == UDS_io_shortTermAdjustment) { +// memcpy(&env->dataResponse[4], &env->data->data[4], size); - 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 (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)) { @@ -600,12 +1206,15 @@ 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; + uint8_t *pSet = (uint8_t * ) & env->Status_Set_For_Model_output; pSet[dataIdentifier_lo - 0x60] = 1; memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data->data[4], size); + GetUpdateQueueIO(env); + memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[dataIdentifier_lo].data, size); + return size + 4; } else { @@ -660,11 +1269,13 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { case 0x53: { tStatus_eComp *eComp = (tStatus_eComp *) &env->data->data[4]; - if ((eComp->eComp_Statue_Request > 1) || (eComp->LowTempValve > 1)) { + if ((eComp->eComp_Statue_Request > 1) || (eComp->LowTempValve > 1) || + ((eComp->Pwm_Front * 50) > 8500)) { return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange); } + env->Status_Set_For_Model_output.eComp = 1; break; @@ -733,16 +1344,29 @@ 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 { + GetUpdateQueueIO(env); + memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[dataIdentifier_lo].data, size); + return size + 4; + + } else { // ВОЗВРАТ УПРАВЛЕНИЯ + + // 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)) { - uint8_t *pSet = (uint8_t *) &env->Status_Set_For_Model_output; + uint8_t *pSet = (uint8_t * ) & env->Status_Set_For_Model_output; pSet[dataIdentifier_lo - 0x60] = 0; - return 4; + + GetUpdateQueueIO(env); + memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[dataIdentifier_lo].data, size); + + return size + 4; } else { @@ -800,12 +1424,15 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) { } + GetUpdateQueueIO(env); + memcpy(&env->dataResponse[4], uds_ReadDataByIdentifier_22_com_CF[dataIdentifier_lo].data, size); - return 4; + return size + 4; } - return 4; + return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange); + //return 4; } } @@ -1300,7 +1927,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; @@ -1312,7 +1939,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; @@ -1338,7 +1965,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; @@ -1373,6 +2000,7 @@ static uint16_t vUDS_routine_eComp_Initialize(tCanUds *env, eUdsRoutineControlTy return 4 + 1; } +extern void FirmwareStopThread(); static uint16_t Routine_Control_31(tCanUds *env) { @@ -1405,6 +2033,7 @@ static uint16_t Routine_Control_31(tCanUds *env) { return setResponseError(env, UDS_RoutineControl, UDS_error_conditionsNotCorrect); } + FirmwareStopThread(); // if (!env->SA.stateSecurityAccess) { // return setResponseError(env, UDS_RoutineControl, UDS_error_securityAccessDenied); // } @@ -1828,531 +2457,6 @@ static uint16_t RequestTransferExit_37(tCanUds *env) { // конец --------------------------- RequestTransferExit --------------------------------------------------------- // конец --------------------------- RequestTransferExit --------------------------------------------------------- -static uint16_t getActProc(uint16_t maxPos, uint16_t pos) { - - uint16_t proc; - - if (maxPos > 0) { - proc = (pos * 1000) / maxPos; - } else { - proc = 0; - } - - return proc; -} - -// Тут данные должны быть с модели &env->Status_Sensor_For_Model_input и т.д. -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, &rtY.Status_Sensort_model_IO, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Actuator_DoorsActuator); - if (countQueue_space) { - - - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Def = getActProc(rtY.Status_Actuator_model_IO.Motor_Def, Actuator_Ch0_Status_Model.in_CPOS_ALL[0]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_REC = getActProc(rtY.Status_Actuator_model_IO.Motor_REC, Actuator_Ch0_Status_Model.in_CPOS_ALL[1]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_OSA = getActProc(rtY.Status_Actuator_model_IO.Motor_OSA, Actuator_Ch0_Status_Model.in_CPOS_ALL[2]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FL = getActProc(rtY.Status_Actuator_model_IO.Motor_Temp1_FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[3]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CFL = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_CFL, Actuator_Ch0_Status_Model.in_CPOS_ALL[4]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SFL = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_SFL, Actuator_Ch0_Status_Model.in_CPOS_ALL[5]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp2_FL = getActProc(rtY.Status_Actuator_model_IO.Motor_Temp2_FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[6]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_1FL = getActProc(rtY.Status_Actuator_model_IO.Motor_Foot_1FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[7]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_2FL = getActProc(rtY.Status_Actuator_model_IO.Motor_Foot_2FL, Actuator_Ch0_Status_Model.in_CPOS_ALL[8]); - - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp1_FR = getActProc(rtY.Status_Actuator_model_IO.Motor_Temp1_FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[0]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CFR = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_CFR, Actuator_Ch1_Status_Model.in_CPOS_ALL[1]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SFR = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_SFR, Actuator_Ch1_Status_Model.in_CPOS_ALL[2]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp2_FR = getActProc(rtY.Status_Actuator_model_IO.Motor_Temp2_FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[3]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_1FR = getActProc(rtY.Status_Actuator_model_IO.Motor_Foot_1FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[4]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_2FR = getActProc(rtY.Status_Actuator_model_IO.Motor_Foot_2FR, Actuator_Ch1_Status_Model.in_CPOS_ALL[5]); - - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp_RR = getActProc(rtY.Status_Actuator_model_IO.Motor_Temp_RR, Actuator_Ch2_Status_Model.in_CPOS_ALL[0]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Temp_RL = getActProc(rtY.Status_Actuator_model_IO.Motor_Temp_RL, Actuator_Ch2_Status_Model.in_CPOS_ALL[1]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SRL = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_SRL, Actuator_Ch2_Status_Model.in_CPOS_ALL[2]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_RL = getActProc(rtY.Status_Actuator_model_IO.Motor_Foot_RL, Actuator_Ch2_Status_Model.in_CPOS_ALL[3]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CRL = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_CRL, Actuator_Ch2_Status_Model.in_CPOS_ALL[4]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_CRR = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_CRR, Actuator_Ch2_Status_Model.in_CPOS_ALL[5]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Foot_RR = getActProc(rtY.Status_Actuator_model_IO.Motor_Foot_RR, Actuator_Ch2_Status_Model.in_CPOS_ALL[6]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_Vent_SRR = getActProc(rtY.Status_Actuator_model_IO.Motor_Vent_SRR, Actuator_Ch2_Status_Model.in_CPOS_ALL[7]); - model_Status_Actuator_DoorsActuator_For_Model_input.Motor_SealingValve = getActProc(rtY.Status_Actuator_model_IO.Motor_SealingValve, Actuator_Ch2_Status_Model.in_CPOS_ALL[8]); - - - status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, - &model_Status_Actuator_DoorsActuator_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, &rtY.Status_Duct_Tgt_model_IO, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Eva_Tgt); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &rtY.Status_Eva_Tgt_model_IO, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_IO); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_IO, &model_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, &model_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, &model_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, &model_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, &model_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, - &model_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, &rtY.Status_Duct_Select_model_IO, 0, - 0); - } -} - -// Это на вход UDS -static void CanUdsInput_Get_Model(tCanUds *env) { - - osStatus_t status = osOK; - -//---------------------- tStatus_Sensor Status_Sensor; -------------------------------------------------------------- - uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Sensor); - - if (countQueue_space == 0) { - - status = osMessageQueueGet(env->queue_input_get_Status_Sensor, &env->Status_Sensor_For_Model_input, - 0, - 0); - - if (status == osOK) { - 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 --------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Actuator_DoorsActuator); - - if (countQueue_space == 0) { - - status = osMessageQueueGet(env->queue_input_get_Status_Actuator_DoorsActuator, - &env->Status_Actuator_DoorsActuator_For_Model_input, - 0, 0); - - if (status == osOK) { - 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 ----------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Tgt); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_input, 0, 0); - - if (status == osOK) { - 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 ------------------------------------------------------------------------------ - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Eva_Tgt); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_input, 0, 0); - - if (status == osOK) { - 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 ----------------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_IO); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_input, 0, 0); - - if (status == osOK) { - - 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 ---------------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Pwm); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_input, 0, 0); - - if (status == osOK) { - 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--------------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_eComp); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_input, 0, 0); - - if (status == osOK) { - - 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------------------------------------------------------------------------------ - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_External); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_External, &env->Status_External_For_Model_input, 0, 0); - - if (status == osOK) { - - statusData.Status_External_FB.CoolingFan = env->Status_External_For_Model_input.CoolingFan; - } - } -//---------------------- Status_EMS----------------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_EMS); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_input, 0, 0); - - if (status == osOK) { - - statusData.Status_EMS_FB.EMS_Chiller_Req = env->Status_EMS_For_Model_input.EMS_Chiller_Req; - } - } -//---------------------- Status_Ionizer_Aroma------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Ionizer_Aroma); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_Ionizer_Aroma, - &env->Status_Ionizer_Aroma_For_Model_input, 0, - 0); - if (status == osOK) { - 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------------------------------------------------------------------------- - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Select); - - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_input, 0, - 0); - - if (status == osOK) { - 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 -static void CanUdsOutput_Set_Model(tCanUds *env) { - -//---------------------- 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 = osOK; - - uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Set); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Set, &env->Status_Set_For_Model_output, 0, - 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Actuator_DoorsActuator); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Actuator_DoorsActuator, - &env->Status_Actuator_DoorsActuator_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Tgt); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Eva_Tgt); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_output, 0, 0); - } - - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_IO); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_IO, &env->Status_IO_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Pwm); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Pwm, &env->Status_Pwm_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_eComp); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_eComp, &env->Status_eComp_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_External); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_External, &env->Status_External_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_EMS); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_EMS, &env->Status_EMS_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Ionizer_Aroma); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Ionizer_Aroma, - &env->Status_Ionizer_Aroma_For_Model_output, - 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Select); - if (countQueue_space) { - status = osMessageQueuePut(env->queue_output_set_Status_Duct_Select, &env->Status_Duct_Select_For_Model_output, - 0, - 0); - } - -} - - -// Это на вход модели -void CanUdsOutput_Get_Model(tCanUds *env) { - - osStatus_t status = osOK; - - - uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Set); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Set, &model_Status_Set_For_Model_output, 0, - 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Actuator_DoorsActuator); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Actuator_DoorsActuator, - &model_Status_Actuator_DoorsActuator_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Tgt); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Duct_Tgt, &model_Status_Duct_Tgt_For_Model_output, 0, - 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Eva_Tgt); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Eva_Tgt, &model_Status_Eva_Tgt_For_Model_output, 0, 0); - } - - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_IO); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_IO, &model_Status_IO_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Pwm); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Pwm, &model_Status_Pwm_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_eComp); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_eComp, &model_Status_eComp_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_External); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_External, &model_Status_External_For_Model_output, 0, - 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_EMS); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_EMS, &model_Status_EMS_For_Model_output, 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Ionizer_Aroma); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Ionizer_Aroma, - &model_Status_Ionizer_Aroma_For_Model_output, - 0, 0); - } - - countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Select); - if (countQueue_space == 0) { - status = osMessageQueueGet(env->queue_output_set_Status_Duct_Select, &model_Status_Duct_Select_For_Model_output, - 0, - 0); - } - -} - static const eUds_com uds_com[256] = { {NULL, "", false}, {NULL, "", false}, @@ -2685,19 +2789,10 @@ void CanUds(tCanUds *env) { (env->currentSessionTesterPresentTimeout < SystemGetMs())) { env->currentSessionTesterPresentTimeout = 0; -#if (LOG_UDS == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Resetting the session to default: %d", - UDS_session_defaultSession) -#endif - setDefaultSecurityAccess(env); - set_CCU_Mute(env->canSpamTransmitter, false); - set_DBG_CCU_Mute(env->canSpamDebugTransmitter, false); - set_NoBitsDTC(env->Diagnostic, false); + setDefaultValue(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)); - } CanUdsOutput_Set_Model(env); @@ -2707,7 +2802,7 @@ void CanUds(tCanUds *env) { LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error CanUds"); } - SystemDelayMs(1000); + SystemDelayMs(100); } }