From 8062a322c604c4caabfac3560c225bb06f0da78c Mon Sep 17 00:00:00 2001 From: jgromes Date: Fri, 12 May 2023 21:08:43 +0200 Subject: [PATCH] [CRC] Convert into singleton --- src/protocols/AX25/AX25.cpp | 11 ++++++++--- src/utils/CRC.cpp | 11 ++++------- src/utils/CRC.h | 11 ++++------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/protocols/AX25/AX25.cpp b/src/protocols/AX25/AX25.cpp index 0e8f55ae..e7470b5f 100644 --- a/src/protocols/AX25/AX25.cpp +++ b/src/protocols/AX25/AX25.cpp @@ -306,9 +306,14 @@ int16_t AX25Client::sendFrame(AX25Frame* frame) { frameBuff[i] = Module::reflect(frameBuff[i], 8); } - // calculate - RadioLibCRC crc(16, RADIOLIB_CRC_CCITT_POLY, RADIOLIB_CRC_CCITT_INIT, RADIOLIB_CRC_CCITT_OUT, false, false); - uint16_t fcs = crc.checksum(frameBuff, frameBuffLen); + // calculate + RadioLibCRCInstance.size = 16; + RadioLibCRCInstance.poly = RADIOLIB_CRC_CCITT_POLY; + RadioLibCRCInstance.init = RADIOLIB_CRC_CCITT_INIT; + RadioLibCRCInstance.out = RADIOLIB_CRC_CCITT_OUT; + RadioLibCRCInstance.refIn = false; + RadioLibCRCInstance.refOut = false; + uint16_t fcs = RadioLibCRCInstance.checksum(frameBuff, frameBuffLen); *(frameBuffPtr++) = (uint8_t)((fcs >> 8) & 0xFF); *(frameBuffPtr++) = (uint8_t)(fcs & 0xFF); diff --git a/src/utils/CRC.cpp b/src/utils/CRC.cpp index 5001a484..f6cbfa23 100644 --- a/src/utils/CRC.cpp +++ b/src/utils/CRC.cpp @@ -1,12 +1,7 @@ #include "CRC.h" -RadioLibCRC::RadioLibCRC(uint8_t size, uint32_t poly, uint32_t init, uint32_t out, bool refIn, bool refOut) { - this->size = size; - this->poly = poly; - this->init = init; - this->out = out; - this->refIn = refIn; - this->refOut = refOut; +RadioLibCRC::RadioLibCRC() { + } uint32_t RadioLibCRC::checksum(uint8_t* buff, size_t len) { @@ -37,3 +32,5 @@ uint32_t RadioLibCRC::checksum(uint8_t* buff, size_t len) { crc &= (uint32_t)0xFFFFFFFF >> (32 - this->size); return(crc); } + +RadioLibCRC RadioLibCRCInstance; diff --git a/src/utils/CRC.h b/src/utils/CRC.h index bf2998dd..d34cbeeb 100644 --- a/src/utils/CRC.h +++ b/src/utils/CRC.h @@ -50,14 +50,8 @@ class RadioLibCRC { /*! \brief Default constructor. - \param size CRC size in bits. - \param poly CRC polynomial. - \param init Initial value. - \param out Final XOR value. - \param refIn Whether to reflect input bytes. - \param refOut Whether to reflect the result. */ - RadioLibCRC(uint8_t size, uint32_t poly, uint32_t init, uint32_t out, bool refIn, bool refOut); + RadioLibCRC(); /*! \brief Calcualte checksum of a buffer. @@ -68,4 +62,7 @@ class RadioLibCRC { uint32_t checksum(uint8_t* buff, size_t len); }; +// the global singleton +extern RadioLibCRC RadioLibCRCInstance; + #endif