1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-03 13:47:50 -04:00

Multi device support: Main window: created a method to add a new device and associated objects

This commit is contained in:
f4exb 2016-05-13 09:23:33 +02:00
parent 7053d3775c
commit df661cc366
4 changed files with 66 additions and 20 deletions

View File

@ -20,10 +20,11 @@
#include "dsp/dspengine.h" #include "dsp/dspengine.h"
DSPEngine::DSPEngine() : DSPEngine::DSPEngine() :
m_deviceEnginesUIDSequence(0),
m_audioSampleRate(48000), // Use default output device at 48 kHz m_audioSampleRate(48000), // Use default output device at 48 kHz
m_audioUsageCount(0) m_audioUsageCount(0)
{ {
m_deviceEngines.push_back(new DSPDeviceEngine(0)); // TODO: multi device support //m_deviceEngines.push_back(new DSPDeviceEngine(0)); // TODO: multi device support
m_dvSerialSupport = false; m_dvSerialSupport = false;
} }
@ -44,6 +45,23 @@ DSPEngine *DSPEngine::instance()
return dspEngine; return dspEngine;
} }
DSPDeviceEngine *DSPEngine::addDeviceEngine()
{
m_deviceEngines.push_back(new DSPDeviceEngine(m_deviceEnginesUIDSequence));
m_deviceEnginesUIDSequence++;
return m_deviceEngines.back();
}
void DSPEngine::removeLastDeviceEngine()
{
if (m_deviceEngines.size() > 0)
{
DSPDeviceEngine *lastDeviceEngine = m_deviceEngines.back();
delete lastDeviceEngine;
m_deviceEngines.pop_back();
}
}
void DSPEngine::stopAllAcquisitions() void DSPEngine::stopAllAcquisitions()
{ {
std::vector<DSPDeviceEngine*>::iterator it = m_deviceEngines.begin(); std::vector<DSPDeviceEngine*>::iterator it = m_deviceEngines.begin();

View File

@ -40,6 +40,8 @@ public:
uint getAudioSampleRate() const { return m_audioSampleRate; } uint getAudioSampleRate() const { return m_audioSampleRate; }
DSPDeviceEngine *addDeviceEngine();
void removeLastDeviceEngine();
void stopAllAcquisitions(); void stopAllAcquisitions();
void stopAllDeviceEngines(); void stopAllDeviceEngines();
@ -81,6 +83,7 @@ public:
private: private:
std::vector<DSPDeviceEngine*> m_deviceEngines; std::vector<DSPDeviceEngine*> m_deviceEngines;
uint m_deviceEnginesUIDSequence;
AudioOutput m_audioOutput; AudioOutput m_audioOutput;
uint m_audioSampleRate; uint m_audioSampleRate;
bool m_dvSerialSupport; bool m_dvSerialSupport;

View File

@ -102,25 +102,25 @@ MainWindow::MainWindow(QWidget* parent) :
qDebug() << "MainWindow::MainWindow: m_pluginManager->loadPlugins ..."; qDebug() << "MainWindow::MainWindow: m_pluginManager->loadPlugins ...";
// TODO: This will go in a create new device and device tab method: addDevice(); // add the first device
DSPDeviceEngine *dspDeviceEngine = m_dspEngine->getDeviceEngineByIndex(0); // DSPDeviceEngine *dspDeviceEngine = m_dspEngine->addDeviceEngine();
dspDeviceEngine->start(); // dspDeviceEngine->start();
//
m_deviceUIs.push_back(new DeviceUISet(m_masterTimer)); // m_deviceUIs.push_back(new DeviceUISet(m_masterTimer));
//
m_pluginManager = new PluginManager(this, dspDeviceEngine, m_deviceUIs.back()->m_spectrum); // m_pluginManager = new PluginManager(this, dspDeviceEngine, m_deviceUIs.back()->m_spectrum);
m_pluginManager->loadPlugins(); // m_pluginManager->loadPlugins();
//
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, "X0"); // ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, "X0");
ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, "X0"); // ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, "X0");
dspDeviceEngine->addSink(m_deviceUIs.back()->m_spectrumVis); // dspDeviceEngine->addSink(m_deviceUIs.back()->m_spectrumVis);
ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, "X0"); // ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, "X0");
bool sampleSourceSignalsBlocked = m_deviceUIs.back()->m_sampleSource->blockSignals(true); // bool sampleSourceSignalsBlocked = m_deviceUIs.back()->m_sampleSource->blockSignals(true);
m_pluginManager->fillSampleSourceSelector(m_deviceUIs.back()->m_sampleSource); // m_pluginManager->fillSampleSourceSelector(m_deviceUIs.back()->m_sampleSource);
connect(m_deviceUIs.back()->m_sampleSource, SIGNAL(currentIndexChanged(int)), this, SLOT(on_sampleSource_currentIndexChanged(int))); // connect(m_deviceUIs.back()->m_sampleSource, SIGNAL(currentIndexChanged(int)), this, SLOT(on_sampleSource_currentIndexChanged(int)));
m_deviceUIs.back()->m_sampleSource->blockSignals(sampleSourceSignalsBlocked); // m_deviceUIs.back()->m_sampleSource->blockSignals(sampleSourceSignalsBlocked);
ui->tabInputs->addTab(m_deviceUIs.back()->m_sampleSource, "X0"); // ui->tabInputs->addTab(m_deviceUIs.back()->m_sampleSource, "X0");
qDebug() << "MainWindow::MainWindow: loadSettings..."; qDebug() << "MainWindow::MainWindow: loadSettings...";
@ -180,6 +180,30 @@ MainWindow::~MainWindow()
delete ui; delete ui;
} }
void MainWindow::addDevice()
{
DSPDeviceEngine *dspDeviceEngine = m_dspEngine->addDeviceEngine();
dspDeviceEngine->start();
char tabNameCStr[16];
sprintf(tabNameCStr, "R%d", dspDeviceEngine->getUID());
m_deviceUIs.push_back(new DeviceUISet(m_masterTimer));
m_pluginManager = new PluginManager(this, dspDeviceEngine, m_deviceUIs.back()->m_spectrum);
m_pluginManager->loadPlugins();
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr);
ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, tabNameCStr);
dspDeviceEngine->addSink(m_deviceUIs.back()->m_spectrumVis);
ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, tabNameCStr);
bool sampleSourceSignalsBlocked = m_deviceUIs.back()->m_sampleSource->blockSignals(true);
m_pluginManager->fillSampleSourceSelector(m_deviceUIs.back()->m_sampleSource);
connect(m_deviceUIs.back()->m_sampleSource, SIGNAL(currentIndexChanged(int)), this, SLOT(on_sampleSource_currentIndexChanged(int)));
m_deviceUIs.back()->m_sampleSource->blockSignals(sampleSourceSignalsBlocked);
ui->tabInputs->addTab(m_deviceUIs.back()->m_sampleSource, tabNameCStr);
}
void MainWindow::addChannelCreateAction(QAction* action) void MainWindow::addChannelCreateAction(QAction* action)
{ {
ui->menu_Channels->addAction(action); ui->menu_Channels->addAction(action);

View File

@ -126,7 +126,8 @@ private:
QTreeWidgetItem* addPresetToTree(const Preset* preset); QTreeWidgetItem* addPresetToTree(const Preset* preset);
void applySettings(); void applySettings();
void createDevice(); void addDevice();
void removeLastDevice();
private slots: private slots:
void handleMessages(); void handleMessages();