From c1025b7c4c02024d48e4b3aa752553f84f1e63fa Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sat, 5 Sep 2020 10:34:55 -0400 Subject: [PATCH] Allow user to set center frequency and FTol in FST4W mode. Needs more testing! --- widgets/mainwindow.cpp | 37 +++++++++-- widgets/mainwindow.h | 2 + widgets/mainwindow.ui | 143 +++++++++++++++++++++++++++-------------- widgets/plotter.cpp | 7 +- 4 files changed, 131 insertions(+), 58 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0704b0b93..71d8f20cf 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1145,6 +1145,8 @@ void MainWindow::writeSettings() m_settings->setValue("RxFreq",ui->RxFreqSpinBox->value()); m_settings->setValue("TxFreq",ui->TxFreqSpinBox->value()); m_settings->setValue("WSPRfreq",ui->WSPRfreqSpinBox->value()); + m_settings->setValue("FST4W_RxFreq",ui->sbFST4W_RxFreq->value()); + m_settings->setValue("FST4W_FTol",ui->sbFST4W_FTol->value()); m_settings->setValue("SubMode",ui->sbSubmode->value()); m_settings->setValue("DTtol",m_DTtol); m_settings->setValue("Ftol", ui->sbFtol->value ()); @@ -1232,8 +1234,11 @@ void MainWindow::readSettings() ui->actionSave_all->setChecked(m_settings->value("SaveAll",false).toBool()); ui->RxFreqSpinBox->setValue(0); // ensure a change is signaled ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt()); + ui->sbFST4W_RxFreq->setValue(0); + ui->sbFST4W_RxFreq->setValue(m_settings->value("FST4W_RxFreq",1500).toInt()); m_nSubMode=m_settings->value("SubMode",0).toInt(); ui->sbFtol->setValue (m_settings->value("Ftol", 50).toInt()); + ui->sbFST4W_FTol->setValue(m_settings->value("FST4W_FTol",100).toInt()); m_minSync=m_settings->value("MinSync",0).toInt(); ui->syncSpinBox->setValue(m_minSync); ui->cbAutoSeq->setChecked (m_settings->value ("AutoSeq", false).toBool()); @@ -3079,6 +3084,7 @@ void MainWindow::decode() //decode() dec_data.params.ntol=20; dec_data.params.naggressive=0; } + if(m_mode=="FST4W") dec_data.params.ntol=ui->sbFST4W_FTol->value (); if(dec_data.params.nutc < m_nutc0) m_RxLog = 1; //Date and Time to file "ALL.TXT". if(dec_data.params.newdat==1 and !m_diskData) m_nutc0=dec_data.params.nutc; dec_data.params.ntxmode=9; @@ -5995,10 +6001,9 @@ void MainWindow::on_actionFST4_triggered() m_modeTx="FST4"; ui->actionFST4->setChecked(true); WSPR_config(false); - bool bVHF=m_config.enable_VHF_features(); // 0123456789012345678901234567890123 displayWidgets(nWidgets("1111110001001110000100000001000000")); - setup_status_bar (bVHF); + setup_status_bar(false); ui->sbTR->values ({15, 30, 60, 120, 300, 900, 1800}); on_sbTR_valueChanged (ui->sbTR->value()); ui->cbAutoSeq->setChecked(true); @@ -6013,15 +6018,16 @@ void MainWindow::on_actionFST4_triggered() void MainWindow::on_actionFST4W_triggered() { - on_actionFST4_triggered(); m_mode="FST4W"; m_modeTx="FST4W"; + m_nsps=6912; //For symspec only + m_FFTSize = m_nsps / 2; + Q_EMIT FFTSize(m_FFTSize); WSPR_config(true); ui->actionFST4W->setChecked(true); // 0123456789012345678901234567890123 displayWidgets(nWidgets("0000000000000000010100000000000001")); - bool bVHF=m_config.enable_VHF_features(); - setup_status_bar (bVHF); + setup_status_bar(false); ui->band_hopping_group_box->setChecked(false); ui->band_hopping_group_box->setVisible(false); on_sbTR_FST4W_valueChanged (ui->sbTR_FST4W->value ()); @@ -6029,6 +6035,8 @@ void MainWindow::on_actionFST4W_triggered() m_wideGraph->setModeTx(m_modeTx); m_wideGraph->setPeriod(m_TRperiod,6912); m_wideGraph->setTxFreq(ui->WSPRfreqSpinBox->value()); + m_wideGraph->setRxFreq(ui->sbFST4W_RxFreq->value()); + m_wideGraph->setTol(ui->sbFST4W_FTol->value()); ui->sbFtol->setValue(100); ui->RxFreqSpinBox->setValue(1500); switch_mode (Modes::FST4W); @@ -6644,9 +6652,12 @@ void MainWindow::WSPR_config(bool b) ui->label_7->setVisible(!b and ui->cbMenus->isChecked()); ui->logQSOButton->setVisible(!b); ui->DecodeButton->setEnabled(!b); - ui->sbTxPercent->setEnabled (m_mode != "FST4W" || tr ("Random") == ui->RoundRobin->currentText ()); + bool bFST4W=(m_mode=="FST4W"); + ui->sbTxPercent->setEnabled(!bFST4W or (tr("Random") == ui->RoundRobin->currentText())); ui->band_hopping_group_box->setVisible(true); - ui->RoundRobin->setVisible(m_mode=="FST4W"); + ui->RoundRobin->setVisible(bFST4W); + ui->sbFST4W_RxFreq->setVisible(bFST4W); + ui->sbFST4W_FTol->setVisible(bFST4W); ui->RoundRobin->lineEdit()->setAlignment(Qt::AlignCenter); if(b and m_mode!="Echo" and m_mode!="FST4W") { QString t="UTC dB DT Freq Drift Call Grid dBm "; @@ -8126,6 +8137,18 @@ void MainWindow::on_WSPRfreqSpinBox_valueChanged(int n) ui->TxFreqSpinBox->setValue(n); } +void MainWindow::on_sbFST4W_RxFreq_valueChanged(int n) +{ + m_wideGraph->setRxFreq(n); + statusUpdate (); +} + +void MainWindow::on_sbFST4W_FTol_valueChanged(int n) +{ + m_wideGraph->setTol(n); + statusUpdate (); +} + void MainWindow::on_pbTxNext_clicked(bool b) { if (b && !ui->autoButton->isChecked ()) diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 48cdf0c01..694316969 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -288,6 +288,8 @@ private slots: void TxAgain(); void uploadResponse(QString response); void on_WSPRfreqSpinBox_valueChanged(int n); + void on_sbFST4W_RxFreq_valueChanged(int n); + void on_sbFST4W_FTol_valueChanged(int n); void on_pbTxNext_clicked(bool b); void on_actionEcho_Graph_triggered(); void on_actionEcho_triggered(); diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index f16f26c42..e315ba235 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -1195,7 +1195,7 @@ When not checked you can view the calibration results. QTabWidget::Triangular - 0 + 1 @@ -2159,69 +2159,50 @@ list. The list can be maintained in Settings (F2). - - - Percentage of minute sequences devoted to transmitting. - - - QSpinBox:enabled[notx="true"] { - color: rgb(0, 0, 0); - background-color: rgb(255, 255, 0); -} - + Qt::AlignCenter - % + Hz - Tx Pct - - - 100 - - - - - - - Qt::AlignCenter - - - s - - - T/R + Rx - 15 + 100 - 1800 + 4900 + + + 100 + + + 1500 - - - Band Hopping + + + Qt::AlignCenter - - true + + Hz + + + F Tol + + + 100 + + + 500 + + + 100 - - - - - Choose bands and times of day for band-hopping. - - - Schedule ... - - - - @@ -2339,6 +2320,72 @@ list. The list can be maintained in Settings (F2). + + + + Percentage of minute sequences devoted to transmitting. + + + QSpinBox:enabled[notx="true"] { + color: rgb(0, 0, 0); + background-color: rgb(255, 255, 0); +} + + + Qt::AlignCenter + + + % + + + Tx Pct + + + 100 + + + + + + + Qt::AlignCenter + + + s + + + T/R + + + 15 + + + 1800 + + + + + + + Band Hopping + + + true + + + + + + Choose bands and times of day for band-hopping. + + + Schedule ... + + + + + + diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index c21d7e5f0..9fdf66cef 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -48,7 +48,8 @@ CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor m_Percent2DScreen0 {0}, m_rxFreq {1020}, m_txFreq {0}, - m_startFreq {0} + m_startFreq {0}, + m_tol {100} { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setFocusPolicy(Qt::StrongFocus); @@ -485,8 +486,8 @@ void CPlotter::DrawOverlay() //DrawOverlay() } if(m_mode=="FST4W") { - x1=XfromFreq(2600); - x2=XfromFreq(2700); + x1=XfromFreq(m_rxFreq-m_tol); + x2=XfromFreq(m_rxFreq+m_tol); painter0.drawLine(x1,26,x2,26); }