FEATURE: full config store and restore

This commit is contained in:
Robin Dietzel 2023-01-13 11:28:28 +01:00
parent 03a4180c9c
commit 7738e7d1ee
2 changed files with 34 additions and 6 deletions

View File

@ -7,6 +7,6 @@
// Auto generated header file containing the last git revision // Auto generated header file containing the last git revision
#define GIT_HASH "5b2e03a" #define GIT_HASH "df5aa6f"
#endif //FLOATPUMP_GIT_REVISION_TEMPLATE_H #endif //FLOATPUMP_GIT_REVISION_TEMPLATE_H

View File

@ -14,18 +14,33 @@ namespace floatpump {
public: public:
Config_Store(); Config_Store();
const uint32_t startAddr = 0x08060000;
static uint32_t StoreInFlash(uint32_t StartAddress, uint32_t *Data, uint16_t nData) { static uint32_t StoreInFlash(uint32_t StartAddress, uint32_t *Data, uint16_t nData) {
uint16_t progr = 0; uint16_t progr = 0;
HAL_FLASH_Unlock(); HAL_FLASH_Unlock();
FLASH_Erase_Sector(FLASH_SECTOR_7, VOLTAGE_RANGE_1); FLASH_Erase_Sector(FLASH_SECTOR_7, VOLTAGE_RANGE_1);
while( progr < nData) { while (progr < nData) {
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, StartAddress, Data[progr]) == HAL_OK) { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, StartAddress, Data[progr]) == HAL_OK) {
progr++; progr++;
StartAddress += 4; } else { StartAddress += 4;
} else {
return HAL_FLASH_GetError(); return HAL_FLASH_GetError();
} }
} }
HAL_FLASH_Lock(); HAL_FLASH_Lock();
return 0;
}
static uint32_t ReadFromFlash(uint32_t StartAddress, uint32_t *Data, uint16_t nData) {
uint16_t progr = 0;
while (progr < nData) {
Data[progr] = *(uint32_t *) StartAddress;
progr++;
StartAddress += 4;
}
return 0;
} }
void saveToFlash() { void saveToFlash() {
@ -41,13 +56,26 @@ namespace floatpump {
data[8] = RefillBelow.getValue(); data[8] = RefillBelow.getValue();
data[9] = RefillHysteresis.getValue(); data[9] = RefillHysteresis.getValue();
StoreInFlash(0x08060000, data, 10); StoreInFlash(startAddr, data, 10);
return;
}; };
void resetDefaults(); void resetDefaults();
void loadFromFlash() { void loadFromFlash() {
this->RefillBelow.setValue(*(uint32_t *)0x08060000); uint32_t data[10];
ReadFromFlash(startAddr, data, 10);
TankCalibLow.setValue(data[0]);
TankCalibHigh.setValue(data[1]);
TankMinLevel.setValue(data[2]);
TankHysteresis.setValue(data[3]);
TankPumpInvert.setValue(data[4]);
RefillEnable.setValue(data[5]);
RefillBlockInvert.setValue(data[6]);
RefillBlockEnable.setValue(data[7]);
RefillBelow.setValue(data[8]);
RefillHysteresis.setValue(data[9]);
return;
}; };
template<class T> template<class T>