mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-04 05:30:32 -05:00 
			
		
		
		
	DATV demod: refactoring of classes
This commit is contained in:
		
							parent
							
								
									735f1cdbb4
								
							
						
					
					
						commit
						6ee705fcd7
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -24,36 +24,14 @@ class DeviceAPI;
 | 
				
			|||||||
class ThreadedBasebandSampleSink;
 | 
					class ThreadedBasebandSampleSink;
 | 
				
			||||||
class DownChannelizer;
 | 
					class DownChannelizer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "datvconstellation.h"
 | 
					 | 
				
			||||||
#include "datvdvbs2constellation.h"
 | 
					 | 
				
			||||||
#include "datvvideoplayer.h"
 | 
					 | 
				
			||||||
#include "datvideostream.h"
 | 
					 | 
				
			||||||
#include "datvudpstream.h"
 | 
					 | 
				
			||||||
#include "datvideorender.h"
 | 
					 | 
				
			||||||
#include "datvdemodsettings.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "channel/channelapi.h"
 | 
					#include "channel/channelapi.h"
 | 
				
			||||||
#include "dsp/basebandsamplesink.h"
 | 
					#include "dsp/basebandsamplesink.h"
 | 
				
			||||||
#include "dsp/devicesamplesource.h"
 | 
					#include "dsp/devicesamplesource.h"
 | 
				
			||||||
#include "dsp/dspcommands.h"
 | 
					#include "dsp/dspcommands.h"
 | 
				
			||||||
#include "dsp/downchannelizer.h"
 | 
					 | 
				
			||||||
#include "dsp/fftfilt.h"
 | 
					 | 
				
			||||||
#include "dsp/nco.h"
 | 
					 | 
				
			||||||
#include "dsp/interpolator.h"
 | 
					 | 
				
			||||||
#include "dsp/movingaverage.h"
 | 
					 | 
				
			||||||
#include "dsp/agc.h"
 | 
					 | 
				
			||||||
#include "audio/audiofifo.h"
 | 
					 | 
				
			||||||
#include "util/message.h"
 | 
					#include "util/message.h"
 | 
				
			||||||
#include "util/movingaverage.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QMutex>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "datvdemodbaseband.h"
 | 
					#include "datvdemodbaseband.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// enum DATVModulation { BPSK, QPSK, PSK8, APSK16, APSK32, APSK64E, QAM16, QAM64, QAM256 };
 | 
					 | 
				
			||||||
// enum dvb_version { DVB_S, DVB_S2 };
 | 
					 | 
				
			||||||
// enum dvb_sampler { SAMP_NEAREST, SAMP_LINEAR, SAMP_RRC };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DATVDemod : public BasebandSampleSink, public ChannelAPI
 | 
					class DATVDemod : public BasebandSampleSink, public ChannelAPI
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -135,7 +113,6 @@ private:
 | 
				
			|||||||
    int m_basebandSampleRate; //!< stored from device message used when starting baseband sink
 | 
					    int m_basebandSampleRate; //!< stored from device message used when starting baseband sink
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void applySettings(const DATVDemodSettings& settings, bool force = false);
 | 
					    void applySettings(const DATVDemodSettings& settings, bool force = false);
 | 
				
			||||||
	void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false);
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // INCLUDE_DATVDEMOD_H
 | 
					#endif // INCLUDE_DATVDEMOD_H
 | 
				
			||||||
 | 
				
			|||||||
