From ca88fdc27316f20369f72b464f4d94ce65b83f60 Mon Sep 17 00:00:00 2001 From: lbernstone Date: Tue, 24 Sep 2019 14:23:03 -0600 Subject: [PATCH] Fixed FFat::end. Fixes #3244 (#3245) * Fixed FFat::end. Fixes #3244 * Missed the handle check in format --- libraries/FFat/src/FFat.cpp | 19 ++++++++++++------- libraries/FFat/src/FFat.h | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/libraries/FFat/src/FFat.cpp b/libraries/FFat/src/FFat.cpp index 2c53f3a338a..b61a8e3f61d 100644 --- a/libraries/FFat/src/FFat.cpp +++ b/libraries/FFat/src/FFat.cpp @@ -40,16 +40,20 @@ const esp_partition_t *check_ffat_partition(const char* label) bool F_Fat::begin(bool formatOnFail, const char * basePath, uint8_t maxOpenFiles, const char * partitionLabel) { - if(_wl_handle){ + if(_wl_handle != WL_INVALID_HANDLE){ log_w("Already Mounted!"); return true; } - if (!check_ffat_partition(partitionLabel)) return false; + if (!check_ffat_partition(partitionLabel)){ + log_e("No fat partition found on flash"); + return false; + } esp_vfs_fat_mount_config_t conf = { .format_if_mount_failed = formatOnFail, - .max_files = maxOpenFiles + .max_files = maxOpenFiles, + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE }; esp_err_t err = esp_vfs_fat_spiflash_mount(basePath, partitionLabel, &conf, &_wl_handle); if(err){ @@ -62,13 +66,13 @@ bool F_Fat::begin(bool formatOnFail, const char * basePath, uint8_t maxOpenFiles void F_Fat::end() { - if(_wl_handle){ + if(_wl_handle != WL_INVALID_HANDLE){ esp_err_t err = esp_vfs_fat_spiflash_unmount(_impl->mountpoint(), _wl_handle); if(err){ log_e("Unmounting FFat partition failed! Error: %d", err); return; } - _wl_handle = 0; + _wl_handle = WL_INVALID_HANDLE; _impl->mountpoint(NULL); } } @@ -77,7 +81,7 @@ bool F_Fat::format(bool full_wipe, char* partitionLabel) { esp_err_t result; bool res = true; - if(_wl_handle){ + if(_wl_handle != WL_INVALID_HANDLE){ log_w("Already Mounted!"); return false; } @@ -102,7 +106,8 @@ bool F_Fat::format(bool full_wipe, char* partitionLabel) // Now do a mount with format_if_fail (which it will) esp_vfs_fat_mount_config_t conf = { .format_if_mount_failed = true, - .max_files = 1 + .max_files = 1, + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE }; result = esp_vfs_fat_spiflash_mount("/format_ffat", partitionLabel, &conf, &temp_handle); esp_vfs_fat_spiflash_unmount("/format_ffat", temp_handle); diff --git a/libraries/FFat/src/FFat.h b/libraries/FFat/src/FFat.h index 7a5499efacb..a32c950bb6e 100644 --- a/libraries/FFat/src/FFat.h +++ b/libraries/FFat/src/FFat.h @@ -37,7 +37,7 @@ class F_Fat : public FS bool exists(const String& path); private: - wl_handle_t _wl_handle; + wl_handle_t _wl_handle = WL_INVALID_HANDLE; }; }