DATV demod: refactoring of classes

pull/480/head
f4exb 2019-12-04 00:08:05 +01:00
rodzic 735f1cdbb4
commit 6ee705fcd7
8 zmienionych plików z 158 dodań i 1649 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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));

Wyświetl plik

@ -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;
}
}

Wyświetl plik

@ -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_

Wyświetl plik

@ -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) {

Wyświetl plik

@ -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