From aa709b9d5c42bd1d1b790386843a94bd6a638fd2 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 22 Feb 2016 15:03:16 +0100 Subject: [PATCH] SDRdaemon plugin: report stream skew data on the GUI --- .../samplesource/sdrdaemon/sdrdaemonbuffer.h | 1 + .../samplesource/sdrdaemon/sdrdaemongui.cpp | 13 +++- plugins/samplesource/sdrdaemon/sdrdaemongui.h | 1 + .../samplesource/sdrdaemon/sdrdaemongui.ui | 78 ++++++++++++++++--- .../samplesource/sdrdaemon/sdrdaemoninput.h | 9 ++- .../sdrdaemon/sdrdaemonudphandler.cpp | 1 + 6 files changed, 87 insertions(+), 16 deletions(-) diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h index e3c9a4bae..31cf04494 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h @@ -67,6 +67,7 @@ public: void writeData(char *array, uint32_t length); //!< Write data into buffer. uint8_t *readDataChunk(); //!< Read a chunk of data from buffer const MetaData& getCurrentMeta() const { return m_currentMeta; } + uint32_t getSampleRateStream() const { return m_sampleRateStream; } uint32_t getSampleRate() const { return m_sampleRate; } void updateBlockCounts(uint32_t nbBytesReceived); bool isSync() const { return m_sync; } diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp index 926fbadff..7514836aa 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp @@ -37,6 +37,7 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) : m_sampleSource(NULL), m_acquisition(false), m_sampleRate(0), + m_sampleRateStream(0), m_centerFrequency(0), m_samplesCount(0), m_tickCount(0), @@ -185,6 +186,7 @@ bool SDRdaemonGui::handleMessage(const Message& message) } else if (SDRdaemonInput::MsgReportSDRdaemonStreamData::match(message)) { + m_sampleRateStream = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getSampleRateStream(); m_sampleRate = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getSampleRate(); m_centerFrequency = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getCenterFrequency(); m_startingTimeStamp.tv_sec = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).get_tv_sec(); @@ -282,9 +284,14 @@ void SDRdaemonGui::updateWithAcquisition() void SDRdaemonGui::updateWithStreamData() { ui->centerFrequency->setValue(m_centerFrequency / 1000); - QString s = QString::number(m_sampleRate/1000.0, 'f', 0); - ui->sampleRateText->setText(tr("%1k").arg(s)); - updateWithStreamTime(); // TODO: remove when time data is implemented + QString s0 = QString::number(m_sampleRateStream/1000.0, 'f', 0); + ui->sampleRateStreamText->setText(tr("%1").arg(s0)); + QString s1 = QString::number(m_sampleRate/1000.0, 'f', 3); + ui->sampleRateText->setText(tr("%1").arg(s1)); + float skewPerCent = (float) ((m_sampleRate - m_sampleRateStream) * 100) / (float) m_sampleRateStream; + QString s2 = QString::number(skewPerCent, 'f', 2); + ui->skewRateText->setText(tr("%1").arg(s2)); + updateWithStreamTime(); } void SDRdaemonGui::updateWithStreamTime() diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.h b/plugins/samplesource/sdrdaemon/sdrdaemongui.h index 3760f7c12..346e134c2 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.h @@ -55,6 +55,7 @@ private: SampleSource* m_sampleSource; bool m_acquisition; int m_sampleRate; + int m_sampleRateStream; quint64 m_centerFrequency; struct timeval m_startingTimeStamp; int m_samplesCount; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui index d4e5132d0..c57d99dd5 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui @@ -113,14 +113,7 @@ - - - Rate: - - - - - + 50 @@ -133,10 +126,62 @@ - Record sample rate + Nominal sample rate from stream data (kS/s) - 0k + 00000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + + 70 + 0 + + + + Actual sample rate (kS/s) + + + 0000.000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + + 40 + 0 + + + + Sample rate skew from stream nominal rate (%) + + + -00.00 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -214,6 +259,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h index f89be1e81..0bad392ec 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h @@ -134,24 +134,27 @@ public: MESSAGE_CLASS_DECLARATION public: + int getSampleRateStream() const { return m_sampleRateStream; } int getSampleRate() const { return m_sampleRate; } quint64 getCenterFrequency() const { return m_centerFrequency; } uint32_t get_tv_sec() const { return m_tv_sec; } uint32_t get_tv_usec() const { return m_tv_usec; } - static MsgReportSDRdaemonStreamData* create(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) + static MsgReportSDRdaemonStreamData* create(int sampleRateStream, int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) { - return new MsgReportSDRdaemonStreamData(sampleRate, centerFrequency, tv_sec, tv_usec); + return new MsgReportSDRdaemonStreamData(sampleRateStream, sampleRate, centerFrequency, tv_sec, tv_usec); } protected: + int m_sampleRateStream; int m_sampleRate; quint64 m_centerFrequency; uint32_t m_tv_sec; uint32_t m_tv_usec; - MsgReportSDRdaemonStreamData(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) : + MsgReportSDRdaemonStreamData(int sampleRateStream, int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) : Message(), + m_sampleRateStream(sampleRateStream), m_sampleRate(sampleRate), m_centerFrequency(centerFrequency), m_tv_sec(tv_sec), diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp index 231006c54..3342882d4 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp @@ -157,6 +157,7 @@ void SDRdaemonUDPHandler::processData() DSPSignalNotification *notif = new DSPSignalNotification(m_samplerate, m_centerFrequency * 1000); // Frequency in Hz for the DSP engine DSPEngine::instance()->getInputMessageQueue()->push(notif); SDRdaemonInput::MsgReportSDRdaemonStreamData *report = SDRdaemonInput::MsgReportSDRdaemonStreamData::create( + m_sdrDaemonBuffer.getSampleRateStream(), m_samplerate, m_centerFrequency * 1000, // Frequency in Hz for the GUI m_tv_sec,