From 149c177d5f38d3dc8b4073e2afce0528173d83c7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 20 Jun 2024 13:45:51 -0400 Subject: [PATCH 1/8] Zero the wave() array at start of subroutine sfox_wave_gfsk.f90. --- lib/superfox/sfox_wave_gfsk.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/superfox/sfox_wave_gfsk.f90 b/lib/superfox/sfox_wave_gfsk.f90 index c0bd094c9..f9d605084 100644 --- a/lib/superfox/sfox_wave_gfsk.f90 +++ b/lib/superfox/sfox_wave_gfsk.f90 @@ -31,6 +31,7 @@ subroutine sfox_wave_gfsk(fname) enddo first=.false. endif + wave=0. open(25,file=trim(fname),status='unknown',err=999) read(25,'(20i4)',err=999,end=999) itone @@ -48,7 +49,6 @@ subroutine sfox_wave_gfsk(fname) dphi(0:2*NSPS-1)=dphi(0:2*NSPS-1)+dphi_peak*itone(1)*pulse(NSPS+1:3*NSPS) dphi(NSYM*NSPS:(NSYM+2)*NSPS-1)=dphi(NSYM*NSPS:(NSYM+2)*NSPS-1)+dphi_peak*itone(NSYM)*pulse(1:2*NSPS) - wave=0. phi=0.d0 f0=750.0d0 dphi=dphi+twopi*f0*dt From 98ee149be601a57e639f3d3b3390c5b8466d6cc5 Mon Sep 17 00:00:00 2001 From: Uwe Risse Date: Sat, 22 Jun 2024 14:20:22 +0200 Subject: [PATCH 2/8] Don't let RETURN initiate TXing when in Hound mode. --- widgets/mainwindow.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index fb506831f..1b85ceef1 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2254,18 +2254,18 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } QMainWindow::keyPressEvent (e); } - - if(SpecOp::HOUND == m_specOp) { - switch (e->key()) { - case Qt::Key_Return: - auto_tx_mode(true); - return; - case Qt::Key_Enter: - auto_tx_mode(true); - return; - } - QMainWindow::keyPressEvent (e); - } + // Why shall RETURN switch Tx on when in Hound mode? Makes little sense and confuses many OMs! +// if(SpecOp::HOUND == m_specOp) { +// switch (e->key()) { +// case Qt::Key_Return: +// auto_tx_mode(true); +// return; +// case Qt::Key_Enter: +// auto_tx_mode(true); +// return; +// } +// QMainWindow::keyPressEvent (e); +// } int n; bool bAltF1F6=m_config.alternate_bindings(); @@ -8087,8 +8087,8 @@ void MainWindow::on_bandComboBox_activated (int index) m_bandEdited = true; band_changed (frequency); m_wideGraph->setRxBand (m_config.bands ()->find (frequency)); - m_specOp=m_config.special_op_id(); - if (m_specOp==SpecOp::HOUND) auto_tx_mode(false); +// m_specOp=m_config.special_op_id(); +// if (m_specOp==SpecOp::HOUND) auto_tx_mode(false); } void MainWindow::band_changed (Frequency f) From 024b799ebb54925341fddc974d7bf3d83ab0e7f7 Mon Sep 17 00:00:00 2001 From: Uwe Risse Date: Sun, 23 Jun 2024 15:02:08 +0200 Subject: [PATCH 3/8] Don't display old messages again of stations already logged when "Allow Dupes" is checked. --- widgets/mainwindow.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 1b85ceef1..9a6037dd7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -10147,6 +10147,18 @@ void MainWindow::houndCallers() return; // don't use these decodes } +// Read decodes of the current period + QFile d(m_config.temp_dir().absoluteFilePath("decoded.txt")); + QTextStream ds(&d); + QString decoded=""; + if(d.open(QIODevice::ReadOnly | QIODevice::Text)) { + while (!ds.atEnd()) { + decoded = ds.readAll(); + } + ds.flush(); + d.close(); + } + QFile f(m_config.temp_dir().absoluteFilePath("houndcallers.txt")); if(f.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream s(&f); @@ -10164,13 +10176,17 @@ void MainWindow::houndCallers() paddedHoundCall=houndCall + " "; //Don't list a hound already in the queue if(!ui->houndQueueTextBrowser->toPlainText().contains(paddedHoundCall)) { - if(m_loggedByFox[houndCall].contains(m_lastBand) and - !ui->cbWorkDupes->isChecked()) continue; //already logged on this band - if(m_foxQSO.contains(houndCall)) continue; //still in the QSO map + if(ui->cbWorkDupes->isChecked()) { + if(m_loggedByFox[houndCall].contains(m_lastBand) + and !decoded.contains(paddedHoundCall)) continue; // don't display old messages again of stations already logged + } else { + if(m_loggedByFox[houndCall].contains(m_lastBand)) continue; // already logged on this band + } + if(m_foxQSO.contains(houndCall)) continue; // still in the QSO map auto const& entity = m_logBook.countries ()->lookup (houndCall); auto const& continent = AD1CCty::continent (entity.continent); -//If we are using a directed CQ, ignore Hound calls that do not comply. +// If we are using a directed CQ, ignore Hound calls that do not comply. QString CQtext=ui->comboBoxCQ->currentText(); if(CQtext.length()==5 and (continent!=CQtext.mid(3,2))) continue; int nCallArea=-1; @@ -10182,7 +10198,7 @@ void MainWindow::houndCallers() } if(nCallArea!=CQtext.mid(3,1).toInt()) continue; } -//This houndCall passes all tests, add it to the list. +// This houndCall passes all tests, add it to the list. t = t + line + " " + continent + "\n"; m_nHoundsCalling++; // Number of accepted Hounds to be sorted } From 66880b29c00ce04a427bec19d641e7adc72bbe8a Mon Sep 17 00:00:00 2001 From: Uwe Risse Date: Sun, 23 Jun 2024 15:04:59 +0200 Subject: [PATCH 4/8] Save status of Allow Dupes checkbox. --- widgets/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 9a6037dd7..80c7e73c7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1232,6 +1232,7 @@ void MainWindow::writeSettings() m_settings->setValue("FoxMaxDB_v2",ui->sbMax_dB->value()); // original key abandoned m_settings->setValue ("SerialNumber",ui->sbSerialNumber->value ()); m_settings->setValue("FoxTextMsg", m_freeTextMsg0); + m_settings->setValue("WorkDupes", ui->cbWorkDupes->isChecked()); m_settings->endGroup(); // do this in the General group because we save the parameters from various places @@ -1347,6 +1348,7 @@ void MainWindow::readSettings() ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ()); m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString(); m_freeTextMsg=m_freeTextMsg0; + ui->cbWorkDupes->setChecked(m_settings->value("WorkDupes",true).toBool()); m_settings->endGroup(); m_settings->beginGroup("Common"); From 2768e876180b830e2b0d4de5c05094a615fc02f2 Mon Sep 17 00:00:00 2001 From: Uwe Risse Date: Sun, 23 Jun 2024 15:47:52 +0200 Subject: [PATCH 5/8] Allow Dupes should be deactivated by default. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 80c7e73c7..a91ff47e7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1348,7 +1348,7 @@ void MainWindow::readSettings() ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ()); m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString(); m_freeTextMsg=m_freeTextMsg0; - ui->cbWorkDupes->setChecked(m_settings->value("WorkDupes",true).toBool()); + ui->cbWorkDupes->setChecked(m_settings->value("WorkDupes",false).toBool()); m_settings->endGroup(); m_settings->beginGroup("Common"); From 4063fe22859399a3dfec16bf62498e3f04fb78eb Mon Sep 17 00:00:00 2001 From: Uwe Risse Date: Sun, 23 Jun 2024 16:27:54 +0200 Subject: [PATCH 6/8] Allow Dupes: Prevent that the last worked station is displayed again when no other hound station is received anymore. --- widgets/mainwindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a91ff47e7..93d65747d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3716,7 +3716,10 @@ void MainWindow::decodeDone () ui->DecodeButton->setChecked (false); decodeBusy(false); m_RxLog=0; - if(SpecOp::FOX == m_specOp) houndCallers(); + if(SpecOp::FOX == m_specOp) { + houndCallers(); + if(ui->cbWorkDupes->isChecked()) QTimer::singleShot (5000, [=] {band_activity_cleared();}); + } to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished m_startAnother=m_loopall; From ec712007d9e1da6a60d850060212855d9248c8ff Mon Sep 17 00:00:00 2001 From: Uwe Risse Date: Sun, 23 Jun 2024 19:21:35 +0200 Subject: [PATCH 7/8] A better way to address the SuperFox executables for the Raspberry Pi. --- CMakeLists.txt | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e7ab0d8e..070593d26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1704,7 +1704,14 @@ if (APPLE) ) endif (APPLE) -if (NOT (WIN32 OR UNIX OR APPLE)) +execute_process(COMMAND + dpkg-architecture + -qDEB_HOST_ARCH + OUTPUT_VARIABLE + CMAKE_DEB_HOST_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + +if(${CMAKE_DEB_HOST_ARCH} MATCHES "arm64") install (FILES lib/superfox/arm/sfrx lib/superfox/arm/sftx @@ -1717,6 +1724,19 @@ if (NOT (WIN32 OR UNIX OR APPLE)) ) endif() +if(${CMAKE_DEB_HOST_ARCH} MATCHES "armhf") + install (FILES + lib/superfox/arm32/sfrx + lib/superfox/arm32/sftx + lib/superfox/arm32/foxchk + DESTINATION ${CMAKE_INSTALL_BINDIR} + PERMISSIONS GROUP_READ GROUP_EXECUTE + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + PERMISSIONS WORLD_READ WORLD_EXECUTE + #COMPONENT runtime + ) +endif() + # # Mac installer files # From a3b5b6b2ab40fb95da0a0f85b08af819216b4394 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sun, 23 Jun 2024 19:52:54 -0400 Subject: [PATCH 8/8] Must age the houndcallers by one Rx sequence even if no decodes. Fix the UTC wraparound for computing ages of houndcallers. --- lib/decoder.f90 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 2b254f0f0..8ae4e166a 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -169,14 +169,17 @@ subroutine multimode_decoder(ss,id2,params,nfsample) params%ndiskdat) call timer('decft8 ',1) endif - if(nfox.gt.0) then - n30min=minval(n30fox(1:nfox)) - n30max=maxval(n30fox(1:nfox)) - endif j=0 if(ncontest.eq.6) then ! Fox mode: save decoded Hound calls for possible selection by FoxOp + + n=params%nutc + n30=(3600*(n/10000) + 60*mod((n/100),100) + mod(n,100))/30 + if(n30.lt.n30z) nwrap=nwrap+2880 !New UTC day, handle the wrap + n30z=n30 + n30=n30+nwrap + rewind 19 if(nfox.eq.0) then endfile 19 @@ -184,21 +187,21 @@ subroutine multimode_decoder(ss,id2,params,nfsample) else do i=1,nfox n=n30fox(i) - if(n30max-n30fox(i).le.4) then + if(n30-n30fox(i).le.4) then j=j+1 c2fox(j)=c2fox(i) g2fox(j)=g2fox(i) nsnrfox(j)=nsnrfox(i) nfreqfox(j)=nfreqfox(i) n30fox(j)=n - m=n30max-n + nage=n30-n if(len(trim(g2fox(j))).eq.4) then call azdist(mygrid,g2fox(j)//' ',0.d0,nAz,nEl,nDmiles, & nDkm,nHotAz,nHotABetter) else nDkm=9999 endif - write(19,1004) c2fox(j),g2fox(j),nsnrfox(j),nfreqfox(j),nDkm,m + write(19,1004) c2fox(j),g2fox(j),nsnrfox(j),nfreqfox(j),nDkm,nage 1004 format(a12,1x,a4,i5,i6,i7,i3) endif enddo @@ -680,7 +683,7 @@ contains if(b0 .and. (b1.or.b2) .and. (nint(freq).ge.1000 .or. params%b_superfox)) then n=params%nutc n30=(3600*(n/10000) + 60*mod((n/100),100) + mod(n,100))/30 - if(n30.lt.n30z) nwrap=nwrap+5760 !New UTC day, handle the wrap + if(n30.lt.n30z) nwrap=nwrap+2880 !New UTC day, handle the wrap n30z=n30 n30=n30+nwrap if(nfox.lt.MAXFOX) nfox=nfox+1