From e8edbc2dd40a8d412273f37b16e58a79d72f82a0 Mon Sep 17 00:00:00 2001 From: Kuba <74020427+JSiuda1@users.noreply.github.com> Date: Sun, 26 Mar 2023 20:22:25 +0200 Subject: [PATCH] Revert "flash task, pressure sensor offset" --- components/cli/console_commands.c | 10 ++-- components/cli/console_commands.h | 1 - components/memory/flash.c | 2 +- components/rtos/rtos_flas_task.c | 74 ---------------------------- components/rtos/rtos_init.c | 34 +------------ components/rtos/rtos_main_task.c | 43 ++++++---------- components/rtos/rtos_memory_task.c | 78 ++++++++++++++++++++++++------ components/rtos/rtos_tasks.h | 11 +---- components/sensor/LPS25H.c | 17 ------- components/sensor/LPS25H.h | 3 -- 10 files changed, 86 insertions(+), 187 deletions(-) delete mode 100644 components/rtos/rtos_flas_task.c diff --git a/components/cli/console_commands.c b/components/cli/console_commands.c index 1b060d7..f7d9861 100644 --- a/components/cli/console_commands.c +++ b/components/cli/console_commands.c @@ -8,7 +8,6 @@ #include "brake_servo.h" #include "recovery_servo.h" #include "flash_nvs.h" -#include "flash.h" #include "rtos_tasks.h" #include "nvs.h" @@ -295,10 +294,12 @@ int CLI_flash_read(int argc, char **argv) { return -1; } + data_to_memory_task_t data; rocket_data_t rocket_data; char data_buffer[200]; while (fread(&rocket_data, sizeof(rocket_data), 1, file)) { - create_data_csv(&rocket_data, data_buffer, sizeof(data_buffer)); + data.data = rocket_data; + create_data_csv(&data, data_buffer, sizeof(data_buffer)); printf("%s", data_buffer); } fclose(file); @@ -309,11 +310,6 @@ int CLI_flash_read(int argc, char **argv) { return 0; } -int CLI_flash_format(int argcc, char **argv) { - FLASH_format(); - return 0; -} - int CLI_print_settings(int argc, char **argv) { settings_t* settings = SETI_get_settings(); ESP_LOGI(TAG, "Brake open angle: %d", settings->brake_open_angle); diff --git a/components/cli/console_commands.h b/components/cli/console_commands.h index 7a55e1f..5de4c14 100644 --- a/components/cli/console_commands.h +++ b/components/cli/console_commands.h @@ -25,6 +25,5 @@ int CLI_set_brake_open_time(int argc, char **argv); int CLI_set_safety_trigger_time(int argc, char **argv); int CLI_set_recovery_open_time(int argc, char **argv); int CLI_flash_read(int argc, char **argv); -int CLI_flash_format(int argcc, char **argv); #endif diff --git a/components/memory/flash.c b/components/memory/flash.c index 37aaf13..d0c3927 100644 --- a/components/memory/flash.c +++ b/components/memory/flash.c @@ -135,7 +135,7 @@ bool FLASH_is_memory_available(void) { if (err != ESP_OK) { return 0; } - return fl.used_size < (fl.total_size * 4 / 10) ? true : false; + return fl.used_size < (fl.total_size / 2) ? true : false; } FlashResult FLASH_format(void) { diff --git a/components/rtos/rtos_flas_task.c b/components/rtos/rtos_flas_task.c deleted file mode 100644 index 772bd09..0000000 --- a/components/rtos/rtos_flas_task.c +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2022 PWrInSpace, Kuba -#include -#include -#include "sdcard.h" -#include "rtos_tasks.h" -#include "utils.h" -#include "flash.h" - -#define TAG "MEM_TASK" - -static void open_flash_file(FILE **flash_file, bool* flash_first_write) { - if (*flash_file != NULL) { - return; - } - // if (*flash_first_write == true) { - // *flash_first_write = false; - // *flash_file = fopen("/spiffs/data.txt", "w"); - // fclose(*flash_file); - // } - - *flash_file = fopen("/spiffs/data.txt", "a"); -} - -static void save_data_to_flash(FILE *flash_file, rocket_data_t* data, size_t size) { - if (FLASH_is_memory_available() == false) { - ESP_LOGE(TAG, "FLASH FULL"); - return; - } - - if (flash_file == NULL) { - ESP_LOGE(TAG, "FLASH FILE NULL"); - return; - } - - fwrite(data, size, 1, flash_file); -} - -static void close_flash_file(FILE *flash_file) { - if (flash_file != NULL) { - return; - } - - fclose(flash_file); - flash_file = NULL; -} - -void flash_task(void *arg) { - rocket_data_t data; - - bool flash_first_write = true; - FILE *flash_file = NULL; - uint32_t start = 0; - uint32_t stop = 0; - - // waiting for signal - ulTaskNotifyTake(pdTRUE, portMAX_DELAY); - - - while (1) { - if (uxQueueMessagesWaiting(rtos.data_to_flash) > RTOS_FLASH_SAVE) { - start = get_time_ms(); - open_flash_file(&flash_file, &flash_first_write); - while (uxQueueMessagesWaiting(rtos.data_to_flash) > 0) { - if (xQueueReceive(rtos.data_to_flash, (void*) &data, portMAX_DELAY) == pdTRUE) { - save_data_to_flash(flash_file, &data, sizeof(data)); - } - } - close_flash_file(flash_file); - stop = get_time_ms(); - ESP_LOGI(TAG, "FLASH DURATION %d", stop-start); - } - vTaskDelay(pdMS_TO_TICKS(10)); - } -} diff --git a/components/rtos/rtos_init.c b/components/rtos/rtos_init.c index bcfb480..c44018c 100644 --- a/components/rtos/rtos_init.c +++ b/components/rtos/rtos_init.c @@ -68,8 +68,7 @@ state_config_t states_conf[] = { }; bool rtos_init(void) { - rtos.data_to_memory = xQueueCreate(RTOS_SD_QUEUE_SIZE, sizeof(rocket_data_t)); - rtos.data_to_flash = xQueueCreate(RTOS_FLASH_QUEUE_SIZE, sizeof(rocket_data_t)); + rtos.data_to_memory = xQueueCreate(30, sizeof(data_to_memory_task_t)); if (rtos.data_to_memory == NULL) { return false; @@ -81,11 +80,9 @@ bool rtos_init(void) { TASK_PRIORITY_HIGH, &rtos.main_task, PRO_CPU_NUM); xTaskCreatePinnedToCore(memory_task, "memory_task", 8000, NULL, TASK_PRIORITY_MID, &rtos.memory_task, APP_CPU_NUM); - xTaskCreatePinnedToCore(flash_task, "flash_task", 8000, NULL, - TASK_PRIORITY_HIGH, &rtos.flash_task, APP_CPU_NUM); if (rtos.sensor_task == NULL || rtos.main_task == NULL || - rtos.memory_task == NULL || rtos.flash_task == NULL) { + rtos.memory_task == NULL) { if (rtos.sensor_task != NULL) { vTaskDelete(rtos.sensor_task); } @@ -94,10 +91,6 @@ bool rtos_init(void) { vTaskDelete(rtos.memory_task); } - if (rtos.flash_task != NULL) { - vTaskDelete(rtos.memory_task); - } - if (rtos.main_task != NULL) { vTaskDelete(rtos.main_task); } @@ -206,27 +199,6 @@ static bool read_settings_from_flash(void) { return res == NVS_OK ? true : false; } -static void format_flash_on_boot_button(void) { - gpio_set_direction(0, GPIO_MODE_INPUT); - if (gpio_get_level(0) == 0) { - ESP_LOGI(TAG, "FLASH FORMATING ...."); - for (int i = 0; i < 2; ++i) { - BUZZER_set_level(1); - vTaskDelay(pdMS_TO_TICKS(250)); - BUZZER_set_level(0); - vTaskDelay(pdMS_TO_TICKS(250)); - } - FLASH_format(); - - for (int i = 0; i < 4; ++i) { - BUZZER_set_level(1); - vTaskDelay(pdMS_TO_TICKS(200)); - BUZZER_set_level(0); - vTaskDelay(pdMS_TO_TICKS(200)); - } - } -} - /**************************** ERRORS ***************************/ static void err_handling(char *name) { @@ -263,7 +235,6 @@ void init_task(void *arg) { ERR_CHECK_BOOL(SM_run() == SM_OK ? true : false, "State machine run"); ERR_CHECK_STATUS(FLASH_init(1), "FLASH"); - format_flash_on_boot_button(); ERR_CHECK_STATUS(NVS_init(), "NVS"); ERR_CHECK_BOOL(read_settings_from_flash(), "NVS read"); ERR_CHECK_BOOL(SD_init(&sd_card, sd_spi.spi_host, PCB_SD_CS, MOUNT_POINT), "SD_init"); @@ -286,7 +257,6 @@ void init_task(void *arg) { "LSM6DSA3 gyro scale"); ERR_CHECK_STATUS(LPS25HInit(&press_sensor, I2C_NUM_1, LPS25H_I2C_ADDR_SA0_H), "LPS25H"); ERR_CHECK_STATUS(LPS25HStdConf(&press_sensor), "LPS25HB conf"); - ERR_CHECK_STATUS(LPS25HCalibrate(&press_sensor), "LPS25HB calibration"); ERR_CHECK_STATUS(console_init(), "CLI"); ERR_CHECK_STATUS(console_register_commands(console_commands, sizeof(console_commands)/sizeof(console_commands[0])), "CLI register"); diff --git a/components/rtos/rtos_main_task.c b/components/rtos/rtos_main_task.c index d7efbea..c879d98 100644 --- a/components/rtos/rtos_main_task.c +++ b/components/rtos/rtos_main_task.c @@ -11,6 +11,18 @@ static esp_event_loop_handle_t event_handle; ESP_EVENT_DEFINE_BASE(TASK_EVENTS); +static data_to_memory_task_t create_data_to_memory_struct(void) { + data_to_memory_task_t data_to_mem; + data_to_mem.data = main_data; + if (main_data.state < ASCENT) { + data_to_mem.save_option = SAVE_TO_SD; + } else if (main_data.state < GROUND) { + data_to_mem.save_option = SAVE_TO_BOTH; + } + + return data_to_mem; +} + static void update_data(void) { main_data.state = SM_get_current_state(); main_data.up_time = get_time_ms(); @@ -19,10 +31,6 @@ static void update_data(void) { /********************** EVENTS ************************/ -static void wakeup_flash_task(void) { - xTaskNotifyGive(rtos.flash_task); -} - static void sensors_high_acc_event(void *h_arg, esp_event_base_t, int32_t id, void *data) { ESP_LOGD(TAG, "HIGH ACCELERATION"); @@ -30,7 +38,7 @@ static void sensors_high_acc_event(void *h_arg, esp_event_base_t, int32_t id, ESP_LOGE(TAG, "UNABLE TO CHANGE STATE TO ASCENT"); return; } - wakeup_flash_task(); + FLIGHT_TIME_start(get_time_ms()); BUZZER_set_level(1); TIMER_start(BRAKE_TIMER, SETI_get_settings()->brake_open_time, @@ -89,19 +97,6 @@ static void touchdown_event(void *h_arg, esp_event_base_t, int32_t id, void *dat TIMER_start(BUZZER_TIMER, 1000, TIMER_PERIODIC, TIMER_CB_buzzer_change, NULL); } -static void flash_keep_previous_data_on_queue(rocket_data_t *main_data) { - if (uxQueueMessagesWaiting(rtos.data_to_flash) > RTOS_FLASH_QUEUE_DATA_TO_STASH) { - rocket_data_t data; - if (xQueueReceive(rtos.data_to_flash, (void*)&data, 0) != pdTRUE) { - ESP_LOGE(TAG, "Unable to send to back"); - } - } - - if (xQueueSend(rtos.data_to_flash, (void *)main_data, 0) == pdFALSE) { - ESP_LOGE(TAG, "UNABLE TO SEND DATA TO FLASH TASK ON LAUNCHPAD"); - } -} - static void sensors_new_data_event(void *h_arg, esp_event_base_t, int32_t id, void *data) { // ESP_LOGI(TAG, "NEW DATA EVENT"); @@ -109,18 +104,12 @@ static void sensors_new_data_event(void *h_arg, esp_event_base_t, int32_t id, update_data(); if (main_data.state < GROUND) { - if (xQueueSend(rtos.data_to_memory, (void *)&main_data, 0) == pdFALSE) { + data_to_memory_task_t data_to_memory = create_data_to_memory_struct(); + if (xQueueSend(rtos.data_to_memory, (void *)&data_to_memory, 0) == + pdFALSE) { ESP_LOGE(TAG, "UNABLE TO SEND DATA TO MEMORY TASK"); } } - - if (main_data.state > LAUNCHPAD && main_data.state < GROUND) { - if (xQueueSend(rtos.data_to_flash, (void *)&main_data, 0) == pdFALSE) { - ESP_LOGE(TAG, "UNABLE TO SEND DATA TO FLASH TASK"); - } - } else if (main_data.state == LAUNCHPAD) { - flash_keep_previous_data_on_queue(&main_data); - } // set brejk } diff --git a/components/rtos/rtos_memory_task.c b/components/rtos/rtos_memory_task.c index 92617f7..1f48bee 100644 --- a/components/rtos/rtos_memory_task.c +++ b/components/rtos/rtos_memory_task.c @@ -43,20 +43,20 @@ static bool can_save_data_to_flash(DATA_SAVE_OPTIONS option) { return false; } -size_t create_data_csv(rocket_data_t *rec, char *data_string, size_t len) { +size_t create_data_csv(data_to_memory_task_t *rec, char *data_string, size_t len) { return snprintf(data_string, len, "%lu;%d;%lu;%.2f;%.2f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f\n", - (uint32_t)rec->flight_time, rec->state, (uint32_t)rec->up_time, - rec->sensors.filtered.height, rec->sensors.velocity, - rec->sensors.acc.x, rec->sensors.acc.y, rec->sensors.acc.z, - rec->sensors.gyro.x, rec->sensors.gyro.y, rec->sensors.gyro.z, - rec->sensors.height, - rec->sensors.pressure, rec->sensors.temp, - rec->sensors.filtered.acc.x, rec->sensors.filtered.acc.y, - rec->sensors.filtered.acc.z, - rec->sensors.filtered.gyro.x, rec->sensors.filtered.gyro.y, - rec->sensors.filtered.gyro.z, - rec->sensors.vBatt); + (uint32_t)rec->data.flight_time, rec->data.state, (uint32_t)rec->data.up_time, + rec->data.sensors.filtered.height, rec->data.sensors.velocity, + rec->data.sensors.acc.x, rec->data.sensors.acc.y, rec->data.sensors.acc.z, + rec->data.sensors.gyro.x, rec->data.sensors.gyro.y, rec->data.sensors.gyro.z, + rec->data.sensors.height, + rec->data.sensors.pressure, rec->data.sensors.temp, + rec->data.sensors.filtered.acc.x, rec->data.sensors.filtered.acc.y, + rec->data.sensors.filtered.acc.z, + rec->data.sensors.filtered.gyro.x, rec->data.sensors.filtered.gyro.y, + rec->data.sensors.filtered.gyro.z, + rec->data.sensors.vBatt); } const char file_header[] = "FLIGHT TIME; STATE; UPTIME; F ALTITUDE; VELOCITY; ACC X; ACC Y; ACC Z;" @@ -64,8 +64,12 @@ const char file_header[] = "FLIGHT TIME; STATE; UPTIME; F ALTITUDE; VELOCITY; AC "F ACC Z F GYRO X; F GYRO Y; F GYRO Z; VBATT\n"; -static void save_data_to_sd(rocket_data_t *data, char *data_buffer, +static void save_data_to_sd(data_to_memory_task_t *data, char *data_buffer, size_t size, char* file_path) { + if (can_save_data_to_sd(data->save_option) == false) { + return; + } + create_data_csv(data, data_buffer, size); SD_write(&sd_card, file_path, data_buffer); if (SETI_get_settings()->test_mode == true) { @@ -73,9 +77,45 @@ static void save_data_to_sd(rocket_data_t *data, char *data_buffer, } } +static void open_flash_file(FILE **flash_file, bool* flash_first_write) { + if (*flash_file != NULL) { + return; + } + if (*flash_first_write == true) { + *flash_first_write = false; + *flash_file = fopen("/spiffs/data.txt", "w"); + fclose(flash_file); + } + + flash_file = fopen("/spiffs/data.txt", "a"); +} + +static void save_data_to_flash(FILE *flash_file, rocket_data_t* data, size_t size) { + if (FLASH_is_memory_available() == false) { + ESP_LOGE(TAG, "FLASH FULL"); + return; + } + + if (flash_file == NULL) { + ESP_LOGE(TAG, "FLASH FILE NULL"); + return; + } + + fwrite(data, size, 1, flash_file); +} + +static void close_flash_file(FILE *flash_file) { + if (flash_file != NULL) { + return; + } + + fclose(flash_file); + flash_file = NULL; +} + void memory_task(void *arg) { char data_string[512]; - rocket_data_t data; + data_to_memory_task_t data; char file_path[sizeof(FILE_NAME) + 6] = FILE_NAME; if (create_path_to_file(file_path, sizeof(file_path)) == false) { @@ -84,16 +124,24 @@ void memory_task(void *arg) { ESP_LOGI(TAG, "Using file path %s", file_path); SD_write(&sd_card, file_path, file_header); + bool flash_first_write = true; + FILE *flash_file = NULL; uint32_t start = 0; uint32_t stop = 0; while (1) { - if (uxQueueMessagesWaiting(rtos.data_to_memory) > RTOS_SD_SAVE) { + if (uxQueueMessagesWaiting(rtos.data_to_memory) > 10) { start = get_time_ms(); while (uxQueueMessagesWaiting(rtos.data_to_memory) > 0) { if (xQueueReceive(rtos.data_to_memory, (void*) &data, portMAX_DELAY) == pdTRUE) { save_data_to_sd(&data, data_string, sizeof(data_string), file_path); + + if (can_save_data_to_flash(data.save_option) == true) { + open_flash_file(&flash_file, &flash_first_write); + save_data_to_flash(flash_file, &data.data, sizeof(data.data)); + } } } + close_flash_file(flash_file); stop = get_time_ms(); ESP_LOGI(TAG, "DURATION %d", stop-start); } diff --git a/components/rtos/rtos_tasks.h b/components/rtos/rtos_tasks.h index 85d2add..8a04ae2 100644 --- a/components/rtos/rtos_tasks.h +++ b/components/rtos/rtos_tasks.h @@ -42,12 +42,6 @@ #define NVS_RECOV_SAFETY_TRIG_TIME "R_SAFE_TRIG" #define NVS_RECOV_OPEN_TIME "R_OPEN_TIME" -#define RTOS_FLASH_QUEUE_DATA_TO_STASH 20 -#define RTOS_FLASH_QUEUE_SIZE 45 -#define RTOS_FLASH_SAVE 10 -#define RTOS_SD_QUEUE_SIZE 30 -#define RTOS_SD_SAVE 10 - typedef enum { LAUNCHPAD, ASCENT, @@ -86,10 +80,8 @@ typedef struct { TaskHandle_t sensor_task; TaskHandle_t main_task; TaskHandle_t memory_task; - TaskHandle_t flash_task; TaskHandle_t test_mode_task; QueueHandle_t data_to_memory; - QueueHandle_t data_to_flash; } rtos_t; typedef struct { @@ -140,7 +132,6 @@ void memory_task(void *arg); void main_task(void *arg); void sensor_task(void *arg); void test_mode_task(void *arg); -void flash_task(void *arg); -size_t create_data_csv(rocket_data_t *rec, char *data_string, size_t len); +size_t create_data_csv(data_to_memory_task_t *rec, char *data_string, size_t len); #endif diff --git a/components/sensor/LPS25H.c b/components/sensor/LPS25H.c index 43d2bb8..26578f4 100644 --- a/components/sensor/LPS25H.c +++ b/components/sensor/LPS25H.c @@ -6,7 +6,6 @@ LPS25HResult LPS25HInit(LPS25H *lps, i2c_port_t portNum, uint8_t i2cAddress) { lps->port = portNum; lps->addr = i2cAddress; lps->fifoConfigured = false; - lps->altitude_offset = 0; ESP_LOGI(LPS_TAG, "Sensor initiated"); return LPS25H_OK; } @@ -70,21 +69,6 @@ LPS25HResult LPS25HReadPressure(LPS25H *lps, float *pressureVal) { return res == LPS25H_OK ? LPS25H_OK : LPS25H_ReadError; } -LPS25HResult LPS25HCalibrate(LPS25H *lps) { - float altitude = 0; - float temp = 0; - float pressure = 0; - for (int i = 0; i < 5; ++i) { - vTaskDelay(pdMS_TO_TICKS(100)); - LPS25HGetHeightAndPressure(lps, &temp, &pressure); - altitude += temp; - } - - lps->altitude_offset = altitude / 5.0; - ESP_LOGI("TAG", "ALTITUDE OFFSET %f", lps->altitude_offset); - return LPS25H_OK; -} - LPS25HResult LPS25HReadTemperature(LPS25H *lps, float *tempVal) { if (!lps->fifoConfigured) { ESP_LOGE(LPS_TAG, "Sensor fifo mode not configured!"); @@ -112,6 +96,5 @@ LPS25HResult LPS25HGetHeightAndPressure(LPS25H *lps, float *height, *height = 0; return LPS25H_ReadError; } *height = 44330 * (1 - pow((*press / REFERENCE_PRESSURE_HPA), 1.f / 5.255f)); - *height -= lps->altitude_offset; return LPS25H_OK; } diff --git a/components/sensor/LPS25H.h b/components/sensor/LPS25H.h index 654f5eb..deca723 100644 --- a/components/sensor/LPS25H.h +++ b/components/sensor/LPS25H.h @@ -67,7 +67,6 @@ typedef struct { i2c_port_t port; uint8_t addr; bool fifoConfigured : 1; - float altitude_offset; } LPS25H; /*! @@ -82,8 +81,6 @@ LPS25HResult LPS25HInit(LPS25H *lps, i2c_port_t portNum, uint8_t i2cAddress); LPS25HResult LPS25HRegisterRead(LPS25H *lps, uint8_t regAddr, uint8_t *data, size_t len); -LPS25HResult LPS25HCalibrate(LPS25H *lps); - /*! \brief Write to the sensor register \return ESP_OK if the write is successful, ESP_FAIL otherwise