Merge pull request #101 from airgradienthq/hotfix/EEPROM-data-override-by-after-OTA-perform-success

fix issue EEPROM override after OTA perform by use `spiffs`
This commit is contained in:
Phat Nguyen
2024-05-01 09:54:37 +07:00
committed by GitHub

View File

@ -1,6 +1,14 @@
#include "AgConfigure.h" #include "AgConfigure.h"
#include "EEPROM.h"
#include "Libraries/Arduino_JSON/src/Arduino_JSON.h" #include "Libraries/Arduino_JSON/src/Arduino_JSON.h"
#if ESP32
#include "FS.h"
#include "SPIFFS.h"
#else
#include "EEPROM.h"
#endif
#define EEPROM_CONFIG_SIZE 512
#define CONFIG_FILE_NAME "/cfg.bin"
const char *CONFIGURATION_CONTROL_NAME[] = { const char *CONFIGURATION_CONTROL_NAME[] = {
[ConfigurationControlLocal] = "local", [ConfigurationControlLocal] = "local",
@ -54,10 +62,19 @@ void Configuration::saveConfig(void) {
for (int i = 0; i < sizeof(config); i++) { for (int i = 0; i < sizeof(config); i++) {
EEPROM.write(i, data[i]); EEPROM.write(i, data[i]);
} }
#else
EEPROM.writeBytes(0, &config, sizeof(config));
#endif
EEPROM.commit(); EEPROM.commit();
#else
File file = SPIFFS.open(CONFIG_FILE_NAME, "w", true);
if (file && !file.isDirectory()) {
if (file.write((const uint8_t *)&config, sizeof(config)) !=
sizeof(config)) {
logError("Write SPIFFS file failed");
}
file.close();
} else {
logError("Open SPIFFS file to write failed");
}
#endif
logInfo("Save Config"); logInfo("Save Config");
} }
@ -70,9 +87,13 @@ void Configuration::loadConfig(void) {
} }
readSuccess = true; readSuccess = true;
#else #else
if (EEPROM.readBytes(0, &config, sizeof(config)) == sizeof(config)) { File file = SPIFFS.open(CONFIG_FILE_NAME);
if (file && !file.isDirectory()) {
if (file.readBytes((char *)&config, sizeof(config)) == sizeof(config)) {
readSuccess = true; readSuccess = true;
} }
file.close();
}
#endif #endif
if (!readSuccess) { if (!readSuccess) {
@ -162,7 +183,20 @@ Configuration::~Configuration() {}
* @return false Failure * @return false Failure
*/ */
bool Configuration::begin(void) { bool Configuration::begin(void) {
EEPROM.begin(512); if (sizeof(config) > EEPROM_CONFIG_SIZE) {
logError("Configuration over EEPROM_CONFIG_SIZE");
return false;
}
#ifdef ESP32
if (!SPIFFS.begin(true)) {
logError("Init SPIFFS failed");
return false;
}
#else
EEPROM.begin(EEPROM_CONFIG_SIZE);
#endif
loadConfig(); loadConfig();
printConfig(); printConfig();
@ -298,7 +332,8 @@ bool Configuration::parse(String data, bool isLocal) {
} }
if (inUSAQI != config.inUSAQI) { if (inUSAQI != config.inUSAQI) {
configLogInfo("pmStandard", getPMStandardString(config.inUSAQI), pmStandard); configLogInfo("pmStandard", getPMStandardString(config.inUSAQI),
pmStandard);
config.inUSAQI = inUSAQI; config.inUSAQI = inUSAQI;
changed = true; changed = true;
} }
@ -384,7 +419,8 @@ bool Configuration::parse(String data, bool isLocal) {
if (displayMode != config.displayMode) { if (displayMode != config.displayMode) {
changed = true; changed = true;
configLogInfo("displayMode", getDisplayModeString(config.displayMode), mode); configLogInfo("displayMode", getDisplayModeString(config.displayMode),
mode);
config.displayMode = displayMode; config.displayMode = displayMode;
} }
} else { } else {
@ -816,9 +852,7 @@ int Configuration::getNoxLearningOffset(void) {
return config.noxLearningOffset; return config.noxLearningOffset;
} }
String Configuration::wifiSSID(void) { String Configuration::wifiSSID(void) { return "airgradient-" + ag->deviceId(); }
return "airgradient-" + ag->deviceId();
}
String Configuration::wifiPass(void) { return String("cleanair"); } String Configuration::wifiPass(void) { return String("cleanair"); }