44 lines
887 B
C++
44 lines
887 B
C++
|
#include <Arduino.h>
|
||
|
#include "config.h"
|
||
|
|
||
|
LubeConfig_t LubeConfig;
|
||
|
|
||
|
void StoreConfig_EEPROM()
|
||
|
{
|
||
|
LubeConfig.checksum = 0;
|
||
|
LubeConfig.checksum = Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig));
|
||
|
|
||
|
EEPROM.begin(512);
|
||
|
EEPROM.put(0, LubeConfig);
|
||
|
EEPROM.commit();
|
||
|
EEPROM.end();
|
||
|
}
|
||
|
|
||
|
void GetConfig_EEPROM()
|
||
|
{
|
||
|
EEPROM.begin(512);
|
||
|
EEPROM.get(0, LubeConfig);
|
||
|
EEPROM.end();
|
||
|
|
||
|
uint32_t checksum = LubeConfig.checksum;
|
||
|
LubeConfig.checksum = 0;
|
||
|
|
||
|
if (Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)) == checksum)
|
||
|
Serial.printf("Checksum OK");
|
||
|
else
|
||
|
Serial.printf("Checksum BAD");
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
}
|