From 8df0eae8bb7d0e42976dd7eee9d45690f6e2fd7d Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 16 Jun 2016 17:33:53 +0100 Subject: [PATCH] Move FEC display to the main code. --- YSFControl.cpp | 52 +++++++++++++++++++++++++++++++++----------------- YSFPayload.cpp | 33 +++----------------------------- YSFPayload.h | 6 +++--- 3 files changed, 40 insertions(+), 51 deletions(-) diff --git a/YSFControl.cpp b/YSFControl.cpp index 71ce76c..01958d4 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -194,16 +194,22 @@ bool CYSFControl::writeModem(unsigned char *data) // LogDebug("YSF, FICH: FI: %u, DT: %u, FN: %u, FT: %u", fich.getFI(), fich.getDT(), fich.getFN(), fich.getFT()); switch (dt) { - case YSF_DT_VD_MODE1: - valid = m_rfPayload.processVDMode1Data(data + 2U, fn); - m_rfErrs += m_rfPayload.processVDMode1Audio(data + 2U, m_rfFrames % 128U); - m_rfBits += 235U; + case YSF_DT_VD_MODE1: { + valid = m_rfPayload.processVDMode1Data(data + 2U, fn); + unsigned int errors = m_rfPayload.processVDMode1Audio(data + 2U); + m_rfErrs += errors; + m_rfBits += 235U; + LogDebug("YSF, V/D Mode 1, seq %u, AMBE FEC %u/235 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 2.35F); + } break; - case YSF_DT_VD_MODE2: - valid = m_rfPayload.processVDMode2Data(data + 2U, fn); - m_rfErrs += m_rfPayload.processVDMode2Audio(data + 2U, m_rfFrames % 128U); - m_rfBits += 135U; + case YSF_DT_VD_MODE2: { + valid = m_rfPayload.processVDMode2Data(data + 2U, fn); + unsigned int errors = m_rfPayload.processVDMode2Audio(data + 2U); + m_rfErrs += errors; + m_rfBits += 135U; + LogDebug("YSF, V/D Mode 2, seq %u, Repetition FEC %u/135 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 1.35F); + } break; case YSF_DT_DATA_FR_MODE: @@ -213,8 +219,10 @@ bool CYSFControl::writeModem(unsigned char *data) case YSF_DT_VOICE_FR_MODE: if (fn != 0U || ft != 1U) { // The first packet after the header is odd, don't try and regenerate it - m_rfErrs += m_rfPayload.processVoiceFRModeAudio(data + 2U, m_rfFrames % 128U); + unsigned int errors = m_rfPayload.processVoiceFRModeAudio(data + 2U); + m_rfErrs += errors; m_rfBits += 720U; + LogDebug("YSF, V Mode 3, seq %u, AMBE FEC %u/720 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 7.2F); } valid = false; break; @@ -451,16 +459,22 @@ void CYSFControl::writeNetwork() case YSF_FI_COMMUNICATIONS: switch (dt) { - case YSF_DT_VD_MODE1: - m_netPayload.processVDMode1Data(data + 35U, fn, gateway); - m_netErrs += m_netPayload.processVDMode1Audio(data + 35U, n); - m_netBits += 235U; + case YSF_DT_VD_MODE1: { + m_netPayload.processVDMode1Data(data + 35U, fn, gateway); + unsigned int errors = m_netPayload.processVDMode1Audio(data + 35U); + m_netErrs += errors; + m_netBits += 235U; + LogDebug("YSF, V/D Mode 1, seq %u, AMBE FEC %u/235 (%.1f%%)", n, errors, float(errors) / 2.35F); + } break; - case YSF_DT_VD_MODE2: - m_netPayload.processVDMode2Data(data + 35U, fn, gateway); - m_netErrs += m_netPayload.processVDMode2Audio(data + 35U, n); - m_netBits += 135U; + case YSF_DT_VD_MODE2: { + m_netPayload.processVDMode2Data(data + 35U, fn, gateway); + unsigned int errors = m_netPayload.processVDMode2Audio(data + 35U); + m_netErrs += errors; + m_netBits += 135U; + LogDebug("YSF, V/D Mode 2, seq %u, Repetition FEC %u/135 (%.1f%%)", n, errors, float(errors) / 1.35F); + } break; case YSF_DT_DATA_FR_MODE: @@ -470,8 +484,10 @@ void CYSFControl::writeNetwork() case YSF_DT_VOICE_FR_MODE: if (fn != 0U || ft != 1U) { // The first packet after the header is odd, don't try and regenerate it - m_netErrs += m_netPayload.processVoiceFRModeAudio(data + 35U, n); + unsigned int errors = m_netPayload.processVoiceFRModeAudio(data + 35U); + m_netErrs += errors; m_netBits += 720U; + LogDebug("YSF, V Mode 3, seq %u, AMBE FEC %u/720 (%.1f%%)", n, errors, float(errors) / 7.2F); } break; diff --git a/YSFPayload.cpp b/YSFPayload.cpp index cdb7185..ec0818c 100644 --- a/YSFPayload.cpp +++ b/YSFPayload.cpp @@ -249,7 +249,7 @@ bool CYSFPayload::processHeaderData(unsigned char* data) return valid1; } -unsigned int CYSFPayload::processVDMode1Audio(unsigned char* data, unsigned int count) +unsigned int CYSFPayload::processVDMode1Audio(unsigned char* data) { assert(data != NULL); @@ -263,17 +263,6 @@ unsigned int CYSFPayload::processVDMode1Audio(unsigned char* data, unsigned int errors += m_fec.regenerateDMR(data + 63U); errors += m_fec.regenerateDMR(data + 81U); - unsigned int csum = 0U; - for (unsigned int i = 0U; i < 9U; i++) { - csum += data[i + 9U]; - csum += data[i + 27U]; - csum += data[i + 45U]; - csum += data[i + 63U]; - csum += data[i + 81U]; - } - - LogDebug("YSF, V/D Mode 1, seq %u, AMBE FEC %u/235 (%.1f%%), csum: %u", count, errors, float(errors) / 2.35F, csum); - return errors; } @@ -397,7 +386,7 @@ bool CYSFPayload::processVDMode1Data(unsigned char* data, unsigned char fn, bool return ret && (fn == 0U); } -unsigned int CYSFPayload::processVDMode2Audio(unsigned char* data, unsigned int count) +unsigned int CYSFPayload::processVDMode2Audio(unsigned char* data) { assert(data != NULL); @@ -450,16 +439,6 @@ unsigned int CYSFPayload::processVDMode2Audio(unsigned char* data, unsigned int } } - unsigned int csum = 0U; - for (unsigned int i = 0U; i < 13U; i++) { - csum += data[i + 5U]; - csum += data[i + 23U]; - csum += data[i + 41U]; - csum += data[i + 59U]; - csum += data[i + 77U]; - } - - LogDebug("YSF, V/D Mode 2, seq %u, Repetition FEC %u/135 (%.1f%%), csum: %u", count, errors, float(errors) / 1.35F, csum); // "errors" is the number of triplets that were recognized to be corrupted // and that were corrected. There are 27 of those per VCH and 5 VCH per CC, // yielding a total of 27*5 = 135. I believe the expected value of this @@ -803,7 +782,7 @@ bool CYSFPayload::processDataFRModeData(unsigned char* data, unsigned char fn, b return ret1 && (fn == 0U); } -unsigned int CYSFPayload::processVoiceFRModeAudio(unsigned char* data, unsigned int count) +unsigned int CYSFPayload::processVoiceFRModeAudio(unsigned char* data) { assert(data != NULL); @@ -817,12 +796,6 @@ unsigned int CYSFPayload::processVoiceFRModeAudio(unsigned char* data, unsigned errors += m_fec.regenerateYSF3(data + 54U); errors += m_fec.regenerateYSF3(data + 72U); - unsigned int csum = 0U; - for (unsigned int i = 0U; i < 90U; i++) - csum += data[i]; - - LogDebug("YSF, V Mode 3, seq %u, AMBE FEC %u/720 (%.1f%%), csum: %u", count, errors, float(errors) / 7.2F, csum); - return errors; } diff --git a/YSFPayload.h b/YSFPayload.h index 1c076d6..8fc5061 100644 --- a/YSFPayload.h +++ b/YSFPayload.h @@ -31,14 +31,14 @@ public: bool processHeaderData(unsigned char* bytes); bool processVDMode1Data(unsigned char* bytes, unsigned char fn, bool gateway = false); - unsigned int processVDMode1Audio(unsigned char* bytes, unsigned int count); + unsigned int processVDMode1Audio(unsigned char* bytes); bool processVDMode2Data(unsigned char* bytes, unsigned char fn, bool gateway = false); - unsigned int processVDMode2Audio(unsigned char* bytes, unsigned int count); + unsigned int processVDMode2Audio(unsigned char* bytes); bool processDataFRModeData(unsigned char* bytes, unsigned char fn, bool gateway = false); - unsigned int processVoiceFRModeAudio(unsigned char* bytes, unsigned int count); + unsigned int processVoiceFRModeAudio(unsigned char* bytes); unsigned char* getSource(); unsigned char* getDest();