diff --git a/sdrbase/CMakeLists.txt b/sdrbase/CMakeLists.txt
index f82565a6a..116496169 100644
--- a/sdrbase/CMakeLists.txt
+++ b/sdrbase/CMakeLists.txt
@@ -91,6 +91,7 @@ set(sdrbase_SOURCES
dsp/hbfilterchainconverter.cpp
dsp/hbfiltertraits.cpp
dsp/lowpass.cpp
+ dsp/mimochannel.cpp
dsp/nco.cpp
dsp/ncof.cpp
dsp/phaselock.cpp
@@ -224,6 +225,7 @@ set(sdrbase_HEADERS
dsp/kissfft.h
dsp/kissengine.h
dsp/lowpass.h
+ dsp/mimochannel.h
dsp/misc.h
dsp/movingaverage.h
dsp/nco.h
diff --git a/sdrbase/dsp/mimochannel.cpp b/sdrbase/dsp/mimochannel.cpp
new file mode 100644
index 000000000..c12a2fc79
--- /dev/null
+++ b/sdrbase/dsp/mimochannel.cpp
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2019 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 //
+// the Free Software Foundation as version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// 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 "mimochannel.h"
+
+MIMOChannel::MIMOChannel()
+{
+ connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
+}
+
+MIMOChannel::~MIMOChannel()
+{
+}
+
+void MIMOChannel::handleInputMessages()
+{
+ Message* message;
+
+ while ((message = m_inputMessageQueue.pop()) != 0)
+ {
+ if (handleMessage(*message)) {
+ delete message;
+ }
+ }
+}
diff --git a/sdrbase/dsp/mimochannel.h b/sdrbase/dsp/mimochannel.h
new file mode 100644
index 000000000..48264e5dd
--- /dev/null
+++ b/sdrbase/dsp/mimochannel.h
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2019 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 //
+// the Free Software Foundation as version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// 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 SDRBASE_MIMOCHANNEL_H
+#define SDRBASE_MIMOCHANNEL_H
+
+#include
+
+#include "export.h"
+#include "dsp/dsptypes.h"
+#include "util/messagequeue.h"
+#include "util/message.h"
+
+
+class SDRBASE_API MIMOChannel : public QObject {
+ Q_OBJECT
+public:
+ MIMOChannel();
+ virtual ~MIMOChannel();
+
+ virtual void start() = 0;
+ virtual void stop() = 0;
+ virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, unsigned int sinkIndex) = 0;
+ virtual void pull(Sample& sample, unsigned int sourceIndex) = 0;
+ virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
+
+ MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
+
+protected:
+ MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
+
+protected slots:
+ void handleInputMessages();
+};
+
+#endif // SDRBASE_MIMOCHANNEL_H
\ No newline at end of file
diff --git a/sdrbase/plugin/plugininterface.h b/sdrbase/plugin/plugininterface.h
index 5f9337905..c94cd20b8 100644
--- a/sdrbase/plugin/plugininterface.h
+++ b/sdrbase/plugin/plugininterface.h
@@ -26,7 +26,7 @@ class DeviceSampleSink;
class DeviceSampleMIMO;
class BasebandSampleSink;
class BasebandSampleSource;
-class MIMOSampleSink;
+class MIMOChannel;
class ChannelAPI;
class ChannelWebAPIAdapter;
class DeviceWebAPIAdapter;
@@ -137,14 +137,14 @@ public:
virtual PluginInstanceGUI* createMIMOChannelGUI(
DeviceUISet *deviceUISet,
- MIMOSampleSink *mimoChannel) const
+ MIMOChannel *mimoChannel) const
{
(void) deviceUISet;
(void) mimoChannel;
return nullptr;
}
- virtual MIMOSampleSink* createMIMOChannelBS(DeviceAPI *deviceAPI) const
+ virtual MIMOChannel* createMIMOChannelBS(DeviceAPI *deviceAPI) const
{
(void) deviceAPI;
return nullptr;
diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp
index e04718162..ceafcbe98 100644
--- a/sdrbase/plugin/pluginmanager.cpp
+++ b/sdrbase/plugin/pluginmanager.cpp
@@ -263,7 +263,7 @@ void PluginManager::createMIMOChannelInstance(int channelPluginIndex, DeviceUISe
if (channelPluginIndex < m_mimoChannelRegistrations.size())
{
PluginInterface *pluginInterface = m_mimoChannelRegistrations[channelPluginIndex].m_plugin;
- MIMOSampleSink *mimoChannel = pluginInterface->createMIMOChannelBS(deviceAPI);
+ MIMOChannel *mimoChannel = pluginInterface->createMIMOChannelBS(deviceAPI);
pluginInterface->createMIMOChannelGUI(deviceUISet, mimoChannel);
}
}