From 7f97826c581040bc62579b6059eea3df8a722b26 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 9 Jun 2019 20:56:22 +0200 Subject: [PATCH] KiwiSDR: added a DC block --- CHANGELOG | 2 +- debian/changelog | 2 +- doc/img/KiwiSDRInput_plugin.png | Bin 17368 -> 18104 bytes doc/img/KiwiSDRInput_plugin.xcf | Bin 71488 -> 81209 bytes plugins/samplesource/kiwisdr/kiwisdrgui.cpp | 6 +++++ plugins/samplesource/kiwisdr/kiwisdrgui.h | 1 + plugins/samplesource/kiwisdr/kiwisdrgui.ui | 12 +++++++++- plugins/samplesource/kiwisdr/kiwisdrinput.cpp | 13 +++++++++++ .../samplesource/kiwisdr/kiwisdrsettings.cpp | 1 + .../samplesource/kiwisdr/kiwisdrsettings.h | 1 + plugins/samplesource/kiwisdr/readme.md | 8 +++++-- sdrbase/resources/webapi/doc/html2/index.html | 5 ++++- .../webapi/doc/swagger/include/KiwiSDR.yaml | 2 ++ .../sdrangel/api/swagger/include/KiwiSDR.yaml | 2 ++ swagger/sdrangel/code/html2/index.html | 5 ++++- .../code/qt5/client/SWGKiwiSDRSettings.cpp | 21 ++++++++++++++++++ .../code/qt5/client/SWGKiwiSDRSettings.h | 6 +++++ 17 files changed, 80 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a7cbd2ad3..7810d19a0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -31,7 +31,7 @@ sdrangel (4.8.2-1) unstable; urgency=medium sdrangel (4.8.1-1) unstable; urgency=medium * AM demod: fixed audio interpolator. Issue #354 - * Implemented interpolation to audio for NFM and SSB demods allowing the use of a 48k audio sink regardless of the channel sample rate + * Interpolation to audio for NFM and SSB demods allowing the use of a 48k audio sink regardless of the channel sample rate * AM demod: implemented low pass filter after the demod. Issue #352 * Spectrum window: added ability to use the mouse wheel to move the central channel marker line. Issue #343 * Frequency Tracker: make lock converge faster diff --git a/debian/changelog b/debian/changelog index a7cbd2ad3..7810d19a0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -31,7 +31,7 @@ sdrangel (4.8.2-1) unstable; urgency=medium sdrangel (4.8.1-1) unstable; urgency=medium * AM demod: fixed audio interpolator. Issue #354 - * Implemented interpolation to audio for NFM and SSB demods allowing the use of a 48k audio sink regardless of the channel sample rate + * Interpolation to audio for NFM and SSB demods allowing the use of a 48k audio sink regardless of the channel sample rate * AM demod: implemented low pass filter after the demod. Issue #352 * Spectrum window: added ability to use the mouse wheel to move the central channel marker line. Issue #343 * Frequency Tracker: make lock converge faster diff --git a/doc/img/KiwiSDRInput_plugin.png b/doc/img/KiwiSDRInput_plugin.png index e19507a4cb701853cdb9ba4dbb617869b27d8647..a8e78f517c76da934124c136c3385e6d85e43071 100644 GIT binary patch literal 18104 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 literal 17368 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 diff --git a/doc/img/KiwiSDRInput_plugin.xcf b/doc/img/KiwiSDRInput_plugin.xcf index 66966e69276f7187b7d9f92815643d8999542e2c..db052dab242b8e6e2bd556df1d54bb66503adb9c 100644 GIT binary patch delta 11349 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 - Test source + KiwiSDR @@ -310,6 +310,16 @@ + + + + Automatic DC offset removal + + + DC + + + diff --git a/plugins/samplesource/kiwisdr/kiwisdrinput.cpp b/plugins/samplesource/kiwisdr/kiwisdrinput.cpp index 6ae3657ed..aaca03fa9 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrinput.cpp +++ b/plugins/samplesource/kiwisdr/kiwisdrinput.cpp @@ -302,6 +302,12 @@ bool KiwiSDRInput::applySettings(const KiwiSDRSettings& settings, bool force) emit setWorkerGain(settings.m_gain, settings.m_useAGC); } + if (m_settings.m_dcBlock != settings.m_dcBlock) + { + reverseAPIKeys.append("dcBlock"); + m_deviceAPI->configureCorrections(settings.m_dcBlock, false); + } + if (m_settings.m_centerFrequency != settings.m_centerFrequency || force) { reverseAPIKeys.append("centerFrequency"); @@ -382,6 +388,9 @@ int KiwiSDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("useAGC")) { settings.m_useAGC = response.getKiwiSdrSettings()->getUseAgc(); } + if (deviceSettingsKeys.contains("dcBlock")) { + settings.m_dcBlock = response.getKiwiSdrSettings()->getDcBlock() != 0; + } if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getKiwiSdrSettings()->getCenterFrequency(); } @@ -432,6 +441,7 @@ void KiwiSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& re { response.getKiwiSdrSettings()->setGain(settings.m_gain); response.getKiwiSdrSettings()->setUseAgc(settings.m_useAGC ? 1 : 0); + response.getKiwiSdrSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0); response.getKiwiSdrSettings()->setCenterFrequency(settings.m_centerFrequency); if (response.getKiwiSdrSettings()->getServerAddress()) { @@ -480,6 +490,9 @@ void KiwiSDRInput::webapiReverseSendSettings(QList& deviceSettingsKeys, if (deviceSettingsKeys.contains("useAGC")) { swgKiwiSDRSettings->setUseAgc(settings.m_useAGC ? 1 : 0); } + if (deviceSettingsKeys.contains("dcBlock") || force) { + swgKiwiSDRSettings->setDcBlock(settings.m_dcBlock ? 1 : 0); + } if (deviceSettingsKeys.contains("centerFrequency") || force) { swgKiwiSDRSettings->setCenterFrequency(settings.m_centerFrequency); } diff --git a/plugins/samplesource/kiwisdr/kiwisdrsettings.cpp b/plugins/samplesource/kiwisdr/kiwisdrsettings.cpp index f0ad5fd63..c569ab64c 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrsettings.cpp +++ b/plugins/samplesource/kiwisdr/kiwisdrsettings.cpp @@ -30,6 +30,7 @@ void KiwiSDRSettings::resetToDefaults() m_gain = 20; m_useAGC = true; + m_dcBlock = false; m_serverAddress = "127.0.0.1:8073"; diff --git a/plugins/samplesource/kiwisdr/kiwisdrsettings.h b/plugins/samplesource/kiwisdr/kiwisdrsettings.h index eb2391fd6..bbb329a2c 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrsettings.h +++ b/plugins/samplesource/kiwisdr/kiwisdrsettings.h @@ -25,6 +25,7 @@ struct KiwiSDRSettings { uint32_t m_gain; bool m_useAGC; + bool m_dcBlock; quint64 m_centerFrequency; QString m_serverAddress; diff --git a/plugins/samplesource/kiwisdr/readme.md b/plugins/samplesource/kiwisdr/readme.md index bbdda095f..ee9a38752 100644 --- a/plugins/samplesource/kiwisdr/readme.md +++ b/plugins/samplesource/kiwisdr/readme.md @@ -2,7 +2,7 @@

