1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-05-29 13:32:26 -04:00

Don't stop source if being deleted. For #2315. Send DSPSignalNotification in audio mods for #2336.

This commit is contained in:
srcejon 2024-11-25 17:16:08 +00:00
parent d0cae88ba8
commit a91fa3b760
73 changed files with 228 additions and 166 deletions

View File

@ -88,7 +88,7 @@ ChannelAnalyzer::~ChannelAnalyzer()
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -103,7 +103,7 @@ void ChannelAnalyzer::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -84,7 +84,7 @@ ChannelPower::~ChannelPower()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -98,7 +98,7 @@ void ChannelPower::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -104,7 +104,7 @@ ADSBDemod::~ADSBDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
delete m_basebandSink; // This results in a call to ADSBDemod::stop(), so need to delete before worker and thread delete m_basebandSink; // This results in a call to ADSBDemod::stop(), so need to delete before worker and thread
delete m_worker; delete m_worker;
delete m_thread; delete m_thread;
@ -115,7 +115,7 @@ void ADSBDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -85,7 +85,7 @@ AISDemod::~AISDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -99,7 +99,7 @@ void AISDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -91,7 +91,7 @@ AMDemod::~AMDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -100,7 +100,7 @@ void AMDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -95,7 +95,7 @@ APTDemod::~APTDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_imageWorker->isRunning()) { if (m_imageWorker->isRunning()) {
stopImageWorker(); stopImageWorker();
@ -115,7 +115,7 @@ void APTDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -67,7 +67,7 @@ ATVDemod::~ATVDemod()
{ {
qDebug("ATVDemod::~ATVDemod"); qDebug("ATVDemod::~ATVDemod");
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -81,7 +81,7 @@ void ATVDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -89,7 +89,7 @@ BFMDemod::~BFMDemod()
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -98,7 +98,7 @@ void BFMDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -97,7 +97,7 @@ ChirpChatDemod::~ChirpChatDemod()
{ {
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -106,7 +106,7 @@ void ChirpChatDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -100,7 +100,7 @@ DABDemod::~DABDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -114,7 +114,7 @@ void DABDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -84,7 +84,7 @@ DATVDemod::~DATVDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -98,7 +98,7 @@ void DATVDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -89,7 +89,7 @@ DSCDemod::~DSCDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -103,7 +103,7 @@ void DSCDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -113,7 +113,7 @@ DSDDemod::~DSDDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -123,7 +123,7 @@ void DSDDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -84,7 +84,7 @@ EndOfTrainDemod::~EndOfTrainDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -98,7 +98,7 @@ void EndOfTrainDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -88,7 +88,7 @@ FreeDVDemod::~FreeDVDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
delete m_basebandSink; delete m_basebandSink;
delete m_thread; delete m_thread;
} }
@ -98,7 +98,7 @@ void FreeDVDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -94,7 +94,7 @@ FT8Demod::~FT8Demod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -104,7 +104,7 @@ void FT8Demod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -97,7 +97,7 @@ ILSDemod::~ILSDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -111,7 +111,7 @@ void ILSDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -94,7 +94,7 @@ M17Demod::~M17Demod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -103,7 +103,7 @@ void M17Demod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -89,7 +89,7 @@ NavtexDemod::~NavtexDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -103,7 +103,7 @@ void NavtexDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -90,7 +90,7 @@ NFMDemod::~NFMDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -100,7 +100,7 @@ void NFMDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -88,7 +88,7 @@ PacketDemod::~PacketDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -102,7 +102,7 @@ void PacketDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -83,7 +83,7 @@ PagerDemod::~PagerDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -97,7 +97,7 @@ void PagerDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -84,7 +84,7 @@ RadiosondeDemod::~RadiosondeDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -98,7 +98,7 @@ void RadiosondeDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -89,7 +89,7 @@ RttyDemod::~RttyDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -103,7 +103,7 @@ void RttyDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -92,7 +92,7 @@ SSBDemod::~SSBDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -102,7 +102,7 @@ void SSBDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -91,7 +91,7 @@ VORDemod::~VORDemod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -100,7 +100,7 @@ void VORDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -85,7 +85,7 @@ VORDemodMC::~VORDemodMC()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -99,7 +99,7 @@ void VORDemodMC::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -92,7 +92,7 @@ WFMDemod::~WFMDemod()
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -101,7 +101,7 @@ void WFMDemod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -95,7 +95,7 @@ FileSink::~FileSink()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -105,7 +105,7 @@ void FileSink::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -112,7 +112,7 @@ FreqScanner::~FreqScanner()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -122,7 +122,7 @@ void FreqScanner::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -91,7 +91,7 @@ FreqTracker::~FreqTracker()
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -100,7 +100,7 @@ void FreqTracker::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -82,7 +82,7 @@ HeatMap::~HeatMap()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -96,7 +96,7 @@ void HeatMap::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -104,7 +104,7 @@ LocalSink::~LocalSink()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stopProcessing(); stopProcessing();
} }
@ -113,7 +113,7 @@ void LocalSink::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this ,false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -98,7 +98,7 @@ NoiseFigure::~NoiseFigure()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -112,7 +112,7 @@ void NoiseFigure::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -153,7 +153,7 @@ RadioAstronomy::~RadioAstronomy()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if ((m_basebandSink->isRunning()) || (m_worker->isRunning())) { if ((m_basebandSink->isRunning()) || (m_worker->isRunning())) {
stop(); stop();
@ -168,7 +168,7 @@ void RadioAstronomy::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -87,7 +87,7 @@ RadioClock::~RadioClock()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
if (m_basebandSink->isRunning()) { if (m_basebandSink->isRunning()) {
stop(); stop();
@ -101,7 +101,7 @@ void RadioClock::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -91,7 +91,7 @@ RemoteSink::~RemoteSink()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -100,7 +100,7 @@ void RemoteSink::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -108,7 +108,7 @@ RemoteTCPSink::~RemoteTCPSink()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
m_basebandSink->deleteLater(); m_basebandSink->deleteLater();
} }
@ -118,7 +118,7 @@ void RemoteTCPSink::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -94,7 +94,7 @@ SigMFFileSink::~SigMFFileSink()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
stop(); stop();
} }
@ -104,7 +104,7 @@ void SigMFFileSink::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -81,6 +81,7 @@ UDPSink::UDPSink(DeviceAPI *deviceAPI) :
UDPSink::~UDPSink() UDPSink::~UDPSink()
{ {
stop();
QObject::disconnect( QObject::disconnect(
m_networkManager, m_networkManager,
&QNetworkAccessManager::finished, &QNetworkAccessManager::finished,
@ -89,7 +90,7 @@ UDPSink::~UDPSink()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
delete m_basebandSink; delete m_basebandSink;
delete m_thread; delete m_thread;
} }
@ -99,7 +100,7 @@ void UDPSink::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -93,7 +93,7 @@ WDSPRx::~WDSPRx()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, true);
WDSPRx::stop(); WDSPRx::stop();
qDebug("WDSPRx::~WDSPRx: emd"); qDebug("WDSPRx::~WDSPRx: emd");
@ -104,7 +104,7 @@ void WDSPRx::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this); m_deviceAPI->removeChannelSink(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);

View File

@ -86,7 +86,8 @@ FileSource::~FileSource()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -96,7 +97,7 @@ void FileSource::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -262,7 +263,7 @@ void FileSource::applySettings(const FileSourceSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -80,7 +80,8 @@ LocalSource::~LocalSource()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -90,7 +91,7 @@ void LocalSource::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -307,7 +308,7 @@ void LocalSource::applySettings(const LocalSourceSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -89,7 +89,8 @@ IEEE_802_15_4_Mod::~IEEE_802_15_4_Mod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -99,7 +100,7 @@ void IEEE_802_15_4_Mod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -371,7 +372,7 @@ void IEEE_802_15_4_Mod::applySettings(const IEEE_802_15_4_ModSettings& settings,
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -92,7 +92,8 @@ AISMod::~AISMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -102,7 +103,7 @@ void AISMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -458,7 +459,7 @@ void AISMod::applySettings(const AISModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -55,7 +55,9 @@ const char* const AMMod::m_channelId ="AMMod";
AMMod::AMMod(DeviceAPI *deviceAPI) : AMMod::AMMod(DeviceAPI *deviceAPI) :
ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource), ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource),
m_deviceAPI(deviceAPI) m_deviceAPI(deviceAPI),
m_basebandSampleRate(0),
m_centerFrequency(0)
{ {
setObjectName(m_channelId); setObjectName(m_channelId);
applySettings(m_settings, true); applySettings(m_settings, true);
@ -82,9 +84,8 @@ AMMod::~AMMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
AMMod::stop();
} }
void AMMod::setDeviceAPI(DeviceAPI *deviceAPI) void AMMod::setDeviceAPI(DeviceAPI *deviceAPI)
@ -92,7 +93,7 @@ void AMMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -134,6 +135,9 @@ void AMMod::start()
m_thread->start(); m_thread->start();
DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency);
m_basebandSource->getInputMessageQueue()->push(dspMsg);
AMModBaseband::MsgConfigureAMModBaseband *msg = AMModBaseband::MsgConfigureAMModBaseband::create(m_settings, true); AMModBaseband::MsgConfigureAMModBaseband *msg = AMModBaseband::MsgConfigureAMModBaseband::create(m_settings, true);
m_basebandSource->getInputMessageQueue()->push(msg); m_basebandSource->getInputMessageQueue()->push(msg);
@ -237,6 +241,9 @@ bool AMMod::handleMessage(const Message& cmd)
// Forward to the source // Forward to the source
auto& notif = (const DSPSignalNotification&) cmd; auto& notif = (const DSPSignalNotification&) cmd;
m_centerFrequency = notif.getCenterFrequency();
m_basebandSampleRate = notif.getSampleRate();
if (m_running) { if (m_running) {
m_basebandSource->getInputMessageQueue()->push(new DSPSignalNotification(notif)); m_basebandSource->getInputMessageQueue()->push(new DSPSignalNotification(notif));
} }

View File

@ -254,6 +254,8 @@ private:
bool m_running = false; bool m_running = false;
AMModBaseband* m_basebandSource; AMModBaseband* m_basebandSource;
AMModSettings m_settings; AMModSettings m_settings;
int m_basebandSampleRate;
qint64 m_centerFrequency;
SampleVector m_sampleBuffer; SampleVector m_sampleBuffer;
QRecursiveMutex m_settingsMutex; QRecursiveMutex m_settingsMutex;

View File

@ -29,6 +29,7 @@ const int AMModSource::m_levelNbSamples = 480; // every 10ms
AMModSource::AMModSource() : AMModSource::AMModSource() :
m_audioFifo(12000), m_audioFifo(12000),
m_feedbackAudioSampleRate(48000),
m_feedbackAudioFifo(48000) m_feedbackAudioFifo(48000)
{ {
m_audioFifo.setLabel("AMModSource.m_audioFifo"); m_audioFifo.setLabel("AMModSource.m_audioFifo");

View File

@ -89,7 +89,8 @@ ATVMod::~ATVMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -99,7 +100,7 @@ void ATVMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -342,7 +343,7 @@ void ATVMod::applySettings(const ATVModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -88,7 +88,8 @@ ChirpChatMod::~ChirpChatMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -98,7 +99,7 @@ void ChirpChatMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -338,7 +339,7 @@ void ChirpChatMod::applySettings(const ChirpChatModSettings& settings, bool forc
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -90,7 +90,8 @@ DATVMod::~DATVMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -100,7 +101,7 @@ void DATVMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -306,7 +307,7 @@ void DATVMod::applySettings(const DATVModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -92,7 +92,8 @@ FreeDVMod::~FreeDVMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -102,7 +103,7 @@ void FreeDVMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -313,7 +314,7 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -97,7 +97,8 @@ M17Mod::~M17Mod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -107,7 +108,7 @@ void M17Mod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -329,7 +330,7 @@ void M17Mod::applySettings(const M17ModSettings& settings, const QList<QString>&
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -56,7 +56,9 @@ const char* const NFMMod::m_channelId = "NFMMod";
NFMMod::NFMMod(DeviceAPI *deviceAPI) : NFMMod::NFMMod(DeviceAPI *deviceAPI) :
ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource), ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource),
m_deviceAPI(deviceAPI) m_deviceAPI(deviceAPI),
m_basebandSampleRate(0),
m_centerFrequency(0)
{ {
setObjectName(m_channelId); setObjectName(m_channelId);
@ -84,9 +86,8 @@ NFMMod::~NFMMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
NFMMod::stop();
} }
void NFMMod::setDeviceAPI(DeviceAPI *deviceAPI) void NFMMod::setDeviceAPI(DeviceAPI *deviceAPI)
@ -94,7 +95,7 @@ void NFMMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -135,6 +136,9 @@ void NFMMod::start()
connect(m_basebandSource, SIGNAL(levelChanged(qreal, qreal, int)), m_levelMeter, SLOT(levelChanged(qreal, qreal, int))); connect(m_basebandSource, SIGNAL(levelChanged(qreal, qreal, int)), m_levelMeter, SLOT(levelChanged(qreal, qreal, int)));
} }
DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency);
m_basebandSource->getInputMessageQueue()->push(dspMsg);
NFMModBaseband::MsgConfigureNFMModBaseband *msg = NFMModBaseband::MsgConfigureNFMModBaseband::create(m_settings, true); NFMModBaseband::MsgConfigureNFMModBaseband *msg = NFMModBaseband::MsgConfigureNFMModBaseband::create(m_settings, true);
m_basebandSource->getInputMessageQueue()->push(msg); m_basebandSource->getInputMessageQueue()->push(msg);
@ -266,10 +270,14 @@ bool NFMMod::handleMessage(const Message& cmd)
} }
else if (DSPSignalNotification::match(cmd)) else if (DSPSignalNotification::match(cmd))
{ {
auto& notif = (const DSPSignalNotification&) cmd;
m_centerFrequency = notif.getCenterFrequency();
m_basebandSampleRate = notif.getSampleRate();
// Forward to the source // Forward to the source
if (m_running) if (m_running)
{ {
auto& notif = (const DSPSignalNotification&) cmd;
auto* rep = new DSPSignalNotification(notif); // make a copy auto* rep = new DSPSignalNotification(notif); // make a copy
qDebug() << "NFMMod::handleMessage: DSPSignalNotification"; qDebug() << "NFMMod::handleMessage: DSPSignalNotification";
m_basebandSource->getInputMessageQueue()->push(rep); m_basebandSource->getInputMessageQueue()->push(rep);
@ -410,7 +418,7 @@ void NFMMod::applySettings(const NFMModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -254,6 +254,8 @@ private:
bool m_running = false; bool m_running = false;
NFMModBaseband* m_basebandSource; NFMModBaseband* m_basebandSource;
NFMModSettings m_settings; NFMModSettings m_settings;
int m_basebandSampleRate;
qint64 m_centerFrequency;
SampleVector m_sampleBuffer; SampleVector m_sampleBuffer;
QRecursiveMutex m_settingsMutex; QRecursiveMutex m_settingsMutex;

View File

@ -94,7 +94,8 @@ PacketMod::~PacketMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -104,7 +105,7 @@ void PacketMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -406,7 +407,7 @@ void PacketMod::applySettings(const PacketModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -90,7 +90,8 @@ PSK31::~PSK31()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -100,7 +101,7 @@ void PSK31::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -297,7 +298,7 @@ void PSK31::applySettings(const PSK31Settings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -90,7 +90,8 @@ RttyMod::~RttyMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -100,7 +101,7 @@ void RttyMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -322,7 +323,7 @@ void RttyMod::applySettings(const RttyModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -57,6 +57,8 @@ const char* const SSBMod::m_channelId = "SSBMod";
SSBMod::SSBMod(DeviceAPI *deviceAPI) : SSBMod::SSBMod(DeviceAPI *deviceAPI) :
ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource), ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource),
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_basebandSampleRate(0),
m_centerFrequency(0),
m_spectrumVis(SDR_TX_SCALEF) m_spectrumVis(SDR_TX_SCALEF)
{ {
setObjectName(m_channelId); setObjectName(m_channelId);
@ -92,7 +94,8 @@ SSBMod::~SSBMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -102,7 +105,7 @@ void SSBMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -118,6 +121,10 @@ void SSBMod::start()
qDebug("SSBMod::start"); qDebug("SSBMod::start");
m_basebandSource->reset(); m_basebandSource->reset();
m_thread->start(); m_thread->start();
DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency);
m_basebandSource->getInputMessageQueue()->push(dspMsg);
m_running = true; m_running = true;
} }
@ -210,6 +217,10 @@ bool SSBMod::handleMessage(const Message& cmd)
else if (DSPSignalNotification::match(cmd)) else if (DSPSignalNotification::match(cmd))
{ {
auto& notif = (const DSPSignalNotification&) cmd; auto& notif = (const DSPSignalNotification&) cmd;
m_centerFrequency = notif.getCenterFrequency();
m_basebandSampleRate = notif.getSampleRate();
// Forward to the source // Forward to the source
if (m_running) if (m_running)
{ {
@ -351,7 +362,7 @@ void SSBMod::applySettings(const SSBModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -256,6 +256,8 @@ private:
bool m_running = false; bool m_running = false;
SSBModBaseband* m_basebandSource; SSBModBaseband* m_basebandSource;
SSBModSettings m_settings; SSBModSettings m_settings;
int m_basebandSampleRate;
qint64 m_centerFrequency;
SpectrumVis m_spectrumVis; SpectrumVis m_spectrumVis;
SampleVector m_sampleBuffer; SampleVector m_sampleBuffer;

View File

@ -90,7 +90,8 @@ WFMMod::~WFMMod()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -100,7 +101,7 @@ void WFMMod::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -313,7 +314,7 @@ void WFMMod::applySettings(const WFMModSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -84,7 +84,8 @@ RemoteSource::~RemoteSource()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -94,7 +95,7 @@ void RemoteSource::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -242,7 +243,7 @@ void RemoteSource::applySettings(const RemoteSourceSettings& settings, bool forc
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -78,7 +78,8 @@ UDPSource::~UDPSource()
); );
delete m_networkManager; delete m_networkManager;
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, true);
stop();
delete m_basebandSource; delete m_basebandSource;
delete m_thread; delete m_thread;
} }
@ -88,7 +89,7 @@ void UDPSource::setDeviceAPI(DeviceAPI *deviceAPI)
if (deviceAPI != m_deviceAPI) if (deviceAPI != m_deviceAPI)
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this); m_deviceAPI->removeChannelSource(this, false);
m_deviceAPI = deviceAPI; m_deviceAPI = deviceAPI;
m_deviceAPI->addChannelSource(this); m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -277,7 +278,7 @@ void UDPSource::applySettings(const UDPSourceSettings& settings, bool force)
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
m_deviceAPI->removeChannelSourceAPI(this); m_deviceAPI->removeChannelSourceAPI(this);
m_deviceAPI->removeChannelSource(this, m_settings.m_streamIndex); m_deviceAPI->removeChannelSource(this, false, m_settings.m_streamIndex);
m_deviceAPI->addChannelSource(this, settings.m_streamIndex); m_deviceAPI->addChannelSource(this, settings.m_streamIndex);
m_deviceAPI->addChannelSourceAPI(this); m_deviceAPI->addChannelSourceAPI(this);
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent

View File

@ -83,10 +83,10 @@ void DeviceAPI::addChannelSink(BasebandSampleSink* sink, int streamIndex)
} }
} }
void DeviceAPI::removeChannelSink(BasebandSampleSink* sink, int streamIndex) void DeviceAPI::removeChannelSink(BasebandSampleSink* sink, bool deleting, int streamIndex)
{ {
if (m_deviceSourceEngine) { if (m_deviceSourceEngine) {
m_deviceSourceEngine->removeSink(sink); m_deviceSourceEngine->removeSink(sink, deleting);
} else if (m_deviceMIMOEngine) { } else if (m_deviceMIMOEngine) {
m_deviceMIMOEngine->removeChannelSink(sink, streamIndex); m_deviceMIMOEngine->removeChannelSink(sink, streamIndex);
} }
@ -101,12 +101,12 @@ void DeviceAPI::addChannelSource(BasebandSampleSource* source, int streamIndex)
} }
} }
void DeviceAPI::removeChannelSource(BasebandSampleSource* source, int streamIndex) void DeviceAPI::removeChannelSource(BasebandSampleSource* source, bool deleting, int streamIndex)
{ {
if (m_deviceSinkEngine) { if (m_deviceSinkEngine) {
m_deviceSinkEngine->removeChannelSource(source); m_deviceSinkEngine->removeChannelSource(source, deleting);
} else if (m_deviceMIMOEngine) { } else if (m_deviceMIMOEngine) {
m_deviceMIMOEngine->removeChannelSource(source, streamIndex); m_deviceMIMOEngine->removeChannelSource(source, deleting, streamIndex);
} }
} }

View File

@ -70,9 +70,9 @@ public:
void setSpectrumSinkInput(bool sourceElseSink = true, unsigned int index = 0); //!< Used in the MIMO case to select which stream is used as input to main spectrum void setSpectrumSinkInput(bool sourceElseSink = true, unsigned int index = 0); //!< Used in the MIMO case to select which stream is used as input to main spectrum
void addChannelSink(BasebandSampleSink* sink, int streamIndex = 0); //!< Add a channel sink (Rx) void addChannelSink(BasebandSampleSink* sink, int streamIndex = 0); //!< Add a channel sink (Rx)
void removeChannelSink(BasebandSampleSink* sink, int streamIndex = 0); //!< Remove a channel sink (Rx) void removeChannelSink(BasebandSampleSink* sink, bool deleting, int streamIndex = 0); //!< Remove a channel sink (Rx)
void addChannelSource(BasebandSampleSource* sink, int streamIndex = 0); //!< Add a channel source (Tx) void addChannelSource(BasebandSampleSource* sink, int streamIndex = 0); //!< Add a channel source (Tx)
void removeChannelSource(BasebandSampleSource* sink, int streamIndex = 0); //!< Remove a channel source (Tx) void removeChannelSource(BasebandSampleSource* sink, bool deleting, int streamIndex = 0); //!< Remove a channel source (Tx)
void addMIMOChannel(MIMOChannel* channel); //!< Add a MIMO channel (n Rx and m Tx combination) void addMIMOChannel(MIMOChannel* channel); //!< Add a MIMO channel (n Rx and m Tx combination)
void removeMIMOChannel(MIMOChannel* channel); //!< Remove a MIMO channel (n Rx and m Tx combination) void removeMIMOChannel(MIMOChannel* channel); //!< Remove a MIMO channel (n Rx and m Tx combination)

View File

@ -152,12 +152,14 @@ class SDRBASE_API DSPRemoveBasebandSampleSink : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
public: public:
DSPRemoveBasebandSampleSink(BasebandSampleSink* sampleSink) : Message(), m_sampleSink(sampleSink) { } DSPRemoveBasebandSampleSink(BasebandSampleSink* sampleSink, bool deleting) : Message(), m_sampleSink(sampleSink), m_deleting(deleting) { }
BasebandSampleSink* getSampleSink() const { return m_sampleSink; } BasebandSampleSink* getSampleSink() const { return m_sampleSink; }
bool getDeleting() const { return m_deleting; }
private: private:
BasebandSampleSink* m_sampleSink; BasebandSampleSink* m_sampleSink;
bool m_deleting;
}; };
class SDRBASE_API DSPRemoveSpectrumSink : public Message { class SDRBASE_API DSPRemoveSpectrumSink : public Message {
@ -176,12 +178,14 @@ class SDRBASE_API DSPRemoveBasebandSampleSource : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
public: public:
DSPRemoveBasebandSampleSource(BasebandSampleSource* sampleSource) : Message(), m_sampleSource(sampleSource) { } DSPRemoveBasebandSampleSource(BasebandSampleSource* sampleSource, bool deleting) : Message(), m_sampleSource(sampleSource), m_deleting(deleting) { }
BasebandSampleSource* getSampleSource() const { return m_sampleSource; } BasebandSampleSource* getSampleSource() const { return m_sampleSource; }
bool getDeleting() const { return m_deleting; }
private: private:
BasebandSampleSource* m_sampleSource; BasebandSampleSource* m_sampleSource;
bool m_deleting;
}; };
class SDRBASE_API DSPAddAudioSink : public Message { class SDRBASE_API DSPAddAudioSink : public Message {

View File

@ -155,13 +155,13 @@ void DSPDeviceMIMOEngine::addChannelSource(BasebandSampleSource* source, int ind
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }
void DSPDeviceMIMOEngine::removeChannelSource(BasebandSampleSource* source, int index) void DSPDeviceMIMOEngine::removeChannelSource(BasebandSampleSource* source, bool deleting, int index)
{ {
qDebug() << "DSPDeviceMIMOEngine::removeChannelSource: " qDebug() << "DSPDeviceMIMOEngine::removeChannelSource: "
<< source->getSourceName().toStdString().c_str() << source->getSourceName().toStdString().c_str()
<< " at: " << " at: "
<< index; << index;
auto *cmd = new RemoveBasebandSampleSource(source, index); auto *cmd = new RemoveBasebandSampleSource(source, index, deleting);
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }
@ -1129,10 +1129,13 @@ bool DSPDeviceMIMOEngine::handleMessage(const Message& message)
const auto& msg = (const RemoveBasebandSampleSource&) message; const auto& msg = (const RemoveBasebandSampleSource&) message;
BasebandSampleSource* sampleSource = msg.getSampleSource(); BasebandSampleSource* sampleSource = msg.getSampleSource();
unsigned int isink = msg.getIndex(); unsigned int isink = msg.getIndex();
bool deleting = msg.getDeleting();
if (isink < m_basebandSampleSources.size()) if (isink < m_basebandSampleSources.size())
{ {
sampleSource->stop(); if (!deleting) {
sampleSource->stop();
}
m_basebandSampleSources[isink].remove(sampleSource); m_basebandSampleSources[isink].remove(sampleSource);
} }

View File

@ -65,16 +65,19 @@ public:
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
public: public:
RemoveBasebandSampleSource(BasebandSampleSource* sampleSource, unsigned int index) : RemoveBasebandSampleSource(BasebandSampleSource* sampleSource, unsigned int index, bool deleting) :
Message(), Message(),
m_sampleSource(sampleSource), m_sampleSource(sampleSource),
m_index(index) m_index(index),
m_deleting(deleting)
{ } { }
BasebandSampleSource* getSampleSource() const { return m_sampleSource; } BasebandSampleSource* getSampleSource() const { return m_sampleSource; }
unsigned int getIndex() const { return m_index; } unsigned int getIndex() const { return m_index; }
bool getDeleting() const { return m_deleting; }
private: private:
BasebandSampleSource* m_sampleSource; BasebandSampleSource* m_sampleSource;
unsigned int m_index; unsigned int m_index;
bool m_deleting;
}; };
class AddMIMOChannel : public Message { class AddMIMOChannel : public Message {
@ -227,7 +230,7 @@ public:
uint getUID() const { return m_uid; } uint getUID() const { return m_uid; }
void addChannelSource(BasebandSampleSource* source, int index = 0); //!< Add a channel source void addChannelSource(BasebandSampleSource* source, int index = 0); //!< Add a channel source
void removeChannelSource(BasebandSampleSource* source, int index = 0); //!< Remove a channel source void removeChannelSource(BasebandSampleSource* source, bool deleting, int index = 0); //!< Remove a channel source
void addChannelSink(BasebandSampleSink* sink, int index = 0); //!< Add a channel sink void addChannelSink(BasebandSampleSink* sink, int index = 0); //!< Add a channel sink
void removeChannelSink(BasebandSampleSink* sink, int index = 0); //!< Remove a channel sink void removeChannelSink(BasebandSampleSink* sink, int index = 0); //!< Remove a channel sink
void addMIMOChannel(MIMOChannel *channel); //!< Add a MIMO channel void addMIMOChannel(MIMOChannel *channel); //!< Add a MIMO channel

View File

@ -101,10 +101,10 @@ void DSPDeviceSinkEngine::addChannelSource(BasebandSampleSource* source)
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }
void DSPDeviceSinkEngine::removeChannelSource(BasebandSampleSource* source) void DSPDeviceSinkEngine::removeChannelSource(BasebandSampleSource* source, bool deleting)
{ {
qDebug() << "DSPDeviceSinkEngine::removeChannelSource: " << source->getSourceName().toStdString().c_str(); qDebug() << "DSPDeviceSinkEngine::removeChannelSource: " << source->getSourceName().toStdString().c_str();
auto *cmd = new DSPRemoveBasebandSampleSource(source); auto *cmd = new DSPRemoveBasebandSampleSource(source, deleting);
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }
@ -499,8 +499,9 @@ bool DSPDeviceSinkEngine::handleMessage(const Message& message)
{ {
auto& cmd = (const DSPRemoveBasebandSampleSource&) message; auto& cmd = (const DSPRemoveBasebandSampleSource&) message;
BasebandSampleSource* source = cmd.getSampleSource(); BasebandSampleSource* source = cmd.getSampleSource();
bool deleting = cmd.getDeleting();
if(m_state == State::StRunning) { if (!deleting && (m_state == State::StRunning)) {
source->stop(); source->stop();
} }

View File

@ -68,7 +68,7 @@ public:
void setSinkSequence(int sequence); //!< Set the sample sink sequence in type void setSinkSequence(int sequence); //!< Set the sample sink sequence in type
void addChannelSource(BasebandSampleSource* source); //!< Add a baseband sample source void addChannelSource(BasebandSampleSource* source); //!< Add a baseband sample source
void removeChannelSource(BasebandSampleSource* source); //!< Remove a baseband sample source void removeChannelSource(BasebandSampleSource* source, bool deleting); //!< Remove a baseband sample source
void addSpectrumSink(BasebandSampleSink* spectrumSink); //!< Add a spectrum vis baseband sample sink void addSpectrumSink(BasebandSampleSink* spectrumSink); //!< Add a spectrum vis baseband sample sink
void removeSpectrumSink(BasebandSampleSink* spectrumSink); //!< Add a spectrum vis baseband sample sink void removeSpectrumSink(BasebandSampleSink* spectrumSink); //!< Add a spectrum vis baseband sample sink

View File

@ -109,10 +109,10 @@ void DSPDeviceSourceEngine::addSink(BasebandSampleSink* sink)
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }
void DSPDeviceSourceEngine::removeSink(BasebandSampleSink* sink) void DSPDeviceSourceEngine::removeSink(BasebandSampleSink* sink, bool deleting)
{ {
qDebug() << "DSPDeviceSourceEngine::removeSink: " << sink->getSinkName().toStdString().c_str(); qDebug() << "DSPDeviceSourceEngine::removeSink: " << sink->getSinkName().toStdString().c_str();
auto *cmd = new DSPRemoveBasebandSampleSink(sink); auto *cmd = new DSPRemoveBasebandSampleSink(sink, deleting);
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }
@ -629,8 +629,10 @@ bool DSPDeviceSourceEngine::handleMessage(const Message& message)
{ {
auto cmd = (const DSPRemoveBasebandSampleSink&) message; auto cmd = (const DSPRemoveBasebandSampleSink&) message;
BasebandSampleSink* sink = cmd.getSampleSink(); BasebandSampleSink* sink = cmd.getSampleSink();
bool deleting = cmd.getDeleting();
if(m_state == State::StRunning) { // Don't dereference sink if deleting, as it may have already been deleted
if (!deleting && (m_state == State::StRunning)) {
sink->stop(); sink->stop();
} }

View File

@ -62,7 +62,7 @@ public:
DeviceSampleSource *getSource() { return m_deviceSampleSource; } DeviceSampleSource *getSource() { return m_deviceSampleSource; }
void addSink(BasebandSampleSink* sink); //!< Add a sample sink void addSink(BasebandSampleSink* sink); //!< Add a sample sink
void removeSink(BasebandSampleSink* sink); //!< Remove a sample sink void removeSink(BasebandSampleSink* sink, bool deleting); //!< Remove a sample sink
void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection); //!< Configure DSP corrections void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection); //!< Configure DSP corrections

View File

@ -740,7 +740,7 @@ void RemoveDeviceSetFSM::removeSink()
{ {
qDebug() << "RemoveDeviceSetFSM::removeSink"; qDebug() << "RemoveDeviceSetFSM::removeSink";
if (m_deviceSourceEngine) { if (m_deviceSourceEngine) {
m_deviceSourceEngine->removeSink(m_deviceUISet->m_spectrumVis); m_deviceSourceEngine->removeSink(m_deviceUISet->m_spectrumVis, false);
} else if (m_deviceSinkEngine) { } else if (m_deviceSinkEngine) {
m_deviceSinkEngine->removeSpectrumSink(m_deviceUISet->m_spectrumVis); m_deviceSinkEngine->removeSpectrumSink(m_deviceUISet->m_spectrumVis);
} else { } else {