Merge branch 'sfox4' of bitbucket.org:k1jt/wsjtx into sfox4

This commit is contained in:
Joe Taylor 2024-06-24 11:08:41 -04:00
commit 86891c0b00
4 changed files with 74 additions and 30 deletions

View File

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

View File

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

View File

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

View File

@ -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",false).toBool());
m_settings->endGroup();
m_settings->beginGroup("Common");
@ -2254,18 +2256,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();
@ -3714,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;
@ -8087,8 +8092,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)
@ -10147,6 +10152,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 +10181,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 +10203,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
}