diff options
| Commit | 42a0549b8805df70b617b2b0ee751e98b44a772f (patch) | |
|---|---|---|
| Author | 2024-05-23 18:02:39 +0300 | |
| Committer | 2024-05-23 18:02:39 +0300 | |
| Files | 15bf5bcc291d1dd0fcdfbf177f79345042632e43 | |
| uni-projects-42a0549b8805df70b617b2b0ee751e98b44a772f.tar uni-projects-42a0549b8805df70b617b2b0ee751e98b44a772f.tar.gz uni-projects-42a0549b8805df70b617b2b0ee751e98b44a772f.zip | ||
| Parent | fe199c6fbe92ec2b3ea653901b315a87ff392db6 (diff) | |
(iot/goam) Retry file writing when it fails
2 files changed, 22 insertions, 11 deletions
| -rw-r--r-- | Year 3/Internet of things/goam/main/spiffs.c | 29 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/spiffs.h | 4 |
diff --git a/Year 3/Internet of things/goam/main/spiffs.c b/Year 3/Internet of things/goam/main/spiffs.c index 8e11722..61e1776 100644 --- a/Year 3/Internet of things/goam/main/spiffs.c +++ b/Year 3/Internet of things/goam/main/spiffs.c @@ -1,6 +1,8 @@ #include <sys/unistd.h> #include <sys/stat.h> #include <fcntl.h> +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" #include "esp_log.h" #include "esp_spiffs.h" @@ -53,24 +55,33 @@ void spiffs_init() { } } -size_t spiffs_write(const char* filename, const char* data, size_t data_len) { +void spiffs_write(const char* filename, const char* data, int data_len) { int outf = open(filename, O_WRONLY | O_CREAT | O_TRUNC); if (outf < 0) { - ESP_LOGE(TAG, "Couldn't write to file \"%s\"!", filename); - return 0; + ESP_LOGE(TAG, "Couldn't open file \"%s\" for writing!", filename); + return; } - size_t length = write(outf, data, data_len); + int length = write(outf, data, data_len); + for (int tries = 0; length < data_len && tries < 3; tries++) { + ESP_LOGW(TAG, "Wrote only %d bytes to \"%s\", trying again...", length, filename); + vTaskDelay(50 / portTICK_PERIOD_MS); + length = write(outf, data, data_len); + } close(outf); - ESP_LOGD(TAG, "wrote %d bytes from \"%s\"", length, filename); - return length; + if (length < 0) { + ESP_LOGE(TAG, "Wrote only %d/%d bytes for \"%s\"", length, data_len, filename); + } + else { + ESP_LOGD(TAG, "Wrote %d bytes from \"%s\"", length, filename); + } } -size_t spiffs_read(const char* filename, char** data) { +int spiffs_read(const char* filename, char** data) { int inf = open(filename, O_RDONLY); if (inf < 0) { - ESP_LOGE(TAG, "Couldn't read from file \"%s\"!", filename); + ESP_LOGW(TAG, "Couldn't read from file \"%s\"!", filename); return 0; } @@ -81,7 +92,7 @@ size_t spiffs_read(const char* filename, char** data) { return 0; } - size_t length = buf.st_size; + int length = buf.st_size; *data = (char*)malloc(length); read(inf, *data, length); diff --git a/Year 3/Internet of things/goam/main/spiffs.h b/Year 3/Internet of things/goam/main/spiffs.h index b88e24b..82aac5a 100644 --- a/Year 3/Internet of things/goam/main/spiffs.h +++ b/Year 3/Internet of things/goam/main/spiffs.h @@ -4,5 +4,5 @@ #define SPIFFS_PREFIX_LEN (sizeof(SPIFFS_PREFIX)-1) void spiffs_init(); -size_t spiffs_write(const char* filename, const char* data, size_t data_len); -size_t spiffs_read(const char* filename, char** data); +void spiffs_write(const char* filename, const char* data, int data_len); +int spiffs_read(const char* filename, char** data); |
