Implement Special Operating Activity "Q65 Pileup". Needs more checking for completeness.

This commit is contained in:
Joe Taylor 2023-02-19 16:48:14 -05:00
parent 39c935a882
commit 3f5cbbb147
5 changed files with 68 additions and 17 deletions

View File

@ -1227,6 +1227,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
ui_->special_op_activity_button_group->setId (ui_->rbARRL_Digi, static_cast<int> (SpecialOperatingActivity::ARRL_DIGI));
ui_->special_op_activity_button_group->setId (ui_->rbFox, static_cast<int> (SpecialOperatingActivity::FOX));
ui_->special_op_activity_button_group->setId (ui_->rbHound, static_cast<int> (SpecialOperatingActivity::HOUND));
ui_->special_op_activity_button_group->setId (ui_->rbQ65pileup, static_cast<int> (SpecialOperatingActivity::Q65_PILEUP));
//
// setup PTT port combo box drop down content

View File

@ -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

View File

@ -2923,6 +2923,25 @@ Right click for insert and delete options.</string>
</attribute>
</widget>
</item>
<item row="4" column="0">
<widget class="QRadioButton" name="rbQ65pileup">
<property name="minimumSize">
<size>
<width>0</width>
<height>18</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Exchange 4-character locator instead of signal report. Provides q3-level sensitivities for the DX operator. Especially useful for 6m EME DXpeditions.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Q65 Pileup</string>
</property>
<attribute name="buttonGroup">
<string notr="true">special_op_activity_button_group</string>
</attribute>
</widget>
</item>
<item row="2" column="3">
<layout class="QHBoxLayout" name="horizontalLayout_18" stretch="2,1,1">
<item>
@ -3337,12 +3356,12 @@ Right click for insert and delete options.</string>
</connections>
<buttongroups>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="PTT_method_button_group"/>
<buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="special_op_activity_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="PTT_method_button_group"/>
<buttongroup name="CAT_stop_bits_button_group"/>
</buttongroups>
</ui>

View File

@ -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<char *> (fname.toLatin1().constData()), &nlist,
&list[0], (FCL)fname.length(), (FCL)2000);
QString t="";
QString t0="";
for(int i=0; i<nlist; i++) {
memcpy(line,&list[36*i],36);
t+=QString::fromLatin1(line)+"\n";
t0=QString::fromLatin1(line)+"\n";
m_callers[i]=t0;
t+=t0;
}
m_ActiveStationsWidget->setClickOK(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 {

View File

@ -667,6 +667,7 @@ private:
QString m_deCall;
QString m_deGrid;
QString m_ready2call[50];
QString m_callers[40];
QSet<QString> m_pfx;
QSet<QString> m_sfx;