From 47a4da4142858c009ab1c6caa30566eadcbbdfd4 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 25 Sep 2018 08:45:57 +0200 Subject: [PATCH] BladerRF2 input support (8). Streams but thread issue --- devices/bladerf2/devicebladerf2shared.h | 4 ++-- .../samplesource/bladerf2input/bladerf2input.cpp | 13 +++++++++---- plugins/samplesource/bladerf2input/bladerf2input.h | 3 ++- .../bladerf2input/bladerf2inputthread.cpp | 7 +++++++ .../bladerf2input/bladerf2inputthread.h | 2 +- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/devices/bladerf2/devicebladerf2shared.h b/devices/bladerf2/devicebladerf2shared.h index 6e132887a..2c04e26f9 100644 --- a/devices/bladerf2/devicebladerf2shared.h +++ b/devices/bladerf2/devicebladerf2shared.h @@ -32,7 +32,7 @@ public: class InputThreadInterface { public: - virtual ~InputThreadInterface() = 0; + virtual ~InputThreadInterface() {} virtual void startWork() = 0; virtual void stopWork() = 0; virtual bool isRunning() const = 0; @@ -48,7 +48,7 @@ public: class OutputThreadInterface { public: - virtual ~OutputThreadInterface() = 0; + virtual ~OutputThreadInterface() {} virtual void startWork() = 0; virtual void stopWork() = 0; virtual bool isRunning() = 0; diff --git a/plugins/samplesource/bladerf2input/bladerf2input.cpp b/plugins/samplesource/bladerf2input/bladerf2input.cpp index 296fe3e44..035d0760d 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2input.cpp @@ -42,7 +42,8 @@ BladeRF2Input::BladeRF2Input(DeviceSourceAPI *deviceAPI) : m_deviceAPI(deviceAPI), m_settings(), m_deviceDescription("BladeRF2Input"), - m_running(false) + m_running(false), + m_thread(0) { openDevice(); @@ -313,11 +314,13 @@ void BladeRF2Input::stop() } int nbOriginalChannels = m_deviceShared.m_inputThread->getNbChannels(); + Bladerf2InputThread *bladerf2InputThread = 0; if (nbOriginalChannels == 1) // SI mode { m_deviceShared.m_inputThread->stopWork(); - delete m_deviceShared.m_inputThread; + bladerf2InputThread = (Bladerf2InputThread*) m_deviceShared.m_inputThread; + delete bladerf2InputThread; m_deviceShared.m_inputThread = 0; m_running = false; } @@ -334,8 +337,10 @@ void BladeRF2Input::stop() fcPoss[i] = m_deviceShared.m_inputThread->getFcPos(i); } - delete m_deviceShared.m_inputThread; - m_deviceShared.m_inputThread = new Bladerf2InputThread(m_deviceShared.m_dev->getDev(), nbOriginalChannels-1); + bladerf2InputThread = (Bladerf2InputThread*) m_deviceShared.m_inputThread; + delete bladerf2InputThread; + bladerf2InputThread = new Bladerf2InputThread(m_deviceShared.m_dev->getDev(), nbOriginalChannels-1); + m_deviceShared.m_inputThread = bladerf2InputThread; for (int i = 0; i < nbOriginalChannels-1; i++) { // restore original FIFO references m_deviceShared.m_inputThread->setFifo(i, fifos[i]); diff --git a/plugins/samplesource/bladerf2input/bladerf2input.h b/plugins/samplesource/bladerf2input/bladerf2input.h index 8966c378d..6a91a690a 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.h +++ b/plugins/samplesource/bladerf2input/bladerf2input.h @@ -26,7 +26,7 @@ #include "bladerf2inputsettings.h" class DeviceSourceAPI; -class LimeSDRInputThread; +class BladeRF2InputThread; class FileRecord; class BladeRF2Input : public DeviceSampleSource @@ -147,6 +147,7 @@ private: QString m_deviceDescription; bool m_running; DeviceBladeRF2Shared m_deviceShared; + BladeRF2InputThread *m_thread; FileRecord *m_fileSink; //!< File sink to record device I/Q output bool openDevice(); diff --git a/plugins/samplesource/bladerf2input/bladerf2inputthread.cpp b/plugins/samplesource/bladerf2input/bladerf2inputthread.cpp index 048576800..490bb2da1 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputthread.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2inputthread.cpp @@ -23,11 +23,18 @@ Bladerf2InputThread::Bladerf2InputThread(struct bladerf* dev, unsigned int nbRxC m_nbChannels(nbRxChannels) { m_channels = new Channel[nbRxChannels]; + + for (unsigned int i = 0; i < nbRxChannels; i++) { + m_channels[i].m_convertBuffer.resize(DeviceBladeRF2::blockSize, Sample{0,0}); + } + m_buf = new qint16[2*DeviceBladeRF2::blockSize*nbRxChannels]; } Bladerf2InputThread::~Bladerf2InputThread() { + qDebug("Bladerf2InputThread::~Bladerf2InputThread"); + if (m_running) { stopWork(); } diff --git a/plugins/samplesource/bladerf2input/bladerf2inputthread.h b/plugins/samplesource/bladerf2input/bladerf2inputthread.h index ba2718a93..bbce54fff 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputthread.h +++ b/plugins/samplesource/bladerf2input/bladerf2inputthread.h @@ -37,7 +37,7 @@ class Bladerf2InputThread : public QThread, public DeviceBladeRF2Shared::InputTh public: Bladerf2InputThread(struct bladerf* dev, unsigned int nbRxChannels, QObject* parent = NULL); - virtual ~Bladerf2InputThread(); + ~Bladerf2InputThread(); virtual void startWork(); virtual void stopWork();