mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-08-13 03:02:26 -04:00
Merge branch 'sfox4' of bitbucket.org:k1jt/wsjtx into sfox4
This commit is contained in:
commit
86891c0b00
@ -1704,7 +1704,14 @@ if (APPLE)
|
|||||||
)
|
)
|
||||||
endif (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
|
install (FILES
|
||||||
lib/superfox/arm/sfrx
|
lib/superfox/arm/sfrx
|
||||||
lib/superfox/arm/sftx
|
lib/superfox/arm/sftx
|
||||||
@ -1717,6 +1724,19 @@ if (NOT (WIN32 OR UNIX OR APPLE))
|
|||||||
)
|
)
|
||||||
endif()
|
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
|
# Mac installer files
|
||||||
#
|
#
|
||||||
|
@ -169,14 +169,17 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
params%ndiskdat)
|
params%ndiskdat)
|
||||||
call timer('decft8 ',1)
|
call timer('decft8 ',1)
|
||||||
endif
|
endif
|
||||||
if(nfox.gt.0) then
|
|
||||||
n30min=minval(n30fox(1:nfox))
|
|
||||||
n30max=maxval(n30fox(1:nfox))
|
|
||||||
endif
|
|
||||||
j=0
|
j=0
|
||||||
|
|
||||||
if(ncontest.eq.6) then
|
if(ncontest.eq.6) then
|
||||||
! Fox mode: save decoded Hound calls for possible selection by FoxOp
|
! 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
|
rewind 19
|
||||||
if(nfox.eq.0) then
|
if(nfox.eq.0) then
|
||||||
endfile 19
|
endfile 19
|
||||||
@ -184,21 +187,21 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
else
|
else
|
||||||
do i=1,nfox
|
do i=1,nfox
|
||||||
n=n30fox(i)
|
n=n30fox(i)
|
||||||
if(n30max-n30fox(i).le.4) then
|
if(n30-n30fox(i).le.4) then
|
||||||
j=j+1
|
j=j+1
|
||||||
c2fox(j)=c2fox(i)
|
c2fox(j)=c2fox(i)
|
||||||
g2fox(j)=g2fox(i)
|
g2fox(j)=g2fox(i)
|
||||||
nsnrfox(j)=nsnrfox(i)
|
nsnrfox(j)=nsnrfox(i)
|
||||||
nfreqfox(j)=nfreqfox(i)
|
nfreqfox(j)=nfreqfox(i)
|
||||||
n30fox(j)=n
|
n30fox(j)=n
|
||||||
m=n30max-n
|
nage=n30-n
|
||||||
if(len(trim(g2fox(j))).eq.4) then
|
if(len(trim(g2fox(j))).eq.4) then
|
||||||
call azdist(mygrid,g2fox(j)//' ',0.d0,nAz,nEl,nDmiles, &
|
call azdist(mygrid,g2fox(j)//' ',0.d0,nAz,nEl,nDmiles, &
|
||||||
nDkm,nHotAz,nHotABetter)
|
nDkm,nHotAz,nHotABetter)
|
||||||
else
|
else
|
||||||
nDkm=9999
|
nDkm=9999
|
||||||
endif
|
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)
|
1004 format(a12,1x,a4,i5,i6,i7,i3)
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
@ -680,7 +683,7 @@ contains
|
|||||||
if(b0 .and. (b1.or.b2) .and. (nint(freq).ge.1000 .or. params%b_superfox)) then
|
if(b0 .and. (b1.or.b2) .and. (nint(freq).ge.1000 .or. params%b_superfox)) then
|
||||||
n=params%nutc
|
n=params%nutc
|
||||||
n30=(3600*(n/10000) + 60*mod((n/100),100) + mod(n,100))/30
|
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
|
n30z=n30
|
||||||
n30=n30+nwrap
|
n30=n30+nwrap
|
||||||
if(nfox.lt.MAXFOX) nfox=nfox+1
|
if(nfox.lt.MAXFOX) nfox=nfox+1
|
||||||
|
@ -31,6 +31,7 @@ subroutine sfox_wave_gfsk(fname)
|
|||||||
enddo
|
enddo
|
||||||
first=.false.
|
first=.false.
|
||||||
endif
|
endif
|
||||||
|
wave=0.
|
||||||
|
|
||||||
open(25,file=trim(fname),status='unknown',err=999)
|
open(25,file=trim(fname),status='unknown',err=999)
|
||||||
read(25,'(20i4)',err=999,end=999) itone
|
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(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)
|
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
|
phi=0.d0
|
||||||
f0=750.0d0
|
f0=750.0d0
|
||||||
dphi=dphi+twopi*f0*dt
|
dphi=dphi+twopi*f0*dt
|
||||||
|
@ -1232,6 +1232,7 @@ void MainWindow::writeSettings()
|
|||||||
m_settings->setValue("FoxMaxDB_v2",ui->sbMax_dB->value()); // original key abandoned
|
m_settings->setValue("FoxMaxDB_v2",ui->sbMax_dB->value()); // original key abandoned
|
||||||
m_settings->setValue ("SerialNumber",ui->sbSerialNumber->value ());
|
m_settings->setValue ("SerialNumber",ui->sbSerialNumber->value ());
|
||||||
m_settings->setValue("FoxTextMsg", m_freeTextMsg0);
|
m_settings->setValue("FoxTextMsg", m_freeTextMsg0);
|
||||||
|
m_settings->setValue("WorkDupes", ui->cbWorkDupes->isChecked());
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
|
|
||||||
// do this in the General group because we save the parameters from various places
|
// 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 ());
|
ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ());
|
||||||
m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString();
|
m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString();
|
||||||
m_freeTextMsg=m_freeTextMsg0;
|
m_freeTextMsg=m_freeTextMsg0;
|
||||||
|
ui->cbWorkDupes->setChecked(m_settings->value("WorkDupes",false).toBool());
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
|
|
||||||
m_settings->beginGroup("Common");
|
m_settings->beginGroup("Common");
|
||||||
@ -2254,18 +2256,18 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
|
|||||||
}
|
}
|
||||||
QMainWindow::keyPressEvent (e);
|
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) {
|
// if(SpecOp::HOUND == m_specOp) {
|
||||||
switch (e->key()) {
|
// switch (e->key()) {
|
||||||
case Qt::Key_Return:
|
// case Qt::Key_Return:
|
||||||
auto_tx_mode(true);
|
// auto_tx_mode(true);
|
||||||
return;
|
// return;
|
||||||
case Qt::Key_Enter:
|
// case Qt::Key_Enter:
|
||||||
auto_tx_mode(true);
|
// auto_tx_mode(true);
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
QMainWindow::keyPressEvent (e);
|
// QMainWindow::keyPressEvent (e);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int n;
|
int n;
|
||||||
bool bAltF1F6=m_config.alternate_bindings();
|
bool bAltF1F6=m_config.alternate_bindings();
|
||||||
@ -3714,7 +3716,10 @@ void MainWindow::decodeDone ()
|
|||||||
ui->DecodeButton->setChecked (false);
|
ui->DecodeButton->setChecked (false);
|
||||||
decodeBusy(false);
|
decodeBusy(false);
|
||||||
m_RxLog=0;
|
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
|
to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished
|
||||||
|
|
||||||
m_startAnother=m_loopall;
|
m_startAnother=m_loopall;
|
||||||
@ -8087,8 +8092,8 @@ void MainWindow::on_bandComboBox_activated (int index)
|
|||||||
m_bandEdited = true;
|
m_bandEdited = true;
|
||||||
band_changed (frequency);
|
band_changed (frequency);
|
||||||
m_wideGraph->setRxBand (m_config.bands ()->find (frequency));
|
m_wideGraph->setRxBand (m_config.bands ()->find (frequency));
|
||||||
m_specOp=m_config.special_op_id();
|
// m_specOp=m_config.special_op_id();
|
||||||
if (m_specOp==SpecOp::HOUND) auto_tx_mode(false);
|
// if (m_specOp==SpecOp::HOUND) auto_tx_mode(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::band_changed (Frequency f)
|
void MainWindow::band_changed (Frequency f)
|
||||||
@ -10147,6 +10152,18 @@ void MainWindow::houndCallers()
|
|||||||
return; // don't use these decodes
|
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"));
|
QFile f(m_config.temp_dir().absoluteFilePath("houndcallers.txt"));
|
||||||
if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
QTextStream s(&f);
|
QTextStream s(&f);
|
||||||
@ -10164,13 +10181,17 @@ void MainWindow::houndCallers()
|
|||||||
paddedHoundCall=houndCall + " ";
|
paddedHoundCall=houndCall + " ";
|
||||||
//Don't list a hound already in the queue
|
//Don't list a hound already in the queue
|
||||||
if(!ui->houndQueueTextBrowser->toPlainText().contains(paddedHoundCall)) {
|
if(!ui->houndQueueTextBrowser->toPlainText().contains(paddedHoundCall)) {
|
||||||
if(m_loggedByFox[houndCall].contains(m_lastBand) and
|
if(ui->cbWorkDupes->isChecked()) {
|
||||||
!ui->cbWorkDupes->isChecked()) continue; //already logged on this band
|
if(m_loggedByFox[houndCall].contains(m_lastBand)
|
||||||
if(m_foxQSO.contains(houndCall)) continue; //still in the QSO map
|
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& entity = m_logBook.countries ()->lookup (houndCall);
|
||||||
auto const& continent = AD1CCty::continent (entity.continent);
|
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();
|
QString CQtext=ui->comboBoxCQ->currentText();
|
||||||
if(CQtext.length()==5 and (continent!=CQtext.mid(3,2))) continue;
|
if(CQtext.length()==5 and (continent!=CQtext.mid(3,2))) continue;
|
||||||
int nCallArea=-1;
|
int nCallArea=-1;
|
||||||
@ -10182,7 +10203,7 @@ void MainWindow::houndCallers()
|
|||||||
}
|
}
|
||||||
if(nCallArea!=CQtext.mid(3,1).toInt()) continue;
|
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";
|
t = t + line + " " + continent + "\n";
|
||||||
m_nHoundsCalling++; // Number of accepted Hounds to be sorted
|
m_nHoundsCalling++; // Number of accepted Hounds to be sorted
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user