//----------------------------------------------------------------------------- // 2022 Ahoy, https://www.mikrocontroller.net/topic/525778 // Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/ //----------------------------------------------------------------------------- #include "crc.h" namespace Ahoy { uint8_t crc8(uint8_t buf[], uint8_t len) { uint8_t crc = CRC8_INIT; for(uint8_t i = 0; i < len; i++) { crc ^= buf[i]; for(uint8_t b = 0; b < 8; b ++) { crc = (crc << 1) ^ ((crc & 0x80) ? CRC8_POLY : 0x00); } } return crc; } uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start) { uint16_t crc = start; uint8_t shift = 0; for(uint8_t i = 0; i < len; i ++) { crc = crc ^ buf[i]; for(uint8_t bit = 0; bit < 8; bit ++) { shift = (crc & 0x0001); crc = crc >> 1; if(shift != 0) crc = crc ^ CRC16_MODBUS_POLYNOM; } } return crc; } }