mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-27 15:26:33 -04:00
FreeDV modulator: implemented set FreeDV mode setting
This commit is contained in:
parent
97d12182c2
commit
8ec923c746
@ -57,6 +57,8 @@ FreeDVMod::FreeDVMod(DeviceSinkAPI *deviceAPI) :
|
|||||||
m_basebandSampleRate(48000),
|
m_basebandSampleRate(48000),
|
||||||
m_outputSampleRate(48000),
|
m_outputSampleRate(48000),
|
||||||
m_inputFrequencyOffset(0),
|
m_inputFrequencyOffset(0),
|
||||||
|
m_lowCutoff(0.0),
|
||||||
|
m_hiCutoff(6000.0),
|
||||||
m_SSBFilter(0),
|
m_SSBFilter(0),
|
||||||
m_SSBFilterBuffer(0),
|
m_SSBFilterBuffer(0),
|
||||||
m_SSBFilterBufferIndex(0),
|
m_SSBFilterBufferIndex(0),
|
||||||
@ -75,7 +77,7 @@ FreeDVMod::FreeDVMod(DeviceSinkAPI *deviceAPI) :
|
|||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo, getInputMessageQueue());
|
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo, getInputMessageQueue());
|
||||||
m_audioSampleRate = DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate();
|
m_audioSampleRate = DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate();
|
||||||
|
|
||||||
m_SSBFilter = new fftfilt(m_settings.m_lowCutoff / m_audioSampleRate, m_settings.m_bandwidth / m_audioSampleRate, m_ssbFftLen);
|
m_SSBFilter = new fftfilt(m_lowCutoff / m_audioSampleRate, m_hiCutoff / m_audioSampleRate, m_ssbFftLen);
|
||||||
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
||||||
std::fill(m_SSBFilterBuffer, m_SSBFilterBuffer+(m_ssbFftLen>>1), Complex{0,0});
|
std::fill(m_SSBFilterBuffer, m_SSBFilterBuffer+(m_ssbFftLen>>1), Complex{0,0});
|
||||||
|
|
||||||
@ -526,25 +528,9 @@ void FreeDVMod::applyAudioSampleRate(int sampleRate)
|
|||||||
m_interpolatorDistanceRemain = 0;
|
m_interpolatorDistanceRemain = 0;
|
||||||
m_interpolatorConsumed = false;
|
m_interpolatorConsumed = false;
|
||||||
m_interpolatorDistance = (Real) sampleRate / (Real) m_outputSampleRate;
|
m_interpolatorDistance = (Real) sampleRate / (Real) m_outputSampleRate;
|
||||||
m_interpolator.create(48, sampleRate, m_settings.m_bandwidth, 3.0);
|
m_interpolator.create(48, sampleRate, m_hiCutoff, 3.0);
|
||||||
|
|
||||||
float band = m_settings.m_bandwidth;
|
m_SSBFilter->create_filter(m_lowCutoff / sampleRate, m_hiCutoff / sampleRate);
|
||||||
float lowCutoff = m_settings.m_lowCutoff;
|
|
||||||
|
|
||||||
if (band < 100.0f) // at least 100 Hz
|
|
||||||
{
|
|
||||||
band = 100.0f;
|
|
||||||
lowCutoff = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (band - lowCutoff < 100.0f) {
|
|
||||||
lowCutoff = band - 100.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_SSBFilter->create_filter(lowCutoff / sampleRate, band / sampleRate);
|
|
||||||
|
|
||||||
m_settings.m_bandwidth = band;
|
|
||||||
m_settings.m_lowCutoff = lowCutoff;
|
|
||||||
|
|
||||||
m_toneNco.setFreq(m_settings.m_toneFrequency, sampleRate);
|
m_toneNco.setFreq(m_settings.m_toneFrequency, sampleRate);
|
||||||
m_cwKeyer.setSampleRate(sampleRate);
|
m_cwKeyer.setSampleRate(sampleRate);
|
||||||
@ -581,7 +567,7 @@ void FreeDVMod::applyChannelSettings(int basebandSampleRate, int outputSampleRat
|
|||||||
m_interpolatorDistanceRemain = 0;
|
m_interpolatorDistanceRemain = 0;
|
||||||
m_interpolatorConsumed = false;
|
m_interpolatorConsumed = false;
|
||||||
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) outputSampleRate;
|
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) outputSampleRate;
|
||||||
m_interpolator.create(48, m_audioSampleRate, m_settings.m_bandwidth, 3.0);
|
m_interpolator.create(48, m_audioSampleRate, m_hiCutoff, 3.0);
|
||||||
m_settingsMutex.unlock();
|
m_settingsMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,21 +576,27 @@ void FreeDVMod::applyChannelSettings(int basebandSampleRate, int outputSampleRat
|
|||||||
m_inputFrequencyOffset = inputFrequencyOffset;
|
m_inputFrequencyOffset = inputFrequencyOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FreeDVMod::applyFreeDVMode(FreeDVModSettings::FreeDVMode mode)
|
||||||
|
{
|
||||||
|
m_hiCutoff = FreeDVModSettings::getHiCutoff(mode);
|
||||||
|
m_lowCutoff = FreeDVModSettings::getLowCutoff(mode);
|
||||||
|
|
||||||
|
m_settingsMutex.lock();
|
||||||
|
m_interpolatorDistanceRemain = 0;
|
||||||
|
m_interpolatorConsumed = false;
|
||||||
|
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) m_outputSampleRate;
|
||||||
|
m_interpolator.create(48, m_audioSampleRate, m_hiCutoff, 3.0);
|
||||||
|
m_SSBFilter->create_filter(m_lowCutoff / m_audioSampleRate, m_hiCutoff / m_audioSampleRate);
|
||||||
|
m_settingsMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
float band = settings.m_bandwidth;
|
|
||||||
float lowCutoff = settings.m_lowCutoff;
|
|
||||||
QList<QString> reverseAPIKeys;
|
QList<QString> reverseAPIKeys;
|
||||||
|
|
||||||
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
|
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
|
||||||
reverseAPIKeys.append("inputFrequencyOffset");
|
reverseAPIKeys.append("inputFrequencyOffset");
|
||||||
}
|
}
|
||||||
if ((settings.m_bandwidth != m_settings.m_bandwidth) || force) {
|
|
||||||
reverseAPIKeys.append("bandwidth");
|
|
||||||
}
|
|
||||||
if ((settings.m_lowCutoff != m_settings.m_lowCutoff) || force) {
|
|
||||||
reverseAPIKeys.append("lowCutoff");
|
|
||||||
}
|
|
||||||
if ((settings.m_toneFrequency != m_settings.m_toneFrequency) || force) {
|
if ((settings.m_toneFrequency != m_settings.m_toneFrequency) || force) {
|
||||||
reverseAPIKeys.append("toneFrequency");
|
reverseAPIKeys.append("toneFrequency");
|
||||||
}
|
}
|
||||||
@ -626,6 +618,9 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
|||||||
if ((settings.m_title != m_settings.m_title) || force) {
|
if ((settings.m_title != m_settings.m_title) || force) {
|
||||||
reverseAPIKeys.append("title");
|
reverseAPIKeys.append("title");
|
||||||
}
|
}
|
||||||
|
if ((settings.m_freeDVMode != m_settings.m_freeDVMode) || force) {
|
||||||
|
reverseAPIKeys.append("freeDVMode");
|
||||||
|
}
|
||||||
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force) {
|
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force) {
|
||||||
reverseAPIKeys.append("modAFInput");
|
reverseAPIKeys.append("modAFInput");
|
||||||
}
|
}
|
||||||
@ -633,28 +628,6 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
|||||||
reverseAPIKeys.append("audioDeviceName");
|
reverseAPIKeys.append("audioDeviceName");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((settings.m_bandwidth != m_settings.m_bandwidth) ||
|
|
||||||
(settings.m_lowCutoff != m_settings.m_lowCutoff) || force)
|
|
||||||
{
|
|
||||||
if (band < 100.0f) // at least 100 Hz
|
|
||||||
{
|
|
||||||
band = 100.0f;
|
|
||||||
lowCutoff = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (band - lowCutoff < 100.0f) {
|
|
||||||
lowCutoff = band - 100.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_settingsMutex.lock();
|
|
||||||
m_interpolatorDistanceRemain = 0;
|
|
||||||
m_interpolatorConsumed = false;
|
|
||||||
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) m_outputSampleRate;
|
|
||||||
m_interpolator.create(48, m_audioSampleRate, band, 3.0);
|
|
||||||
m_SSBFilter->create_filter(lowCutoff / m_audioSampleRate, band / m_audioSampleRate);
|
|
||||||
m_settingsMutex.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((settings.m_toneFrequency != m_settings.m_toneFrequency) || force)
|
if ((settings.m_toneFrequency != m_settings.m_toneFrequency) || force)
|
||||||
{
|
{
|
||||||
m_settingsMutex.lock();
|
m_settingsMutex.lock();
|
||||||
@ -674,6 +647,10 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_freeDVMode != settings.m_freeDVMode) || force) {
|
||||||
|
applyFreeDVMode(settings.m_freeDVMode);
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.m_useReverseAPI)
|
if (settings.m_useReverseAPI)
|
||||||
{
|
{
|
||||||
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
||||||
@ -685,8 +662,6 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
m_settings.m_bandwidth = band;
|
|
||||||
m_settings.m_lowCutoff = lowCutoff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray FreeDVMod::serialize() const
|
QByteArray FreeDVMod::serialize() const
|
||||||
@ -737,12 +712,6 @@ int FreeDVMod::webapiSettingsPutPatch(
|
|||||||
settings.m_inputFrequencyOffset = response.getFreeDvModSettings()->getInputFrequencyOffset();
|
settings.m_inputFrequencyOffset = response.getFreeDvModSettings()->getInputFrequencyOffset();
|
||||||
frequencyOffsetChanged = true;
|
frequencyOffsetChanged = true;
|
||||||
}
|
}
|
||||||
if (channelSettingsKeys.contains("bandwidth")) {
|
|
||||||
settings.m_bandwidth = response.getFreeDvModSettings()->getBandwidth();
|
|
||||||
}
|
|
||||||
if (channelSettingsKeys.contains("lowCutoff")) {
|
|
||||||
settings.m_lowCutoff = response.getFreeDvModSettings()->getLowCutoff();
|
|
||||||
}
|
|
||||||
if (channelSettingsKeys.contains("toneFrequency")) {
|
if (channelSettingsKeys.contains("toneFrequency")) {
|
||||||
settings.m_toneFrequency = response.getFreeDvModSettings()->getToneFrequency();
|
settings.m_toneFrequency = response.getFreeDvModSettings()->getToneFrequency();
|
||||||
}
|
}
|
||||||
@ -764,6 +733,9 @@ int FreeDVMod::webapiSettingsPutPatch(
|
|||||||
if (channelSettingsKeys.contains("title")) {
|
if (channelSettingsKeys.contains("title")) {
|
||||||
settings.m_title = *response.getFreeDvModSettings()->getTitle();
|
settings.m_title = *response.getFreeDvModSettings()->getTitle();
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("freeDVMode")) {
|
||||||
|
settings.m_freeDVMode = (FreeDVModSettings::FreeDVMode) response.getFreeDvModSettings()->getFreeDvMode();
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("modAFInput")) {
|
if (channelSettingsKeys.contains("modAFInput")) {
|
||||||
settings.m_modAFInput = (FreeDVModSettings::FreeDVModInputAF) response.getFreeDvModSettings()->getModAfInput();
|
settings.m_modAFInput = (FreeDVModSettings::FreeDVModInputAF) response.getFreeDvModSettings()->getModAfInput();
|
||||||
}
|
}
|
||||||
@ -855,8 +827,6 @@ int FreeDVMod::webapiReportGet(
|
|||||||
void FreeDVMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const FreeDVModSettings& settings)
|
void FreeDVMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const FreeDVModSettings& settings)
|
||||||
{
|
{
|
||||||
response.getFreeDvModSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
response.getFreeDvModSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
||||||
response.getFreeDvModSettings()->setBandwidth(settings.m_bandwidth);
|
|
||||||
response.getFreeDvModSettings()->setLowCutoff(settings.m_lowCutoff);
|
|
||||||
response.getFreeDvModSettings()->setToneFrequency(settings.m_toneFrequency);
|
response.getFreeDvModSettings()->setToneFrequency(settings.m_toneFrequency);
|
||||||
response.getFreeDvModSettings()->setVolumeFactor(settings.m_volumeFactor);
|
response.getFreeDvModSettings()->setVolumeFactor(settings.m_volumeFactor);
|
||||||
response.getFreeDvModSettings()->setSpanLog2(settings.m_spanLog2);
|
response.getFreeDvModSettings()->setSpanLog2(settings.m_spanLog2);
|
||||||
@ -929,12 +899,6 @@ void FreeDVMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, c
|
|||||||
if (channelSettingsKeys.contains("inputFrequencyOffset") || force) {
|
if (channelSettingsKeys.contains("inputFrequencyOffset") || force) {
|
||||||
swgFreeDVModSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
swgFreeDVModSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
||||||
}
|
}
|
||||||
if (channelSettingsKeys.contains("bandwidth") || force) {
|
|
||||||
swgFreeDVModSettings->setBandwidth(settings.m_bandwidth);
|
|
||||||
}
|
|
||||||
if (channelSettingsKeys.contains("lowCutoff") || force) {
|
|
||||||
swgFreeDVModSettings->setLowCutoff(settings.m_lowCutoff);
|
|
||||||
}
|
|
||||||
if (channelSettingsKeys.contains("toneFrequency") || force) {
|
if (channelSettingsKeys.contains("toneFrequency") || force) {
|
||||||
swgFreeDVModSettings->setToneFrequency(settings.m_toneFrequency);
|
swgFreeDVModSettings->setToneFrequency(settings.m_toneFrequency);
|
||||||
}
|
}
|
||||||
@ -956,6 +920,9 @@ void FreeDVMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, c
|
|||||||
if (channelSettingsKeys.contains("title") || force) {
|
if (channelSettingsKeys.contains("title") || force) {
|
||||||
swgFreeDVModSettings->setTitle(new QString(settings.m_title));
|
swgFreeDVModSettings->setTitle(new QString(settings.m_title));
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("freeDVMode") || force) {
|
||||||
|
swgFreeDVModSettings->setFreeDvMode((int) settings.m_freeDVMode);
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("modAFInput") || force) {
|
if (channelSettingsKeys.contains("modAFInput") || force) {
|
||||||
swgFreeDVModSettings->setModAfInput((int) settings.m_modAFInput);
|
swgFreeDVModSettings->setModAfInput((int) settings.m_modAFInput);
|
||||||
}
|
}
|
||||||
|
@ -236,6 +236,8 @@ public:
|
|||||||
|
|
||||||
uint32_t getAudioSampleRate() const { return m_audioSampleRate; }
|
uint32_t getAudioSampleRate() const { return m_audioSampleRate; }
|
||||||
double getMagSq() const { return m_magsq; }
|
double getMagSq() const { return m_magsq; }
|
||||||
|
Real getLowCutoff() const { return m_lowCutoff; }
|
||||||
|
Real getHiCutoff() const { return m_hiCutoff; }
|
||||||
|
|
||||||
CWKeyer *getCWKeyer() { return &m_cwKeyer; }
|
CWKeyer *getCWKeyer() { return &m_cwKeyer; }
|
||||||
|
|
||||||
@ -265,6 +267,8 @@ private:
|
|||||||
int m_basebandSampleRate;
|
int m_basebandSampleRate;
|
||||||
int m_outputSampleRate;
|
int m_outputSampleRate;
|
||||||
int m_inputFrequencyOffset;
|
int m_inputFrequencyOffset;
|
||||||
|
Real m_lowCutoff;
|
||||||
|
Real m_hiCutoff;
|
||||||
FreeDVModSettings m_settings;
|
FreeDVModSettings m_settings;
|
||||||
quint32 m_audioSampleRate;
|
quint32 m_audioSampleRate;
|
||||||
|
|
||||||
@ -315,6 +319,7 @@ private:
|
|||||||
void applyAudioSampleRate(int sampleRate);
|
void applyAudioSampleRate(int sampleRate);
|
||||||
void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false);
|
void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false);
|
||||||
void applySettings(const FreeDVModSettings& settings, bool force = false);
|
void applySettings(const FreeDVModSettings& settings, bool force = false);
|
||||||
|
void applyFreeDVMode(FreeDVModSettings::FreeDVMode mode);
|
||||||
void pullAF(Complex& sample);
|
void pullAF(Complex& sample);
|
||||||
void calculateLevel(Complex& sample);
|
void calculateLevel(Complex& sample);
|
||||||
void modulateSample();
|
void modulateSample();
|
||||||
|
@ -182,18 +182,6 @@ void FreeDVModGUI::on_spanLog2_valueChanged(int value)
|
|||||||
applyBandwidths(5 - value);
|
applyBandwidths(5 - value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FreeDVModGUI::on_BW_valueChanged(int value)
|
|
||||||
{
|
|
||||||
(void) value;
|
|
||||||
applyBandwidths(5 - ui->spanLog2->value());
|
|
||||||
}
|
|
||||||
|
|
||||||
void FreeDVModGUI::on_lowCut_valueChanged(int value)
|
|
||||||
{
|
|
||||||
(void) value;
|
|
||||||
applyBandwidths(5 - ui->spanLog2->value());
|
|
||||||
}
|
|
||||||
|
|
||||||
void FreeDVModGUI::on_toneFrequency_valueChanged(int value)
|
void FreeDVModGUI::on_toneFrequency_valueChanged(int value)
|
||||||
{
|
{
|
||||||
ui->toneFrequencyText->setText(QString("%1k").arg(value / 100.0, 0, 'f', 2));
|
ui->toneFrequencyText->setText(QString("%1k").arg(value / 100.0, 0, 'f', 2));
|
||||||
@ -214,6 +202,14 @@ void FreeDVModGUI::on_audioMute_toggled(bool checked)
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FreeDVModGUI::on_freeDVMode_currentIndexChanged(int index)
|
||||||
|
{
|
||||||
|
m_settings.m_freeDVMode = (FreeDVModSettings::FreeDVMode) index;
|
||||||
|
m_channelMarker.setBandwidth(FreeDVModSettings::getHiCutoff(m_settings.m_freeDVMode) * 2);
|
||||||
|
m_channelMarker.setLowCutoff(FreeDVModSettings::getLowCutoff(m_settings.m_freeDVMode));
|
||||||
|
applySettings();
|
||||||
|
}
|
||||||
|
|
||||||
void FreeDVModGUI::on_playLoop_toggled(bool checked)
|
void FreeDVModGUI::on_playLoop_toggled(bool checked)
|
||||||
{
|
{
|
||||||
m_settings.m_playLoop = checked;
|
m_settings.m_playLoop = checked;
|
||||||
@ -368,17 +364,8 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
|||||||
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
||||||
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
||||||
|
|
||||||
m_channelMarker.blockSignals(true);
|
|
||||||
m_channelMarker.setColor(QColor(0, 255, 204));
|
|
||||||
m_channelMarker.setBandwidth(m_spectrumRate);
|
|
||||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
|
||||||
m_channelMarker.setCenterFrequency(0);
|
|
||||||
m_channelMarker.setTitle("FreeDV Modulator");
|
|
||||||
m_channelMarker.blockSignals(false);
|
|
||||||
m_channelMarker.setVisible(true);
|
m_channelMarker.setVisible(true);
|
||||||
|
|
||||||
setTitleColor(m_channelMarker.getColor());
|
|
||||||
|
|
||||||
m_deviceUISet->registerTxChannelInstance(FreeDVMod::m_channelIdURI, this);
|
m_deviceUISet->registerTxChannelInstance(FreeDVMod::m_channelIdURI, this);
|
||||||
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
||||||
m_deviceUISet->addRollupWidget(this);
|
m_deviceUISet->addRollupWidget(this);
|
||||||
@ -395,11 +382,6 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
|||||||
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
|
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
|
||||||
connect(m_freeDVMod, SIGNAL(levelChanged(qreal, qreal, int)), ui->volumeMeter, SLOT(levelChanged(qreal, qreal, int)));
|
connect(m_freeDVMod, SIGNAL(levelChanged(qreal, qreal, int)), ui->volumeMeter, SLOT(levelChanged(qreal, qreal, int)));
|
||||||
|
|
||||||
m_iconDSBUSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
|
||||||
m_iconDSBUSB.addPixmap(QPixmap("://usb.png"), QIcon::Normal, QIcon::Off);
|
|
||||||
m_iconDSBLSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
|
||||||
m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::Off);
|
|
||||||
|
|
||||||
displaySettings();
|
displaySettings();
|
||||||
applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true)
|
applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true)
|
||||||
}
|
}
|
||||||
@ -435,8 +417,6 @@ void FreeDVModGUI::applySettings(bool force)
|
|||||||
void FreeDVModGUI::applyBandwidths(int spanLog2, bool force)
|
void FreeDVModGUI::applyBandwidths(int spanLog2, bool force)
|
||||||
{
|
{
|
||||||
m_spectrumRate = m_freeDVMod->getAudioSampleRate() / (1<<spanLog2);
|
m_spectrumRate = m_freeDVMod->getAudioSampleRate() / (1<<spanLog2);
|
||||||
int bw = ui->BW->value();
|
|
||||||
int lw = ui->lowCut->value();
|
|
||||||
int bwMax = m_freeDVMod->getAudioSampleRate() / (100*(1<<spanLog2));
|
int bwMax = m_freeDVMod->getAudioSampleRate() / (100*(1<<spanLog2));
|
||||||
int tickInterval = m_spectrumRate / 1200;
|
int tickInterval = m_spectrumRate / 1200;
|
||||||
tickInterval = tickInterval == 0 ? 1 : tickInterval;
|
tickInterval = tickInterval == 0 ? 1 : tickInterval;
|
||||||
@ -444,60 +424,20 @@ void FreeDVModGUI::applyBandwidths(int spanLog2, bool force)
|
|||||||
qDebug() << "FreeDVModGUI::applyBandwidths:"
|
qDebug() << "FreeDVModGUI::applyBandwidths:"
|
||||||
<< " spanLog2: " << spanLog2
|
<< " spanLog2: " << spanLog2
|
||||||
<< " m_spectrumRate: " << m_spectrumRate
|
<< " m_spectrumRate: " << m_spectrumRate
|
||||||
<< " bw: " << bw
|
|
||||||
<< " lw: " << lw
|
|
||||||
<< " bwMax: " << bwMax
|
<< " bwMax: " << bwMax
|
||||||
<< " tickInterval: " << tickInterval;
|
<< " tickInterval: " << tickInterval;
|
||||||
|
|
||||||
ui->BW->setTickInterval(tickInterval);
|
|
||||||
ui->lowCut->setTickInterval(tickInterval);
|
|
||||||
|
|
||||||
bw = bw < -bwMax ? -bwMax : bw > bwMax ? bwMax : bw;
|
|
||||||
|
|
||||||
if (bw < 0) {
|
|
||||||
lw = lw < bw+1 ? bw+1 : lw < 0 ? lw : 0;
|
|
||||||
} else if (bw > 0) {
|
|
||||||
lw = lw > bw-1 ? bw-1 : lw < 0 ? 0 : lw;
|
|
||||||
} else {
|
|
||||||
lw = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString spanStr = QString::number(bwMax/10.0, 'f', 1);
|
QString spanStr = QString::number(bwMax/10.0, 'f', 1);
|
||||||
QString bwStr = QString::number(bw/10.0, 'f', 1);
|
|
||||||
QString lwStr = QString::number(lw/10.0, 'f', 1);
|
|
||||||
|
|
||||||
ui->BWText->setText(tr("%1k").arg(bwStr));
|
|
||||||
ui->spanText->setText(tr("%1k").arg(spanStr));
|
ui->spanText->setText(tr("%1k").arg(spanStr));
|
||||||
ui->scaleMinus->setText("-");
|
|
||||||
ui->scaleCenter->setText("0");
|
|
||||||
ui->scalePlus->setText("+");
|
|
||||||
ui->lsbLabel->setText("LSB");
|
|
||||||
ui->usbLabel->setText("USB");
|
|
||||||
ui->glSpectrum->setCenterFrequency(m_spectrumRate/2);
|
ui->glSpectrum->setCenterFrequency(m_spectrumRate/2);
|
||||||
ui->glSpectrum->setSampleRate(m_spectrumRate);
|
ui->glSpectrum->setSampleRate(m_spectrumRate);
|
||||||
ui->glSpectrum->setSsbSpectrum(true);
|
ui->glSpectrum->setSsbSpectrum(true);
|
||||||
ui->glSpectrum->setLsbDisplay(bw < 0);
|
ui->glSpectrum->setLsbDisplay(false);
|
||||||
ui->lowCutText->setText(tr("%1k").arg(lwStr));
|
|
||||||
|
|
||||||
ui->BW->blockSignals(true);
|
|
||||||
ui->lowCut->blockSignals(true);
|
|
||||||
|
|
||||||
ui->BW->setMaximum(bwMax);
|
|
||||||
ui->BW->setValue(bw);
|
|
||||||
ui->lowCut->setValue(lw);
|
|
||||||
|
|
||||||
ui->lowCut->blockSignals(false);
|
|
||||||
ui->BW->blockSignals(false);
|
|
||||||
|
|
||||||
m_settings.m_spanLog2 = spanLog2;
|
m_settings.m_spanLog2 = spanLog2;
|
||||||
m_settings.m_bandwidth = bw * 100;
|
|
||||||
m_settings.m_lowCutoff = lw * 100;
|
|
||||||
|
|
||||||
applySettings(force);
|
applySettings(force);
|
||||||
|
|
||||||
bool applySettingsWereBlocked = blockApplySettings(true);
|
|
||||||
m_channelMarker.setBandwidth(bw * 200);
|
|
||||||
blockApplySettings(applySettingsWereBlocked);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FreeDVModGUI::displaySettings()
|
void FreeDVModGUI::displaySettings()
|
||||||
@ -505,15 +445,9 @@ void FreeDVModGUI::displaySettings()
|
|||||||
m_channelMarker.blockSignals(true);
|
m_channelMarker.blockSignals(true);
|
||||||
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
|
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
|
||||||
m_channelMarker.setTitle(m_settings.m_title);
|
m_channelMarker.setTitle(m_settings.m_title);
|
||||||
m_channelMarker.setBandwidth(m_settings.m_bandwidth * 2);
|
m_channelMarker.setBandwidth(FreeDVModSettings::getHiCutoff(m_settings.m_freeDVMode) * 2);
|
||||||
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);
|
m_channelMarker.setLowCutoff(FreeDVModSettings::getLowCutoff(m_settings.m_freeDVMode));
|
||||||
|
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||||
if (m_settings.m_bandwidth < 0) {
|
|
||||||
m_channelMarker.setSidebands(ChannelMarker::lsb);
|
|
||||||
} else {
|
|
||||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_channelMarker.blockSignals(false);
|
m_channelMarker.blockSignals(false);
|
||||||
m_channelMarker.setColor(m_settings.m_rgbColor);
|
m_channelMarker.setColor(m_settings.m_rgbColor);
|
||||||
|
|
||||||
@ -527,22 +461,15 @@ void FreeDVModGUI::displaySettings()
|
|||||||
|
|
||||||
// Prevent uncontrolled triggering of applyBandwidths
|
// Prevent uncontrolled triggering of applyBandwidths
|
||||||
ui->spanLog2->blockSignals(true);
|
ui->spanLog2->blockSignals(true);
|
||||||
ui->BW->blockSignals(true);
|
|
||||||
|
|
||||||
ui->spanLog2->setValue(5 - m_settings.m_spanLog2);
|
ui->spanLog2->setValue(5 - m_settings.m_spanLog2);
|
||||||
|
|
||||||
ui->BW->setValue(roundf(m_settings.m_bandwidth/100.0));
|
QString s = QString::number(m_freeDVMod->getHiCutoff()/1000.0, 'f', 1);
|
||||||
QString s = QString::number(m_settings.m_bandwidth/1000.0, 'f', 1);
|
|
||||||
|
|
||||||
ui->BWText->setText(tr("%1k").arg(s));
|
|
||||||
|
|
||||||
ui->spanLog2->blockSignals(false);
|
ui->spanLog2->blockSignals(false);
|
||||||
ui->BW->blockSignals(false);
|
|
||||||
|
|
||||||
// The only one of the four signals triggering applyBandwidths will trigger it once only with all other values
|
// The only one of the four signals triggering applyBandwidths will trigger it once only with all other values
|
||||||
// set correctly and therefore validate the settings and apply them to dependent widgets
|
// set correctly and therefore validate the settings and apply them to dependent widgets
|
||||||
ui->lowCut->setValue(m_settings.m_lowCutoff / 100.0);
|
|
||||||
ui->lowCutText->setText(tr("%1k").arg(m_settings.m_lowCutoff / 1000.0));
|
|
||||||
|
|
||||||
ui->deltaFrequency->setValue(m_settings.m_inputFrequencyOffset);
|
ui->deltaFrequency->setValue(m_settings.m_inputFrequencyOffset);
|
||||||
|
|
||||||
|
@ -79,9 +79,6 @@ private:
|
|||||||
bool m_enableNavTime;
|
bool m_enableNavTime;
|
||||||
MessageQueue m_inputMessageQueue;
|
MessageQueue m_inputMessageQueue;
|
||||||
|
|
||||||
QIcon m_iconDSBUSB;
|
|
||||||
QIcon m_iconDSBLSB;
|
|
||||||
|
|
||||||
explicit FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
explicit FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
||||||
virtual ~FreeDVModGUI();
|
virtual ~FreeDVModGUI();
|
||||||
|
|
||||||
@ -100,10 +97,9 @@ private slots:
|
|||||||
void handleSourceMessages();
|
void handleSourceMessages();
|
||||||
void on_deltaFrequency_changed(qint64 value);
|
void on_deltaFrequency_changed(qint64 value);
|
||||||
void on_spanLog2_valueChanged(int value);
|
void on_spanLog2_valueChanged(int value);
|
||||||
void on_BW_valueChanged(int value);
|
|
||||||
void on_lowCut_valueChanged(int value);
|
|
||||||
void on_volume_valueChanged(int value);
|
void on_volume_valueChanged(int value);
|
||||||
void on_audioMute_toggled(bool checked);
|
void on_audioMute_toggled(bool checked);
|
||||||
|
void on_freeDVMode_currentIndexChanged(int index);
|
||||||
void on_tone_toggled(bool checked);
|
void on_tone_toggled(bool checked);
|
||||||
void on_toneFrequency_valueChanged(int value);
|
void on_toneFrequency_valueChanged(int value);
|
||||||
void on_mic_toggled(bool checked);
|
void on_mic_toggled(bool checked);
|
||||||
|
@ -165,383 +165,6 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="spanLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="spanLabel">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Span</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QSlider" name="spanLog2">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Spectrum display frequency span</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>4</number>
|
|
||||||
</property>
|
|
||||||
<property name="pageStep">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>2</number>
|
|
||||||
</property>
|
|
||||||
<property name="sliderPosition">
|
|
||||||
<number>2</number>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="invertedAppearance">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="invertedControls">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="spanText">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>6.0k</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="lowCutLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="lowCutLabel">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Low cut</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="TickedSlider" name="lowCut">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>16</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Highpass filter cutoff frequency (SSB)</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>-60</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>60</number>
|
|
||||||
</property>
|
|
||||||
<property name="pageStep">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>3</number>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="tickPosition">
|
|
||||||
<enum>QSlider::NoTicks</enum>
|
|
||||||
</property>
|
|
||||||
<property name="tickInterval">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="lowCutText">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>0.3k</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="bqndwidthLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="BWLabel">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Hi cut</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="TickedSlider" name="BW">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>16</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Lowpass filter cutoff frequency</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>-60</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>60</number>
|
|
||||||
</property>
|
|
||||||
<property name="pageStep">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="tickPosition">
|
|
||||||
<enum>QSlider::TicksBelow</enum>
|
|
||||||
</property>
|
|
||||||
<property name="tickInterval">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="BWText">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>3.0k</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="scaleLayout">
|
|
||||||
<property name="spacing">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="scalePadLeft">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>10</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>8</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>f </string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="scaleMinus">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>10</width>
|
|
||||||
<height>10</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>8</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>-</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="lsbLabel">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>8</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>LSB</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="scaleCenter">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>12</width>
|
|
||||||
<height>10</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>8</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>0</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="usbLabel">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>8</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>USB</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="scalePlus">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>10</width>
|
|
||||||
<height>10</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>8</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>+</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="scalePadRight">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>50</width>
|
|
||||||
<height>10</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="volumeLayout">
|
<layout class="QHBoxLayout" name="volumeLayout">
|
||||||
<item>
|
<item>
|
||||||
@ -752,6 +375,33 @@
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="freeDVMode">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>FreeDV mode</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2400A</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1600</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>800XA</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>700D</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -927,6 +577,82 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="spanLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="spanLabel">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Span</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSlider" name="spanLog2">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Spectrum display frequency span</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
|
<property name="pageStep">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="sliderPosition">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="invertedAppearance">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="invertedControls">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="spanText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>6.0k</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="spectrumContainer" native="true">
|
<widget class="QWidget" name="spectrumContainer" native="true">
|
||||||
@ -1021,11 +747,6 @@
|
|||||||
<header>gui/valuedialz.h</header>
|
<header>gui/valuedialz.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
<customwidget>
|
|
||||||
<class>TickedSlider</class>
|
|
||||||
<extends>QSlider</extends>
|
|
||||||
<header>gui/tickedslider.h</header>
|
|
||||||
</customwidget>
|
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../sdrgui/resources/res.qrc"/>
|
<include location="../../../sdrgui/resources/res.qrc"/>
|
||||||
|
@ -32,8 +32,6 @@ FreeDVModSettings::FreeDVModSettings() :
|
|||||||
void FreeDVModSettings::resetToDefaults()
|
void FreeDVModSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_inputFrequencyOffset = 0;
|
m_inputFrequencyOffset = 0;
|
||||||
m_bandwidth = 3000.0;
|
|
||||||
m_lowCutoff = 300.0;
|
|
||||||
m_toneFrequency = 1000.0;
|
m_toneFrequency = 1000.0;
|
||||||
m_volumeFactor = 1.0;
|
m_volumeFactor = 1.0;
|
||||||
m_spanLog2 = 3;
|
m_spanLog2 = 3;
|
||||||
@ -43,6 +41,7 @@ void FreeDVModSettings::resetToDefaults()
|
|||||||
m_title = "FreeDV Modulator";
|
m_title = "FreeDV Modulator";
|
||||||
m_modAFInput = FreeDVModInputAF::FreeDVModInputNone;
|
m_modAFInput = FreeDVModInputAF::FreeDVModInputNone;
|
||||||
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
|
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
|
||||||
|
m_freeDVMode = FreeDVMode::FreeDVMode2400A;
|
||||||
m_useReverseAPI = false;
|
m_useReverseAPI = false;
|
||||||
m_reverseAPIAddress = "127.0.0.1";
|
m_reverseAPIAddress = "127.0.0.1";
|
||||||
m_reverseAPIPort = 8888;
|
m_reverseAPIPort = 8888;
|
||||||
@ -55,7 +54,6 @@ QByteArray FreeDVModSettings::serialize() const
|
|||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
s.writeS32(1, m_inputFrequencyOffset);
|
s.writeS32(1, m_inputFrequencyOffset);
|
||||||
s.writeS32(2, roundf(m_bandwidth / 100.0));
|
|
||||||
s.writeS32(3, roundf(m_toneFrequency / 10.0));
|
s.writeS32(3, roundf(m_toneFrequency / 10.0));
|
||||||
|
|
||||||
if (m_spectrumGUI) {
|
if (m_spectrumGUI) {
|
||||||
@ -68,8 +66,8 @@ QByteArray FreeDVModSettings::serialize() const
|
|||||||
s.writeBlob(6, m_cwKeyerGUI->serialize());
|
s.writeBlob(6, m_cwKeyerGUI->serialize());
|
||||||
}
|
}
|
||||||
|
|
||||||
s.writeS32(7, roundf(m_lowCutoff / 100.0));
|
|
||||||
s.writeS32(8, m_spanLog2);
|
s.writeS32(8, m_spanLog2);
|
||||||
|
s.writeS32(10, (int) m_freeDVMode);
|
||||||
|
|
||||||
if (m_channelMarker) {
|
if (m_channelMarker) {
|
||||||
s.writeBlob(18, m_channelMarker->serialize());
|
s.writeBlob(18, m_channelMarker->serialize());
|
||||||
@ -106,9 +104,6 @@ bool FreeDVModSettings::deserialize(const QByteArray& data)
|
|||||||
d.readS32(1, &tmp, 0);
|
d.readS32(1, &tmp, 0);
|
||||||
m_inputFrequencyOffset = tmp;
|
m_inputFrequencyOffset = tmp;
|
||||||
|
|
||||||
d.readS32(2, &tmp, 30);
|
|
||||||
m_bandwidth = tmp * 100.0;
|
|
||||||
|
|
||||||
d.readS32(3, &tmp, 100);
|
d.readS32(3, &tmp, 100);
|
||||||
m_toneFrequency = tmp * 10.0;
|
m_toneFrequency = tmp * 10.0;
|
||||||
|
|
||||||
@ -125,11 +120,15 @@ bool FreeDVModSettings::deserialize(const QByteArray& data)
|
|||||||
m_cwKeyerGUI->deserialize(bytetmp);
|
m_cwKeyerGUI->deserialize(bytetmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
d.readS32(7, &tmp, 3);
|
|
||||||
m_lowCutoff = tmp * 100.0;
|
|
||||||
|
|
||||||
d.readS32(8, &m_spanLog2, 3);
|
d.readS32(8, &m_spanLog2, 3);
|
||||||
|
|
||||||
|
d.readS32(10, &tmp, 0);
|
||||||
|
if ((tmp < 0) || (tmp > (int) FreeDVMode::FreeDVMode700D)) {
|
||||||
|
m_freeDVMode = FreeDVMode::FreeDVMode2400A;
|
||||||
|
} else {
|
||||||
|
m_freeDVMode = (FreeDVMode) tmp;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_channelMarker) {
|
if (m_channelMarker) {
|
||||||
d.readBlob(18, &bytetmp);
|
d.readBlob(18, &bytetmp);
|
||||||
m_channelMarker->deserialize(bytetmp);
|
m_channelMarker->deserialize(bytetmp);
|
||||||
@ -168,3 +167,39 @@ bool FreeDVModSettings::deserialize(const QByteArray& data)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FreeDVModSettings::getHiCutoff(FreeDVMode freeDVMode)
|
||||||
|
{
|
||||||
|
switch(freeDVMode)
|
||||||
|
{
|
||||||
|
case FreeDVModSettings::FreeDVMode800XA: // C4FM NB
|
||||||
|
return 2400;
|
||||||
|
break;
|
||||||
|
case FreeDVModSettings::FreeDVMode700D: // OFDM
|
||||||
|
case FreeDVModSettings::FreeDVMode1600: // OFDM
|
||||||
|
return 2200.0;
|
||||||
|
break;
|
||||||
|
case FreeDVModSettings::FreeDVMode2400A: // C4FM WB
|
||||||
|
default:
|
||||||
|
return 6000.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int FreeDVModSettings::getLowCutoff(FreeDVMode freeDVMode)
|
||||||
|
{
|
||||||
|
switch(freeDVMode)
|
||||||
|
{
|
||||||
|
case FreeDVModSettings::FreeDVMode800XA: // C4FM NB
|
||||||
|
return 400.0;
|
||||||
|
break;
|
||||||
|
case FreeDVModSettings::FreeDVMode700D: // OFDM
|
||||||
|
case FreeDVModSettings::FreeDVMode1600: // OFDM
|
||||||
|
return 800.0;
|
||||||
|
break;
|
||||||
|
case FreeDVModSettings::FreeDVMode2400A: // C4FM WB
|
||||||
|
default:
|
||||||
|
return 0.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -34,9 +34,15 @@ struct FreeDVModSettings
|
|||||||
FreeDVModInputCWTone
|
FreeDVModInputCWTone
|
||||||
} FreeDVModInputAF;
|
} FreeDVModInputAF;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
FreeDVMode2400A,
|
||||||
|
FreeDVMode1600,
|
||||||
|
FreeDVMode800XA,
|
||||||
|
FreeDVMode700D
|
||||||
|
} FreeDVMode;
|
||||||
|
|
||||||
qint64 m_inputFrequencyOffset;
|
qint64 m_inputFrequencyOffset;
|
||||||
Real m_bandwidth;
|
|
||||||
Real m_lowCutoff;
|
|
||||||
float m_toneFrequency;
|
float m_toneFrequency;
|
||||||
float m_volumeFactor;
|
float m_volumeFactor;
|
||||||
int m_spanLog2;
|
int m_spanLog2;
|
||||||
@ -47,6 +53,7 @@ struct FreeDVModSettings
|
|||||||
QString m_title;
|
QString m_title;
|
||||||
FreeDVModInputAF m_modAFInput;
|
FreeDVModInputAF m_modAFInput;
|
||||||
QString m_audioDeviceName;
|
QString m_audioDeviceName;
|
||||||
|
FreeDVMode m_freeDVMode;
|
||||||
|
|
||||||
bool m_useReverseAPI;
|
bool m_useReverseAPI;
|
||||||
QString m_reverseAPIAddress;
|
QString m_reverseAPIAddress;
|
||||||
@ -65,6 +72,9 @@ struct FreeDVModSettings
|
|||||||
void setCWKeyerGUI(Serializable *cwKeyerGUI) { m_cwKeyerGUI = cwKeyerGUI; }
|
void setCWKeyerGUI(Serializable *cwKeyerGUI) { m_cwKeyerGUI = cwKeyerGUI; }
|
||||||
QByteArray serialize() const;
|
QByteArray serialize() const;
|
||||||
bool deserialize(const QByteArray& data);
|
bool deserialize(const QByteArray& data);
|
||||||
|
|
||||||
|
static int getHiCutoff(FreeDVMode freeDVMode);
|
||||||
|
static int getLowCutoff(FreeDVMode freeDVMode);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -2602,6 +2602,9 @@ margin-bottom: 20px;
|
|||||||
"audioDeviceName" : {
|
"audioDeviceName" : {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
|
"freeDVMode" : {
|
||||||
|
"type" : "integer"
|
||||||
|
},
|
||||||
"modAFInput" : {
|
"modAFInput" : {
|
||||||
"type" : "integer"
|
"type" : "integer"
|
||||||
},
|
},
|
||||||
@ -24468,7 +24471,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2019-02-22T10:50:46.075+01:00
|
Generated 2019-02-22T15:22:55.188+01:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -28,6 +28,8 @@ FreeDVModSettings:
|
|||||||
type: string
|
type: string
|
||||||
audioDeviceName:
|
audioDeviceName:
|
||||||
type: string
|
type: string
|
||||||
|
freeDVMode:
|
||||||
|
type: integer
|
||||||
modAFInput:
|
modAFInput:
|
||||||
type: integer
|
type: integer
|
||||||
useReverseAPI:
|
useReverseAPI:
|
||||||
|
@ -28,6 +28,8 @@ FreeDVModSettings:
|
|||||||
type: string
|
type: string
|
||||||
audioDeviceName:
|
audioDeviceName:
|
||||||
type: string
|
type: string
|
||||||
|
freeDVMode:
|
||||||
|
type: integer
|
||||||
modAFInput:
|
modAFInput:
|
||||||
type: integer
|
type: integer
|
||||||
useReverseAPI:
|
useReverseAPI:
|
||||||
|
@ -2602,6 +2602,9 @@ margin-bottom: 20px;
|
|||||||
"audioDeviceName" : {
|
"audioDeviceName" : {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
|
"freeDVMode" : {
|
||||||
|
"type" : "integer"
|
||||||
|
},
|
||||||
"modAFInput" : {
|
"modAFInput" : {
|
||||||
"type" : "integer"
|
"type" : "integer"
|
||||||
},
|
},
|
||||||
@ -24468,7 +24471,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2019-02-22T10:50:46.075+01:00
|
Generated 2019-02-22T15:22:55.188+01:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -50,6 +50,8 @@ SWGFreeDVModSettings::SWGFreeDVModSettings() {
|
|||||||
m_title_isSet = false;
|
m_title_isSet = false;
|
||||||
audio_device_name = nullptr;
|
audio_device_name = nullptr;
|
||||||
m_audio_device_name_isSet = false;
|
m_audio_device_name_isSet = false;
|
||||||
|
free_dv_mode = 0;
|
||||||
|
m_free_dv_mode_isSet = false;
|
||||||
mod_af_input = 0;
|
mod_af_input = 0;
|
||||||
m_mod_af_input_isSet = false;
|
m_mod_af_input_isSet = false;
|
||||||
use_reverse_api = 0;
|
use_reverse_api = 0;
|
||||||
@ -94,6 +96,8 @@ SWGFreeDVModSettings::init() {
|
|||||||
m_title_isSet = false;
|
m_title_isSet = false;
|
||||||
audio_device_name = new QString("");
|
audio_device_name = new QString("");
|
||||||
m_audio_device_name_isSet = false;
|
m_audio_device_name_isSet = false;
|
||||||
|
free_dv_mode = 0;
|
||||||
|
m_free_dv_mode_isSet = false;
|
||||||
mod_af_input = 0;
|
mod_af_input = 0;
|
||||||
m_mod_af_input_isSet = false;
|
m_mod_af_input_isSet = false;
|
||||||
use_reverse_api = 0;
|
use_reverse_api = 0;
|
||||||
@ -129,6 +133,7 @@ SWGFreeDVModSettings::cleanup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(reverse_api_address != nullptr) {
|
if(reverse_api_address != nullptr) {
|
||||||
delete reverse_api_address;
|
delete reverse_api_address;
|
||||||
}
|
}
|
||||||
@ -173,6 +178,8 @@ SWGFreeDVModSettings::fromJsonObject(QJsonObject &pJson) {
|
|||||||
|
|
||||||
::SWGSDRangel::setValue(&audio_device_name, pJson["audioDeviceName"], "QString", "QString");
|
::SWGSDRangel::setValue(&audio_device_name, pJson["audioDeviceName"], "QString", "QString");
|
||||||
|
|
||||||
|
::SWGSDRangel::setValue(&free_dv_mode, pJson["freeDVMode"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&mod_af_input, pJson["modAFInput"], "qint32", "");
|
::SWGSDRangel::setValue(&mod_af_input, pJson["modAFInput"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
|
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
|
||||||
@ -236,6 +243,9 @@ SWGFreeDVModSettings::asJsonObject() {
|
|||||||
if(audio_device_name != nullptr && *audio_device_name != QString("")){
|
if(audio_device_name != nullptr && *audio_device_name != QString("")){
|
||||||
toJsonValue(QString("audioDeviceName"), audio_device_name, obj, QString("QString"));
|
toJsonValue(QString("audioDeviceName"), audio_device_name, obj, QString("QString"));
|
||||||
}
|
}
|
||||||
|
if(m_free_dv_mode_isSet){
|
||||||
|
obj->insert("freeDVMode", QJsonValue(free_dv_mode));
|
||||||
|
}
|
||||||
if(m_mod_af_input_isSet){
|
if(m_mod_af_input_isSet){
|
||||||
obj->insert("modAFInput", QJsonValue(mod_af_input));
|
obj->insert("modAFInput", QJsonValue(mod_af_input));
|
||||||
}
|
}
|
||||||
@ -371,6 +381,16 @@ SWGFreeDVModSettings::setAudioDeviceName(QString* audio_device_name) {
|
|||||||
this->m_audio_device_name_isSet = true;
|
this->m_audio_device_name_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qint32
|
||||||
|
SWGFreeDVModSettings::getFreeDvMode() {
|
||||||
|
return free_dv_mode;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
SWGFreeDVModSettings::setFreeDvMode(qint32 free_dv_mode) {
|
||||||
|
this->free_dv_mode = free_dv_mode;
|
||||||
|
this->m_free_dv_mode_isSet = true;
|
||||||
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGFreeDVModSettings::getModAfInput() {
|
SWGFreeDVModSettings::getModAfInput() {
|
||||||
return mod_af_input;
|
return mod_af_input;
|
||||||
@ -457,6 +477,7 @@ SWGFreeDVModSettings::isSet(){
|
|||||||
if(m_rgb_color_isSet){ isObjectUpdated = true; break;}
|
if(m_rgb_color_isSet){ isObjectUpdated = true; break;}
|
||||||
if(title != nullptr && *title != QString("")){ isObjectUpdated = true; break;}
|
if(title != nullptr && *title != QString("")){ isObjectUpdated = true; break;}
|
||||||
if(audio_device_name != nullptr && *audio_device_name != QString("")){ isObjectUpdated = true; break;}
|
if(audio_device_name != nullptr && *audio_device_name != QString("")){ isObjectUpdated = true; break;}
|
||||||
|
if(m_free_dv_mode_isSet){ isObjectUpdated = true; break;}
|
||||||
if(m_mod_af_input_isSet){ isObjectUpdated = true; break;}
|
if(m_mod_af_input_isSet){ isObjectUpdated = true; break;}
|
||||||
if(m_use_reverse_api_isSet){ isObjectUpdated = true; break;}
|
if(m_use_reverse_api_isSet){ isObjectUpdated = true; break;}
|
||||||
if(reverse_api_address != nullptr && *reverse_api_address != QString("")){ isObjectUpdated = true; break;}
|
if(reverse_api_address != nullptr && *reverse_api_address != QString("")){ isObjectUpdated = true; break;}
|
||||||
|
@ -76,6 +76,9 @@ public:
|
|||||||
QString* getAudioDeviceName();
|
QString* getAudioDeviceName();
|
||||||
void setAudioDeviceName(QString* audio_device_name);
|
void setAudioDeviceName(QString* audio_device_name);
|
||||||
|
|
||||||
|
qint32 getFreeDvMode();
|
||||||
|
void setFreeDvMode(qint32 free_dv_mode);
|
||||||
|
|
||||||
qint32 getModAfInput();
|
qint32 getModAfInput();
|
||||||
void setModAfInput(qint32 mod_af_input);
|
void setModAfInput(qint32 mod_af_input);
|
||||||
|
|
||||||
@ -134,6 +137,9 @@ private:
|
|||||||
QString* audio_device_name;
|
QString* audio_device_name;
|
||||||
bool m_audio_device_name_isSet;
|
bool m_audio_device_name_isSet;
|
||||||
|
|
||||||
|
qint32 free_dv_mode;
|
||||||
|
bool m_free_dv_mode_isSet;
|
||||||
|
|
||||||
qint32 mod_af_input;
|
qint32 mod_af_input;
|
||||||
bool m_mod_af_input_isSet;
|
bool m_mod_af_input_isSet;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user