Calibration_Stand/backend/Inc/structures.h

77 lines
2.7 KiB
C
Raw Permalink Normal View History

2024-11-26 10:17:15 +07:00
#ifndef STRUCTURES_H
#define STRUCTURES_H
#include <stdint.h>
// Перечисление для состояний машины
typedef enum {
ACTION_WAIT_SENSOR,
ACTION_CHECK_SENSOR_ACTIVATION,
ACTION_GET_SENSOR_ID,
ACTION_SET_PRESSURE,
ACTION_CHECK_PRESSURE,
ACTION_SEND_DATA,
ACTION_RELEASE_PRESSURE,
ACTION_PRINT_RESULTS,
ACTION_WAIT_SENSOR_RELEASE
} ActionState;
// Структура для отправки данных
typedef struct __attribute__((__packed__)) SxTransmit
{
uint8_t payload; // 1 байт | Eva Кадр 0x16
uint8_t type; // 1 байт | Тип кадра (Пример: 0х92)
uint32_t id_sensor; // 4 байта | ID тестируемого датчика
uint16_t pressure; // 2 байта | Давление
int16_t temperature; // 2 байта | Темперетаура
uint32_t timestamp; // 4 байта | Время калибровки
uint8_t otherData[9]; // 9 байтов | Резерв
} SxTransmit;
// Структура для получения данных с FIFO
typedef struct __attribute__((__packed__)) SxResive
{
uint8_t payload; // 1 байт
uint8_t type; // 1 байт
uint8_t data[21];
} SxResive;
// Структура для получения данных с FXTH
typedef struct
{
uint32_t id_sensor; // 4 | ID FXTH (0x914E877F)
uint16_t pressure; // 2 | Давление
int16_t temperature; // 2 | Температура
} EtalonSensor;
// Структура для хранения данных давления
typedef struct {
uint16_t counter_pressure;
uint32_t sum_pressure;
uint16_t min_pressure;
uint16_t max_pressure;
uint16_t avg_pressure;
} PressureData;
// Структура для хранения ошибок с использованием битовых полей
typedef struct {
uint8_t reference_sensor_error : 1; // Бит 0 | Нет ответа от FXTH
uint8_t compressor_pressure_error : 1; // Бит 1 | Низкое давление компрессора
uint8_t pressure_leak_error : 1; // Бит 2 | Утечка давления (травит датчик)
uint8_t sensor_response_error : 1; // Бит 3 | Нет ответа от тестируемого датчика
uint8_t reserved : 4; // Биты 4-7
} ErrorData;
//Структура для хранения данных о тестируемом датчике
typedef struct {
uint32_t id_sensor;
uint16_t pressure;
uint8_t sensor_error;
uint16_t temperature;
uint16_t voltage;
int8_t rssi;
uint16_t etalon_pressure;
} TestSensor;
#endif