From 36241582ae923a2c59ac777e0d896b82dbb3b22d Mon Sep 17 00:00:00 2001 From: darya Date: Tue, 23 Jun 2026 11:21:41 +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=2023.06.2026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LinSensorTasks.c | 243 +++++++++++++++++++++++++++++++++-------------- LinSensorTasks.h | 17 +++- 2 files changed, 185 insertions(+), 75 deletions(-) diff --git a/LinSensorTasks.c b/LinSensorTasks.c index 6f44aa6..a97035f 100644 --- a/LinSensorTasks.c +++ b/LinSensorTasks.c @@ -14,14 +14,30 @@ #define LOG_SIGN5 "Ln5" #define LOGGER env->logger -const uint8_t DRS_SENSON_ADR_Stat[LIN5_SENSOR_COUNT] = {DRS_DL_Stat, - DRS_DR_Stat, - DRS_FPL_Stat, - DRS_FPR_Stat, - DRS_RLB_Stat, - DRS_RRB_Stat, - DRS_FCL_Stat, - DRS_FCR_Stat}; +const uint8_t LIN5_SENSON_ADR_Stat[LIN5_SENSOR_COUNT] = {DRS_DL_Stat, + DRS_DR_Stat, + DRS_FPL_Stat, + DRS_FPR_Stat, + DRS_RLB_Stat, + DRS_RRB_Stat, + DRS_FCL_Stat, + DRS_FCR_Stat}; + +const uint8_t LIN4_SENSON_ADR_Stat[LIN4_SENSOR_COUNT] = {AirQS_Stat, + Aroma_Stat, + Ionizer_Stat, + eTXV_fHVAC_Stat, + eTXV_rHVAC_Stat, + eTXV_batChiller_Stat, + eTXV_eeChiller_Stat}; + +const uint8_t LIN4_SENSON_LEN_Stat[LIN4_SENSOR_COUNT] = {sizeof(tAirQS_Stat), + sizeof(tAroma_Stat), + sizeof(tIonizer_Stat), + sizeof(teTXV_fHVAC_Stat), + sizeof(teTXV_rHVAC_Stat), + sizeof(teTXV_batChiller_Stat), + sizeof(teTXV_eeChiller_Stat)}; static lin_event_id_t SEND_SENSOR_COM_x(tLinIO *linIo, uint8_t COM_ADR) { lin_event_id_t res = linIo->runCommand(linIo->env, COM_ADR, 30); @@ -55,10 +71,12 @@ static lin_event_id_t Set_CCU_Req(tLinIO *linIo, tLinData *linData, tCCU_Req *p_ return res; } -static lin_event_id_t Get_AirQS_Stat(tLinIO *linIo, tLinData *linData, tAirQS_Stat *p_AirQS_Stat) { + +static lin_event_id_t +Get_Sensor4_Stat(tLinIO *linIo, tLinData *linData, void *p_Stat, uint8_t p_Stat_Len, uint8_t ADR_stat) { lin_event_id_t res; - tAirQS_Stat *tAirQS_Stat_ = (tAirQS_Stat *) linData->g_aRxBuffer; + void *pStat_ = (void *) linData->g_aRxBuffer; uint8_t retry = 1; @@ -67,12 +85,12 @@ static lin_event_id_t Get_AirQS_Stat(tLinIO *linIo, tLinData *linData, tAirQS_St linData->direction = LIN_DIRECTION_GET; linData->g_aTxBufferLen = 0; - linData->g_aRxBufferLen = sizeof(tAirQS_Stat); + linData->g_aRxBufferLen = p_Stat_Len; - res = SEND_SENSOR_COM_x(linIo, AirQS_Stat); + res = SEND_SENSOR_COM_x(linIo, ADR_stat); if (res == LIN_RX_COMPLETED) { - memcpy(p_AirQS_Stat, tAirQS_Stat_, sizeof(tAirQS_Stat)); + memcpy(p_Stat, pStat_, p_Stat_Len); break; } @@ -83,7 +101,6 @@ static lin_event_id_t Get_AirQS_Stat(tLinIO *linIo, tLinData *linData, tAirQS_St } - //начало----------------------------------------- LIN 4 ---------------------------------------------------------------- //начало----------------------------------------- LIN 4 ---------------------------------------------------------------- //начало----------------------------------------- LIN 4 ---------------------------------------------------------------- @@ -95,7 +112,7 @@ static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) { env->d_CCU_Req.CCU_AirQS_Req = 1; ret = Set_CCU_Req(env->linIo, env->linData, &env->d_CCU_Req); -#if (LOG_LIN4_ACTUATOR == 1) +#if (LOG_LIN4_SENSOR == 1) if (ret == LIN_TX_COMPLETED) { LoggerFormatInfo(LOGGER, LOG_SIGN4, "OK Set_CCU_Req = %d", ret) } else { @@ -103,27 +120,107 @@ static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) { } #endif + for (uint8_t i = 0; i < LIN4_SENSOR_COUNT; ++i) { - ret = Get_AirQS_Stat(env->linIo, env->linData, &env->d_AirQS_Stat); + ret = Get_Sensor4_Stat(env->linIo, env->linData, &env->Stat[i], LIN4_SENSON_LEN_Stat[i], + LIN4_SENSON_ADR_Stat[i]); -#if (LOG_LIN4_ACTUATOR == 1) + switch (i) { - if (ret == LIN_RX_COMPLETED) { - LoggerFormatInfo(LOGGER, LOG_SIGN4, - "AirQS_LinRespErr_Stat = %d AirQS_Sens_Stat = %d AirQS_Combined_Stat = %d AirQS_Err_Stat = %d AirQS_COLvl_Stat = %d AirQS_NOxLvl_Stat = %d AirQS_NH3Lvl_Stat = %d", - env->d_AirQS_Stat.AirQS_LinRespErr_Stat, - env->d_AirQS_Stat.AirQS_Sens_Stat, - env->d_AirQS_Stat.AirQS_Combined_Stat, - env->d_AirQS_Stat.AirQS_Err_Stat, - env->d_AirQS_Stat.AirQS_COLvl_Stat, - env->d_AirQS_Stat.AirQS_NOxLvl_Stat, - env->d_AirQS_Stat.AirQS_NH3Lvl_Stat) - } else { - LoggerFormatInfo(LOGGER, LOG_SIGN4, "ERROR Get_AirQS_Stat = %d", ret) - } + case eeAirQS_Stat: { + tAirQS_Stat *pAirQS_Stat = (tAirQS_Stat *) &env->Stat[i]; + +#if (LOG_LIN4_SENSOR == 1) + + if (ret == LIN_RX_COMPLETED) { + LoggerFormatInfo(LOGGER, LOG_SIGN4, + "AirQS_LinRespErr_Stat = %d AirQS_Sens_Stat = %d AirQS_Combined_Stat = %d AirQS_Err_Stat = %d AirQS_COLvl_Stat = %d AirQS_NOxLvl_Stat = %d AirQS_NH3Lvl_Stat = %d", + pAirQS_Stat->AirQS_LinRespErr_Stat, + pAirQS_Stat->AirQS_Sens_Stat, + pAirQS_Stat->AirQS_Combined_Stat, + pAirQS_Stat->AirQS_Err_Stat, + pAirQS_Stat->AirQS_COLvl_Stat, + pAirQS_Stat->AirQS_NOxLvl_Stat, + pAirQS_Stat->AirQS_NH3Lvl_Stat) + } else { + LoggerFormatInfo(LOGGER, LOG_SIGN4, "LIN4 ERROR = %d", ret) + } #endif + break; + } + case eeAroma_Stat: { + tAroma_Stat *pAroma_Stat = (tAroma_Stat *) &env->Stat[i]; + + if (ret == LIN_RX_COMPLETED) { + LoggerFormatInfo(LOGGER, LOG_SIGN4, + "Aroma_LinRespErr_Stat = %d Aroma_CartridgeSw_Stat = %d Aroma_Err_Stat = %d Aroma_Intens_Stat = %d Aroma_CartridgeFlavor_Stat = %d Aroma_CartridgeCapacity_Stat = %d", + pAroma_Stat->Aroma_LinRespErr_Stat, + pAroma_Stat->Aroma_CartridgeSw_Stat, + pAroma_Stat->Aroma_Err_Stat, + pAroma_Stat->Aroma_Intens_Stat, + pAroma_Stat->Aroma_CartridgeFlavor_Stat, + pAroma_Stat->Aroma_CartridgeCapacity_Stat) + } else { + LoggerFormatInfo(LOGGER, LOG_SIGN4, "LIN4 ERROR = %d", ret) + } + + break; + } + + case eeIonizer_Stat: { + tIonizer_Stat *pIonizer_Stat = (tIonizer_Stat *) &env->Stat[i]; + + if (ret == LIN_RX_COMPLETED) { + LoggerFormatInfo(LOGGER, LOG_SIGN4, + "Ionizer_LinRespErr_Stat = %d Ionizer_Err_Stat = %d Ionizer_Ionization_Stat = %d", + pIonizer_Stat->Ionizer_LinRespErr_Stat, + pIonizer_Stat->Ionizer_Err_Stat, + pIonizer_Stat->Ionizer_Ionization_Stat) + } else { + LoggerFormatInfo(LOGGER, LOG_SIGN4, "LIN4 ERROR = %d", ret) + } + + break; + } + case eeTXV_fHVAC_Stat: { + teTXV_fHVAC_Stat *p_teTXV_fHVAC_Stat = (teTXV_fHVAC_Stat *) &env->Stat[i]; + + if (ret == LIN_RX_COMPLETED) { + LoggerFormatInfo(LOGGER, LOG_SIGN4, + "eTXV_fHVAC_Pos_Stat = %d eTXV_fHVAC_LinRespErr_Stat = %d eTXV_fHVAC_Err_Stat = %d eTXV_fHVAC_Pressure_Val = %d eTXV_fHVAC_Temp_Val = %d", + p_teTXV_fHVAC_Stat->eTXV_fHVAC_Pos_Stat, + p_teTXV_fHVAC_Stat->eTXV_fHVAC_LinRespErr_Stat, + p_teTXV_fHVAC_Stat->eTXV_fHVAC_Err_Stat, + p_teTXV_fHVAC_Stat->eTXV_fHVAC_Pressure_Val, + p_teTXV_fHVAC_Stat->eTXV_fHVAC_Temp_Val) + } else { + LoggerFormatInfo(LOGGER, LOG_SIGN4, "LIN4 ERROR = %d", ret) + } + + break; + } + + case eeTXV_rHVAC_Stat: { + teTXV_rHVAC_Stat *p_teTXV_rHVAC_Stat = (teTXV_rHVAC_Stat *) &env->Stat[i]; + break; + } + + case eeTXV_batChiller_Stat: { + teTXV_batChiller_Stat *p_teTXV_batChiller_Stat = (teTXV_batChiller_Stat *) &env->Stat[i]; + break; + } + + case eeTXV_eeChiller_Stat: { + teTXV_eeChiller_Stat *p_teTXV_eeChiller_Stat = (teTXV_eeChiller_Stat *) &env->Stat[i]; + break; + } + } + + } + + return LIN_NO_EVENT; } @@ -367,55 +464,55 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { // if (env->linStateSensor.error_connect[i] == 0) { - ret = Get_DRS_Stat(env->linIo, env->linData, &env->linStateSensor.d_DRS_Stat[i], DRS_SENSON_ADR_Stat[i]); + ret = Get_DRS_Stat(env->linIo, env->linData, &env->linStateSensor.d_DRS_Stat[i], LIN5_SENSON_ADR_Stat[i]); - uint8_t current_btn_state = env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat; + uint8_t current_btn_state = env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat; - if ((current_btn_state) && (!env->linStateSensor.prev_btn_state[i])) { + 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.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; - - if (ret == LIN_RX_COMPLETED) { - env->linStateSensor.error_connect[i] = 0; -#if (LOG_LIN5_SENSOR == 1) - - if ((*((uint8_t *) &env->linStateSensor.d_DRS_Stat[i]) != - *((uint8_t *) &env->linStateSensor.d_old_DRS_Stat[i])) || - (env->linStateSensor.LED_COUNT[i] != env->linStateSensor.LED_OLD_COUNT[i])) { - - *((uint8_t *) &env->linStateSensor.d_old_DRS_Stat[i]) = *((uint8_t *) &env->linStateSensor.d_DRS_Stat[i]); - env->linStateSensor.LED_OLD_COUNT[i] = env->linStateSensor.LED_COUNT[i]; - - LoggerFormatInfo(LOGGER, LOG_SIGN5, - "Sensor number %d: COUNT = %d DRS_Btn_Stat = %d DRS_LinRespErr_Stat = %d DRS_Err_Stat = %d", - i, - env->linStateSensor.LED_COUNT[i], - 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 + if (env->linStateSensor.LED_COUNT[i] == 0) { + env->linStateSensor.LED_COUNT[i] = 3; } else { - env->linStateSensor.error_connect[i] = 1; -#if (LOG_LIN5_SENSOR == 1) - if (env->linStateSensor.error_connect[i] != env->linStateSensor.error_old_connect[i]) { - env->linStateSensor.error_old_connect[i] = env->linStateSensor.error_connect[i]; - LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor number %d: ERROR Get_FPL_Stat = %d", i, ret) - } -#endif + --env->linStateSensor.LED_COUNT[i]; } + } + 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; + + if (ret == LIN_RX_COMPLETED) { + env->linStateSensor.error_connect[i] = 0; +#if (LOG_LIN5_SENSOR == 1) + + if ((*((uint8_t *) &env->linStateSensor.d_DRS_Stat[i]) != + *((uint8_t *) &env->linStateSensor.d_old_DRS_Stat[i])) || + (env->linStateSensor.LED_COUNT[i] != env->linStateSensor.LED_OLD_COUNT[i])) { + + *((uint8_t *) &env->linStateSensor.d_old_DRS_Stat[i]) = *((uint8_t *) &env->linStateSensor.d_DRS_Stat[i]); + env->linStateSensor.LED_OLD_COUNT[i] = env->linStateSensor.LED_COUNT[i]; + + LoggerFormatInfo(LOGGER, LOG_SIGN5, + "Sensor number %d: COUNT = %d DRS_Btn_Stat = %d DRS_LinRespErr_Stat = %d DRS_Err_Stat = %d", + i, + env->linStateSensor.LED_COUNT[i], + 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) + if (env->linStateSensor.error_connect[i] != env->linStateSensor.error_old_connect[i]) { + env->linStateSensor.error_old_connect[i] = env->linStateSensor.error_connect[i]; + LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor number %d: ERROR Get_FPL_Stat = %d", i, ret) + } +#endif + } + // } } diff --git a/LinSensorTasks.h b/LinSensorTasks.h index 9ae375d..a475d10 100644 --- a/LinSensorTasks.h +++ b/LinSensorTasks.h @@ -13,7 +13,18 @@ #define LOG_LIN4_SENSOR 1 #define LOG_LIN5_SENSOR 0 -#define LIN5_SENSOR_COUNT 8 + +#define LIN4_SENSOR_COUNT 7 + +typedef enum { + eeAirQS_Stat = 0, + eeAroma_Stat = 1, + eeIonizer_Stat = 2, + eeTXV_fHVAC_Stat = 3, + eeTXV_rHVAC_Stat = 4, + eeTXV_batChiller_Stat = 5, + eeTXV_eeChiller_Stat = 6 +} eSensorStat4; #define AirQS_Stat 0x14 #define Aroma_Stat 0x5 @@ -24,6 +35,8 @@ #define eTXV_batChiller_Stat 0x22 #define eTXV_eeChiller_Stat 0x24 +#define LIN5_SENSOR_COUNT 8 + #define CCU_DRS_Req 0x1 #define DRS_DL_Stat 0xD #define DRS_DR_Stat 0x12 @@ -220,7 +233,7 @@ typedef struct { tLoggerInterface *logger; tCCU_Req d_CCU_Req; - tAirQS_Stat d_AirQS_Stat; + uint8_t Stat[LIN4_SENSOR_COUNT]; struct { osThreadId_t id;