From 8b5e71a1cce4b0ee1ee9c6fae3c40a22e7b04755 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 2 Sep 2019 18:36:56 +0200 Subject: [PATCH] MIMO channels: added methods to the plugin system --- sdrbase/plugin/pluginapi.cpp | 30 ++++++++++++++++++++---------- sdrbase/plugin/pluginapi.h | 4 ++++ sdrbase/plugin/plugininterface.h | 24 ++++++++++++++++++++++++ sdrbase/plugin/pluginmanager.cpp | 30 ++++++++++++++++++++++++++++++ sdrbase/plugin/pluginmanager.h | 17 +++++++++++------ 5 files changed, 89 insertions(+), 16 deletions(-) diff --git a/sdrbase/plugin/pluginapi.cpp b/sdrbase/plugin/pluginapi.cpp index 963d00ae2..5a939b1c9 100644 --- a/sdrbase/plugin/pluginapi.cpp +++ b/sdrbase/plugin/pluginapi.cpp @@ -6,11 +6,6 @@ void PluginAPI::registerRxChannel(const QString& channelIdURI, const QString& ch m_pluginManager->registerRxChannel(channelIdURI, channelId, plugin); } -void PluginAPI::registerSampleSource(const QString& sourceName, PluginInterface* plugin) -{ - m_pluginManager->registerSampleSource(sourceName, plugin); -} - PluginAPI::ChannelRegistrations *PluginAPI::getRxChannelRegistrations() { return m_pluginManager->getRxChannelRegistrations(); @@ -21,6 +16,26 @@ void PluginAPI::registerTxChannel(const QString& channelIdURI, const QString& ch m_pluginManager->registerTxChannel(channelIdURI, channelId, plugin); } +PluginAPI::ChannelRegistrations *PluginAPI::getTxChannelRegistrations() +{ + return m_pluginManager->getTxChannelRegistrations(); +} + +void PluginAPI::registerMIMOChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin) +{ + m_pluginManager->registerMIMOChannel(channelIdURI, channelId, plugin); +} + +PluginAPI::ChannelRegistrations *PluginAPI::getMIMOChannelRegistrations() +{ + return m_pluginManager->getMIMOChannelRegistrations(); +} + +void PluginAPI::registerSampleSource(const QString& sourceName, PluginInterface* plugin) +{ + m_pluginManager->registerSampleSource(sourceName, plugin); +} + void PluginAPI::registerSampleSink(const QString& sinkName, PluginInterface* plugin) { m_pluginManager->registerSampleSink(sinkName, plugin); @@ -31,11 +46,6 @@ void PluginAPI::registerSampleMIMO(const QString& mimoName, PluginInterface* plu m_pluginManager->registerSampleMIMO(mimoName, plugin); } -PluginAPI::ChannelRegistrations *PluginAPI::getTxChannelRegistrations() -{ - return m_pluginManager->getTxChannelRegistrations(); -} - PluginAPI::PluginAPI(PluginManager* pluginManager) : m_pluginManager(pluginManager) { diff --git a/sdrbase/plugin/pluginapi.h b/sdrbase/plugin/pluginapi.h index b4d1090fb..3e6ccb13d 100644 --- a/sdrbase/plugin/pluginapi.h +++ b/sdrbase/plugin/pluginapi.h @@ -51,6 +51,10 @@ public: void registerTxChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin); ChannelRegistrations *getTxChannelRegistrations(); + // MIMO Channel stuff + void registerMIMOChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin); + ChannelRegistrations *getMIMOChannelRegistrations(); + // Sample Source stuff void registerSampleSource(const QString& sourceName, PluginInterface* plugin); diff --git a/sdrbase/plugin/plugininterface.h b/sdrbase/plugin/plugininterface.h index 36c4a0a4a..5f9337905 100644 --- a/sdrbase/plugin/plugininterface.h +++ b/sdrbase/plugin/plugininterface.h @@ -26,6 +26,7 @@ class DeviceSampleSink; class DeviceSampleMIMO; class BasebandSampleSink; class BasebandSampleSource; +class MIMOSampleSink; class ChannelAPI; class ChannelWebAPIAdapter; class DeviceWebAPIAdapter; @@ -132,6 +133,29 @@ public: return nullptr; } + // channel MIMO plugins + + virtual PluginInstanceGUI* createMIMOChannelGUI( + DeviceUISet *deviceUISet, + MIMOSampleSink *mimoChannel) const + { + (void) deviceUISet; + (void) mimoChannel; + return nullptr; + } + + virtual MIMOSampleSink* createMIMOChannelBS(DeviceAPI *deviceAPI) const + { + (void) deviceAPI; + return nullptr; + } + + virtual ChannelAPI* createMIMOChannelCS(DeviceAPI *deviceAPI) const + { + (void) deviceAPI; + return nullptr; + } + // any channel virtual ChannelWebAPIAdapter* createChannelWebAPIAdapter() const diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index 8b308a883..e04718162 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -135,6 +135,15 @@ void PluginManager::registerTxChannel(const QString& channelIdURI, const QString m_txChannelRegistrations.append(PluginAPI::ChannelRegistration(channelIdURI, channelId, plugin)); } +void PluginManager::registerMIMOChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin) +{ + qDebug() << "PluginManager::registerMIMOChannel " + << plugin->getPluginDescriptor().displayedName.toStdString().c_str() + << " with channel name " << channelIdURI; + + m_mimoChannelRegistrations.append(PluginAPI::ChannelRegistration(channelIdURI, channelId, plugin)); +} + void PluginManager::registerSampleSource(const QString& sourceName, PluginInterface* plugin) { qDebug() << "PluginManager::registerSampleSource " @@ -218,6 +227,17 @@ void PluginManager::listRxChannels(QList& list) } } +void PluginManager::listMIMOChannels(QList& list) +{ + list.clear(); + + for (PluginAPI::ChannelRegistrations::iterator it = m_mimoChannelRegistrations.begin(); it != m_mimoChannelRegistrations.end(); ++it) + { + const PluginDescriptor& pluginDesciptor = it->m_plugin->getPluginDescriptor(); + list.append(pluginDesciptor.displayedName); + } +} + void PluginManager::createRxChannelInstance(int channelPluginIndex, DeviceUISet *deviceUISet, DeviceAPI *deviceAPI) { if (channelPluginIndex < m_rxChannelRegistrations.size()) @@ -238,6 +258,16 @@ void PluginManager::createTxChannelInstance(int channelPluginIndex, DeviceUISet } } +void PluginManager::createMIMOChannelInstance(int channelPluginIndex, DeviceUISet *deviceUISet, DeviceAPI *deviceAPI) +{ + if (channelPluginIndex < m_mimoChannelRegistrations.size()) + { + PluginInterface *pluginInterface = m_mimoChannelRegistrations[channelPluginIndex].m_plugin; + MIMOSampleSink *mimoChannel = pluginInterface->createMIMOChannelBS(deviceAPI); + pluginInterface->createMIMOChannelGUI(deviceUISet, mimoChannel); + } +} + const PluginInterface *PluginManager::getChannelPluginInterface(const QString& channelIdURI) const { for (PluginAPI::ChannelRegistrations::const_iterator it = m_rxChannelRegistrations.begin(); it != m_rxChannelRegistrations.end(); ++it) diff --git a/sdrbase/plugin/pluginmanager.h b/sdrbase/plugin/pluginmanager.h index 77deb7ad0..cb935e045 100644 --- a/sdrbase/plugin/pluginmanager.h +++ b/sdrbase/plugin/pluginmanager.h @@ -63,8 +63,9 @@ public: // Callbacks from the plugins void registerRxChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin); - void registerSampleSource(const QString& sourceName, PluginInterface* plugin); void registerTxChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin); + void registerMIMOChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin); + void registerSampleSource(const QString& sourceName, PluginInterface* plugin); void registerSampleSink(const QString& sinkName, PluginInterface* plugin); void registerSampleMIMO(const QString& mimoName, PluginInterface* plugin); @@ -73,6 +74,7 @@ public: PluginAPI::SamplingDeviceRegistrations& getMIMODeviceRegistrations() { return m_sampleMIMORegistrations; } PluginAPI::ChannelRegistrations *getRxChannelRegistrations() { return &m_rxChannelRegistrations; } PluginAPI::ChannelRegistrations *getTxChannelRegistrations() { return &m_txChannelRegistrations; } + PluginAPI::ChannelRegistrations *getMIMOChannelRegistrations() { return &m_mimoChannelRegistrations; } void createRxChannelInstance(int channelPluginIndex, DeviceUISet *deviceUISet, DeviceAPI *deviceAPI); void listRxChannels(QList& list); @@ -80,6 +82,9 @@ public: void createTxChannelInstance(int channelPluginIndex, DeviceUISet *deviceUISet, DeviceAPI *deviceAPI); void listTxChannels(QList& list); + void createMIMOChannelInstance(int channelPluginIndex, DeviceUISet *deviceUISet, DeviceAPI *deviceAPI); + void listMIMOChannels(QList& list); + const PluginInterface *getChannelPluginInterface(const QString& channelIdURI) const; const PluginInterface *getDevicePluginInterface(const QString& deviceId) const; @@ -117,12 +122,12 @@ private: Plugins m_plugins; PluginAPI::ChannelRegistrations m_rxChannelRegistrations; //!< Channel plugins register here + PluginAPI::ChannelRegistrations m_txChannelRegistrations; //!< Channel plugins register here + PluginAPI::ChannelRegistrations m_mimoChannelRegistrations; //!< Channel plugins register here + PluginAPI::SamplingDeviceRegistrations m_sampleSourceRegistrations; //!< Input source plugins (one per device kind) register here - - PluginAPI::ChannelRegistrations m_txChannelRegistrations; //!< Channel plugins register here - PluginAPI::SamplingDeviceRegistrations m_sampleSinkRegistrations; //!< Output sink plugins (one per device kind) register here - - PluginAPI::SamplingDeviceRegistrations m_sampleMIMORegistrations; //!< MIMO sink plugins (one per device kind) register here + PluginAPI::SamplingDeviceRegistrations m_sampleSinkRegistrations; //!< Output sink plugins (one per device kind) register here + PluginAPI::SamplingDeviceRegistrations m_sampleMIMORegistrations; //!< MIMO sink plugins (one per device kind) register here // "Local" sample source device IDs static const QString m_localInputHardwareID; //!< Local input hardware ID