2022-01-09 20:51:16 +01:00
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
LubeConfig_t LubeConfig;
|
2022-01-19 22:23:36 +01:00
|
|
|
persistenceData_t PersistenceData;
|
|
|
|
uint16_t eePersistenceMarker = 0;
|
|
|
|
uint16_t eeVersion = 0; // inc
|
|
|
|
|
|
|
|
const uint16_t startofLubeConfig = sizeof(eePersistenceMarker);
|
|
|
|
const uint16_t startofPersistence = sizeof(LubeConfig);
|
2022-01-09 20:51:16 +01:00
|
|
|
|
|
|
|
void StoreConfig_EEPROM()
|
|
|
|
{
|
|
|
|
LubeConfig.checksum = 0;
|
|
|
|
LubeConfig.checksum = Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig));
|
|
|
|
|
|
|
|
EEPROM.begin(512);
|
2022-01-19 22:23:36 +01:00
|
|
|
EEPROM.put(startofLubeConfig, LubeConfig);
|
2022-01-09 20:51:16 +01:00
|
|
|
EEPROM.commit();
|
|
|
|
EEPROM.end();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GetConfig_EEPROM()
|
|
|
|
{
|
|
|
|
EEPROM.begin(512);
|
2022-01-19 22:23:36 +01:00
|
|
|
EEPROM.get(startofLubeConfig, LubeConfig);
|
2022-01-09 20:51:16 +01:00
|
|
|
EEPROM.end();
|
|
|
|
|
|
|
|
uint32_t checksum = LubeConfig.checksum;
|
|
|
|
LubeConfig.checksum = 0;
|
|
|
|
|
|
|
|
if (Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)) == checksum)
|
2022-01-19 22:23:36 +01:00
|
|
|
Serial.printf("CFG EEPROM Checksum OK\n");
|
|
|
|
else
|
|
|
|
Serial.printf("CFG EEPROM Checksum BAD\n");
|
|
|
|
LubeConfig.checksum = checksum;
|
|
|
|
}
|
|
|
|
|
|
|
|
void StorePersistence_EEPROM()
|
|
|
|
{
|
|
|
|
EEPROM.begin(512);
|
|
|
|
|
|
|
|
if (PersistenceData.writeCycleCounter == 0xFFFF)
|
|
|
|
{
|
|
|
|
PersistenceData.writeCycleCounter = 0;
|
|
|
|
eePersistenceMarker += sizeof(PersistenceData);
|
|
|
|
EEPROM.put(0, eePersistenceMarker);
|
|
|
|
}
|
2022-01-09 20:51:16 +01:00
|
|
|
else
|
2022-01-19 22:23:36 +01:00
|
|
|
{
|
|
|
|
PersistenceData.writeCycleCounter++;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t PersistenceDataAddress = startofPersistence + eePersistenceMarker;
|
|
|
|
|
|
|
|
PersistenceData.checksum = 0;
|
|
|
|
PersistenceData.checksum = Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData));
|
|
|
|
|
|
|
|
EEPROM.put(PersistenceDataAddress, PersistenceData);
|
|
|
|
EEPROM.commit();
|
|
|
|
EEPROM.end();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GetPersistence_EEPROM()
|
|
|
|
{
|
|
|
|
EEPROM.begin(512);
|
|
|
|
EEPROM.get(0, eePersistenceMarker);
|
|
|
|
uint16_t PersistenceDataAddress = startofPersistence + eePersistenceMarker;
|
|
|
|
|
|
|
|
EEPROM.get(PersistenceDataAddress, PersistenceData);
|
|
|
|
EEPROM.end();
|
|
|
|
|
|
|
|
uint32_t checksum = PersistenceData.checksum;
|
|
|
|
PersistenceData.checksum = 0;
|
|
|
|
|
|
|
|
if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) == checksum)
|
|
|
|
{
|
|
|
|
Serial.printf("Persistance EEPROM Checksum OK\n");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Serial.printf("Persistance EEPROM Checksum BAD\n");
|
|
|
|
FormatPersistence_EEPROM();
|
|
|
|
}
|
|
|
|
PersistenceData.checksum = checksum;
|
|
|
|
}
|
|
|
|
|
|
|
|
void FormatConfig_EEPROM()
|
|
|
|
{
|
|
|
|
LubeConfig_t defaults;
|
|
|
|
LubeConfig = defaults;
|
|
|
|
StoreConfig_EEPROM();
|
|
|
|
}
|
|
|
|
|
|
|
|
void FormatPersistence_EEPROM()
|
|
|
|
{
|
|
|
|
persistenceData_t defaults;
|
|
|
|
PersistenceData = defaults;
|
|
|
|
eePersistenceMarker = 0;
|
|
|
|
StorePersistence_EEPROM();
|
2022-01-09 20:51:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t Checksum_EEPROM(uint8_t const *data, size_t len)
|
|
|
|
{
|
|
|
|
if (data == NULL)
|
|
|
|
return 0;
|
|
|
|
uint32_t crc = 0;
|
|
|
|
while (len--)
|
|
|
|
{
|
|
|
|
crc ^= *data++;
|
|
|
|
for (uint8_t k = 0; k < 8; k++)
|
|
|
|
crc = crc & 1 ? (crc >> 1) ^ 0xb2 : crc >> 1;
|
|
|
|
}
|
|
|
|
return crc ^ 0xff;
|
|
|
|
}
|