mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	ChannelAPI rework: make handleMessage method protected
This commit is contained in:
		
							parent
							
								
									02ec2a4403
								
							
						
					
					
						commit
						41061de50b
					
				| @ -28,6 +28,11 @@ BasebandSampleSink::~BasebandSampleSink() | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void BasebandSampleSink::pushMessage(Message *msg) | ||||||
|  | { | ||||||
|  | 	m_inputMessageQueue.push(msg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void BasebandSampleSink::handleInputMessages() | void BasebandSampleSink::handleInputMessages() | ||||||
| { | { | ||||||
| 	Message* message; | 	Message* message; | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ public: | |||||||
| 	virtual void start() = 0; | 	virtual void start() = 0; | ||||||
| 	virtual void stop() = 0; | 	virtual void stop() = 0; | ||||||
| 	virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly) = 0; | 	virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly) = 0; | ||||||
| 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | 	void pushMessage(Message *msg); | ||||||
| 
 | 
 | ||||||
| 	MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
 | 	MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
 | ||||||
| 
 | 
 | ||||||
| @ -46,6 +46,7 @@ public: | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|  | 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | ||||||
| 	MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
 | 	MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
 | ||||||
| 
 | 
 | ||||||
| protected slots: | protected slots: | ||||||
|  | |||||||
| @ -28,6 +28,11 @@ BasebandSampleSource::~BasebandSampleSource() | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void BasebandSampleSource::pushMessage(Message *msg) | ||||||
|  | { | ||||||
|  | 	m_inputMessageQueue.push(msg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void BasebandSampleSource::handleInputMessages() | void BasebandSampleSource::handleInputMessages() | ||||||
| { | { | ||||||
| 	Message* message; | 	Message* message; | ||||||
|  | |||||||
| @ -35,11 +35,12 @@ public: | |||||||
| 	virtual void start() = 0; | 	virtual void start() = 0; | ||||||
| 	virtual void stop() = 0; | 	virtual void stop() = 0; | ||||||
| 	virtual void pull(SampleVector::iterator& begin, unsigned int nbSamples) = 0; | 	virtual void pull(SampleVector::iterator& begin, unsigned int nbSamples) = 0; | ||||||
| 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | 	void pushMessage(Message *msg); | ||||||
| 
 | 
 | ||||||
| 	MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
 | 	MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
 | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|  | 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | ||||||
| 	MessageQueue m_inputMessageQueue;     //!< Queue for asynchronous inbound communication
 | 	MessageQueue m_inputMessageQueue;     //!< Queue for asynchronous inbound communication
 | ||||||
| 
 | 
 | ||||||
| protected slots: | protected slots: | ||||||
|  | |||||||
| @ -613,7 +613,7 @@ DSPDeviceMIMOEngine::State DSPDeviceMIMOEngine::gotoInit(int subsystemIndex) | |||||||
|                 for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks[isource].begin(); it != m_basebandSampleSinks[isource].end(); ++it) |                 for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks[isource].begin(); it != m_basebandSampleSinks[isource].end(); ++it) | ||||||
|                 { |                 { | ||||||
|                     qDebug() << "DSPDeviceMIMOEngine::gotoInit: initializing " << (*it)->objectName().toStdString().c_str(); |                     qDebug() << "DSPDeviceMIMOEngine::gotoInit: initializing " << (*it)->objectName().toStdString().c_str(); | ||||||
|                     (*it)->handleMessage(notif); |                     (*it)->pushMessage(new DSPSignalNotification(notif)); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -650,7 +650,7 @@ DSPDeviceMIMOEngine::State DSPDeviceMIMOEngine::gotoInit(int subsystemIndex) | |||||||
|                 for (BasebandSampleSources::const_iterator it = m_basebandSampleSources[isink].begin(); it != m_basebandSampleSources[isink].end(); ++it) |                 for (BasebandSampleSources::const_iterator it = m_basebandSampleSources[isink].begin(); it != m_basebandSampleSources[isink].end(); ++it) | ||||||
|                 { |                 { | ||||||
|                     qDebug() << "DSPDeviceMIMOEngine::gotoInit: initializing BasebandSampleSource(" << (*it)->objectName().toStdString().c_str() << ")"; |                     qDebug() << "DSPDeviceMIMOEngine::gotoInit: initializing BasebandSampleSource(" << (*it)->objectName().toStdString().c_str() << ")"; | ||||||
|                     (*it)->handleMessage(notif); |                     (*it)->pushMessage(new DSPSignalNotification(notif)); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -956,8 +956,8 @@ void DSPDeviceMIMOEngine::handleSynchronousMessages() | |||||||
|             // initialize sample rate and center frequency in the sink:
 |             // initialize sample rate and center frequency in the sink:
 | ||||||
|             int sourceStreamSampleRate = m_deviceSampleMIMO->getSourceSampleRate(isource); |             int sourceStreamSampleRate = m_deviceSampleMIMO->getSourceSampleRate(isource); | ||||||
|             quint64 sourceCenterFrequency = m_deviceSampleMIMO->getSourceCenterFrequency(isource); |             quint64 sourceCenterFrequency = m_deviceSampleMIMO->getSourceCenterFrequency(isource); | ||||||
|             DSPSignalNotification msg(sourceStreamSampleRate, sourceCenterFrequency); |             DSPSignalNotification *msg = new DSPSignalNotification(sourceStreamSampleRate, sourceCenterFrequency); | ||||||
|             sink->handleMessage(msg); |             sink->pushMessage(msg); | ||||||
|             // start the sink:
 |             // start the sink:
 | ||||||
|             if (m_stateRx == StRunning) { |             if (m_stateRx == StRunning) { | ||||||
|                 sink->start(); |                 sink->start(); | ||||||
| @ -991,8 +991,8 @@ void DSPDeviceMIMOEngine::handleSynchronousMessages() | |||||||
|             // initialize sample rate and center frequency in the sink:
 |             // initialize sample rate and center frequency in the sink:
 | ||||||
|             int sinkStreamSampleRate = m_deviceSampleMIMO->getSinkSampleRate(isink); |             int sinkStreamSampleRate = m_deviceSampleMIMO->getSinkSampleRate(isink); | ||||||
|             quint64 sinkCenterFrequency = m_deviceSampleMIMO->getSinkCenterFrequency(isink); |             quint64 sinkCenterFrequency = m_deviceSampleMIMO->getSinkCenterFrequency(isink); | ||||||
|             DSPSignalNotification msg(sinkStreamSampleRate, sinkCenterFrequency); |             DSPSignalNotification *msg = new DSPSignalNotification(sinkStreamSampleRate, sinkCenterFrequency); | ||||||
|             sampleSource->handleMessage(msg); |             sampleSource->pushMessage(msg); | ||||||
|             // start the sink:
 |             // start the sink:
 | ||||||
|             if (m_stateTx == StRunning) { |             if (m_stateTx == StRunning) { | ||||||
|                 sampleSource->start(); |                 sampleSource->start(); | ||||||
| @ -1019,24 +1019,24 @@ void DSPDeviceMIMOEngine::handleSynchronousMessages() | |||||||
| 
 | 
 | ||||||
|         for (unsigned int isource = 0; isource < m_deviceSampleMIMO->getNbSourceStreams(); isource++) |         for (unsigned int isource = 0; isource < m_deviceSampleMIMO->getNbSourceStreams(); isource++) | ||||||
|         { |         { | ||||||
|             DSPMIMOSignalNotification notif( |             DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification( | ||||||
|                 m_deviceSampleMIMO->getSourceSampleRate(isource), |                 m_deviceSampleMIMO->getSourceSampleRate(isource), | ||||||
|                 m_deviceSampleMIMO->getSourceCenterFrequency(isource), |                 m_deviceSampleMIMO->getSourceCenterFrequency(isource), | ||||||
|                 true, |                 true, | ||||||
|                 isource |                 isource | ||||||
|             ); |             ); | ||||||
|             channel->handleMessage(notif); |             channel->pushMessage(notif); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         for (unsigned int isink = 0; isink < m_deviceSampleMIMO->getNbSinkStreams(); isink++) |         for (unsigned int isink = 0; isink < m_deviceSampleMIMO->getNbSinkStreams(); isink++) | ||||||
|         { |         { | ||||||
|             DSPMIMOSignalNotification notif( |             DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification( | ||||||
|                 m_deviceSampleMIMO->getSinkSampleRate(isink), |                 m_deviceSampleMIMO->getSinkSampleRate(isink), | ||||||
|                 m_deviceSampleMIMO->getSinkCenterFrequency(isink), |                 m_deviceSampleMIMO->getSinkCenterFrequency(isink), | ||||||
|                 false, |                 false, | ||||||
|                 isink |                 isink | ||||||
|             ); |             ); | ||||||
|             channel->handleMessage(notif); |             channel->pushMessage(notif); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (m_stateRx == StRunning) { |         if (m_stateRx == StRunning) { | ||||||
| @ -1077,19 +1077,19 @@ void DSPDeviceMIMOEngine::handleSynchronousMessages() | |||||||
|             { |             { | ||||||
|                 if (m_spectrumSink) |                 if (m_spectrumSink) | ||||||
|                 { |                 { | ||||||
|                     DSPSignalNotification notif( |                     DSPSignalNotification *notif = new DSPSignalNotification( | ||||||
|                         m_deviceSampleMIMO->getSinkSampleRate(spectrumInputIndex), |                         m_deviceSampleMIMO->getSinkSampleRate(spectrumInputIndex), | ||||||
|                         m_deviceSampleMIMO->getSinkCenterFrequency(spectrumInputIndex)); |                         m_deviceSampleMIMO->getSinkCenterFrequency(spectrumInputIndex)); | ||||||
|                     m_spectrumSink->handleMessage(notif); |                     m_spectrumSink->pushMessage(notif); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (m_spectrumSink && (spectrumInputSourceElseSink) && (spectrumInputIndex <  m_deviceSampleMIMO->getNbSinkFifos())) |             if (m_spectrumSink && (spectrumInputSourceElseSink) && (spectrumInputIndex <  m_deviceSampleMIMO->getNbSinkFifos())) | ||||||
|             { |             { | ||||||
|                 DSPSignalNotification notif( |                 DSPSignalNotification *notif = new DSPSignalNotification( | ||||||
|                     m_deviceSampleMIMO->getSourceSampleRate(spectrumInputIndex), |                     m_deviceSampleMIMO->getSourceSampleRate(spectrumInputIndex), | ||||||
|                     m_deviceSampleMIMO->getSourceCenterFrequency(spectrumInputIndex)); |                     m_deviceSampleMIMO->getSourceCenterFrequency(spectrumInputIndex)); | ||||||
|                 m_spectrumSink->handleMessage(notif); |                 m_spectrumSink->pushMessage(notif); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             m_spectrumInputSourceElseSink = spectrumInputSourceElseSink; |             m_spectrumInputSourceElseSink = spectrumInputSourceElseSink; | ||||||
| @ -1165,22 +1165,22 @@ void DSPDeviceMIMOEngine::handleInputMessages() | |||||||
|             for (MIMOChannels::const_iterator it = m_mimoChannels.begin(); it != m_mimoChannels.end(); ++it) |             for (MIMOChannels::const_iterator it = m_mimoChannels.begin(); it != m_mimoChannels.end(); ++it) | ||||||
|             { |             { | ||||||
|                 DSPMIMOSignalNotification *message = new DSPMIMOSignalNotification(*notif); |                 DSPMIMOSignalNotification *message = new DSPMIMOSignalNotification(*notif); | ||||||
|                 (*it)->handleMessage(*message); |                 (*it)->pushMessage(message); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (sourceElseSink) |             if (sourceElseSink) | ||||||
|             { |             { | ||||||
|                 if ((istream < m_deviceSampleMIMO->getNbSourceStreams())) |                 if ((istream < m_deviceSampleMIMO->getNbSourceStreams())) | ||||||
|                 { |                 { | ||||||
|                     DSPSignalNotification *message = new DSPSignalNotification(sampleRate, centerFrequency); |  | ||||||
| 
 | 
 | ||||||
|                     // forward source changes to ancillary sinks with immediate execution (no queuing)
 |                     // forward source changes to ancillary sinks
 | ||||||
|                     if (istream < m_basebandSampleSinks.size()) |                     if (istream < m_basebandSampleSinks.size()) | ||||||
|                     { |                     { | ||||||
|                         for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks[istream].begin(); it != m_basebandSampleSinks[istream].end(); ++it) |                         for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks[istream].begin(); it != m_basebandSampleSinks[istream].end(); ++it) | ||||||
|                         { |                         { | ||||||
|  |                             DSPSignalNotification *message = new DSPSignalNotification(sampleRate, centerFrequency); | ||||||
|                             qDebug() << "DSPDeviceMIMOEngine::handleInputMessages: starting " << (*it)->objectName().toStdString().c_str(); |                             qDebug() << "DSPDeviceMIMOEngine::handleInputMessages: starting " << (*it)->objectName().toStdString().c_str(); | ||||||
|                             (*it)->handleMessage(*message); |                             (*it)->pushMessage(message); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
| @ -1196,8 +1196,8 @@ void DSPDeviceMIMOEngine::handleInputMessages() | |||||||
|                     // forward changes to spectrum sink if currently active
 |                     // forward changes to spectrum sink if currently active
 | ||||||
|                     if (m_spectrumSink && m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream)) |                     if (m_spectrumSink && m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream)) | ||||||
|                     { |                     { | ||||||
|                         DSPSignalNotification spectrumNotif(sampleRate, centerFrequency); |                         DSPSignalNotification *spectrumNotif = new DSPSignalNotification(sampleRate, centerFrequency); | ||||||
|                         m_spectrumSink->handleMessage(spectrumNotif); |                         m_spectrumSink->pushMessage(spectrumNotif); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @ -1205,15 +1205,15 @@ void DSPDeviceMIMOEngine::handleInputMessages() | |||||||
|             { |             { | ||||||
|                 if ((istream < m_deviceSampleMIMO->getNbSinkStreams())) |                 if ((istream < m_deviceSampleMIMO->getNbSinkStreams())) | ||||||
|                 { |                 { | ||||||
|                     DSPSignalNotification *message = new DSPSignalNotification(sampleRate, centerFrequency); |  | ||||||
| 
 | 
 | ||||||
|                     // forward source changes to channel sources with immediate execution (no queuing)
 |                     // forward source changes to channel sources with immediate execution (no queuing)
 | ||||||
|                     if (istream < m_basebandSampleSources.size()) |                     if (istream < m_basebandSampleSources.size()) | ||||||
|                     { |                     { | ||||||
|                         for (BasebandSampleSources::const_iterator it = m_basebandSampleSources[istream].begin(); it != m_basebandSampleSources[istream].end(); ++it) |                         for (BasebandSampleSources::const_iterator it = m_basebandSampleSources[istream].begin(); it != m_basebandSampleSources[istream].end(); ++it) | ||||||
|                         { |                         { | ||||||
|  |                             DSPSignalNotification *message = new DSPSignalNotification(sampleRate, centerFrequency); | ||||||
|                             qDebug() << "DSPDeviceMIMOEngine::handleSinkMessages: forward message to BasebandSampleSource(" << (*it)->objectName().toStdString().c_str() << ")"; |                             qDebug() << "DSPDeviceMIMOEngine::handleSinkMessages: forward message to BasebandSampleSource(" << (*it)->objectName().toStdString().c_str() << ")"; | ||||||
|                             (*it)->handleMessage(*message); |                             (*it)->pushMessage(message); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
| @ -1229,8 +1229,8 @@ void DSPDeviceMIMOEngine::handleInputMessages() | |||||||
|                     // forward changes to spectrum sink if currently active
 |                     // forward changes to spectrum sink if currently active
 | ||||||
|                     if (m_spectrumSink && !m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream)) |                     if (m_spectrumSink && !m_spectrumInputSourceElseSink && (m_spectrumInputIndex == istream)) | ||||||
|                     { |                     { | ||||||
|                         DSPSignalNotification spectrumNotif(sampleRate, centerFrequency); |                         DSPSignalNotification *spectrumNotif = new DSPSignalNotification(sampleRate, centerFrequency); | ||||||
|                         m_spectrumSink->handleMessage(spectrumNotif); |                         m_spectrumSink->pushMessage(spectrumNotif); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -316,11 +316,11 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoInit() | |||||||
| 	for (BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); ++it) | 	for (BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); ++it) | ||||||
| 	{ | 	{ | ||||||
| 		qDebug() << "DSPDeviceSinkEngine::gotoInit: initializing " << (*it)->objectName().toStdString().c_str(); | 		qDebug() << "DSPDeviceSinkEngine::gotoInit: initializing " << (*it)->objectName().toStdString().c_str(); | ||||||
| 		(*it)->handleMessage(notif); | 		(*it)->pushMessage(new DSPSignalNotification(notif)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (m_spectrumSink) { | 	if (m_spectrumSink) { | ||||||
|         m_spectrumSink->handleMessage(notif); |         m_spectrumSink->pushMessage(new DSPSignalNotification(notif)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// pass data to listeners
 | 	// pass data to listeners
 | ||||||
| @ -471,8 +471,8 @@ void DSPDeviceSinkEngine::handleSynchronousMessages() | |||||||
| 	{ | 	{ | ||||||
| 		BasebandSampleSource* source = ((DSPAddBasebandSampleSource*) message)->getSampleSource(); | 		BasebandSampleSource* source = ((DSPAddBasebandSampleSource*) message)->getSampleSource(); | ||||||
| 		m_basebandSampleSources.push_back(source); | 		m_basebandSampleSources.push_back(source); | ||||||
|         DSPSignalNotification notif(m_sampleRate, m_centerFrequency); |         DSPSignalNotification *notif = new DSPSignalNotification(m_sampleRate, m_centerFrequency); | ||||||
|         source->handleMessage(notif); |         source->pushMessage(notif); | ||||||
| 
 | 
 | ||||||
|         if (m_state == StRunning) |         if (m_state == StRunning) | ||||||
|         { |         { | ||||||
| @ -518,8 +518,9 @@ void DSPDeviceSinkEngine::handleInputMessages() | |||||||
| 
 | 
 | ||||||
| 			for(BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); it++) | 			for(BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); it++) | ||||||
| 			{ | 			{ | ||||||
|  | 				DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy
 | ||||||
| 				qDebug() << "DSPDeviceSinkEngine::handleInputMessages: forward message to " << (*it)->objectName().toStdString().c_str(); | 				qDebug() << "DSPDeviceSinkEngine::handleInputMessages: forward message to " << (*it)->objectName().toStdString().c_str(); | ||||||
| 				(*it)->handleMessage(*message); | 				(*it)->pushMessage(rep); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			// forward changes to listeners on DSP output queue
 | 			// forward changes to listeners on DSP output queue
 | ||||||
|  | |||||||
| @ -440,18 +440,18 @@ DSPDeviceSourceEngine::State DSPDeviceSourceEngine::gotoInit() | |||||||
| 			<< " sampleRate: " << m_sampleRate | 			<< " sampleRate: " << m_sampleRate | ||||||
| 			<< " centerFrequency: " << m_centerFrequency; | 			<< " centerFrequency: " << m_centerFrequency; | ||||||
| 
 | 
 | ||||||
| 	DSPSignalNotification notif(m_sampleRate, m_centerFrequency); |  | ||||||
| 
 | 
 | ||||||
| 	for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks.begin(); it != m_basebandSampleSinks.end(); ++it) | 	for (BasebandSampleSinks::const_iterator it = m_basebandSampleSinks.begin(); it != m_basebandSampleSinks.end(); ++it) | ||||||
| 	{ | 	{ | ||||||
|  | 		DSPSignalNotification *notif = new DSPSignalNotification(m_sampleRate, m_centerFrequency); | ||||||
| 		qDebug() << "DSPDeviceSourceEngine::gotoInit: initializing " << (*it)->objectName().toStdString().c_str(); | 		qDebug() << "DSPDeviceSourceEngine::gotoInit: initializing " << (*it)->objectName().toStdString().c_str(); | ||||||
| 		(*it)->handleMessage(notif); | 		(*it)->pushMessage(notif); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// pass data to listeners
 | 	// pass data to listeners
 | ||||||
| 	if (m_deviceSampleSource->getMessageQueueToGUI()) | 	if (m_deviceSampleSource->getMessageQueueToGUI()) | ||||||
| 	{ | 	{ | ||||||
|         DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy for the output queue
 |         DSPSignalNotification* rep = new DSPSignalNotification(m_sampleRate, m_centerFrequency); | ||||||
|         m_deviceSampleSource->getMessageQueueToGUI()->push(rep); |         m_deviceSampleSource->getMessageQueueToGUI()->push(rep); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -581,8 +581,8 @@ void DSPDeviceSourceEngine::handleSynchronousMessages() | |||||||
| 		BasebandSampleSink* sink = ((DSPAddBasebandSampleSink*) message)->getSampleSink(); | 		BasebandSampleSink* sink = ((DSPAddBasebandSampleSink*) message)->getSampleSink(); | ||||||
| 		m_basebandSampleSinks.push_back(sink); | 		m_basebandSampleSinks.push_back(sink); | ||||||
|         // initialize sample rate and center frequency in the sink:
 |         // initialize sample rate and center frequency in the sink:
 | ||||||
|         DSPSignalNotification msg(m_sampleRate, m_centerFrequency); |         DSPSignalNotification *msg = new DSPSignalNotification(m_sampleRate, m_centerFrequency); | ||||||
|         sink->handleMessage(msg); |         sink->pushMessage(msg); | ||||||
|         // start the sink:
 |         // start the sink:
 | ||||||
|         if(m_state == StRunning) { |         if(m_state == StRunning) { | ||||||
|             sink->start(); |             sink->start(); | ||||||
| @ -658,8 +658,9 @@ void DSPDeviceSourceEngine::handleInputMessages() | |||||||
| 
 | 
 | ||||||
| 			for(BasebandSampleSinks::const_iterator it = m_basebandSampleSinks.begin(); it != m_basebandSampleSinks.end(); it++) | 			for(BasebandSampleSinks::const_iterator it = m_basebandSampleSinks.begin(); it != m_basebandSampleSinks.end(); it++) | ||||||
| 			{ | 			{ | ||||||
|  | 				DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy
 | ||||||
| 				qDebug() << "DSPDeviceSourceEngine::handleInputMessages: forward message to " << (*it)->objectName().toStdString().c_str(); | 				qDebug() << "DSPDeviceSourceEngine::handleInputMessages: forward message to " << (*it)->objectName().toStdString().c_str(); | ||||||
| 				(*it)->handleMessage(*message); | 				(*it)->pushMessage(rep); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			// forward changes to source GUI input queue
 | 			// forward changes to source GUI input queue
 | ||||||
| @ -667,7 +668,8 @@ void DSPDeviceSourceEngine::handleInputMessages() | |||||||
| 			MessageQueue *guiMessageQueue = m_deviceSampleSource->getMessageQueueToGUI(); | 			MessageQueue *guiMessageQueue = m_deviceSampleSource->getMessageQueueToGUI(); | ||||||
| 			qDebug("DSPDeviceSourceEngine::handleInputMessages: DSPSignalNotification: guiMessageQueue: %p", guiMessageQueue); | 			qDebug("DSPDeviceSourceEngine::handleInputMessages: DSPSignalNotification: guiMessageQueue: %p", guiMessageQueue); | ||||||
| 
 | 
 | ||||||
| 			if (guiMessageQueue) { | 			if (guiMessageQueue) | ||||||
|  | 			{ | ||||||
| 			    DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy for the source GUI
 | 			    DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy for the source GUI
 | ||||||
|                 guiMessageQueue->push(rep); |                 guiMessageQueue->push(rep); | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -27,6 +27,11 @@ MIMOChannel::~MIMOChannel() | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void MIMOChannel::pushMessage(Message *msg) | ||||||
|  | { | ||||||
|  | 	m_inputMessageQueue.push(msg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void MIMOChannel::handleInputMessages() | void MIMOChannel::handleInputMessages() | ||||||
| { | { | ||||||
| 	Message* message; | 	Message* message; | ||||||
|  | |||||||
| @ -39,11 +39,12 @@ public: | |||||||
| 	virtual void stopSources() = 0; | 	virtual void stopSources() = 0; | ||||||
| 	virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, unsigned int sinkIndex) = 0; | 	virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, unsigned int sinkIndex) = 0; | ||||||
|     virtual void pull(SampleVector::iterator& begin, unsigned int nbSamples, unsigned int sourceIndex) = 0; |     virtual void pull(SampleVector::iterator& begin, unsigned int nbSamples, unsigned int sourceIndex) = 0; | ||||||
| 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | 	void pushMessage(Message *msg); | ||||||
| 
 | 
 | ||||||
| 	MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
 | 	MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
 | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|  | 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | ||||||
| 	MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
 | 	MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
 | ||||||
| 
 | 
 | ||||||
| protected slots: | protected slots: | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user