AceCRC  0.3.1
Cyclic Redundancy Check (CRC) algorithms (e.g. crc32(), crc16ccitt()) programmatically converted from C99 code generated by pycrc (https://pycrc.org) to Arduino C++ using namespaces and PROGMEM flash memory.
crc32_nibble.cpp
Go to the documentation of this file.
1 
20 #if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_SAMD)
21  #include <avr/pgmspace.h>
22 #else
23  #include <pgmspace.h>
24 #endif
25 #include "crc32_nibble.hpp" // header file converted by AceCRC
26 #include <stdlib.h>
27 #include <stdint.h>
28 
29 namespace ace_crc {
30 namespace crc32_nibble {
31 
32 
33 
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
40 };
41 
42 
43 crc_t crc_update(crc_t crc, const void *data, size_t data_len)
44 {
45  const unsigned char *d = (const unsigned char *)data;
46  unsigned int tbl_idx;
47 
48  while (data_len--) {
49  tbl_idx = crc ^ *d;
50  crc = (pgm_read_dword(crc_table + (tbl_idx & 0x0f))) ^ (crc >> 4);
51  tbl_idx = crc ^ (*d >> 4);
52  crc = (pgm_read_dword(crc_table + (tbl_idx & 0x0f))) ^ (crc >> 4);
53  d++;
54  }
55  return crc & 0xffffffff;
56 }
57 
58 } // crc32_nibble
59 } // ace_crc
ace_crc::crc32_nibble::crc_t
uint32_t crc_t
The type of the CRC values.
Definition: crc32_nibble.hpp:68
crc32_nibble.hpp
ace_crc::crc16ccitt_bit::crc_t
uint16_t crc_t
The type of the CRC values.
Definition: crc16ccitt_bit.hpp:68