AceCRC  1.0
Cyclic Redundancy Check (CRC) algorithms (e.g. crc16ccitt, crc32) programmatically converted from C99 code generated by pycrc (https://pycrc.org) to Arduino C++ using namespaces and PROGMEM flash memory.
crc16ccitt_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 "crc16ccitt_nibble.hpp" // header file converted by AceCRC
26 #include <stdlib.h>
27 #include <stdint.h>
28 
29 namespace ace_crc {
30 namespace crc16ccitt_nibble {
31 
32 
33 
37 static const crc_t crc_table[16] PROGMEM = {
38  0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
39  0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef
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  uint8_t tbl_idx;
47 
48  while (data_len--) {
49  tbl_idx = (crc >> 12) ^ (*d >> 4);
50  crc = (pgm_read_word(crc_table + (tbl_idx & 0x0f))) ^ (crc << 4);
51  tbl_idx = (crc >> 12) ^ (*d >> 0);
52  crc = (pgm_read_word(crc_table + (tbl_idx & 0x0f))) ^ (crc << 4);
53  d++;
54  }
55  return crc & 0xffff;
56 }
57 
58 } // crc16ccitt_nibble
59 } // ace_crc
crc16ccitt_nibble.hpp
ace_crc::crc16ccitt_bit::crc_t
uint16_t crc_t
The type of the CRC values.
Definition: crc16ccitt_bit.hpp:68
ace_crc::crc16ccitt_nibble::crc_t
uint16_t crc_t
The type of the CRC values.
Definition: crc16ccitt_nibble.hpp:68