diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 44f6c30..dd323a7 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -1,24 +1,24 @@ -{ - "configurations": [ - { - "name": "Linux", - "includePath": [ - "${workspaceFolder}/**", - "/usr/include/gtk-3.0", - "/usr/include/glib-2.0", - "/usr/lib/arm-linux-gnueabihf/glib-2.0/include", - "/usr/include/cairo", - "/usr/include/pango-1.0", - "/usr/include/gdk-pixbuf-2.0", - "/usr/include/atk-1.0", - "/usr/include/harfbuzz/" - ], - "defines": [], - "compilerPath": "/usr/bin/gcc", - "cStandard": "c11", - "cppStandard": "c++17", - "intelliSenseMode": "linux-gcc-x64" - } - ], - "version": 4 +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "/usr/include/gtk-3.0", + "/usr/include/glib-2.0", + "/usr/lib/arm-linux-gnueabihf/glib-2.0/include", + "/usr/include/cairo", + "/usr/include/pango-1.0", + "/usr/include/gdk-pixbuf-2.0", + "/usr/include/atk-1.0", + "/usr/include/harfbuzz/" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c11", + "cppStandard": "c++17", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 761a19f..23740f8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,19 +1,19 @@ -{ - "files.associations": { - "sx1278.h": "c", - "godex500.h": "c", - "curl2.h": "c", - "utils.h": "c", - "main.h": "c", - "gtk.h": "c", - "stend_logic.h": "c", - "mainform.h": "c", - "button_handlers.h": "c", - "ui.h": "c", - "widgets.h": "c", - "ui_controller.h": "c", - "constants.h": "c", - "stend_controller.h": "c", - "error.h": "c" - } +{ + "files.associations": { + "sx1278.h": "c", + "godex500.h": "c", + "curl2.h": "c", + "utils.h": "c", + "main.h": "c", + "gtk.h": "c", + "stend_logic.h": "c", + "mainform.h": "c", + "button_handlers.h": "c", + "ui.h": "c", + "widgets.h": "c", + "ui_controller.h": "c", + "constants.h": "c", + "stend_controller.h": "c", + "error.h": "c" + } } \ No newline at end of file diff --git a/backend/Inc/constants.h b/backend/Inc/constants.h index dc4540a..34f83d6 100644 --- a/backend/Inc/constants.h +++ b/backend/Inc/constants.h @@ -11,4 +11,4 @@ #define PIN_Speaker 26 #define SerialDevice "/dev/ttyUSB0" -#define API_URL "http://192.168.122.120:3000/api/" \ No newline at end of file +#define API_URL "http://192.168.122.161:8000/api/" \ No newline at end of file diff --git a/backend/Libs/Godex500/Src/Godex500.c b/backend/Libs/Godex500/Src/Godex500.c index eefdbc5..656486e 100644 --- a/backend/Libs/Godex500/Src/Godex500.c +++ b/backend/Libs/Godex500/Src/Godex500.c @@ -1,5 +1,5 @@ #include "../Inc/Godex500.h" -const int OFFSET = 131; +const int OFFSET = 0; int GODEX500_setup_serial(const char* device) { int serial_port = open(device, O_RDWR); if (serial_port < 0) { @@ -49,7 +49,8 @@ void GODEX500_print_label(int serial_port, const char* id, const char* model) { snprintf(buffer, sizeof(buffer), "^Q10,2\n" - "^W25^H14\n" + "^W25\n" + "^H14\n" "^P1\n" "^S2\n" "^AT\n" diff --git a/backend/Src/stend_logic.c b/backend/Src/stend_logic.c index 875f316..3d37713 100644 --- a/backend/Src/stend_logic.c +++ b/backend/Src/stend_logic.c @@ -1,405 +1,419 @@ -#include "../Inc/stend_logic.h" -#include "../../controllers/Inc/ui_controller.h" - -// Макросы для различных пороговых значений и констант -#define THRESHOLD_TIME 500 // Время для проверки концевика (в миллисекундах) -#define PRESSURE_TOLERANCE 5 // Допустимая погрешность давления -#define PRESSURE_MEASUREMENTS_DURATION 3000 // Время для измерений давления (в миллисекундах) -#define PRESSURE_NUMBER_OF_CHECKS 10 // Количество проверок давления -#define SEND_FRAME_NUMBER_OF_ATTEMPTS 3 // Количество попыток для отправки кадра калибровки -#define MAX_PRESSURE_THRESHOLD 500 // Максимальное давление в контуре для проверки (5.00 бар) -#define PRESSURE_DROP_TOLERANCE 5 // Допустимое падение давления (0.05 бар) -#define SENSOR_RESPONSE_TIMEOUT 5000 // Таймаут ожидания ответа от датчика (в миллисекундах) - - -// Глобальные переменные -static PressureData pressure_data; -static ErrorData error_data; -static ActionState current_action = ACTION_WAIT_SENSOR; -static EtalonSensor etalonSensor; -static TestSensor testSensor; -static SxTransmit sxTransmit_data; -static SxResive sxResive_data; -static uint8_t rxBuffer[SX1278_PAYLOAD]; -static uint8_t txBuffer[SX1278_PAYLOAD]; -static char LabelText[100]; -static char datetime[64]; -static char post_data[512]; -static char jsonDataBuffer[1024*50]; -static int8_t serial_port; -void reset_pressure_data() { - pressure_data.min_pressure = UINT16_MAX; // Устанавливаем максимальное значение - pressure_data.max_pressure = 0; - pressure_data.counter_pressure = 0; - pressure_data.sum_pressure = 0; - pressure_data.avg_pressure = 0; - log_debug("Данные давления сброшены"); -} - -void reset_sxResive_data() { - memset(&sxResive_data, 0, sizeof(SxResive)); - log_debug("Данные приёма SX1278 сброшены"); -} - -void reset_sxTransmit_data() { - memset(&sxTransmit_data, 0, sizeof(SxTransmit)); - log_debug("Данные передачи SX1278 сброшены"); -} - -void reset_error_data() { - *(uint8_t*)&error_data = 0; // Сбрасываем все биты в 0 - log_debug("Данные ошибок сброшены"); -} - -void reset_test_data() { - memset(&testSensor, 0, sizeof(TestSensor)); - log_debug("Данные тестового датчика сброшены"); -} - -void reset_all_data() { - reset_pressure_data(); - reset_error_data(); - reset_test_data(); - reset_sxTransmit_data(); - reset_sxResive_data(); - log_info("Все данные сброшены"); -} - -bool check_gpio() { - // Проверка сработки концевика в течение THRESHOLD_TIME - uint32_t start_time = millis(); - log_trace("Проверка состояния GPIO"); - while ((millis() - start_time) < THRESHOLD_TIME) { - if (!digitalRead(PIN_KONCEVIK)) { - // Концевик сработал - log_debug("Концевой выключатель активирован"); - return true; - } - delay(100); // Задержка 100 миллисекунд - } - // Концевик не сработал - log_warn("Концевой выключатель не активирован в течение порогового времени"); - return false; -} - -void release_pressure() { - log_info("Спуск давления"); - digitalWrite(PIN_AIR_INPUT, LOW); - digitalWrite(PIN_AIR_OUTPUT, HIGH); - delay(1000); // Подождать 1 секунду - digitalWrite(PIN_AIR_OUTPUT, LOW); -} -void close_Serial(){ - close(serial_port); - log_info("Порт закрыт"); -} - -void read_sx1278_data() { - if (digitalRead(PIN_DIO0) == HIGH) { - SX1278_FIFO_ReadData(rxBuffer); - memcpy(&sxResive_data, rxBuffer, sizeof(SxResive)); - log_trace("Данные получены от SX1278"); - if (sxResive_data.type == 0x90) { - set_etalonSensor_data(); - } - } -} - -void set_testSensor_data(){ - memcpy(&testSensor, &sxResive_data.data, sizeof(TestSensor)); - testSensor.rssi = SX1278_ReadRegister(REG_RSSIVALUE) >> 1; - log_debug("Обновлены данные тестового датчика: ID = %X, Давление = %u", testSensor.id_sensor, testSensor.pressure); -} - -void set_etalonSensor_data(){ - memcpy(&etalonSensor, &sxResive_data.data, sizeof(EtalonSensor)); - snprintf(LabelText, sizeof(LabelText), "Текущее давление: %d.%02d", etalonSensor.pressure / 100, etalonSensor.pressure % 100); - Set_New_LableCurrentPressure(LabelText); - log_trace("Обновлены данные эталонного датчика: Давление = %u", etalonSensor.pressure); -} - -void* stend_logic() { - - log_set_level(LOG_DEBUG); - // Инициализация проекта - uint8_t init = InitializationProject(API_URL, PIN_NSS, PIN_RST, PIN_DIO0, PIN_KONCEVIK, - PIN_AIR_INPUT, PIN_AIR_OUTPUT, &serial_port, SerialDevice); - if (init != 0) { - log_fatal("Ошибка инициализации проекта"); - return NULL; - } - log_info("Проект успешно инициализирован"); - - SX1278_SetMode(SX1278_MODE_RECEIVER); - log_info("SX1278 установлен в режим приёма"); - - while (1) { - // Чтение данных из модуля - read_sx1278_data(); - - // Проверка состояния концевика - if (digitalRead(PIN_KONCEVIK)) { - current_action = ACTION_WAIT_SENSOR; - log_trace("Состояние концевого выключателя изменилось, возвращаемся к ACTION_WAIT_SENSOR"); - } - - switch (current_action) { - case ACTION_WAIT_SENSOR: - Set_New_ButtonMain_Label("Ожидание установки датчика..."); - log_trace("Состояние: ACTION_WAIT_SENSOR"); - if (!digitalRead(PIN_KONCEVIK)) { - delay(500); // Подождать полсекунды - if (!digitalRead(PIN_KONCEVIK)) { - current_action = ACTION_CHECK_SENSOR_ACTIVATION; - log_debug("Датчик обнаружен, переходим к ACTION_CHECK_SENSOR_ACTIVATION"); - } - } - break; - - case ACTION_CHECK_SENSOR_ACTIVATION: - log_trace("Состояние: ACTION_CHECK_SENSOR_ACTIVATION"); - if (check_gpio()) { - Set_New_ButtonMain_Label("Начало цикла проверки..."); - Set_New_LableSensorPressure("Поиск датчика..."); - Set_Color_ButtonMain_white(); - Update_Error_Table(0); - reset_all_data(); - current_action = ACTION_SET_PRESSURE; - log_debug("Проверка GPIO пройдена, переходим к ACTION_SET_PRESSURE"); - } else { - // Если концевик не активен, возвращаемся к ожиданию - current_action = ACTION_WAIT_SENSOR; - log_warn("Проверка GPIO не пройдена, возвращаемся к ACTION_WAIT_SENSOR"); - } - break; - - case ACTION_SET_PRESSURE: - log_trace("Состояние: ACTION_SET_PRESSURE"); - Set_New_ButtonMain_Label("Установка давления..."); - digitalWrite(PIN_AIR_INPUT, HIGH); - log_debug("Вход воздуха активирован"); - delay(2000); // Подождать 2 секунды - digitalWrite(PIN_AIR_INPUT, LOW); - log_debug("Вход воздуха деактивирован"); - current_action = ACTION_GET_SENSOR_ID; - break; - - case ACTION_GET_SENSOR_ID: - log_trace("Состояние: ACTION_GET_SENSOR_ID"); - Set_New_ButtonMain_Label("Поиск датчика..."); - SX1278_SetMode(SX1278_MODE_RECEIVER); - bool sensor_response = false; - uint32_t start_time = millis(); - while ((millis() - start_time) < SENSOR_RESPONSE_TIMEOUT * 3) { - read_sx1278_data(); - - if (sxResive_data.type == 0x41) { - set_testSensor_data(); - snprintf(LabelText, sizeof(LabelText), "Датчик найден ID: %X", testSensor.id_sensor); - Set_New_LableSensorPressure(LabelText); - sensor_response = true; - break; - } - - delay(10); - } - if (!sensor_response) { - log_error("Не удалось получить ID датчика в течение таймаута"); - current_action = ACTION_WAIT_SENSOR_RELEASE; - Set_New_LableSensorPressure("Датчик не найден"); - release_pressure(); - } - else{ - current_action = ACTION_CHECK_PRESSURE; - log_debug("ID тестового датчика получен %X, переходим к ACTION_CHECK_PRESSURE", testSensor.id_sensor); - } - break; - - case ACTION_CHECK_PRESSURE: { - log_trace("Состояние: ACTION_CHECK_PRESSURE"); - Set_New_ButtonMain_Label("Проверка давления..."); - delay(2000); - bool received_data = false; - - for (int i = 0; i < PRESSURE_NUMBER_OF_CHECKS; i++) { - // Чтение данных из модуля - read_sx1278_data(); - - if (sxResive_data.type == 0x90) { - uint16_t pressure = etalonSensor.pressure; - pressure_data.sum_pressure += pressure; - pressure_data.counter_pressure++; - - if (pressure < pressure_data.min_pressure) - pressure_data.min_pressure = pressure; - - if (pressure > pressure_data.max_pressure) - pressure_data.max_pressure = pressure; - - received_data = true; - log_trace("Данные давления собраны: %u", pressure); - } - - delay(500); - } - - current_action = ACTION_SEND_DATA; - if (!received_data) { - // Не получили данных от эталонного датчика - error_data.reference_sensor_error = 1; // Устанавливаем бит ошибки - log_error("Нет данных от эталонного датчика"); - current_action = ACTION_RELEASE_PRESSURE; - break; - } - - // Расчет среднего значения давления - pressure_data.avg_pressure = pressure_data.sum_pressure / pressure_data.counter_pressure; - - // Проверка максимального давления - if (pressure_data.max_pressure < MAX_PRESSURE_THRESHOLD) { - error_data.compressor_pressure_error = 1; // Устанавливаем бит ошибки - log_error("Недостаточное давление компрессора"); - current_action = ACTION_RELEASE_PRESSURE; - } - - // Проверка падения давления - if ((pressure_data.max_pressure - pressure_data.min_pressure) > PRESSURE_DROP_TOLERANCE) { - error_data.pressure_leak_error = 1; // Устанавливаем бит ошибки - log_error("Травит датчик"); - current_action = ACTION_RELEASE_PRESSURE; - } - - log_info("Данные давления рассчитаны: MIN = %u, MAX = %u, AVG = %u", - pressure_data.min_pressure, - pressure_data.max_pressure, - pressure_data.avg_pressure); - - break; - } - - case ACTION_SEND_DATA: { - log_trace("Состояние: ACTION_SEND_DATA"); - // Отправка кадра на датчик, несколько попыток - bool sensor_response = false; - for (int i = 0; i < SEND_FRAME_NUMBER_OF_ATTEMPTS; i++) { - log_info("Попытка отправки данных №%d", i + 1); - snprintf(LabelText, sizeof(LabelText), "Отправка данных на датчик...%d/%d", i + 1, SEND_FRAME_NUMBER_OF_ATTEMPTS); - Set_New_ButtonMain_Label(LabelText); - - // Формирование кадра для отправки - sxTransmit_data.payload = 0x16; - sxTransmit_data.type = 0x91; - sxTransmit_data.id_sensor = testSensor.id_sensor; - sxTransmit_data.pressure = pressure_data.avg_pressure; - sxTransmit_data.temperature = 0x0000; - sxTransmit_data.timestamp = (int)time(NULL); - - uint8_t array[9] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}; - memcpy(sxTransmit_data.otherData, array, sizeof(array)); - - SX1278_SetMode(SX1278_MODE_TRANSMITTER); - log_trace("SX1278 установлен в режим передачи"); - for (int j = 0; j < 2; j++) { - SX1278_FIFO_SendData(&sxTransmit_data); - log_debug("Калибровочный кадр отправлен (%d/2)", j + 1); - delay(100); - } - SX1278_SetMode(SX1278_MODE_RECEIVER); - log_trace("SX1278 возвращён в режим приёма"); - - // Ожидание ответа - uint32_t start_time = millis(); - while ((millis() - start_time) < SENSOR_RESPONSE_TIMEOUT * 2) { - read_sx1278_data(); - - if (sxResive_data.type == 0x92) { - set_testSensor_data(); - snprintf(LabelText, sizeof(LabelText), "Давленние датчика: %d.%02d", testSensor.pressure / 100, testSensor.pressure % 100); - Set_New_LableSensorPressure(LabelText); - sensor_response = true; - log_info("Получен ответ от тестового датчика"); - break; - } - - delay(100); - } - - if (sensor_response) { - break; - } else { - log_warn("Нет ответа от тестового датчика на попытке %d", i + 1); - } - } - - if (!sensor_response) { - error_data.sensor_response_error = 1; // Устанавливаем бит ошибки - log_error("Нет ответа от испытуемого датчика"); - } - - current_action = ACTION_RELEASE_PRESSURE; - break; - } - - case ACTION_RELEASE_PRESSURE: - log_trace("Состояние: ACTION_RELEASE_PRESSURE"); - Set_New_ButtonMain_Label("Спуск давления..."); - release_pressure(); - current_action = ACTION_PRINT_RESULTS; - break; - - case ACTION_PRINT_RESULTS: - log_trace("Состояние: ACTION_PRINT_RESULTS"); - static uint8_t* id_sensor_str; - uint8_t error_code = *(uint8_t*)&error_data; - - memset(&jsonDataBuffer, 0, sizeof(jsonDataBuffer)); - CURL_GET_Request(concat_strings(API_URL, concat_strings("get-serial-data/", NumToHexString(testSensor.id_sensor))), &jsonDataBuffer); - cJSON *json = cJSON_Parse(jsonDataBuffer); - log_debug("result: %s", jsonDataBuffer); - cJSON *dataJSON = cJSON_GetObject(json, "data"); - log_debug("Model id: %s\n", cJSON_GetObject(dataJSON, "model_id")->valuestring); - - id_sensor_str = cJSON_GetObject(dataJSON, "serial_num")->valuestring; - log_info("%s", id_sensor_str); - log_info("Код ошибки: %u", error_code); - if (error_code == 0) { - log_info("Тест пройден, датчик соответствует спецификациям"); - memset(&jsonDataBuffer, 0, sizeof(jsonDataBuffer)); - CURL_GET_Request(concat_strings(API_URL, concat_strings("get-data/device_model/", cJSON_GetObject(dataJSON, "model_id")->valuestring)), &jsonDataBuffer); - json = cJSON_Parse(jsonDataBuffer); - dataJSON = cJSON_GetObject(json, "data"); - log_debug("Model name: %s\n", cJSON_GetObject(dataJSON, "name")->valuestring); - - GODEX500_print_label(serial_port, NumToHexString(testSensor.id_sensor), cJSON_GetObject(dataJSON, "name")->valuestring); - Set_Color_ButtonMain_green(); - } else { - log_error("Тест не пройден, датчик не прошёл все проверки"); - Set_Color_ButtonMain_red(); - snprintf(LabelText, sizeof(LabelText), "Ошибка тестирования. Код: %u", error_code); - Set_New_LableSensorPressure(LabelText); - Update_Error_Table(error_code); - } - get_current_time(datetime); - snprintf(post_data, sizeof(post_data), - "{\"device_serial_num\": \"%s\", \"type\": \"calibrate\", \"date\": \"%s\", \"json_data\": {\"code\": %d}}", id_sensor_str, datetime, error_code); - CURL_POST_Request(concat_strings(API_URL, "insert-data/log"), (uint8_t *)post_data); - current_action = ACTION_WAIT_SENSOR_RELEASE; - break; - - case ACTION_WAIT_SENSOR_RELEASE: - log_trace("Состояние: ACTION_WAIT_SENSOR_RELEASE"); - Set_New_ButtonMain_Label("Ожидание снятия датчика..."); - // Здесь можно добавить логику ожидания снятия датчика - break; - - default: - log_warn("Обнаружено неизвестное состояние, возвращаемся к ACTION_WAIT_SENSOR"); - current_action = ACTION_WAIT_SENSOR; - break; - } - - delay(30); // Задержка между циклами - } - - return NULL; -} +#include "../Inc/stend_logic.h" +#include "../../controllers/Inc/ui_controller.h" + +// Макросы для различных пороговых значений и констант +#define THRESHOLD_TIME 500 // Время для проверки концевика (в миллисекундах) +#define PRESSURE_TOLERANCE 5 // Допустимая погрешность давления +#define PRESSURE_MEASUREMENTS_DURATION 3000 // Время для измерений давления (в миллисекундах) +#define PRESSURE_NUMBER_OF_CHECKS 10 // Количество проверок давления +#define SEND_FRAME_NUMBER_OF_ATTEMPTS 3 // Количество попыток для отправки кадра калибровки +#define MAX_PRESSURE_THRESHOLD 500 // Максимальное давление в контуре для проверки (5.00 бар) +#define PRESSURE_DROP_TOLERANCE 5 // Допустимое падение давления (0.05 бар) +#define SENSOR_RESPONSE_TIMEOUT 5000 // Таймаут ожидания ответа от датчика (в миллисекундах) + + +// Глобальные переменные +static PressureData pressure_data; +static ErrorData error_data; +static ActionState current_action = ACTION_WAIT_SENSOR; +static EtalonSensor etalonSensor; +static TestSensor testSensor; +static SxTransmit sxTransmit_data; +static SxResive sxResive_data; +static uint8_t rxBuffer[SX1278_PAYLOAD]; +static uint8_t txBuffer[SX1278_PAYLOAD]; +static char LabelText[100]; +static char datetime[64]; +static char post_data[512]; +static char jsonDataBuffer[1024*50]; +static int8_t serial_port; +void reset_pressure_data() { + pressure_data.min_pressure = UINT16_MAX; // Устанавливаем максимальное значение + pressure_data.max_pressure = 0; + pressure_data.counter_pressure = 0; + pressure_data.sum_pressure = 0; + pressure_data.avg_pressure = 0; + log_debug("Данные давления сброшены"); +} + +void reset_sxResive_data() { + memset(&sxResive_data, 0, sizeof(SxResive)); + log_debug("Данные приёма SX1278 сброшены"); +} + +void reset_sxTransmit_data() { + memset(&sxTransmit_data, 0, sizeof(SxTransmit)); + log_debug("Данные передачи SX1278 сброшены"); +} + +void reset_error_data() { + *(uint8_t*)&error_data = 0; // Сбрасываем все биты в 0 + log_debug("Данные ошибок сброшены"); +} + +void reset_test_data() { + memset(&testSensor, 0, sizeof(TestSensor)); + log_debug("Данные тестового датчика сброшены"); +} + +void reset_all_data() { + reset_pressure_data(); + reset_error_data(); + reset_test_data(); + reset_sxTransmit_data(); + reset_sxResive_data(); + log_info("Все данные сброшены"); +} + +bool check_gpio() { + // Проверка сработки концевика в течение THRESHOLD_TIME + uint32_t start_time = millis(); + log_trace("Проверка состояния GPIO"); + while ((millis() - start_time) < THRESHOLD_TIME) { + if (!digitalRead(PIN_KONCEVIK)) { + // Концевик сработал + log_debug("Концевой выключатель активирован"); + return true; + } + delay(100); // Задержка 100 миллисекунд + } + // Концевик не сработал + log_warn("Концевой выключатель не активирован в течение порогового времени"); + return false; +} + +void release_pressure() { + log_info("Спуск давления"); + digitalWrite(PIN_AIR_INPUT, LOW); + digitalWrite(PIN_AIR_OUTPUT, HIGH); + delay(1000); // Подождать 1 секунду + digitalWrite(PIN_AIR_OUTPUT, LOW); +} +void close_Serial(){ + close(serial_port); + log_info("Порт закрыт"); +} + +void read_sx1278_data() { + if (digitalRead(PIN_DIO0) == HIGH) { + SX1278_FIFO_ReadData(rxBuffer); + memcpy(&sxResive_data, rxBuffer, sizeof(SxResive)); + log_trace("Данные получены от SX1278"); + if (sxResive_data.type == 0x90) { + set_etalonSensor_data(); + } + } +} + +void set_testSensor_data(){ + memcpy(&testSensor, &sxResive_data.data, sizeof(TestSensor)); + testSensor.rssi = SX1278_ReadRegister(REG_RSSIVALUE) >> 1; + log_debug("Обновлены данные тестового датчика: ID = %X, Давление = %u", testSensor.id_sensor, testSensor.pressure); +} + +void set_etalonSensor_data(){ + memcpy(&etalonSensor, &sxResive_data.data, sizeof(EtalonSensor)); + snprintf(LabelText, sizeof(LabelText), "Текущее давление: %d.%02d", etalonSensor.pressure / 100, etalonSensor.pressure % 100); + Set_New_LableCurrentPressure(LabelText); + log_trace("Обновлены данные эталонного датчика: Давление = %u", etalonSensor.pressure); +} + +char* lastModelName = ""; +void reprintSticker(){ + if(testSensor.id_sensor > 0){ + GODEX500_print_label(serial_port, NumToHexString(testSensor.id_sensor), lastModelName); + } +} + +void* stend_logic() { + + log_set_level(LOG_DEBUG); + // Инициализация проекта + uint8_t init = InitializationProject(API_URL, PIN_NSS, PIN_RST, PIN_DIO0, PIN_KONCEVIK, + PIN_AIR_INPUT, PIN_AIR_OUTPUT, &serial_port, SerialDevice); + if (init != 0) { + log_fatal("Ошибка инициализации проекта"); + return NULL; + } + log_info("Проект успешно инициализирован"); + + SX1278_SetMode(SX1278_MODE_RECEIVER); + log_info("SX1278 установлен в режим приёма"); + + while (1) { + // Чтение данных из модуля + read_sx1278_data(); + + // Проверка состояния концевика + if (digitalRead(PIN_KONCEVIK)) { + current_action = ACTION_WAIT_SENSOR; + log_trace("Состояние концевого выключателя изменилось, возвращаемся к ACTION_WAIT_SENSOR"); + } + + switch (current_action) { + case ACTION_WAIT_SENSOR: + Set_New_ButtonMain_Label("Ожидание установки датчика..."); + log_trace("Состояние: ACTION_WAIT_SENSOR"); + if (!digitalRead(PIN_KONCEVIK)) { + delay(500); // Подождать полсекунды + if (!digitalRead(PIN_KONCEVIK)) { + current_action = ACTION_CHECK_SENSOR_ACTIVATION; + log_debug("Датчик обнаружен, переходим к ACTION_CHECK_SENSOR_ACTIVATION"); + } + } + break; + + case ACTION_CHECK_SENSOR_ACTIVATION: + log_trace("Состояние: ACTION_CHECK_SENSOR_ACTIVATION"); + if (check_gpio()) { + Set_New_ButtonMain_Label("Начало цикла проверки..."); + Set_New_LableSensorPressure("Поиск датчика..."); + Set_Color_ButtonMain_white(); + Update_Error_Table(0); + reset_all_data(); + current_action = ACTION_SET_PRESSURE; + log_debug("Проверка GPIO пройдена, переходим к ACTION_SET_PRESSURE"); + } else { + // Если концевик не активен, возвращаемся к ожиданию + current_action = ACTION_WAIT_SENSOR; + log_warn("Проверка GPIO не пройдена, возвращаемся к ACTION_WAIT_SENSOR"); + } + break; + + case ACTION_SET_PRESSURE: + log_trace("Состояние: ACTION_SET_PRESSURE"); + Set_New_ButtonMain_Label("Установка давления..."); + digitalWrite(PIN_AIR_INPUT, HIGH); + log_debug("Вход воздуха активирован"); + delay(2000); // Подождать 2 секунды + digitalWrite(PIN_AIR_INPUT, LOW); + log_debug("Вход воздуха деактивирован"); + current_action = ACTION_GET_SENSOR_ID; + break; + + case ACTION_GET_SENSOR_ID: + log_trace("Состояние: ACTION_GET_SENSOR_ID"); + Set_New_ButtonMain_Label("Поиск датчика..."); + SX1278_SetMode(SX1278_MODE_RECEIVER); + bool sensor_response = false; + uint32_t start_time = millis(); + while ((millis() - start_time) < SENSOR_RESPONSE_TIMEOUT * 3) { + read_sx1278_data(); + + if (sxResive_data.type == 0x41) { + set_testSensor_data(); + snprintf(LabelText, sizeof(LabelText), "Датчик найден ID: %X", testSensor.id_sensor); + Set_New_LableSensorPressure(LabelText); + sensor_response = true; + break; + } + + delay(10); + } + if (!sensor_response) { + log_error("Не удалось получить ID датчика в течение таймаута"); + current_action = ACTION_WAIT_SENSOR_RELEASE; + Set_New_LableSensorPressure("Датчик не найден"); + release_pressure(); + } + else{ + current_action = ACTION_CHECK_PRESSURE; + log_debug("ID тестового датчика получен %X, переходим к ACTION_CHECK_PRESSURE", testSensor.id_sensor); + } + break; + + case ACTION_CHECK_PRESSURE: { + log_trace("Состояние: ACTION_CHECK_PRESSURE"); + Set_New_ButtonMain_Label("Проверка давления..."); + delay(2000); + bool received_data = false; + + for (int i = 0; i < PRESSURE_NUMBER_OF_CHECKS; i++) { + // Чтение данных из модуля + read_sx1278_data(); + + if (sxResive_data.type == 0x90) { + uint16_t pressure = etalonSensor.pressure; + pressure_data.sum_pressure += pressure; + pressure_data.counter_pressure++; + + if (pressure < pressure_data.min_pressure) + pressure_data.min_pressure = pressure; + + if (pressure > pressure_data.max_pressure) + pressure_data.max_pressure = pressure; + + received_data = true; + log_trace("Данные давления собраны: %u", pressure); + } + + delay(500); + } + + current_action = ACTION_SEND_DATA; + if (!received_data) { + // Не получили данных от эталонного датчика + error_data.reference_sensor_error = 1; // Устанавливаем бит ошибки + log_error("Нет данных от эталонного датчика"); + current_action = ACTION_RELEASE_PRESSURE; + break; + } + + // Расчет среднего значения давления + pressure_data.avg_pressure = pressure_data.sum_pressure / pressure_data.counter_pressure; + + // Проверка максимального давления + if (pressure_data.max_pressure < MAX_PRESSURE_THRESHOLD) { + error_data.compressor_pressure_error = 1; // Устанавливаем бит ошибки + log_error("Недостаточное давление компрессора"); + current_action = ACTION_RELEASE_PRESSURE; + } + + // Проверка падения давления + if ((pressure_data.max_pressure - pressure_data.min_pressure) > PRESSURE_DROP_TOLERANCE) { + error_data.pressure_leak_error = 1; // Устанавливаем бит ошибки + log_error("Травит датчик"); + current_action = ACTION_RELEASE_PRESSURE; + } + + log_info("Данные давления рассчитаны: MIN = %u, MAX = %u, AVG = %u", + pressure_data.min_pressure, + pressure_data.max_pressure, + pressure_data.avg_pressure); + + break; + } + + case ACTION_SEND_DATA: { + log_trace("Состояние: ACTION_SEND_DATA"); + // Отправка кадра на датчик, несколько попыток + bool sensor_response = false; + for (int i = 0; i < SEND_FRAME_NUMBER_OF_ATTEMPTS; i++) { + log_info("Попытка отправки данных №%d", i + 1); + snprintf(LabelText, sizeof(LabelText), "Отправка данных на датчик...%d/%d", i + 1, SEND_FRAME_NUMBER_OF_ATTEMPTS); + Set_New_ButtonMain_Label(LabelText); + + // Формирование кадра для отправки + sxTransmit_data.payload = 0x16; + sxTransmit_data.type = 0x91; + sxTransmit_data.id_sensor = testSensor.id_sensor; + sxTransmit_data.pressure = pressure_data.avg_pressure; + sxTransmit_data.temperature = 0x0000; + sxTransmit_data.timestamp = (int)time(NULL); + + uint8_t array[9] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}; + memcpy(sxTransmit_data.otherData, array, sizeof(array)); + + SX1278_SetMode(SX1278_MODE_TRANSMITTER); + log_trace("SX1278 установлен в режим передачи"); + for (int j = 0; j < 2; j++) { + SX1278_FIFO_SendData(&sxTransmit_data); + log_debug("Калибровочный кадр отправлен (%d/2)", j + 1); + delay(100); + } + SX1278_SetMode(SX1278_MODE_RECEIVER); + log_trace("SX1278 возвращён в режим приёма"); + + // Ожидание ответа + uint32_t start_time = millis(); + while ((millis() - start_time) < SENSOR_RESPONSE_TIMEOUT * 2) { + read_sx1278_data(); + + if (sxResive_data.type == 0x92) { + set_testSensor_data(); + snprintf(LabelText, sizeof(LabelText), "Давленние датчика: %d.%02d", testSensor.pressure / 100, testSensor.pressure % 100); + Set_New_LableSensorPressure(LabelText); + sensor_response = true; + log_info("Получен ответ от тестового датчика"); + break; + } + + delay(100); + } + + if (sensor_response) { + break; + } else { + log_warn("Нет ответа от тестового датчика на попытке %d", i + 1); + } + } + + if (!sensor_response) { + error_data.sensor_response_error = 1; // Устанавливаем бит ошибки + log_error("Нет ответа от испытуемого датчика"); + } + + current_action = ACTION_RELEASE_PRESSURE; + break; + } + + case ACTION_RELEASE_PRESSURE: + log_trace("Состояние: ACTION_RELEASE_PRESSURE"); + Set_New_ButtonMain_Label("Спуск давления..."); + release_pressure(); + current_action = ACTION_PRINT_RESULTS; + break; + + case ACTION_PRINT_RESULTS: + log_trace("Состояние: ACTION_PRINT_RESULTS"); + cJSON *json; + static char* id_sensor_str; + id_sensor_str = NumToHexString(testSensor.id_sensor); + log_info("%s", id_sensor_str); + + uint8_t error_code = *(uint8_t*)&error_data; + log_info("Код ошибки: %u", error_code); + uint32_t device_id; + if (error_code == 0) { + log_info("Тест пройден, датчик соответствует спецификациям"); + char url[256]; + snprintf(url, sizeof(url), "%sdevice_model/%d/device_serial_number/", API_URL, testSensor.id_sensor); + memset(&jsonDataBuffer, 0, sizeof(jsonDataBuffer)); + CURL_GET_Request((uint8_t *)url, &jsonDataBuffer); + json = cJSON_Parse(jsonDataBuffer); + log_debug("Model name: %s\n", cJSON_GetObject(json, "name")->valuestring); + lastModelName = cJSON_GetObject(json, "name")->valuestring; + GODEX500_print_label(serial_port, NumToHexString(testSensor.id_sensor), lastModelName); + + snprintf(url, sizeof(url), "%sdevice/%d/serial_number/", API_URL, testSensor.id_sensor); + memset(&jsonDataBuffer, 0, sizeof(jsonDataBuffer)); + CURL_GET_Request((uint8_t *)url, &jsonDataBuffer); + json = cJSON_Parse(jsonDataBuffer); + + device_id = cJSON_GetObject(json, "id")->valueint; + + + Set_Color_ButtonMain_green(); + } else { + log_error("Тест не пройден, датчик не прошёл все проверки"); + Set_Color_ButtonMain_red(); + snprintf(LabelText, sizeof(LabelText), "Ошибка тестирования. Код: %u", error_code); + Set_New_LableSensorPressure(LabelText); + Update_Error_Table(error_code); + } + get_current_time(datetime); + char url[256]; + snprintf(url, sizeof(url), "%sinsert-log/", API_URL); + snprintf(post_data, sizeof(post_data), + "{\"device_id\": \"%d\", \"type\": \"calibrate\", \"date\": \"%s\", \"data\": {\"code\": %d}}", device_id, datetime, error_code); + CURL_POST_Request(url, (uint8_t *)post_data); + current_action = ACTION_WAIT_SENSOR_RELEASE; + break; + + case ACTION_WAIT_SENSOR_RELEASE: + log_trace("Состояние: ACTION_WAIT_SENSOR_RELEASE"); + Set_New_ButtonMain_Label("Ожидание снятия датчика..."); + // Здесь можно добавить логику ожидания снятия датчика + break; + + default: + log_warn("Обнаружено неизвестное состояние, возвращаемся к ACTION_WAIT_SENSOR"); + current_action = ACTION_WAIT_SENSOR; + break; + } + + delay(30); // Задержка между циклами + } + + return NULL; +} diff --git a/controllers/Inc/stend_controller.h b/controllers/Inc/stend_controller.h index f42a861..01f3729 100644 --- a/controllers/Inc/stend_controller.h +++ b/controllers/Inc/stend_controller.h @@ -1,2 +1,3 @@ void _ResetPressure(); -void _CloseSerial(); \ No newline at end of file +void _CloseSerial(); +void _ReprintSticker(); \ No newline at end of file diff --git a/controllers/Src/stend_controller.c b/controllers/Src/stend_controller.c index bbcee2c..6ac812d 100644 --- a/controllers/Src/stend_controller.c +++ b/controllers/Src/stend_controller.c @@ -7,4 +7,7 @@ void _ResetPressure(){ void _CloseSerial(){ close_Serial(); } +void _ReprintSticker(){ + reprintSticker(); +} diff --git a/ui/Inc/MainForm.h b/ui/Inc/MainForm.h index a4d7bdf..71eca33 100644 --- a/ui/Inc/MainForm.h +++ b/ui/Inc/MainForm.h @@ -1,6 +1,6 @@ -#include -#include -#include "../Inc/ui.h" -#include "../Inc/button_handlers.h" -#include "../../controllers/Inc/stend_controller.h" +#include +#include +#include "../Inc/ui.h" +#include "../Inc/button_handlers.h" +#include "../../controllers/Inc/stend_controller.h" #include "widgets.h" \ No newline at end of file diff --git a/ui/Inc/button_handlers.h b/ui/Inc/button_handlers.h index 76cfca6..86e5f51 100644 --- a/ui/Inc/button_handlers.h +++ b/ui/Inc/button_handlers.h @@ -1,11 +1,11 @@ -#ifndef BUTTON_HANDLERS_H -#define BUTTON_HANDLERS_H - -#include -#include "button_styles.h" - -// Декларация функции для отключения кнопки -void ButtonMain_Handler(GtkButton *button); -void ButtonReprint_Handler(GtkButton *button); - -#endif // BUTTON_HANDLERS_H +#ifndef BUTTON_HANDLERS_H +#define BUTTON_HANDLERS_H + +#include +#include "button_styles.h" + +// Декларация функции для отключения кнопки +void ButtonMain_Handler(GtkButton *button); +void ButtonReprint_Handler(GtkButton *button); + +#endif // BUTTON_HANDLERS_H diff --git a/ui/Inc/ui.h b/ui/Inc/ui.h index 80f72bb..e599936 100644 --- a/ui/Inc/ui.h +++ b/ui/Inc/ui.h @@ -1,17 +1,17 @@ -#ifndef UI_H -#define UI_H - -#include "../Inc/button_handlers.h" -#include "widgets.h" -#include - -gboolean update_ButtonMain_label(gpointer data); -gboolean update_LableCurrentPressure(gpointer data); -gboolean update_LableSensorPressure(gpointer data); - -gboolean set_Color_ButtonMain_red(gpointer data); -gboolean set_Color_ButtonMain_green(gpointer data); -gboolean set_Color_ButtonMain_white(gpointer data); - -gboolean update_Error_Table(gpointer data); -#endif // UI_H +#ifndef UI_H +#define UI_H + +#include "../Inc/button_handlers.h" +#include "widgets.h" +#include + +gboolean update_ButtonMain_label(gpointer data); +gboolean update_LableCurrentPressure(gpointer data); +gboolean update_LableSensorPressure(gpointer data); + +gboolean set_Color_ButtonMain_red(gpointer data); +gboolean set_Color_ButtonMain_green(gpointer data); +gboolean set_Color_ButtonMain_white(gpointer data); + +gboolean update_Error_Table(gpointer data); +#endif // UI_H diff --git a/ui/Inc/widgets.h b/ui/Inc/widgets.h index 3f6e1e5..ce3350d 100644 --- a/ui/Inc/widgets.h +++ b/ui/Inc/widgets.h @@ -1,27 +1,27 @@ -#ifndef WIDGETS_H -#define WIDGETS_H - -#include - - -// Структура widgets должна быть объявлена глобально или передаваться между функциями -typedef struct { - GtkWidget *GridBox; - GtkWidget *LabelCurrentPressure; - GtkWidget *LabelSensorPressure; - GtkWidget *LabelRequiredPressure; - GtkWidget *ButtonMain; - GtkWidget *ButtonReprint; - GtkWidget *ErrorTreeView; // Представление таблицы ошибок - GtkListStore *ErrorListStore; // Модель данных для таблицы ошибок - uint8_t gpio_triggered; -} Widgets; - -typedef struct { - GtkWidget *button; - const char *label_text; -} ButtonUpdateData; - -extern Widgets widgets; - +#ifndef WIDGETS_H +#define WIDGETS_H + +#include + + +// Структура widgets должна быть объявлена глобально или передаваться между функциями +typedef struct { + GtkWidget *GridBox; + GtkWidget *LabelCurrentPressure; + GtkWidget *LabelSensorPressure; + GtkWidget *LabelRequiredPressure; + GtkWidget *ButtonMain; + GtkWidget *ButtonReprint; + GtkWidget *ErrorTreeView; // Представление таблицы ошибок + GtkListStore *ErrorListStore; // Модель данных для таблицы ошибок + uint8_t gpio_triggered; +} Widgets; + +typedef struct { + GtkWidget *button; + const char *label_text; +} ButtonUpdateData; + +extern Widgets widgets; + #endif // WIDGETS_H \ No newline at end of file diff --git a/ui/Src/MainForm.c b/ui/Src/MainForm.c index dc83e60..f66e2db 100644 --- a/ui/Src/MainForm.c +++ b/ui/Src/MainForm.c @@ -1,58 +1,58 @@ -#include "../Inc/MainForm.h" -#include -#include -#include "../Inc/error.h" - - -void close_main_window(void){ - _ResetPressure(); - _CloseSerial(); - gtk_main_quit(); -} - -GtkWidget* create_main_window() { - GtkWidget *window; - widgets.gpio_triggered = 0; - widgets.ErrorTreeView = NULL; - widgets.ErrorListStore = NULL; - - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(window), "Стенд проверки датчиков"); - gtk_container_set_border_width(GTK_CONTAINER(window), 50); - gtk_window_set_default_size(GTK_WINDOW(window), 600, 400); - g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(close_main_window), NULL); - - widgets.GridBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); - gtk_container_add(GTK_CONTAINER(window), widgets.GridBox); - - GtkWidget *label_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); - gtk_box_pack_start(GTK_BOX(widgets.GridBox), label_box, FALSE, FALSE, 0); - - widgets.LabelCurrentPressure = gtk_label_new("Текущее давление: 0.0"); - gtk_box_pack_start(GTK_BOX(label_box), widgets.LabelCurrentPressure, FALSE, FALSE, 0); - gtk_widget_set_valign(widgets.LabelCurrentPressure, GTK_ALIGN_START); - - widgets.LabelSensorPressure = gtk_label_new("Датчик не найден"); - gtk_box_pack_start(GTK_BOX(label_box), widgets.LabelSensorPressure, FALSE, FALSE, 0); - gtk_widget_set_valign(widgets.LabelSensorPressure, GTK_ALIGN_START); - - // widgets.LabelRequiredPressure = gtk_label_new("Необходимое давление: 6.4"); - // gtk_box_pack_start(GTK_BOX(label_box), widgets.LabelRequiredPressure, FALSE, FALSE, 0); - // gtk_widget_set_valign(widgets.LabelRequiredPressure, GTK_ALIGN_START); - widgets.ButtonMain = gtk_button_new_with_label("Начать работу"); - gtk_box_pack_start(GTK_BOX(widgets.GridBox), widgets.ButtonMain, FALSE, FALSE, 0); - g_signal_connect(GTK_BUTTON(widgets.ButtonMain), "clicked", G_CALLBACK(ButtonMain_Handler), NULL); - - widgets.ButtonReprint = gtk_button_new_with_label("Повторная печать"); - gtk_box_pack_start(GTK_BOX(widgets.GridBox), widgets.ButtonReprint, FALSE, FALSE, 0); - g_signal_connect(GTK_BUTTON(widgets.ButtonReprint), "clicked", G_CALLBACK(ButtonReprint_Handler), NULL); - - // Создаем таблицу ошибок - initialize_error_table(); - update_error_table(0); - set_button_color_white(widgets.ButtonMain); - - gtk_widget_show_all(window); - - return window; +#include "../Inc/MainForm.h" +#include +#include +#include "../Inc/error.h" + + +void close_main_window(void){ + _ResetPressure(); + _CloseSerial(); + gtk_main_quit(); +} + +GtkWidget* create_main_window() { + GtkWidget *window; + widgets.gpio_triggered = 0; + widgets.ErrorTreeView = NULL; + widgets.ErrorListStore = NULL; + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "Стенд проверки датчиков"); + gtk_container_set_border_width(GTK_CONTAINER(window), 50); + gtk_window_set_default_size(GTK_WINDOW(window), 600, 400); + g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(close_main_window), NULL); + + widgets.GridBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); + gtk_container_add(GTK_CONTAINER(window), widgets.GridBox); + + GtkWidget *label_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); + gtk_box_pack_start(GTK_BOX(widgets.GridBox), label_box, FALSE, FALSE, 0); + + widgets.LabelCurrentPressure = gtk_label_new("Текущее давление: 0.0"); + gtk_box_pack_start(GTK_BOX(label_box), widgets.LabelCurrentPressure, FALSE, FALSE, 0); + gtk_widget_set_valign(widgets.LabelCurrentPressure, GTK_ALIGN_START); + + widgets.LabelSensorPressure = gtk_label_new("Датчик не найден"); + gtk_box_pack_start(GTK_BOX(label_box), widgets.LabelSensorPressure, FALSE, FALSE, 0); + gtk_widget_set_valign(widgets.LabelSensorPressure, GTK_ALIGN_START); + + // widgets.LabelRequiredPressure = gtk_label_new("Необходимое давление: 6.4"); + // gtk_box_pack_start(GTK_BOX(label_box), widgets.LabelRequiredPressure, FALSE, FALSE, 0); + // gtk_widget_set_valign(widgets.LabelRequiredPressure, GTK_ALIGN_START); + widgets.ButtonMain = gtk_button_new_with_label("Начать работу"); + gtk_box_pack_start(GTK_BOX(widgets.GridBox), widgets.ButtonMain, FALSE, FALSE, 0); + g_signal_connect(GTK_BUTTON(widgets.ButtonMain), "clicked", G_CALLBACK(ButtonMain_Handler), NULL); + + widgets.ButtonReprint = gtk_button_new_with_label("Повторная печать"); + gtk_box_pack_start(GTK_BOX(widgets.GridBox), widgets.ButtonReprint, FALSE, FALSE, 0); + g_signal_connect(GTK_BUTTON(widgets.ButtonReprint), "clicked", G_CALLBACK(ButtonReprint_Handler), NULL); + + // Создаем таблицу ошибок + initialize_error_table(); + update_error_table(0); + set_button_color_white(widgets.ButtonMain); + + gtk_widget_show_all(window); + + return window; } \ No newline at end of file diff --git a/ui/Src/button_handlers.c b/ui/Src/button_handlers.c index b89d70f..831a1f5 100644 --- a/ui/Src/button_handlers.c +++ b/ui/Src/button_handlers.c @@ -1,11 +1,11 @@ -#include "../Inc/button_handlers.h" - - -// Функция для изменения цвета кнопки и отключения её -void ButtonMain_Handler(GtkButton *button) { - set_button_color_white(button); -} -void ButtonReprint_Handler(GtkButton *button){ - g_print("Button Reprint Pressed\n"); -} - +#include "../Inc/button_handlers.h" +#include "../../controllers/Inc/stend_controller.h" + +// Функция для изменения цвета кнопки и отключения её +void ButtonMain_Handler(GtkButton *button) { + set_button_color_white(button); +} +void ButtonReprint_Handler(GtkButton *button){ + _ReprintSticker(); +} + diff --git a/ui/Src/ui.c b/ui/Src/ui.c index a3e3966..990e478 100644 --- a/ui/Src/ui.c +++ b/ui/Src/ui.c @@ -1,42 +1,42 @@ -#include "../Inc/ui.h" -#include "../Inc/error.h" - - -gboolean update_ButtonMain_label(gpointer data) { - const char* new_label_text = (const char*)data; - gtk_button_set_label(GTK_BUTTON(widgets.ButtonMain), new_label_text); - return FALSE; -} - -gboolean update_LableCurrentPressure(gpointer data){ - const char* new_label_text = (const char*)data; - gtk_label_set_text(GTK_LABEL(widgets.LabelCurrentPressure), new_label_text); - return FALSE; -} -gboolean update_LableSensorPressure(gpointer data){ - const char* new_label_text = (const char*)data; - gtk_label_set_text(GTK_LABEL(widgets.LabelSensorPressure), new_label_text); - return FALSE; -} - -gboolean set_Color_ButtonMain_red(gpointer data){ - set_button_color_red(widgets.ButtonMain); - return FALSE; -} -gboolean set_Color_ButtonMain_green(gpointer data){ - set_button_color_green(widgets.ButtonMain); - return FALSE; -} -gboolean set_Color_ButtonMain_white(gpointer data){ - set_button_color_white(widgets.ButtonMain); - return FALSE; -} - -gboolean update_Error_Table(gpointer data){ - uint8_t error_code = GPOINTER_TO_UINT(data); - update_error_table(error_code); - // create_error_code_table(error_code); - return FALSE; -} - - +#include "../Inc/ui.h" +#include "../Inc/error.h" + + +gboolean update_ButtonMain_label(gpointer data) { + const char* new_label_text = (const char*)data; + gtk_button_set_label(GTK_BUTTON(widgets.ButtonMain), new_label_text); + return FALSE; +} + +gboolean update_LableCurrentPressure(gpointer data){ + const char* new_label_text = (const char*)data; + gtk_label_set_text(GTK_LABEL(widgets.LabelCurrentPressure), new_label_text); + return FALSE; +} +gboolean update_LableSensorPressure(gpointer data){ + const char* new_label_text = (const char*)data; + gtk_label_set_text(GTK_LABEL(widgets.LabelSensorPressure), new_label_text); + return FALSE; +} + +gboolean set_Color_ButtonMain_red(gpointer data){ + set_button_color_red(widgets.ButtonMain); + return FALSE; +} +gboolean set_Color_ButtonMain_green(gpointer data){ + set_button_color_green(widgets.ButtonMain); + return FALSE; +} +gboolean set_Color_ButtonMain_white(gpointer data){ + set_button_color_white(widgets.ButtonMain); + return FALSE; +} + +gboolean update_Error_Table(gpointer data){ + uint8_t error_code = GPOINTER_TO_UINT(data); + update_error_table(error_code); + // create_error_code_table(error_code); + return FALSE; +} + +