Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit42a0549b8805df70b617b2b0ee751e98b44a772f (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-05-23 18:02:39 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-05-23 18:02:39 +0300
Files15bf5bcc291d1dd0fcdfbf177f79345042632e43
uni-projects-42a0549b8805df70b617b2b0ee751e98b44a772f.tar
uni-projects-42a0549b8805df70b617b2b0ee751e98b44a772f.tar.gz
uni-projects-42a0549b8805df70b617b2b0ee751e98b44a772f.zip
Parentfe199c6fbe92ec2b3ea653901b315a87ff392db6 (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.c29
-rw-r--r--Year 3/Internet of things/goam/main/spiffs.h4
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);