Skip to content
20 changes: 20 additions & 0 deletions src/configuration/Configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,32 @@
#define DIR_TOGGLES_OLD "/toggles"
#define DIR_TOGGLES "/sensortoggles"

// Global variable defined at file scope (not in namespace) so init.h can access it
extern bool g_safeModeDeferredFactoryResetRequested;

namespace SlimeVR::Configuration {
void Configuration::setup() {
if (m_Loaded) {
return;
}

// Safe mode defers LittleFS formatting to normal runtime for reliability.
// If requested, perform the filesystem format before config load.
if (g_safeModeDeferredFactoryResetRequested) {
m_Logger.warn("Deferred safe-mode factory reset detected, formatting LittleFS");
g_safeModeDeferredFactoryResetRequested = false;

LittleFS.begin();
if (!LittleFS.format()) {
m_Logger.error("Deferred LittleFS format failed");
} else {
m_Logger.info("Deferred LittleFS format OK");
m_Logger.warn("Rebooting after deferred safe-mode factory reset");
ESP.restart();
return;
}
}

bool status = LittleFS.begin();
if (!status) {
this->m_Logger.warn("Could not mount LittleFS, formatting");
Expand Down
57 changes: 57 additions & 0 deletions src/consts.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,63 @@ enum class SensorTypeID : uint8_t {
#define BOARD_ESP32S3_SUPERMINI 23
#define BOARD_DEV_RESERVED 250 // Reserved, should not be used in any release firmware

// Returns the BOARD define name (e.g. "BOARD_WEMOSD1MINI").
// Kept Arduino-independent because this header is used outside Arduino units.
inline const char* boardName() {
switch (BOARD) {
case BOARD_SLIMEVR_LEGACY:
return "BOARD_SLIMEVR_LEGACY";
case BOARD_SLIMEVR_DEV:
return "BOARD_SLIMEVR_DEV";
case BOARD_NODEMCU:
return "BOARD_NODEMCU";
case BOARD_CUSTOM:
return "BOARD_CUSTOM";
case BOARD_WROOM32:
return "BOARD_WROOM32";
case BOARD_WEMOSD1MINI:
return "BOARD_WEMOSD1MINI";
case BOARD_TTGO_TBASE:
return "BOARD_TTGO_TBASE";
case BOARD_ESP01:
return "BOARD_ESP01";
case BOARD_SLIMEVR:
return "BOARD_SLIMEVR";
case BOARD_LOLIN_C3_MINI:
return "BOARD_LOLIN_C3_MINI";
case BOARD_BEETLE32C3:
return "BOARD_BEETLE32C3";
case BOARD_ESP32C3DEVKITM1:
return "BOARD_ESP32C3DEVKITM1";
case BOARD_OWOTRACK:
return "BOARD_OWOTRACK";
case BOARD_WRANGLER:
return "BOARD_WRANGLER";
case BOARD_MOCOPI:
return "BOARD_MOCOPI";
case BOARD_WEMOSWROOM02:
return "BOARD_WEMOSWROOM02";
case BOARD_XIAO_ESP32C3:
return "BOARD_XIAO_ESP32C3";
case BOARD_HARITORA:
return "BOARD_HARITORA";
case BOARD_ESP32C6DEVKITC1:
return "BOARD_ESP32C6DEVKITC1";
case BOARD_GLOVE_IMU_SLIMEVR_DEV:
return "BOARD_GLOVE_IMU_SLIMEVR_DEV";
case BOARD_GESTURES:
return "BOARD_GESTURES";
case BOARD_SLIMEVR_V1_2:
return "BOARD_SLIMEVR_V1_2";
case BOARD_ESP32S3_SUPERMINI:
return "BOARD_ESP32S3_SUPERMINI";
case BOARD_DEV_RESERVED:
return "BOARD_DEV_RESERVED";
default:
return "BOARD_UNKNOWN";
}
}

#define BAT_EXTERNAL 1
#define BAT_INTERNAL 2
#define BAT_MCP3021 3
Expand Down
Loading