diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini
index 39e9f7d84..b62e609f8 100644
--- a/arch/esp32/esp32.ini
+++ b/arch/esp32/esp32.ini
@@ -6,6 +6,7 @@ build_src_filter =
${arduino_base.build_src_filter} - - -
upload_speed = 921600
debug_init_break = tbreak setup
+monitor_filters = esp32_exception_decoder
# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging.
# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h
diff --git a/arch/esp32/esp32s3.ini b/arch/esp32/esp32s3.ini
index 4f41cd05b..11051f0fc 100644
--- a/arch/esp32/esp32s3.ini
+++ b/arch/esp32/esp32s3.ini
@@ -6,6 +6,7 @@ build_src_filter =
upload_speed = 961200
monitor_speed = 115200
debug_init_break = tbreak setup
+monitor_filters = esp32_exception_decoder
# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging.
# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h
diff --git a/src/FSCommon.cpp b/src/FSCommon.cpp
index 74f6fd4cc..a4fa3c3ae 100644
--- a/src/FSCommon.cpp
+++ b/src/FSCommon.cpp
@@ -33,17 +33,25 @@ bool copyFile(const char* from, const char* to)
bool renameFile(const char* pathFrom, const char* pathTo)
{
#ifdef FSCom
+#ifdef ARCH_ESP32
+ // rename was fixed for ESP32 IDF LittleFS in April
+ return FSCom.rename(pathFrom, pathTo);
+#else
if (copyFile(pathFrom, pathTo) && FSCom.remove(pathFrom) ) {
return true;
} else{
return false;
}
#endif
+#endif
}
-void listDir(const char * dirname, uint8_t levels)
+void listDir(const char * dirname, uint8_t levels, boolean del = false)
{
#ifdef FSCom
+#if (defined(ARCH_ESP32) || defined(ARCH_RP2040) || defined(ARCH_PORTDUINO))
+ char buffer[255];
+#endif
File root = FSCom.open(dirname, FILE_O_READ);
if(!root){
return;
@@ -57,62 +65,91 @@ void listDir(const char * dirname, uint8_t levels)
if(file.isDirectory() && !String(file.name()).endsWith(".")) {
if(levels){
#ifdef ARCH_ESP32
- listDir(file.path(), levels -1);
+ listDir(file.path(), levels -1, del);
+ if(del) {
+ DEBUG_MSG("Removing %s\n", file.path());
+ strcpy(buffer, file.path());
+ file.close();
+ FSCom.rmdir(buffer);
+ } else {
+ file.close();
+ }
+#elif (defined(ARCH_RP2040) || defined(ARCH_PORTDUINO))
+ listDir(file.name(), levels -1, del);
+ if(del) {
+ DEBUG_MSG("Removing %s\n", file.name());
+ strcpy(buffer, file.name());
+ file.close();
+ FSCom.rmdir(buffer);
+ } else {
+ file.close();
+ }
#else
- listDir(file.name(), levels -1);
+ listDir(file.name(), levels -1, del);
+ file.close();
#endif
}
} else {
#ifdef ARCH_ESP32
+ if(del) {
+ DEBUG_MSG("Deleting %s\n", file.path());
+ strcpy(buffer, file.path());
+ file.close();
+ FSCom.remove(buffer);
+ } else {
DEBUG_MSG(" %s (%i Bytes)\n", file.path(), file.size());
+ file.close();
+ }
+#elif (defined(ARCH_RP2040) || defined(ARCH_PORTDUINO))
+ if(del) {
+ DEBUG_MSG("Deleting %s\n", file.name());
+ strcpy(buffer, file.name());
+ file.close();
+ FSCom.remove(buffer);
+ } else {
+ DEBUG_MSG(" %s (%i Bytes)\n", file.name(), file.size());
+ file.close();
+ }
#else
DEBUG_MSG(" %s (%i Bytes)\n", file.name(), file.size());
+ file.close();
#endif
}
- file.close();
file = root.openNextFile();
}
- file.close();
+#ifdef ARCH_ESP32
+ if(del) {
+ DEBUG_MSG("Removing %s\n", root.path());
+ strcpy(buffer, root.path());
+ root.close();
+ FSCom.rmdir(buffer);
+ } else {
+ root.close();
+ }
+#elif (defined(ARCH_RP2040) || defined(ARCH_PORTDUINO))
+ if(del) {
+ DEBUG_MSG("Removing %s\n", root.name());
+ strcpy(buffer, root.name());
+ root.close();
+ FSCom.rmdir(buffer);
+ } else {
+ root.close();
+ }
+#else
+ root.close();
+#endif
#endif
}
void rmDir(const char * dirname)
{
#ifdef FSCom
- File file = FSCom.open(dirname, FILE_O_READ);
- if(!file){
- return;
- }
- if(!file.isDirectory()){
- file.close();
- FSCom.remove(file.name());
- // DEBUG_MSG("Remove FILE %s\n", file.name());
- return;
- }
-
- file.rewindDirectory();
- while (true) {
- File entry = file.openNextFile();
- if (!entry) {
- break;
- }
- char dirpath[100]; // array to hold the result.
- strcpy(dirpath, dirname); // copy string one into the result.
- strcat(dirpath,"/"); // append string two to the result.
- strcat(dirpath,entry.name()); // append string two to the result.
- if(entry.isDirectory() && !String(entry.name()).endsWith(".")) {
- entry.close();
- DEBUG_MSG("Descend DIR %s\n", dirpath);
- rmDir(dirpath);
- } else {
- entry.close();
- DEBUG_MSG("Remove FILE %s\n", entry.name());
- FSCom.remove(entry.name());
- }
- }
- FSCom.rmdir(dirname);
- DEBUG_MSG("Remove DIR %s\n", dirname);
- file.close();
+#if (defined(ARCH_ESP32) || defined(ARCH_RP2040) || defined(ARCH_PORTDUINO))
+ listDir(dirname, 10, true);
+#elif defined(ARCH_NRF52)
+ // nRF52 implementation of LittleFS has a recursive delete function
+ FSCom.rmdir_r(dirname);
+#endif
#endif
}
@@ -125,7 +162,7 @@ void fsInit()
assert(0); // FIXME - report failure to phone
}
#ifdef ARCH_ESP32
- DEBUG_MSG("Filesystem files (%d/%d total Bytes):\n", FSCom.usedBytes(), FSCom.totalBytes());
+ DEBUG_MSG("Filesystem files (%d/%d Bytes):\n", FSCom.usedBytes(), FSCom.totalBytes());
#else
DEBUG_MSG("Filesystem files:\n");
#endif
diff --git a/src/FSCommon.h b/src/FSCommon.h
index 2daca9751..841fa5adb 100644
--- a/src/FSCommon.h
+++ b/src/FSCommon.h
@@ -42,5 +42,5 @@ using namespace Adafruit_LittleFS_Namespace;
void fsInit();
bool copyFile(const char* from, const char* to);
bool renameFile(const char* pathFrom, const char* pathTo);
-void listDir(const char * dirname, uint8_t levels);
+void listDir(const char * dirname, uint8_t levels, boolean del);
void rmDir(const char * dirname);
diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp
index 23be64e74..14a435456 100644
--- a/src/graphics/Screen.cpp
+++ b/src/graphics/Screen.cpp
@@ -86,7 +86,7 @@ static char ourId[5];
GeoCoord geoCoord;
// OEM Config File
-static const char *oemConfigFile = "/prefs/oem.proto";
+static const char *oemConfigFile = "/oem/oem.proto";
OEMStore oemStore;
#ifdef SHOW_REDRAWS