Store upgrade progress to eeprom

This commit is contained in:
Gunnar Skjold
2024-11-29 11:26:00 +01:00
parent 07205b8008
commit b7c2510098
14 changed files with 272 additions and 140 deletions

View File

@@ -16,7 +16,6 @@
#define EEPROM_TEMP_CONFIG_ADDRESS 2048
#define CONFIG_SYSTEM_START 8
#define CONFIG_UPGRADE_INFO_START 16
#define CONFIG_NETWORK_START 40
#define CONFIG_METER_START 296
#define CONFIG_GPIO_START 368
@@ -30,6 +29,7 @@
#define CONFIG_HA_START 1552
#define CONFIG_UI_START 1720
#define CONFIG_CLOUD_START 1742
#define CONFIG_UPGRADE_INFO_START 1934
#define CONFIG_METER_START_103 32
#define CONFIG_UPGRADE_INFO_START_103 216
@@ -63,7 +63,7 @@ struct SystemConfig {
uint8_t dataCollectionConsent; // 0 = unknown, 1 = accepted, 2 = declined
char country[3];
uint8_t energyspeedometer;
}; // 9
}; // 8
struct NetworkConfig {
char ssid[32];
@@ -238,12 +238,12 @@ struct UiConfig {
struct UpgradeInformation {
char fromVersion[8];
char toVersion[8];
int16_t exitCode;
int16_t errorCode;
uint32_t size;
uint16_t block_position;
uint8_t retry_count;
}; // 27
uint8_t reboot_count;
int8_t errorCode;
}; // 25
struct CloudConfig {
bool enabled;
@@ -252,7 +252,7 @@ struct CloudConfig {
uint16_t port;
uint8_t clientId[16];
uint8_t proto;
}; // 84
}; // 88
class AmsConfiguration {
public:
@@ -337,7 +337,7 @@ public:
void ackUiLanguageChange();
bool getUpgradeInformation(UpgradeInformation&);
bool setUpgradeInformation(int16_t exitCode, int16_t errorCode, const char* currentVersion, const char* nextVersion);
bool setUpgradeInformation(UpgradeInformation&);
void clearUpgradeInformation(UpgradeInformation&);
bool getCloudConfig(CloudConfig&);

View File

@@ -7,7 +7,7 @@
#ifndef _AMSSTORAGE_H
#define _AMSSTORAGE_H
#define FILE_FIRMWARE "/firmware.bin"
#define FILE_FIRMWARE_DELETE "/firmware.bin"
#define FILE_MQTT_CA "/mqtt-ca.pem"
#define FILE_MQTT_CERT "/mqtt-cert.pem"

View File

@@ -420,6 +420,7 @@ bool AmsConfiguration::getHomeAssistantConfig(HomeAssistantConfig& config) {
EEPROM.end();
if(stripNonAscii((uint8_t*) config.discoveryPrefix, 64) || stripNonAscii((uint8_t*) config.discoveryHostname, 64) || stripNonAscii((uint8_t*) config.discoveryNameTag, 16)) {
clearHomeAssistantConfig(config);
return false;
}
return true;
} else {
@@ -622,6 +623,7 @@ bool AmsConfiguration::getPriceServiceConfig(PriceServiceConfig& config) {
EEPROM.end();
if(strlen(config.entsoeToken) != 0 && strlen(config.entsoeToken) != 36) {
clearPriceServiceConfig(config);
return false;
}
return true;
} else {
@@ -677,6 +679,7 @@ bool AmsConfiguration::getEnergyAccountingConfig(EnergyAccountingConfig& config)
EEPROM.end();
if(config.thresholds[9] != 0xFFFF) {
clearEnergyAccountingConfig(config);
return false;
}
if(config.hours > 5) config.hours = 5;
return true;
@@ -784,13 +787,7 @@ void AmsConfiguration::ackUiLanguageChange() {
uiLanguageChanged = false;
}
bool AmsConfiguration::setUpgradeInformation(int16_t exitCode, int16_t errorCode, const char* currentVersion, const char* nextVersion) {
UpgradeInformation upinfo;
upinfo.exitCode = exitCode;
upinfo.errorCode = errorCode;
strcpy(upinfo.fromVersion, currentVersion);
strcpy(upinfo.toVersion, nextVersion);
bool AmsConfiguration::setUpgradeInformation(UpgradeInformation& upinfo) {
stripNonAscii((uint8_t*) upinfo.fromVersion, 8);
stripNonAscii((uint8_t*) upinfo.toVersion, 8);
@@ -808,6 +805,7 @@ bool AmsConfiguration::getUpgradeInformation(UpgradeInformation& upinfo) {
EEPROM.end();
if(stripNonAscii((uint8_t*) upinfo.fromVersion, 8) || stripNonAscii((uint8_t*) upinfo.toVersion, 8)) {
clearUpgradeInformation(upinfo);
return false;
}
return true;
} else {
@@ -817,10 +815,13 @@ bool AmsConfiguration::getUpgradeInformation(UpgradeInformation& upinfo) {
}
void AmsConfiguration::clearUpgradeInformation(UpgradeInformation& upinfo) {
upinfo.exitCode = -1;
upinfo.errorCode = 0;
memset(upinfo.fromVersion, 0, 8);
memset(upinfo.toVersion, 0, 8);
upinfo.errorCode = 0;
upinfo.size = 0;
upinfo.block_position = 0;
upinfo.retry_count = 0;
upinfo.reboot_count = 0;
}
bool AmsConfiguration::getCloudConfig(CloudConfig& config) {