diff --git a/lib/lv_fs_if/lv_fs_spiffs.cpp b/lib/lv_fs_if/lv_fs_spiffs.cpp index 9546eea0..0cbd7075 100644 --- a/lib/lv_fs_if/lv_fs_spiffs.cpp +++ b/lib/lv_fs_if/lv_fs_spiffs.cpp @@ -9,6 +9,7 @@ //#include #include "lv_fs_if.h" #include "lv_fs_spiffs.h" +#include "ArduinoLog.h" #if LV_USE_FS_IF #if LV_FS_IF_SPIFFS != '\0' @@ -30,7 +31,7 @@ typedef File lv_spiffs_file_t; /*Similarly to `file_t` create a type for directory reading too */ -typedef File lv_spiffs_dir_t; +typedef File * lv_spiffs_dir_t; /********************** * STATIC PROTOTYPES @@ -122,43 +123,27 @@ static void fs_init(void) */ static lv_fs_res_t fs_open(lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) { - Serial.print("Opening: "); - Serial.println(path); + (void)drv; /*Unused*/ - String fullpath = "/" + String(path); - Serial.println(fullpath); + char filename[32]; + snprintf_P(filename, sizeof(filename), PSTR("/%s"), path); - const char * fullfilename = fullpath.c_str(); - Serial.println(fullfilename); - Serial.flush(); + Log.verbose(F("LVFS: Opening %s"), filename); + File f = SPIFFS.open(filename, mode == LV_FS_MODE_WR ? FILE_WRITE : FILE_READ); + if(!f) return LV_FS_RES_NOT_EX; - if(!SPIFFS.exists(fullfilename)) { - Serial.println("File does not exist"); - return LV_FS_RES_NOT_EX; - } - // return LV_FS_RES_UNKNOWN; + Log.verbose(F("LVFS: Opened %s"), filename); - static lv_spiffs_file_t file; - if(mode == LV_FS_MODE_WR) - file = SPIFFS.open(fullfilename, "a"); - else if(mode == LV_FS_MODE_RD) - file = SPIFFS.open(fullfilename, "r"); - else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) - file = SPIFFS.open(fullfilename, "r+"); - - if(file) { - - lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; /*Just avoid the confusing casings*/ - *fp = file; - - Serial.println("Opened OK"); - Serial.flush(); - // return LV_FS_RES_UNKNOWN; - - return LV_FS_RES_OK; - } else { - Serial.println("Open failed"); + if(!f || f.isDirectory()) { return LV_FS_RES_UNKNOWN; + } else { + f.seek(0, SeekSet); + Log.verbose(F("LVFS: Assigning %s"), f.name()); + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; /*Just avoid the confusing casings*/ + Log.verbose(F("LVFS: Copying %s"), f.name()); + *fp = f; + // memcpy(*file_p,&f,sizeof(lv_spiffs_file_t)); + return LV_FS_RES_OK; } } @@ -171,16 +156,21 @@ static lv_fs_res_t fs_open(lv_fs_drv_t * drv, void * file_p, const char * path, */ static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p) { - // File file = *(File *)(file_p); - lv_spiffs_file_t * file = (lv_spiffs_file_t *)file_p; /*Convert type*/ + (void)drv; /*Unused*/ + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; + File file = *fp; - char * msg = nullptr; - sprintf(msg, "Closing: %s", file->name()); - Serial.println(msg); - Serial.flush(); - file->close(); + if(!file) { + Log.verbose(F("LVFS: Invalid file")); + return LV_FS_RES_NOT_EX; + } - return LV_FS_RES_OK; + if(!file || file.isDirectory()) { + return LV_FS_RES_UNKNOWN; + } else { + file.close(); + return LV_FS_RES_OK; + } } /** @@ -195,20 +185,21 @@ static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p) */ static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) { - lv_spiffs_file_t * file = (lv_spiffs_file_t *)file_p; /*Convert type*/ - // lv_spiffs_file_t file = *(lv_spiffs_file_t *)(file_p); + (void)drv; /*Unused*/ + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; + File file = *fp; - char * msg = nullptr; - sprintf(msg, "Reading: %s", file->name()); - Serial.println(msg); - Serial.flush(); - - if(!*file || file->isDirectory()) { - return LV_FS_RES_UNKNOWN; + if(!file) { + Log.verbose(F("LVFS: Invalid file")); + return LV_FS_RES_NOT_EX; } - return LV_FS_RES_UNKNOWN; - *br = file->readBytes((char *)buf, btr); + // Log.verbose(F("LVFS: Reading %u bytes from %s at position %u"), btr, file.name(), file.position()); + + int len = file.readBytes((char *)buf, btr); + // Log.verbose(F("LVFS: Read %u bytes from %s at position %u"), len, file.name(), file.position()); + *br = (uint32_t)len; + return LV_FS_RES_OK; } @@ -223,21 +214,17 @@ static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_ */ static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw) { - return LV_FS_RES_NOT_IMP; - /* - File file = SPIFFS.open((char *)file_p, "w"); - if(!file) { - return LV_FS_RES_UNKNOWN; - } - char * message; - strncpy(buf, message, btw); - if(file.print(message)) { - *bw = (uint32_t)sizeof(message); - return LV_FS_RES_OK; - } else { - bw = 0; - return LV_FS_RES_UNKNOWN; - }*/ + (void)drv; /*Unused*/ + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; + File file = *fp; + + if(!file) { + Log.verbose(F("LVFS: Invalid file")); + return LV_FS_RES_NOT_EX; + } + + *bw = file.write((byte *)buf, btw); + return LV_FS_RES_OK; } /** @@ -250,18 +237,17 @@ static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, */ static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos) { - lv_spiffs_file_t * file = (lv_spiffs_file_t *)file_p; /*Convert type*/ - // lv_spiffs_file_t file = *(lv_spiffs_file_t *)(file_p); - char * msg = nullptr; - sprintf(msg, "Seeking: %s", file->name()); - Serial.println(msg); - Serial.flush(); + (void)drv; /*Unused*/ + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; + File file = *fp; - if(file->seek(pos, SeekSet)) { - return LV_FS_RES_OK; - } else { - return LV_FS_RES_UNKNOWN; + if(!file) { + Log.verbose(F("LVFS: Invalid file")); + return LV_FS_RES_NOT_EX; } + + file.seek(pos, SeekSet); + return LV_FS_RES_OK; } /** @@ -273,14 +259,17 @@ static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos) */ static lv_fs_res_t fs_size(lv_fs_drv_t * drv, void * file_p, uint32_t * size_p) { - lv_spiffs_file_t * file = (lv_spiffs_file_t *)file_p; /*Convert type*/ - // lv_spiffs_file_t file = *(lv_spiffs_file_t *)(file_p); - char * msg = nullptr; - sprintf(msg, "Filesize: %s", file->name()); - Serial.println(msg); - Serial.flush(); + (void)drv; /*Unused*/ + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; + File file = *fp; + + if(!file) { + Log.verbose(F("LVFS: Invalid file")); + return LV_FS_RES_NOT_EX; + } + + *size_p = (uint32_t)file.size(); - *size_p = file->size(); return LV_FS_RES_OK; } @@ -294,15 +283,17 @@ static lv_fs_res_t fs_size(lv_fs_drv_t * drv, void * file_p, uint32_t * size_p) */ static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) { - lv_spiffs_file_t * file = (lv_spiffs_file_t *)file_p; /*Convert type*/ - // lv_spiffs_file_t file = *(lv_spiffs_file_t *)(file_p); - char * msg = nullptr; - sprintf(msg, "Telling: %s", file->name()); - Serial.println(msg); - Serial.flush(); + (void)drv; /*Unused*/ + lv_spiffs_file_t * fp = (lv_spiffs_file_t *)file_p; + File file = *fp; + + if(!file) { + Log.verbose(F("LVFS: Invalid file")); + return LV_FS_RES_NOT_EX; + } + + *pos_p = (uint32_t)file.position(); - uint32_t pos = file->position(); - pos_p = &pos; return LV_FS_RES_OK; } @@ -314,8 +305,7 @@ static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) */ static lv_fs_res_t fs_remove(lv_fs_drv_t * drv, const char * path) { - Serial.println("Deleteing: " + (String)path); - Serial.flush(); + (void)drv; /*Unused*/ if(SPIFFS.remove(path)) { return LV_FS_RES_OK; @@ -345,6 +335,8 @@ static lv_fs_res_t fs_trunc(lv_fs_drv_t * drv, void * file_p) */ static lv_fs_res_t fs_rename(lv_fs_drv_t * drv, const char * oldname, const char * newname) { + (void)drv; /*Unused*/ + if(SPIFFS.rename(oldname, newname)) { return LV_FS_RES_OK; } else { @@ -362,11 +354,23 @@ static lv_fs_res_t fs_rename(lv_fs_drv_t * drv, const char * oldname, const char */ static lv_fs_res_t fs_free(lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * free_p) { - lv_fs_res_t res = LV_FS_RES_NOT_IMP; + (void)drv; /*Unused*/ - /* Add your code here*/ +#if defined(ARDUINO_ARCH_ESP8266) + FSInfo fs_info; + SPIFFS.info(fs_info); + *total_p = (uint32_t)fs_info.totalBytes; + *free_p = (uint32_t)fs_info.totalBytes - fs_info.usedBytes; + return LV_FS_RES_OK; - return res; +#elif defined(ARDUINO_ARCH_ESP32) + *total_p = (uint32_t)SPIFFS.totalBytes(); + *free_p = (uint32_t)SPIFFS.totalBytes() - SPIFFS.usedBytes(); + return LV_FS_RES_OK; + +#endif + + return LV_FS_RES_NOT_IMP; } /** @@ -378,7 +382,7 @@ static lv_fs_res_t fs_free(lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * fre */ static lv_fs_res_t fs_dir_open(lv_fs_drv_t * drv, void * dir_p, const char * path) { - lv_spiffs_dir_t * dir = (lv_spiffs_file_t *)dir_p; /*Convert type*/ + lv_spiffs_dir_t dir = (lv_spiffs_dir_t)dir_p; /*Convert type*/ Serial.print("Open directory: "); Serial.println(path); @@ -403,8 +407,8 @@ static lv_fs_res_t fs_dir_open(lv_fs_drv_t * drv, void * dir_p, const char * pat */ static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn) { - lv_spiffs_dir_t * dir = (lv_spiffs_file_t *)dir_p; /*Convert type*/ - lv_spiffs_file_t file = dir->openNextFile(); + lv_spiffs_dir_t dir = (lv_spiffs_dir_t)dir_p; /*Convert type*/ + File file = dir->openNextFile(); if(file) { strcpy(fn, file.name());