diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.cpp b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.cpp
index bbfaec408..4bb832e27 100644
--- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.cpp
+++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.cpp
@@ -49,14 +49,8 @@ SDRdaemonFECGui::SDRdaemonFECGui(DeviceAPI *deviceAPI, QWidget* parent) :
m_acquisition(false),
m_lastEngineState((DSPDeviceEngine::State)-1),
m_sampleRate(0),
- 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_framesComplete(false),
m_bufferLengthInSecs(0.0),
m_bufferGauge(-50),
m_samplesCount(0),
@@ -68,8 +62,7 @@ SDRdaemonFECGui::SDRdaemonFECGui(DeviceAPI *deviceAPI, QWidget* parent) :
m_dataPortEdited(false),
m_initSendConfiguration(false),
m_dcBlock(false),
- m_iqCorrection(false),
- m_autoFollowRate(false)
+ m_iqCorrection(false)
{
m_sender = nn_socket(AF_SP, NN_PAIR);
assert(m_sender != -1);
@@ -134,7 +127,6 @@ void SDRdaemonFECGui::resetToDefaults()
m_controlPort = 9091;
m_dcBlock = false;
m_iqCorrection = false;
- m_autoFollowRate = false;
displaySettings();
}
@@ -153,8 +145,6 @@ QByteArray SDRdaemonFECGui::serialize() const
s.writeU32(2, uintval);
s.writeBool(3, m_dcBlock);
s.writeBool(4, m_iqCorrection);
- s.writeBool(5, m_autoFollowRate);
- s.writeBool(6, m_autoCorrBuffer);
uintval = ui->controlPort->text().toInt(&ok);
@@ -162,24 +152,24 @@ QByteArray SDRdaemonFECGui::serialize() const
uintval = 9091;
}
- s.writeU32(7, uintval);
+ s.writeU32(5, uintval);
uint32_t confFrequency = ui->freq->text().toInt(&ok);
if (ok) {
- s.writeU32(8, confFrequency);
+ s.writeU32(6, confFrequency);
}
- s.writeU32(9, ui->decim->currentIndex());
- s.writeU32(10, ui->fcPos->currentIndex());
+ s.writeU32(7, ui->decim->currentIndex());
+ s.writeU32(8, ui->fcPos->currentIndex());
uint32_t sampleRate = ui->sampleRate->text().toInt(&ok);
if (ok) {
- s.writeU32(11, sampleRate);
+ s.writeU32(9, sampleRate);
}
- s.writeString(12, ui->specificParms->text());
+ s.writeString(10, ui->specificParms->text());
return s.final();
}
@@ -192,8 +182,6 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
quint16 dataPort;
bool dcBlock;
bool iqCorrection;
- bool autoFollowRate;
- bool autoCorrBuffer;
uint32_t confFrequency;
uint32_t confSampleRate;
uint32_t confDecim;
@@ -221,9 +209,7 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
d.readBool(3, &dcBlock, false);
d.readBool(4, &iqCorrection, false);
- d.readBool(5, &autoFollowRate, false);
- d.readBool(6, &autoCorrBuffer, false);
- d.readU32(7, &uintval, 9091);
+ d.readU32(5, &uintval, 9091);
if ((uintval > 1024) && (uintval < 65536)) {
m_controlPort = uintval;
@@ -231,11 +217,11 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
m_controlPort = 9091;
}
- d.readU32(8, &confFrequency, 435000);
- d.readU32(9, &confDecim, 3);
- d.readU32(10, &confFcPos, 2);
- d.readU32(11, &confSampleRate, 1000);
- d.readString(12, &confSpecificParms, "");
+ d.readU32(6, &confFrequency, 435000);
+ d.readU32(7, &confDecim, 3);
+ d.readU32(8, &confFcPos, 2);
+ d.readU32(9, &confSampleRate, 1000);
+ d.readString(10, &confSpecificParms, "");
if ((address != m_address) || (dataPort != m_dataPort))
{
@@ -251,13 +237,6 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
configureAutoCorrections();
}
- if ((m_autoFollowRate != autoFollowRate) || (m_autoCorrBuffer != autoCorrBuffer))
- {
- m_autoFollowRate = autoFollowRate;
- m_autoCorrBuffer = autoCorrBuffer;
- configureAutoFollowPolicy();
- }
-
displaySettings();
displayConfigurationParameters(confFrequency, confDecim, confFcPos, confSampleRate, confSpecificParms);
m_initSendConfiguration = true;
@@ -295,7 +274,6 @@ bool SDRdaemonFECGui::handleMessage(const Message& message)
}
else if (SDRdaemonFECInput::MsgReportSDRdaemonStreamData::match(message))
{
- m_sampleRateStream = ((SDRdaemonFECInput::MsgReportSDRdaemonStreamData&)message).getSampleRateStream();
m_sampleRate = ((SDRdaemonFECInput::MsgReportSDRdaemonStreamData&)message).getSampleRate();
m_centerFrequency = ((SDRdaemonFECInput::MsgReportSDRdaemonStreamData&)message).getCenterFrequency();
m_startingTimeStamp.tv_sec = ((SDRdaemonFECInput::MsgReportSDRdaemonStreamData&)message).get_tv_sec();
@@ -307,20 +285,13 @@ bool SDRdaemonFECGui::handleMessage(const Message& message)
{
m_startingTimeStamp.tv_sec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).get_tv_sec();
m_startingTimeStamp.tv_usec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).get_tv_usec();
- m_syncLocked = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getSyncLock();
- m_frameSize = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getFrameSize();
- m_lz4 = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getLz4Compression();
-
- if (m_lz4) {
- m_compressionRatio = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getLz4CompressionRatio();
- } else {
- m_compressionRatio = 1.0;
- }
-
- m_nbLz4DataCRCOK = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getLz4DataCRCOK();
- m_nbLz4SuccessfulDecodes = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getLz4SuccessfulDecodes();
+ m_framesComplete = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getFramesComplete();
m_bufferLengthInSecs = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getBufferLengthInSecs();
m_bufferGauge = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getBufferGauge();
+ m_curNbBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getCurNbBlocks();
+ m_curNbRecovery = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getCurNbRecovery();
+ m_avgNbBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getAvgNbBlocks();
+ m_avgNbRecovery = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getAvgNbRecovery();
updateWithStreamTime();
return true;
@@ -382,8 +353,6 @@ void SDRdaemonFECGui::displaySettings()
ui->controlPort->setText(QString::number(m_controlPort));
ui->dcOffset->setChecked(m_dcBlock);
ui->iqImbalance->setChecked(m_iqCorrection);
- ui->autoFollowRate->setChecked(m_autoFollowRate);
- ui->autoCorrBuffer->setChecked(m_autoCorrBuffer);
}
void SDRdaemonFECGui::displayConfigurationParameters(uint32_t freq,
@@ -534,28 +503,6 @@ void SDRdaemonFECGui::on_iqImbalance_toggled(bool checked)
}
}
-void SDRdaemonFECGui::on_autoFollowRate_toggled(bool checked)
-{
- if (m_autoFollowRate != checked) {
- m_autoFollowRate = checked;
- configureAutoFollowPolicy();
- }
-}
-
-void SDRdaemonFECGui::on_autoCorrBuffer_toggled(bool checked)
-{
- if (m_autoCorrBuffer != checked) {
- m_autoCorrBuffer = checked;
- configureAutoFollowPolicy();
- }
-}
-
-void SDRdaemonFECGui::on_resetIndexes_clicked(bool checked)
-{
- SDRdaemonFECInput::MsgConfigureSDRdaemonResetIndexes* message = SDRdaemonFECInput::MsgConfigureSDRdaemonResetIndexes::create();
- m_sampleSource->getInputMessageQueue()->push(message);
-}
-
void SDRdaemonFECGui::on_freq_textEdited(const QString& arg1)
{
ui->sendButton->setEnabled(true);
@@ -627,12 +574,6 @@ void SDRdaemonFECGui::configureAutoCorrections()
m_sampleSource->getInputMessageQueue()->push(message);
}
-void SDRdaemonFECGui::configureAutoFollowPolicy()
-{
- SDRdaemonFECInput::MsgConfigureSDRdaemonAutoFollowPolicy* message = SDRdaemonFECInput::MsgConfigureSDRdaemonAutoFollowPolicy::create(m_autoFollowRate, m_autoCorrBuffer);
- m_sampleSource->getInputMessageQueue()->push(message);
-}
-
void SDRdaemonFECGui::updateWithAcquisition()
{
}
@@ -640,13 +581,8 @@ void SDRdaemonFECGui::updateWithAcquisition()
void SDRdaemonFECGui::updateWithStreamData()
{
ui->centerFrequency->setValue(m_centerFrequency / 1000);
- QString s0 = QString::number(m_sampleRateStream/1000.0, 'f', 2);
- 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();
}
@@ -663,31 +599,13 @@ void SDRdaemonFECGui::updateWithStreamTime()
QString s_date = dt.toString("yyyy-MM-dd hh:mm:ss.zzz");
ui->absTimeText->setText(s_date);
- if (m_syncLocked) {
- ui->streamLocked->setStyleSheet("QToolButton { background-color : green; }");
+ if (m_framesComplete) {
+ ui->framesComplete->setStyleSheet("QToolButton { background-color : green; }");
} else {
- ui->streamLocked->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
+ ui->framesComplete->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
}
- QString s = QString::number(m_frameSize / 1024.0, 'f', 0);
- ui->frameSizeText->setText(tr("%1").arg(s));
-
- if (m_lz4) {
- ui->lz4Compressed->setStyleSheet("QToolButton { background-color : green; }");
- } else {
- ui->lz4Compressed->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
- }
-
- 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));
-
- s = QString::number(m_bufferLengthInSecs, 'f', 1);
+ QString s = QString::number(m_bufferLengthInSecs, 'f', 1);
ui->bufferLenSecsText->setText(tr("%1").arg(s));
s = QString::number((m_bufferGauge < 0 ? -50 - m_bufferGauge : 50 - m_bufferGauge), 'f', 0);
@@ -695,6 +613,18 @@ void SDRdaemonFECGui::updateWithStreamTime()
ui->bufferGaugeNegative->setValue((m_bufferGauge < 0 ? 50 + m_bufferGauge : 0));
ui->bufferGaugePositive->setValue((m_bufferGauge < 0 ? 0 : 50 - m_bufferGauge));
+
+ s = QString::number(m_curNbBlocks, 'f', 0);
+ ui->avgNbBlocksText->setText(tr("%1").arg(s));
+
+ s = QString::number(m_avgNbBlocks, 'f', 1);
+ ui->avgNbBlocksText->setText(tr("%1").arg(s));
+
+ s = QString::number(m_curNbRecovery, 'f', 0);
+ ui->avgNbRecoveryText->setText(tr("%1").arg(s));
+
+ s = QString::number(m_avgNbRecovery, 'f', 1);
+ ui->avgNbRecoveryText->setText(tr("%1").arg(s));
}
void SDRdaemonFECGui::updateStatus()
diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.h b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.h
index 7f7cb91c0..391623c65 100644
--- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.h
+++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.h
@@ -62,18 +62,16 @@ private:
int m_lastEngineState;
int m_sampleRate;
- int m_sampleRateStream;
quint64 m_centerFrequency;
struct timeval m_startingTimeStamp;
- bool m_syncLocked;
- uint32_t m_frameSize;
- bool m_lz4;
- float m_compressionRatio;
- uint32_t m_nbLz4DataCRCOK;
- uint32_t m_nbLz4SuccessfulDecodes;
+ bool m_framesComplete;
float m_bufferLengthInSecs;
-
int32_t m_bufferGauge;
+ int m_curNbBlocks;
+ int m_curNbRecovery;
+ float m_avgNbBlocks;
+ float m_avgNbRecovery;
+
int m_samplesCount;
std::size_t m_tickCount;
@@ -88,8 +86,6 @@ private:
bool m_dcBlock;
bool m_iqCorrection;
- bool m_autoFollowRate;
- bool m_autoCorrBuffer;
void displaySettings();
@@ -102,7 +98,6 @@ private:
void displayTime();
void configureUDPLink();
void configureAutoCorrections();
- void configureAutoFollowPolicy();
void updateWithAcquisition();
void updateWithStreamData();
void updateWithStreamTime();
@@ -115,9 +110,6 @@ private slots:
void on_applyButton_clicked(bool checked);
void on_dcOffset_toggled(bool checked);
void on_iqImbalance_toggled(bool checked);
- void on_autoFollowRate_toggled(bool checked);
- void on_autoCorrBuffer_toggled(bool checked);
- void on_resetIndexes_clicked(bool checked);
void on_address_textEdited(const QString& arg1);
void on_dataPort_textEdited(const QString& arg1);
void on_controlPort_textEdited(const QString& arg1);
diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.ui b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.ui
index 2ac39e746..09f7ae2fd 100644
--- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.ui
+++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecgui.ui
@@ -6,13 +6,13 @@
0
0
- 350
+ 372
261
- 350
+ 372
261
@@ -374,6 +374,12 @@
-
+
+
+ 24
+ 0
+
+
Total number of blocks retrieved per frame
@@ -391,6 +397,12 @@
-
+
+
+ 35
+ 0
+
+
Average number of blocks retrieved per frame
@@ -408,6 +420,12 @@
-
+
+
+ 24
+ 0
+
+
Number of recovery blocks used per frame
@@ -425,6 +443,12 @@
-
+
+
+ 35
+ 0
+
+
Average number of recovery blocks used per frame
@@ -433,6 +457,35 @@
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 28
+ 0
+
+
+
+ Buffer length in seconds
+
+
+ 00.0
+
+
+
-
diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecinput.h b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecinput.h
index 80538bfd7..17e0e8ebc 100644
--- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecinput.h
+++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecinput.h
@@ -206,6 +206,7 @@ public:
public:
uint32_t get_tv_sec() const { return m_tv_sec; }
uint32_t get_tv_usec() const { return m_tv_usec; }
+ bool getFramesComplete() const { return m_framesComplete; }
float getBufferLengthInSecs() const { return m_bufferLenSec; }
int32_t getBufferGauge() const { return m_bufferGauge; }
int getCurNbBlocks() const { return m_curNbBlocks; }
@@ -235,6 +236,7 @@ public:
protected:
uint32_t m_tv_sec;
uint32_t m_tv_usec;
+ bool m_framesComplete;
float m_bufferLenSec;
int32_t m_bufferGauge;
int m_curNbBlocks;
@@ -253,6 +255,7 @@ public:
Message(),
m_tv_sec(tv_sec),
m_tv_usec(tv_usec),
+ m_framesComplete(curNbBlocks == SDRdaemonFECBuffer::nbOriginalBlocks),
m_bufferLenSec(bufferLenSec),
m_bufferGauge(bufferGauge),
m_curNbBlocks(curNbBlocks),