diff --git a/Software/ChainLube/src/config.cpp b/Software/ChainLube/src/config.cpp index 44883ba..dd0e3c9 100644 --- a/Software/ChainLube/src/config.cpp +++ b/Software/ChainLube/src/config.cpp @@ -172,14 +172,19 @@ uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) { if (data == NULL) return 0; - uint32_t crc = 0; + uint32_t crc, mask; + crc = 0xFFFFFFFF; + while (len--) { crc ^= *data++; for (uint8_t k = 0; k < 8; k++) - crc = crc & 1 ? (crc >> 1) ^ 0xb2 : crc >> 1; + { + mask = -(crc & 1); + crc = (crc >> 1) ^ (0xEDB88320 & mask); + } } - return crc ^ 0xff; + return ~crc; } void dumpEEPROM(uint16_t memoryAddress, uint16_t length)