From a754becb46cc1eb479a70ad84b240fa0737b976f Mon Sep 17 00:00:00 2001 From: Ryzerth Date: Fri, 12 Feb 2021 22:44:29 +0100 Subject: [PATCH] added lazy db thing --- CMakeLists.txt | 6 +-- core/src/gui/main_window.cpp | 9 ++-- sdrplay_source/src/main.cpp | 80 ++++++++++++++++++++++++++++-------- 3 files changed, 73 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c2c95552..ce97b791 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,13 +7,13 @@ if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) endif() option(OPT_BUILD_RTL_TCP_SOURCE "Build RTL-TCP Source Module (no dependencies required)" ON) -option(OPT_BUILD_SPYSERVER_SOURCE "Build SpyServer Source Module (no dependencies required)" ON) +option(OPT_BUILD_SPYSERVER_SOURCE "Build SpyServer Source Module (no dependencies required)" OFF) option(OPT_BUILD_SOAPY_SOURCE "Build SoapySDR Source Module (Depedencies: soapysdr)" ON) option(OPT_BUILD_AIRSPYHF_SOURCE "Build Airspy HF+ Source Module (Depedencies: libairspyhf)" ON) option(OPT_BUILD_AIRSPY_SOURCE "Build Airspy Source Module (Depedencies: libairspy)" ON) -option(OPT_BUILD_SDRPLAY_SOURCE "Build SDRplay Source Module (Depedencies: libsdrplay)" ON) +option(OPT_BUILD_SDRPLAY_SOURCE "Build SDRplay Source Module (Depedencies: libsdrplay)" OFF) option(OPT_BUILD_PLUTOSDR_SOURCE "Build PlutoSDR Source Module (Depedencies: libiio, libad9361)" ON) -option(OPT_BUILD_HACKRF_SOURCE "Build HackRF Source Module (Depedencies: libhackrf)" ON) +option(OPT_BUILD_HACKRF_SOURCE "Build HackRF Source Module (Depedencies: libhackrf)" OFF) option(OPT_BUILD_AUDIO_SINK "Build Audio Sink Module (Depedencies: portaudio)" ON) # Core of SDR++ diff --git a/core/src/gui/main_window.cpp b/core/src/gui/main_window.cpp index a6f06d6a..78034bdb 100644 --- a/core/src/gui/main_window.cpp +++ b/core/src/gui/main_window.cpp @@ -62,6 +62,7 @@ float* tempFFT; float* FFTdata; char buf[1024]; bool experimentalZoom = false; +bool lazyDb = false; @@ -71,7 +72,7 @@ void fftHandler(dsp::complex_t* samples, int count, void* ctx) { int half = count / 2; volk_32fc_s32f_power_spectrum_32f(tempFFT, (lv_32fc_t*)fft_out, count, count); - volk_32f_s32f_multiply_32f(FFTdata, tempFFT, 0.5f, count); + volk_32f_s32f_multiply_32f(FFTdata, tempFFT, lazyDb ? 1.0f : 0.5f, count); memcpy(tempFFT, &FFTdata[half], half * sizeof(float)); memmove(&FFTdata[half], FFTdata, half * sizeof(float)); @@ -559,6 +560,8 @@ void drawWindow() { spdlog::error("Will this make the software crash?"); } + ImGui::Checkbox("Lazy dB Measurement", &lazyDb); + ImGui::Spacing(); } @@ -602,7 +605,7 @@ void drawWindow() { ImGui::SetCursorPosX((ImGui::GetWindowSize().x / 2.0) - (ImGui::CalcTextSize("Max").x / 2.0)); ImGui::Text("Max"); ImGui::SetCursorPosX((ImGui::GetWindowSize().x / 2.0) - 10); - if (ImGui::VSliderFloat("##_8_", ImVec2(20.0, 150.0), &fftMax, 0.0, -100.0, "")) { + if (ImGui::VSliderFloat("##_8_", ImVec2(20.0, 150.0), &fftMax, 0.0, lazyDb ? -160.0f : 100.0f, "")) { fftMax = std::max(fftMax, fftMin + 10); core::configManager.aquire(); core::configManager.conf["max"] = fftMax; @@ -614,7 +617,7 @@ void drawWindow() { ImGui::SetCursorPosX((ImGui::GetWindowSize().x / 2.0) - (ImGui::CalcTextSize("Min").x / 2.0)); ImGui::Text("Min"); ImGui::SetCursorPosX((ImGui::GetWindowSize().x / 2.0) - 10); - if (ImGui::VSliderFloat("##_9_", ImVec2(20.0, 150.0), &fftMin, 0.0, -100.0, "")) { + if (ImGui::VSliderFloat("##_9_", ImVec2(20.0, 150.0), &fftMin, 0.0, lazyDb ? -160.0f : 100.0f, "")) { fftMin = std::min(fftMax - 10, fftMin); core::configManager.aquire(); core::configManager.conf["min"] = fftMin; diff --git a/sdrplay_source/src/main.cpp b/sdrplay_source/src/main.cpp index 6d2995c8..59f84a2d 100644 --- a/sdrplay_source/src/main.cpp +++ b/sdrplay_source/src/main.cpp @@ -28,6 +28,9 @@ public: this->name = name; // Init callbacks + cbFuncs.EventCbFn = eventCB; + cbFuncs.StreamACbFn = streamCB; + cbFuncs.StreamBCbFn = streamCB; sdrplay_api_Open(); @@ -45,9 +48,11 @@ public: refresh(); selectFirst(); - if (sampleRateList.size() > 0) { - sampleRate = sampleRateList[0]; - } + // if (sampleRateList.size() > 0) { + // sampleRate = sampleRateList[0]; + // } + + sampleRate = 8000000; // Select device from config // config.aquire(); @@ -85,7 +90,26 @@ public: for (unsigned int i = 0; i < numDev; i++) { devList.push_back(devArr[i]); - devListTxt += devArr[i].SerNo; + switch (devArr[i].hwVer) { + case SDRPLAY_RSP1_ID: + devListTxt += "RSP1 "; devListTxt += devArr[i].SerNo; + break; + case SDRPLAY_RSP1A_ID: + devListTxt += "RSP1A "; devListTxt += devArr[i].SerNo; + break; + case SDRPLAY_RSP2_ID: + devListTxt += "RSP2 "; devListTxt += devArr[i].SerNo; + break; + case SDRPLAY_RSPduo_ID: + devListTxt += "RSPduo "; devListTxt += devArr[i].SerNo; + break; + case SDRPLAY_RSPdx_ID: + devListTxt += "RSPdx "; devListTxt += devArr[i].SerNo; + break; + default: + devListTxt += "Unknown "; devListTxt += devArr[i].SerNo; + break; + } devListTxt += '\0'; } } @@ -113,9 +137,14 @@ public: return; } + err = sdrplay_api_Init(openDev.dev, &cbFuncs, this); + if (err != sdrplay_api_Success) { + const char* errStr = sdrplay_api_GetErrorString(err); + spdlog::error("Could not init RSP device: {0}", errStr); + return; + } - - spdlog::info("Init OK"); + deviceOpen = true; } private: @@ -151,6 +180,19 @@ private: } // Do start procedure here + sdrplay_api_ErrT err; + + _this->openDevParams->devParams->samplesPerPkt = 8000000 / 200; + _this->openDevParams->devParams->fsFreq.fsHz = 8000000; + _this->openDevParams->rxChannelA->tunerParams.bwType = sdrplay_api_BW_8_000; + _this->openDevParams->rxChannelA->tunerParams.rfFreq.rfHz = _this->freq; + _this->openDevParams->rxChannelA->tunerParams.gain.LNAstate = 0; + //_this->openDevParams->devParams-> + + sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Dev_Fs, sdrplay_api_Update_Ext1_None); + sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Tuner_BwType, sdrplay_api_Update_Ext1_None); + sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Tuner_Frf, sdrplay_api_Update_Ext1_None); + sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Tuner_Gr, sdrplay_api_Update_Ext1_None); _this->running = true; spdlog::info("SDRPlaySourceModule '{0}': Start!", _this->name); @@ -173,7 +215,8 @@ private: static void tune(double freq, void* ctx) { SDRPlaySourceModule* _this = (SDRPlaySourceModule*)ctx; if (_this->running) { - // Tune here + _this->openDevParams->rxChannelA->tunerParams.rfFreq.rfHz = _this->freq; + sdrplay_api_Update(_this->openDev.dev, _this->openDev.tuner, sdrplay_api_Update_Tuner_Frf, sdrplay_api_Update_Ext1_None); } _this->freq = freq; spdlog::info("SDRPlaySourceModule '{0}': Tune: {1}!", _this->name, freq); @@ -187,24 +230,28 @@ private: ImGui::SetNextItemWidth(menuWidth); - if (_this->running) { style::beginDisabled(); } + if (ImGui::Combo(CONCAT("##sdrplay_dev", _this->name), &_this->devId, _this->devListTxt.c_str())) { } - if (_this->running) { style::endDisabled(); } - - + if (_this->running) { style::endDisabled(); } } - static void eventCB(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, + static void streamCB(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *cbContext) { - // Code here + SDRPlaySourceModule* _this = (SDRPlaySourceModule*)cbContext; + if (!_this->running) { return; } + for (int i = 0; i < numSamples; i++) { + _this->stream.writeBuf[i].i = (float)xi[i] / 32768.0f; + _this->stream.writeBuf[i].q = (float)xq[i] / 32768.0f; + } + _this->stream.swap(numSamples); } - static void tunerCB(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, + static void eventCB(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, sdrplay_api_EventParamsT *params, void *cbContext) { - // Code here + SDRPlaySourceModule* _this = (SDRPlaySourceModule*)cbContext; } std::string name; @@ -214,8 +261,9 @@ private: SourceManager::SourceHandler handler; bool running = false; double freq; + bool deviceOpen = false; - sdrplay_api_CallbackFnsT cnFuncs; + sdrplay_api_CallbackFnsT cbFuncs; sdrplay_api_DeviceT openDev; sdrplay_api_DeviceParamsT * openDevParams;