diff --git a/plugins/samplesource/airspy/airspyinput.cpp b/plugins/samplesource/airspy/airspyinput.cpp index 1e7c82610..1ccb89964 100644 --- a/plugins/samplesource/airspy/airspyinput.cpp +++ b/plugins/samplesource/airspy/airspyinput.cpp @@ -147,6 +147,11 @@ bool AirspyInput::openDevice() return true; } +void AirspyInput::init() +{ + applySettings(m_settings, true); +} + bool AirspyInput::start() { QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/samplesource/airspy/airspyinput.h b/plugins/samplesource/airspy/airspyinput.h index 828ae1120..505420d3a 100644 --- a/plugins/samplesource/airspy/airspyinput.h +++ b/plugins/samplesource/airspy/airspyinput.h @@ -94,6 +94,7 @@ public: virtual ~AirspyInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/bladerfinput/bladerfinput.cpp b/plugins/samplesource/bladerfinput/bladerfinput.cpp index 1169e2663..0e1cb3d3d 100644 --- a/plugins/samplesource/bladerfinput/bladerfinput.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinput.cpp @@ -131,6 +131,11 @@ bool BladerfInput::openDevice() return true; } +void BladerfInput::init() +{ + applySettings(m_settings, true); +} + bool BladerfInput::start() { // QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/samplesource/bladerfinput/bladerfinput.h b/plugins/samplesource/bladerfinput/bladerfinput.h index 24ee4286c..f5e42fc66 100644 --- a/plugins/samplesource/bladerfinput/bladerfinput.h +++ b/plugins/samplesource/bladerfinput/bladerfinput.h @@ -97,6 +97,7 @@ public: virtual ~BladerfInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/fcdpro/fcdproinput.cpp b/plugins/samplesource/fcdpro/fcdproinput.cpp index d99beae57..4178782e1 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.cpp +++ b/plugins/samplesource/fcdpro/fcdproinput.cpp @@ -91,6 +91,11 @@ bool FCDProInput::openDevice() return true; } +void FCDProInput::init() +{ + applySettings(m_settings, true); +} + bool FCDProInput::start() { qDebug() << "FCDProInput::start"; diff --git a/plugins/samplesource/fcdpro/fcdproinput.h b/plugins/samplesource/fcdpro/fcdproinput.h index b623e41c7..5571f691c 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.h +++ b/plugins/samplesource/fcdpro/fcdproinput.h @@ -101,6 +101,7 @@ public: virtual ~FCDProInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp index d2b10b074..7673ba2b1 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp @@ -84,6 +84,11 @@ bool FCDProPlusInput::openDevice() return true; } +void FCDProPlusInput::init() +{ + applySettings(m_settings, true); +} + bool FCDProPlusInput::start() { diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.h b/plugins/samplesource/fcdproplus/fcdproplusinput.h index 30b876afa..47974d9eb 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.h +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.h @@ -100,6 +100,7 @@ public: virtual ~FCDProPlusInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/filesource/filesourceinput.cpp b/plugins/samplesource/filesource/filesourceinput.cpp index df5b0d0fd..68f8f8b61 100644 --- a/plugins/samplesource/filesource/filesourceinput.cpp +++ b/plugins/samplesource/filesource/filesourceinput.cpp @@ -121,6 +121,12 @@ void FileSourceInput::seekFileStream(int seekPercentage) } } +void FileSourceInput::init() +{ + DSPSignalNotification *notif = new DSPSignalNotification(m_settings.m_sampleRate, m_settings.m_centerFrequency); + m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); +} + bool FileSourceInput::start() { QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/samplesource/filesource/filesourceinput.h b/plugins/samplesource/filesource/filesourceinput.h index ea5ed431c..5eae0c85f 100644 --- a/plugins/samplesource/filesource/filesourceinput.h +++ b/plugins/samplesource/filesource/filesourceinput.h @@ -226,6 +226,7 @@ public: virtual ~FileSourceInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index 304f99a22..f28b9459f 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -119,6 +119,11 @@ bool HackRFInput::openDevice() return true; } +void HackRFInput::init() +{ + applySettings(m_settings, true); +} + bool HackRFInput::start() { // QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/samplesource/hackrfinput/hackrfinput.h b/plugins/samplesource/hackrfinput/hackrfinput.h index 3e603fc9a..95023d4a8 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.h +++ b/plugins/samplesource/hackrfinput/hackrfinput.h @@ -114,6 +114,7 @@ public: virtual ~HackRFInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/limesdrinput/limesdrinput.cpp b/plugins/samplesource/limesdrinput/limesdrinput.cpp index f34fe1562..bb70fb895 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinput.cpp @@ -364,6 +364,11 @@ void LimeSDRInput::releaseChannel() m_channelAcquired = false; } +void LimeSDRInput::init() +{ + applySettings(m_settings, true, false); +} + bool LimeSDRInput::start() { if (!m_deviceShared.m_deviceParams->getDevice()) { diff --git a/plugins/samplesource/limesdrinput/limesdrinput.h b/plugins/samplesource/limesdrinput/limesdrinput.h index 42314ef92..8de2d601a 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.h +++ b/plugins/samplesource/limesdrinput/limesdrinput.h @@ -208,6 +208,7 @@ public: virtual ~LimeSDRInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index 518296c83..c6e3aea66 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -68,6 +68,11 @@ void PlutoSDRInput::destroy() delete this; } +void PlutoSDRInput::init() +{ + applySettings(m_settings, true); +} + bool PlutoSDRInput::start() { if (!m_deviceShared.m_deviceParams->getBox()) { diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.h b/plugins/samplesource/plutosdrinput/plutosdrinput.h index 6504418d7..dc57ca898 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.h @@ -96,6 +96,7 @@ public: ~PlutoSDRInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 0accf0e8d..68f9877e2 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -173,6 +173,11 @@ bool RTLSDRInput::openDevice() return true; } +void RTLSDRInput::init() +{ + applySettings(m_settings, true); +} + bool RTLSDRInput::start() { QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h index 54a82d67f..429b84f8e 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.h +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h @@ -95,6 +95,7 @@ public: virtual ~RTLSDRInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp index 5bbb06b5d..6f7fcdf42 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp @@ -77,6 +77,12 @@ void SDRdaemonSourceInput::destroy() delete this; } +void SDRdaemonSourceInput::init() +{ + DSPSignalNotification *notif = new DSPSignalNotification(m_settings.m_sampleRate/(1<getDeviceEngineInputMessageQueue()->push(notif); +} + bool SDRdaemonSourceInput::start() { qDebug() << "SDRdaemonInput::start"; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h index 5fdcb87ff..0992cb84a 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h @@ -326,6 +326,7 @@ public: virtual ~SDRdaemonSourceInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcesettings.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcesettings.cpp index df6172f5d..81da4ca8a 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcesettings.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcesettings.cpp @@ -26,7 +26,7 @@ void SDRdaemonSourceSettings::resetToDefaults() { m_centerFrequency = 435000*1000; m_sampleRate = 256000; - m_log2Decim = 4; + m_log2Decim = 1; m_txDelay = 0.5; m_nbFECBlocks = 0; m_address = "127.0.0.1"; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp index 66bcf3be7..95294e6bd 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp @@ -34,6 +34,7 @@ SDRdaemonSourceUDPHandler::SDRdaemonSourceUDPHandler(SampleSinkFifo *sampleFifo, m_remoteAddress(QHostAddress::LocalHost), m_dataPort(9090), m_dataConnected(false), + m_startInit(true), m_udpBuf(0), m_udpReadBytes(0), m_sampleFifo(sampleFifo), @@ -92,8 +93,8 @@ void SDRdaemonSourceUDPHandler::start() } } - // Need to notify the DSP engine to actually start - DSPSignalNotification *notif = new DSPSignalNotification(m_samplerate, m_centerFrequency * 1000); // Frequency in Hz for the DSP engine + // Need to notify the DSP engine to actually start FIXME: may cause transient confusion because at this point sample rate and frequency are unknown + DSPSignalNotification *notif = new DSPSignalNotification(128000, 435000 * 1000); // Frequency in Hz for the DSP engine m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); m_elapsedTimer.start(); } @@ -113,6 +114,8 @@ void SDRdaemonSourceUDPHandler::stop() delete m_dataSocket; m_dataSocket = 0; } + + m_startInit = true; } void SDRdaemonSourceUDPHandler::configureUDPLink(const QString& address, quint16 port) @@ -170,17 +173,23 @@ void SDRdaemonSourceUDPHandler::processData() change = true; } - if (change) + if (change || m_startInit) { - DSPSignalNotification *notif = new DSPSignalNotification(m_samplerate, m_centerFrequency * 1000); // Frequency in Hz for the DSP engine - m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); - SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData *report = SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData::create( - m_samplerate, - m_centerFrequency * 1000, // Frequency in Hz for the GUI - m_tv_sec, - m_tv_usec); + qDebug("SDRdaemonSourceUDPHandler::processData: m_samplerate: %u m_centerFrequency: %u kHz", m_samplerate, m_centerFrequency); - m_outputMessageQueueToGUI->push(report); + if (m_samplerate != 0) + { + DSPSignalNotification *notif = new DSPSignalNotification(m_samplerate, m_centerFrequency * 1000); // Frequency in Hz for the DSP engine + m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); + SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData *report = SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData::create( + m_samplerate, + m_centerFrequency * 1000, // Frequency in Hz for the GUI + m_tv_sec, + m_tv_usec); + + m_outputMessageQueueToGUI->push(report); + m_startInit = false; + } } } diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h index 2ef6bd05e..428402d2a 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h @@ -56,6 +56,7 @@ private: QHostAddress m_remoteAddress; quint16 m_dataPort; bool m_dataConnected; + bool m_startInit; char *m_udpBuf; qint64 m_udpReadBytes; SampleSinkFifo *m_sampleFifo; diff --git a/plugins/samplesource/sdrplay/sdrplayinput.cpp b/plugins/samplesource/sdrplay/sdrplayinput.cpp index 0f01613c4..be92a2cf5 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.cpp +++ b/plugins/samplesource/sdrplay/sdrplayinput.cpp @@ -198,6 +198,11 @@ void SDRPlayInput::closeDevice() m_deviceDescription.clear(); } +void SDRPlayInput::init() +{ + applySettings(m_settings, true, true); +} + void SDRPlayInput::stop() { // QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/samplesource/sdrplay/sdrplayinput.h b/plugins/samplesource/sdrplay/sdrplayinput.h index f1b90e98b..996bba94a 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.h +++ b/plugins/samplesource/sdrplay/sdrplayinput.h @@ -132,6 +132,7 @@ public: virtual ~SDRPlayInput(); virtual void destroy(); + virtual void init(); virtual bool start(); virtual void stop(); diff --git a/sdrbase/dsp/devicesamplesource.h b/sdrbase/dsp/devicesamplesource.h index 88971024b..6ba02ca33 100644 --- a/sdrbase/dsp/devicesamplesource.h +++ b/sdrbase/dsp/devicesamplesource.h @@ -38,6 +38,7 @@ public: virtual ~DeviceSampleSource(); virtual void destroy() = 0; + virtual void init() = 0; //!< initializations to be done when all collaborating objects are created and possibly connected virtual bool start() = 0; virtual void stop() = 0; diff --git a/sdrbase/dsp/dspdevicesinkengine.cpp b/sdrbase/dsp/dspdevicesinkengine.cpp index a6384289a..94acf810e 100644 --- a/sdrbase/dsp/dspdevicesinkengine.cpp +++ b/sdrbase/dsp/dspdevicesinkengine.cpp @@ -365,8 +365,6 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoIdle() DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoInit() { - qDebug() << "DSPDeviceSinkEngine::gotoInit"; - switch(m_state) { case StNotStarted: return StNotStarted; @@ -393,7 +391,8 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoInit() m_centerFrequency = m_deviceSampleSink->getCenterFrequency(); m_sampleRate = m_deviceSampleSink->getSampleRate(); - qDebug() << "DSPDeviceSinkEngine::gotoInit: " << m_deviceDescription.toStdString().c_str() << ": " + qDebug() << "DSPDeviceSinkEngine::gotoInit: " + << " m_deviceDescription: " << m_deviceDescription.toStdString().c_str() << " sampleRate: " << m_sampleRate << " centerFrequency: " << m_centerFrequency; diff --git a/sdrbase/dsp/dspdevicesourceengine.cpp b/sdrbase/dsp/dspdevicesourceengine.cpp index 14c9d2f75..c8c9aeff5 100644 --- a/sdrbase/dsp/dspdevicesourceengine.cpp +++ b/sdrbase/dsp/dspdevicesourceengine.cpp @@ -365,8 +365,6 @@ DSPDeviceSourceEngine::State DSPDeviceSourceEngine::gotoIdle() DSPDeviceSourceEngine::State DSPDeviceSourceEngine::gotoInit() { - qDebug() << "DSPDeviceSourceEngine::gotoInit"; - switch(m_state) { case StNotStarted: return StNotStarted; @@ -398,7 +396,8 @@ DSPDeviceSourceEngine::State DSPDeviceSourceEngine::gotoInit() m_centerFrequency = m_deviceSampleSource->getCenterFrequency(); m_sampleRate = m_deviceSampleSource->getSampleRate(); - qDebug() << "DSPDeviceSourceEngine::gotoInit: " << m_deviceDescription.toStdString().c_str() << ": " + qDebug() << "DSPDeviceSourceEngine::gotoInit: " + << " m_deviceDescription: " << m_deviceDescription.toStdString().c_str() << " sampleRate: " << m_sampleRate << " centerFrequency: " << m_centerFrequency; @@ -651,6 +650,7 @@ void DSPDeviceSourceEngine::handleInputMessages() // forward changes to source GUI input queue MessageQueue *guiMessageQueue = m_deviceSampleSource->getMessageQueueToGUI(); + qDebug("DSPDeviceSourceEngine::handleInputMessages: DSPSignalNotification: guiMessageQueue: %p", guiMessageQueue); if (guiMessageQueue) { DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy for the source GUI diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index ed183f8c9..b34636141 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -144,54 +144,14 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse m_masterTimer.start(50); - qDebug() << "MainWindow::MainWindow: add the first device..."; - - addSourceDevice(); // add the first device - qDebug() << "MainWindow::MainWindow: load settings..."; loadSettings(); - qDebug() << "MainWindow::MainWindow: select SampleSource from settings..."; + qDebug() << "MainWindow::MainWindow: select SampleSource from settings or default (file source) ..."; int deviceIndex = DeviceEnumerator::instance()->getRxSamplingDeviceIndex(m_settings.getSourceDeviceId(), m_settings.getSourceIndex()); - - if (deviceIndex >= 0) - { - // delete previous plugin GUI - m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( - m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); - m_deviceUIs.back()->m_deviceSourceAPI->resetSampleSourceId(); - m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(0); // have source stop sending messages to the GUI - m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceInput( - m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()); - m_deviceUIs.back()->m_deviceSourceAPI->clearBuddiesLists(); // clear old API buddies lists - - m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(deviceIndex); - - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(deviceIndex); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSequence(samplingDevice.sequence); - m_deviceUIs.back()->m_deviceSourceAPI->setNbItems(samplingDevice.deviceItemIndex); - m_deviceUIs.back()->m_deviceSourceAPI->setItemIndex(samplingDevice.deviceItemIndex); - m_deviceUIs.back()->m_deviceSourceAPI->setHardwareId(samplingDevice.hardwareId); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceId(samplingDevice.id); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSerial(samplingDevice.serial); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceDisplayName(samplingDevice.displayedName); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(deviceIndex)); - - DeviceSampleSource *source = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( - m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), m_deviceUIs.back()->m_deviceSourceAPI); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSource(source); - QWidget *gui; - PluginInstanceGUI *pluginGUI = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( - m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), - &gui, - m_deviceUIs.back()); - 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()); - } - + addSourceDevice(deviceIndex); // add the first device set with file source device as default if device in settings is not enumerated m_deviceUIs.back()->m_deviceSourceAPI->setBuddyLeader(true); // the first device is always the leader qDebug() << "MainWindow::MainWindow: load current preset settings..."; @@ -234,7 +194,7 @@ MainWindow::~MainWindow() delete m_logger; } -void MainWindow::addSourceDevice() +void MainWindow::addSourceDevice(int deviceIndex) { DSPDeviceSourceEngine *dspDeviceSourceEngine = m_dspEngine->addDeviceSourceEngine(); dspDeviceSourceEngine->start(); @@ -271,9 +231,12 @@ void MainWindow::addSourceDevice() ui->tabInputsSelect->addTab(m_deviceUIs.back()->m_samplingDeviceControl, tabNameCStr); ui->tabInputsSelect->setTabToolTip(deviceTabIndex, QString(uidCStr)); - // Create a file source instance by default - int fileSourceDeviceIndex = DeviceEnumerator::instance()->getFileSourceDeviceIndex(); - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(fileSourceDeviceIndex); + // Create a file source instance by default if requested device was not enumerated (index = -1) + if (deviceIndex < 0) { + deviceIndex = DeviceEnumerator::instance()->getFileSourceDeviceIndex(); + } + + PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(deviceIndex); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSequence(samplingDevice.sequence); m_deviceUIs.back()->m_deviceSourceAPI->setNbItems(samplingDevice.deviceNbItems); m_deviceUIs.back()->m_deviceSourceAPI->setItemIndex(samplingDevice.deviceItemIndex); @@ -281,9 +244,9 @@ void MainWindow::addSourceDevice() m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceId(samplingDevice.id); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSerial(samplingDevice.serial); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceDisplayName(samplingDevice.displayedName); - m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(fileSourceDeviceIndex)); + m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(deviceIndex)); - m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(fileSourceDeviceIndex); + m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(deviceIndex); // delete previous plugin GUI m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( @@ -300,6 +263,7 @@ void MainWindow::addSourceDevice() m_deviceUIs.back()); m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(pluginGUI->getInputMessageQueue()); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInstanceGUI(pluginGUI); + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()->init(); setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceDisplayName()); } @@ -735,7 +699,7 @@ bool MainWindow::handleMessage(const Message& cmd) if (notif.isTx()) { addSinkDevice(); } else { - addSourceDevice(); + addSourceDevice(-1); // create with file source device by default } return true; @@ -1130,6 +1094,7 @@ void MainWindow::on_sampleSource_changed() deviceUI->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(pluginUI->getInputMessageQueue()); deviceUI->m_deviceSourceAPI->setSampleSourcePluginInstanceGUI(pluginUI); setDeviceGUI(currentSourceTabIndex, gui, deviceUI->m_deviceSourceAPI->getSampleSourceDisplayName()); + deviceUI->m_deviceSourceAPI->getSampleSource()->init(); deviceUI->m_deviceSourceAPI->loadSourceSettings(m_settings.getWorkingPreset()); // load new API settings @@ -1257,7 +1222,7 @@ void MainWindow::on_action_About_triggered() void MainWindow::on_action_addSourceDevice_triggered() { - addSourceDevice(); + addSourceDevice(-1); // create with file source device by default } void MainWindow::on_action_addSinkDevice_triggered() diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index fadb80a4d..698e33649 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -319,7 +319,7 @@ private: QTreeWidgetItem* addPresetToTree(const Preset* preset); void applySettings(); - void addSourceDevice(); + void addSourceDevice(int deviceIndex); void addSinkDevice(); void removeLastDevice(); void deleteChannel(int deviceSetIndex, int channelIndex);