diff --git a/plugins/channelrx/demoddatv/CMakeLists.txt b/plugins/channelrx/demoddatv/CMakeLists.txt index 5e9171a81..00bb84c8b 100644 --- a/plugins/channelrx/demoddatv/CMakeLists.txt +++ b/plugins/channelrx/demoddatv/CMakeLists.txt @@ -5,7 +5,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(datv_SOURCES datvdemod.cpp datvdemodgui.cpp - datvdemodplugin.cpp + datvdemodplugin.cpp + datvdemodsettings.cpp datvideostream.cpp datvideorender.cpp leansdr/dvb.cpp @@ -19,6 +20,7 @@ set(datv_HEADERS datvdemod.h datvdemodgui.h datvdemodplugin.h + datvdemodsettings.h datvideostream.h datvideorender.h leansdr/dvb.h diff --git a/plugins/channelrx/demoddatv/datvdemod.cpp b/plugins/channelrx/demoddatv/datvdemod.cpp index 8941efec9..9c455a6b4 100644 --- a/plugins/channelrx/demoddatv/datvdemod.cpp +++ b/plugins/channelrx/demoddatv/datvdemod.cpp @@ -169,7 +169,21 @@ void DATVDemod::configure(MessageQueue* objMessageQueue, bool blnViterbi, int intExcursion) { - Message* msgCmd = MsgConfigureDATVDemod::create(intRFBandwidth,intCenterFrequency,enmStandard, enmModulation, enmFEC, intSymbolRate, intNotchFilters, blnAllowDrift,blnFastLock,enmFilter,blnHardMetric,fltRollOff, blnViterbi,intExcursion); + Message* msgCmd = MsgConfigureDATVDemod::create( + intRFBandwidth, + intCenterFrequency, + enmStandard, + enmModulation, + enmFEC, + intSymbolRate, + intNotchFilters, + blnAllowDrift, + blnFastLock, + enmFilter, + blnHardMetric, + fltRollOff, + blnViterbi, + intExcursion); objMessageQueue->push(msgCmd); } diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index 4b3dc885e..c957b648d 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -275,7 +275,21 @@ private: bool blnViterbi, int intExcursion) { - return new MsgConfigureDATVDemod(intRFBandwidth,intCenterFrequency,enmStandard, enmModulation, enmFEC, intSymbolRate, intNotchFilters, blnAllowDrift,blnFastLock,enmFilter,blnHardMetric,fltRollOff, blnViterbi, intExcursion); + return new MsgConfigureDATVDemod( + intRFBandwidth, + intCenterFrequency, + enmStandard, + enmModulation, + enmFEC, + intSymbolRate, + intNotchFilters, + blnAllowDrift, + blnFastLock, + enmFilter, + blnHardMetric, + fltRollOff, + blnViterbi, + intExcursion); } DATVConfig m_objMsgConfig; diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.cpp b/plugins/channelrx/demoddatv/datvdemodsettings.cpp new file mode 100644 index 000000000..22cbcdc74 --- /dev/null +++ b/plugins/channelrx/demoddatv/datvdemodsettings.cpp @@ -0,0 +1,145 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include "util/simpleserializer.h" +#include "settings/serializable.h" + +#include "datvdemodsettings.h" + +DATVDemodSettings::DATVDemodSettings() : + m_channelMarker(0) +{ + resetToDefaults(); +} + +void DATVDemodSettings::resetToDefaults() +{ + m_rgbColor = QColor(Qt::magenta).rgb(); + m_title = "DATV Demodulator"; + m_msps = 1024000; + m_rfBandwidth = 1024000; + m_centerFrequency = 0; + m_standard = DVB_S; + m_modulation = BPSK; + m_fec = leansdr::FEC12; + m_sampleRate = 1024000; + m_symbolRate = 250000; + m_notchFilters = 1; + m_allowDrift = false; + m_fastLock = false; + m_filter = SAMP_LINEAR; + m_hardMetric = false; + m_rollOff = 0.35; + m_viterbi = false; + m_excursion = 10; +} + +QByteArray DATVDemodSettings::serialize() const +{ + SimpleSerializer s(1); + s.writeS32(1, m_msps); + s.writeS32(2, m_rfBandwidth); + s.writeS32(3, m_centerFrequency); + s.writeS32(4, (int) m_standard); + s.writeS32(5, (int) m_modulation); + + if (m_channelMarker) { + s.writeBlob(6, m_channelMarker->serialize()); + } + + s.writeU32(7, m_rgbColor); + s.writeString(8, m_title); + s.writeS32(9, (int) m_fec); + s.writeS32(10, m_sampleRate); + s.writeS32(11, m_symbolRate); + s.writeS32(12, m_notchFilters); + s.writeBool(13, m_allowDrift); + s.writeBool(14, m_fastLock); + s.writeS32(15, (int) m_filter); + s.writeBool(16, m_hardMetric); + s.writeFloat(17, m_rollOff); + s.writeBool(18, m_viterbi); + s.writeS32(19, m_excursion); + + return s.final(); +} + +bool DATVDemodSettings::deserialize(const QByteArray& data) +{ + SimpleDeserializer d(data); + + if(!d.isValid()) + { + resetToDefaults(); + return false; + } + + if(d.getVersion() == 1) + { + QByteArray bytetmp; + qint32 tmp; + QString strtmp; + + d.readS32(1, &m_msps, 1024000); + d.readS32(2, &m_rfBandwidth, 1024000); + d.readS32(3, &m_centerFrequency, 0); + + d.readS32(4, &tmp, (int) DVB_S); + tmp = tmp < 0 ? 0 : tmp > (int) DVB_S2 ? (int) DVB_S2 : tmp; + m_standard = (dvb_version) tmp; + + d.readS32(5, &tmp, (int) BPSK); + tmp = tmp < 0 ? 0 : tmp > (int) QAM256 ? (int) QAM256 : tmp; + m_modulation = (DATVModulation) tmp; + + d.readBlob(6, &bytetmp); + + if (m_channelMarker) { + m_channelMarker->deserialize(bytetmp); + } + + d.readU32(7, &m_rgbColor); + d.readString(8, &m_title, "DATV Demodulator"); + + d.readS32(9, &tmp, (int) leansdr::code_rate::FEC12); + tmp = tmp < 0 ? 0 : tmp >= (int) leansdr::code_rate::FEC_COUNT ? (int) leansdr::code_rate::FEC_COUNT - 1 : tmp; + m_fec = (leansdr::code_rate) tmp; + + d.readS32(10, &m_sampleRate, 1024000); + d.readS32(11, &m_symbolRate, 250000); + d.readS32(12, &m_notchFilters, 1); + d.readBool(13, &m_allowDrift, false); + d.readBool(14, &m_fastLock, false); + + d.readS32(15, &tmp, (int) SAMP_LINEAR); + tmp = tmp < 0 ? 0 : tmp > (int) SAMP_RRC ? (int) SAMP_RRC : tmp; + m_filter = (dvb_sampler) tmp; + + d.readBool(16, &m_hardMetric, false); + d.readFloat(17, &m_rollOff, 0.35); + d.readBool(18, &m_viterbi, false); + d.readS32(19, &m_excursion, 10); + + return true; + } + else + { + resetToDefaults(); + return false; + } +} diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.h b/plugins/channelrx/demoddatv/datvdemodsettings.h new file mode 100644 index 000000000..d2d3aa252 --- /dev/null +++ b/plugins/channelrx/demoddatv/datvdemodsettings.h @@ -0,0 +1,83 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef PLUGINS_CHANNELRX_DEMODATV_DATVDEMODSETTINGS_H_ +#define PLUGINS_CHANNELRX_DEMODATV_DATVDEMODSETTINGS_H_ + +#include +#include +#include + +#include "leansdr/dvb.h" + +class Serializable; + +struct DATVDemodSettings +{ + enum dvb_version + { + DVB_S, + DVB_S2 + }; + + enum DATVModulation + { + BPSK, + QPSK, + PSK8, + APSK16, + APSK32, + APSK64E, + QAM16, + QAM64, + QAM256 + }; + + enum dvb_sampler + { + SAMP_NEAREST, + SAMP_LINEAR, + SAMP_RRC + }; + + quint32 m_rgbColor; + QString m_title; + Serializable *m_channelMarker; + int m_msps; + int m_rfBandwidth; + int m_centerFrequency; + dvb_version m_standard; + DATVModulation m_modulation; + leansdr::code_rate m_fec; + int m_sampleRate; + int m_symbolRate; + int m_notchFilters; + bool m_allowDrift; + bool m_fastLock; + dvb_sampler m_filter; + bool m_hardMetric; + float m_rollOff; + bool m_viterbi; + int m_excursion; + + DATVDemodSettings(); + void resetToDefaults(); + void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; } + QByteArray serialize() const; + bool deserialize(const QByteArray& data); +}; + +#endif // PLUGINS_CHANNELRX_DEMODATV_DATVDEMODSETTINGS_H_ \ No newline at end of file