From d6c2a57cf63aca3dd66d6b6e9fc59407d22ae8df Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 11 Mar 2026 13:28:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LinSensorTasks.c | 56 ++++++++++++++++++++++++++++++------------------ LinSensorTasks.h | 10 ++++++--- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/LinSensorTasks.c b/LinSensorTasks.c index ae00f8c..abfdd63 100644 --- a/LinSensorTasks.c +++ b/LinSensorTasks.c @@ -333,9 +333,8 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { lin_event_id_t ret = LIN_NO_EVENT; - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - set_led_group(&env->d_CCU_DRS_Req, i, env->LED_COUNT[i]); + set_led_group(&env->d_CCU_DRS_Req, i, env->linStateSensor.LED_COUNT[i]); } env->d_CCU_DRS_Req.BCM_SwIndIntens_Stat = 1; env->d_CCU_DRS_Req.BCM_IndFadingTime_Req = 2; @@ -344,47 +343,50 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { // *((uint32_t *) &env->d_old_CCU_DRS_Req) = *((uint32_t *) &env->d_CCU_DRS_Req); ret = Set_CCU_DRS_Req(env->linIo, env->linData, &env->d_CCU_DRS_Req); -#if (LOG_LIN5_SENSOR == 1) + if (ret == LIN_TX_COMPLETED) { +#if (LOG_LIN5_SENSOR == 1) LoggerInfoStatic(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req - OK") - } else { - LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req (ERROR %d)", ret) - } #endif + } else { +#if (LOG_LIN5_SENSOR == 1) + LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req (ERROR %d)", ret) +#endif + } + // } - - - - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - ret = Get_DRS_Stat(env->linIo, env->linData, &env->d_DRS_Stat[i], DRS_SENSON_ADR_Stat[i]); + ret = Get_DRS_Stat(env->linIo, env->linData, &env->linStateSensor.d_DRS_Stat[i], DRS_SENSON_ADR_Stat[i]); - if (env->d_DRS_Stat[i].DRS_Btn_Stat) { - ++env->LED_COUNT[i]; + if (env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat) { + ++env->linStateSensor.LED_COUNT[i]; - if (env->LED_COUNT[i] > 3) { - env->LED_COUNT[i] = 0; + if (env->linStateSensor.LED_COUNT[i] > 3) { + env->linStateSensor.LED_COUNT[i] = 0; } } -#if (LOG_LIN5_SENSOR == 1) if (ret == LIN_RX_COMPLETED) { + env->linStateSensor.error_connect[i] = 0; +#if (LOG_LIN5_SENSOR == 1) LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor number %d: DRS_Btn_Stat = %d DRS_LinRespErr_Stat = %d DRS_Err_Stat = %d", i, - env->d_DRS_Stat[i].DRS_Btn_Stat, - env->d_DRS_Stat[i].DRS_LinRespErr_Stat, - env->d_DRS_Stat[i].DRS_Err_Stat + env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat, + env->linStateSensor.d_DRS_Stat[i].DRS_LinRespErr_Stat, + env->linStateSensor.d_DRS_Stat[i].DRS_Err_Stat ) - +#endif } else { + env->linStateSensor.error_connect[i] = 1; +#if (LOG_LIN5_SENSOR == 1) LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor number %d: ERROR Get_FPL_Stat = %d", i, ret) +#endif } -#endif } @@ -414,6 +416,18 @@ static _Noreturn void Lin5_Thread(tLin5TaskSensor *env) { lin_event_id_t res = Lin5_Scheduler(env); + uint8_t isError = 0; + for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { + if (env->linStateSensor.error_connect[i] == 1) + ++isError; + } + + if (isError == LIN5_SENSOR_COUNT) { + env->error_connect = 1; + } else { + env->error_connect = 0; + } + osMutexRelease(env->access); } diff --git a/LinSensorTasks.h b/LinSensorTasks.h index d809d09..8f0145f 100644 --- a/LinSensorTasks.h +++ b/LinSensorTasks.h @@ -35,7 +35,6 @@ #define DRS_FCR_Stat 0x30 - typedef struct __attribute__ ((packed)) { uint8_t AirQS_LinRespErr_Stat: 1; // 0 uint8_t AirQS_Sens_Stat: 2; // 1 @@ -243,9 +242,14 @@ typedef struct { tLoggerInterface *logger; - tDRS_Stat d_DRS_Stat[LIN5_SENSOR_COUNT]; - uint8_t LED_COUNT[LIN5_SENSOR_COUNT]; + struct { + tDRS_Stat d_DRS_Stat[LIN5_SENSOR_COUNT]; + uint8_t LED_COUNT[LIN5_SENSOR_COUNT]; + uint8_t error_connect[LIN5_SENSOR_COUNT]; + } linStateSensor; + + uint8_t error_connect; tCCU_DRS_Req d_CCU_DRS_Req; tCCU_DRS_Req d_old_CCU_DRS_Req;