From 5b4c5bd5c1fc460d98dced5e898d3e43ac467764 Mon Sep 17 00:00:00 2001 From: Paulo Matias Date: Mon, 22 Feb 2021 23:13:00 -0300 Subject: [PATCH] Support selecting antenna for SoapySDR source --- soapy_source/src/main.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/soapy_source/src/main.cpp b/soapy_source/src/main.cpp index 9a5b8b8e..942f19cd 100644 --- a/soapy_source/src/main.cpp +++ b/soapy_source/src/main.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -152,6 +153,12 @@ private: SoapySDR::Device* dev = SoapySDR::Device::make(devArgs); + antennaList = dev->listAntennas(SOAPY_SDR_RX, channelId); + txtAntennaList = ""; + for (const std::string & ant : antennaList) { + txtAntennaList += ant + '\0'; + } + gainList = dev->listGains(SOAPY_SDR_RX, channelId); delete[] uiGains; uiGains = new float[gainList.size()]; @@ -201,6 +208,11 @@ private: config.aquire(); if (config.conf["devices"].contains(name)) { + if(config.conf["devices"][name].contains("antenna")) { + uiAntennaId = config.conf["devices"][name]["antenna"]; + } else { + uiAntennaId = 0; + } int i = 0; for (auto gain : gainList) { if (config.conf["devices"][name]["gains"].contains(gain)) { @@ -230,6 +242,7 @@ private: } } else { + uiAntennaId = 0; int i = 0; for (auto gain : gainList) { uiGains[i] = gainRanges[i].minimum(); @@ -249,6 +262,7 @@ private: void saveCurrent() { json conf; conf["sampleRate"] = sampleRate; + conf["antenna"] = uiAntennaId; int i = 0; for (auto gain : gainList) { conf["gains"][gain] = uiGains[i]; @@ -284,6 +298,8 @@ private: _this->dev->setSampleRate(SOAPY_SDR_RX, _this->channelId, _this->sampleRate); + _this->dev->setAntenna(SOAPY_SDR_RX, _this->channelId, _this->antennaList[_this->uiAntennaId]); + if(_this->bandwidthList.size() > 2) { if(_this->bandwidthList[_this->uiBandwidthId] == -1) _this->dev->setBandwidth(SOAPY_SDR_RX, _this->channelId, _this->selectBwBySr(_this->sampleRates[_this->srId])); @@ -368,6 +384,15 @@ private: if (_this->running) { style::endDisabled(); } + ImGui::Text("Antenna"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(menuWidth - ImGui::GetCursorPosX()); + if (ImGui::Combo(CONCAT("##_antenna_select_", _this->name), &_this->uiAntennaId, _this->txtAntennaList.c_str())) { + if (_this->running) + _this->dev->setAntenna(SOAPY_SDR_RX, _this->channelId, _this->antennaList[_this->uiAntennaId]); + _this->saveCurrent(); + } + float gainNameLen = 0; float len; for (auto gain : _this->gainList) { @@ -469,6 +494,9 @@ private: float* uiGains; int channelCount = 1; int channelId = 0; + int uiAntennaId = 0; + std::vector antennaList; + std::string txtAntennaList; std::vector gainList; std::vector gainRanges; int uiBandwidthId = 0;