mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-20 20:06:57 -04:00
Multi device support: add channels from device control working concept
This commit is contained in:
parent
117f636f1f
commit
58709e0bae
@ -30,25 +30,23 @@ void AMPlugin::initPlugin(PluginAPI* pluginAPI)
|
|||||||
|
|
||||||
// register AM demodulator
|
// register AM demodulator
|
||||||
QAction* action = new QAction(tr("&AM Demodulator"), this);
|
QAction* action = new QAction(tr("&AM Demodulator"), this);
|
||||||
connect(action, SIGNAL(triggered()), this, SLOT(createInstanceAM()));
|
// connect(action, SIGNAL(triggered()), this, SLOT(createInstanceAM()));
|
||||||
m_pluginAPI->registerChannel("de.maintech.sdrangelove.channel.am", this, action);
|
m_pluginAPI->registerChannel("de.maintech.sdrangelove.channel.am", this, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginGUI* AMPlugin::createChannel(const QString& channelName)
|
PluginGUI* AMPlugin::createChannel(const QString& channelName)
|
||||||
{
|
{
|
||||||
if(channelName == "de.maintech.sdrangelove.channel.am") {
|
if(channelName == "de.maintech.sdrangelove.channel.am") {
|
||||||
AMDemodGUI* gui = AMDemodGUI::create(m_pluginAPI);
|
return createInstanceAM();
|
||||||
m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.am", gui);
|
|
||||||
m_pluginAPI->addChannelRollup(gui);
|
|
||||||
return gui;
|
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AMPlugin::createInstanceAM()
|
PluginGUI* AMPlugin::createInstanceAM()
|
||||||
{
|
{
|
||||||
AMDemodGUI* gui = AMDemodGUI::create(m_pluginAPI);
|
AMDemodGUI* gui = AMDemodGUI::create(m_pluginAPI);
|
||||||
m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.am", gui);
|
m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.am", gui);
|
||||||
m_pluginAPI->addChannelRollup(gui);
|
m_pluginAPI->addChannelRollup(gui);
|
||||||
|
return gui;
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,7 @@ private:
|
|||||||
static const PluginDescriptor m_pluginDescriptor;
|
static const PluginDescriptor m_pluginDescriptor;
|
||||||
|
|
||||||
PluginAPI* m_pluginAPI;
|
PluginAPI* m_pluginAPI;
|
||||||
|
PluginGUI* createInstanceAM();
|
||||||
private slots:
|
|
||||||
void createInstanceAM();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INCLUDE_AMPLUGIN_H
|
#endif // INCLUDE_AMPLUGIN_H
|
||||||
|
@ -38,6 +38,14 @@ QComboBox *SamplingDeviceControl::getDeviceSelector()
|
|||||||
return ui->deviceSelect;
|
return ui->deviceSelect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SamplingDeviceControl::populateChannelSelector()
|
||||||
|
{
|
||||||
|
if (m_pluginManager)
|
||||||
|
{
|
||||||
|
m_pluginManager->populateChannelComboBox(ui->channelSelect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SamplingDeviceControl::on_showLoadedPlugins_clicked(bool checked)
|
void SamplingDeviceControl::on_showLoadedPlugins_clicked(bool checked)
|
||||||
{
|
{
|
||||||
if (m_pluginManager)
|
if (m_pluginManager)
|
||||||
@ -46,3 +54,12 @@ void SamplingDeviceControl::on_showLoadedPlugins_clicked(bool checked)
|
|||||||
pluginsDialog.exec();
|
pluginsDialog.exec();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SamplingDeviceControl::on_addChannel_clicked(bool checked)
|
||||||
|
{
|
||||||
|
if (m_pluginManager)
|
||||||
|
{
|
||||||
|
m_pluginManager->createChannelInstance(ui->channelSelect->currentIndex());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ public:
|
|||||||
|
|
||||||
void setPluginManager(PluginManager *pluginManager) { m_pluginManager = pluginManager; }
|
void setPluginManager(PluginManager *pluginManager) { m_pluginManager = pluginManager; }
|
||||||
QComboBox *getDeviceSelector();
|
QComboBox *getDeviceSelector();
|
||||||
|
void populateChannelSelector();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::SamplingDeviceControl* ui;
|
Ui::SamplingDeviceControl* ui;
|
||||||
@ -46,6 +47,7 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_showLoadedPlugins_clicked(bool checked);
|
void on_showLoadedPlugins_clicked(bool checked);
|
||||||
|
void on_addChannel_clicked(bool checked);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,9 +191,11 @@ void MainWindow::addDevice()
|
|||||||
|
|
||||||
PluginManager *pluginManager = new PluginManager(this, m_deviceUIs.size()-1, dspDeviceEngine, m_deviceUIs.back()->m_spectrum);
|
PluginManager *pluginManager = new PluginManager(this, m_deviceUIs.size()-1, dspDeviceEngine, m_deviceUIs.back()->m_spectrum);
|
||||||
m_deviceUIs.back()->m_pluginManager = pluginManager;
|
m_deviceUIs.back()->m_pluginManager = pluginManager;
|
||||||
m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(pluginManager);
|
|
||||||
pluginManager->loadPlugins();
|
pluginManager->loadPlugins();
|
||||||
|
|
||||||
|
m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(pluginManager);
|
||||||
|
m_deviceUIs.back()->m_samplingDeviceControl->populateChannelSelector();
|
||||||
|
|
||||||
dspDeviceEngine->addSink(m_deviceUIs.back()->m_spectrumVis);
|
dspDeviceEngine->addSink(m_deviceUIs.back()->m_spectrumVis);
|
||||||
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr);
|
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr);
|
||||||
ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, tabNameCStr);
|
ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, tabNameCStr);
|
||||||
|
@ -519,3 +519,21 @@ void PluginManager::renameChannelInstances()
|
|||||||
m_channelInstanceRegistrations[i].m_gui->setName(QString("%1:%2").arg(m_channelInstanceRegistrations[i].m_channelName).arg(i));
|
m_channelInstanceRegistrations[i].m_gui->setName(QString("%1:%2").arg(m_channelInstanceRegistrations[i].m_channelName).arg(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PluginManager::populateChannelComboBox(QComboBox *channels)
|
||||||
|
{
|
||||||
|
for(ChannelRegistrations::iterator it = m_channelRegistrations.begin(); it != m_channelRegistrations.end(); ++it)
|
||||||
|
{
|
||||||
|
const PluginDescriptor& pluginDescipror = it->m_plugin->getPluginDescriptor();
|
||||||
|
channels->addItem(pluginDescipror.displayedName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluginManager::createChannelInstance(int channelPluginIndex)
|
||||||
|
{
|
||||||
|
if (channelPluginIndex < m_channelRegistrations.size())
|
||||||
|
{
|
||||||
|
PluginInterface *pluginInterface = m_channelRegistrations[channelPluginIndex].m_plugin;
|
||||||
|
pluginInterface->createChannel(m_channelRegistrations[channelPluginIndex].m_channelName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -45,12 +45,13 @@ public:
|
|||||||
void loadPlugins();
|
void loadPlugins();
|
||||||
const Plugins& getPlugins() const { return m_plugins; }
|
const Plugins& getPlugins() const { return m_plugins; }
|
||||||
|
|
||||||
|
// Callbacks from the plugins
|
||||||
void registerChannel(const QString& channelName, PluginInterface* plugin, QAction* action);
|
void registerChannel(const QString& channelName, PluginInterface* plugin, QAction* action);
|
||||||
void registerChannelInstance(const QString& channelName, PluginGUI* pluginGUI);
|
void registerChannelInstance(const QString& channelName, PluginGUI* pluginGUI);
|
||||||
void addChannelRollup(QWidget* pluginGUI);
|
void addChannelRollup(QWidget* pluginGUI);
|
||||||
void removeChannelInstance(PluginGUI* pluginGUI);
|
void removeChannelInstance(PluginGUI* pluginGUI);
|
||||||
|
|
||||||
void registerSampleSource(const QString& sourceName, PluginInterface* plugin);
|
void registerSampleSource(const QString& sourceName, PluginInterface* plugin);
|
||||||
|
|
||||||
void setInputGUI(QWidget* gui);
|
void setInputGUI(QWidget* gui);
|
||||||
|
|
||||||
void addSink(SampleSink* sink);
|
void addSink(SampleSink* sink);
|
||||||
@ -89,6 +90,9 @@ public:
|
|||||||
int selectFirstSampleSource(const QString& sourceId);
|
int selectFirstSampleSource(const QString& sourceId);
|
||||||
int selectSampleSourceBySerialOrSequence(const QString& sourceId, const QString& sourceSerial, int sourceSequence);
|
int selectSampleSourceBySerialOrSequence(const QString& sourceId, const QString& sourceSerial, int sourceSequence);
|
||||||
|
|
||||||
|
void populateChannelComboBox(QComboBox *channels);
|
||||||
|
void createChannelInstance(int channelPluginIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct ChannelRegistration {
|
struct ChannelRegistration {
|
||||||
QString m_channelName;
|
QString m_channelName;
|
||||||
|
Loading…
Reference in New Issue
Block a user