From 6522f62326dca7ad1a187434479a6a339cb91ee7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 9 Aug 2017 00:31:23 +0200 Subject: [PATCH] BladeRF output: set FIFO size to 0.25s or 75 kS whichever is larger (300kS/s knee) except when decimating by 32 where a fixed 150 kS FIFO is used --- devices/bladerf/CMakeLists.txt | 2 ++ devices/bladerf/devicebladerfshared.cpp | 21 +++++++++++++ devices/bladerf/devicebladerfshared.h | 31 +++++++++++++++++++ devices/devices.pro | 6 ++-- .../bladerfoutput/bladerfoutput.cpp | 19 +++++++++--- 5 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 devices/bladerf/devicebladerfshared.cpp create mode 100644 devices/bladerf/devicebladerfshared.h diff --git a/devices/bladerf/CMakeLists.txt b/devices/bladerf/CMakeLists.txt index 8482f74ac..1d698cbdd 100644 --- a/devices/bladerf/CMakeLists.txt +++ b/devices/bladerf/CMakeLists.txt @@ -3,12 +3,14 @@ project(bladerfdevice) set(bladerfdevice_SOURCES devicebladerf.cpp devicebladerfvalues.cpp + devicebladerfshared.cpp ) set(bladerfdevice_HEADERS devicebladerf.h devicebladerfvalues.h devicebladerfparam.h + devicebladerfshared.h ) if (BUILD_DEBIAN) diff --git a/devices/bladerf/devicebladerfshared.cpp b/devices/bladerf/devicebladerfshared.cpp new file mode 100644 index 000000000..636318a00 --- /dev/null +++ b/devices/bladerf/devicebladerfshared.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017 Edouard Griffiths, F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "devicebladerfshared.h" + +const float DeviceBladeRFShared::m_sampleFifoLengthInSeconds = 0.25; +const int DeviceBladeRFShared::m_sampleFifoMinSize = 75000; // 300 kS/s knee +const int DeviceBladeRFShared::m_sampleFifoMinSize32 = 150000; // Fixed for interpolation by 32 diff --git a/devices/bladerf/devicebladerfshared.h b/devices/bladerf/devicebladerfshared.h new file mode 100644 index 000000000..4ad706744 --- /dev/null +++ b/devices/bladerf/devicebladerfshared.h @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017 Edouard Griffiths, F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef DEVICES_BLADERF_DEVICEHACKRFSHARED_H_ +#define DEVICES_BLADERF_DEVICEHACKRFSHARED_H_ + +#include "util/message.h" + +class DeviceBladeRFShared +{ +public: + static const float m_sampleFifoLengthInSeconds; + static const int m_sampleFifoMinSize; + static const int m_sampleFifoMinSize32; +}; + + +#endif /* DEVICES_BLADERF_DEVICEHACKRFSHARED_H_ */ diff --git a/devices/devices.pro b/devices/devices.pro index f6cc17a76..650455714 100644 --- a/devices/devices.pro +++ b/devices/devices.pro @@ -45,7 +45,8 @@ CONFIG(Release):build_subdir = release CONFIG(Debug):build_subdir = debug !macx:SOURCES += bladerf/devicebladerf.cpp\ - bladerf/devicebladerfvalues.cpp + bladerf/devicebladerfvalues.cpp\ + bladerf/devicebladerfshared.cpp SOURCES += hackrf/devicehackrf.cpp\ hackrf/devicehackrfvalues.cpp\ @@ -57,7 +58,8 @@ CONFIG(MINGW64)SOURCES += limesdr/devicelimesdr.cpp\ !macx:HEADERS -= bladerf/devicebladerf.h\ bladerf/devicebladerfparam.h\ - bladerf/devicebladerfvalues.h + bladerf/devicebladerfvalues.h\ + bladerf/devicebladerfshared.h HEADERS += hackrf/devicehackrf.h\ hackrf/devicehackrfparam.h\ diff --git a/plugins/samplesink/bladerfoutput/bladerfoutput.cpp b/plugins/samplesink/bladerfoutput/bladerfoutput.cpp index 5aac4c161..35f03e07a 100644 --- a/plugins/samplesink/bladerfoutput/bladerfoutput.cpp +++ b/plugins/samplesink/bladerfoutput/bladerfoutput.cpp @@ -23,6 +23,7 @@ #include "dsp/dspengine.h" #include "device/devicesinkapi.h" #include "device/devicesourceapi.h" +#include "bladerf/devicebladerfshared.h" #include "bladerfoutput.h" #include "bladerfoutputgui.h" @@ -243,10 +244,20 @@ bool BladerfOutput::applySettings(const BladeRFOutputSettings& settings, bool fo if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || (m_settings.m_log2Interp != settings.m_log2Interp) || force) { - // FIFO size: - // 1 s length up to interpolation by 16 - // 2 s for interpolation by 32 - m_sampleSourceFifo.resize(settings.m_devSampleRate/(1<<(settings.m_log2Interp <= 4 ? settings.m_log2Interp : 4))); + int fifoSize; + + if (settings.m_log2Interp == 5) + { + fifoSize = DeviceBladeRFShared::m_sampleFifoMinSize32; + } + else + { + fifoSize = std::max( + (int) ((settings.m_devSampleRate/(1<