diff --git a/CanUds.c b/CanUds.c index 3d9a73f..b1412d0 100644 --- a/CanUds.c +++ b/CanUds.c @@ -20,6 +20,31 @@ #define LOG_SIGN "CAN_UDS" #define LOGGER env->logger +extern tStatus_Sensor_For_Model model_Status_Sensor_For_Model_input; +extern tStatus_Actuator_For_Model model_Status_Actuator_DoorsActuator_For_Model_input; +extern tStatus_Duct_Tgt_For_Model model_Status_Duct_Tgt_For_Model_input; +extern tStatus_Eva_Tgt_For_Model model_Status_Eva_Tgt_For_Model_input; +extern tStatus_IO_For_Model model_Status_IO_For_Model_input; +extern tStatus_Pwm_For_Model model_Status_Pwm_For_Model_input; +extern tStatus_eComp_For_Model model_Status_eComp_For_Model_input; +extern tStatus_External_For_Model model_Status_External_For_Model_input; +extern tStatus_EMS_For_Model model_Status_EMS_For_Model_input; +extern tStatus_Ionizer_Aroma_For_Model model_Status_Ionizer_Aroma_For_Model_input; +extern tStatus_Duct_Select_For_Model model_Status_Duct_Select_For_Model_input; + + +extern tStatus_Set_For_Model model_Status_Set_For_Model_output; +extern tStatus_Actuator_For_Model model_Status_Actuator_DoorsActuator_For_Model_output; +extern tStatus_Duct_Tgt_For_Model model_Status_Duct_Tgt_For_Model_output; +extern tStatus_Eva_Tgt_For_Model model_Status_Eva_Tgt_For_Model_output; +extern tStatus_IO_For_Model model_Status_IO_For_Model_output; +extern tStatus_Pwm_For_Model model_Status_Pwm_For_Model_output; +extern tStatus_eComp_For_Model model_Status_eComp_For_Model_output; +extern tStatus_External_For_Model model_Status_External_For_Model_output; +extern tStatus_EMS_For_Model model_Status_EMS_For_Model_output; +extern tStatus_Ionizer_Aroma_For_Model model_Status_Ionizer_Aroma_For_Model_output; +extern tStatus_Duct_Select_For_Model model_Status_Duct_Select_For_Model_output; + extern uint32_t generate_key(uint32_t seed); @@ -1809,59 +1834,59 @@ void CanUdsInput_Set_Model(tCanUds *env) { 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); + status = osMessageQueuePut(env->queue_input_get_Status_Sensor, &model_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); + &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, &env->Status_Duct_Tgt_For_Model_input, 0, 0); + status = osMessageQueuePut(env->queue_input_get_Status_Duct_Tgt, &model_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); + status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &model_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); + 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, &env->Status_Pwm_For_Model_input, 0, 0); + 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, &env->Status_eComp_For_Model_input, 0, 0); + 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, &env->Status_External_For_Model_input, 0, 0); + 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, &env->Status_EMS_For_Model_input, 0, 0); + 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, - &env->Status_Ionizer_Aroma_For_Model_input, 0, 0); + &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, &env->Status_Duct_Select_For_Model_input, 0, + status = osMessageQueuePut(env->queue_input_get_Status_Duct_Select, &model_Status_Duct_Select_For_Model_input, 0, 0); } } @@ -2065,42 +2090,8 @@ static void CanUdsInput_Get_Model(tCanUds *env) { } // Это с выхода UDS -void CanUdsOutput_Set_Model(tCanUds *env) { +static 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; @@ -2182,64 +2173,135 @@ void CanUdsOutput_Set_Model(tCanUds *env) { osStatus_t status = osOK; - uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Sensor); + uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Set); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Sensor, &env->Status_Set_For_Model_output, 0, + status = osMessageQueuePut(env->queue_output_set_Status_Set, &env->Status_Set_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Actuator_DoorsActuator); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Actuator_DoorsActuator); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Actuator_DoorsActuator, + status = osMessageQueuePut(env->queue_output_set_Status_Actuator_DoorsActuator, &env->Status_Actuator_DoorsActuator_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Tgt); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Tgt); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_Duct_Tgt, &env->Status_Duct_Tgt_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Eva_Tgt); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Eva_Tgt); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_Eva_Tgt, &env->Status_Eva_Tgt_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_IO); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_IO); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_IO, &env->Status_IO_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_IO, &env->Status_IO_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Pwm); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Pwm); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Pwm, &env->Status_Pwm_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_Pwm, &env->Status_Pwm_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_eComp); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_eComp); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_eComp, &env->Status_eComp_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_eComp, &env->Status_eComp_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_External); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_External); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_External, &env->Status_External_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_External, &env->Status_External_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_EMS); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_EMS); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_EMS, &env->Status_EMS_For_Model_output, 0, 0); + status = osMessageQueuePut(env->queue_output_set_Status_EMS, &env->Status_EMS_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Ionizer_Aroma); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Ionizer_Aroma); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Ionizer_Aroma, + status = osMessageQueuePut(env->queue_output_set_Status_Ionizer_Aroma, &env->Status_Ionizer_Aroma_For_Model_output, 0, 0); } - countQueue_space = osMessageQueueGetSpace(env->queue_input_get_Status_Duct_Select); + countQueue_space = osMessageQueueGetSpace(env->queue_output_set_Status_Duct_Select); if (countQueue_space) { - status = osMessageQueuePut(env->queue_input_get_Status_Duct_Select, &env->Status_Duct_Select_For_Model_output, + 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); } @@ -2593,6 +2655,8 @@ void CanUds(tCanUds *env) { } + CanUdsOutput_Set_Model(env); + osMutexRelease(env->access); } else { LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error CanUds"); @@ -2604,7 +2668,11 @@ void CanUds(tCanUds *env) { void CanSerialPortCanUds_Start(tCanUds *env) { - ThreadBlock_Start(env->T_can_Uds, env, CanUds); +// ThreadBlock_Start(env->T_can_Uds, env, CanUds); + if (!env->thread_Uds.id) { + env->thread_Uds.id = osThreadNew((osThreadFunc_t) (CanUds), (void *) (env), &env->thread_Uds.attr); + } + CanSerialPortFrameTp_Start(&env->canSerialPortFrameTp); } @@ -2648,8 +2716,7 @@ void CanUds_Init( env->queue_output_set_Status_Set = osMessageQueueNew(1, sizeof(tStatus_Set_For_Model), NULL); - env->queue_output_set_Status_Actuator_DoorsActuator = osMessageQueueNew(1, sizeof(tStatus_Actuator_For_Model), - NULL); + env->queue_output_set_Status_Actuator_DoorsActuator = osMessageQueueNew(1, sizeof(tStatus_Actuator_For_Model),NULL); env->queue_output_set_Status_Duct_Tgt = osMessageQueueNew(1, sizeof(tStatus_Duct_Tgt_For_Model), NULL); env->queue_output_set_Status_Eva_Tgt = osMessageQueueNew(1, sizeof(tStatus_Eva_Tgt_For_Model), NULL); env->queue_output_set_Status_IO = osMessageQueueNew(1, sizeof(tStatus_IO_For_Model), NULL); @@ -2712,5 +2779,8 @@ void CanUds_Init( env->currentSession = UDS_session_defaultSession; statusData.Status_Active_Diagnostic_Session.Active_Diagnostic_Session = UDS_session_defaultSession; - InitThreadBlock(env->T_can_Uds, "UdsTester", osPriorityNormal); +// InitThreadBlock(env->T_can_Uds, "UdsTester", osPriorityNormal); + InitThreadAtrStatic(&env->thread_Uds.attr, "UdsTester", env->thread_Uds.controlBlock, env->thread_Uds.stack, + osPriorityNormal); + }; \ No newline at end of file diff --git a/CanUds.h b/CanUds.h index 48702bf..31b7f71 100644 --- a/CanUds.h +++ b/CanUds.h @@ -287,8 +287,14 @@ typedef struct { osMessageQueueId_t queue_output_set_Status_Ionizer_Aroma; osMessageQueueId_t queue_output_set_Status_Duct_Select; + struct { + osThreadId_t id; + uint32_t stack[384]; + StaticTask_t controlBlock; + osThreadAttr_t attr; + } thread_Uds; - tStaticThreadBlock(384) T_can_Uds; +// tStaticThreadBlock(384) T_can_Uds; } tCanUds; typedef uint16_t (*uds_func_ptr)(tCanUds *env); @@ -314,6 +320,10 @@ void CanUds_Init( void CanSerialPortCanUds_Start(tCanUds *env); -void CanUdsOutput_Set_Model(tCanUds *env); +// Тут данные должны быть с модели &env->Status_Sensor_For_Model_input и т.д. +void CanUdsInput_Set_Model(tCanUds *env); + +// Это на вход модели +void CanUdsOutput_Get_Model(tCanUds *env); #endif //HVAC_M7_CANUDS_H