diff --git a/CMakeLists.txt b/CMakeLists.txt index d7dfbf434..dc47a91f9 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 acac2b54d..ebe14963f 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 '//'"'//trim(temp_dir)//'/fort.47"') + write(crxfreq,'(i6)') params%nfqso + write(cftol,'(i5)') params%ntol + cmnd=trim(exe_dir)//'/sfrx'//crxfreq//cftol// '"' // & + 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 baa0e67f1..a13590cfe 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1369,6 +1369,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); @@ -2159,6 +2162,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) @@ -7300,6 +7304,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")); @@ -7332,8 +7337,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); } @@ -7355,15 +7362,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); @@ -7380,6 +7393,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(); @@ -8852,6 +8866,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 ()); diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index df88831dd..fd64b3d02 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -483,7 +483,9 @@ void CPlotter::DrawOverlay() //DrawOverlay() float bw=9.0*12000.0/m_nsps; //JT9 if(m_mode=="FT4") bw=3*12000.0/576.0; //FT4 ### (3x, or 4x???) ### - if(m_mode=="FT8") bw=7*12000.0/1920.0; //FT8 + if(m_mode=="FT8") { + bw=7*12000.0/1920.0; //FT8 + } if(m_mode.startsWith("FST4")) { int h=int(pow(2.0,m_nSubMode)); int nsps=800; @@ -585,7 +587,7 @@ void CPlotter::DrawOverlay() //DrawOverlay() painter0.drawLine(x2,25,x2-5,20); } - if(m_mode=="Q65" or (m_mode=="JT65" and m_bVHF)) { + if(m_mode=="Q65" or (m_mode=="JT65" and m_bVHF) or (m_mode=="FT8" and m_bSuperHound) ) { painter0.setPen(penGreen); x1=XfromFreq(m_rxFreq-m_tol); x2=XfromFreq(m_rxFreq+m_tol); @@ -604,10 +606,11 @@ void CPlotter::DrawOverlay() //DrawOverlay() } painter0.setPen(penGreen); x6=XfromFreq(m_rxFreq+bw); //Highest tone + if(m_mode=="FT8" and m_bSuperHound) x6=XfromFreq(m_rxFreq+1500.0); painter0.drawLine(x6,20,x6,26); } else { - // Draw the green "goal post" + // Draw the green goal post painter0.setPen(penGreen); x1=XfromFreq(m_rxFreq); x2=XfromFreq(m_rxFreq+bw); @@ -627,12 +630,13 @@ void CPlotter::DrawOverlay() //DrawOverlay() painter0.setPen(penRed); x1=XfromFreq(m_txFreq); x2=XfromFreq(m_txFreq+bw); + if(m_bSuperFox) x2=XfromFreq(m_txFreq+1500.0); if(m_mode=="WSPR") { bw=4*12000.0/8192.0; //WSPR x1=XfromFreq(m_txFreq-0.5*bw); x2=XfromFreq(m_txFreq+0.5*bw); } - // Draw the red "goal post" + // Draw the red goal post painter0.drawLine(x1,yTxTop,x1,yTxTop+yh); painter0.drawLine(x1,yTxTop,x2,yTxTop); painter0.drawLine(x2,yTxTop,x2,yTxTop+yh); @@ -885,6 +889,18 @@ void CPlotter::setFlatten(bool b1, bool b2) if(b2) m_Flatten=2; } +void CPlotter::setSuperFox(bool b) +{ + m_bSuperFox=b; + if(m_bSuperFox) m_bSuperHound=false; +} + +void CPlotter::setSuperHound(bool b) +{ + m_bSuperHound=b; + if(m_bSuperHound) m_bSuperFox=false; +} + void CPlotter::setTol(int n) //setTol() { m_tol=n; diff --git a/widgets/plotter.h b/widgets/plotter.h index d01c98102..38dc0e438 100644 --- a/widgets/plotter.h +++ b/widgets/plotter.h @@ -77,6 +77,8 @@ public: void setColours(QVector 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();