From 90cba58dedae1d9cc65f5add9046e25f41e91311 Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Mon, 6 Apr 2020 12:50:57 +0200 Subject: [PATCH] Putting the Cyclic back into CRC added a parameter to the crc function to supply it with a starting value for the crc, so one can calculate a crc over mutiple separate parts. --- globalfunctions/crc_ccitt.cpp | 9 ++++----- globalfunctions/crc_ccitt.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/globalfunctions/crc_ccitt.cpp b/globalfunctions/crc_ccitt.cpp index 2fbebd07..74a93465 100644 --- a/globalfunctions/crc_ccitt.cpp +++ b/globalfunctions/crc_ccitt.cpp @@ -38,19 +38,18 @@ static const uint16_t crc_table[256] = { // CRC implementation -uint16_t Calculate_CRC(uint8_t const input[], uint32_t length) +uint16_t Calculate_CRC(uint8_t const input[], uint32_t length, uint16_t startingCrc) { - uint16_t crc = 0xFFFF; uint8_t *data = (uint8_t *)input; unsigned int tbl_idx; while (length--) { - tbl_idx = ((crc >> 8) ^ *data) & 0xff; - crc = (crc_table[tbl_idx] ^ (crc << 8)) & 0xffff; + tbl_idx = ((startingCrc >> 8) ^ *data) & 0xff; + startingCrc = (crc_table[tbl_idx] ^ (startingCrc << 8)) & 0xffff; data++; } - return crc & 0xffff; + return startingCrc & 0xffff; //The part below is not used! // bool temr[16]; diff --git a/globalfunctions/crc_ccitt.h b/globalfunctions/crc_ccitt.h index 6310f184..60077d0b 100644 --- a/globalfunctions/crc_ccitt.h +++ b/globalfunctions/crc_ccitt.h @@ -3,7 +3,7 @@ #include -uint16_t Calculate_CRC(uint8_t const input[], uint32_t length); +uint16_t Calculate_CRC(uint8_t const input[], uint32_t length, uint16_t startingCrc = 0xffff); #endif /* CRC_H_ */