RTLSDR: reviewed apply settings

This commit is contained in:
f4exb 2017-02-21 05:35:20 +01:00
parent 1174875551
commit 038d9c2f41
2 changed files with 132 additions and 167 deletions

View File

@ -199,10 +199,13 @@ bool RTLSDRInput::handleMessage(const Message& message)
if (MsgConfigureRTLSDR::match(message))
{
MsgConfigureRTLSDR& conf = (MsgConfigureRTLSDR&) message;
qDebug() << "RTLSDRInput::handleMessage: MsgConfigureRTLSDR";
if (!applySettings(conf.getSettings(), false))
bool success = applySettings(conf.getSettings(), false);
if (!success)
{
qDebug("RTLSDR config error");
qDebug("RTLSDRInput::handleMessage: config error");
}
return true;
@ -215,39 +218,18 @@ bool RTLSDRInput::handleMessage(const Message& message)
bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force)
{
QMutexLocker mutexLocker(&m_mutex);
bool forwardChange = false;
if ((m_settings.m_gain != settings.m_gain) || force)
if ((m_settings.m_dcBlock != settings.m_dcBlock) || force)
{
m_settings.m_gain = settings.m_gain;
if(m_dev != 0)
{
if(rtlsdr_set_tuner_gain(m_dev, m_settings.m_gain) != 0)
{
qDebug("rtlsdr_set_tuner_gain() failed");
}
}
m_settings.m_dcBlock = settings.m_dcBlock;
m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance);
}
if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force)
if ((m_settings.m_iqImbalance != settings.m_iqImbalance) || force)
{
forwardChange = true;
if(m_dev != 0)
{
if( rtlsdr_set_sample_rate(m_dev, settings.m_devSampleRate) < 0)
{
qCritical("RTLSDRInput::applySettings: could not set sample rate: %d", settings.m_devSampleRate);
}
else
{
m_settings.m_devSampleRate = settings.m_devSampleRate;
m_rtlSDRThread->setSamplerate(settings.m_devSampleRate);
qDebug("RTLSDRInput::applySettings: sample rate set to %d", m_settings.m_devSampleRate);
}
}
m_settings.m_iqImbalance = settings.m_iqImbalance;
m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance);
}
if ((m_settings.m_loPpmCorrection != settings.m_loPpmCorrection) || force)
@ -265,20 +247,34 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force)
}
}
if ((m_settings.m_log2Decim != settings.m_log2Decim) || force)
if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force)
{
m_settings.m_devSampleRate = settings.m_devSampleRate;
forwardChange = true;
if(m_dev != 0)
{
m_settings.m_log2Decim = settings.m_log2Decim;
m_rtlSDRThread->setLog2Decimation(settings.m_log2Decim);
if( rtlsdr_set_sample_rate(m_dev, settings.m_devSampleRate) < 0)
{
qCritical("RTLSDRInput::applySettings: could not set sample rate: %d", settings.m_devSampleRate);
}
else
{
m_rtlSDRThread->setSamplerate(settings.m_devSampleRate);
qDebug("RTLSDRInput::applySettings: sample rate set to %d", m_settings.m_devSampleRate);
}
}
}
if (m_settings.m_centerFrequency != settings.m_centerFrequency)
if ((m_settings.m_log2Decim != settings.m_log2Decim) || force)
{
m_settings.m_log2Decim = settings.m_log2Decim;
forwardChange = true;
if(m_dev != 0)
{
m_rtlSDRThread->setLog2Decimation(settings.m_log2Decim);
}
}
qint64 deviceCenterFrequency = m_settings.m_centerFrequency;
@ -289,6 +285,7 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force)
|| (m_settings.m_fcPos != settings.m_fcPos))
{
m_settings.m_centerFrequency = settings.m_centerFrequency;
forwardChange = true;
if ((m_settings.m_log2Decim == 0) || (settings.m_fcPos == RTLSDRSettings::FC_POS_CENTER))
{
@ -337,38 +334,6 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force)
}
}
/*
if(m_dev != 0)
{
qint64 centerFrequency = m_settings.m_centerFrequency + (m_settings.m_devSampleRate / 4);
if (m_settings.m_log2Decim == 0)
{ // Little wooby-doop if no decimation
centerFrequency = m_settings.m_centerFrequency;
}
else
{
centerFrequency = m_settings.m_centerFrequency + (m_settings.m_devSampleRate / 4);
}
if (rtlsdr_set_center_freq( m_dev, centerFrequency ) != 0)
{
qDebug("rtlsdr_set_center_freq(%lld) failed", m_settings.m_centerFrequency);
}
}*/
if ((m_settings.m_dcBlock != settings.m_dcBlock) || force)
{
m_settings.m_dcBlock = settings.m_dcBlock;
m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance);
}
if ((m_settings.m_iqImbalance != settings.m_iqImbalance) || force)
{
m_settings.m_iqImbalance = settings.m_iqImbalance;
m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance);
}
if (forwardChange)
{
int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2Decim);