From 8a21133ecf4bd34764b844eb68dea42e9276ef3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Wed, 21 Dec 2016 20:51:35 +0100 Subject: [PATCH] Added EEPROM management commands to terminal interface --- code/src/main.ino | 2 +- code/src/pow.ino | 6 ++--- code/src/settings.ino | 53 +++++++++++++++++++++++++++++++++++++++---- code/src/web.ino | 6 ++--- 4 files changed, 56 insertions(+), 11 deletions(-) diff --git a/code/src/main.ino b/code/src/main.ino index b72f3b0d..695f1e01 100644 --- a/code/src/main.ino +++ b/code/src/main.ino @@ -111,7 +111,7 @@ void setup() { settingsSetup(); if (getSetting("hostname").length() == 0) { - setSetting("hostname", String() + getIdentifier()); + setSetting("hostname", getIdentifier()); saveSettings(); } diff --git a/code/src/pow.ino b/code/src/pow.ino index 0676ead5..431e3e3d 100644 --- a/code/src/pow.ino +++ b/code/src/pow.ino @@ -41,9 +41,9 @@ void powDettachInterrupts() { } void powSaveCalibration() { - setSetting("powPowerMult", String() + hlw8012.getPowerMultiplier()); - setSetting("powCurrentMult", String() + hlw8012.getCurrentMultiplier()); - setSetting("powVoltageMult", String() + hlw8012.getVoltageMultiplier()); + setSetting("powPowerMult", hlw8012.getPowerMultiplier()); + setSetting("powCurrentMult", hlw8012.getCurrentMultiplier()); + setSetting("powVoltageMult", hlw8012.getVoltageMultiplier()); } void powRetrieveCalibration() { diff --git a/code/src/settings.ino b/code/src/settings.ino index 29e0826d..6d3dc28e 100644 --- a/code/src/settings.ino +++ b/code/src/settings.ino @@ -20,6 +20,21 @@ Embedis embedis(Serial); // Settings // ----------------------------------------------------------------------------- +unsigned long settingsSize() { + bool zero = false; + unsigned long size = 0; + for (unsigned int i = SPI_FLASH_SEC_SIZE; i>0; i--) { + size++; + if (EEPROM.read(i) == 0) { + if (zero) break; + zero = true; + } else { + zero = false; + } + } + return size-2; +} + void settingsSetup() { EEPROM.begin(SPI_FLASH_SEC_SIZE); @@ -35,24 +50,46 @@ void settingsSetup() { #endif ); - Embedis::hardware( F("wifi"), [](Embedis* e) { + Embedis::hardware( F("WIFI"), [](Embedis* e) { StreamString s; WiFi.printDiag(s); e->response(s); }, 0); - Embedis::command( F("reconnect"), [](Embedis* e) { + Embedis::command( F("RECONNECT"), [](Embedis* e) { wifiConfigure(); wifiDisconnect(); e->response(Embedis::OK); }); - Embedis::command( F("reset"), [](Embedis* e) { + Embedis::command( F("RESET"), [](Embedis* e) { e->response(Embedis::OK); ESP.reset(); }); - DEBUG_MSG("[SETTINGS] Initialized\n"); + Embedis::command( F("EEPROM.DUMP"), [](Embedis* e) { + for (unsigned int i = 0; i < SPI_FLASH_SEC_SIZE; i++) { + if (i % 16 == 0) Serial.printf("\n[%04X] ", i); + Serial.printf("%02X ", EEPROM.read(i)); + } + Serial.printf("\n"); + e->response(Embedis::OK); + }); + + Embedis::command( F("EEPROM.ERASE"), [](Embedis* e) { + for (unsigned int i = 0; i < SPI_FLASH_SEC_SIZE; i++) { + EEPROM.write(i, 0xFF); + } + EEPROM.commit(); + e->response(Embedis::OK); + }); + + Embedis::command( F("SETTINGS.SIZE"), [](Embedis* e) { + e->response(String(settingsSize())); + }); + + DEBUG_MSG("[SETTINGS] EEPROM size: %d bytes\n", SPI_FLASH_SEC_SIZE); + DEBUG_MSG("[SETTINGS] Settings size: %d bytes\n", settingsSize()); } @@ -70,6 +107,14 @@ bool setSetting(const String& key, String& value) { return Embedis::set(key, value); } +bool setSetting(const String& key, char * value) { + return Embedis::set(key, String(value)); +} + +bool setSetting(const String& key, bool value) { + return Embedis::set(key, value ? String("0") : String("1")); +} + bool delSetting(const String& key) { return Embedis::del(key); } diff --git a/code/src/web.ino b/code/src/web.ino index 5645a24b..95e69336 100644 --- a/code/src/web.ino +++ b/code/src/web.ino @@ -155,12 +155,12 @@ void _wsParse(uint32_t client_id, uint8_t * payload, size_t length) { // Checkboxes if (apiEnabled != (getSetting("apiEnabled").toInt() == 1)) { - setSetting("apiEnabled", String() + (apiEnabled ? 1 : 0)); + setSetting("apiEnabled", apiEnabled); dirty = true; } #if ENABLE_FAUXMO if (fauxmoEnabled != (getSetting("fauxmoEnabled").toInt() == 1)) { - setSetting("fauxmoEnabled", String() + (fauxmoEnabled ? 1 : 0)); + setSetting("fauxmoEnabled", fauxmoEnabled); dirty = true; } #endif @@ -502,7 +502,7 @@ void webSetup() { char lastModified[50]; sprintf(lastModified, "%s %s GMT", __DATE__, __TIME__); server.serveStatic("/", SPIFFS, "/").setLastModified(lastModified); - + // 404 server.onNotFound([](AsyncWebServerRequest *request){ request->send(404);