Add FLow and FHigh spinner controls to set the FST4 decoding range.

This commit is contained in:
Joe Taylor 2020-09-16 17:02:40 -04:00
parent 10fbcfc7d0
commit 2266e8dbb7
8 changed files with 510 additions and 404 deletions

View File

@ -1,27 +1,27 @@
Here are the "displayWidgets()" strings for WSJT-X modes
1 2 3
0123456789012345678901234567890123
----------------------------------------------
JT4 1110100000001100001100000000000000
JT4/VHF 1111100100101101101111000000000000
JT9 1110100000001110000100000000000010
JT9/VHF 1111101010001111100100000000000000
JT9+JT65 1110100000011110000100000000000010
JT65 1110100000001110000100000000000010
JT65/VHF 1111100100001101101011000100000000
QRA64 1111100101101101100000000010000000
ISCAT 1001110000000001100000000000000000
MSK144 1011111101000000000100010000000000
WSPR 0000000000000000010100000000000000
FST4 1111110001001110000100000001000000
FST4W 0000000000000000010100000000000001
Echo 0000000000000000000000100000000000
FCal 0011010000000000000000000000010000
FT8 1110100001001110000100001001100010
FT8/VHF 1110100001001110000100001001100010
FT8/Fox 1110100001001110000100000000001000
FT8/Hound 1110100001001110000100000000001100
012345678901234567890123456789012345
------------------------------------------------
JT4 111010000000110000110000000000000000
JT4/VHF 111110010010110110111100000000000000
JT9 111010000000111000010000000000001000
JT9/VHF 111110101000111110010000000000000000
JT9+JT65 111010000001111000010000000000001000
JT65 111010000000111000010000000000001000
JT65/VHF 111110010000110110101100010000000000
QRA64 111110010110110110000000001000000000
ISCAT 100111000000000110000000000000000000
MSK144 101111110100000000010001000000000000
WSPR 000000000000000001010000000000000000
FST4 111111000100111000010000000100000011
FST4W 000000000000000001010000000000000100
Echo 000000000000000000000010000000000000
FCal 001101000000000000000000000001000000
FT8 111010000100111000010000100110001000
FT8/VHF 111010000100111000010000100110001000
FT8/Fox 111010000100111000010000000000100000
FT8/Hound 111010000100111000010000000000110000
----------------------------------------------
1 2 3
012345678901234567890123456789012
@ -63,3 +63,5 @@ Mapping of column numbers to widgets
31. cbRxAll
32. cbCQonly
33. sbTR_FST4W
34. sbF_Low
35. sbF_High

View File

