diff --git a/plugins/samplesource/airspyhf/airspyhfgui.cpp b/plugins/samplesource/airspyhf/airspyhfgui.cpp
index 23f9e46b6..dfbc6af28 100644
--- a/plugins/samplesource/airspyhf/airspyhfgui.cpp
+++ b/plugins/samplesource/airspyhf/airspyhfgui.cpp
@@ -219,6 +219,7 @@ void AirspyHFGui::displaySettings()
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->autoCorr->setCurrentIndex(m_settings.m_autoCorrOptions);
ui->sampleRate->setCurrentIndex(m_settings.m_devSampleRateIndex);
ui->decim->setCurrentIndex(m_settings.m_log2Decim);
ui->band->blockSignals(false);
@@ -277,6 +278,16 @@ void AirspyHFGui::on_resetLOppm_clicked()
ui->LOppm->setValue(0);
}
+void AirspyHFGui::on_autoCorr_currentIndexChanged(int index)
+{
+ if ((index < 0) || (index > AirspyHFSettings::AutoCorrLast)) {
+ return;
+ }
+
+ m_settings.m_autoCorrOptions = (AirspyHFSettings::AutoCorrOptions) index;
+ sendSettings();
+}
+
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 6efe5ddb4..be340ed99 100644
--- a/plugins/samplesource/airspyhf/airspyhfgui.h
+++ b/plugins/samplesource/airspyhf/airspyhfgui.h
@@ -79,6 +79,7 @@ private slots:
void on_centerFrequency_changed(quint64 value);
void on_LOppm_valueChanged(int value);
void on_resetLOppm_clicked();
+ void on_autoCorr_currentIndexChanged(int index);
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 f08fe7d30..06c58c5e9 100644
--- a/plugins/samplesource/airspyhf/airspyhfgui.ui
+++ b/plugins/samplesource/airspyhf/airspyhfgui.ui
@@ -7,7 +7,7 @@
0
0
324
- 132
+ 174
@@ -237,6 +237,52 @@
+ -
+
+
-
+
+
+ Corr
+
+
+
+ -
+
+
+ DC offset and IQ correction options
+
+
-
+
+ None
+
+
+ -
+
+ DC
+
+
+ -
+
+ DC+IQ
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
-
diff --git a/plugins/samplesource/airspyhf/airspyhfinput.cpp b/plugins/samplesource/airspyhf/airspyhfinput.cpp
index e126d4fa8..c2dfa31e5 100644
--- a/plugins/samplesource/airspyhf/airspyhfinput.cpp
+++ b/plugins/samplesource/airspyhf/airspyhfinput.cpp
@@ -134,7 +134,7 @@ bool AirspyHFInput::openDevice()
delete[] sampleRates;
- airspyhf_set_sample_type(m_dev, AIRSPYHF_SAMPLE_INT16_IQ);
+ airspyhf_set_sample_type(m_dev, AIRSPYHF_SAMPLE_INT16_NDSP_IQ);
return true;
}
@@ -349,6 +349,23 @@ bool AirspyHFInput::applySettings(const AirspyHFSettings& settings, bool force)
qDebug() << "AirspyHFInput::applySettings";
+ if ((m_settings.m_autoCorrOptions != settings.m_autoCorrOptions) || force)
+ {
+ switch(settings.m_autoCorrOptions)
+ {
+ case AirspyHFSettings::AutoCorrDC:
+ m_deviceAPI->configureCorrections(true, false);
+ break;
+ case AirspyHFSettings::AutoCorrDCAndIQ:
+ m_deviceAPI->configureCorrections(true, true);
+ break;
+ case AirspyHFSettings::AutoCorrNone:
+ default:
+ m_deviceAPI->configureCorrections(false, false);
+ break;
+ }
+ }
+
if ((m_settings.m_devSampleRateIndex != settings.m_devSampleRateIndex) || force)
{
forwardChange = true;
diff --git a/plugins/samplesource/airspyhf/airspyhfplugin.cpp b/plugins/samplesource/airspyhf/airspyhfplugin.cpp
index 16bc6815c..61c48e2f7 100644
--- a/plugins/samplesource/airspyhf/airspyhfplugin.cpp
+++ b/plugins/samplesource/airspyhf/airspyhfplugin.cpp
@@ -28,7 +28,7 @@
const PluginDescriptor AirspyHFPlugin::m_pluginDescriptor = {
QString("AirspyHF Input"),
- QString("3.11.0"),
+ QString("3.12.0"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,
diff --git a/plugins/samplesource/airspyhf/airspyhfsettings.cpp b/plugins/samplesource/airspyhf/airspyhfsettings.cpp
index b1e21d9d5..903fdb4d0 100644
--- a/plugins/samplesource/airspyhf/airspyhfsettings.cpp
+++ b/plugins/samplesource/airspyhf/airspyhfsettings.cpp
@@ -32,6 +32,7 @@ void AirspyHFSettings::resetToDefaults()
m_transverterMode = false;
m_transverterDeltaFrequency = 0;
m_bandIndex = 0;
+ m_autoCorrOptions = AutoCorrNone;
}
QByteArray AirspyHFSettings::serialize() const
@@ -41,6 +42,7 @@ QByteArray AirspyHFSettings::serialize() const
s.writeU32(1, m_devSampleRateIndex);
s.writeS32(2, m_LOppmTenths);
s.writeU32(3, m_log2Decim);
+ s.writeS32(4, (int) m_autoCorrOptions);
s.writeBool(7, m_transverterMode);
s.writeS64(8, m_transverterDeltaFrequency);
s.writeU32(9, m_bandIndex);
@@ -67,6 +69,13 @@ bool AirspyHFSettings::deserialize(const QByteArray& data)
d.readS32(2, &m_LOppmTenths, 0);
d.readU32(3, &m_log2Decim, 0);
d.readS32(4, &intval, 0);
+
+ if (intval < 0 || intval > (int) AutoCorrLast) {
+ m_autoCorrOptions = AutoCorrNone;
+ } else {
+ m_autoCorrOptions = (AutoCorrOptions) intval;
+ }
+
d.readBool(7, &m_transverterMode, false);
d.readS64(8, &m_transverterDeltaFrequency, 0);
d.readU32(9, &uintval, 0);
diff --git a/plugins/samplesource/airspyhf/airspyhfsettings.h b/plugins/samplesource/airspyhf/airspyhfsettings.h
index 544efe252..6aac4f318 100644
--- a/plugins/samplesource/airspyhf/airspyhfsettings.h
+++ b/plugins/samplesource/airspyhf/airspyhfsettings.h
@@ -19,6 +19,13 @@
struct AirspyHFSettings
{
+ typedef enum {
+ AutoCorrNone,
+ AutoCorrDC,
+ AutoCorrDCAndIQ,
+ AutoCorrLast,
+ } AutoCorrOptions;
+
quint64 m_centerFrequency;
qint32 m_LOppmTenths;
quint32 m_devSampleRateIndex;
@@ -26,6 +33,7 @@ struct AirspyHFSettings
bool m_transverterMode;
qint64 m_transverterDeltaFrequency;
quint32 m_bandIndex;
+ AutoCorrOptions m_autoCorrOptions;
AirspyHFSettings();
void resetToDefaults();