mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
fix factory reset using LITTLEFS
This commit is contained in:
@@ -2,16 +2,14 @@
|
|||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
|
||||||
FactoryResetService::FactoryResetService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager) : fs(fs) {
|
FactoryResetService::FactoryResetService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
||||||
server->on(FACTORY_RESET_SERVICE_PATH,
|
: fs(fs) {
|
||||||
HTTP_POST,
|
server->on(FACTORY_RESET_SERVICE_PATH, HTTP_POST, securityManager->wrapRequest(std::bind(&FactoryResetService::handleRequest, this, _1), AuthenticationPredicates::IS_ADMIN));
|
||||||
securityManager->wrapRequest(std::bind(&FactoryResetService::handleRequest, this, _1),
|
|
||||||
AuthenticationPredicates::IS_ADMIN));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FactoryResetService::handleRequest(AsyncWebServerRequest* request) {
|
void FactoryResetService::handleRequest(AsyncWebServerRequest * request) {
|
||||||
request->onDisconnect(std::bind(&FactoryResetService::factoryReset, this));
|
request->onDisconnect(std::bind(&FactoryResetService::factoryReset, this));
|
||||||
request->send(200);
|
request->send(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,19 +17,25 @@ void FactoryResetService::handleRequest(AsyncWebServerRequest* request) {
|
|||||||
*/
|
*/
|
||||||
void FactoryResetService::factoryReset() {
|
void FactoryResetService::factoryReset() {
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
File root = fs->open(FS_CONFIG_DIRECTORY);
|
/*
|
||||||
File file;
|
* Based on LITTLEFS. Modified by proddy
|
||||||
while (file = root.openNextFile()) {
|
* Could be replaced with fs.rmdir(FS_CONFIG_DIRECTORY) in IDF 4.2
|
||||||
fs->remove(file.name());
|
*/
|
||||||
}
|
File root = fs->open(FS_CONFIG_DIRECTORY);
|
||||||
|
File file;
|
||||||
|
while (file = root.openNextFile()) {
|
||||||
|
char * pathStr = strdup(file.name());
|
||||||
|
file.close();
|
||||||
|
fs->remove(pathStr);
|
||||||
|
}
|
||||||
#elif defined(ESP8266)
|
#elif defined(ESP8266)
|
||||||
Dir configDirectory = fs->openDir(FS_CONFIG_DIRECTORY);
|
Dir configDirectory = fs->openDir(FS_CONFIG_DIRECTORY);
|
||||||
while (configDirectory.next()) {
|
while (configDirectory.next()) {
|
||||||
String path = FS_CONFIG_DIRECTORY;
|
String path = FS_CONFIG_DIRECTORY;
|
||||||
path.concat("/");
|
path.concat("/");
|
||||||
path.concat(configDirectory.fileName());
|
path.concat(configDirectory.fileName());
|
||||||
fs->remove(path);
|
fs->remove(path);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
RestartService::restartNow();
|
RestartService::restartNow();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,24 +236,15 @@ void System::button_OnLongPress(PButton & b) {
|
|||||||
// button indefinite press
|
// button indefinite press
|
||||||
void System::button_OnVLongPress(PButton & b) {
|
void System::button_OnVLongPress(PButton & b) {
|
||||||
LOG_DEBUG(F("Button pressed - very long press"));
|
LOG_DEBUG(F("Button pressed - very long press"));
|
||||||
|
#ifndef EMSESP_STANDALONE
|
||||||
LOG_WARNING(F("Performing factory reset..."));
|
LOG_WARNING(F("Performing factory reset..."));
|
||||||
EMSESP::console_.loop();
|
EMSESP::console_.loop();
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifdef EMSESP_TEST
|
||||||
// remove all files under config
|
Test::listDir(LITTLEFS, FS_CONFIG_DIRECTORY, 3);
|
||||||
File root = LITTLEFS.open(FS_CONFIG_DIRECTORY);
|
#endif
|
||||||
File file;
|
|
||||||
Serial.printf("Removing files: ", file.name());
|
|
||||||
while (file = root.openNextFile()) {
|
|
||||||
Serial.printf("%s ", file.name());
|
|
||||||
LITTLEFS.remove(file.name());
|
|
||||||
}
|
|
||||||
Serial.println();
|
|
||||||
|
|
||||||
// restart
|
EMSESP::esp8266React.factoryReset();
|
||||||
WiFi.disconnect(true);
|
|
||||||
delay(500);
|
|
||||||
ESP.restart();
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,16 +256,16 @@ void System::button_init(bool refresh) {
|
|||||||
|
|
||||||
// Allow 0 for Boot-button on NodeMCU-32s?
|
// Allow 0 for Boot-button on NodeMCU-32s?
|
||||||
// if (pbutton_gpio_) {
|
// if (pbutton_gpio_) {
|
||||||
if (!myPButton_.init(pbutton_gpio_, HIGH)) {
|
if (!myPButton_.init(pbutton_gpio_, HIGH)) {
|
||||||
LOG_INFO(F("External multi-functional button not detected"));
|
LOG_INFO(F("External multi-functional button not detected"));
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO(F("External multi-functional button enabled"));
|
LOG_INFO(F("External multi-functional button enabled"));
|
||||||
}
|
}
|
||||||
|
|
||||||
myPButton_.onClick(BUTTON_Debounce, button_OnClick);
|
myPButton_.onClick(BUTTON_Debounce, button_OnClick);
|
||||||
myPButton_.onDblClick(BUTTON_DblClickDelay, button_OnDblClick);
|
myPButton_.onDblClick(BUTTON_DblClickDelay, button_OnDblClick);
|
||||||
myPButton_.onLongPress(BUTTON_LongPressDelay, button_OnLongPress);
|
myPButton_.onLongPress(BUTTON_LongPressDelay, button_OnLongPress);
|
||||||
myPButton_.onVLongPress(BUTTON_VLongPressDelay, button_OnVLongPress);
|
myPButton_.onVLongPress(BUTTON_VLongPressDelay, button_OnVLongPress);
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -978,6 +978,7 @@ void Test::add_device(uint8_t device_id, uint8_t product_id) {
|
|||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
void Test::listDir(fs::FS & fs, const char * dirname, uint8_t levels) {
|
void Test::listDir(fs::FS & fs, const char * dirname, uint8_t levels) {
|
||||||
|
Serial.println();
|
||||||
Serial.printf("Listing directory: %s\r\n", dirname);
|
Serial.printf("Listing directory: %s\r\n", dirname);
|
||||||
|
|
||||||
File root = fs.open(dirname);
|
File root = fs.open(dirname);
|
||||||
|
|||||||
@@ -44,8 +44,6 @@ class Test {
|
|||||||
static void uart_telegram_withCRC(const char * rx_data);
|
static void uart_telegram_withCRC(const char * rx_data);
|
||||||
static void add_device(uint8_t device_id, uint8_t product_id);
|
static void add_device(uint8_t device_id, uint8_t product_id);
|
||||||
static void debug(uuid::console::Shell & shell, const std::string & command);
|
static void debug(uuid::console::Shell & shell, const std::string & command);
|
||||||
|
|
||||||
private:
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
static void listDir(fs::FS & fs, const char * dirname, uint8_t levels);
|
static void listDir(fs::FS & fs, const char * dirname, uint8_t levels);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user