1 #ifndef ACE_TIME_HW_CRC_EEPROM_H 2 #define ACE_TIME_HW_CRC_EEPROM_H 9 #if !defined(AVR) && !defined(ESP8266) && !defined(ESP32) && \ 11 #error Unsupported board type 40 #if defined(ESP8266) || defined(ESP32) 41 void begin(uint16_t size) {
45 void begin(uint16_t ) {
52 uint16_t writeWithCrc(
int address,
const void*
const data,
53 const uint16_t dataSize)
const {
54 uint16_t byteCount = dataSize;
55 const uint8_t* d = (
const uint8_t*) data;
58 while (byteCount-- > 0) {
59 write(address++, *d++);
63 uint32_t crc = FastCRC32().crc32((
const uint8_t*) data, dataSize);
66 write(address++, buf[0]);
67 write(address++, buf[1]);
68 write(address++, buf[2]);
69 write(address++, buf[3]);
71 bool success = commit();
72 return (success) ? dataSize +
sizeof(crc) : 0;
79 bool readWithCrc(
int address,
void*
const data,
80 const uint16_t dataSize)
const {
81 uint16_t byteCount = dataSize;
82 uint8_t* d = (uint8_t*) data;
85 while (byteCount-- > 0) {
86 *d++ = read(address++);
91 buf[0] = read(address++);
92 buf[1] = read(address++);
93 buf[2] = read(address++);
94 buf[3] = read(address++);
98 uint32_t dataCrc = FastCRC32().crc32((
const uint8_t*) data, dataSize);
99 return crc == dataCrc;
103 void write(
int address, uint8_t val)
const {
104 #if defined(ESP8266) || defined(ESP32) 105 EEPROM.write(address, val);
107 EEPROM.update(address, val);
111 uint8_t read(
int address)
const {
112 return EEPROM.read(address);
115 bool commit()
const {
116 #if defined(ESP8266) || defined(ESP32) 117 return EEPROM.commit();