From 153b1c017c29865d84b97e2f61d43920955e6729 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 23 Feb 2016 19:27:47 +0100 Subject: [PATCH] SDRdaemon plugin: report LZ4 statistics --- .../sdrdaemon/sdrdaemonbuffer.cpp | 4 ++++ .../samplesource/sdrdaemon/sdrdaemonbuffer.h | 6 ++++- .../samplesource/sdrdaemon/sdrdaemongui.cpp | 22 ++++++++++++++++++- plugins/samplesource/sdrdaemon/sdrdaemongui.h | 2 ++ .../samplesource/sdrdaemon/sdrdaemongui.ui | 4 ++-- .../samplesource/sdrdaemon/sdrdaemoninput.h | 21 ++++++++++++++---- .../sdrdaemon/sdrdaemonudphandler.cpp | 4 +++- 7 files changed, 54 insertions(+), 9 deletions(-) diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp index 5d1f476ce..0126a1b2b 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp @@ -38,6 +38,8 @@ SDRdaemonBuffer::SDRdaemonBuffer(uint32_t rateDivider) : m_nbLz4Decodes(0), m_nbLz4SuccessfulDecodes(0), m_nbLz4CRCOK(0), + m_nbLastLz4SuccessfulDecodes(0), + m_nbLastLz4CRCOK(0), m_dataCRC(0), m_sampleRateStream(0), m_sampleRate(0), @@ -199,6 +201,8 @@ void SDRdaemonBuffer::writeDataLZ4(const char *array, uint32_t length) << "/" << m_nbLz4Decodes << std::endl; + m_nbLastLz4SuccessfulDecodes = m_nbLz4SuccessfulDecodes; + m_nbLastLz4CRCOK = m_nbLz4CRCOK; m_nbLz4Decodes = 0; m_nbLz4SuccessfulDecodes = 0; m_nbLz4CRCOK = 0; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h index b47c8553a..d4e27cd17 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h @@ -74,7 +74,9 @@ public: bool isSyncLocked() const { return m_syncLock; } uint32_t getFrameSize() const { return m_frameSize; } bool isLz4Compressed() const { return m_lz4; } - float getCompressionRatio() const { return (m_frameSize ? (float) m_lz4InSize / (float) m_frameSize : 1.0); } + float getCompressionRatio() const { return (m_frameSize > 0 ? (float) m_lz4InSize / (float) m_frameSize : 1.0); } + uint32_t getLz4DataCRCOK() const { return m_nbLastLz4CRCOK; } + uint32_t getLz4SuccessfulDecodes() const { return m_nbLastLz4SuccessfulDecodes; } static const int m_udpPayloadSize; static const int m_sampleSize; @@ -104,6 +106,8 @@ private: uint32_t m_nbLz4Decodes; uint32_t m_nbLz4SuccessfulDecodes; uint32_t m_nbLz4CRCOK; + uint32_t m_nbLastLz4SuccessfulDecodes; + uint32_t m_nbLastLz4CRCOK; uint64_t m_dataCRC; uint32_t m_sampleRateStream; //!< Current sample rate from the stream diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp index 08bd72604..349b43417 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp @@ -40,6 +40,11 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) : m_sampleRateStream(0), m_centerFrequency(0), m_syncLocked(false), + m_frameSize(0), + m_lz4(false), + m_compressionRatio(1.0), + m_nbLz4DataCRCOK(0), + m_nbLz4SuccessfulDecodes(0), m_samplesCount(0), m_tickCount(0), m_address("127.0.0.1"), @@ -202,7 +207,16 @@ bool SDRdaemonGui::handleMessage(const Message& message) m_syncLocked = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getSyncLock(); m_frameSize = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getFrameSize(); m_lz4 = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getLz4Compression(); - m_compressionRatio = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getLz4Compression(); + + if (m_lz4) { + m_compressionRatio = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getLz4CompressionRatio(); + } else { + m_compressionRatio = 1.0; + } + + m_nbLz4DataCRCOK = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getLz4DataCRCOK(); + m_nbLz4SuccessfulDecodes = ((SDRdaemonInput::MsgReportSDRdaemonStreamTiming&)message).getLz4SuccessfulDecodes(); + updateWithStreamTime(); return true; } @@ -323,6 +337,12 @@ void SDRdaemonGui::updateWithStreamTime() s = QString::number(m_compressionRatio, 'f', 2); ui->compressionRatioText->setText(tr("%1").arg(s)); + + s = QString::number(m_nbLz4DataCRCOK, 'f', 0); + ui->dataCRCOKText->setText(tr("%1").arg(s)); + + s = QString::number(m_nbLz4SuccessfulDecodes, 'f', 0); + ui->lz4DecodesOKText->setText(tr("%1").arg(s)); } void SDRdaemonGui::tick() diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.h b/plugins/samplesource/sdrdaemon/sdrdaemongui.h index 0035c8ff8..baac02844 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.h @@ -63,6 +63,8 @@ private: uint32_t m_frameSize; bool m_lz4; float m_compressionRatio; + uint32_t m_nbLz4DataCRCOK; + uint32_t m_nbLz4SuccessfulDecodes; int m_samplesCount; std::size_t m_tickCount; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui index 959be62cf..371187940 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui @@ -368,7 +368,7 @@ Data CRC OK (%) - 100 + 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -394,7 +394,7 @@ LZ4 successful decodes (%) - 100 + 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h index ff927ca26..6befbc5d4 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h @@ -171,20 +171,27 @@ public: bool getSyncLock() const { return m_syncLock; } uint32_t getFrameSize() const { return m_frameSize; } bool getLz4Compression() const { return m_lz4; } + float getLz4CompressionRatio() const { return m_compressionRatio; } + uint32_t getLz4DataCRCOK() const { return m_nbLz4CRCOK; } + uint32_t getLz4SuccessfulDecodes() const { return m_nbLz4SuccessfulDecodes; } static MsgReportSDRdaemonStreamTiming* create(uint32_t tv_sec, uint32_t tv_usec, bool syncLock, uint32_t frameSize, bool lz4, - float compressionRatio) + float compressionRatio, + uint32_t nbLz4CRCOK, + uint32_t nbLz4SuccessfulDecodes) { return new MsgReportSDRdaemonStreamTiming(tv_sec, tv_usec, syncLock, frameSize, lz4, - compressionRatio); + compressionRatio, + nbLz4CRCOK, + nbLz4SuccessfulDecodes); } protected: @@ -194,20 +201,26 @@ public: uint32_t m_frameSize; bool m_lz4; float m_compressionRatio; + uint32_t m_nbLz4CRCOK; + uint32_t m_nbLz4SuccessfulDecodes; MsgReportSDRdaemonStreamTiming(uint32_t tv_sec, uint32_t tv_usec, bool syncLock, uint32_t frameSize, bool lz4, - float compressionRatio) : + float compressionRatio, + uint32_t nbLz4CRCOK, + uint32_t nbLz4SuccessfulDecodes) : Message(), m_tv_sec(tv_sec), m_tv_usec(tv_usec), m_syncLock(syncLock), m_frameSize(frameSize), m_lz4(lz4), - m_compressionRatio(compressionRatio) + m_compressionRatio(compressionRatio), + m_nbLz4CRCOK(nbLz4CRCOK), + m_nbLz4SuccessfulDecodes(nbLz4SuccessfulDecodes) { } }; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp index 4e2b25e74..63d88bcb1 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp @@ -212,7 +212,9 @@ void SDRdaemonUDPHandler::tick() m_sdrDaemonBuffer.isSyncLocked(), m_sdrDaemonBuffer.getFrameSize(), m_sdrDaemonBuffer.isLz4Compressed(), - m_sdrDaemonBuffer.getCompressionRatio()); + m_sdrDaemonBuffer.getCompressionRatio(), + m_sdrDaemonBuffer.getLz4DataCRCOK(), + m_sdrDaemonBuffer.getLz4SuccessfulDecodes()); m_outputMessageQueueToGUI->push(report); } }