From 04a2143809f6994a13cace93a933852b8154b57d Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 12 Jan 2018 00:24:54 +0100 Subject: [PATCH] AirspyHF support: implemented the band selector --- plugins/samplesource/airspyhf/airspyhfgui.cpp | 29 +++++++++++++++++-- plugins/samplesource/airspyhf/airspyhfgui.h | 1 + plugins/samplesource/airspyhf/airspyhfgui.ui | 4 +-- .../samplesource/airspyhf/airspyhfinput.cpp | 13 ++++++++- .../airspyhf/airspyhfsettings.cpp | 5 ++++ .../samplesource/airspyhf/airspyhfsettings.h | 1 + 6 files changed, 48 insertions(+), 5 deletions(-) diff --git a/plugins/samplesource/airspyhf/airspyhfgui.cpp b/plugins/samplesource/airspyhf/airspyhfgui.cpp index ac35c31c0..e1ae7e9c8 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.cpp +++ b/plugins/samplesource/airspyhf/airspyhfgui.cpp @@ -182,8 +182,22 @@ void AirspyHFGui::updateFrequencyLimits() { // values in kHz qint64 deltaFrequency = m_settings.m_transverterMode ? m_settings.m_transverterDeltaFrequency/1000 : 0; - qint64 minLimit = AirspyHFInput::loLowLimitFreqHF/1000 + deltaFrequency; - qint64 maxLimit = AirspyHFInput::loHighLimitFreqHF/1000 + deltaFrequency; + + qint64 minLimit; + qint64 maxLimit; + + switch(m_settings.m_bandIndex) + { + case 1: + minLimit = AirspyHFInput::loLowLimitFreqVHF/1000 + deltaFrequency; + maxLimit = AirspyHFInput::loHighLimitFreqVHF/1000 + deltaFrequency; + break; + case 0: + default: + minLimit = AirspyHFInput::loLowLimitFreqHF/1000 + deltaFrequency; + maxLimit = AirspyHFInput::loHighLimitFreqHF/1000 + deltaFrequency; + break; + } minLimit = minLimit < 0 ? 0 : minLimit > 9999999 ? 9999999 : minLimit; maxLimit = maxLimit < 0 ? 0 : maxLimit > 9999999 ? 9999999 : maxLimit; @@ -331,6 +345,17 @@ void AirspyHFGui::on_transverter_clicked() sendSettings(); } +void AirspyHFGui::on_band_currentIndexChanged(int index) +{ + if ((index < 0) || (index > 1)) { + return; + } + + m_settings.m_bandIndex = index; + updateFrequencyLimits(); + sendSettings(); +} + void AirspyHFGui::updateHardware() { qDebug() << "AirspyHFGui::updateHardware"; diff --git a/plugins/samplesource/airspyhf/airspyhfgui.h b/plugins/samplesource/airspyhf/airspyhfgui.h index 6c935ddf8..a3842067d 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.h +++ b/plugins/samplesource/airspyhf/airspyhfgui.h @@ -86,6 +86,7 @@ private slots: void on_startStop_toggled(bool checked); void on_record_toggled(bool checked); void on_transverter_clicked(); + void on_band_currentIndexChanged(int index); void updateHardware(); void updateStatus(); void handleInputMessages(); diff --git a/plugins/samplesource/airspyhf/airspyhfgui.ui b/plugins/samplesource/airspyhf/airspyhfgui.ui index 35e2098f8..339f896b8 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.ui +++ b/plugins/samplesource/airspyhf/airspyhfgui.ui @@ -6,7 +6,7 @@ 0 0 - 300 + 320 240 @@ -18,7 +18,7 @@ - 300 + 320 220 diff --git a/plugins/samplesource/airspyhf/airspyhfinput.cpp b/plugins/samplesource/airspyhf/airspyhfinput.cpp index 5d1e3c1a8..82059bcd3 100644 --- a/plugins/samplesource/airspyhf/airspyhfinput.cpp +++ b/plugins/samplesource/airspyhf/airspyhfinput.cpp @@ -134,7 +134,7 @@ bool AirspyHFInput::openDevice() delete[] sampleRates; - airspyhf_set_sampleformat(m_dev, AIRSPYHF_SAMPLE_FORMAT_INT16); + airspyhf_set_sample_type(m_dev, AIRSPYHF_SAMPLE_INT16_NDSP_IQ); return true; } @@ -320,6 +320,17 @@ bool AirspyHFInput::handleMessage(const Message& message) void AirspyHFInput::setDeviceCenterFrequency(quint64 freq_hz) { + switch(m_settings.m_bandIndex) + { + case 1: + freq_hz = freq_hz < loLowLimitFreqVHF ? loLowLimitFreqVHF : freq_hz > loHighLimitFreqVHF ? loHighLimitFreqVHF : freq_hz; + break; + case 0: + default: + freq_hz = freq_hz < loLowLimitFreqHF ? loLowLimitFreqHF : freq_hz > loHighLimitFreqHF ? loHighLimitFreqHF : freq_hz; + break; + } + qint64 df = ((qint64)freq_hz * m_settings.m_LOppmTenths) / 10000000LL; freq_hz += df; diff --git a/plugins/samplesource/airspyhf/airspyhfsettings.cpp b/plugins/samplesource/airspyhf/airspyhfsettings.cpp index ea36f62b8..2c68f7089 100644 --- a/plugins/samplesource/airspyhf/airspyhfsettings.cpp +++ b/plugins/samplesource/airspyhf/airspyhfsettings.cpp @@ -34,6 +34,7 @@ void AirspyHFSettings::resetToDefaults() m_iqCorrection = false; m_transverterMode = false; m_transverterDeltaFrequency = 0; + m_bandIndex = 0; } QByteArray AirspyHFSettings::serialize() const @@ -48,6 +49,7 @@ QByteArray AirspyHFSettings::serialize() const s.writeBool(6, m_iqCorrection); s.writeBool(7, m_transverterMode); s.writeS64(8, m_transverterDeltaFrequency); + s.writeU32(9, m_bandIndex); return s.final(); } @@ -65,6 +67,7 @@ bool AirspyHFSettings::deserialize(const QByteArray& data) if (d.getVersion() == 1) { int intval; + quint32 uintval; d.readU32(1, &m_devSampleRateIndex, 0); d.readS32(2, &m_LOppmTenths, 0); @@ -75,6 +78,8 @@ bool AirspyHFSettings::deserialize(const QByteArray& data) d.readBool(6, &m_iqCorrection, false); d.readBool(7, &m_transverterMode, false); d.readS64(8, &m_transverterDeltaFrequency, 0); + d.readU32(9, &uintval, 0); + m_bandIndex = uintval > 1 ? 1 : uintval; return true; } diff --git a/plugins/samplesource/airspyhf/airspyhfsettings.h b/plugins/samplesource/airspyhf/airspyhfsettings.h index 5936c4deb..573e6dd70 100644 --- a/plugins/samplesource/airspyhf/airspyhfsettings.h +++ b/plugins/samplesource/airspyhf/airspyhfsettings.h @@ -33,6 +33,7 @@ struct AirspyHFSettings { bool m_iqCorrection; bool m_transverterMode; qint64 m_transverterDeltaFrequency; + quint32 m_bandIndex; AirspyHFSettings(); void resetToDefaults();