20 #if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_SAMD)
21 #include <avr/pgmspace.h>
30 namespace crc16modbus_nibble {
37 static const crc_t crc_table[16] PROGMEM = {
38 0x0000, 0xcc01, 0xd801, 0x1400, 0xf001, 0x3c00, 0x2800, 0xe401,
39 0xa001, 0x6c00, 0x7800, 0xb401, 0x5000, 0x9c01, 0x8801, 0x4400
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_word(crc_table + (tbl_idx & 0x0f))) ^ (crc >> 4);
65 tbl_idx = crc ^ (*d >> 4);
66 crc = (pgm_read_word(crc_table + (tbl_idx & 0x0f))) ^ (crc >> 4);
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.