From 3f5cbbb1476b543a656eb996a8c3a54d23e68ae9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sun, 19 Feb 2023 16:48:14 -0500 Subject: [PATCH] Implement Special Operating Activity "Q65 Pileup". Needs more checking for completeness. --- Configuration.cpp | 1 + Configuration.hpp | 4 ++-- Configuration.ui | 25 ++++++++++++++++--- widgets/mainwindow.cpp | 54 ++++++++++++++++++++++++++++++++---------- widgets/mainwindow.h | 1 + 5 files changed, 68 insertions(+), 17 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index ee67abc77..d128d0746 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -1227,6 +1227,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network ui_->special_op_activity_button_group->setId (ui_->rbARRL_Digi, static_cast (SpecialOperatingActivity::ARRL_DIGI)); ui_->special_op_activity_button_group->setId (ui_->rbFox, static_cast (SpecialOperatingActivity::FOX)); ui_->special_op_activity_button_group->setId (ui_->rbHound, static_cast (SpecialOperatingActivity::HOUND)); + ui_->special_op_activity_button_group->setId (ui_->rbQ65pileup, static_cast (SpecialOperatingActivity::Q65_PILEUP)); // // setup PTT port combo box drop down content diff --git a/Configuration.hpp b/Configuration.hpp index dbf6b9124..8344af8f7 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -190,8 +190,8 @@ public: bool highlight_DXgrid () const; bool Individual_Contest_Name() const; -// 0 1 2 3 4 5 6 7 8 - enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND, ARRL_DIGI}; +// 0 1 2 3 4 5 6 7 8 9 + enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND, ARRL_DIGI, Q65_PILEUP}; SpecialOperatingActivity special_op_id () const; struct CalibrationParams diff --git a/Configuration.ui b/Configuration.ui index acf225f5d..836b1b635 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2923,6 +2923,25 @@ Right click for insert and delete options. + + + + + 0 + 18 + + + + <html><head/><body><p>Exchange 4-character locator instead of signal report. Provides q3-level sensitivities for the DX operator. Especially useful for 6m EME DXpeditions.</p></body></html> + + + Q65 Pileup + + + special_op_activity_button_group + + + @@ -3337,12 +3356,12 @@ Right click for insert and delete options. + + + - - - diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 76579a086..faec9dc92 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3380,8 +3380,9 @@ void MainWindow::decode() //decode() if(m_config.decode_at_52s()) dec_data.params.emedelay=2.5; dec_data.params.minSync=ui->syncSpinBox->isVisible () ? m_minSync : 0; dec_data.params.nexp_decode=int(m_specOp); - if(dec_data.params.nexp_decode==5) dec_data.params.nexp_decode=1; //NA VHF, WW Digi, and ARRL Digi - if(dec_data.params.nexp_decode==8) dec_data.params.nexp_decode=1; //contests all use grid exchange + if(dec_data.params.nexp_decode==5) dec_data.params.nexp_decode=1; //NA VHF, WW Digi, ARRL Digi contests + if(dec_data.params.nexp_decode==8) dec_data.params.nexp_decode=1; //and Q65 Pileup all use 4-character + if(dec_data.params.nexp_decode==9) dec_data.params.nexp_decode=1; //grid exchange if(m_config.single_decode()) dec_data.params.nexp_decode += 32; if(m_config.enable_VHF_features()) dec_data.params.nexp_decode += 64; if(m_mode.startsWith("FST4")) dec_data.params.nexp_decode += 256*(ui->sbNB->value()+3); @@ -3565,7 +3566,8 @@ void MainWindow::decodeDone () if(m_mode!="FT8" or dec_data.params.nzhsym==50) m_nDecodes=0; if(m_mode=="Q65" and (m_specOp==SpecOp::NA_VHF or m_specOp==SpecOp::ARRL_DIGI - or m_specOp==SpecOp::WW_DIGI) and m_ActiveStationsWidget!=NULL) { + or m_specOp==SpecOp::WW_DIGI or m_specOp==SpecOp::Q65_PILEUP) + and m_ActiveStationsWidget!=NULL) { int nlist=0; char list[2000]; @@ -3579,11 +3581,16 @@ void MainWindow::decodeDone () get_q3list_(const_cast (fname.toLatin1().constData()), &nlist, &list[0], (FCL)fname.length(), (FCL)2000); QString t=""; + QString t0=""; for(int i=0; isetClickOK(false); m_ActiveStationsWidget->displayRecentStations("Q65-pileup",t); + m_ActiveStationsWidget->setClickOK(true); } } @@ -3750,6 +3757,24 @@ void MainWindow::callSandP2(int n) { if(m_mode!="Q65" and m_ready2call[n]=="") return; QStringList w=m_ready2call[n].split(' ', SkipEmptyParts); + if(m_mode=="Q65" and m_specOp==SpecOp::Q65_PILEUP) { + // This is the mode for 6m EME DXpeditions + w=m_callers[n].split(' ', SkipEmptyParts); + m_deCall=w[2]; + m_deGrid=w[3]; + m_bDoubleClicked=true; //### needed? + m_txFirst=true; + ui->dxCallEntry->setText(m_deCall); + ui->dxGridEntry->setText(m_deGrid); + ui->txFirstCheckBox->setChecked(m_txFirst); + genStdMsgs("-22"); + setTxMsg(3); + if (!ui->autoButton->isChecked()) ui->autoButton->click(); // Enable Tx + if(m_transmitting) m_restart=true; +// qDebug() << "aa" << int(m_specOp) << n << m_callers[n]; + return; + } + if(m_mode=="Q65") { double kHz=w[1].toDouble(); int nMHz=m_freqNominal/1000000; @@ -4877,7 +4902,8 @@ void MainWindow::guiUpdate() SpecOp::FIELD_DAY==m_specOp or SpecOp::RTTY==m_specOp or SpecOp::WW_DIGI==m_specOp or - SpecOp::ARRL_DIGI==m_specOp) ) { + SpecOp::ARRL_DIGI==m_specOp or + SpecOp::Q65_PILEUP==m_specOp) ) { //We're in a contest-like mode other than EU_VHF: start QSO with Tx2. ui->tx1->setEnabled(false); ui->txb1->setEnabled(false); @@ -5521,7 +5547,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie or bEU_VHF_w2 or (m_QSOProgress==CALLING))) { if(message_words.at(4).contains(grid_regexp) and SpecOp::EU_VHF!=m_specOp) { if((SpecOp::NA_VHF==m_specOp or SpecOp::WW_DIGI==m_specOp or - SpecOp::ARRL_DIGI==m_specOp ) + SpecOp::ARRL_DIGI==m_specOp or SpecOp::Q65_PILEUP==m_specOp) and bContestOK) { setTxMsg(3); m_QSOProgress=ROGER_REPORT; @@ -6009,6 +6035,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) if(SpecOp::NA_VHF==m_specOp) sent=my_grid; if(SpecOp::WW_DIGI==m_specOp) sent=my_grid; if(SpecOp::ARRL_DIGI==m_specOp) sent=my_grid; + if(SpecOp::Q65_PILEUP==m_specOp) sent=my_grid; if(SpecOp::FIELD_DAY==m_specOp) sent=m_config.Field_Day_Exchange(); if(SpecOp::RTTY==m_specOp) { sent=rst + m_config.RTTY_Exchange(); @@ -6949,8 +6976,9 @@ void MainWindow::on_actionFT8_triggered() if(SpecOp::EU_VHF==m_specOp) t0="EU VHF"; if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day"; if(SpecOp::RTTY==m_specOp) t0="FT RU"; - if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI"; - if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI"; + if(SpecOp::WW_DIGI==m_specOp) t0="WW Digi"; + if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL Digi"; + if(SpecOp::Q65_PILEUP==m_specOp) t0="Q65 Pileup"; if(t0=="") { ui->labDXped->setVisible(false); } else { @@ -7185,8 +7213,9 @@ void MainWindow::on_actionQ65_triggered() if(SpecOp::EU_VHF==m_specOp) t0="EU VHF"; if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day"; if(SpecOp::RTTY==m_specOp) t0="FT RU"; - if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI"; - if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI"; + if(SpecOp::WW_DIGI==m_specOp) t0="WW Digi"; + if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL Digi"; + if(SpecOp::Q65_PILEUP==m_specOp) t0="Q65 Pileup"; if(t0=="") { ui->labDXped->setVisible(false); } else { @@ -10254,8 +10283,9 @@ void MainWindow::chkFT4() if(SpecOp::EU_VHF==m_specOp) t0="EU VHF"; if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day"; if(SpecOp::RTTY==m_specOp) t0="FT RU"; - if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI"; - if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI"; + if(SpecOp::WW_DIGI==m_specOp) t0="WW Digi"; + if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL Digi"; + if(SpecOp::Q65_PILEUP==m_specOp) t0="Q65 Pileup"; if(t0=="") { ui->labDXped->setVisible(false); } else { diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index e8096cf08..3f2384c83 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -667,6 +667,7 @@ private: QString m_deCall; QString m_deGrid; QString m_ready2call[50]; + QString m_callers[40]; QSet m_pfx; QSet m_sfx;