diff --git a/CMakeLists.txt b/CMakeLists.txt index b9c2af3d0..1179fb27a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,7 @@ message (STATUS "******************************************************") include (set_build_type) # RC 0 or omitted is a development build, GA is a General Availability release build -set_build_type (RC 6) +set_build_type (RC 7) set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}") # diff --git a/displayWidgets.txt b/displayWidgets.txt index 0dc285f6e..751c18ed9 100644 --- a/displayWidgets.txt +++ b/displayWidgets.txt @@ -21,6 +21,7 @@ FT8 11101000010011100001000010011000100000 FT8/VHF 11101000010011100001000010011000100000 FT8/Fox 11101000010011100001000000000010000000 FT8/Hound 11101000010011100001000000000011000000 +FT8/SupHou 11111000010011100001000000000011000000 ------------------------------------------------- 1 2 3 01234567890123456789012345678901234567 diff --git a/lib/decoder.f90 b/lib/decoder.f90 index ff4c602d8..4da20fda6 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -53,6 +53,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) character(len=12) :: mycall, hiscall character(len=6) :: mygrid, hisgrid character*60 line + character*256 cmnd,cmndmsg + character*6 crxfreq,cftol data ndec8/0/,ntr0/-1/ save type(counting_jt4_decoder) :: my_jt4 @@ -146,7 +148,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample) access='stream') write(47) params%yymmdd,params%nutc,id2(1:20),id2(1:180000) close(47) - call execute_command_line(trim(exe_dir)//'/sfrx OTP '//'"'//trim(temp_dir)//'/fort.47"') + write(crxfreq,'(i6)') params%nfqso + write(cftol,'(i5)') params%ntol + cmnd=trim(exe_dir)//'/sfrx'//crxfreq//cftol// 'OTP "' // & + trim(temp_dir)//'/fort.47"' + call execute_command_line(trim(cmnd),exitstat=nexitstat, & + cmdstat=ncmdstat,cmdmsg=cmndmsg) else call timer('decft8 ',0) newdat=params%newdat diff --git a/lib/ft4/ft4code.f90 b/lib/ft4/ft4code.f90 index dae552450..1792d9a26 100644 --- a/lib/ft4/ft4code.f90 +++ b/lib/ft4/ft4code.f90 @@ -26,8 +26,8 @@ program ft4code 'LDPC(174,91) encoding,' print*,'bit and symbol ordering, and other details of the FT4 protocol.' print* - print*,'Usage: ft4code [-c grid] "message" # Results for specified message' - print*,' ft4code -t # Examples of all message types' + print*,'Usage: ft4code "message" # Results for specified message' + print*,' ft4code -t # Examples of all message types' go to 999 endif diff --git a/lib/ft8/ft8code.f90 b/lib/ft8/ft8code.f90 index 219fd2e3d..53371ff44 100644 --- a/lib/ft8/ft8code.f90 +++ b/lib/ft8/ft8code.f90 @@ -23,9 +23,9 @@ program ft8code 'LDPC(174,91) encoding,' print*,'bit and symbol ordering, and other details of the FT8 protocol.' print* - print*,'Usage: ft8code [-c grid] "message" # Results for specified message' - print*,' ft8code -T # Examples of all message types' - print*,' ft8code -t # Short format examples' + print*,'Usage: ft8code "message" # Results for specified message' + print*,' ft8code -T # Examples of all message types' + print*,' ft8code -t # Short format examples' go to 999 endif diff --git a/lib/superfox/win/foxchk.exe b/lib/superfox/win/foxchk.exe index 6e46f8dcd..05bc08f2d 100644 Binary files a/lib/superfox/win/foxchk.exe and b/lib/superfox/win/foxchk.exe differ diff --git a/lib/superfox/win/sfrx.exe b/lib/superfox/win/sfrx.exe index dad45b3f0..4d6f27254 100644 Binary files a/lib/superfox/win/sfrx.exe and b/lib/superfox/win/sfrx.exe differ diff --git a/lib/superfox/win/sftx.exe b/lib/superfox/win/sftx.exe index 561ba912d..dbb5cff79 100644 Binary files a/lib/superfox/win/sftx.exe and b/lib/superfox/win/sftx.exe differ diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a1df16142..60505e991 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1372,6 +1372,9 @@ void MainWindow::readSettings() ui->sbTR->setValue (m_settings->value ("TRPeriod", 15).toInt()); QTimer::singleShot (50, [=] {blocked = false;}); } + if (m_mode=="FT8") { + ui->sbFtol->setValue (m_settings->value("Ftol_SF", 50).toInt()); + } if (m_mode=="Q65") { m_nSubMode=m_settings->value("SubMode_Q65",0).toInt(); ui->sbSubmode->setValue(m_nSubMode_Q65); @@ -2162,6 +2165,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog set_mode(m_mode); configActiveStations(); } + if(m_mode=="FT8") on_actionFT8_triggered(); //in case we need to reset some things for Fox/Hound } void MainWindow::on_monitorButton_clicked (bool checked) @@ -7373,6 +7377,7 @@ void MainWindow::on_actionFT8_triggered() VHF_features_enabled(bVHF); ui->cbAutoSeq->setChecked(true); m_TRperiod=15.0; + ui->sbFtol->setValue (m_settings->value ("Ftol_SF", 50).toInt()); // restore last used Ftol parameter m_fastGraph->hide(); m_wideGraph->show(); ui->rh_decodes_headings_label->setText(" UTC dB DT Freq " + tr ("Message")); @@ -7405,8 +7410,10 @@ void MainWindow::on_actionFT8_triggered() ui->cbHoldTxFreq->setChecked(true); ui->cbAutoSeq->setEnabled(false); ui->tabWidget->setCurrentIndex(1); + m_wideGraph->setSuperFox(false); if(m_config.superFox()) { ui->TxFreqSpinBox->setValue(750); //SuperFox transmits at 750 Hz + m_wideGraph->setSuperFox(true); } else { ui->TxFreqSpinBox->setValue(500); } @@ -7428,15 +7435,21 @@ void MainWindow::on_actionFT8_triggered() ui->cbAutoSeq->setEnabled(false); ui->tabWidget->setCurrentIndex(0); ui->cbHoldTxFreq->setChecked(true); - // 01234567890123456789012345678901234567 - displayWidgets(nWidgets("11101000010011000001000000000011000000")); - ui->cbRxAll->setText(tr("Rx All Freqs")); + m_wideGraph->setSuperHound(false); if(m_config.superFox()) { + // 01234567890123456789012345678901234567 + displayWidgets(nWidgets("11111000010011000001000000000011000000")); ui->labDXped->setText(tr ("Super Hound")); ui->cbRxAll->setEnabled(false); + m_wideGraph->setRxFreq(ui->RxFreqSpinBox->value()); + m_wideGraph->setTol(ui->sbFtol->value()); + m_wideGraph->setSuperHound(true); } else { + // 01234567890123456789012345678901234567 + displayWidgets(nWidgets("11101000010011000001000000000011000000")); ui->labDXped->setText(tr ("Hound")); ui->cbRxAll->setEnabled(true); + m_wideGraph->setSuperHound(false); } ui->txrb1->setChecked(true); ui->txrb2->setEnabled(false); @@ -7453,6 +7466,7 @@ void MainWindow::on_actionFT8_triggered() } if(m_specOp != SpecOp::HOUND) { ui->houndButton->setChecked(false); + m_wideGraph->setSuperHound(false); } m_specOp=m_config.special_op_id(); @@ -8925,6 +8939,7 @@ void MainWindow::on_sbFtol_valueChanged(int value) statusUpdate (); // save last used parameters QTimer::singleShot (200, [=] { + if (m_mode=="FT8") m_settings->setValue ("Ftol_SF", ui->sbFtol->value()); if (m_mode=="Q65") m_settings->setValue ("Ftol_Q65", ui->sbFtol->value()); if (m_mode=="MSK144") m_settings->setValue ("Ftol_MSK144", ui->sbFtol->value()); if (m_mode=="JT65") m_settings->setValue ("Ftol_JT65", ui->sbFtol->value ()); @@ -10208,7 +10223,11 @@ QString MainWindow::sortHoundCalls(QString t, int isort, int max_dB) else i=isort; // part of the line that we want t1=map[a].split(" ",SkipEmptyParts).at(i); - n=1000*(t1.toInt()+100) + j; // pack (snr or dist or age) and index j into n + int isort_value = t1.toInt(); + if (isort==5) { // sort by age ascending + isort_value = (100 < isort_value ? 100 : 100-isort_value); + } + n=1000*(isort_value+100) + j; // pack (snr or dist or age) and index j into n list.insert(j,n); // add n to list at [j] } if (isort == 6) { // sort by continent @@ -10295,7 +10314,7 @@ void MainWindow::selectHound(QString line, bool bTopQueue) * The line may be selected by double-clicking; alternatively, hitting * is equivalent to double-clicking on the top-most line. */ - if(line.length()==0) return; + if(line.simplified().isEmpty()) return; if(line.length() < 6) return; QString houndCall=line.split(" ",SkipEmptyParts).at(0); @@ -10479,7 +10498,7 @@ void MainWindow::foxTxSequencer() QString t,rpt; qint32 islot=0; qint32 n1,n2,n3; - + int nMaxRemainingSlots=0; m_tFoxTx++; //Increment Fox Tx cycle counter //Is it time for a stand-alone CQ? @@ -10531,13 +10550,15 @@ void MainWindow::foxTxSequencer() list1Done: //Compile list2: Up to Nslots Hound calls to be sent a report. +// For Superfox, up to 5 RR73, but only 4 callsigns with reports. m_NSlots should be 5 for SF. + nMaxRemainingSlots = (m_config.superFox()) ? m_Nslots - 1 : m_Nslots; for(int i=0; im_Nslots) n3=m_Nslots; - for(int i=0; i const& cl); void setFlatten(bool b1, bool b2); void setTol(int n); + void setSuperFox(bool b); + void setSuperHound(bool b); void setRxBand(QString band); void setReference(bool b) {m_bReference = b;} bool Reference() const {return m_bReference;} @@ -125,6 +127,8 @@ private: bool m_bSingleDecode; bool m_bFirst=true; bool m_bResized; + bool m_bSuperFox=false; + bool m_bSuperHound=false; float m_fSpan; float m_pdB=0.0; diff --git a/widgets/widegraph.cpp b/widgets/widegraph.cpp index 7119eda35..ce2ebd6f1 100644 --- a/widgets/widegraph.cpp +++ b/widgets/widegraph.cpp @@ -498,6 +498,16 @@ void WideGraph::on_zero2dSlider_valueChanged(int value) //Zero2 } } +void WideGraph::setSuperFox(bool b) +{ + ui->widePlot->setSuperFox(b); +} + +void WideGraph::setSuperHound(bool b) +{ + ui->widePlot->setSuperHound(b); +} + void WideGraph::setTol(int n) //setTol { ui->widePlot->setTol(n); diff --git a/widgets/widegraph.h b/widgets/widegraph.h index 795031a46..171f3d27b 100644 --- a/widgets/widegraph.h +++ b/widgets/widegraph.h @@ -42,6 +42,8 @@ public: bool flatten(); bool useRef(); void setTol(int n); + void setSuperFox(bool b); + void setSuperHound(bool b); int smoothYellow(); void setRxBand (QString const& band); void setWSPRtransmitted();