11 #include <avr/pgmspace.h>
20 static const uint16_t CRC_LOOKUP[] PROGMEM = {
21 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
22 0x0881, 0x2991, 0x4AA1, 0x6BB1, 0x8CC1, 0xADD1, 0xCEE1, 0xEFF1
44 uint16_t
crcByte(uint16_t crc, uint8_t data) {
51 crc ^= pgm_read_word_near(CRC_LOOKUP + work);
57 crc ^= pgm_read_word_near(CRC_LOOKUP + work);
74 uint16_t
crcData(uint16_t crc,
const uint8_t *pData, uint8_t length) {
75 for(uint8_t index=0; index<length; index++)
76 crc =
crcByte(crc, pData[index]);
92 uint16_t
crcDataP(uint16_t crc,
const uint8_t *pData, uint8_t length) {
93 for(uint8_t index=0; index<length; index++)
94 crc =
crcByte(crc, pgm_read_byte_near(pData + index));
uint16_t crcData(uint16_t crc, const uint8_t *pData, uint8_t length)
uint16_t crcByte(uint16_t crc, uint8_t data)
uint16_t crcDataP(uint16_t crc, const uint8_t *pData, uint8_t length)