6 #ifndef ACE_TIME_HW_CRC_EEPROM_H 7 #define ACE_TIME_HW_CRC_EEPROM_H 14 #if !defined(AVR) && !defined(ESP8266) && !defined(ESP32) && \ 16 #error Unsupported board type 45 #if defined(ESP8266) || defined(ESP32) 46 void begin(uint16_t size) {
50 void begin(uint16_t ) {
57 uint16_t writeWithCrc(
int address,
const void*
const data,
58 const uint16_t dataSize)
const {
59 uint16_t byteCount = dataSize;
60 const uint8_t* d = (
const uint8_t*) data;
63 while (byteCount-- > 0) {
64 write(address++, *d++);
68 uint32_t crc = FastCRC32().crc32((
const uint8_t*) data, dataSize);
71 write(address++, buf[0]);
72 write(address++, buf[1]);
73 write(address++, buf[2]);
74 write(address++, buf[3]);
76 bool success = commit();
77 return (success) ? dataSize +
sizeof(crc) : 0;
84 bool readWithCrc(
int address,
void*
const data,
85 const uint16_t dataSize)
const {
86 uint16_t byteCount = dataSize;
87 uint8_t* d = (uint8_t*) data;
90 while (byteCount-- > 0) {
91 *d++ = read(address++);
96 buf[0] = read(address++);
97 buf[1] = read(address++);
98 buf[2] = read(address++);
99 buf[3] = read(address++);
101 memcpy(&crc, buf, 4);
103 uint32_t dataCrc = FastCRC32().crc32((
const uint8_t*) data, dataSize);
104 return crc == dataCrc;
108 void write(
int address, uint8_t val)
const {
109 #if defined(ESP8266) || defined(ESP32) 110 EEPROM.write(address, val);
112 EEPROM.update(address, val);
116 uint8_t read(
int address)
const {
117 return EEPROM.read(address);
120 bool commit()
const {
121 #if defined(ESP8266) || defined(ESP32) 122 return EEPROM.commit();