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

Deep redesign: Init sequence review phase #5: fixed source message forwarding for BladeRF only

This commit is contained in:
f4exb 2015-08-19 09:24:44 +02:00
parent 1fdeaa62c3
commit 23c956cf17
3 changed files with 46 additions and 31 deletions

View File

@ -260,6 +260,7 @@ bool BladerfInput::handleMessage(const Message& message)
bool BladerfInput::applySettings(const Settings& settings, bool force) bool BladerfInput::applySettings(const Settings& settings, bool force)
{ {
bool forwardChange = false;
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
qDebug() << "BladerfInput::applySettings: m_dev: " << m_dev; qDebug() << "BladerfInput::applySettings: m_dev: " << m_dev;
@ -383,6 +384,7 @@ bool BladerfInput::applySettings(const Settings& settings, bool force)
if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force) if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force)
{ {
m_settings.m_devSampleRate = settings.m_devSampleRate; m_settings.m_devSampleRate = settings.m_devSampleRate;
forwardChange = true;
if (m_dev != 0) if (m_dev != 0)
{ {
@ -422,6 +424,7 @@ bool BladerfInput::applySettings(const Settings& settings, bool force)
if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) if ((m_settings.m_log2Decim != settings.m_log2Decim) || force)
{ {
m_settings.m_log2Decim = settings.m_log2Decim; m_settings.m_log2Decim = settings.m_log2Decim;
forwardChange = true;
if(m_dev != 0) if(m_dev != 0)
{ {
@ -441,45 +444,57 @@ bool BladerfInput::applySettings(const Settings& settings, bool force)
} }
} }
if (m_settings.m_centerFrequency != settings.m_centerFrequency)
{
forwardChange = true;
}
m_settings.m_centerFrequency = settings.m_centerFrequency; m_settings.m_centerFrequency = settings.m_centerFrequency;
qint64 centerFrequency = m_settings.m_centerFrequency; qint64 deviceCenterFrequency = m_settings.m_centerFrequency;
qint64 f_img = centerFrequency; qint64 f_img = deviceCenterFrequency;
qint64 f_cut = centerFrequency + m_settings.m_bandwidth/2; qint64 f_cut = deviceCenterFrequency + m_settings.m_bandwidth/2;
if ((m_settings.m_log2Decim == 0) || (m_settings.m_fcPos == FC_POS_CENTER)) if ((m_settings.m_log2Decim == 0) || (m_settings.m_fcPos == FC_POS_CENTER))
{ {
centerFrequency = m_settings.m_centerFrequency; deviceCenterFrequency = m_settings.m_centerFrequency;
f_img = centerFrequency; f_img = deviceCenterFrequency;
f_cut = centerFrequency + m_settings.m_bandwidth/2; f_cut = deviceCenterFrequency + m_settings.m_bandwidth/2;
} }
else else
{ {
if (m_settings.m_fcPos == FC_POS_INFRA) if (m_settings.m_fcPos == FC_POS_INFRA)
{ {
centerFrequency = m_settings.m_centerFrequency + (m_settings.m_devSampleRate / 4); deviceCenterFrequency = m_settings.m_centerFrequency + (m_settings.m_devSampleRate / 4);
f_img = centerFrequency + m_settings.m_devSampleRate/2; f_img = deviceCenterFrequency + m_settings.m_devSampleRate/2;
f_cut = centerFrequency + m_settings.m_bandwidth/2; f_cut = deviceCenterFrequency + m_settings.m_bandwidth/2;
} }
else if (m_settings.m_fcPos == FC_POS_SUPRA) else if (m_settings.m_fcPos == FC_POS_SUPRA)
{ {
centerFrequency = m_settings.m_centerFrequency - (m_settings.m_devSampleRate / 4); deviceCenterFrequency = m_settings.m_centerFrequency - (m_settings.m_devSampleRate / 4);
f_img = centerFrequency - m_settings.m_devSampleRate/2; f_img = deviceCenterFrequency - m_settings.m_devSampleRate/2;
f_cut = centerFrequency - m_settings.m_bandwidth/2; f_cut = deviceCenterFrequency - m_settings.m_bandwidth/2;
} }
} }
if (m_dev != NULL) if (m_dev != NULL)
{ {
if (bladerf_set_frequency( m_dev, BLADERF_MODULE_RX, centerFrequency ) != 0) if (bladerf_set_frequency( m_dev, BLADERF_MODULE_RX, deviceCenterFrequency ) != 0)
{ {
qDebug("bladerf_set_frequency(%lld) failed", m_settings.m_centerFrequency); qDebug("bladerf_set_frequency(%lld) failed", m_settings.m_centerFrequency);
} }
} }
qDebug() << " - center freq: " << m_settings.m_centerFrequency << " Hz" if (forwardChange)
<< " RF center freq: " << centerFrequency << " Hz" {
<< " RF sample rate: " << m_settings.m_devSampleRate << "Hz" int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2Decim);
DSPSignalNotification *notif = new DSPSignalNotification(sampleRate, m_settings.m_centerFrequency);
getOutputMessageQueue()->push(notif);
}
qDebug() << "BladerfInput::applySettings: center freq: " << m_settings.m_centerFrequency << " Hz"
<< " device center freq: " << deviceCenterFrequency << " Hz"
<< " device sample rate: " << m_settings.m_devSampleRate << "Hz"
<< " Actual sample rate: " << m_settings.m_devSampleRate/(1<<m_settings.m_log2Decim) << "Hz" << " Actual sample rate: " << m_settings.m_devSampleRate/(1<<m_settings.m_log2Decim) << "Hz"
<< " BW: " << m_settings.m_bandwidth << "Hz" << " BW: " << m_settings.m_bandwidth << "Hz"
<< " img: " << f_img << "Hz" << " img: " << f_img << "Hz"

View File

@ -403,9 +403,9 @@ DSPEngine::State DSPEngine::gotoInit()
(*it)->sendWaitSink(notif); (*it)->sendWaitSink(notif);
} }
// pass sample rate to main window // pass data to listeners
DSPEngineReport* rep = new DSPEngineReport(m_sampleRate, m_centerFrequency); DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy for the output queue
m_outputMessageQueue.push(rep); m_outputMessageQueue.push(rep);
return StReady; return StReady;
@ -653,25 +653,25 @@ void DSPEngine::handleSourceMessages()
m_sampleRate = notif->getSampleRate(); m_sampleRate = notif->getSampleRate();
m_centerFrequency = notif->getFrequencyOffset(); m_centerFrequency = notif->getFrequencyOffset();
qDebug() << " - DSPSignalNotification(" << m_sampleRate << "," << m_centerFrequency << ")"; qDebug() << "DSPEngine::handleSourceMessages: DSPSignalNotification(" << m_sampleRate << "," << m_centerFrequency << ")";
// forward source changes to sinks // forward source changes to sinks with immediate execution
for(SampleSinks::const_iterator it = m_sampleSinks.begin(); it != m_sampleSinks.end(); it++) for(SampleSinks::const_iterator it = m_sampleSinks.begin(); it != m_sampleSinks.end(); it++)
{ {
qDebug() << " - forward message to " << (*it)->objectName().toStdString().c_str(); qDebug() << "DSPEngine::handleSourceMessages: forward message to " << (*it)->objectName().toStdString().c_str();
(*it)->handleMessage(*message); (*it)->handleMessage(*message);
} }
for (ThreadedSampleSinks::const_iterator it = m_threadedSampleSinks.begin(); it != m_threadedSampleSinks.end(); ++it) for (ThreadedSampleSinks::const_iterator it = m_threadedSampleSinks.begin(); it != m_threadedSampleSinks.end(); ++it)
{ {
qDebug() << " - forward message to ThreadedSampleSink(" << (*it)->getSampleSinkObjectName().toStdString().c_str() << ")"; qDebug() << "DSPEngine::handleSourceMessages: forward message to ThreadedSampleSink(" << (*it)->getSampleSinkObjectName().toStdString().c_str() << ")";
(*it)->sendWaitSink(*message); (*it)->sendWaitSink(*message);
} }
// forward changes to listeners // forward changes to listeners on DSP output queue
DSPEngineReport* rep = new DSPEngineReport(m_sampleRate, m_centerFrequency); DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy for the output queue
m_outputMessageQueue.push(rep); m_outputMessageQueue.push(rep);
} }