@ -208,7 +208,7 @@ namespace
// grid exact match excluding RR73
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
auto quint32_max = std::numeric_limits<quint32>::max ();
constexpr int N_WIDGETS {34};
constexpr int N_WIDGETS {36};
constexpr int rx_chunk_size {3456}; // audio samples at 12000 Hz
constexpr int tx_audio_buffer_size {48000 / 5}; // audio frames at 48000 Hz
@ -1135,6 +1135,8 @@ void MainWindow::writeSettings()
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("FST4_FLow",ui->sbF_Low->value());
m_settings->setValue("FST4_FHigh",ui->sbF_High->value());
m_settings->setValue("SubMode",ui->sbSubmode->value());
m_settings->setValue("DTtol",m_DTtol);
m_settings->setValue("Ftol", ui->sbFtol->value ());
@ -1222,6 +1224,8 @@ void MainWindow::readSettings()
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());
ui->sbF_Low->setValue(m_settings->value("FST4_FLow",600).toInt());
ui->sbF_High->setValue(m_settings->value("FST4_FHigh",1400).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());
@ -1427,6 +1431,10 @@ void MainWindow::dataSink(qint64 frames)
// Get power, spectrum, and ihsym
dec_data.params.nfa=m_wideGraph->nStartFreq();
dec_data.params.nfb=m_wideGraph->Fmax();
if(m_mode=="FST4") {
dec_data.params.nfa=ui->sbF_Low->value();
dec_data.params.nfb=ui->sbF_High->value();
}
int nsps=m_nsps;
if(m_bFastMode) nsps=6912;
int nsmo=m_wideGraph->smoothYellow()-1;
@ -4224,7 +4232,7 @@ void MainWindow::guiUpdate()
//Once per second (onesec)
if(nsec != m_sec0) {
// qDebug() << "AAA" << nsec;
if(m_mode=="FST4") sbFtolMaxVal();
if(m_mode=="FST4") chk_FST4_freq_range();
m_currentBand=m_config.bands()->find(m_freqNominal);
if( SpecOp::HOUND == m_config.special_op_id() ) {
qint32 tHound=QDateTime::currentMSecsSinceEpoch()/1000 - m_tAutoOn;
@ -5870,6 +5878,8 @@ void MainWindow::displayWidgets(qint64 n)
if(i==31) ui->cbRxAll->setVisible(b);
if(i==32) ui->cbCQonly->setVisible(b);
if(i==33) ui->sbTR_FST4W->setVisible(b);
if(i==34) ui->sbF_Low->setVisible(b);
if(i==35) ui->sbF_High->setVisible(b);
j=j>>1;
}
ui->pbBestSP->setVisible(m_mode=="FT4");
@ -5902,12 +5912,12 @@ void MainWindow::on_actionFST4_triggered()
ui->label_6->setText(tr ("Band Activity"));
ui->label_7->setText(tr ("Rx Frequency"));
WSPR_config(false);
// 0123456789012345678901234567890123
displayWidgets(nWidgets("1111110001001110000100000001000000"));
// 012345678901234567890123456789012345
displayWidgets(nWidgets("111111000100111000010000000100000011"));
setup_status_bar(false);
ui->sbTR->values ({15, 30, 60, 120, 300, 900, 1800});
on_sbTR_valueChanged (ui->sbTR->value());
sbFtolMaxVal();
chk_FST4_freq_range();
ui->cbAutoSeq->setChecked(true);
m_wideGraph->setMode(m_mode);
m_wideGraph->setModeTx(m_modeTx);
@ -5915,6 +5925,7 @@ void MainWindow::on_actionFST4_triggered()
m_wideGraph->setRxFreq(ui->RxFreqSpinBox->value());
m_wideGraph->setTol(ui->sbFtol->value());
m_wideGraph->setTxFreq(ui->TxFreqSpinBox->value());
m_wideGraph->setFST4_FreqRange(ui->sbF_Low->value(),ui->sbF_High->value());
switch_mode (Modes::FST4);
m_wideGraph->setMode(m_mode);
statusChanged();
@ -5933,8 +5944,8 @@ void MainWindow::on_actionFST4W_triggered()
m_FFTSize = m_nsps / 2;
Q_EMIT FFTSize(m_FFTSize);
WSPR_config(true);
// 0123456789012345678901234567890123
displayWidgets(nWidgets("0000000000000000010100000000000001"));
// 012345678901234567890123456789012345
displayWidgets(nWidgets("000000000000000001010000000000000100"));
setup_status_bar(false);
ui->band_hopping_group_box->setChecked(false);
ui->band_hopping_group_box->setVisible(false);
@ -5982,7 +5993,7 @@ void MainWindow::on_actionFT4_triggered()
ui->label_7->setText(tr ("Rx Frequency"));
ui->label_6->setText(tr ("Band Activity"));
ui->decodedTextLabel->setText( " UTC dB DT Freq " + tr ("Message"));
displayWidgets(nWidgets("1110100001001110000100000001100010"));
displayWidgets(nWidgets("111010000100111000010000000110001000"));
ui->txrb2->setEnabled(true);
ui->txrb4->setEnabled(true);
ui->txrb5->setEnabled(true);
@ -6031,7 +6042,7 @@ void MainWindow::on_actionFT8_triggered()
ui->label_6->setText(tr ("Band Activity"));
ui->decodedTextLabel->setText( " UTC dB DT Freq " + tr ("Message"));
}
displayWidgets(nWidgets("1110100001001110000100001001100010"));
displayWidgets(nWidgets("111010000100111000010000100110001000"));
ui->txrb2->setEnabled(true);
ui->txrb4->setEnabled(true);
ui->txrb5->setEnabled(true);
@ -6049,7 +6060,7 @@ void MainWindow::on_actionFT8_triggered()
ui->cbAutoSeq->setEnabled(false);
ui->tabWidget->setCurrentIndex(1);
ui->TxFreqSpinBox->setValue(300);
displayWidgets(nWidgets("1110100001001110000100000000001000"));
displayWidgets(nWidgets("111010000100111000010000000000100000"));
ui->labDXped->setText(tr ("Fox"));
on_fox_log_action_triggered();
}
@ -6059,7 +6070,7 @@ void MainWindow::on_actionFT8_triggered()
ui->cbAutoSeq->setEnabled(false);
ui->tabWidget->setCurrentIndex(0);
ui->cbHoldTxFreq->setChecked(true);
displayWidgets(nWidgets("1110100001001100000100000000001100"));
displayWidgets(nWidgets("111010000100110000010000000000110000"));
ui->labDXped->setText(tr ("Hound"));
ui->txrb1->setChecked(true);
ui->txrb2->setEnabled(false);
@ -6134,9 +6145,9 @@ void MainWindow::on_actionJT4_triggered()
ui->sbSubmode->setValue(0);
}
if(bVHF) {
displayWidgets(nWidgets("1111100100101101101111000000000000"));
displayWidgets(nWidgets("111110010010110110111100000000000000"));
} else {
displayWidgets(nWidgets("1110100000001100001100000000000000"));
displayWidgets(nWidgets("111010000000110000110000000000000000"));
}
fast_config(false);
statusChanged();
@ -6193,9 +6204,9 @@ void MainWindow::on_actionJT9_triggered()
ui->label_6->setText(tr ("Band Activity"));
ui->label_7->setText(tr ("Rx Frequency"));
if(bVHF) {
displayWidgets(nWidgets("1111101010001111100100000000000000"));
displayWidgets(nWidgets("111110101000111110010000000000000000"));
} else {
displayWidgets(nWidgets("1110100000001110000100000000000010"));
displayWidgets(nWidgets("111010000000111000010000000000001000"));
}
fast_config(m_bFastMode);
ui->cbAutoSeq->setVisible(m_bFast9);
@ -6234,7 +6245,7 @@ void MainWindow::on_actionJT9_JT65_triggered()
ui->label_7->setText(tr ("Rx Frequency"));
ui->decodedTextLabel->setText("UTC dB DT Freq " + tr ("Message"));
ui->decodedTextLabel2->setText("UTC dB DT Freq " + tr ("Message"));
displayWidgets(nWidgets("1110100000011110000100000000000010"));
displayWidgets(nWidgets("111010000001111000010000000000001000"));
fast_config(false);
statusChanged();
}
@ -6282,9 +6293,9 @@ void MainWindow::on_actionJT65_triggered()
ui->label_7->setText(tr ("Rx Frequency"));
}
if(bVHF) {
displayWidgets(nWidgets("1111100100001101101011000100000000"));
displayWidgets(nWidgets("111110010000110110101100010000000000"));
} else {
displayWidgets(nWidgets("1110100000001110000100000000000010"));
displayWidgets(nWidgets("111010000000111000010000000000001000"));
}
fast_config(false);
if(ui->cbShMsgs->isChecked()) {
@ -6316,7 +6327,7 @@ void MainWindow::on_actionQRA64_triggered()
ui->TxFreqSpinBox->setValue(1000);
QString fname {QDir::toNativeSeparators(m_config.temp_dir ().absoluteFilePath ("red.dat"))};
m_wideGraph->setRedFile(fname);
displayWidgets(nWidgets("1111100100101101100000000010000000"));
displayWidgets(nWidgets("111110010010110110000000001000000000"));
statusChanged();
}
@ -6353,7 +6364,7 @@ void MainWindow::on_actionISCAT_triggered()
ui->sbSubmode->setMaximum(1);
if(m_nSubMode==0) ui->TxFreqSpinBox->setValue(1012);
if(m_nSubMode==1) ui->TxFreqSpinBox->setValue(560);
displayWidgets(nWidgets("1001110000000001100000000000000000"));
displayWidgets(nWidgets("100111000000000110000000000000000000"));
fast_config(true);
statusChanged ();
}
@ -6415,7 +6426,7 @@ void MainWindow::on_actionMSK144_triggered()
ui->rptSpinBox->setValue(0);
ui->rptSpinBox->setSingleStep(1);
ui->sbFtol->values ({20, 50, 100, 200});
displayWidgets(nWidgets("1011111101000000000100010000100000"));
displayWidgets(nWidgets("101111110100000000010001000010000000"));
fast_config(m_bFastMode);
statusChanged();
@ -6455,7 +6466,7 @@ void MainWindow::on_actionWSPR_triggered()
m_bFastMode=false;
m_bFast9=false;
ui->TxFreqSpinBox->setValue(ui->WSPRfreqSpinBox->value());
displayWidgets(nWidgets("0000000000000000010100000000000000"));
displayWidgets(nWidgets("000000000000000001010000000000000000"));
fast_config(false);
statusChanged();
}
@ -6488,7 +6499,7 @@ void MainWindow::on_actionEcho_triggered()
m_bFast9=false;
WSPR_config(true);
ui->decodedTextLabel->setText(" UTC N Level Sig DF Width Q");
displayWidgets(nWidgets("0000000000000000000000100000000000"));
displayWidgets(nWidgets("000000000000000000000010000000000000"));
fast_config(false);
statusChanged();
}
@ -6514,7 +6525,7 @@ void MainWindow::on_actionFreqCal_triggered()
// 18:15:47 0 1 1500 1550.349 0.100 3.5 10.2
ui->decodedTextLabel->setText(" UTC Freq CAL Offset fMeas DF Level S/N");
ui->measure_check_box->setChecked (false);
displayWidgets(nWidgets("0011010000000000000000000000010000"));
displayWidgets(nWidgets("001101000000000000000000000001000000"));
statusChanged();
}
@ -6620,6 +6631,35 @@ void MainWindow::on_RxFreqSpinBox_valueChanged(int n)
statusUpdate ();
}
void MainWindow::on_sbF_Low_valueChanged(int n)
{
m_wideGraph->setFST4_FreqRange(n,ui->sbF_High->value());
chk_FST4_freq_range();
}
void MainWindow::on_sbF_High_valueChanged(int n)
{
m_wideGraph->setFST4_FreqRange(ui->sbF_Low->value(),n);
chk_FST4_freq_range();
}
void MainWindow::chk_FST4_freq_range()
{
int maxDiff=2000;
if(m_TRperiod==120) maxDiff=1000;
if(m_TRperiod==300) maxDiff=400;
if(m_TRperiod>=900) maxDiff=200;
int diff=ui->sbF_High->value() - ui->sbF_Low->value();
if(diff<100 or diff>maxDiff) {
ui->sbF_Low->setStyleSheet("QSpinBox { background-color: red; }");
ui->sbF_High->setStyleSheet("QSpinBox { background-color: red; }");
} else {
ui->sbF_Low->setStyleSheet("");
ui->sbF_High->setStyleSheet("");
}
}
void MainWindow::on_actionQuickDecode_toggled (bool checked)
{
m_ndepth ^= (-checked ^ m_ndepth) & 0x00000001;
@ -7467,7 +7507,7 @@ void MainWindow::on_sbTR_valueChanged(int value)
m_wideGraph->setPeriod (value, m_nsps);
progressBar.setMaximum (value);
}
if(m_mode=="FST4") sbFtolMaxVal();
if(m_mode=="FST4") chk_FST4_freq_range();
if(m_monitoring) {
on_stopButton_clicked();
on_monitorButton_clicked(true);
@ -7478,14 +7518,6 @@ void MainWindow::on_sbTR_valueChanged(int value)
statusUpdate ();
}
void MainWindow::sbFtolMaxVal()
{
if(m_TRperiod<=60) ui->sbFtol->setMaximum(1000);
if(m_TRperiod==120) ui->sbFtol->setMaximum(500);
if(m_TRperiod==300) ui->sbFtol->setMaximum(200);
if(m_TRperiod>=900) ui->sbFtol->setMaximum(100);
}
void MainWindow::on_sbTR_FST4W_valueChanged(int value)
{
on_sbTR_valueChanged(value);

View File

@ -305,6 +305,9 @@ private slots:
void on_sbNlist_valueChanged(int n);
void on_sbNslots_valueChanged(int n);
void on_sbMax_dB_valueChanged(int n);
void on_sbF_Low_valueChanged(int n);
void on_sbF_High_valueChanged(int n);
void chk_FST4_freq_range();
void on_pbFoxReset_clicked();
void on_comboBoxHoundSort_activated (int index);
void not_GA_warning_message ();
@ -312,7 +315,6 @@ private slots:
void on_pbBestSP_clicked();
void on_RoundRobin_currentTextChanged(QString text);
void setTxMsg(int n);
void sbFtolMaxVal();
bool stdCall(QString const& w);
void remote_configure (QString const& mode, quint32 frequency_tolerance, QString const& submode
, bool fast_mode, quint32 tr_period, quint32 rx_df, QString const& dx_call

View File

@ -658,6 +658,299 @@ QPushButton[state=&quot;ok&quot;] {
</property>
<item>
<layout class="QGridLayout" name="gridLayout_3">
<item row="18" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QCheckBox" name="cbShMsgs">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to use short-format messages.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to use short-format messages.</string>
</property>
<property name="text">
<string>Sh</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbFast9">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to enable JT9 fast modes&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to enable JT9 fast modes</string>
</property>
<property name="text">
<string>Fast</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbAutoSeq">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to enable automatic sequencing of Tx messages based on received messages.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to enable automatic sequencing of Tx messages based on received messages.</string>
</property>
<property name="text">
<string>Auto Seq</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbFirst">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to call the first decoded responder to my CQ.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to call the first decoded responder to my CQ.</string>
</property>
<property name="text">
<string>Call 1st</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbTx6">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Check to generate &quot;@1250 (SEND MSGS)&quot; in Tx6.</string>
</property>
<property name="text">
<string>Tx6</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="8" column="1">
<widget class="LettersSpinBox" name="sbSubmode">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Submode determines tone spacing; A is narrowest.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Submode determines tone spacing; A is narrowest.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="prefix">
<string>Submode </string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>7</number>
</property>
</widget>
</item>
<item row="17" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QSpinBox" name="sbCQTxFreq">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Frequency to call CQ on in kHz above the current MHz&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Frequency to call CQ on in kHz above the current MHz</string>
</property>
<property name="prefix">
<string>Tx CQ </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>999</number>
</property>
<property name="value">
<number>260</number>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbCQTx">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check this to call CQ on the &amp;quot;Tx CQ&amp;quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.&lt;/p&gt;&lt;p&gt;Not available to nonstandard callsign holders.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check this to call CQ on the &quot;Tx CQ&quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.
Not available to nonstandard callsign holders.</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbRxAll">
<property name="text">
<string>Rx All Freqs</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pbTxMode">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Toggle Tx mode</string>
</property>
<property name="text">
<string>Tx JT9 @</string>
</property>
</widget>
</item>
<item row="19" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QLabel" name="labDXped">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Fox</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbSWL">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to monitor Sh messages.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to monitor Sh messages.</string>
</property>
<property name="text">
<string>SWL</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pbBestSP">
<property name="styleSheet">
<string notr="true">QPushButton:checked {
color: rgb(0, 0, 0);
background-color: red;
border-style: outset;
border-width: 1px;
border-radius: 5px;
border-color: black;
min-width: 5em;
padding: 3px;
}</string>
</property>
<property name="text">
<string>Best S+P</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="measure_check_box">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check this to start recording calibration data.&lt;br/&gt;While measuring calibration correction is disabled.&lt;br/&gt;When not checked you can view the calibration results.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check this to start recording calibration data.
While measuring calibration correction is disabled.
When not checked you can view the calibration results.</string>
</property>
<property name="text">
<string>Measure</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QSpinBox" name="TxFreqSpinBox">
<property name="toolTip">
<string>Audio Tx frequency</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Tx </string>
</property>
<property name="minimum">
<number>200</number>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="value">
<number>1500</number>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QSpinBox" name="sbSerialNumber">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="prefix">
<string>Tx# </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>4095</number>
</property>
</widget>
</item>
<item row="20" column="0">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="cbHoldTxFreq">
<property name="toolTip">
@ -671,32 +964,108 @@ QPushButton[state=&quot;ok&quot;] {
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QSpinBox" name="RxFreqSpinBox">
<item row="0" column="0">
<widget class="QCheckBox" name="txFirstCheckBox">
<property name="toolTip">
<string>Audio Rx frequency</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.</string>
</property>
<property name="text">
<string>Tx even/1st</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QSpinBox" name="syncSpinBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Synchronizing threshold. Lower numbers accept weaker sync signals.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Synchronizing threshold. Lower numbers accept weaker sync signals.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Rx </string>
<string>Sync </string>
</property>
<property name="minimum">
<number>200</number>
<number>-1</number>
</property>
<property name="maximum">
<number>10</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="labNextCall">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Double-click on another caller to queue that call for your next QSO.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Double-click on another caller to queue that call for your next QSO.</string>
</property>
<property name="text">
<string>Next Call</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="sbF_Low">
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="prefix">
<string>F Low </string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
<property name="value">
<number>1500</number>
<number>600</number>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="5" column="1">
<widget class="QSpinBox" name="sbF_High">
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string/>
</property>
<property name="prefix">
<string>F High </string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
<property name="value">
<number>1400</number>
</property>
</widget>
</item>
<item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QPushButton" name="pbR2T">
@ -784,265 +1153,32 @@ QPushButton[state=&quot;ok&quot;] {
</item>
</layout>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="syncSpinBox">
<item row="5" column="0">
<widget class="QSpinBox" name="RxFreqSpinBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Synchronizing threshold. Lower numbers accept weaker sync signals.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Synchronizing threshold. Lower numbers accept weaker sync signals.</string>
<string>Audio Rx frequency</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Sync </string>
<string>Rx </string>
</property>
<property name="minimum">
<number>-1</number>
<number>200</number>
</property>
<property name="maximum">
<number>10</number>
<number>5000</number>
</property>
<property name="value">
<number>1</number>
<number>1500</number>
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QCheckBox" name="cbShMsgs">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to use short-format messages.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to use short-format messages.</string>
</property>
<property name="text">
<string>Sh</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbFast9">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to enable JT9 fast modes&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to enable JT9 fast modes</string>
</property>
<property name="text">
<string>Fast</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbAutoSeq">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to enable automatic sequencing of Tx messages based on received messages.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to enable automatic sequencing of Tx messages based on received messages.</string>
</property>
<property name="text">
<string>Auto Seq</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbFirst">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to call the first decoded responder to my CQ.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to call the first decoded responder to my CQ.</string>
</property>
<property name="text">
<string>Call 1st</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbTx6">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Check to generate &quot;@1250 (SEND MSGS)&quot; in Tx6.</string>
</property>
<property name="text">
<string>Tx6</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="txFirstCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.</string>
</property>
<property name="text">
<string>Tx even/1st</string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QSpinBox" name="sbCQTxFreq">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Frequency to call CQ on in kHz above the current MHz&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Frequency to call CQ on in kHz above the current MHz</string>
</property>
<property name="prefix">
<string>Tx CQ </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>999</number>
</property>
<property name="value">
<number>260</number>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbCQTx">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check this to call CQ on the &amp;quot;Tx CQ&amp;quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.&lt;/p&gt;&lt;p&gt;Not available to nonstandard callsign holders.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check this to call CQ on the &quot;Tx CQ&quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.
Not available to nonstandard callsign holders.</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbRxAll">
<property name="text">
<string>Rx All Freqs</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="1">
<widget class="LettersSpinBox" name="sbSubmode">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Submode determines tone spacing; A is narrowest.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Submode determines tone spacing; A is narrowest.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="prefix">
<string>Submode </string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>7</number>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QLabel" name="labDXped">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Fox</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbSWL">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to monitor Sh messages.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check to monitor Sh messages.</string>
</property>
<property name="text">
<string>SWL</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pbBestSP">
<property name="styleSheet">
<string notr="true">QPushButton:checked {
color: rgb(0, 0, 0);
background-color: red;
border-style: outset;
border-width: 1px;
border-radius: 5px;
border-color: black;
min-width: 5em;
padding: 3px;
}</string>
</property>
<property name="text">
<string>Best S+P</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="measure_check_box">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check this to start recording calibration data.&lt;br/&gt;While measuring calibration correction is disabled.&lt;br/&gt;When not checked you can view the calibration results.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Check this to start recording calibration data.
While measuring calibration correction is disabled.
When not checked you can view the calibration results.</string>
</property>
<property name="text">
<string>Measure</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0">
<item row="6" column="0">
<widget class="QSpinBox" name="rptSpinBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -1067,7 +1203,7 @@ When not checked you can view the calibration results.</string>
</property>
</widget>
</item>
<item row="5" column="0">
<item row="7" column="0">
<widget class="RestrictedSpinBox" name="sbTR">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Tx/Rx or Frequency calibration sequence length&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -1095,95 +1231,6 @@ When not checked you can view the calibration results.</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pbTxMode">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Toggle Tx mode</string>
</property>
<property name="text">
<string>Tx JT9 @</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSpinBox" name="TxFreqSpinBox">
<property name="toolTip">
<string>Audio Tx frequency</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Tx </string>
</property>
<property name="minimum">
<number>200</number>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="value">
<number>1500</number>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="sbSerialNumber">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="prefix">
<string>Tx# </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>4095</number>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="labNextCall">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Double-click on another caller to queue that call for your next QSO.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>Double-click on another caller to queue that call for your next QSO.</string>
</property>
<property name="text">
<string>Next Call</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="9" column="0">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
@ -3348,8 +3395,6 @@ Yellow when too low</string>
<tabstop>addButton</tabstop>
<tabstop>txFirstCheckBox</tabstop>
<tabstop>TxFreqSpinBox</tabstop>
<tabstop>rptSpinBox</tabstop>
<tabstop>sbTR</tabstop>
<tabstop>sbCQTxFreq</tabstop>
<tabstop>cbCQTx</tabstop>
<tabstop>cbShMsgs</tabstop>

View File

@ -506,11 +506,20 @@ void CPlotter::DrawOverlay() //DrawOverlay()
or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4"
or m_mode.startsWith("FST4")) {
if(m_mode=="FST4") {
x1=XfromFreq(m_nfa);
x2=XfromFreq(m_nfb);
painter0.drawLine(x1,25,x1+5,30); // Mark FST4 F_Low
painter0.drawLine(x1,25,x1+5,20);
painter0.drawLine(x2,25,x2-5,30); // Mark FST4 F_High
painter0.drawLine(x2,25,x2-5,20);
}
if(m_mode=="QRA64" or (m_mode=="JT65" and m_bVHF)) {
painter0.setPen(penGreen);
x1=XfromFreq(m_rxFreq-m_tol);
x2=XfromFreq(m_rxFreq+m_tol);
painter0.drawLine(x1,28,x2,28);
painter0.drawLine(x1,26,x2,26);
x1=XfromFreq(m_rxFreq);
painter0.drawLine(x1,24,x1,30);
@ -539,8 +548,7 @@ void CPlotter::DrawOverlay() //DrawOverlay()
x1=XfromFreq(m_rxFreq-m_tol);
x2=XfromFreq(m_rxFreq+m_tol);
painter0.drawLine(x1,26,x2,26); // Mark the Tol range
}
}
} }
}
if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65" or
@ -809,6 +817,12 @@ void CPlotter::setFlatten(bool b1, bool b2)
void CPlotter::setTol(int n) //setTol()
{
m_tol=n;
}
void CPlotter::setFST4_FreqRange(int fLow,int fHigh)
{
m_nfa=fLow;
m_nfb=fHigh;
DrawOverlay();
}

View File

@ -83,6 +83,9 @@ public:
void drawRed(int ia, int ib, float swide[]);
void setVHF(bool bVHF);
void setRedFile(QString fRed);
void setFST4_FreqRange(int fLow,int fHigh);
bool scaleOK () const {return m_bScaleOK;}
signals:
void freezeDecode1(int n);
@ -125,6 +128,8 @@ private:
qint32 m_nSubMode;
qint32 m_ia;
qint32 m_ib;
qint32 m_nfa;
qint32 m_nfb;
QPixmap m_WaterfallPixmap;
QPixmap m_2DPixmap;

View File

@ -500,6 +500,11 @@ void WideGraph::setTol(int n) //setTol
ui->widePlot->update();
}
void WideGraph::setFST4_FreqRange(int fLow,int fHigh)
{
ui->widePlot->setFST4_FreqRange(fLow,fHigh);
}
void WideGraph::on_smoSpinBox_valueChanged(int n)
{
m_nsmo=n;

View File

@ -49,6 +49,7 @@ public:
void drawRed(int ia, int ib);
void setVHF(bool bVHF);
void setRedFile(QString fRed);
void setFST4_FreqRange(int fLow,int fHigh);
signals:
void freezeDecode2(int n);