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 "EEPROM.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[] = {
[ConfigurationControlLocal] = "local",
@ -54,10 +62,19 @@ void Configuration::saveConfig(void) {
for (int i = 0; i < sizeof(config); i++) {
EEPROM.write(i, data[i]);
}
#else
EEPROM.writeBytes(0, &config, sizeof(config));
#endif
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");
}
@ -70,9 +87,13 @@ void Configuration::loadConfig(void) {
}
readSuccess = true;
#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;
}
file.close();
}
#endif
if (!readSuccess) {
@ -162,7 +183,20 @@ Configuration::~Configuration() {}
* @return false Failure
*/
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();
printConfig();
@ -298,7 +332,8 @@ bool Configuration::parse(String data, bool isLocal) {
}
if (inUSAQI != config.inUSAQI) {
configLogInfo("pmStandard", getPMStandardString(config.inUSAQI), pmStandard);
configLogInfo("pmStandard", getPMStandardString(config.inUSAQI),
pmStandard);
config.inUSAQI = inUSAQI;
changed = true;
}
@ -384,7 +419,8 @@ bool Configuration::parse(String data, bool isLocal) {
if (displayMode != config.displayMode) {
changed = true;
configLogInfo("displayMode", getDisplayModeString(config.displayMode), mode);
configLogInfo("displayMode", getDisplayModeString(config.displayMode),
mode);
config.displayMode = displayMode;
}
} else {
@ -816,9 +852,7 @@ int Configuration::getNoxLearningOffset(void) {
return config.noxLearningOffset;
}
String Configuration::wifiSSID(void) {
return "airgradient-" + ag->deviceId();
}
String Configuration::wifiSSID(void) { return "airgradient-" + ag->deviceId(); }
String Configuration::wifiPass(void) { return String("cleanair"); }