mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-26 09:48:45 -05:00
ATV demod: fixed initialization issues. Fixes #560
This commit is contained in:
parent
dadf51b6d7
commit
99586c7be6
@ -36,6 +36,7 @@ const QString ATVDemod::m_channelId = "ATVDemod";
|
||||
ATVDemod::ATVDemod(DeviceAPI *deviceAPI) :
|
||||
ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink),
|
||||
m_deviceAPI(deviceAPI),
|
||||
m_centerFrequency(0),
|
||||
m_basebandSampleRate(0)
|
||||
{
|
||||
qDebug("ATVDemod::ATVDemod");
|
||||
@ -64,12 +65,16 @@ void ATVDemod::start()
|
||||
{
|
||||
qDebug("ATVDemod::start");
|
||||
|
||||
if (m_basebandSampleRate != 0) {
|
||||
m_basebandSink->setBasebandSampleRate(m_basebandSampleRate);
|
||||
}
|
||||
|
||||
m_basebandSink->reset();
|
||||
m_thread->start();
|
||||
|
||||
// re-apply essential messages
|
||||
|
||||
DSPSignalNotification* notifToSink = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency);
|
||||
m_basebandSink->getInputMessageQueue()->push(notifToSink);
|
||||
|
||||
ATVDemodBaseband::MsgConfigureATVDemodBaseband *msg = ATVDemodBaseband::MsgConfigureATVDemodBaseband::create(m_settings, true);
|
||||
m_basebandSink->getInputMessageQueue()->push(msg);
|
||||
}
|
||||
|
||||
void ATVDemod::stop()
|
||||
@ -97,6 +102,7 @@ bool ATVDemod::handleMessage(const Message& cmd)
|
||||
else if (DSPSignalNotification::match(cmd))
|
||||
{
|
||||
DSPSignalNotification& notif = (DSPSignalNotification&) cmd;
|
||||
m_centerFrequency = notif.getCenterFrequency();
|
||||
m_basebandSampleRate = notif.getSampleRate(); // store for init at start
|
||||
qDebug() << "ATVDemod::handleMessage: DSPSignalNotification" << m_basebandSampleRate;
|
||||
|
||||
|
@ -100,7 +100,8 @@ private:
|
||||
QThread *m_thread;
|
||||
ATVDemodBaseband* m_basebandSink;
|
||||
ATVDemodSettings m_settings;
|
||||
int m_basebandSampleRate; //!< stored from device message used when starting baseband sink
|
||||
qint64 m_centerFrequency; //!< center frequency stored from device message used when starting baseband sink
|
||||
int m_basebandSampleRate; //!< sample rate stored from device message used when starting baseband sink
|
||||
|
||||
void applySettings(const ATVDemodSettings& settings, bool force = false);
|
||||
};
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include "atvdemodbaseband.h"
|
||||
|
||||
MESSAGE_CLASS_DEFINITION(ATVDemodBaseband::MsgConfigureATVDemodBaseband, Message)
|
||||
MESSAGE_CLASS_DEFINITION(ATVDemodBaseband::MsgConfigureChannelizer, Message)
|
||||
|
||||
ATVDemodBaseband::ATVDemodBaseband() :
|
||||
m_mutex(QMutex::Recursive)
|
||||
@ -52,6 +51,7 @@ ATVDemodBaseband::~ATVDemodBaseband()
|
||||
void ATVDemodBaseband::reset()
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
m_inputMessageQueue.clear();
|
||||
m_sampleFifo.reset();
|
||||
}
|
||||
|
||||
@ -111,18 +111,6 @@ bool ATVDemodBaseband::handleMessage(const Message& cmd)
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (MsgConfigureChannelizer::match(cmd))
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
MsgConfigureChannelizer& cfg = (MsgConfigureChannelizer&) cmd;
|
||||
qDebug() << "ATVDemodBaseband::handleMessage: MsgConfigureChannelizer"
|
||||
<< "(requested) sinkSampleRate: " << cfg.getSinkSampleRate()
|
||||
<< "(requested) sinkCenterFrequency: " << cfg.getSinkCenterFrequency();
|
||||
m_channelizer->setChannelization(cfg.getSinkSampleRate(), cfg.getSinkCenterFrequency());
|
||||
m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset());
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (DSPSignalNotification::match(cmd))
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
|
@ -56,28 +56,6 @@ public:
|
||||
{ }
|
||||
};
|
||||
|
||||
class MsgConfigureChannelizer : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
int getSinkSampleRate() const { return m_sinkSampleRate; }
|
||||
int getSinkCenterFrequency() const { return m_sinkCenterFrequency; }
|
||||
|
||||
static MsgConfigureChannelizer* create(int sinkSampleRate, int sinkCenterFrequency) {
|
||||
return new MsgConfigureChannelizer(sinkSampleRate, sinkCenterFrequency);
|
||||
}
|
||||
|
||||
private:
|
||||
int m_sinkSampleRate;
|
||||
int m_sinkCenterFrequency;
|
||||
|
||||
MsgConfigureChannelizer(int sinkSampleRate, int sinkCenterFrequency) :
|
||||
Message(),
|
||||
m_sinkSampleRate(sinkSampleRate),
|
||||
m_sinkCenterFrequency(sinkCenterFrequency)
|
||||
{ }
|
||||
};
|
||||
|
||||
ATVDemodBaseband();
|
||||
~ATVDemodBaseband();
|
||||
void reset();
|
||||
|
@ -109,7 +109,7 @@ void ATVDemodGUI::displaySettings()
|
||||
setWindowTitle(m_channelMarker.getTitle());
|
||||
displayStreamIndex();
|
||||
|
||||
blockApplySettings(true);
|
||||
m_doApplySettings = false;
|
||||
|
||||
//********** ATV values **********
|
||||
ui->synchLevel->setValue((int) (m_settings.m_levelSynchroTop * 1000.0f));
|
||||
@ -130,6 +130,7 @@ void ATVDemodGUI::displaySettings()
|
||||
topTimeUpdate();
|
||||
|
||||
//********** RF values **********
|
||||
ui->deltaFrequency->setValue(m_settings.m_inputFrequencyOffset);
|
||||
ui->decimatorEnable->setChecked(m_settings.m_forceDecimator);
|
||||
ui->rfFiltering->setChecked(m_settings.m_fftFiltering);
|
||||
ui->bfo->setValue(m_settings.m_bfoFrequency);
|
||||
@ -140,9 +141,10 @@ void ATVDemodGUI::displaySettings()
|
||||
ui->amScaleFactorText->setText(QString("%1").arg(m_settings.m_amScalingFactor));
|
||||
ui->amScaleOffset->setValue(m_settings.m_amOffsetFactor);
|
||||
ui->amScaleOffsetText->setText(QString("%1").arg(m_settings.m_amOffsetFactor));
|
||||
blockApplySettings(false);
|
||||
|
||||
applyTVSampleRate();
|
||||
|
||||
m_doApplySettings = true;
|
||||
}
|
||||
|
||||
void ATVDemodGUI::displayStreamIndex()
|
||||
@ -168,7 +170,7 @@ void ATVDemodGUI::displayRFBandwidths()
|
||||
|
||||
void ATVDemodGUI::applyTVSampleRate()
|
||||
{
|
||||
blockApplySettings(true);
|
||||
qDebug("TVDemodGUI::applyTVSampleRate");
|
||||
unsigned int nbPointsPerLine;
|
||||
ATVDemodSettings::getBaseValues(m_basebandSampleRate, m_settings.m_fps*m_settings.m_nbLines, m_tvSampleRate, nbPointsPerLine);
|
||||
ui->tvSampleRateText->setText(tr("%1k").arg(m_tvSampleRate/1000.0f, 0, 'f', 2));
|
||||
@ -178,7 +180,6 @@ void ATVDemodGUI::applyTVSampleRate()
|
||||
displayRFBandwidths();
|
||||
lineTimeUpdate();
|
||||
topTimeUpdate();
|
||||
blockApplySettings(false);
|
||||
}
|
||||
|
||||
bool ATVDemodGUI::handleMessage(const Message& message)
|
||||
@ -235,7 +236,7 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base
|
||||
m_pluginAPI(objPluginAPI),
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_blnDoApplySettings(true),
|
||||
m_doApplySettings(false),
|
||||
m_intTickCount(0),
|
||||
m_basebandSampleRate(48000),
|
||||
m_tvSampleRate(48000)
|
||||
@ -306,14 +307,11 @@ ATVDemodGUI::~ATVDemodGUI()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void ATVDemodGUI::blockApplySettings(bool blnBlock)
|
||||
{
|
||||
m_blnDoApplySettings = !blnBlock;
|
||||
}
|
||||
|
||||
void ATVDemodGUI::applySettings(bool force)
|
||||
{
|
||||
if (m_blnDoApplySettings)
|
||||
qDebug() << "ATVDemodGUI::applySettings: " << force << " m_doApplySettings: " << m_doApplySettings;
|
||||
|
||||
if (m_doApplySettings)
|
||||
{
|
||||
ATVDemod::MsgConfigureATVDemod *msg = ATVDemod::MsgConfigureATVDemod::create(m_settings, force);
|
||||
m_atvDemod->getInputMessageQueue()->push(msg);
|
||||
@ -322,8 +320,12 @@ void ATVDemodGUI::applySettings(bool force)
|
||||
|
||||
void ATVDemodGUI::setChannelMarkerBandwidth()
|
||||
{
|
||||
m_blnDoApplySettings = false; // avoid infinite recursion
|
||||
// avoid infinite recursion
|
||||
m_channelMarker.blockSignals(true);
|
||||
ui->rfFiltering->blockSignals(true);
|
||||
ui->rfBW->blockSignals(true);
|
||||
ui->rfOppBW->blockSignals(true);
|
||||
ui->modulation->blockSignals(true);
|
||||
|
||||
if (ui->rfFiltering->isChecked()) // FFT filter
|
||||
{
|
||||
@ -351,7 +353,11 @@ void ATVDemodGUI::setChannelMarkerBandwidth()
|
||||
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.emitChangedByAPI();
|
||||
m_blnDoApplySettings = true;
|
||||
|
||||
ui->rfFiltering->blockSignals(false);
|
||||
ui->rfBW->blockSignals(false);
|
||||
ui->rfOppBW->blockSignals(false);
|
||||
ui->modulation->blockSignals(false);
|
||||
}
|
||||
|
||||
void ATVDemodGUI::setRFFiltersSlidersRange(int sampleRate)
|
||||
|
@ -69,7 +69,7 @@ private:
|
||||
ATVDemod* m_atvDemod;
|
||||
ATVDemodSettings m_settings;
|
||||
|
||||
bool m_blnDoApplySettings;
|
||||
bool m_doApplySettings;
|
||||
|
||||
MovingAverageUtil<double, double, 4> m_objMagSqAverage;
|
||||
int m_intTickCount;
|
||||
@ -85,7 +85,6 @@ private:
|
||||
explicit ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* objParent = 0);
|
||||
virtual ~ATVDemodGUI();
|
||||
|
||||
void blockApplySettings(bool blnBlock);
|
||||
void applySettings(bool force = false);
|
||||
void displaySettings();
|
||||
void displayStreamIndex();
|
||||
|
Loading…
Reference in New Issue
Block a user