CRC is a C library to calculate 8/16/32- bit checksums using predefined polynomials
- CRC8-ITU (Poly 0x07, Init 0x00, no input/output bit reflection, XorOut 0x55)
- CRC16-CCITT BLUETOOTH CCITT-TRUE V-41-LSB KERMIT (Poly 0x1021, Init 0x0000, input/output bit reflection, XorOut 0x0000)
- CRC16-MODBUS (Poly 0x8005, Init 0xFFFF, input/output bit reflection, XorOut 0x0000)
- CRC32-POSIX/cksum (Poly 0x04C11DB7, Init 0x00000000, no input/output bit reflection, XorOut 0xFFFFFFFF)
The easiest way to fetch this component is to use CPM.cmake. In your CMakeLists.txt add:
CPMAddPackage("gh:embetech-official/crc@2")In your source files:
#include <embetech/crc.h>
uint8_t your_data[100] = {};
// checksum of buffer
uint16_t crc = CRC16_CCITT_Init();
crc = CRC16_CCITT_UpdateBuf(your_data, sizeof(your_data), crc);
crc = CRC16_CCITT_Finalize(crc);
// Manually append a byte to the checksum calculation
uint8_t additional_data = 0xaa;
uint16_t crc2 = CRC16_CCITT_Init();
crc2 = CRC16_CCITT_UpdateBuf(your_data, sizeof(your_data), crc2);
crc2 = CRC16_CCITT_UpdateBuf(&additional_data, sizeof(additional_data), crc2);
crc2 = CRC16_CCITT_Finalize(crc2);