add similar support from TSBK to CSBK to treat CRC errors as warnings;

pull/133/head
Bryan Biedenkapp 1 month ago
parent d098001076
commit ce8b7a7ea7

@ -25,6 +25,8 @@ using namespace dmr::lc;
// Static Class Members
// ---------------------------------------------------------------------------
bool CSBK::s_warnCRC = false;
bool CSBK::s_verbose = false;
SiteData CSBK::s_siteData = SiteData();
@ -262,8 +264,13 @@ bool CSBK::decode(const uint8_t* data, uint8_t* payload)
bool valid = edac::CRC::checkCCITT162(csbk, DMR_CSBK_LENGTH_BYTES);
if (!valid) {
LogError(LOG_DMR, "CSBK::decode(), failed CRC CCITT-162 check");
return false;
if (s_warnCRC) {
LogWarning(LOG_DMR, "CSBK::decode(), failed CRC CCITT-162 check");
}
else {
LogError(LOG_DMR, "CSBK::decode(), failed CRC CCITT-162 check");
return false;
}
}
// restore the checksum

@ -95,6 +95,12 @@ namespace dmr
*/
static void setVerbose(bool verbose) { s_verbose = verbose; }
/**
* @brief Sets whether CRC errors warn and allow decoding to continue.
* @param warnCRC Flag indicating CRC errors should be warnings.
*/
static void setWarnCRC(bool warnCRC) { s_warnCRC = warnCRC; }
/** @name Local Site data */
/**
* @brief Gets the local site data.
@ -227,6 +233,7 @@ namespace dmr
protected:
static bool s_verbose;
static bool s_warnCRC;
// Local Site data
static SiteData s_siteData;

@ -21,6 +21,8 @@ using namespace dmr::lc::csbk;
#include <cassert>
bool CSBKFactory::s_warnCRC = false;
// ---------------------------------------------------------------------------
// Public Class Members
// ---------------------------------------------------------------------------
@ -64,8 +66,13 @@ std::unique_ptr<CSBK> CSBKFactory::createCSBK(const uint8_t* data, DataType::E d
bool valid = edac::CRC::checkCCITT162(csbk, DMR_CSBK_LENGTH_BYTES);
if (!valid) {
LogError(LOG_DMR, "CSBKFactory::createCSBK(), failed CRC CCITT-162 check");
return nullptr;
if (s_warnCRC) {
LogWarning(LOG_DMR, "CSBKFactory::createCSBK(), failed CRC CCITT-162 check");
}
else {
LogError(LOG_DMR, "CSBKFactory::createCSBK(), failed CRC CCITT-162 check");
return nullptr;
}
}
// restore the checksum

@ -77,7 +77,14 @@ namespace dmr
*/
static std::unique_ptr<CSBK> createCSBK(const uint8_t* data, defines::DataType::E dataType);
/**
* @brief Sets whether CRC errors warn and allow decoding to continue.
* @param warnCRC Flag indicating CRC errors should be warnings.
*/
static void setWarnCRC(bool warnCRC) { s_warnCRC = warnCRC; }
private:
static bool s_warnCRC;
/**
* @brief Decode a CSBK.
* @param csbk Instance of a CSBK.

Loading…
Cancel
Save

Powered by TurnKey Linux.