AceUtils  0.5.0
Useful Arduino utilties which are too small as separate libraries, but complex enough to be shared among multiple projects, and often have external dependencies to other libraries.
CrcEeprom.cpp
1 /*
2  * MIT License
3  * Copyright (c) 2018 Brian T. Park
4  */
5 
6 #include "CrcEeprom.h"
7 
8 namespace ace_utils {
9 namespace crc_eeprom {
10 
12  size_t address,
13  const void* const data,
14  size_t const dataSize
15 ) {
16  const size_t address0 = address;
17 
18  // write the contextId
19  writeData(address, (const uint8_t*) &mContextId, sizeof(mContextId));
20  address += sizeof(mContextId);
21 
22  // write data block
23  writeData(address, (const uint8_t*) data, dataSize);
24  address += dataSize;
25 
26  // write CRC at the end of the data block
27  uint32_t crc = (*mCrc32Calculator)(data, dataSize);
28  writeData(address, (const uint8_t*) &crc, sizeof(crc));
29  address += sizeof(crc);
30 
31  bool success = commit();
32  return (success) ? address - address0: 0;
33 }
34 
36  size_t address,
37  void* const data,
38  size_t const dataSize
39 ) const {
40  // read contextId
41  uint32_t retrievedContextId;
42  readData(address, (uint8_t*) &retrievedContextId, sizeof(retrievedContextId));
43  if (retrievedContextId != mContextId) return false;
44  address += sizeof(retrievedContextId);
45 
46  // read data block
47  readData(address, (uint8_t*) data, dataSize);
48  address += dataSize;
49 
50  // read the CRC
51  uint32_t retrievedCrc;
52  readData(address, (uint8_t*) &retrievedCrc, sizeof(retrievedCrc));
53  address += sizeof(retrievedCrc);
54 
55  // Verify CRC
56  uint32_t expectedCrc = (*mCrc32Calculator)(data, dataSize);
57  return expectedCrc == retrievedCrc;
58 }
59 
60 } // crc_eeprom
61 } // ace_utils
ace_utils::crc_eeprom::CrcEeprom::writeDataWithCrc
size_t writeDataWithCrc(size_t address, const void *data, size_t dataSize)
Write the data with its CRC and its contextId.
Definition: CrcEeprom.cpp:11
ace_utils::crc_eeprom::CrcEeprom::readDataWithCrc
bool readDataWithCrc(size_t address, void *data, size_t dataSize) const
Read the data from EEPROM along with its CRC and contextId.
Definition: CrcEeprom.cpp:35