///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2017 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_ATVDEMODSETTINGS_H_
#define PLUGINS_CHANNELRX_DEMODATV_ATVDEMODSETTINGS_H_
#include
#include
#include
class Serializable;
struct ATVDemodSettings
{
enum ATVModulation {
ATV_FM1, //!< Classical frequency modulation with discriminator #1
ATV_FM2, //!< Classical frequency modulation with discriminator #2
ATV_FM3, //!< Classical frequency modulation with phase derivative discriminator
ATV_AM, //!< Classical amplitude modulation
ATV_USB, //!< AM with vestigial lower side band (main signal is in the upper side)
ATV_LSB //!< AM with vestigial upper side band (main signal is in the lower side)
};
enum ATVStd
{
ATVStdPAL625,
ATVStdPAL525,
ATVStd405,
ATVStdShortInterleaved,
ATVStdShort,
ATVStdHSkip
};
// Added fields that correspond directly to UI inputs
int m_lineTimeFactor; //!< added: +/- 100 something
int m_topTimeFactor; //!< added: +/- 30 something
int m_fpsIndex; //!< added: FPS list index
bool m_halfImage; //!< added: true => m_fltRatioOfRowsToDisplay = 0.5, false => m_fltRatioOfRowsToDisplay = 1.0
int m_RFBandwidthFactor; //!< added: [1:100]
int m_OppBandwidthFactor; //!< added: [0:100]
int m_nbLinesIndex; //!< added: #lines list index
// Former RF
int m_intFrequencyOffset;
ATVModulation m_enmModulation;
float m_fltRFBandwidth;
float m_fltRFOppBandwidth;
bool m_blnFFTFiltering;
bool m_blndecimatorEnable;
float m_fltBFOFrequency;
float m_fmDeviation;
// Former
int m_intSampleRate;
ATVStd m_enmATVStandard;
int m_intNumberOfLines;
float m_fltLineDuration;
float m_fltTopDuration;
float m_fltFramePerS;
float m_fltRatioOfRowsToDisplay;
float m_fltVoltLevelSynchroTop;
float m_fltVoltLevelSynchroBlack;
bool m_blnHSync;
bool m_blnVSync;
bool m_blnInvertVideo;
int m_intVideoTabIndex;
// Former private
int m_intTVSampleRate;
int m_intNumberSamplePerLine;
// new
quint32 m_rgbColor;
QString m_title;
QString m_udpAddress;
uint16_t m_udpPort;
Serializable *m_channelMarker;
ATVDemodSettings();
void resetToDefaults();
void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
QByteArray serialize() const;
bool deserialize(const QByteArray& data);
int getEffectiveSampleRate();
float getLineTime();
int getLineTimeFactor();
float getTopTime();
int getTopTimeFactor();
int getRFSliderDivisor();
void convertFromUIValues();
void convertToUIValues();
static float getFps(int fpsIndex);
static int getNumberOfLines(int nbLinesIndex);
static int getFpsIndex(float fps);
static int getNumberOfLinesIndex(int nbLines);
static float getNominalLineTime(int nbLinesIndex, int fpsIndex);
private:
void lineTimeUpdate();
void topTimeUpdate();
float m_fltLineTimeMultiplier;
float m_fltTopTimeMultiplier;
int m_rfSliderDivisor;
};
#endif /* PLUGINS_CHANNELRX_DEMODATV_ATVDEMODSETTINGS_H_ */