diff --git a/src/esp32/main-esp32.cpp b/src/esp32/main-esp32.cpp index e000ad5af..b0afab656 100644 --- a/src/esp32/main-esp32.cpp +++ b/src/esp32/main-esp32.cpp @@ -43,8 +43,8 @@ void esp32Setup() nvs_stats_t nvs_stats; auto res = nvs_get_stats(NULL, &nvs_stats); assert(res == ESP_OK); - DEBUG_MSG("NVS: UsedEntries %d, FreeEntries %d, AllEntries %d\n", nvs_stats.used_entries, nvs_stats.free_entries, - nvs_stats.total_entries); + DEBUG_MSG("NVS: UsedEntries %d, FreeEntries %d, AllEntries %d, NameSpaces %d\n", nvs_stats.used_entries, nvs_stats.free_entries, + nvs_stats.total_entries, nvs_stats.namespace_count); DEBUG_MSG("Setup Preferences in Flash Storage\n"); diff --git a/src/main.cpp b/src/main.cpp index 15085034d..0b1b676b2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -208,6 +208,7 @@ class ButtonThread : public OSThread userButton.attachClick(userButtonPressed); userButton.attachDuringLongPress(userButtonPressedLong); userButton.attachDoubleClick(userButtonDoublePressed); + userButton.attachMultiClick(userButtonMultiPressed); userButton.attachLongPressStart(userButtonPressedLongStart); userButton.attachLongPressStop(userButtonPressedLongStop); wakeOnIrq(BUTTON_PIN, FALLING); @@ -336,6 +337,14 @@ class ButtonThread : public OSThread #endif } + static void userButtonMultiPressed() + { +#ifndef NO_ESP32 + clearNVS(); +#endif + } + + static void userButtonPressedLongStart() { DEBUG_MSG("Long press start!\n"); diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 4ba4c14d1..04359aaed 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -23,6 +23,7 @@ #include "mesh/http/WiFiAPClient.h" #include "plugins/esp32/StoreForwardPlugin.h" #include +#include #endif NodeDB nodeDB; @@ -86,6 +87,10 @@ bool NodeDB::resetRadioConfig() if (radioConfig.preferences.factory_reset) { DEBUG_MSG("Performing factory reset!\n"); installDefaultDeviceState(); +#ifndef NO_ESP32 + // This will erase what's in NVS including ssl keys, persistant variables and ble pairing + nvs_flash_erase(); +#endif didFactoryReset = true; } diff --git a/src/nimble/BluetoothUtil.cpp b/src/nimble/BluetoothUtil.cpp index 42ff06b7d..016eafe06 100644 --- a/src/nimble/BluetoothUtil.cpp +++ b/src/nimble/BluetoothUtil.cpp @@ -15,6 +15,7 @@ #ifndef NO_ESP32 #include "mesh/http/WiFiAPClient.h" +#include #endif static bool pinShowing; @@ -484,7 +485,24 @@ void disablePin() doublepressed = millis(); } +// This should go somewhere else. +void clearNVS() +{ +#ifndef NO_ESP32 + // As soon as the LED flashing from double click is done, immediately do a tripple click to + // erase nvs memory. + if (doublepressed > (millis() - 2000)) { + DEBUG_MSG("Clearing NVS memory\n"); + + // This will erase ble pairings, ssl key and persistent preferences. + nvs_flash_erase(); + + DEBUG_MSG("Restarting...\n"); + ESP.restart(); + } +#endif +} // This routine is called multiple times, once each time we come back from sleep void reinitBluetooth() @@ -556,8 +574,7 @@ void setBluetoothEnable(bool on) bluetoothOn = on; if (on) { - if (! isWifiAvailable() ) - { + if (!isWifiAvailable()) { Serial.printf("Pre BT: %u heap size\n", ESP.getFreeHeap()); // ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) ); reinitBluetooth(); diff --git a/src/nimble/BluetoothUtil.h b/src/nimble/BluetoothUtil.h index 4e423769e..8d02c0afc 100644 --- a/src/nimble/BluetoothUtil.h +++ b/src/nimble/BluetoothUtil.h @@ -15,6 +15,7 @@ void deinitBLE(); void loopBLE(); void reinitBluetooth(); void disablePin(); +void clearNVS(); /** * A helper function that implements simple read and write handling for a uint32_t