From c37f219696491902e1e29f92a87c7d1843143cbb Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 13 Apr 2019 23:00:02 +0200 Subject: [PATCH] PlutoSDR output: implemented baseband or device sample rate input option --- .../bladerf1output/bladerf1outputgui.cpp | 4 +- .../bladerf2output/bladerf2outputgui.cpp | 4 +- .../hackrfoutput/hackrfoutputgui.cpp | 4 +- .../limesdroutput/limesdroutputgui.cpp | 4 +- .../plutosdroutput/plutosdroutputgui.cpp | 55 ++++++++++++++++++- .../plutosdroutput/plutosdroutputgui.h | 3 + .../plutosdroutput/plutosdroutputgui.ui | 29 +++++++--- .../plutosdroutput/plutosdroutputplugin.cpp | 2 +- .../plutosdrinput/plutosdrinputplugin.cpp | 2 +- 9 files changed, 87 insertions(+), 20 deletions(-) diff --git a/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp b/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp index 8f674dbad..88f24fc8b 100644 --- a/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp +++ b/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp @@ -203,7 +203,7 @@ void Bladerf1OutputGui::displaySampleRate() ui->sampleRateMode->setText("SR"); ui->sampleRate->setValueRange(8, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX); ui->sampleRate->setValue(m_settings.m_devSampleRate); - ui->sampleRate->setToolTip("Device to host sample rate (S/s)"); + ui->sampleRate->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setToolTip("Baseband sample rate (S/s)"); uint32_t basebandSampleRate = m_settings.m_devSampleRate/(1<deviceRateText->setText(tr("%1k").arg(QString::number(basebandSampleRate / 1000.0f, 'g', 5))); @@ -215,7 +215,7 @@ void Bladerf1OutputGui::displaySampleRate() ui->sampleRate->setValueRange(8, BLADERF_SAMPLERATE_MIN/(1<sampleRate->setValue(m_settings.m_devSampleRate/(1<sampleRate->setToolTip("Baseband sample rate (S/s)"); - ui->deviceRateText->setToolTip("Device to host sample rate (S/s)"); + ui->deviceRateText->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_settings.m_devSampleRate / 1000.0f, 'g', 5))); } diff --git a/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp b/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp index f0717177c..6797d1801 100644 --- a/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp +++ b/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp @@ -258,7 +258,7 @@ void BladeRF2OutputGui::displaySampleRate() ui->sampleRateMode->setText("SR"); ui->sampleRate->setValueRange(8, min, max); ui->sampleRate->setValue(m_settings.m_devSampleRate); - ui->sampleRate->setToolTip("Device to host sample rate (S/s)"); + ui->sampleRate->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setToolTip("Baseband sample rate (S/s)"); uint32_t basebandSampleRate = m_settings.m_devSampleRate/(1<deviceRateText->setText(tr("%1k").arg(QString::number(basebandSampleRate / 1000.0f, 'g', 5))); @@ -270,7 +270,7 @@ void BladeRF2OutputGui::displaySampleRate() ui->sampleRate->setValueRange(8, min/(1<sampleRate->setValue(m_settings.m_devSampleRate/(1<sampleRate->setToolTip("Baseband sample rate (S/s)"); - ui->deviceRateText->setToolTip("Device to host sample rate (S/s)"); + ui->deviceRateText->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_settings.m_devSampleRate / 1000.0f, 'g', 5))); } diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp index de83533bb..2efba67b3 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp @@ -211,7 +211,7 @@ void HackRFOutputGui::displaySampleRate() ui->sampleRateMode->setText("SR"); ui->sampleRate->setValueRange(8, 1000000U, 20000000U); ui->sampleRate->setValue(m_settings.m_devSampleRate); - ui->sampleRate->setToolTip("Device to host sample rate (S/s)"); + ui->sampleRate->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setToolTip("Baseband sample rate (S/s)"); uint32_t basebandSampleRate = m_settings.m_devSampleRate/(1<deviceRateText->setText(tr("%1k").arg(QString::number(basebandSampleRate / 1000.0f, 'g', 5))); @@ -223,7 +223,7 @@ void HackRFOutputGui::displaySampleRate() ui->sampleRate->setValueRange(8, 1000000U/(1<sampleRate->setValue(m_settings.m_devSampleRate/(1<sampleRate->setToolTip("Baseband sample rate (S/s)"); - ui->deviceRateText->setToolTip("Device to host sample rate (S/s)"); + ui->deviceRateText->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_settings.m_devSampleRate / 1000.0f, 'g', 5))); } diff --git a/plugins/samplesink/limesdroutput/limesdroutputgui.cpp b/plugins/samplesink/limesdroutput/limesdroutputgui.cpp index 839b8747a..64aa0d091 100644 --- a/plugins/samplesink/limesdroutput/limesdroutputgui.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutputgui.cpp @@ -331,7 +331,7 @@ void LimeSDROutputGUI::displaySampleRate() ui->sampleRateMode->setText("SR"); ui->sampleRate->setValueRange(8, (uint32_t) minF, (uint32_t) maxF); ui->sampleRate->setValue(m_settings.m_devSampleRate); - ui->sampleRate->setToolTip("Device to host sample rate (S/s)"); + ui->sampleRate->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setToolTip("Baseband sample rate (S/s)"); uint32_t basebandSampleRate = m_settings.m_devSampleRate/(1<deviceRateText->setText(tr("%1k").arg(QString::number(basebandSampleRate / 1000.0f, 'g', 5))); @@ -343,7 +343,7 @@ void LimeSDROutputGUI::displaySampleRate() ui->sampleRate->setValueRange(8, (uint32_t) minF/(1<sampleRate->setValue(m_settings.m_devSampleRate/(1<sampleRate->setToolTip("Baseband sample rate (S/s)"); - ui->deviceRateText->setToolTip("Device to host sample rate (S/s)"); + ui->deviceRateText->setToolTip("Host to device sample rate (S/s)"); ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_settings.m_devSampleRate / 1000.0f, 'g', 5))); } diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp b/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp index cb5036d08..3a15e4359 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp @@ -36,6 +36,7 @@ PlutoSDROutputGUI::PlutoSDROutputGUI(DeviceUISet *deviceUISet, QWidget* parent) ui(new Ui::PlutoSDROutputGUI), m_deviceUISet(deviceUISet), m_settings(), + m_sampleRateMode(true), m_forceSettings(true), m_sampleSink(0), m_sampleRate(0), @@ -203,12 +204,25 @@ void PlutoSDROutputGUI::on_loPPM_valueChanged(int value) void PlutoSDROutputGUI::on_swInterp_currentIndexChanged(int index) { m_settings.m_log2Interp = index > 5 ? 5 : index; + displaySampleRate(); + + if (m_sampleRateMode) { + m_settings.m_devSampleRate = ui->sampleRate->getValueNew(); + } else { + m_settings.m_devSampleRate = ui->sampleRate->getValueNew() * (1 << m_settings.m_log2Interp); + } + sendSettings(); } void PlutoSDROutputGUI::on_sampleRate_changed(quint64 value) { - m_settings.m_devSampleRate = value; + if (m_sampleRateMode) { + m_settings.m_devSampleRate = value; + } else { + m_settings.m_devSampleRate = value * (1 << m_settings.m_log2Interp); + } + sendSettings(); } @@ -268,13 +282,48 @@ void PlutoSDROutputGUI::on_transverter_clicked() sendSettings(); } +void PlutoSDROutputGUI::on_sampleRateMode_toggled(bool checked) +{ + m_sampleRateMode = checked; + displaySampleRate(); +} + +void PlutoSDROutputGUI::displaySampleRate() +{ + ui->sampleRate->blockSignals(true); + + if (m_sampleRateMode) + { + ui->sampleRateMode->setStyleSheet("QToolButton { background:rgb(60,60,60); }"); + ui->sampleRateMode->setText("SR"); + ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq); + ui->sampleRate->setValue(m_settings.m_devSampleRate); + ui->sampleRate->setToolTip("Host to device sample rate (S/s)"); + ui->deviceRateText->setToolTip("Baseband sample rate (S/s)"); + uint32_t basebandSampleRate = m_settings.m_devSampleRate/(1<deviceRateText->setText(tr("%1k").arg(QString::number(basebandSampleRate / 1000.0f, 'g', 5))); + } + else + { + ui->sampleRateMode->setStyleSheet("QToolButton { background:rgb(50,50,50); }"); + ui->sampleRateMode->setText("BB"); + ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq/(1<sampleRate->setValue(m_settings.m_devSampleRate/(1<sampleRate->setToolTip("Baseband sample rate (S/s)"); + ui->deviceRateText->setToolTip("Host to device sample rate (S/s)"); + ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_settings.m_devSampleRate / 1000.0f, 'g', 5))); + } + + ui->sampleRate->blockSignals(false); +} + void PlutoSDROutputGUI::displaySettings() { ui->transverter->setDeltaFrequency(m_settings.m_transverterDeltaFrequency); ui->transverter->setDeltaFrequencyActive(m_settings.m_transverterMode); updateFrequencyLimits(); ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); - ui->sampleRate->setValue(m_settings.m_devSampleRate); + displaySampleRate(); ui->loPPM->setValue(m_settings.m_LOppmTenths); ui->loPPMText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); @@ -446,7 +495,7 @@ void PlutoSDROutputGUI::updateSampleRateAndFrequency() { m_deviceUISet->getSpectrum()->setSampleRate(m_sampleRate); m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); - ui->deviceRateLabel->setText(tr("%1k").arg(QString::number(m_sampleRate / 1000.0f, 'g', 5))); + displaySampleRate(); } void PlutoSDROutputGUI::openDeviceSettingsDialog(const QPoint& p) diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputgui.h b/plugins/samplesink/plutosdroutput/plutosdroutputgui.h index 8e9e58edf..96c006b9e 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputgui.h +++ b/plugins/samplesink/plutosdroutput/plutosdroutputgui.h @@ -57,6 +57,7 @@ private: Ui::PlutoSDROutputGUI* ui; DeviceUISet* m_deviceUISet; PlutoSDROutputSettings m_settings; + bool m_sampleRateMode; //!< true: device, false: base band sample rate update mode bool m_forceSettings; QTimer m_updateTimer; QTimer m_statusTimer; @@ -69,6 +70,7 @@ private: MessageQueue m_inputMessageQueue; void displaySettings(); + void displaySampleRate(); void sendSettings(bool forceSettings = false); void blockApplySettings(bool block); void updateSampleRateAndFrequency(); @@ -90,6 +92,7 @@ private slots: void on_att_valueChanged(int value); void on_antenna_currentIndexChanged(int index); void on_transverter_clicked(); + void on_sampleRateMode_toggled(bool checked); void updateHardware(); void updateStatus(); void handleInputMessages(); diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputgui.ui b/plugins/samplesink/plutosdroutput/plutosdroutputgui.ui index f72004af0..8dc5b657d 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputgui.ui +++ b/plugins/samplesink/plutosdroutput/plutosdroutputgui.ui @@ -166,7 +166,7 @@ - + 54 @@ -380,16 +380,31 @@ - - - - 0 - 0 - + + + + 24 + 0 + + + + + 24 + 16777215 + + + + Toggle between device to host (SR) and base band (BB) sample rate input SR + + true + + + true + diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp b/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp index 526532f02..0d9c6896b 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp @@ -31,7 +31,7 @@ class DeviceSourceAPI; const PluginDescriptor PlutoSDROutputPlugin::m_pluginDescriptor = { QString("PlutoSDR Output"), - QString("4.5.2"), + QString("4.5.4"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp index f07db0fd6..5b99856c7 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp @@ -31,7 +31,7 @@ class DeviceSourceAPI; const PluginDescriptor PlutoSDRInputPlugin::m_pluginDescriptor = { QString("PlutoSDR Input"), - QString("4.5.2"), + QString("4.5.4"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true,