From 87826d1a6c40f318760b543545de277bbdb4dd63 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 7 Mar 2019 11:21:17 -0500 Subject: [PATCH 1/2] Clean up some FT4 code. --- widgets/mainwindow.cpp | 54 ++++++++++++++++++++---------------------- widgets/mainwindow.h | 2 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2f4c47db3..6af904be9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1384,7 +1384,7 @@ void MainWindow::dataSink(qint64 frames) if(m_monitoring || m_diskData) { m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); } - if(m_mode=="FT4") ft4Data(k); + if(m_mode=="FT4") ft4_rx(k); if(m_mode=="MSK144" or m_mode=="FT4") return; fixStop(); @@ -3851,20 +3851,20 @@ void MainWindow::guiUpdate() } } - switch (m_ntx) - { - case 1: m_QSOProgress = REPLYING; break; - case 2: m_QSOProgress = REPORT; break; - case 3: m_QSOProgress = ROGER_REPORT; break; - case 4: m_QSOProgress = ROGERS; break; - case 5: m_QSOProgress = SIGNOFF; break; - case 6: m_QSOProgress = CALLING; break; - default: break; // determined elsewhere - } - m_transmitting = true; - transmitDisplay (true); - statusUpdate (); + switch (m_ntx) + { + case 1: m_QSOProgress = REPLYING; break; + case 2: m_QSOProgress = REPORT; break; + case 3: m_QSOProgress = ROGER_REPORT; break; + case 4: m_QSOProgress = ROGERS; break; + case 5: m_QSOProgress = SIGNOFF; break; + case 6: m_QSOProgress = CALLING; break; + default: break; // determined elsewhere } + m_transmitting = true; + transmitDisplay (true); + statusUpdate (); + } if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); @@ -4375,7 +4375,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie hiscall+="/P"; ui->dxCallEntry->setText(hiscall); } - bool is_73 = message_words.filter (QRegularExpression {"^(73|RR73)$"}).size (); if (!is_73 and !message.isStandardMessage() and !message.string().contains("<")) { qDebug () << "Not processing message - hiscall:" << hiscall << "hisgrid:" << hisgrid @@ -4534,6 +4533,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } else { m_bTUmsg=false; m_nextCall=""; //### Temporary: disable use of "TU;" message + if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") { // We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message logQSOTimer.start(0); @@ -4740,6 +4740,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie // i.e. compound version of same base call ui->dxCallEntry->setText (hiscall); } + if (hisgrid.contains (grid_regexp)) { if(ui->dxGridEntry->text().mid(0,4) != hisgrid) ui->dxGridEntry->setText(hisgrid); } @@ -5605,7 +5606,7 @@ void MainWindow::on_actionFT4_triggered() ui->label_7->setText("Rx Frequency"); ui->label_6->setText("Band Activity"); ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); - displayWidgets(nWidgets("111010000100111000010000100110001")); + displayWidgets(nWidgets("011010000100111000010000100110001")); ui->txrb2->setEnabled(true); ui->txrb4->setEnabled(true); ui->txrb5->setEnabled(true); @@ -5616,9 +5617,7 @@ void MainWindow::on_actionFT4_triggered() ui->txb6->setEnabled(true); ui->txFirstCheckBox->setEnabled(true); ui->cbAutoSeq->setEnabled(true); - ui->labDXped->setVisible(false); ui->labDXped->setText(""); - ui->labDXped->setVisible(false); if (SpecOp::RTTY == m_config.special_op_id ()) { ui->labDXped->setVisible(true); @@ -8649,7 +8648,7 @@ void MainWindow::write_all(QString txRx, QString message) } } -void MainWindow::ft4Data(int k) +void MainWindow::ft4_rx(int k) { static int nhsec0=-1; static bool wrapped=false; @@ -8734,30 +8733,29 @@ void MainWindow::ft4Data(int k) ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); -//### - //Right (Rx Frequency) window +//Right (Rx Frequency) window int audioFreq=decodedtext.frequencyOffset(); auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); - if (parts.size () > 6) { - auto for_us = parts[5].contains (m_baseCall) - || ("DE" == parts[5] && qAbs (ui->RxFreqSpinBox->value () - audioFreq) <= 10); + if(parts.size() > 6) { + auto for_us = parts[5].contains(m_baseCall) + || ("DE" == parts[5] && qAbs(ui->TxFreqSpinBox->value() - audioFreq) <= 150); if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[5]) for_us=false; if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked()) { m_bDoubleClicked=true; m_bAutoReply = true; - processMessage(decodedtext); ui->cbFirst->setStyleSheet(""); } - if(for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10)) { - // This msg is within 10 hertz of our tuned frequency, or contains MyCall + if(for_us or ((qAbs(audioFreq - ui->TxFreqSpinBox->value()) <= 150) and parts[5]!="CQ")) { + // This msg contains MyCall, or is within 150 hertz of our Tx frequency + // (Is that the best logic to use here??) ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); + processMessage(decodedtext); m_QSOText = decodedtext.string().trimmed (); } write_all("Rx",decodedtext.string().trimmed()); } -//### } nhsec0=nhsec; if(m_diskData and (k > (dec_data.params.kin-istep))) m_startAnother=m_loopall; diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index db732e053..f40030d4e 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -312,7 +312,7 @@ private slots: void on_comboBoxHoundSort_activated (int index); void not_GA_warning_message (); void checkMSK144ContestType(); - void ft4Data(int k); + void ft4_rx(int k); void ft4_tx(int ntx); int setTxMsg(int n); bool stdCall(QString const& w); From 69675153a7cb861d2417c565494ba8307de1cd2b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 7 Mar 2019 14:36:58 -0500 Subject: [PATCH 2/2] FT4 sequencing seems OK now (but needs thorough testing). No "TU;" msgs yet. --- widgets/mainwindow.cpp | 6 +++++- widgets/mainwindow.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 6af904be9..81318f1a4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4272,6 +4272,7 @@ void MainWindow::on_txb6_clicked() void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) { + if(m_mode=="FT4" and m_inQSOwith!="") return; set_dateTimeQSO(-1); // reset our QSO start time m_decodedText2=true; doubleClickOnCall(modifiers); @@ -4280,6 +4281,7 @@ void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers) { + if(m_mode=="FT4" and m_inQSOwith!="") return; QTextCursor cursor; if(m_mode=="ISCAT") { MessageBox::information_message (this, @@ -5459,6 +5461,7 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button m_dateTimeQSOOn, dateTimeQSOOff, m_freqNominal + ui->TxFreqSpinBox->value(), m_noSuffix, m_xSent, m_xRcvd, m_cabrilloLog.data ()); + m_inQSOwith=""; } void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, QString const& grid @@ -8751,7 +8754,7 @@ void MainWindow::ft4_rx(int k) // (Is that the best logic to use here??) ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); - processMessage(decodedtext); + if(decodedtext.string().trimmed().contains(m_inQSOwith)) processMessage(decodedtext); m_QSOText = decodedtext.string().trimmed (); } write_all("Rx",decodedtext.string().trimmed()); @@ -8780,6 +8783,7 @@ void MainWindow::ft4_tx(int ntx) if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); QString msg = QString::fromLatin1(ba.data()); + if(m_ntx==2 or m_ntx==3) m_inQSOwith=m_hisCall; if(msg.trimmed().length()==0) return; //Don't transmit a blank message, or ... if(m_diskData) return; //... in response to a decode from disk ba2msg(ba,message); diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index f40030d4e..97f38783b 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -617,6 +617,7 @@ private: QString m_nextCall; QString m_nextGrid; QString m_fileDateTime; + QString m_inQSOwith; QSet m_pfx; QSet m_sfx;