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,