@ -151,6 +151,13 @@ void DATVDemodBaseband::applySettings(const DATVDemodSettings& settings, bool fo
 | 
				
			|||||||
        m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset());
 | 
					        m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
 | 
				
			||||||
 | 
					        int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName);
 | 
				
			||||||
 | 
					        audioDeviceManager->addAudioSink(m_sink.getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_sink.applySettings(settings, force);
 | 
					    m_sink.applySettings(settings, force);
 | 
				
			||||||
    m_settings = settings;
 | 
					    m_settings = settings;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -21,21 +21,21 @@
 | 
				
			|||||||
#include <QMainWindow>
 | 
					#include <QMainWindow>
 | 
				
			||||||
#include <QMediaMetaData>
 | 
					#include <QMediaMetaData>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "datvdemodgui.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "device/deviceuiset.h"
 | 
					#include "device/deviceuiset.h"
 | 
				
			||||||
#include "dsp/downchannelizer.h"
 | 
					#include "dsp/downchannelizer.h"
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "dsp/threadedbasebandsamplesink.h"
 | 
					#include "dsp/threadedbasebandsamplesink.h"
 | 
				
			||||||
#include "ui_datvdemodgui.h"
 | 
					#include "dsp/dspengine.h"
 | 
				
			||||||
#include "plugin/pluginapi.h"
 | 
					#include "plugin/pluginapi.h"
 | 
				
			||||||
#include "util/simpleserializer.h"
 | 
					#include "util/simpleserializer.h"
 | 
				
			||||||
#include "util/db.h"
 | 
					#include "util/db.h"
 | 
				
			||||||
#include "dsp/dspengine.h"
 | 
					#include "ui_datvdemodgui.h"
 | 
				
			||||||
#include "gui/crightclickenabler.h"
 | 
					#include "gui/crightclickenabler.h"
 | 
				
			||||||
#include "gui/audioselectdialog.h"
 | 
					#include "gui/audioselectdialog.h"
 | 
				
			||||||
#include "mainwindow.h"
 | 
					#include "mainwindow.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "datvdemodreport.h"
 | 
				
			||||||
 | 
					#include "datvdemodgui.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const QString DATVDemodGUI::m_strChannelID = "sdrangel.channel.demoddatv";
 | 
					const QString DATVDemodGUI::m_strChannelID = "sdrangel.channel.demoddatv";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DATVDemodGUI* DATVDemodGUI::create(PluginAPI* objPluginAPI,
 | 
					DATVDemodGUI* DATVDemodGUI::create(PluginAPI* objPluginAPI,
 | 
				
			||||||
@ -101,9 +101,9 @@ bool DATVDemodGUI::deserialize(const QByteArray& arrData)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool DATVDemodGUI::handleMessage(const Message& message)
 | 
					bool DATVDemodGUI::handleMessage(const Message& message)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (DATVDemod::MsgReportModcodCstlnChange::match(message))
 | 
					    if (DATVDemodReport::MsgReportModcodCstlnChange::match(message))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        DATVDemod::MsgReportModcodCstlnChange& notif = (DATVDemod::MsgReportModcodCstlnChange&) message;
 | 
					        DATVDemodReport::MsgReportModcodCstlnChange& notif = (DATVDemodReport::MsgReportModcodCstlnChange&) message;
 | 
				
			||||||
        m_settings.m_fec = notif.getCodeRate();
 | 
					        m_settings.m_fec = notif.getCodeRate();
 | 
				
			||||||
        m_settings.m_modulation = notif.getModulation();
 | 
					        m_settings.m_modulation = notif.getModulation();
 | 
				
			||||||
        m_settings.validateSystemConfiguration();
 | 
					        m_settings.validateSystemConfiguration();
 | 
				
			||||||
@ -351,9 +351,6 @@ void DATVDemodGUI::applySettings(bool force)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug("DATVDemodGUI::applySettings");
 | 
					        qDebug("DATVDemodGUI::applySettings");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DATVDemod::MsgConfigureChannelizer *msgChan = DATVDemod::MsgConfigureChannelizer::create(m_objChannelMarker.getCenterFrequency());
 | 
					 | 
				
			||||||
        m_objDATVDemod->getInputMessageQueue()->push(msgChan);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        setTitleColor(m_objChannelMarker.getColor());
 | 
					        setTitleColor(m_objChannelMarker.getColor());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force ? "true" : "false");
 | 
					        QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force ? "true" : "false");
 | 
				
			||||||
@ -403,8 +400,8 @@ void DATVDemodGUI::tick()
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            m_modcodModulationIndex = m_objDATVDemod->getModcodModulation();
 | 
					            m_modcodModulationIndex = m_objDATVDemod->getModcodModulation();
 | 
				
			||||||
            m_modcodCodeRateIndex = m_objDATVDemod->getModcodCodeRate();
 | 
					            m_modcodCodeRateIndex = m_objDATVDemod->getModcodCodeRate();
 | 
				
			||||||
            DATVDemodSettings::DATVModulation modulation = DATVDemod::getModulationFromLeanDVBCode(m_modcodModulationIndex);
 | 
					            DATVDemodSettings::DATVModulation modulation = DATVDemodSettings::getModulationFromLeanDVBCode(m_modcodModulationIndex);
 | 
				
			||||||
            DATVDemodSettings::DATVCodeRate rate = DATVDemod::getCodeRateFromLeanDVBCode(m_modcodCodeRateIndex);
 | 
					            DATVDemodSettings::DATVCodeRate rate = DATVDemodSettings::getCodeRateFromLeanDVBCode(m_modcodCodeRateIndex);
 | 
				
			||||||
            QString modcodModulationStr = DATVDemodSettings::getStrFromModulation(modulation);
 | 
					            QString modcodModulationStr = DATVDemodSettings::getStrFromModulation(modulation);
 | 
				
			||||||
            QString modcodCodeRateStr = DATVDemodSettings::getStrFromCodeRate(rate);
 | 
					            QString modcodCodeRateStr = DATVDemodSettings::getStrFromCodeRate(rate);
 | 
				
			||||||
            ui->statusText->setText(tr("MCOD %1 %2").arg(modcodModulationStr).arg(modcodCodeRateStr));
 | 
					            ui->statusText->setText(tr("MCOD %1 %2").arg(modcodModulationStr).arg(modcodCodeRateStr));
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,9 @@
 | 
				
			|||||||
#include <QColor>
 | 
					#include <QColor>
 | 
				
			||||||
#include <QDebug>
 | 
					#include <QDebug>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "leansdr/dvb.h"
 | 
				
			||||||
 | 
					#include "leansdr/sdr.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "dsp/dspengine.h"
 | 
					#include "dsp/dspengine.h"
 | 
				
			||||||
#include "util/simpleserializer.h"
 | 
					#include "util/simpleserializer.h"
 | 
				
			||||||
#include "settings/serializable.h"
 | 
					#include "settings/serializable.h"
 | 
				
			||||||
@ -457,3 +460,62 @@ void DATVDemodSettings::getAvailableCodeRates(dvb_version dvbStandard, DATVModul
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DATVDemodSettings::DATVCodeRate DATVDemodSettings::getCodeRateFromLeanDVBCode(int leanDVBCodeRate)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (leanDVBCodeRate == leansdr::code_rate::FEC12) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC12;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC13) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC13;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC14) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC14;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC23) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC23;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC25) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC25;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC34) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC34;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC35) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC35;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC45) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC45;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC46) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC46;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC56) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC56;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC78) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC78;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC89) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC89;
 | 
				
			||||||
 | 
					    } else if (leanDVBCodeRate == leansdr::code_rate::FEC910) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::FEC910;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVCodeRate::RATE_UNSET;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DATVDemodSettings::DATVModulation DATVDemodSettings::getModulationFromLeanDVBCode(int leanDVBModulation)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (leanDVBModulation == leansdr::cstln_base::predef::APSK16) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::APSK16;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::APSK32) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::APSK32;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::APSK64E) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::APSK64E;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::BPSK) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::BPSK;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::PSK8) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::PSK8;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::QAM16) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::QAM16;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::QAM64) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::QAM64;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::QAM256) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::QAM256;
 | 
				
			||||||
 | 
					    } else if (leanDVBModulation == leansdr::cstln_base::predef::QPSK) {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::QPSK;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return DATVDemodSettings::DATVModulation::MOD_UNSET;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -112,6 +112,8 @@ struct DATVDemodSettings
 | 
				
			|||||||
    static QString getStrFromCodeRate(const DATVCodeRate codeRate);
 | 
					    static QString getStrFromCodeRate(const DATVCodeRate codeRate);
 | 
				
			||||||
    static void getAvailableModulations(dvb_version dvbStandard, std::vector<DATVModulation>& modulations);
 | 
					    static void getAvailableModulations(dvb_version dvbStandard, std::vector<DATVModulation>& modulations);
 | 
				
			||||||
    static void getAvailableCodeRates(dvb_version dvbStandard, DATVModulation modulation, std::vector<DATVCodeRate>& codeRates);
 | 
					    static void getAvailableCodeRates(dvb_version dvbStandard, DATVModulation modulation, std::vector<DATVCodeRate>& codeRates);
 | 
				
			||||||
 | 
					    static DATVDemodSettings::DATVCodeRate getCodeRateFromLeanDVBCode(int leanDVBCodeRate);
 | 
				
			||||||
 | 
					    static DATVDemodSettings::DATVModulation getModulationFromLeanDVBCode(int leanDVBModulation);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // PLUGINS_CHANNELRX_DEMODATV_DATVDEMODSETTINGS_H_
 | 
					#endif // PLUGINS_CHANNELRX_DEMODATV_DATVDEMODSETTINGS_H_
 | 
				
			||||||
@ -15,23 +15,21 @@
 | 
				
			|||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					// along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "datvdemodreport.h"
 | 
					 | 
				
			||||||
#include "datvdemodsink.h"
 | 
					#include "datvdemodsink.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "leansdr/dvbs2.h"
 | 
					#include "leansdr/dvbs2.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QTime>
 | 
					 | 
				
			||||||
#include <QDebug>
 | 
					#include <QDebug>
 | 
				
			||||||
#include <QObject>
 | 
					#include <QObject>
 | 
				
			||||||
#include <stdio.h>
 | 
					
 | 
				
			||||||
#include <complex.h>
 | 
					 | 
				
			||||||
#include "audio/audiooutput.h"
 | 
					#include "audio/audiooutput.h"
 | 
				
			||||||
#include "dsp/dspengine.h"
 | 
					#include "dsp/dspengine.h"
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "dsp/downchannelizer.h"
 | 
					#include "dsp/downchannelizer.h"
 | 
				
			||||||
#include "dsp/threadedbasebandsamplesink.h"
 | 
					#include "dsp/threadedbasebandsamplesink.h"
 | 
				
			||||||
#include "device/deviceapi.h"
 | 
					#include "device/deviceapi.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "datvdemodreport.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const unsigned int DATVDemodSink::m_rfFilterFftLength = 1024;
 | 
					const unsigned int DATVDemodSink::m_rfFilterFftLength = 1024;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DATVDemodSink::DATVDemodSink() :
 | 
					DATVDemodSink::DATVDemodSink() :
 | 
				
			||||||
@ -1174,7 +1172,7 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (m_blnNeedConfigUpdate)
 | 
					        if (m_blnNeedConfigUpdate)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            qDebug("DATVDemod::feed: Settings applied. Standard : %d...", m_settings.m_standard);
 | 
					            qDebug("DATVDemodSink::feed: Settings applied. Standard : %d...", m_settings.m_standard);
 | 
				
			||||||
            m_blnNeedConfigUpdate=false;
 | 
					            m_blnNeedConfigUpdate=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(m_settings.m_standard==DATVDemodSettings::DVB_S2)
 | 
					            if(m_settings.m_standard==DATVDemodSettings::DVB_S2)
 | 
				
			||||||
@ -1238,7 +1236,7 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (objDemodulatorDVBS2->cstln->m_setByModcod && !m_cstlnSetByModcod)
 | 
					        if (objDemodulatorDVBS2->cstln->m_setByModcod && !m_cstlnSetByModcod)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            qDebug("DATVDemod::feed: change by MODCOD detected");
 | 
					            qDebug("DATVDemodSink::feed: change by MODCOD detected");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (r_scope_symbols_dvbs2) {
 | 
					            if (r_scope_symbols_dvbs2) {
 | 
				
			||||||
                r_scope_symbols_dvbs2->calculate_cstln_points();
 | 
					                r_scope_symbols_dvbs2->calculate_cstln_points();
 | 
				
			||||||
@ -1247,8 +1245,8 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
 | 
				
			|||||||
            if (getMessageQueueToGUI())
 | 
					            if (getMessageQueueToGUI())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                DATVDemodReport::MsgReportModcodCstlnChange *msg = DATVDemodReport::MsgReportModcodCstlnChange::create(
 | 
					                DATVDemodReport::MsgReportModcodCstlnChange *msg = DATVDemodReport::MsgReportModcodCstlnChange::create(
 | 
				
			||||||
                    getModulationFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_typeCode),
 | 
					                    DATVDemodSettings::getModulationFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_typeCode),
 | 
				
			||||||
                    getCodeRateFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_rateCode)
 | 
					                    DATVDemodSettings::getCodeRateFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_rateCode)
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                getMessageQueueToGUI()->push(msg);
 | 
					                getMessageQueueToGUI()->push(msg);
 | 
				
			||||||
@ -1273,7 +1271,7 @@ void DATVDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequ
 | 
				
			|||||||
        (m_channelSampleRate != channelSampleRate) || force)
 | 
					        (m_channelSampleRate != channelSampleRate) || force)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        m_objNCO.setFreq(-(float) channelFrequencyOffset, (float) channelSampleRate);
 | 
					        m_objNCO.setFreq(-(float) channelFrequencyOffset, (float) channelSampleRate);
 | 
				
			||||||
        qDebug("DATVDemod::applyChannelSettings: NCO: IF: %d <> TF: %d ISR: %d",
 | 
					        qDebug("DATVDemodSink::applyChannelSettings: NCO: IF: %d <> TF: %d ISR: %d",
 | 
				
			||||||
            channelFrequencyOffset, m_settings.m_centerFrequency, channelSampleRate);
 | 
					            channelFrequencyOffset, m_settings.m_centerFrequency, channelSampleRate);
 | 
				
			||||||
        callApplySettings = true;
 | 
					        callApplySettings = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -1362,64 +1360,6 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force)
 | 
				
			|||||||
    m_settings = settings;
 | 
					    m_settings = settings;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DATVDemodSettings::DATVCodeRate DATVDemodSink::getCodeRateFromLeanDVBCode(int leanDVBCodeRate)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (leanDVBCodeRate == leansdr::code_rate::FEC12) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC12;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC13) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC13;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC14) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC14;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC23) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC23;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC25) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC25;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC34) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC34;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC35) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC35;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC45) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC45;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC46) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC46;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC56) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC56;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC78) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC78;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC89) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC89;
 | 
					 | 
				
			||||||
    } else if (leanDVBCodeRate == leansdr::code_rate::FEC910) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::FEC910;
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVCodeRate::RATE_UNSET;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DATVDemodSettings::DATVModulation DATVDemodSink::getModulationFromLeanDVBCode(int leanDVBModulation)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (leanDVBModulation == leansdr::cstln_base::predef::APSK16) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::APSK16;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::APSK32) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::APSK32;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::APSK64E) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::APSK64E;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::BPSK) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::BPSK;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::PSK8) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::PSK8;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::QAM16) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::QAM16;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::QAM64) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::QAM64;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::QAM256) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::QAM256;
 | 
					 | 
				
			||||||
    } else if (leanDVBModulation == leansdr::cstln_base::predef::QPSK) {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::QPSK;
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        return DATVDemodSettings::DATVModulation::MOD_UNSET;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int DATVDemodSink::getLeanDVBCodeRateFromDATV(DATVDemodSettings::DATVCodeRate datvCodeRate)
 | 
					int DATVDemodSink::getLeanDVBCodeRateFromDATV(DATVDemodSettings::DATVCodeRate datvCodeRate)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (datvCodeRate == DATVDemodSettings::DATVCodeRate::FEC12) {
 | 
					    if (datvCodeRate == DATVDemodSettings::DATVCodeRate::FEC12) {
 | 
				
			||||||
 | 
				
			|||||||
@ -35,28 +35,47 @@
 | 
				
			|||||||
#include "datvideorender.h"
 | 
					#include "datvideorender.h"
 | 
				
			||||||
#include "datvdemodsettings.h"
 | 
					#include "datvdemodsettings.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "channel/channelapi.h"
 | 
					 | 
				
			||||||
#include "dsp/channelsamplesink.h"
 | 
					#include "dsp/channelsamplesink.h"
 | 
				
			||||||
#include "dsp/basebandsamplesink.h"
 | 
					 | 
				
			||||||
#include "dsp/devicesamplesource.h"
 | 
					 | 
				
			||||||
#include "dsp/dspcommands.h"
 | 
					 | 
				
			||||||
#include "dsp/downchannelizer.h"
 | 
					 | 
				
			||||||
#include "dsp/fftfilt.h"
 | 
					#include "dsp/fftfilt.h"
 | 
				
			||||||
#include "dsp/nco.h"
 | 
					#include "dsp/nco.h"
 | 
				
			||||||
#include "dsp/interpolator.h"
 | 
					#include "dsp/interpolator.h"
 | 
				
			||||||
#include "dsp/movingaverage.h"
 | 
					#include "dsp/movingaverage.h"
 | 
				
			||||||
#include "dsp/agc.h"
 | 
					#include "dsp/agc.h"
 | 
				
			||||||
#include "audio/audiofifo.h"
 | 
					#include "audio/audiofifo.h"
 | 
				
			||||||
#include "util/message.h"
 | 
					#include "util/messagequeue.h"
 | 
				
			||||||
#include "util/movingaverage.h"
 | 
					#include "util/movingaverage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QMutex>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TVScreen;
 | 
					class TVScreen;
 | 
				
			||||||
class DATVideoRender;
 | 
					class DATVideoRender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DATVDemodSink : public ChannelSampleSink {
 | 
					class DATVDemodSink : public ChannelSampleSink {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
 | 
					    DATVDemodSink();
 | 
				
			||||||
 | 
						~DATVDemodSink();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool setTVScreen(TVScreen *objScreen);
 | 
				
			||||||
 | 
					    DATVideostream * SetVideoRender(DATVideoRender *objScreen);
 | 
				
			||||||
 | 
					    bool audioActive();
 | 
				
			||||||
 | 
					    bool audioDecodeOK();
 | 
				
			||||||
 | 
					    bool videoActive();
 | 
				
			||||||
 | 
					    bool videoDecodeOK();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool PlayVideo(bool blnStartStop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int GetSampleRate();
 | 
				
			||||||
 | 
					    double getMagSq() const { return m_objMagSqAverage; } //!< Beware this is scaled to 2^30
 | 
				
			||||||
 | 
					    int getModcodModulation() const { return m_modcodModulation; }
 | 
				
			||||||
 | 
					    int getModcodCodeRate() const { return m_modcodCodeRate; }
 | 
				
			||||||
 | 
					    bool isCstlnSetByModcod() const { return m_cstlnSetByModcod; }
 | 
				
			||||||
 | 
					    void setMessageQueueToGUI(MessageQueue *messageQueue) { m_messageQueueToGUI = messageQueue; }
 | 
				
			||||||
 | 
					    AudioFifo *getAudioFifo() { return &m_audioFifo; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void applySettings(const DATVDemodSettings& settings, bool force = false);
 | 
				
			||||||
 | 
						void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
    struct config
 | 
					    struct config
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        DATVDemodSettings::dvb_version standard;
 | 
					        DATVDemodSettings::dvb_version standard;
 | 
				
			||||||
@ -114,41 +133,17 @@ public:
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DATVDemodSink();
 | 
					 | 
				
			||||||
	~DATVDemodSink();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool setTVScreen(TVScreen *objScreen);
 | 
					 | 
				
			||||||
    DATVideostream * SetVideoRender(DATVideoRender *objScreen);
 | 
					 | 
				
			||||||
    bool audioActive();
 | 
					 | 
				
			||||||
    bool audioDecodeOK();
 | 
					 | 
				
			||||||
    bool videoActive();
 | 
					 | 
				
			||||||
    bool videoDecodeOK();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool PlayVideo(bool blnStartStop);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    int GetSampleRate();
 | 
					 | 
				
			||||||
    double getMagSq() const { return m_objMagSqAverage; } //!< Beware this is scaled to 2^30
 | 
					 | 
				
			||||||
    int getModcodModulation() const { return m_modcodModulation; }
 | 
					 | 
				
			||||||
    int getModcodCodeRate() const { return m_modcodCodeRate; }
 | 
					 | 
				
			||||||
    bool isCstlnSetByModcod() const { return m_cstlnSetByModcod; }
 | 
					 | 
				
			||||||
    static DATVDemodSettings::DATVCodeRate getCodeRateFromLeanDVBCode(int leanDVBCodeRate);
 | 
					 | 
				
			||||||
    static DATVDemodSettings::DATVModulation getModulationFromLeanDVBCode(int leanDVBModulation);
 | 
					 | 
				
			||||||
    static int getLeanDVBCodeRateFromDATV(DATVDemodSettings::DATVCodeRate datvCodeRate);
 | 
					 | 
				
			||||||
    static int getLeanDVBModulationFromDATV(DATVDemodSettings::DATVModulation datvModulation);
 | 
					 | 
				
			||||||
    void setMessageQueueToGUI(MessageQueue *messageQueue) { m_messageQueueToGUI = messageQueue; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void applySettings(const DATVDemodSettings& settings, bool force = false);
 | 
					 | 
				
			||||||
	void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    inline int decimation(float Fin, float Fout) { int d = Fin / Fout; return std::max(d, 1); }
 | 
					    inline int decimation(float Fin, float Fout) { int d = Fin / Fout; return std::max(d, 1); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void CleanUpDATVFramework(bool blnRelease);
 | 
					    void CleanUpDATVFramework(bool blnRelease);
 | 
				
			||||||
    void InitDATVFramework();
 | 
					    void InitDATVFramework();
 | 
				
			||||||
    void InitDATVS2Framework();
 | 
					    void InitDATVS2Framework();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static int getLeanDVBCodeRateFromDATV(DATVDemodSettings::DATVCodeRate datvCodeRate);
 | 
				
			||||||
 | 
					    static int getLeanDVBModulationFromDATV(DATVDemodSettings::DATVModulation datvModulation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unsigned long m_lngExpectedReadIQ;
 | 
					    unsigned long m_lngExpectedReadIQ;
 | 
				
			||||||
    long m_lngReadIQ;
 | 
					    long m_lngReadIQ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -308,9 +303,6 @@ private:
 | 
				
			|||||||
    MessageQueue *m_messageQueueToGUI;
 | 
					    MessageQueue *m_messageQueueToGUI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static const unsigned int m_rfFilterFftLength;
 | 
					    static const unsigned int m_rfFilterFftLength;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // INCLUDE_DATVDEMODSINK_H
 | 
					#endif // INCLUDE_DATVDEMODSINK_H
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user