AceCRC  1.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_nibblem.cpp
Go to the documentation of this file.
1 
20 #include "crc16ccitt_nibblem.hpp" // header file converted by AceCRC
21 #include <stdlib.h>
22 #include <stdint.h>
23 
24 namespace ace_crc {
25 namespace crc16ccitt_nibblem {
26 
27 
28 
32 static const crc_t crc_table[16] = {
33  0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
34  0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef
35 };
36 
37 
38 crc_t crc_update(crc_t crc, const void *data, size_t data_len)
39 {
40  const unsigned char *d = (const unsigned char *)data;
41  uint8_t tbl_idx;
42 
43  while (data_len--) {
44  tbl_idx = (crc >> 12) ^ (*d >> 4);
45  crc = crc_table[tbl_idx & 0x0f] ^ (crc << 4);
46  tbl_idx = (crc >> 12) ^ (*d >> 0);
47  crc = crc_table[tbl_idx & 0x0f] ^ (crc << 4);
48  d++;
49  }
50  return crc & 0xffff;
51 }
52 
53 } // crc16ccitt_nibblem
54 } // ace_crc
uint16_t crc_t
The type of the CRC values.
Functions and types for CRC checks.
uint16_t crc_t
The type of the CRC values.