View File

@ -338,16 +338,16 @@ void MainWindow::handleDSPMessages()
std::cerr << "MainWindow::handleDSPMessages: " << message->getIdentifier() << std::endl; std::cerr << "MainWindow::handleDSPMessages: " << message->getIdentifier() << std::endl;
if (DSPEngineReport::match(*message)) if (DSPSignalNotification::match(*message))
{ {
DSPEngineReport* rep = (DSPEngineReport*) message; DSPSignalNotification* notif = (DSPSignalNotification*) message;
m_sampleRate = rep->getSampleRate(); m_sampleRate = notif->getSampleRate();
m_centerFrequency = rep->getCenterFrequency(); m_centerFrequency = notif->getFrequencyOffset();
qDebug("SampleRate:%d, CenterFrequency:%llu", rep->getSampleRate(), rep->getCenterFrequency()); qDebug("SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getFrequencyOffset());
updateCenterFreqDisplay(); updateCenterFreqDisplay();
updateSampleRate(); updateSampleRate();
qDebug() << "MainWindow::handleMessages: m_fileSink->configure"; qDebug() << "MainWindow::handleDSPMessages: forward to file sink";
m_fileSink->configure(m_fileSink->getInputMessageQueue(), m_sampleFileName); m_fileSink->handleMessage(*notif);
} }
delete message; delete message;