From acf683b91b4d9e9e6f3df00ed24f053a903a18bf Mon Sep 17 00:00:00 2001 From: jgromes Date: Sat, 13 May 2023 16:40:01 +0200 Subject: [PATCH] [CRC] Reworked for non-standard CRC lengths --- src/utils/CRC.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/utils/CRC.cpp b/src/utils/CRC.cpp index f6cbfa23..4422942b 100644 --- a/src/utils/CRC.cpp +++ b/src/utils/CRC.cpp @@ -6,25 +6,24 @@ RadioLibCRC::RadioLibCRC() { uint32_t RadioLibCRC::checksum(uint8_t* buff, size_t len) { uint32_t crc = this->init; - for(size_t i = 0; i < len; i+=this->size/8) { - uint32_t window = 0; - for(uint8_t j = 0; j < this->size/8; j++) { - uint8_t inByte = buff[i + j]; + size_t pos = 0; + for(size_t i = 0; i < 8*len; i++) { + if(i % 8 == 0) { + uint32_t in = buff[pos++]; if(this->refIn) { - inByte = Module::reflect(inByte, 8); + in = Module::reflect(in, 8); } - window |= (inByte << ((this->size - 8) - 8*j)); + crc ^= (in << (this->size - 8)); } - crc ^= window; - for(size_t k = 0; k < this->size; k++) { - if(crc & ((uint32_t)1 << (this->size - 1))) { - crc <<= (uint32_t)1; - crc ^= this->poly; - } else { - crc <<= (uint32_t)1; - } + + if(crc & ((uint32_t)1 << (this->size - 1))) { + crc <<= (uint32_t)1; + crc ^= this->poly; + } else { + crc <<= (uint32_t)1; } } + crc ^= this->out; if(this->refOut) { crc = Module::reflect(crc, this->size);