From 52691ca0da1a86d401a7ce229e8e0e842c49e9e5 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 27 Jul 2026 16:39:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA?= =?UTF-8?q?=D0=B8=20LIN5=20(=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8)=20=D0=B8=20=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=81=D0=BE=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LinSensorTasks.c | 129 ++++++++++++++++++++++++++++++++--------------- LinSensorTasks.h | 12 ++++- 2 files changed, 99 insertions(+), 42 deletions(-) diff --git a/LinSensorTasks.c b/LinSensorTasks.c index 3548025..29b1fb4 100644 --- a/LinSensorTasks.c +++ b/LinSensorTasks.c @@ -220,7 +220,17 @@ void Lin4_Output_Get_From_Model(tLin4TaskSensor *env) { countQueue_space = osMessageQueueGetSpace(env->queue_input_Lin4_Stat); if (countQueue_space == 0) { -// status = osMessageQueueGet(env->queue_input_Lin4_Stat, &env->sensorLin4CmdBusInput, 0, 0); + status = osMessageQueueGet(env->queue_input_Lin4_Stat, &env->sensorLin4CmdBusInput, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_input_tAroma); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_tAroma, &rtDW.LIN4_Aroma_Stat_Model, 0, 0); + } + + countQueue_space = osMessageQueueGetSpace(env->queue_input_tIonizer); + if (countQueue_space == 0) { + status = osMessageQueueGet(env->queue_input_tIonizer, &rtDW.LIN4_Ionizer_Stat_Model, 0, 0); } } @@ -689,6 +699,36 @@ static void set_led_group(tCCU_DRS_Req *req, uint8_t led_group, uint8_t count) { } } + +void Lin5_Input_Set_From_Model(tLin5TaskSensor *env) { + + uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_input_model_count); + + if (countQueue_space) { + osStatus_t status = osMessageQueuePut(env->queue_led_input_model_count, &rtY.DRS_output, 0, + 0); + } + +} + +static void Lin5_Input_Get_From_Model(tLin5TaskSensor *env) { + + uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_input_model_count); + + if (countQueue_space == 0) { + osStatus_t status = osMessageQueueGet(env->queue_led_input_model_count, &env->linStateSensorModelOutput, 0, 0); + + memcpy(env->linStateSensor.LED_COUNT, env->linStateSensorModelOutput.LED_COUNT, LIN5_SENSOR_COUNT); + + for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { + set_led_group(&env->d_CCU_DRS_Req, i, env->linStateSensor.LED_COUNT[i]); + } + + } + +} + + void Lin5_Output_Get_From_Model(tLin5TaskSensor *env) { uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_count); @@ -703,36 +743,6 @@ void Lin5_Output_Get_From_Model(tLin5TaskSensor *env) { static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { lin_event_id_t ret = LIN_NO_EVENT; - SystemDelayMs(40); - - ret = Set_CCU_DRS_Req(env->linIo, env->linData, &env->d_CCU_DRS_Req); - - if (ret == LIN_TX_COMPLETED) { - - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - set_led_group(&env->d_CCU_DRS_Req, i, env->linStateSensor.LED_COUNT[i]); - } - env->d_CCU_DRS_Req.BCM_SwIndIntens_Stat = 0; - env->d_CCU_DRS_Req.BCM_IndFadingTime_Req = 0; - -#if (LOG_LIN5_SENSOR == 1) - - if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { - *((uint32_t *) &env->d_old_CCU_DRS_Req) = *((uint32_t *) &env->d_CCU_DRS_Req); - LoggerInfoStatic(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req - OK") - } -#endif - } else { -#if (LOG_LIN5_SENSOR == 1) - if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { - *((uint32_t *) &env->d_old_CCU_DRS_Req) = *((uint32_t *) &env->d_CCU_DRS_Req); - LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req (ERROR %d)", ret) - } -#endif - } - - SystemDelayMs(40); - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { // if (env->linStateSensor.error_connect[i] == 0) { @@ -741,16 +751,20 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { uint8_t current_btn_state = env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat; + if (current_btn_state) { + env->linStateSensor.LED_COUNT[i] = 1; + } else { + env->linStateSensor.LED_COUNT[i] = 0; + } + + /* if ((current_btn_state) && (!env->linStateSensor.prev_btn_state[i])) { - if (env->linStateSensor.LED_COUNT[i] == 0) { - env->linStateSensor.LED_COUNT[i] = 3; - } else { - --env->linStateSensor.LED_COUNT[i]; - } + env->linStateSensor.LED_COUNT[i] = 1; } env->linStateSensor.prev_btn_state[i] = current_btn_state; +*/ env->linStateSensor.LinRespErr_Stat[i] = env->linStateSensor.d_DRS_Stat[i].DRS_LinRespErr_Stat; env->linStateSensor.Err_Stat[i] = env->linStateSensor.d_DRS_Stat[i].DRS_Err_Stat; @@ -794,6 +808,7 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { osStatus_t status = osOK; if (countQueue_led_count) { + memcpy(env->sensorButtonCmdBusInput.in_COUNT, env->linStateSensor.LED_COUNT, LIN5_SENSOR_COUNT); memcpy(env->sensorButtonCmdBusInput.in_error_connect, env->linStateSensor.error_connect, LIN5_SENSOR_COUNT); memcpy(env->sensorButtonCmdBusInput.LinRespErr_Stat, env->linStateSensor.LinRespErr_Stat, LIN5_SENSOR_COUNT); @@ -803,6 +818,40 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { status = osMessageQueuePut(env->queue_led_count, env->linStateSensor.LED_COUNT, 0, 0U); } + + Lin5_Input_Get_From_Model(env); + + if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { + + SystemDelayMs(40); + + ret = Set_CCU_DRS_Req(env->linIo, env->linData, &env->d_CCU_DRS_Req); + + if (ret == LIN_TX_COMPLETED) { + + env->d_CCU_DRS_Req.BCM_SwIndIntens_Stat = 0; + env->d_CCU_DRS_Req.BCM_IndFadingTime_Req = 0; + + if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { + *((uint32_t *) &env->d_old_CCU_DRS_Req) = *((uint32_t *) &env->d_CCU_DRS_Req); +#if (LOG_LIN5_SENSOR == 1) + LoggerInfoStatic(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req - OK") +#endif + + } + } else { + if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { + +#if (LOG_LIN5_SENSOR == 1) + LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req (ERROR %d)", ret) +#endif + } + } + + SystemDelayMs(40); + } + + return LIN_NO_EVENT; } @@ -817,10 +866,10 @@ void Lin_5_Init(tLin5TaskSensor *env, env->access = osMutexNew(NULL); env->queue_led_count = osMessageQueueNew(1, sizeof(env->linStateSensor.LED_COUNT), NULL); + env->queue_led_input_model_count = osMessageQueueNew(1, sizeof(LinStateSensorModel), NULL); - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - env->linStateSensor.LED_COUNT[i] = 3; - } + memset(env->linStateSensor.LED_COUNT, 3, LIN5_SENSOR_COUNT); + memset(rtDW.LIN5_SENSON_ADR_Stat_model.in_COUNT, 3, LIN5_SENSOR_COUNT); InitThreadAtrStatic(&env->threadLin.attr, "Ln5", env->threadLin.controlBlock, env->threadLin.stack, osPriorityNormal); @@ -830,7 +879,7 @@ void Lin_5_Init(tLin5TaskSensor *env, static _Noreturn void Lin5_Thread(tLin5TaskSensor *env) { for (;;) { - if (osMutexAcquire(env->access, 1000) == osOK) { + if (osMutexAcquire(env->access, 2000) == osOK) { lin_event_id_t res = Lin5_Scheduler(env); diff --git a/LinSensorTasks.h b/LinSensorTasks.h index bc0bb42..e453843 100644 --- a/LinSensorTasks.h +++ b/LinSensorTasks.h @@ -361,6 +361,10 @@ typedef struct { uint8_t Error_Connect; // Ошибка LIN шины (ни одно устройство не отвечает) } SensorLin5ButtonCmdBusInput; +typedef struct { + uint8_t LED_COUNT[LIN5_SENSOR_COUNT]; +} LinStateSensorModel; + typedef struct { tLinIO *linIo; @@ -372,7 +376,11 @@ typedef struct { SensorLin5ButtonCmdBusInput sensorButtonCmdBusInput; +// LinStateSensorModel linStateSensorModelInput; + LinStateSensorModel linStateSensorModelOutput; + osMessageQueueId_t queue_led_count; + osMessageQueueId_t queue_led_input_model_count; struct { tDRS_Stat d_DRS_Stat[LIN5_SENSOR_COUNT]; @@ -383,7 +391,7 @@ typedef struct { uint8_t error_connect[LIN5_SENSOR_COUNT]; uint8_t error_old_connect[LIN5_SENSOR_COUNT]; - uint8_t prev_btn_state[LIN5_SENSOR_COUNT]; +// uint8_t prev_btn_state[LIN5_SENSOR_COUNT]; uint8_t LinRespErr_Stat[LIN5_SENSOR_COUNT]; uint8_t Err_Stat[LIN5_SENSOR_COUNT]; @@ -394,7 +402,6 @@ typedef struct { tCCU_DRS_Req d_CCU_DRS_Req; tCCU_DRS_Req d_old_CCU_DRS_Req; - struct { osThreadId_t id; uint32_t stack[384]; @@ -425,5 +432,6 @@ void Lin5_StartThread(tLin5TaskSensor *env); void Lin5_Output_Get_From_Model(tLin5TaskSensor *env); +void Lin5_Input_Set_From_Model(tLin5TaskSensor *env); #endif //HVAC_M7_LINSENSORTASKS_H