mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-04 05:30:32 -05:00 
			
		
		
		
	FT8 demod: band presets
This commit is contained in:
		
							parent
							
								
									2b5078e000
								
							
						
					
					
						commit
						09d18ce9a3
					
				@ -3269,10 +3269,11 @@ void FT8::subtract(
 | 
				
			|||||||
        // ???
 | 
					        // ???
 | 
				
			||||||
        while (fabs(target - actual) > M_PI)
 | 
					        while (fabs(target - actual) > M_PI)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (target < actual)
 | 
					            if (target < actual) {
 | 
				
			||||||
                target += 2 * M_PI;
 | 
					                target += (2 * M_PI) - 1e-3; // plus epsilonn to break possible infinite loop
 | 
				
			||||||
            else
 | 
					            } else {
 | 
				
			||||||
                target -= 2 * M_PI;
 | 
					                target -= (2 * M_PI) + 1e-3; // plus epsilonn to break possible infinite loop
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // adj is to be spread evenly over the off-ramp and on-ramp samples.
 | 
					        // adj is to be spread evenly over the off-ramp and on-ramp samples.
 | 
				
			||||||
 | 
				
			|||||||
@ -32,10 +32,13 @@ if(NOT SERVER_MODE)
 | 
				
			|||||||
        ${demodft8_SOURCES}
 | 
					        ${demodft8_SOURCES}
 | 
				
			||||||
        ft8demodgui.cpp
 | 
					        ft8demodgui.cpp
 | 
				
			||||||
        ft8demodgui.ui
 | 
					        ft8demodgui.ui
 | 
				
			||||||
 | 
					        ft8demodsettingsdialog.cpp
 | 
				
			||||||
 | 
					        ft8demodsettingsdialog.ui
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    set(demodft8_HEADERS
 | 
					    set(demodft8_HEADERS
 | 
				
			||||||
        ${demodft8_HEADERS}
 | 
					        ${demodft8_HEADERS}
 | 
				
			||||||
        ft8demodgui.h
 | 
					        ft8demodgui.h
 | 
				
			||||||
 | 
					        ft8demodsettingsdialog.h
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    set(TARGET_NAME demodft8)
 | 
					    set(TARGET_NAME demodft8)
 | 
				
			||||||
    set(TARGET_LIB "Qt::Widgets")
 | 
					    set(TARGET_LIB "Qt::Widgets")
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,10 @@
 | 
				
			|||||||
#include "SWGFT8DemodReport.h"
 | 
					#include "SWGFT8DemodReport.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "dsp/dspengine.h"
 | 
					#include "dsp/dspengine.h"
 | 
				
			||||||
 | 
					#include "dsp/dspdevicesourceengine.h"
 | 
				
			||||||
 | 
					#include "dsp/dspdevicemimoengine.h"
 | 
				
			||||||
 | 
					#include "dsp/devicesamplesource.h"
 | 
				
			||||||
 | 
					#include "dsp/devicesamplemimo.h"
 | 
				
			||||||
#include "dsp/dspcommands.h"
 | 
					#include "dsp/dspcommands.h"
 | 
				
			||||||
#include "dsp/devicesamplemimo.h"
 | 
					#include "dsp/devicesamplemimo.h"
 | 
				
			||||||
#include "device/deviceapi.h"
 | 
					#include "device/deviceapi.h"
 | 
				
			||||||
@ -104,6 +108,18 @@ void FT8Demod::setDeviceAPI(DeviceAPI *deviceAPI)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8Demod::setDeviceCenterFrequency(qint64 centerFrequency, int index)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    DSPDeviceSourceEngine *deviceSourceEngine = m_deviceAPI->getDeviceSourceEngine();
 | 
				
			||||||
 | 
					    DSPDeviceMIMOEngine *deviceMIMOEngine = m_deviceAPI->getDeviceMIMOEngine();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (deviceSourceEngine) {
 | 
				
			||||||
 | 
					        deviceSourceEngine->getSource()->setCenterFrequency(centerFrequency);
 | 
				
			||||||
 | 
					    } else if (deviceMIMOEngine) {
 | 
				
			||||||
 | 
					        deviceMIMOEngine->getMIMO()->setSourceCenterFrequency(centerFrequency, index);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FT8Demod::setMessageQueueToGUI(MessageQueue *queue)
 | 
					void FT8Demod::setMessageQueueToGUI(MessageQueue *queue)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ChannelAPI::setMessageQueueToGUI(queue);
 | 
					    ChannelAPI::setMessageQueueToGUI(queue);
 | 
				
			||||||
 | 
				
			|||||||
@ -95,6 +95,7 @@ public:
 | 
				
			|||||||
        return m_settings.m_inputFrequencyOffset;
 | 
					        return m_settings.m_inputFrequencyOffset;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void setDeviceCenterFrequency(qint64 centerFrequency, int index);
 | 
				
			||||||
    void setMessageQueueToGUI(MessageQueue* queue) override;
 | 
					    void setMessageQueueToGUI(MessageQueue* queue) override;
 | 
				
			||||||
    uint32_t getChannelSampleRate() const { return m_running ? m_basebandSink->getChannelSampleRate() : 0; }
 | 
					    uint32_t getChannelSampleRate() const { return m_running ? m_basebandSink->getChannelSampleRate() : 0; }
 | 
				
			||||||
    double getMagSq() const { return m_running ? m_basebandSink->getMagSq() : 0.0; }
 | 
					    double getMagSq() const { return m_running ? m_basebandSink->getMagSq() : 0.0; }
 | 
				
			||||||
 | 
				
			|||||||
@ -36,6 +36,7 @@
 | 
				
			|||||||
#include "ui_ft8demodgui.h"
 | 
					#include "ui_ft8demodgui.h"
 | 
				
			||||||
#include "ft8demodgui.h"
 | 
					#include "ft8demodgui.h"
 | 
				
			||||||
#include "ft8demod.h"
 | 
					#include "ft8demod.h"
 | 
				
			||||||
 | 
					#include "ft8demodsettingsdialog.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FT8DemodGUI* FT8DemodGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
 | 
					FT8DemodGUI* FT8DemodGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -68,6 +69,7 @@ bool FT8DemodGUI::deserialize(const QByteArray& data)
 | 
				
			|||||||
        ui->lowCut->setMinimum(-480);
 | 
					        ui->lowCut->setMinimum(-480);
 | 
				
			||||||
        displaySettings();
 | 
					        displaySettings();
 | 
				
			||||||
        applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 
					        applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 
				
			||||||
 | 
					        populateBandPresets();
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
@ -79,6 +81,7 @@ bool FT8DemodGUI::deserialize(const QByteArray& data)
 | 
				
			|||||||
        ui->lowCut->setMinimum(-480);
 | 
					        ui->lowCut->setMinimum(-480);
 | 
				
			||||||
        displaySettings();
 | 
					        displaySettings();
 | 
				
			||||||
        applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 
					        applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 
				
			||||||
 | 
					        populateBandPresets();
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -211,6 +214,22 @@ void FT8DemodGUI::on_filterIndex_valueChanged(int value)
 | 
				
			|||||||
    applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 
					    applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodGUI::on_applyBandPreset_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int bandPresetIndex = ui->bandPreset->currentIndex();
 | 
				
			||||||
 | 
					    int channelShift = m_settings.m_bandPresets[bandPresetIndex].m_channelOffset; // kHz
 | 
				
			||||||
 | 
					    int baseFrequency = m_settings.m_bandPresets[bandPresetIndex].m_baseFrequency; // kHz
 | 
				
			||||||
 | 
					    quint64 deviceFrequency = (baseFrequency - channelShift)*1000; // Hz
 | 
				
			||||||
 | 
					    m_ft8Demod->setDeviceCenterFrequency(deviceFrequency, m_settings.m_streamIndex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (channelShift * 1000 != m_settings.m_inputFrequencyOffset)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_settings.m_inputFrequencyOffset = channelShift * 1000; // Hz
 | 
				
			||||||
 | 
					        displaySettings();
 | 
				
			||||||
 | 
					        applySettings();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FT8DemodGUI::on_clearMessages_clicked()
 | 
					void FT8DemodGUI::on_clearMessages_clicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ui->messages->setRowCount(0);
 | 
					    ui->messages->setRowCount(0);
 | 
				
			||||||
@ -229,18 +248,38 @@ void FT8DemodGUI::on_logMessages_toggled(bool checked)
 | 
				
			|||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FT8DemodGUI::on_nbThreads_valueChanged(int value)
 | 
					void FT8DemodGUI::on_settings_clicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ui->nbThreadsText->setText(tr("%1").arg(value));
 | 
					    FT8DemodSettings settings = m_settings;
 | 
				
			||||||
    m_settings.m_nbDecoderThreads = value;
 | 
					    QStringList settingsKeys;
 | 
				
			||||||
    applySettings();
 | 
					    FT8DemodSettingsDialog dialog(settings, settingsKeys);
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FT8DemodGUI::on_timeBudget_valueChanged(int value)
 | 
					    if (dialog.exec() == QDialog::Accepted)
 | 
				
			||||||
{
 | 
					    {
 | 
				
			||||||
    m_settings.m_decoderTimeBudget = value / 10.0f;
 | 
					        bool changed = false;
 | 
				
			||||||
    ui->timeBudgetText->setText(tr("%1").arg(m_settings.m_decoderTimeBudget, 0, 'f', 1));
 | 
					
 | 
				
			||||||
    applySettings();
 | 
					        if (settingsKeys.contains("nbDecoderThreads"))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            m_settings.m_nbDecoderThreads = settings.m_nbDecoderThreads;
 | 
				
			||||||
 | 
					            changed = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (settingsKeys.contains("decoderTimeBudget"))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            m_settings.m_decoderTimeBudget = settings.m_decoderTimeBudget;
 | 
				
			||||||
 | 
					            changed = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (settingsKeys.contains("bandPresets"))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            m_settings.m_bandPresets = settings.m_bandPresets;
 | 
				
			||||||
 | 
					            populateBandPresets();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (changed) {
 | 
				
			||||||
 | 
					            applySettings();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FT8DemodGUI::onMenuDialogCalled(const QPoint &p)
 | 
					void FT8DemodGUI::onMenuDialogCalled(const QPoint &p)
 | 
				
			||||||
@ -377,6 +416,7 @@ FT8DemodGUI::FT8DemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Resize the table using dummy data
 | 
					    // Resize the table using dummy data
 | 
				
			||||||
    resizeMessageTable();
 | 
					    resizeMessageTable();
 | 
				
			||||||
 | 
					    populateBandPresets();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FT8DemodGUI::~FT8DemodGUI()
 | 
					FT8DemodGUI::~FT8DemodGUI()
 | 
				
			||||||
@ -544,10 +584,6 @@ void FT8DemodGUI::displaySettings()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ui->recordWav->setChecked(m_settings.m_recordWav);
 | 
					    ui->recordWav->setChecked(m_settings.m_recordWav);
 | 
				
			||||||
    ui->logMessages->setChecked(m_settings.m_logMessages);
 | 
					    ui->logMessages->setChecked(m_settings.m_logMessages);
 | 
				
			||||||
    ui->nbThreads->setValue(m_settings.m_nbDecoderThreads);
 | 
					 | 
				
			||||||
    ui->nbThreadsText->setText(tr("%1").arg(m_settings.m_nbDecoderThreads));
 | 
					 | 
				
			||||||
    ui->timeBudget->setValue(m_settings.m_decoderTimeBudget*10);
 | 
					 | 
				
			||||||
    ui->timeBudgetText->setText(tr("%1").arg(m_settings.m_decoderTimeBudget, 0, 'f', 1));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    updateIndexLabel();
 | 
					    updateIndexLabel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -598,11 +634,11 @@ void FT8DemodGUI::makeUIConnections()
 | 
				
			|||||||
    QObject::connect(ui->spanLog2, &QSlider::valueChanged, this, &FT8DemodGUI::on_spanLog2_valueChanged);
 | 
					    QObject::connect(ui->spanLog2, &QSlider::valueChanged, this, &FT8DemodGUI::on_spanLog2_valueChanged);
 | 
				
			||||||
    QObject::connect(ui->fftWindow, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &FT8DemodGUI::on_fftWindow_currentIndexChanged);
 | 
					    QObject::connect(ui->fftWindow, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &FT8DemodGUI::on_fftWindow_currentIndexChanged);
 | 
				
			||||||
    QObject::connect(ui->filterIndex, &QDial::valueChanged, this, &FT8DemodGUI::on_filterIndex_valueChanged);
 | 
					    QObject::connect(ui->filterIndex, &QDial::valueChanged, this, &FT8DemodGUI::on_filterIndex_valueChanged);
 | 
				
			||||||
 | 
					    QObject::connect(ui->applyBandPreset, &QPushButton::clicked, this, &FT8DemodGUI::on_applyBandPreset_clicked);
 | 
				
			||||||
    QObject::connect(ui->clearMessages, &QPushButton::clicked, this, &FT8DemodGUI::on_clearMessages_clicked);
 | 
					    QObject::connect(ui->clearMessages, &QPushButton::clicked, this, &FT8DemodGUI::on_clearMessages_clicked);
 | 
				
			||||||
    QObject::connect(ui->recordWav, &ButtonSwitch::toggled, this, &FT8DemodGUI::on_recordWav_toggled);
 | 
					    QObject::connect(ui->recordWav, &ButtonSwitch::toggled, this, &FT8DemodGUI::on_recordWav_toggled);
 | 
				
			||||||
    QObject::connect(ui->logMessages, &ButtonSwitch::toggled, this, &FT8DemodGUI::on_logMessages_toggled);
 | 
					    QObject::connect(ui->logMessages, &ButtonSwitch::toggled, this, &FT8DemodGUI::on_logMessages_toggled);
 | 
				
			||||||
    QObject::connect(ui->nbThreads, &QDial::valueChanged, this, &FT8DemodGUI::on_nbThreads_valueChanged);
 | 
					    QObject::connect(ui->settings, &QPushButton::clicked, this, &FT8DemodGUI::on_settings_clicked);
 | 
				
			||||||
    QObject::connect(ui->timeBudget, &QDial::valueChanged, this, &FT8DemodGUI::on_timeBudget_valueChanged);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FT8DemodGUI::updateAbsoluteCenterFrequency()
 | 
					void FT8DemodGUI::updateAbsoluteCenterFrequency()
 | 
				
			||||||
@ -687,3 +723,15 @@ void FT8DemodGUI::messagesReceived(const QList<FT8Message>& messages)
 | 
				
			|||||||
        ui->messages->scrollToBottom();
 | 
					        ui->messages->scrollToBottom();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodGUI::populateBandPresets()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ui->bandPreset->blockSignals(true);
 | 
				
			||||||
 | 
					    ui->bandPreset->clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const auto& bandPreset : m_settings.m_bandPresets) {
 | 
				
			||||||
 | 
					        ui->bandPreset->addItem(bandPreset.m_name);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ui->bandPreset->blockSignals(false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -103,6 +103,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void resizeMessageTable();
 | 
					    void resizeMessageTable();
 | 
				
			||||||
    void messagesReceived(const QList<FT8Message>& messages);
 | 
					    void messagesReceived(const QList<FT8Message>& messages);
 | 
				
			||||||
 | 
					    void populateBandPresets();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enum MessageCol {
 | 
					    enum MessageCol {
 | 
				
			||||||
        MESSAGE_COL_UTC,
 | 
					        MESSAGE_COL_UTC,
 | 
				
			||||||
@ -126,11 +127,11 @@ private slots:
 | 
				
			|||||||
	void on_spanLog2_valueChanged(int value);
 | 
						void on_spanLog2_valueChanged(int value);
 | 
				
			||||||
    void on_fftWindow_currentIndexChanged(int index);
 | 
					    void on_fftWindow_currentIndexChanged(int index);
 | 
				
			||||||
    void on_filterIndex_valueChanged(int value);
 | 
					    void on_filterIndex_valueChanged(int value);
 | 
				
			||||||
 | 
					    void on_applyBandPreset_clicked();
 | 
				
			||||||
    void on_clearMessages_clicked();
 | 
					    void on_clearMessages_clicked();
 | 
				
			||||||
    void on_recordWav_toggled(bool checked);
 | 
					    void on_recordWav_toggled(bool checked);
 | 
				
			||||||
    void on_logMessages_toggled(bool checked);
 | 
					    void on_logMessages_toggled(bool checked);
 | 
				
			||||||
    void on_nbThreads_valueChanged(int value);
 | 
					    void on_settings_clicked();
 | 
				
			||||||
    void on_timeBudget_valueChanged(int value);
 | 
					 | 
				
			||||||
	void onWidgetRolled(QWidget* widget, bool rollDown);
 | 
						void onWidgetRolled(QWidget* widget, bool rollDown);
 | 
				
			||||||
    void onMenuDialogCalled(const QPoint& p);
 | 
					    void onMenuDialogCalled(const QPoint& p);
 | 
				
			||||||
    void handleInputMessages();
 | 
					    void handleInputMessages();
 | 
				
			||||||
 | 
				
			|||||||
@ -780,93 +780,22 @@
 | 
				
			|||||||
    <item>
 | 
					    <item>
 | 
				
			||||||
     <layout class="QHBoxLayout" name="ft8Settings">
 | 
					     <layout class="QHBoxLayout" name="ft8Settings">
 | 
				
			||||||
      <item>
 | 
					      <item>
 | 
				
			||||||
       <widget class="QLabel" name="nbThreadsLabel">
 | 
					       <widget class="QPushButton" name="settings">
 | 
				
			||||||
        <property name="text">
 | 
					 | 
				
			||||||
         <string>Th</string>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
       </widget>
 | 
					 | 
				
			||||||
      </item>
 | 
					 | 
				
			||||||
      <item>
 | 
					 | 
				
			||||||
       <widget class="QDial" name="nbThreads">
 | 
					 | 
				
			||||||
        <property name="maximumSize">
 | 
					        <property name="maximumSize">
 | 
				
			||||||
         <size>
 | 
					         <size>
 | 
				
			||||||
          <width>24</width>
 | 
					          <width>32</width>
 | 
				
			||||||
          <height>24</height>
 | 
					          <height>16777215</height>
 | 
				
			||||||
         </size>
 | 
					         </size>
 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
        <property name="toolTip">
 | 
					        <property name="toolTip">
 | 
				
			||||||
         <string>Number of decoder threads</string>
 | 
					         <string>Open settings dialog</string>
 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
        <property name="minimum">
 | 
					 | 
				
			||||||
         <number>2</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="maximum">
 | 
					 | 
				
			||||||
         <number>12</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="singleStep">
 | 
					 | 
				
			||||||
         <number>1</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="pageStep">
 | 
					 | 
				
			||||||
         <number>1</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="value">
 | 
					 | 
				
			||||||
         <number>6</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
       </widget>
 | 
					 | 
				
			||||||
      </item>
 | 
					 | 
				
			||||||
      <item>
 | 
					 | 
				
			||||||
       <widget class="QLabel" name="nbThreadsText">
 | 
					 | 
				
			||||||
        <property name="text">
 | 
					        <property name="text">
 | 
				
			||||||
         <string>6</string>
 | 
					         <string/>
 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
       </widget>
 | 
					        <property name="icon">
 | 
				
			||||||
      </item>
 | 
					         <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
      <item>
 | 
					          <normaloff>:/tool.png</normaloff>:/tool.png</iconset>
 | 
				
			||||||
       <widget class="Line" name="line_2">
 | 
					 | 
				
			||||||
        <property name="orientation">
 | 
					 | 
				
			||||||
         <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
       </widget>
 | 
					 | 
				
			||||||
      </item>
 | 
					 | 
				
			||||||
      <item>
 | 
					 | 
				
			||||||
       <widget class="QLabel" name="timeBudgetLabel">
 | 
					 | 
				
			||||||
        <property name="text">
 | 
					 | 
				
			||||||
         <string>TB</string>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
       </widget>
 | 
					 | 
				
			||||||
      </item>
 | 
					 | 
				
			||||||
      <item>
 | 
					 | 
				
			||||||
       <widget class="QDial" name="timeBudget">
 | 
					 | 
				
			||||||
        <property name="maximumSize">
 | 
					 | 
				
			||||||
         <size>
 | 
					 | 
				
			||||||
          <width>24</width>
 | 
					 | 
				
			||||||
          <height>24</height>
 | 
					 | 
				
			||||||
         </size>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="toolTip">
 | 
					 | 
				
			||||||
         <string>Decoder time budget (seconds)</string>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="minimum">
 | 
					 | 
				
			||||||
         <number>5</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="maximum">
 | 
					 | 
				
			||||||
         <number>50</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="singleStep">
 | 
					 | 
				
			||||||
         <number>1</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="pageStep">
 | 
					 | 
				
			||||||
         <number>1</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
        <property name="value">
 | 
					 | 
				
			||||||
         <number>25</number>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
       </widget>
 | 
					 | 
				
			||||||
      </item>
 | 
					 | 
				
			||||||
      <item>
 | 
					 | 
				
			||||||
       <widget class="QLabel" name="timeBudgetText">
 | 
					 | 
				
			||||||
        <property name="text">
 | 
					 | 
				
			||||||
         <string>2.5</string>
 | 
					 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
       </widget>
 | 
					       </widget>
 | 
				
			||||||
      </item>
 | 
					      </item>
 | 
				
			||||||
@ -904,7 +833,7 @@
 | 
				
			|||||||
       </widget>
 | 
					       </widget>
 | 
				
			||||||
      </item>
 | 
					      </item>
 | 
				
			||||||
      <item>
 | 
					      <item>
 | 
				
			||||||
       <widget class="QLabel" name="label">
 | 
					       <widget class="QLabel" name="separatorLabel">
 | 
				
			||||||
        <property name="text">
 | 
					        <property name="text">
 | 
				
			||||||
         <string>/</string>
 | 
					         <string>/</string>
 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
@ -918,6 +847,9 @@
 | 
				
			|||||||
          <height>0</height>
 | 
					          <height>0</height>
 | 
				
			||||||
         </size>
 | 
					         </size>
 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
 | 
					        <property name="toolTip">
 | 
				
			||||||
 | 
					         <string>Total number of decodes displayed</string>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
        <property name="text">
 | 
					        <property name="text">
 | 
				
			||||||
         <string>0</string>
 | 
					         <string>0</string>
 | 
				
			||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
@ -926,6 +858,43 @@
 | 
				
			|||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
       </widget>
 | 
					       </widget>
 | 
				
			||||||
      </item>
 | 
					      </item>
 | 
				
			||||||
 | 
					      <item>
 | 
				
			||||||
 | 
					       <widget class="QLabel" name="bandPresetLabel">
 | 
				
			||||||
 | 
					        <property name="text">
 | 
				
			||||||
 | 
					         <string>Band</string>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					       </widget>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
 | 
					      <item>
 | 
				
			||||||
 | 
					       <widget class="QComboBox" name="bandPreset">
 | 
				
			||||||
 | 
					        <property name="minimumSize">
 | 
				
			||||||
 | 
					         <size>
 | 
				
			||||||
 | 
					          <width>80</width>
 | 
				
			||||||
 | 
					          <height>0</height>
 | 
				
			||||||
 | 
					         </size>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					       </widget>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
 | 
					      <item>
 | 
				
			||||||
 | 
					       <widget class="QPushButton" name="applyBandPreset">
 | 
				
			||||||
 | 
					        <property name="maximumSize">
 | 
				
			||||||
 | 
					         <size>
 | 
				
			||||||
 | 
					          <width>32</width>
 | 
				
			||||||
 | 
					          <height>16777215</height>
 | 
				
			||||||
 | 
					         </size>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					        <property name="toolTip">
 | 
				
			||||||
 | 
					         <string>Apply selected band presets</string>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					        <property name="text">
 | 
				
			||||||
 | 
					         <string/>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					        <property name="icon">
 | 
				
			||||||
 | 
					         <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
 | 
					          <normaloff>:/arrow_left.png</normaloff>:/arrow_left.png</iconset>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					       </widget>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
      <item>
 | 
					      <item>
 | 
				
			||||||
       <spacer name="horizontalSpacer">
 | 
					       <spacer name="horizontalSpacer">
 | 
				
			||||||
        <property name="orientation">
 | 
					        <property name="orientation">
 | 
				
			||||||
 | 
				
			|||||||
@ -60,11 +60,54 @@ void FT8DemodSettings::resetToDefaults()
 | 
				
			|||||||
    m_workspaceIndex = 0;
 | 
					    m_workspaceIndex = 0;
 | 
				
			||||||
    m_hidden = false;
 | 
					    m_hidden = false;
 | 
				
			||||||
    m_filterIndex = 0;
 | 
					    m_filterIndex = 0;
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{"160m",   1840, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "80m",   3573, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "60m",   5357, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "40m",   7074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "30m",  10136, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "20m",  14074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "17m",  18100, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "15m",  21074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "12m",  24915, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "10m",  28074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{  "6m",  50313, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{  "4m",  70100, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{  "2m", 144120, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{"1.2m", 222065, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{"70cm", 432065, 0});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettings::resetBandPresets()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_bandPresets.clear();
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{"160m",   1840, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "80m",   3573, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "60m",   5357, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "40m",   7074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "30m",  10136, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "20m",  14074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "17m",  18100, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "15m",  21074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "12m",  24915, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{ "10m",  28074, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{  "6m",  50313, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{  "4m",  70100, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{  "2m", 144120, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{"1.2m", 222065, 0});
 | 
				
			||||||
 | 
					    m_bandPresets.push_back(FT8DemodBandPreset{"70cm", 432065, 0});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QByteArray FT8DemodSettings::serialize() const
 | 
					QByteArray FT8DemodSettings::serialize() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SimpleSerializer s(1);
 | 
					    SimpleSerializer s(1);
 | 
				
			||||||
 | 
					    QByteArray bytetmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QDataStream *stream = new QDataStream(&bytetmp, QIODevice::WriteOnly);
 | 
				
			||||||
 | 
					    *stream << m_bandPresets;
 | 
				
			||||||
 | 
					    delete stream;
 | 
				
			||||||
 | 
					    s.writeBlob(2, bytetmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s.writeS32(1, m_inputFrequencyOffset);
 | 
					    s.writeS32(1, m_inputFrequencyOffset);
 | 
				
			||||||
    s.writeS32(3, m_volume * 10.0);
 | 
					    s.writeS32(3, m_volume * 10.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -123,6 +166,10 @@ bool FT8DemodSettings::deserialize(const QByteArray& data)
 | 
				
			|||||||
        uint32_t utmp;
 | 
					        uint32_t utmp;
 | 
				
			||||||
        QString strtmp;
 | 
					        QString strtmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        d.readBlob(2, &bytetmp);
 | 
				
			||||||
 | 
					        QDataStream readStream(&bytetmp, QIODevice::ReadOnly);
 | 
				
			||||||
 | 
					        readStream >> m_bandPresets;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        d.readS32(1, &m_inputFrequencyOffset, 0);
 | 
					        d.readS32(1, &m_inputFrequencyOffset, 0);
 | 
				
			||||||
        d.readS32(3, &tmp, 30);
 | 
					        d.readS32(3, &tmp, 30);
 | 
				
			||||||
        m_volume = tmp / 10.0;
 | 
					        m_volume = tmp / 10.0;
 | 
				
			||||||
@ -188,3 +235,19 @@ bool FT8DemodSettings::deserialize(const QByteArray& data)
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDataStream& operator<<(QDataStream& out, const FT8DemodBandPreset& bandPreset)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    out << bandPreset.m_name;
 | 
				
			||||||
 | 
					    out << bandPreset.m_baseFrequency;
 | 
				
			||||||
 | 
					    out << bandPreset.m_channelOffset;
 | 
				
			||||||
 | 
					    return out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDataStream& operator>>(QDataStream& in, FT8DemodBandPreset& bandPreset)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    in >> bandPreset.m_name;
 | 
				
			||||||
 | 
					    in >> bandPreset.m_baseFrequency;
 | 
				
			||||||
 | 
					    in >> bandPreset.m_channelOffset;
 | 
				
			||||||
 | 
					    return in;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <QByteArray>
 | 
					#include <QByteArray>
 | 
				
			||||||
#include <QString>
 | 
					#include <QString>
 | 
				
			||||||
 | 
					#include <QList>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "dsp/fftwindow.h"
 | 
					#include "dsp/fftwindow.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,6 +41,13 @@ struct FT8DemodFilterSettings
 | 
				
			|||||||
    {}
 | 
					    {}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct FT8DemodBandPreset
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QString m_name;
 | 
				
			||||||
 | 
					    int m_baseFrequency;
 | 
				
			||||||
 | 
					    int m_channelOffset;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct FT8DemodSettings
 | 
					struct FT8DemodSettings
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    qint32 m_inputFrequencyOffset;
 | 
					    qint32 m_inputFrequencyOffset;
 | 
				
			||||||
@ -65,6 +73,7 @@ struct FT8DemodSettings
 | 
				
			|||||||
    // FFTWindow::Function m_fftWindow;
 | 
					    // FFTWindow::Function m_fftWindow;
 | 
				
			||||||
    std::vector<FT8DemodFilterSettings> m_filterBank;
 | 
					    std::vector<FT8DemodFilterSettings> m_filterBank;
 | 
				
			||||||
    unsigned int m_filterIndex;
 | 
					    unsigned int m_filterIndex;
 | 
				
			||||||
 | 
					    QList<FT8DemodBandPreset> m_bandPresets;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Serializable *m_channelMarker;
 | 
					    Serializable *m_channelMarker;
 | 
				
			||||||
    Serializable *m_spectrumGUI;
 | 
					    Serializable *m_spectrumGUI;
 | 
				
			||||||
@ -77,11 +86,14 @@ struct FT8DemodSettings
 | 
				
			|||||||
    void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; }
 | 
					    void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; }
 | 
				
			||||||
    QByteArray serialize() const;
 | 
					    QByteArray serialize() const;
 | 
				
			||||||
    bool deserialize(const QByteArray& data);
 | 
					    bool deserialize(const QByteArray& data);
 | 
				
			||||||
 | 
					    void resetBandPresets();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static const int m_ft8SampleRate;
 | 
					    static const int m_ft8SampleRate;
 | 
				
			||||||
    static const int m_minPowerThresholdDB;
 | 
					    static const int m_minPowerThresholdDB;
 | 
				
			||||||
    static const float m_mminPowerThresholdDBf;
 | 
					    static const float m_mminPowerThresholdDBf;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDataStream& operator<<(QDataStream& out, const FT8DemodBandPreset& bandPreset);
 | 
				
			||||||
 | 
					QDataStream& operator>>(QDataStream& in, FT8DemodBandPreset& bandPreset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* PLUGINS_CHANNELRX_DEMODFT8_FT8DEMODSETTINGS_H_ */
 | 
					#endif /* PLUGINS_CHANNELRX_DEMODFT8_FT8DEMODSETTINGS_H_ */
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										290
									
								
								plugins/channelrx/demodft8/ft8demodsettingsdialog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								plugins/channelrx/demodft8/ft8demodsettingsdialog.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,290 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Copyright (C) 2017 Edouard Griffiths, 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                  //
 | 
				
			||||||
 | 
					// (at your option) any later version.                                           //
 | 
				
			||||||
 | 
					//                                                                               //
 | 
				
			||||||
 | 
					// 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 <http://www.gnu.org/licenses/>.          //
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					#include <QScrollBar>
 | 
				
			||||||
 | 
					#include <QLineEdit>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "ft8demodsettings.h"
 | 
				
			||||||
 | 
					#include "ft8demodsettingsdialog.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FT8DemodSettingsDialog::FT8DemodSettingsDialog(FT8DemodSettings& settings, QStringList& settingsKeys, QWidget* parent ) :
 | 
				
			||||||
 | 
					    QDialog(parent),
 | 
				
			||||||
 | 
					    ui(new Ui::FT8DemodSettingsDialog),
 | 
				
			||||||
 | 
					    m_settings(settings),
 | 
				
			||||||
 | 
					    m_settingsKeys(settingsKeys)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ui->setupUi(this);
 | 
				
			||||||
 | 
					    ui->decoderNbThreads->setValue(m_settings.m_nbDecoderThreads);
 | 
				
			||||||
 | 
					    ui->decoderTimeBudget->setValue(m_settings.m_decoderTimeBudget);
 | 
				
			||||||
 | 
					    resizeBandsTable();
 | 
				
			||||||
 | 
					    populateBandsTable();
 | 
				
			||||||
 | 
					    connect(ui->bands, &QTableWidget::cellChanged, this, &FT8DemodSettingsDialog::textCellChanged);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FT8DemodSettingsDialog::~FT8DemodSettingsDialog()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::resizeBandsTable()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Fill table with a row of dummy data that will size the columns nicely
 | 
				
			||||||
 | 
					    // Trailing spaces are for sort arrow
 | 
				
			||||||
 | 
					    int row = ui->bands->rowCount();
 | 
				
			||||||
 | 
					    ui->bands->setRowCount(row + 1);
 | 
				
			||||||
 | 
					    ui->bands->setItem(row, BAND_NAME, new QTableWidgetItem("123456789012345"));
 | 
				
			||||||
 | 
					    ui->bands->setItem(row, BAND_BASE_FREQUENCY, new QTableWidgetItem("10000000"));
 | 
				
			||||||
 | 
					    ui->bands->setItem(row, BAND_OFFSET_FREQUENCY, new QTableWidgetItem("-1000"));
 | 
				
			||||||
 | 
					    ui->bands->resizeColumnsToContents();
 | 
				
			||||||
 | 
					    ui->bands->removeRow(row);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::populateBandsTable()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Add to messages table
 | 
				
			||||||
 | 
					    int row = ui->bands->rowCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const auto& band : m_settings.m_bandPresets)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ui->bands->setRowCount(row + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        QTableWidgetItem *nameItem = new QTableWidgetItem();
 | 
				
			||||||
 | 
					        QTableWidgetItem *baseFrequencyItem = new QTableWidgetItem();
 | 
				
			||||||
 | 
					        QTableWidgetItem *offsetFrequencyItem = new QTableWidgetItem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ui->bands->setItem(row, BAND_NAME, nameItem);
 | 
				
			||||||
 | 
					        ui->bands->setItem(row, BAND_BASE_FREQUENCY, baseFrequencyItem);
 | 
				
			||||||
 | 
					        ui->bands->setItem(row, BAND_OFFSET_FREQUENCY, offsetFrequencyItem);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nameItem->setText(band.m_name);
 | 
				
			||||||
 | 
					        QLineEdit *editBaseFrequency = new QLineEdit(ui->bands);
 | 
				
			||||||
 | 
					        editBaseFrequency->setValidator(new QIntValidator());
 | 
				
			||||||
 | 
					        editBaseFrequency->setText(tr("%1").arg(band.m_baseFrequency));
 | 
				
			||||||
 | 
					        editBaseFrequency->setAlignment(Qt::AlignRight);
 | 
				
			||||||
 | 
					        editBaseFrequency->setProperty("row", row);
 | 
				
			||||||
 | 
					        ui->bands->setCellWidget(row, BAND_BASE_FREQUENCY, editBaseFrequency);
 | 
				
			||||||
 | 
					        QLineEdit *editOffsetFrequency = new QLineEdit(ui->bands);
 | 
				
			||||||
 | 
					        editOffsetFrequency->setValidator(new QIntValidator());
 | 
				
			||||||
 | 
					        editOffsetFrequency->setText(tr("%1").arg(band.m_channelOffset));
 | 
				
			||||||
 | 
					        editOffsetFrequency->setAlignment(Qt::AlignRight);
 | 
				
			||||||
 | 
					        editOffsetFrequency->setProperty("row", row);
 | 
				
			||||||
 | 
					        ui->bands->setCellWidget(row, BAND_OFFSET_FREQUENCY, editOffsetFrequency);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        connect(editBaseFrequency, &QLineEdit::editingFinished, this, &FT8DemodSettingsDialog::baseFrequencyCellChanged);
 | 
				
			||||||
 | 
					        connect(editOffsetFrequency, &QLineEdit::editingFinished, this, &FT8DemodSettingsDialog::offsetFrequencyCellChanged);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        row++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::accept()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QDialog::accept();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::reject()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_settingsKeys.clear();
 | 
				
			||||||
 | 
					    QDialog::reject();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_decoderNbThreads_valueChanged(int value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_settings.m_nbDecoderThreads = value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("nbDecoderThreads")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("nbDecoderThreads");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_decoderTimeBudget_valueChanged(double value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_settings.m_decoderTimeBudget = value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("decoderTimeBudget")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("decoderTimeBudget");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_addBand_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int currentRow = ui->bands->currentRow();
 | 
				
			||||||
 | 
					    const QTableWidgetItem *currentNameItem = ui->bands->item(currentRow, BAND_NAME);
 | 
				
			||||||
 | 
					    FT8DemodBandPreset newPreset({"", 0, 0});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (currentNameItem) {
 | 
				
			||||||
 | 
					        newPreset.m_name = currentNameItem->text();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QLineEdit *currentEditBaseFrequency = qobject_cast<QLineEdit*>(ui->bands->cellWidget(currentRow, BAND_BASE_FREQUENCY));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (currentEditBaseFrequency) {
 | 
				
			||||||
 | 
					        newPreset.m_baseFrequency = currentEditBaseFrequency->text().toInt();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QLineEdit *currentEditOffsetFrequency = qobject_cast<QLineEdit*>(ui->bands->cellWidget(currentRow, BAND_OFFSET_FREQUENCY));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (currentEditOffsetFrequency) {
 | 
				
			||||||
 | 
					        newPreset.m_channelOffset = currentEditOffsetFrequency->text().toInt();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_settings.m_bandPresets.push_back(newPreset);
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(true);
 | 
				
			||||||
 | 
					    ui->bands->setRowCount(0);
 | 
				
			||||||
 | 
					    populateBandsTable();
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_deleteBand_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int currentRow = ui->bands->currentRow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (currentRow < 0) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_settings.m_bandPresets.removeAt(currentRow);
 | 
				
			||||||
 | 
					    ui->bands->removeRow(currentRow);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_moveBandUp_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int currentRow = ui->bands->currentRow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (currentRow < 1) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(true);
 | 
				
			||||||
 | 
					    QList<QTableWidgetItem*> sourceItems = takeRow(currentRow);
 | 
				
			||||||
 | 
					    QList<QTableWidgetItem*> destItems = takeRow(currentRow-1);
 | 
				
			||||||
 | 
					    setRow(currentRow, destItems);
 | 
				
			||||||
 | 
					    setRow(currentRow-1, sourceItems);
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const auto sourceBandPreset = m_settings.m_bandPresets[currentRow];
 | 
				
			||||||
 | 
					    const auto destBandPreset = m_settings.m_bandPresets[currentRow-1];
 | 
				
			||||||
 | 
					    m_settings.m_bandPresets[currentRow] = destBandPreset;
 | 
				
			||||||
 | 
					    m_settings.m_bandPresets[currentRow-1] = sourceBandPreset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_moveBandDown_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int currentRow = ui->bands->currentRow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (currentRow > ui->bands->rowCount()-2) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(true);
 | 
				
			||||||
 | 
					    QList<QTableWidgetItem*> sourceItems = takeRow(currentRow);
 | 
				
			||||||
 | 
					    QList<QTableWidgetItem*> destItems = takeRow(currentRow+1);
 | 
				
			||||||
 | 
					    setRow(currentRow, destItems);
 | 
				
			||||||
 | 
					    setRow(currentRow+1, sourceItems);
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const auto sourceBandPreset = m_settings.m_bandPresets[currentRow];
 | 
				
			||||||
 | 
					    const auto destBandPreset = m_settings.m_bandPresets[currentRow+1];
 | 
				
			||||||
 | 
					    m_settings.m_bandPresets[currentRow] = destBandPreset;
 | 
				
			||||||
 | 
					    m_settings.m_bandPresets[currentRow+1] = sourceBandPreset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::on_restoreBandPresets_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_settings.resetBandPresets();
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(true);
 | 
				
			||||||
 | 
					    ui->bands->setRowCount(0);
 | 
				
			||||||
 | 
					    populateBandsTable();
 | 
				
			||||||
 | 
					    ui->bands->blockSignals(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::textCellChanged(int row, int col)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (col == BAND_NAME) {
 | 
				
			||||||
 | 
					        m_settings.m_bandPresets[row].m_name = ui->bands->item(row, col)->text();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::baseFrequencyCellChanged()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QLineEdit *editBaseFrequency = qobject_cast<QLineEdit*>(sender());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (editBaseFrequency)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        int row = editBaseFrequency->property("row").toInt();
 | 
				
			||||||
 | 
					        m_settings.m_bandPresets[row].m_baseFrequency = editBaseFrequency->text().toInt();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::offsetFrequencyCellChanged()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QLineEdit *editOffsetFrequency = qobject_cast<QLineEdit*>(sender());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (editOffsetFrequency)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        int row = editOffsetFrequency->property("row").toInt();
 | 
				
			||||||
 | 
					        m_settings.m_bandPresets[row].m_channelOffset = editOffsetFrequency->text().toInt();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m_settingsKeys.contains("bandPresets")) {
 | 
				
			||||||
 | 
					        m_settingsKeys.append("bandPresets");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QList<QTableWidgetItem*> FT8DemodSettingsDialog::takeRow(int row)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						QList<QTableWidgetItem*> rowItems;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (int col = 0; col < ui->bands->columnCount(); ++col) {
 | 
				
			||||||
 | 
							rowItems << ui->bands->takeItem(row, col);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return rowItems;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FT8DemodSettingsDialog::setRow(int row, const QList<QTableWidgetItem*>& rowItems)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (int col = 0; col < ui->bands->columnCount(); ++col) {
 | 
				
			||||||
 | 
							ui->bands->setItem(row, col, rowItems.at(col));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										65
									
								
								plugins/channelrx/demodft8/ft8demodsettingsdialog.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								plugins/channelrx/demodft8/ft8demodsettingsdialog.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Copyright (C) 2017 Edouard Griffiths, 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                  //
 | 
				
			||||||
 | 
					// (at your option) any later version.                                           //
 | 
				
			||||||
 | 
					//                                                                               //
 | 
				
			||||||
 | 
					// 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 <http://www.gnu.org/licenses/>.          //
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef PLUGINS_CHANNELRX_DEMODFT8_FT8DEMODSETTINGSDIALOG_H_
 | 
				
			||||||
 | 
					#define PLUGINS_CHANNELRX_DEMODFT8_FT8DEMODSETTINGSDIALOG_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "ui_ft8demodsettingsdialog.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FT8DemodSettings;
 | 
				
			||||||
 | 
					class QStringList;
 | 
				
			||||||
 | 
					class QTableWidgetItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FT8DemodSettingsDialog : public QDialog {
 | 
				
			||||||
 | 
					    Q_OBJECT
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    FT8DemodSettingsDialog(FT8DemodSettings& settings, QStringList& settingsKeys, QWidget* parent = nullptr);
 | 
				
			||||||
 | 
					    ~FT8DemodSettingsDialog();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    Ui::FT8DemodSettingsDialog* ui;
 | 
				
			||||||
 | 
					    FT8DemodSettings& m_settings;
 | 
				
			||||||
 | 
					    QStringList& m_settingsKeys;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    enum BandCol {
 | 
				
			||||||
 | 
					        BAND_NAME,
 | 
				
			||||||
 | 
					        BAND_BASE_FREQUENCY,
 | 
				
			||||||
 | 
					        BAND_OFFSET_FREQUENCY,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void resizeBandsTable();
 | 
				
			||||||
 | 
					    void populateBandsTable();
 | 
				
			||||||
 | 
					    QList<QTableWidgetItem*> takeRow(int row);
 | 
				
			||||||
 | 
					    void setRow(int row, const QList<QTableWidgetItem*>& rowItems);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private slots:
 | 
				
			||||||
 | 
					    void accept();
 | 
				
			||||||
 | 
					    void reject();
 | 
				
			||||||
 | 
					    void on_decoderNbThreads_valueChanged(int value);
 | 
				
			||||||
 | 
					    void on_decoderTimeBudget_valueChanged(double value);
 | 
				
			||||||
 | 
					    void on_addBand_clicked();
 | 
				
			||||||
 | 
					    void on_deleteBand_clicked();
 | 
				
			||||||
 | 
					    void on_moveBandUp_clicked();
 | 
				
			||||||
 | 
					    void on_moveBandDown_clicked();
 | 
				
			||||||
 | 
					    void on_restoreBandPresets_clicked();
 | 
				
			||||||
 | 
					    void textCellChanged(int row, int col);
 | 
				
			||||||
 | 
					    void baseFrequencyCellChanged();
 | 
				
			||||||
 | 
					    void offsetFrequencyCellChanged();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // PLUGINS_CHANNELRX_DEMODFT8_FT8DEMODSETTINGSDIALOG_H_
 | 
				
			||||||
							
								
								
									
										322
									
								
								plugins/channelrx/demodft8/ft8demodsettingsdialog.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								plugins/channelrx/demodft8/ft8demodsettingsdialog.ui
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,322 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<ui version="4.0">
 | 
				
			||||||
 | 
					 <class>FT8DemodSettingsDialog</class>
 | 
				
			||||||
 | 
					 <widget class="QDialog" name="FT8DemodSettingsDialog">
 | 
				
			||||||
 | 
					  <property name="geometry">
 | 
				
			||||||
 | 
					   <rect>
 | 
				
			||||||
 | 
					    <x>0</x>
 | 
				
			||||||
 | 
					    <y>0</y>
 | 
				
			||||||
 | 
					    <width>349</width>
 | 
				
			||||||
 | 
					    <height>316</height>
 | 
				
			||||||
 | 
					   </rect>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <property name="font">
 | 
				
			||||||
 | 
					   <font>
 | 
				
			||||||
 | 
					    <family>Liberation Sans</family>
 | 
				
			||||||
 | 
					    <pointsize>9</pointsize>
 | 
				
			||||||
 | 
					   </font>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <property name="windowTitle">
 | 
				
			||||||
 | 
					   <string>FT8 demod settings</string>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <layout class="QVBoxLayout" name="verticalLayout">
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="QGroupBox" name="decoderGroup">
 | 
				
			||||||
 | 
					     <property name="title">
 | 
				
			||||||
 | 
					      <string>Decoder</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <layout class="QFormLayout" name="formLayout_2">
 | 
				
			||||||
 | 
					      <property name="verticalSpacing">
 | 
				
			||||||
 | 
					       <number>2</number>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					      <item row="0" column="1">
 | 
				
			||||||
 | 
					       <layout class="QHBoxLayout" name="threadsGroup">
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QLabel" name="decoderNbThreadsLabel">
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string>Number of threads</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QSpinBox" name="decoderNbThreads">
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Number of decoding threads </string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="minimum">
 | 
				
			||||||
 | 
					           <number>2</number>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="maximum">
 | 
				
			||||||
 | 
					           <number>12</number>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="value">
 | 
				
			||||||
 | 
					           <number>3</number>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <spacer name="horizontalSpacer">
 | 
				
			||||||
 | 
					          <property name="orientation">
 | 
				
			||||||
 | 
					           <enum>Qt::Horizontal</enum>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="sizeHint" stdset="0">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>40</width>
 | 
				
			||||||
 | 
					            <height>20</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </spacer>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QLabel" name="decoderTimeBudgetLabel">
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string>Time budget (s)</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QDoubleSpinBox" name="decoderTimeBudget">
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Time limit for the decoder (s)</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="decimals">
 | 
				
			||||||
 | 
					           <number>1</number>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="minimum">
 | 
				
			||||||
 | 
					           <double>0.500000000000000</double>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="maximum">
 | 
				
			||||||
 | 
					           <double>5.000000000000000</double>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="singleStep">
 | 
				
			||||||
 | 
					           <double>0.100000000000000</double>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="value">
 | 
				
			||||||
 | 
					           <double>0.500000000000000</double>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					       </layout>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
 | 
					     </layout>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="QGroupBox" name="bandsGroup">
 | 
				
			||||||
 | 
					     <property name="title">
 | 
				
			||||||
 | 
					      <string>Band presets</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
				
			||||||
 | 
					      <property name="spacing">
 | 
				
			||||||
 | 
					       <number>2</number>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					      <item>
 | 
				
			||||||
 | 
					       <widget class="QTableWidget" name="bands">
 | 
				
			||||||
 | 
					        <property name="toolTip">
 | 
				
			||||||
 | 
					         <string>Predefined frequencies </string>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					        <attribute name="verticalHeaderVisible">
 | 
				
			||||||
 | 
					         <bool>false</bool>
 | 
				
			||||||
 | 
					        </attribute>
 | 
				
			||||||
 | 
					        <attribute name="verticalHeaderMinimumSectionSize">
 | 
				
			||||||
 | 
					         <number>15</number>
 | 
				
			||||||
 | 
					        </attribute>
 | 
				
			||||||
 | 
					        <attribute name="verticalHeaderDefaultSectionSize">
 | 
				
			||||||
 | 
					         <number>15</number>
 | 
				
			||||||
 | 
					        </attribute>
 | 
				
			||||||
 | 
					        <column>
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>Name</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <property name="toolTip">
 | 
				
			||||||
 | 
					          <string>Band displayed name</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </column>
 | 
				
			||||||
 | 
					        <column>
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>F (kHz)</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <property name="toolTip">
 | 
				
			||||||
 | 
					          <string>Base frequency (kHz)</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </column>
 | 
				
			||||||
 | 
					        <column>
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>off (kHz)</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <property name="toolTip">
 | 
				
			||||||
 | 
					          <string>Channel offset frequency (kHz)</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </column>
 | 
				
			||||||
 | 
					       </widget>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
 | 
					      <item>
 | 
				
			||||||
 | 
					       <layout class="QHBoxLayout" name="bandsControlLayout">
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QPushButton" name="addBand">
 | 
				
			||||||
 | 
					          <property name="maximumSize">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>32</width>
 | 
				
			||||||
 | 
					            <height>16777215</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Add band</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string/>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="icon">
 | 
				
			||||||
 | 
					           <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
 | 
					            <normaloff>:/create.png</normaloff>:/create.png</iconset>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QPushButton" name="deleteBand">
 | 
				
			||||||
 | 
					          <property name="maximumSize">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>32</width>
 | 
				
			||||||
 | 
					            <height>16777215</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Remove selected  band</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string/>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="icon">
 | 
				
			||||||
 | 
					           <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
 | 
					            <normaloff>:/bin.png</normaloff>:/bin.png</iconset>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QPushButton" name="moveBandUp">
 | 
				
			||||||
 | 
					          <property name="maximumSize">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>32</width>
 | 
				
			||||||
 | 
					            <height>16777215</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Move up selected  band</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string/>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="icon">
 | 
				
			||||||
 | 
					           <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
 | 
					            <normaloff>:/arrow_up.png</normaloff>:/arrow_up.png</iconset>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QPushButton" name="moveBandDown">
 | 
				
			||||||
 | 
					          <property name="maximumSize">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>32</width>
 | 
				
			||||||
 | 
					            <height>16777215</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Move down selected  band</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string/>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="icon">
 | 
				
			||||||
 | 
					           <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
 | 
					            <normaloff>:/arrow_down.png</normaloff>:/arrow_down.png</iconset>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <widget class="QPushButton" name="restoreBandPresets">
 | 
				
			||||||
 | 
					          <property name="maximumSize">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>32</width>
 | 
				
			||||||
 | 
					            <height>16777215</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="toolTip">
 | 
				
			||||||
 | 
					           <string>Restore default band presets</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string/>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="icon">
 | 
				
			||||||
 | 
					           <iconset resource="../../../sdrgui/resources/res.qrc">
 | 
				
			||||||
 | 
					            <normaloff>:/recycle.png</normaloff>:/recycle.png</iconset>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </widget>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					        <item>
 | 
				
			||||||
 | 
					         <spacer name="horizontalSpacer_2">
 | 
				
			||||||
 | 
					          <property name="orientation">
 | 
				
			||||||
 | 
					           <enum>Qt::Horizontal</enum>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					          <property name="sizeHint" stdset="0">
 | 
				
			||||||
 | 
					           <size>
 | 
				
			||||||
 | 
					            <width>40</width>
 | 
				
			||||||
 | 
					            <height>20</height>
 | 
				
			||||||
 | 
					           </size>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </spacer>
 | 
				
			||||||
 | 
					        </item>
 | 
				
			||||||
 | 
					       </layout>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
 | 
					     </layout>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="QDialogButtonBox" name="buttonBox">
 | 
				
			||||||
 | 
					     <property name="orientation">
 | 
				
			||||||
 | 
					      <enum>Qt::Horizontal</enum>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="standardButtons">
 | 
				
			||||||
 | 
					      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					  </layout>
 | 
				
			||||||
 | 
					 </widget>
 | 
				
			||||||
 | 
					 <resources>
 | 
				
			||||||
 | 
					  <include location="../../../sdrgui/resources/res.qrc"/>
 | 
				
			||||||
 | 
					 </resources>
 | 
				
			||||||
 | 
					 <connections>
 | 
				
			||||||
 | 
					  <connection>
 | 
				
			||||||
 | 
					   <sender>buttonBox</sender>
 | 
				
			||||||
 | 
					   <signal>accepted()</signal>
 | 
				
			||||||
 | 
					   <receiver>FT8DemodSettingsDialog</receiver>
 | 
				
			||||||
 | 
					   <slot>accept()</slot>
 | 
				
			||||||
 | 
					   <hints>
 | 
				
			||||||
 | 
					    <hint type="sourcelabel">
 | 
				
			||||||
 | 
					     <x>248</x>
 | 
				
			||||||
 | 
					     <y>254</y>
 | 
				
			||||||
 | 
					    </hint>
 | 
				
			||||||
 | 
					    <hint type="destinationlabel">
 | 
				
			||||||
 | 
					     <x>157</x>
 | 
				
			||||||
 | 
					     <y>274</y>
 | 
				
			||||||
 | 
					    </hint>
 | 
				
			||||||
 | 
					   </hints>
 | 
				
			||||||
 | 
					  </connection>
 | 
				
			||||||
 | 
					  <connection>
 | 
				
			||||||
 | 
					   <sender>buttonBox</sender>
 | 
				
			||||||
 | 
					   <signal>rejected()</signal>
 | 
				
			||||||
 | 
					   <receiver>FT8DemodSettingsDialog</receiver>
 | 
				
			||||||
 | 
					   <slot>reject()</slot>
 | 
				
			||||||
 | 
					   <hints>
 | 
				
			||||||
 | 
					    <hint type="sourcelabel">
 | 
				
			||||||
 | 
					     <x>316</x>
 | 
				
			||||||
 | 
					     <y>260</y>
 | 
				
			||||||
 | 
					    </hint>
 | 
				
			||||||
 | 
					    <hint type="destinationlabel">
 | 
				
			||||||
 | 
					     <x>286</x>
 | 
				
			||||||
 | 
					     <y>274</y>
 | 
				
			||||||
 | 
					    </hint>
 | 
				
			||||||
 | 
					   </hints>
 | 
				
			||||||
 | 
					  </connection>
 | 
				
			||||||
 | 
					 </connections>
 | 
				
			||||||
 | 
					</ui>
 | 
				
			||||||
@ -213,7 +213,7 @@ void FT8DemodWorker::processBuffer(int16_t *buffer, QDateTime periodTS)
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            QString logMessage = QString("%1 %2 Rx FT8 %3 %4 %5 %6 %7 %8")
 | 
					            QString logMessage = QString("%1 %2 Rx FT8 %3 %4 %5 %6 %7 %8")
 | 
				
			||||||
                .arg(ft8Message.ts.toString("yyyyMMdd_HHmmss"))
 | 
					                .arg(periodTS.toString("yyyyMMdd_HHmmss"))
 | 
				
			||||||
                .arg(baseFrequencyMHz, 9, 'f', 3)
 | 
					                .arg(baseFrequencyMHz, 9, 'f', 3)
 | 
				
			||||||
                .arg(ft8Message.snr, 6)
 | 
					                .arg(ft8Message.snr, 6)
 | 
				
			||||||
                .arg(ft8Message.dt, 4, 'f', 1)
 | 
					                .arg(ft8Message.dt, 4, 'f', 1)
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class DeviceSampleMIMO;
 | 
					class DeviceSampleMIMO;
 | 
				
			||||||
class BasebandSampleSink;
 | 
					class BasebandSampleSink;
 | 
				
			||||||
 | 
					class BasebandSampleSource;
 | 
				
			||||||
class MIMOChannel;
 | 
					class MIMOChannel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SDRBASE_API DSPDeviceMIMOEngine : public QThread {
 | 
					class SDRBASE_API DSPDeviceMIMOEngine : public QThread {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user