From dd67b95fcdcfe7de7a9b36e206e8686421783384 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 17 Jan 2018 02:08:01 +0100 Subject: [PATCH] AirspyHF: implemented LO ppm correction --- plugins/samplesource/airspyhf/airspyhfgui.cpp | 16 +++- plugins/samplesource/airspyhf/airspyhfgui.h | 2 + plugins/samplesource/airspyhf/airspyhfgui.ui | 77 +++++++++++++++++-- .../samplesource/airspyhf/airspyhfinput.cpp | 17 ++++ .../airspyhf/airspyhfsettings.cpp | 3 + .../samplesource/airspyhf/airspyhfsettings.h | 1 + 6 files changed, 108 insertions(+), 8 deletions(-) diff --git a/plugins/samplesource/airspyhf/airspyhfgui.cpp b/plugins/samplesource/airspyhf/airspyhfgui.cpp index 386dab3ed..cca64d59e 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.cpp +++ b/plugins/samplesource/airspyhf/airspyhfgui.cpp @@ -217,9 +217,9 @@ void AirspyHFGui::displaySettings() ui->transverter->setDeltaFrequency(m_settings.m_transverterDeltaFrequency); ui->transverter->setDeltaFrequencyActive(m_settings.m_transverterMode); ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); - + ui->LOppm->setValue(m_settings.m_LOppmTenths); + ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); ui->sampleRate->setCurrentIndex(m_settings.m_devSampleRateIndex); - ui->decim->setCurrentIndex(m_settings.m_log2Decim); ui->band->blockSignals(false); blockApplySettings(false); @@ -265,6 +265,18 @@ void AirspyHFGui::on_centerFrequency_changed(quint64 value) sendSettings(); } +void AirspyHFGui::on_LOppm_valueChanged(int value) +{ + m_settings.m_LOppmTenths = value; + ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); + sendSettings(); +} + +void AirspyHFGui::on_resetLOppm_clicked() +{ + ui->LOppm->setValue(0); +} + void AirspyHFGui::on_sampleRate_currentIndexChanged(int index) { m_settings.m_devSampleRateIndex = index; diff --git a/plugins/samplesource/airspyhf/airspyhfgui.h b/plugins/samplesource/airspyhf/airspyhfgui.h index 435f438c4..6efe5ddb4 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.h +++ b/plugins/samplesource/airspyhf/airspyhfgui.h @@ -77,6 +77,8 @@ private: private slots: void on_centerFrequency_changed(quint64 value); + void on_LOppm_valueChanged(int value); + void on_resetLOppm_clicked(); void on_sampleRate_currentIndexChanged(int index); void on_decim_currentIndexChanged(int index); void on_startStop_toggled(bool checked); diff --git a/plugins/samplesource/airspyhf/airspyhfgui.ui b/plugins/samplesource/airspyhf/airspyhfgui.ui index 621332be4..14e8c53e6 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.ui +++ b/plugins/samplesource/airspyhf/airspyhfgui.ui @@ -7,7 +7,7 @@ 0 0 324 - 120 + 132 @@ -19,7 +19,7 @@ 320 - 120 + 132 @@ -172,6 +172,71 @@ + + + + + + LO ppm + + + + + + + Local Oscillator ppm correction + + + -100 + + + 100 + + + 1 + + + Qt::Horizontal + + + + + + + + 36 + 0 + + + + LO correction value (ppm) + + + -00.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 24 + 16777215 + + + + Rest LO ppm correction + + + R + + + + + @@ -190,10 +255,10 @@ - + - 50 - 16777215 + 56 + 0 @@ -347,7 +412,7 @@ - + Qt::Vertical diff --git a/plugins/samplesource/airspyhf/airspyhfinput.cpp b/plugins/samplesource/airspyhf/airspyhfinput.cpp index 7d5e7c1eb..e126d4fa8 100644 --- a/plugins/samplesource/airspyhf/airspyhfinput.cpp +++ b/plugins/samplesource/airspyhf/airspyhfinput.cpp @@ -384,6 +384,23 @@ bool AirspyHFInput::applySettings(const AirspyHFSettings& settings, bool force) } } + if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) + { + if (m_dev != 0) + { + rc = (airspyhf_error) airspyhf_set_calibration(m_dev, settings.m_LOppmTenths * 100); + + if (rc != AIRSPYHF_SUCCESS) + { + qCritical("AirspyHFInput::applySettings: could not set LO ppm correction to %f", settings.m_LOppmTenths / 10.0f); + } + else if (m_airspyHFThread != 0) + { + qDebug("AirspyHFInput::applySettings: LO ppm correction set to %f", settings.m_LOppmTenths / 10.0f); + } + } + } + if (force || (m_settings.m_centerFrequency != settings.m_centerFrequency) || (m_settings.m_transverterMode != settings.m_transverterMode) || (m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency)) diff --git a/plugins/samplesource/airspyhf/airspyhfsettings.cpp b/plugins/samplesource/airspyhf/airspyhfsettings.cpp index e90fbff74..b1e21d9d5 100644 --- a/plugins/samplesource/airspyhf/airspyhfsettings.cpp +++ b/plugins/samplesource/airspyhf/airspyhfsettings.cpp @@ -26,6 +26,7 @@ AirspyHFSettings::AirspyHFSettings() void AirspyHFSettings::resetToDefaults() { m_centerFrequency = 7150*1000; + m_LOppmTenths = 0; m_devSampleRateIndex = 0; m_log2Decim = 0; m_transverterMode = false; @@ -38,6 +39,7 @@ QByteArray AirspyHFSettings::serialize() const SimpleSerializer s(1); s.writeU32(1, m_devSampleRateIndex); + s.writeS32(2, m_LOppmTenths); s.writeU32(3, m_log2Decim); s.writeBool(7, m_transverterMode); s.writeS64(8, m_transverterDeltaFrequency); @@ -62,6 +64,7 @@ bool AirspyHFSettings::deserialize(const QByteArray& data) quint32 uintval; d.readU32(1, &m_devSampleRateIndex, 0); + d.readS32(2, &m_LOppmTenths, 0); d.readU32(3, &m_log2Decim, 0); d.readS32(4, &intval, 0); d.readBool(7, &m_transverterMode, false); diff --git a/plugins/samplesource/airspyhf/airspyhfsettings.h b/plugins/samplesource/airspyhf/airspyhfsettings.h index 7e6f7b958..544efe252 100644 --- a/plugins/samplesource/airspyhf/airspyhfsettings.h +++ b/plugins/samplesource/airspyhf/airspyhfsettings.h @@ -20,6 +20,7 @@ struct AirspyHFSettings { quint64 m_centerFrequency; + qint32 m_LOppmTenths; quint32 m_devSampleRateIndex; quint32 m_log2Decim; bool m_transverterMode;