From c83b6e61d5b707f7680cc8e3925f7267aa12fd9a Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 16 Sep 2017 23:44:00 +0200 Subject: [PATCH] Implemented connection from device sample source/sink to GUI input message queue --- sdrbase/dsp/devicesamplesink.h | 7 +++++-- sdrbase/dsp/devicesamplesource.cpp | 7 ++++--- sdrbase/dsp/devicesamplesource.h | 7 +++++-- sdrbase/mainwindow.cpp | 7 +++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sdrbase/dsp/devicesamplesink.h b/sdrbase/dsp/devicesamplesink.h index 34846c52e..daea864c2 100644 --- a/sdrbase/dsp/devicesamplesink.h +++ b/sdrbase/dsp/devicesamplesink.h @@ -42,7 +42,9 @@ public: virtual bool handleMessage(const Message& message) = 0; MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } - MessageQueue *getOutputMessageQueueToGUI() { return &m_outputMessageQueueToGUI; } + void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } + MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } + MessageQueue *getOutputMessageQueueToGUI() { return &m_outputMessageQueueToGUI; } // TODO: remove SampleSourceFifo* getSampleFifo() { return &m_sampleSourceFifo; } protected slots: @@ -51,7 +53,8 @@ protected slots: protected: SampleSourceFifo m_sampleSourceFifo; MessageQueue m_inputMessageQueue; //!< Input queue to the sink - MessageQueue m_outputMessageQueueToGUI; //!< Output queue specialized for the sink GUI + MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI + MessageQueue m_outputMessageQueueToGUI; //!< Output queue specialized for the sink GUI // TODO: remove }; #endif /* SDRBASE_DSP_DEVICESAMPLESINK_H_ */ diff --git a/sdrbase/dsp/devicesamplesource.cpp b/sdrbase/dsp/devicesamplesource.cpp index 5c3e7cf3e..4295d2f3b 100644 --- a/sdrbase/dsp/devicesamplesource.cpp +++ b/sdrbase/dsp/devicesamplesource.cpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // -// written by Christian Daniel // +// Copyright (C) 2015-2017 F4EXB // +// written by Edouard Griffiths // // // // 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 // @@ -17,7 +17,8 @@ #include -DeviceSampleSource::DeviceSampleSource() +DeviceSampleSource::DeviceSampleSource() : + m_guiMessageQueue(0) { connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); } diff --git a/sdrbase/dsp/devicesamplesource.h b/sdrbase/dsp/devicesamplesource.h index 00fb2d93e..15d29c900 100644 --- a/sdrbase/dsp/devicesamplesource.h +++ b/sdrbase/dsp/devicesamplesource.h @@ -42,7 +42,9 @@ public: virtual bool handleMessage(const Message& message) = 0; MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } - MessageQueue *getOutputMessageQueueToGUI() { return &m_outputMessageQueueToGUI; } + void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } + MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } + MessageQueue *getOutputMessageQueueToGUI() { return &m_outputMessageQueueToGUI; } // TODO: remove SampleSinkFifo* getSampleFifo() { return &m_sampleFifo; } protected slots: @@ -51,7 +53,8 @@ protected slots: protected: SampleSinkFifo m_sampleFifo; MessageQueue m_inputMessageQueue; //!< Input queue to the source - MessageQueue m_outputMessageQueueToGUI; //!< Output queue specialized for the source GUI + MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI + MessageQueue m_outputMessageQueueToGUI; //!< Output queue specialized for the source GUI // TODO: remove }; #endif // INCLUDE_SAMPLESOURCE_H diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index 7b0e74226..128f61fbc 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -45,6 +45,8 @@ #include "dsp/dspengine.h" #include "dsp/spectrumvis.h" #include "dsp/dspcommands.h" +#include "dsp/devicesamplesource.h" +#include "dsp/devicesamplesink.h" #include "plugin/pluginapi.h" #include "gui/glspectrum.h" #include "gui/glspectrumgui.h" @@ -146,6 +148,7 @@ MainWindow::MainWindow(QWidget* parent) : QWidget *gui; PluginInstanceUI *pluginGUI = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), &gui, m_deviceUIs.back()->m_deviceSourceAPI); + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(pluginGUI->getInputMessageQueue()); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInstanceGUI(pluginGUI); setDeviceGUI(0, gui, m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceDisplayName()); @@ -229,6 +232,7 @@ void MainWindow::addSourceDevice() QWidget *gui; PluginInstanceUI *pluginGUI = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), &gui, m_deviceUIs.back()->m_deviceSourceAPI); + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(pluginGUI->getInputMessageQueue()); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInstanceGUI(pluginGUI); setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceDisplayName()); @@ -284,6 +288,7 @@ void MainWindow::addSinkDevice() QWidget *gui; PluginInstanceUI *pluginUI = m_deviceUIs.back()->m_deviceSinkAPI->getPluginInterface()->createSampleSinkPluginInstanceGUI( m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkId(), &gui, m_deviceUIs.back()->m_deviceSinkAPI); + m_deviceUIs.back()->m_deviceSinkAPI->getSampleSink()->setMessageQueueToGUI(pluginUI->getInputMessageQueue()); m_deviceUIs.back()->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(pluginUI); setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkDisplayName(), false); } @@ -887,6 +892,7 @@ void MainWindow::on_sampleSource_confirmClicked(bool checked __attribute__((unus QWidget *gui; PluginInstanceUI *pluginUI = deviceUI->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( deviceUI->m_deviceSourceAPI->getSampleSourceId(), &gui, deviceUI->m_deviceSourceAPI); + deviceUI->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(pluginUI->getInputMessageQueue()); deviceUI->m_deviceSourceAPI->setSampleSourcePluginInstanceGUI(pluginUI); setDeviceGUI(currentSourceTabIndex, gui, deviceUI->m_deviceSourceAPI->getSampleSourceDisplayName()); @@ -964,6 +970,7 @@ void MainWindow::on_sampleSink_confirmClicked(bool checked __attribute__((unused QWidget *gui; PluginInstanceUI *pluginUI = deviceUI->m_deviceSinkAPI->getPluginInterface()->createSampleSinkPluginInstanceGUI( deviceUI->m_deviceSinkAPI->getSampleSinkId(), &gui, deviceUI->m_deviceSinkAPI); + deviceUI->m_deviceSinkAPI->getSampleSink()->setMessageQueueToGUI(pluginUI->getInputMessageQueue()); deviceUI->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(pluginUI); setDeviceGUI(currentSinkTabIndex, gui, deviceUI->m_deviceSinkAPI->getSampleSinkDisplayName(), false);