Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
Diff: crc.cpp
- Revision:
- 80:83b0d879cc32
- Parent:
- 78:0cbbac7f2016
--- a/crc.cpp Mon May 23 18:57:12 2016 -0500 +++ b/crc.cpp Thu Jun 02 21:56:16 2016 +0000 @@ -1,5 +1,36 @@ + + #include "crc.h" + +uint8_t OneWire::crc::calculateCrc8(uint8_t crc8, uint8_t data) +{ + // See Application Note 27 + crc8 = crc8 ^ data; + for (int i = 0; i < 8; i++) + { + if (crc8 & 1) + { + crc8 = (crc8 >> 1) ^ 0x8c; + } + else + { + crc8 = (crc8 >> 1); + } + } + + return crc8; +} + +uint8_t OneWire::crc::calculateCrc8(const uint8_t * data, size_t dataLen, uint8_t crc) +{ + for (size_t i = 0; i < dataLen; i++) + { + crc = calculateCrc8(crc, data[i]); + } + return crc; +} + uint16_t OneWire::crc::calculateCrc16(uint16_t crc16, uint16_t data) { const uint16_t oddparity[] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 };