From f91eba5b107e04647e4a1ef8f0592d8ae27c0390 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 2 Apr 2017 00:23:02 +0200 Subject: [PATCH] HackRF output: continuous sample rate setting --- .../samplesink/hackrfoutput/hackrfoutput.cpp | 4 +- .../hackrfoutput/hackrfoutputgui.cpp | 47 ++----- .../samplesink/hackrfoutput/hackrfoutputgui.h | 3 +- .../hackrfoutput/hackrfoutputgui.ui | 124 +++++++++++------- .../hackrfoutput/hackrfoutputplugin.cpp | 2 +- .../hackrfoutput/hackrfoutputsettings.cpp | 6 +- .../hackrfoutput/hackrfoutputsettings.h | 2 +- .../hackrfinput/hackrfinputgui.cpp | 9 +- .../samplesource/hackrfinput/hackrfinputgui.h | 3 +- .../hackrfinput/hackrfinputsettings.cpp | 4 +- .../hackrfinput/hackrfinputsettings.h | 1 - 11 files changed, 103 insertions(+), 102 deletions(-) diff --git a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp index facc99aad..a09b069e4 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp @@ -269,13 +269,13 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, bool forc if (rc != HACKRF_SUCCESS) { - qCritical("HackRFOutput::applySettings: could not set sample rate to %d S/s: %s", + qCritical("HackRFOutput::applySettings: could not set sample rate to %llu S/s: %s", settings.m_devSampleRate, hackrf_error_name(rc)); } else { - qDebug("HackRFOutput::applySettings: sample rate set to %d S/s", + qDebug("HackRFOutput::applySettings: sample rate set to %llu S/s", settings.m_devSampleRate); m_hackRFThread->setSamplerate(settings.m_devSampleRate); } diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp index 030cdf94c..ede7d9ce2 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp @@ -42,6 +42,9 @@ HackRFOutputGui::HackRFOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent) : ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); ui->centerFrequency->setValueRange(7, 0U, 7250000U); + ui->sampleRate->setColorMapper(ColorMapper(ColorMapper::ReverseGreenYellow)); + ui->sampleRate->setValueRange(8, 2400000U, 20000000U); + connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware())); connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus())); m_statusTimer.start(500); @@ -50,7 +53,6 @@ HackRFOutputGui::HackRFOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent) : m_deviceSampleSink = new HackRFOutput(m_deviceAPI); - displaySampleRates(); displayBandwidths(); m_deviceAPI->setSink(m_deviceSampleSink); @@ -156,7 +158,7 @@ void HackRFOutputGui::updateSampleRateAndFrequency() { m_deviceAPI->getSpectrum()->setSampleRate(m_sampleRate); m_deviceAPI->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); - ui->deviceRateText->setText(tr("%1k").arg((float)m_sampleRate / 1000)); + ui->deviceRateText->setText(QString("%1k").arg(QString::number(m_sampleRate/1000.0, 'f', 0))); } void HackRFOutputGui::displaySettings() @@ -166,11 +168,10 @@ void HackRFOutputGui::displaySettings() ui->LOppm->setValue(m_settings.m_LOppmTenths); ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); - unsigned int sampleRateIndex = HackRFSampleRates::getRateIndex(m_settings.m_devSampleRate); - ui->sampleRate->setCurrentIndex(sampleRateIndex); - ui->biasT->setChecked(m_settings.m_biasT); + ui->sampleRate->setValue(m_settings.m_devSampleRate); + ui->interp->setCurrentIndex(m_settings.m_log2Interp); ui->lnaExt->setChecked(m_settings.m_lnaExt); @@ -181,29 +182,6 @@ void HackRFOutputGui::displaySettings() ui->bbFilter->setCurrentIndex(bandwidthIndex); } -void HackRFOutputGui::displaySampleRates() -{ - int savedIndex = HackRFSampleRates::getRateIndex(m_settings.m_devSampleRate); - ui->sampleRate->blockSignals(true); - ui->sampleRate->clear(); - - for (int i = 0; i < HackRFSampleRates::m_nb_rates; i++) - { - ui->sampleRate->addItem(QString("%1").arg(QString::number(HackRFSampleRates::m_rates[i] / 1000.0f, 'f', 0))); - } - - ui->sampleRate->blockSignals(false); - - if (savedIndex < HackRFSampleRates::m_nb_rates) - { - ui->sampleRate->setCurrentIndex(savedIndex); - } - else - { - ui->sampleRate->setCurrentIndex((int) HackRFSampleRates::m_nb_rates-1); - } -} - void HackRFOutputGui::displayBandwidths() { int savedIndex = HackRFBandwidths::getBandwidthIndex(m_settings.m_bandwidth/1000); @@ -239,6 +217,12 @@ void HackRFOutputGui::on_centerFrequency_changed(quint64 value) sendSettings(); } +void HackRFOutputGui::on_sampleRate_changed(quint64 value) +{ + m_settings.m_devSampleRate = value; + sendSettings(); +} + void HackRFOutputGui::on_LOppm_valueChanged(int value) { m_settings.m_LOppmTenths = value; @@ -246,13 +230,6 @@ void HackRFOutputGui::on_LOppm_valueChanged(int value) sendSettings(); } -void HackRFOutputGui::on_sampleRate_currentIndexChanged(int index) -{ - int newrate = HackRFSampleRates::getRate(index); - m_settings.m_devSampleRate = newrate; - sendSettings(); -} - void HackRFOutputGui::on_bbFilter_currentIndexChanged(int index) { int newBandwidth = HackRFBandwidths::getBandwidth(index); diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputgui.h b/plugins/samplesink/hackrfoutput/hackrfoutputgui.h index e293d6ad6..67cc4d193 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputgui.h +++ b/plugins/samplesink/hackrfoutput/hackrfoutputgui.h @@ -70,7 +70,6 @@ private: int m_lastEngineState; void displaySettings(); - void displaySampleRates(); void displayBandwidths(); void sendSettings(); void updateSampleRateAndFrequency(); @@ -78,8 +77,8 @@ private: private slots: void handleDSPMessages(); void on_centerFrequency_changed(quint64 value); + void on_sampleRate_changed(quint64 value); void on_LOppm_valueChanged(int value); - void on_sampleRate_currentIndexChanged(int index); void on_biasT_stateChanged(int state); void on_interp_currentIndexChanged(int index); void on_lnaExt_stateChanged(int state); diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputgui.ui b/plugins/samplesink/hackrfoutput/hackrfoutputgui.ui index 746fe3c84..0ab0ed1e5 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputgui.ui +++ b/plugins/samplesink/hackrfoutput/hackrfoutputgui.ui @@ -6,20 +6,20 @@ 0 0 - 260 - 210 + 320 + 300 - + 0 0 - 260 - 210 + 320 + 300 @@ -49,6 +49,9 @@ + + 2 + @@ -163,6 +166,12 @@ + + 2 + + + 2 + 3 @@ -204,23 +213,22 @@ - - - - Qt::Horizontal - - - - + + 2 + + + 2 + + Int - + Activate antenna bias tee @@ -233,7 +241,7 @@ - + Extra LNA +14dB @@ -246,7 +254,7 @@ - + Qt::Horizontal @@ -259,7 +267,7 @@ - + @@ -308,11 +316,27 @@ - - - 3 + + + Qt::Horizontal - + + + + + + 6 + + + 6 + + + 6 + + + 6 + + @@ -321,39 +345,41 @@ - Rate + SR - - - + + + + + 0 + 0 + + + - 70 - 16777215 + 32 + 16 - - Device sample rate + + + Monospace + 12 + - - + + - BBF + S/s - - - - RF bandpas filter - - - - - + + Qt::Horizontal @@ -365,10 +391,17 @@ - - + + - kS/s + BBF + + + + + + + RF bandpas filter @@ -383,6 +416,9 @@ + + 2 + 3 diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp index 9e9c79fc5..e24552686 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp @@ -29,7 +29,7 @@ const PluginDescriptor HackRFOutputPlugin::m_pluginDescriptor = { QString("HackRF Output"), - QString("3.3.0"), + QString("3.3.3"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputsettings.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputsettings.cpp index 5eb0a987c..e80df6b92 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputsettings.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputsettings.cpp @@ -29,12 +29,12 @@ void HackRFOutputSettings::resetToDefaults() { m_centerFrequency = 435000 * 1000; m_LOppmTenths = 0; - m_devSampleRate = 2400000; m_biasT = false; m_log2Interp = 0; m_lnaExt = false; m_vgaGain = 22; m_bandwidth = 1750000; + m_devSampleRate = 2400000; } QByteArray HackRFOutputSettings::serialize() const @@ -42,12 +42,12 @@ QByteArray HackRFOutputSettings::serialize() const SimpleSerializer s(1); s.writeS32(1, m_LOppmTenths); - s.writeU32(2, m_devSampleRate); s.writeBool(3, m_biasT); s.writeU32(4, m_log2Interp); s.writeBool(5, m_lnaExt); s.writeU32(6, m_vgaGain); s.writeU32(7, m_bandwidth); + s.writeU64(8, m_devSampleRate); return s.final(); } @@ -67,12 +67,12 @@ bool HackRFOutputSettings::deserialize(const QByteArray& data) int intval; d.readS32(1, &m_LOppmTenths, 0); - d.readU32(2, &m_devSampleRate, 2400000); d.readBool(3, &m_biasT, false); d.readU32(4, &m_log2Interp, 0); d.readBool(5, &m_lnaExt, false); d.readU32(6, &m_vgaGain, 30); d.readU32(7, &m_bandwidth, 1750000); + d.readU64(8, &m_devSampleRate, 2400000); return true; } diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputsettings.h b/plugins/samplesink/hackrfoutput/hackrfoutputsettings.h index 0c387855c..610e9f4e4 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputsettings.h +++ b/plugins/samplesink/hackrfoutput/hackrfoutputsettings.h @@ -22,10 +22,10 @@ struct HackRFOutputSettings { quint64 m_centerFrequency; qint32 m_LOppmTenths; - quint32 m_devSampleRate; quint32 m_bandwidth; quint32 m_vgaGain; quint32 m_log2Interp; + quint64 m_devSampleRate; bool m_biasT; bool m_lnaExt; diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp index ace60279b..617e7fdf4 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp @@ -247,13 +247,6 @@ void HackRFInputGui::on_iqImbalance_toggled(bool checked) sendSettings(); } -void HackRFInputGui::on_sampleRate_currentIndexChanged(int index) -{ -// int newrate = HackRFSampleRates::getRate(index); -// m_settings.m_devOldSampleRate = newrate; -// sendSettings(); -} - void HackRFInputGui::on_bbFilter_currentIndexChanged(int index) { int newBandwidth = HackRFBandwidths::getBandwidth(index); @@ -279,7 +272,7 @@ void HackRFInputGui::on_centerFrequency_changed(quint64 value) sendSettings(); } -void HackRFInputGui::on_newSampleRate_changed(quint64 value) +void HackRFInputGui::on_sampleRate_changed(quint64 value) { m_settings.m_devSampleRate = value; sendSettings(); diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.h b/plugins/samplesource/hackrfinput/hackrfinputgui.h index 260897f61..256467051 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.h +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.h @@ -78,11 +78,10 @@ private: private slots: void handleDSPMessages(); void on_centerFrequency_changed(quint64 value); - void on_newSampleRate_changed(quint64 value); + void on_sampleRate_changed(quint64 value); void on_LOppm_valueChanged(int value); void on_dcOffset_toggled(bool checked); void on_iqImbalance_toggled(bool checked); - void on_sampleRate_currentIndexChanged(int index); void on_biasT_stateChanged(int state); void on_decim_currentIndexChanged(int index); void on_fcPos_currentIndexChanged(int index); diff --git a/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp b/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp index f4e784e74..65d82bedc 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp @@ -29,7 +29,6 @@ void HackRFInputSettings::resetToDefaults() { m_centerFrequency = 435000 * 1000; m_LOppmTenths = 0; - m_devOldSampleRate = 2400000; m_biasT = false; m_log2Decim = 0; m_fcPos = FC_POS_CENTER; @@ -39,6 +38,7 @@ void HackRFInputSettings::resetToDefaults() m_vgaGain = 16; m_dcBlock = false; m_iqCorrection = false; + m_devSampleRate = 2400000; } QByteArray HackRFInputSettings::serialize() const @@ -46,7 +46,6 @@ QByteArray HackRFInputSettings::serialize() const SimpleSerializer s(1); s.writeS32(1, m_LOppmTenths); - s.writeU32(2, m_devOldSampleRate); s.writeBool(3, m_biasT); s.writeU32(4, m_log2Decim); s.writeS32(5, m_fcPos); @@ -76,7 +75,6 @@ bool HackRFInputSettings::deserialize(const QByteArray& data) int intval; d.readS32(1, &m_LOppmTenths, 0); - d.readU32(2, &m_devOldSampleRate, 2400000); d.readBool(3, &m_biasT, false); d.readU32(4, &m_log2Decim, 0); d.readS32(5, &intval, 0); diff --git a/plugins/samplesource/hackrfinput/hackrfinputsettings.h b/plugins/samplesource/hackrfinput/hackrfinputsettings.h index ee089f40a..42e17b91d 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputsettings.h +++ b/plugins/samplesource/hackrfinput/hackrfinputsettings.h @@ -28,7 +28,6 @@ struct HackRFInputSettings { quint64 m_centerFrequency; qint32 m_LOppmTenths; - quint32 m_devOldSampleRate; quint32 m_bandwidth; quint32 m_lnaGain; quint32 m_vgaGain;