HVAC_M7_LIN_TASKS/LinSensorTasks.h

438 lines
13 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by cfif on 12.02.2026.
//
#ifndef HVAC_M7_LINSENSORTASKS_H
#define HVAC_M7_LINSENSORTASKS_H
#include <cmsis_os.h>
#include "stdbool.h"
#include "LinIO.h"
#include "LoggerInterface.h"
#include "HVAC_model.h"
#define LOG_LIN4_SENSOR 0
#define LOG_LIN5_SENSOR 1
#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
#define CCU_Req 0x1
#define Ionizer_Stat 0x1C
#define eTXV_fHVAC_Stat 0x1E
#define eTXV_rHVAC_Stat 0x20
#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
#define DRS_FPL_Stat 0x17
#define DRS_FPR_Stat 0x1C
#define DRS_RLB_Stat 0x21
#define DRS_RRB_Stat 0x26
#define DRS_FCL_Stat 0x2B
#define DRS_FCR_Stat 0x30
typedef struct __attribute__ ((packed)) {
uint8_t AirQS_LinRespErr_Stat: 1; // 0
uint8_t AirQS_Sens_Stat: 2; // 1
uint8_t AirQS_Combined_Stat: 3; // 3
uint8_t unused1: 2; // 6
uint8_t AirQS_Err_Stat: 3; // 8
uint8_t AirQS_COLvl_Stat: 4; // 11
uint8_t unused2: 1; // 15
uint8_t AirQS_NOxLvl_Stat: 4; // 16
uint8_t AirQS_NH3Lvl_Stat: 4; // 20
} tAirQS_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t Aroma_LinRespErr_Stat: 1; // 0
uint8_t Aroma_CartridgeSw_Stat: 1; // 1
uint8_t unused1: 2; // 2
uint8_t Aroma_Err_Stat: 2; // 4
uint8_t Aroma_Intens_Stat: 2; // 6
uint8_t unused2: 2; // 8
uint8_t Aroma_CartridgeFlavor_Stat: 4; // 10
uint16_t unused3: 10; // биты 1423
uint8_t Aroma_CartridgeCapacity_Stat: 4; // 24
uint8_t unused4: 4; // биты 2831
uint8_t unused5: 8; // биты 3239
} tAroma_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t CCU_Ionization_Req: 1; // 0
uint8_t unused1: 2; // 1
uint8_t CCU_AromaIntens_Req: 2; // 3
uint8_t unused2: 3; // биты 57
uint8_t unused3: 8; // биты 815
uint8_t unused4: 8; // биты 1623
uint8_t CCU_AirQS_Req: 1; // 24
uint8_t CCU_fHVAC_Pos_Val: 7; // 25
uint8_t CCU_rHVAC_Pos_Val: 7; // 32
uint8_t unused5: 1; // 39
uint8_t CCU_batChiller_Pos_Val: 7; // 40
uint8_t unused6: 1; // 47
uint8_t CCU_eeChiller_Pos_Val: 7; // 48
uint8_t unused7: 1; // 55 явное заполнение
} tCCU_Req;
typedef struct __attribute__ ((packed)) {
uint8_t Ionizer_LinRespErr_Stat: 1; // 0
uint8_t Ionizer_Err_Stat: 2; // 1
uint8_t unused1: 5; // 3
uint8_t Ionizer_Ionization_Stat: 1; // 8
} tIonizer_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t eTXV_fHVAC_Pos_Stat: 7; // 0
uint8_t eTXV_fHVAC_LinRespErr_Stat: 1; // 7
uint8_t eTXV_fHVAC_Err_Stat: 2; // 8
uint8_t eTXV_fHVAC_Pressure_Val: 6; // 10
uint8_t eTXV_fHVAC_Temp_Val: 7; // 16
} teTXV_fHVAC_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t eTXV_rHVAC_Pos_Stat: 7; // 0
uint8_t eTXV_rHVAC_LinRespErr_Stat: 1; // 7
uint8_t eTXV_rHVAC_Err_Stat: 2; // 8
uint8_t eTXV_rHVAC_Pressure_Val: 6; // 10
uint8_t eTXV_rHVAC_Temp_Val: 7; // 16
} teTXV_rHVAC_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t eTXV_batChiller_Pos_Stat: 7; // 0
uint8_t eTXV_batChiller_LinRespErr_Stat: 1; // 7
uint8_t eTXV_batChiller_Err_Stat: 2; // 8
uint8_t eTXV_batChiller_Pressure_Val: 6; // 10
uint8_t eTXV_batChiller_Temp_Val: 7; // 16
} teTXV_batChiller_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t eTXV_eeChiller_Pos_Stat: 7; // 0
uint8_t eTXV_eeChiller_LinRespErr_Stat: 1; // 7
uint8_t eTXV_eeChiller_Err_Stat: 2; // 8
uint8_t eTXV_eeChiller_Pressure_Val: 6; // 10
uint8_t eTXV_eeChiller_Temp_Val: 7; // 16
} teTXV_eeChiller_Stat;
typedef struct {
uint8_t CCU_Ionization_Req;
uint8_t CCU_AromaIntens_Req;
uint8_t CCU_AirQS_Req;
uint8_t CCU_fHVAC_Pos_Val;
uint8_t CCU_rHVAC_Pos_Val;
uint8_t CCU_batChiller_Pos_Val;
uint8_t CCU_eeChiller_Pos_Val;
} tCCU_Req_For_Model;
typedef struct {
uint8_t AirQS_LinRespErr_Stat;
uint8_t AirQS_Sens_Stat;
uint8_t AirQS_Combined_Stat;
uint8_t AirQS_Err_Stat;
uint8_t AirQS_COLvl_Stat;
uint8_t AirQS_NOxLvl_Stat;
uint8_t AirQS_NH3Lvl_Stat;
} tAirQS_Stat_For_Model;
typedef struct {
uint8_t Aroma_LinRespErr_Stat;
uint8_t Aroma_CartridgeSw_Stat;
uint8_t Aroma_Err_Stat;
uint8_t Aroma_Intens_Stat;
uint8_t Aroma_CartridgeFlavor_Stat;
uint8_t Aroma_CartridgeCapacity_Stat;
} tAroma_Stat_For_Model;
typedef struct {
uint8_t Ionizer_LinRespErr_Stat;
uint8_t Ionizer_Err_Stat;
uint8_t Ionizer_Ionization_Stat;
} tIonizer_Stat_For_Model;
typedef struct {
uint8_t eTXV_fHVAC_Pos_Stat;
uint8_t eTXV_fHVAC_LinRespErr_Stat;
uint8_t eTXV_fHVAC_Err_Stat;
uint8_t eTXV_fHVAC_Pressure_Val;
uint8_t eTXV_fHVAC_Temp_Val;
} teTXV_fHVAC_Stat_For_Model;
typedef struct {
uint8_t eTXV_rHVAC_Pos_Stat;
uint8_t eTXV_rHVAC_LinRespErr_Stat;
uint8_t eTXV_rHVAC_Err_Stat;
uint8_t eTXV_rHVAC_Pressure_Val;
uint8_t eTXV_rHVAC_Temp_Val;
} teTXV_rHVAC_Stat_For_Model;
typedef struct {
uint8_t eTXV_batChiller_Pos_Stat;
uint8_t eTXV_batChiller_LinRespErr_Stat;
uint8_t eTXV_batChiller_Err_Stat;
uint8_t eTXV_batChiller_Pressure_Val;
uint8_t eTXV_batChiller_Temp_Val;
} teTXV_batChiller_Stat_For_Model;
typedef struct {
uint8_t eTXV_eeChiller_Pos_Stat;
uint8_t eTXV_eeChiller_LinRespErr_Stat;
uint8_t eTXV_eeChiller_Err_Stat;
uint8_t eTXV_eeChiller_Pressure_Val;
uint8_t eTXV_eeChiller_Temp_Val;
} teTXV_eeChiller_Stat_For_Model;
typedef struct __attribute__ ((packed)) {
uint8_t CCU_DLLed1_Req: 1; // 0
uint8_t CCU_DLLed2_Req: 1; // 1
uint8_t CCU_DLLed3_Req: 1; // 2
uint8_t CCU_DRLed1_Req: 1; // 3
uint8_t CCU_DRLed2_Req: 1; // 4
uint8_t CCU_DRLed3_Req: 1; // 5
uint8_t CCU_FPLLed1_Req: 1; // 6
uint8_t CCU_FPLLed2_Req: 1; // 7
uint8_t CCU_FPLLed3_Req: 1; // 8
uint8_t CCU_FPRLed1_Req: 1; // 9
uint8_t CCU_FPRLed2_Req: 1; // 10
uint8_t CCU_FPRLed3_Req: 1; // 11
uint8_t CCU_RLBLed1_Req: 1; // 12
uint8_t CCU_RLBLed2_Req: 1; // 13
uint8_t CCU_RLBLed3_Req: 1; // 14
uint8_t CCU_RRBLed1_Req: 1; // 15
uint8_t CCU_RRBLed2_Req: 1; // 16
uint8_t CCU_RRBLed3_Req: 1; // 17
uint8_t CCU_FCLLed1_Req: 1; // 18
uint8_t CCU_FCLLed2_Req: 1; // 19
uint8_t CCU_FCLLed3_Req: 1; // 20
uint8_t CCU_FCRLed1_Req: 1; // 21
uint8_t CCU_FCRLed2_Req: 1; // 22
uint8_t CCU_FCRLed3_Req: 1; // 23
uint8_t BCM_SwIndIntens_Stat: 1; // 24
uint8_t BCM_IndFadingTime_Req: 5; // 25
} tCCU_DRS_Req;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_Btn_Stat: 1; // 0
uint8_t DRS_LinRespErr_Stat: 1; // 1
uint8_t DRS_Err_Stat: 1; // 2
} tDRS_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_DL_Btn_Stat: 1; // 0
uint8_t DRS_DL_LinRespErr_Stat: 1; // 1
uint8_t DRS_DL_Err_Stat: 1; // 2
} tDRS_DL_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_DR_Btn_Stat: 1; // 0
uint8_t DRS_DR_LinRespErr_Stat: 1; // 1
uint8_t DRS_DR_Err_Stat: 1; // 2
} tDRS_DR_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_FCL_Btn_Stat: 1; // 0
uint8_t DRS_FCL_LinRespErr_Stat: 1; // 1
uint8_t DRS_FCL_Err_Stat: 1; // 2
} tDRS_FCL_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_FCR_Btn_Stat: 1; // 0
uint8_t DRS_FCR_LinRespErr_Stat: 1; // 1
uint8_t DRS_FCR_Err_Stat: 1; // 2
} tDRS_FCR_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_FPL_Btn_Stat: 1; // 0
uint8_t DRS_FPL_LinRespErr_Stat: 1; // 1
uint8_t DRS_FPL_Err_Stat: 1; // 2
} tDRS_FPL_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_FPR_Btn_Stat: 1; // 0
uint8_t DRS_FPR_LinRespErr_Stat: 1; // 1
uint8_t DRS_FPR_Err_Stat: 1; // 2
} tDRS_FPR_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_RLB_Btn_Stat: 1; // 0
uint8_t DRS_RLB_LinRespErr_Stat: 1; // 1
uint8_t DRS_RLB_Err_Stat: 1; // 2
} tDRS_RLB_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t DRS_RRB_Btn_Stat: 1; // 0
uint8_t DRS_RRB_LinRespErr_Stat: 1; // 1
uint8_t DRS_RRB_Err_Stat: 1; // 2
} tDRS_RRB_Stat;
typedef struct {
uint8_t in_error_connect[LIN4_SENSOR_COUNT]; // Конкретное устройство не ответило
uint8_t Error_Connect; // Ошибка LIN шины (ни одно устройство не отвечает)
} SensorLin4CmdBusInput;
typedef struct {
tLinIO *linIo;
osMutexId_t access;
tLinData *linData;
tLoggerInterface *logger;
tCCU_Req d_CCU_Req;
uint64_t Stat[LIN4_SENSOR_COUNT];
//tCCU_Req_For_Model CCU_Req_For_Model_For_Model;
LIN4_CCU_Req_Bus CCU_Req_For_Model_For_Model;
//tAirQS_Stat_For_Model AirQS_Stat_For_Model;
LIN4_AirQS_Stat_Bus AirQS_Stat_For_Model;
//tAroma_Stat_For_Model Aroma_Stat_For_Model;
LIN4_Aroma_Stat_Bus Aroma_Stat_For_Model;
//tIonizer_Stat_For_Model Ionizer_Stat_For_Model;
LIN4_Ionizer_Stat_Bus Ionizer_Stat_For_Model;
//teTXV_fHVAC_Stat_For_Model eTXV_fHVAC_Stat_For_Model;
LIN4_eTXV_fHVAC_Stat_Bus eTXV_fHVAC_Stat_For_Model;
//teTXV_rHVAC_Stat_For_Model eTXV_rHVAC_Stat_For_Model;
LIN4_eTXV_rHVAC_Stat_Bus eTXV_rHVAC_Stat_For_Model;
//teTXV_batChiller_Stat_For_Model eTXV_batChiller_Stat_For_Model;
LIN4_eTXV_batChiller_Stat_Bus eTXV_batChiller_Stat_For_Model;
//teTXV_eeChiller_Stat_For_Model eTXV_eeChiller_Stat_For_Model;
LIN4_eTXV_eeChiller_Stat_Bus eTXV_eeChiller_Stat_For_Model;
SensorLin4CmdBusInput sensorLin4CmdBusInput;
osMessageQueueId_t queue_input_tCCU;
osMessageQueueId_t queue_input_tAirQS;
osMessageQueueId_t queue_input_tAroma;
osMessageQueueId_t queue_input_tIonizer;
osMessageQueueId_t queue_input_teTXV_fHVAC;
osMessageQueueId_t queue_input_teTXV_rHVAC;
osMessageQueueId_t queue_input_teTXV_batChiller;
osMessageQueueId_t queue_input_teTXV_eeChiller;
osMessageQueueId_t queue_input_Lin4_Stat;
uint8_t error_connect[LIN4_SENSOR_COUNT];
uint8_t error_all_connect;
struct {
osThreadId_t id;
uint32_t stack[384];
StaticTask_t controlBlock;
osThreadAttr_t attr;
} threadLin;
} tLin4TaskSensor;
typedef struct {
uint8_t in_COUNT[LIN5_SENSOR_COUNT]; // Уровень (0,1,2,3)
uint8_t in_error_connect[LIN5_SENSOR_COUNT]; // Конкретное устройство не ответило
uint8_t LinRespErr_Stat[LIN5_SENSOR_COUNT]; // Внутренняя ошибка устройства (ошибка коммутации)
uint8_t Err_Stat[LIN5_SENSOR_COUNT]; // Внутренняя ошибка устройства
uint8_t Error_Connect; // Ошибка LIN шины (ни одно устройство не отвечает)
} SensorLin5ButtonCmdBusInput;
typedef struct {
uint8_t LED_COUNT[LIN5_SENSOR_COUNT];
} LinStateSensorModel;
typedef struct {
tLinIO *linIo;
osMutexId_t access;
tLinData *linData;
tLoggerInterface *logger;
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];
tDRS_Stat d_old_DRS_Stat[LIN5_SENSOR_COUNT];
uint8_t LED_COUNT[LIN5_SENSOR_COUNT];
uint8_t LED_OLD_COUNT[LIN5_SENSOR_COUNT];
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 LinRespErr_Stat[LIN5_SENSOR_COUNT];
uint8_t Err_Stat[LIN5_SENSOR_COUNT];
} linStateSensor;
uint8_t error_connect;
tCCU_DRS_Req d_CCU_DRS_Req;
tCCU_DRS_Req d_old_CCU_DRS_Req;
struct {
osThreadId_t id;
uint32_t stack[384];
StaticTask_t controlBlock;
osThreadAttr_t attr;
} threadLin;
} tLin5TaskSensor;
void Lin_4_Init(tLin4TaskSensor *env,
tLinData *linData,
tLinIO *linIO,
tLoggerInterface *logger);
void Lin4_StartThread(tLin4TaskSensor *env);
void Lin4_Input_Set_From_Model(tLin4TaskSensor *env);
void Lin4_Output_Get_From_Model(tLin4TaskSensor *env);
void Lin_5_Init(tLin5TaskSensor *env,
tLinData *linData,
tLinIO *linIO,
tLoggerInterface *logger);
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