Line data Source code
1 : #include "CRC.h" 2 : 3 1 : RadioLibCRC::RadioLibCRC() { 4 : 5 1 : } 6 : 7 0 : uint32_t RadioLibCRC::checksum(const uint8_t* buff, size_t len) { 8 0 : uint32_t crc = this->init; 9 0 : size_t pos = 0; 10 0 : for(size_t i = 0; i < 8*len; i++) { 11 0 : if(i % 8 == 0) { 12 0 : uint32_t in = buff[pos++]; 13 0 : if(this->refIn) { 14 0 : in = rlb_reflect(in, 8); 15 : } 16 0 : crc ^= (in << (this->size - 8)); 17 : } 18 : 19 0 : if(crc & ((uint32_t)1 << (this->size - 1))) { 20 0 : crc <<= (uint32_t)1; 21 0 : crc ^= this->poly; 22 : } else { 23 0 : crc <<= (uint32_t)1; 24 : } 25 : } 26 : 27 0 : crc ^= this->out; 28 0 : if(this->refOut) { 29 0 : crc = rlb_reflect(crc, this->size); 30 : } 31 0 : crc &= (uint32_t)0xFFFFFFFF >> (32 - this->size); 32 0 : return(crc); 33 : } 34 : 35 : RadioLibCRC RadioLibCRCInstance;