20 #if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_SAMD)
21 #include <avr/pgmspace.h>
30 namespace crc32_nibble {
37 static const crc_t crc_table[16] PROGMEM = {
38 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
39 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
49 for (i = 1; i < data_len; i++) {
51 ret = (ret << 1) | (data & 0x01);
57 crc_t crc_update(
crc_t crc,
const void *data,
size_t data_len)
59 const unsigned char *d = (
const unsigned char *)data;
64 crc = (pgm_read_dword(crc_table + (tbl_idx & 0x0f))) ^ (crc >> 4);
65 tbl_idx = crc ^ (*d >> 4);
66 crc = (pgm_read_dword(crc_table + (tbl_idx & 0x0f))) ^ (crc >> 4);
69 return crc & 0xffffffff;
uint16_t crc_t
The type of the CRC values.
Functions and types for CRC checks.
uint32_t crc_t
The type of the CRC values.