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 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 "dsp/basebandsamplesink.h"
 | 
			
		||||
#include "dsp/devicesamplesource.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/movingaverage.h"
 | 
			
		||||
 | 
			
		||||
#include <QMutex>
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
{
 | 
			
		||||
@ -135,7 +113,6 @@ private:
 | 
			
		||||
    int m_basebandSampleRate; //!< stored from device message used when starting baseband sink
 | 
			
		||||
 | 
			
		||||
    void applySettings(const DATVDemodSettings& settings, bool force = false);
 | 
			
		||||
	void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#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());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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_settings = settings;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -21,21 +21,21 @@
 | 
			
		||||
#include <QMainWindow>
 | 
			
		||||
#include <QMediaMetaData>
 | 
			
		||||
 | 
			
		||||
#include "datvdemodgui.h"
 | 
			
		||||
 | 
			
		||||
#include "device/deviceuiset.h"
 | 
			
		||||
#include "dsp/downchannelizer.h"
 | 
			
		||||
 | 
			
		||||
#include "dsp/threadedbasebandsamplesink.h"
 | 
			
		||||
#include "ui_datvdemodgui.h"
 | 
			
		||||
#include "dsp/dspengine.h"
 | 
			
		||||
#include "plugin/pluginapi.h"
 | 
			
		||||
#include "util/simpleserializer.h"
 | 
			
		||||
#include "util/db.h"
 | 
			
		||||
#include "dsp/dspengine.h"
 | 
			
		||||
#include "ui_datvdemodgui.h"
 | 
			
		||||
#include "gui/crightclickenabler.h"
 | 
			
		||||
#include "gui/audioselectdialog.h"
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
 | 
			
		||||
#include "datvdemodreport.h"
 | 
			
		||||
#include "datvdemodgui.h"
 | 
			
		||||
 | 
			
		||||
const QString DATVDemodGUI::m_strChannelID = "sdrangel.channel.demoddatv";
 | 
			
		||||
 | 
			
		||||
DATVDemodGUI* DATVDemodGUI::create(PluginAPI* objPluginAPI,
 | 
			
		||||
@ -101,9 +101,9 @@ bool DATVDemodGUI::deserialize(const QByteArray& arrData)
 | 
			
		||||
 | 
			
		||||
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_modulation = notif.getModulation();
 | 
			
		||||
        m_settings.validateSystemConfiguration();
 | 
			
		||||
@ -351,9 +351,6 @@ void DATVDemodGUI::applySettings(bool force)
 | 
			
		||||
    {
 | 
			
		||||
        qDebug("DATVDemodGUI::applySettings");
 | 
			
		||||
 | 
			
		||||
        DATVDemod::MsgConfigureChannelizer *msgChan = DATVDemod::MsgConfigureChannelizer::create(m_objChannelMarker.getCenterFrequency());
 | 
			
		||||
        m_objDATVDemod->getInputMessageQueue()->push(msgChan);
 | 
			
		||||
 | 
			
		||||
        setTitleColor(m_objChannelMarker.getColor());
 | 
			
		||||
 | 
			
		||||
        QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force ? "true" : "false");
 | 
			
		||||
@ -403,8 +400,8 @@ void DATVDemodGUI::tick()
 | 
			
		||||
        {
 | 
			
		||||
            m_modcodModulationIndex = m_objDATVDemod->getModcodModulation();
 | 
			
		||||
            m_modcodCodeRateIndex = m_objDATVDemod->getModcodCodeRate();
 | 
			
		||||
            DATVDemodSettings::DATVModulation modulation = DATVDemod::getModulationFromLeanDVBCode(m_modcodModulationIndex);
 | 
			
		||||
            DATVDemodSettings::DATVCodeRate rate = DATVDemod::getCodeRateFromLeanDVBCode(m_modcodCodeRateIndex);
 | 
			
		||||
            DATVDemodSettings::DATVModulation modulation = DATVDemodSettings::getModulationFromLeanDVBCode(m_modcodModulationIndex);
 | 
			
		||||
            DATVDemodSettings::DATVCodeRate rate = DATVDemodSettings::getCodeRateFromLeanDVBCode(m_modcodCodeRateIndex);
 | 
			
		||||
            QString modcodModulationStr = DATVDemodSettings::getStrFromModulation(modulation);
 | 
			
		||||
            QString modcodCodeRateStr = DATVDemodSettings::getStrFromCodeRate(rate);
 | 
			
		||||
            ui->statusText->setText(tr("MCOD %1 %2").arg(modcodModulationStr).arg(modcodCodeRateStr));
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,9 @@
 | 
			
		||||
#include <QColor>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
#include "leansdr/dvb.h"
 | 
			
		||||
#include "leansdr/sdr.h"
 | 
			
		||||
 | 
			
		||||
#include "dsp/dspengine.h"
 | 
			
		||||
#include "util/simpleserializer.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 void getAvailableModulations(dvb_version dvbStandard, std::vector<DATVModulation>& modulations);
 | 
			
		||||
    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_
 | 
			
		||||
@ -15,23 +15,21 @@
 | 
			
		||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#include "datvdemodreport.h"
 | 
			
		||||
#include "datvdemodsink.h"
 | 
			
		||||
 | 
			
		||||
#include "leansdr/dvbs2.h"
 | 
			
		||||
 | 
			
		||||
#include <QTime>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <complex.h>
 | 
			
		||||
 | 
			
		||||
#include "audio/audiooutput.h"
 | 
			
		||||
#include "dsp/dspengine.h"
 | 
			
		||||
 | 
			
		||||
#include "dsp/downchannelizer.h"
 | 
			
		||||
#include "dsp/threadedbasebandsamplesink.h"
 | 
			
		||||
#include "device/deviceapi.h"
 | 
			
		||||
 | 
			
		||||
#include "datvdemodreport.h"
 | 
			
		||||
 | 
			
		||||
const unsigned int DATVDemodSink::m_rfFilterFftLength = 1024;
 | 
			
		||||
 | 
			
		||||
DATVDemodSink::DATVDemodSink() :
 | 
			
		||||
@ -1174,7 +1172,7 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
 | 
			
		||||
 | 
			
		||||
        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;
 | 
			
		||||
 | 
			
		||||
            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)
 | 
			
		||||
        {
 | 
			
		||||
            qDebug("DATVDemod::feed: change by MODCOD detected");
 | 
			
		||||
            qDebug("DATVDemodSink::feed: change by MODCOD detected");
 | 
			
		||||
 | 
			
		||||
            if (r_scope_symbols_dvbs2) {
 | 
			
		||||
                r_scope_symbols_dvbs2->calculate_cstln_points();
 | 
			
		||||
@ -1247,8 +1245,8 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
 | 
			
		||||
            if (getMessageQueueToGUI())
 | 
			
		||||
            {
 | 
			
		||||
                DATVDemodReport::MsgReportModcodCstlnChange *msg = DATVDemodReport::MsgReportModcodCstlnChange::create(
 | 
			
		||||
                    getModulationFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_typeCode),
 | 
			
		||||
                    getCodeRateFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_rateCode)
 | 
			
		||||
                    DATVDemodSettings::getModulationFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_typeCode),
 | 
			
		||||
                    DATVDemodSettings::getCodeRateFromLeanDVBCode(objDemodulatorDVBS2->cstln->m_rateCode)
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
                getMessageQueueToGUI()->push(msg);
 | 
			
		||||
@ -1273,7 +1271,7 @@ void DATVDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequ
 | 
			
		||||
        (m_channelSampleRate != channelSampleRate) || force)
 | 
			
		||||
    {
 | 
			
		||||
        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);
 | 
			
		||||
        callApplySettings = true;
 | 
			
		||||
    }
 | 
			
		||||
@ -1362,64 +1360,6 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force)
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    if (datvCodeRate == DATVDemodSettings::DATVCodeRate::FEC12) {
 | 
			
		||||
 | 
			
		||||
@ -35,28 +35,47 @@
 | 
			
		||||
#include "datvideorender.h"
 | 
			
		||||
#include "datvdemodsettings.h"
 | 
			
		||||
 | 
			
		||||
#include "channel/channelapi.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/nco.h"
 | 
			
		||||
#include "dsp/interpolator.h"
 | 
			
		||||
#include "dsp/movingaverage.h"
 | 
			
		||||
#include "dsp/agc.h"
 | 
			
		||||
#include "audio/audiofifo.h"
 | 
			
		||||
#include "util/message.h"
 | 
			
		||||
#include "util/messagequeue.h"
 | 
			
		||||
#include "util/movingaverage.h"
 | 
			
		||||
 | 
			
		||||
#include <QMutex>
 | 
			
		||||
 | 
			
		||||
class TVScreen;
 | 
			
		||||
class DATVideoRender;
 | 
			
		||||
 | 
			
		||||
class DATVDemodSink : public ChannelSampleSink {
 | 
			
		||||
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
 | 
			
		||||
    {
 | 
			
		||||
        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); }
 | 
			
		||||
 | 
			
		||||
    void CleanUpDATVFramework(bool blnRelease);
 | 
			
		||||
    void InitDATVFramework();
 | 
			
		||||
    void InitDATVS2Framework();
 | 
			
		||||
 | 
			
		||||
    static int getLeanDVBCodeRateFromDATV(DATVDemodSettings::DATVCodeRate datvCodeRate);
 | 
			
		||||
    static int getLeanDVBModulationFromDATV(DATVDemodSettings::DATVModulation datvModulation);
 | 
			
		||||
 | 
			
		||||
    MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; }
 | 
			
		||||
 | 
			
		||||
    unsigned long m_lngExpectedReadIQ;
 | 
			
		||||
    long m_lngReadIQ;
 | 
			
		||||
 | 
			
		||||
@ -308,9 +303,6 @@ private:
 | 
			
		||||
    MessageQueue *m_messageQueueToGUI;
 | 
			
		||||
 | 
			
		||||
    static const unsigned int m_rfFilterFftLength;
 | 
			
		||||
 | 
			
		||||
    MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // INCLUDE_DATVDEMODSINK_H
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user