Introduction

-This plugin is designed to enable connection to publicly available [KiwiSDR](http://kiwisdr.com/) receivers. A list of on-line receiver is available [here](https://sdr.hu/?q=kiwisdr) +This plugin is designed to enable connection to publicly available [KiwiSDR](http://kiwisdr.com/) receivers. A list of on-line receivers is available [here](https://sdr.hu/?q=kiwisdr)

Interface

@@ -57,4 +57,8 @@ This is the RF gain control sent to the remote

9: AGC

-Use this button to switch on or off the AGC in the remote \ No newline at end of file +Use this button to switch on or off the AGC in the remote + +

10: DC block

+ +Some remote receivers exhibit a peak at DC. Use this button to filter DC out. diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 097664313..762b634cc 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -3098,6 +3098,9 @@ margin-bottom: 20px; "type" : "integer", "description" : "AGC active (1 for yes, 0 for no)" }, + "dcBlock" : { + "type" : "integer" + }, "centerFrequency" : { "type" : "integer", "format" : "int64" @@ -25151,7 +25154,7 @@ except ApiException as e:
- Generated 2019-06-09T01:28:52.118+02:00 + Generated 2019-06-09T20:39:26.572+02:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/KiwiSDR.yaml b/sdrbase/resources/webapi/doc/swagger/include/KiwiSDR.yaml index 5f22cd599..cb3dee599 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/KiwiSDR.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/KiwiSDR.yaml @@ -6,6 +6,8 @@ KiwiSDRSettings: useAGC: description: AGC active (1 for yes, 0 for no) type: integer + dcBlock: + type: integer centerFrequency: type: integer format: int64 diff --git a/swagger/sdrangel/api/swagger/include/KiwiSDR.yaml b/swagger/sdrangel/api/swagger/include/KiwiSDR.yaml index 5f22cd599..cb3dee599 100644 --- a/swagger/sdrangel/api/swagger/include/KiwiSDR.yaml +++ b/swagger/sdrangel/api/swagger/include/KiwiSDR.yaml @@ -6,6 +6,8 @@ KiwiSDRSettings: useAGC: description: AGC active (1 for yes, 0 for no) type: integer + dcBlock: + type: integer centerFrequency: type: integer format: int64 diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 097664313..762b634cc 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -3098,6 +3098,9 @@ margin-bottom: 20px; "type" : "integer", "description" : "AGC active (1 for yes, 0 for no)" }, + "dcBlock" : { + "type" : "integer" + }, "centerFrequency" : { "type" : "integer", "format" : "int64" @@ -25151,7 +25154,7 @@ except ApiException as e:
- Generated 2019-06-09T01:28:52.118+02:00 + Generated 2019-06-09T20:39:26.572+02:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.cpp index 95e3cec3b..5be468379 100644 --- a/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.cpp @@ -32,6 +32,8 @@ SWGKiwiSDRSettings::SWGKiwiSDRSettings() { m_gain_isSet = false; use_agc = 0; m_use_agc_isSet = false; + dc_block = 0; + m_dc_block_isSet = false; center_frequency = 0L; m_center_frequency_isSet = false; server_address = nullptr; @@ -58,6 +60,8 @@ SWGKiwiSDRSettings::init() { m_gain_isSet = false; use_agc = 0; m_use_agc_isSet = false; + dc_block = 0; + m_dc_block_isSet = false; center_frequency = 0L; m_center_frequency_isSet = false; server_address = new QString(""); @@ -79,6 +83,7 @@ SWGKiwiSDRSettings::cleanup() { + if(server_address != nullptr) { delete server_address; } @@ -108,6 +113,8 @@ SWGKiwiSDRSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&use_agc, pJson["useAGC"], "qint32", ""); + ::SWGSDRangel::setValue(&dc_block, pJson["dcBlock"], "qint32", ""); + ::SWGSDRangel::setValue(¢er_frequency, pJson["centerFrequency"], "qint64", ""); ::SWGSDRangel::setValue(&server_address, pJson["serverAddress"], "QString", "QString"); @@ -144,6 +151,9 @@ SWGKiwiSDRSettings::asJsonObject() { if(m_use_agc_isSet){ obj->insert("useAGC", QJsonValue(use_agc)); } + if(m_dc_block_isSet){ + obj->insert("dcBlock", QJsonValue(dc_block)); + } if(m_center_frequency_isSet){ obj->insert("centerFrequency", QJsonValue(center_frequency)); } @@ -189,6 +199,16 @@ SWGKiwiSDRSettings::setUseAgc(qint32 use_agc) { this->m_use_agc_isSet = true; } +qint32 +SWGKiwiSDRSettings::getDcBlock() { + return dc_block; +} +void +SWGKiwiSDRSettings::setDcBlock(qint32 dc_block) { + this->dc_block = dc_block; + this->m_dc_block_isSet = true; +} + qint64 SWGKiwiSDRSettings::getCenterFrequency() { return center_frequency; @@ -266,6 +286,7 @@ SWGKiwiSDRSettings::isSet(){ do{ if(m_gain_isSet){ isObjectUpdated = true; break;} if(m_use_agc_isSet){ isObjectUpdated = true; break;} + if(m_dc_block_isSet){ isObjectUpdated = true; break;} if(m_center_frequency_isSet){ isObjectUpdated = true; break;} if(server_address != nullptr && *server_address != QString("")){ isObjectUpdated = true; break;} if(file_record_name != nullptr && *file_record_name != QString("")){ isObjectUpdated = true; break;} diff --git a/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.h b/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.h index 0a5a0b356..ef752c4ed 100644 --- a/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGKiwiSDRSettings.h @@ -48,6 +48,9 @@ public: qint32 getUseAgc(); void setUseAgc(qint32 use_agc); + qint32 getDcBlock(); + void setDcBlock(qint32 dc_block); + qint64 getCenterFrequency(); void setCenterFrequency(qint64 center_frequency); @@ -79,6 +82,9 @@ private: qint32 use_agc; bool m_use_agc_isSet; + qint32 dc_block; + bool m_dc_block_isSet; + qint64 center_frequency; bool m_center_frequency_isSet;