/* * crc.c * * Created on: Jun 9, 2021 * Author: user */ #include "crc8.h" /* TODO add polynomial and init value to make this function * generic */ /* Stolen from Sensirion SCD4x datasheet, section 3.11 */ uint8_t crc8_calculate(const uint8_t *data, uint16_t count) { uint16_t current_byte; uint8_t crc = CRC8_INIT; uint8_t crc_bit; /* calculates 8-Bit checksum with given polynomial */ for (current_byte = 0; current_byte < count; ++current_byte) { crc ^= (data[current_byte]); for(crc_bit = 8; crc_bit > 0; --crc_bit) { if (crc & 0x80) { crc =(crc << 1) ^ CRC8_POLYNOMIAL; } else { crc = (crc << 1); } } } return crc; }