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

This commit is contained in:
Joe Taylor 2022-12-04 09:23:06 -05:00
commit c8e64db9d4
13 changed files with 133 additions and 16 deletions

View File

@ -40,7 +40,7 @@ subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat, &
lagain=(nagain.ne.0)
bVHF=.true.
emedelay=2.5
ndepth=3 !Does this make it too slow?
ndepth=2 !Does this make it too slow?
ntrperiod=60
open(17,file=trim(temp_dir)//'/red.dat',status='unknown')

View File

@ -70,6 +70,7 @@ void Astro::astroUpdate(QDateTime t, QString mygrid, QString hisgrid,
&azmoondx, &elmoondx, &ntsky, &ndop, &ndop00,&ramoon, &decmoon,
&dgrd, &poloffset, &xnr, 6, 6);
datcom_.nfast=ndop00; //Send self Doppler to decoder, via datcom
sprintf(cc,
"Az: %6.1f\n"
"El: %6.1f\n"

View File

@ -12,3 +12,15 @@ subroutine astrosub(nyear,month,nday,uth8,nfreq,mygrid,hisgrid, &
return
end subroutine astrosub
subroutine astrosub00(nyear,month,nday,uth8,nfreq,mygrid,ndop00)
implicit real*8 (a-h,o-z)
character*6 mygrid
call astrosub(nyear,month,nday,uth8,nfreq,mygrid,mygrid, &
AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00, &
RAMoon8,DecMoon8,Dgrd8,poloffset8,xnr8)
return
end subroutine astrosub00

View File

@ -12,7 +12,7 @@ subroutine decode0(dd,ss,savg,nstandalone)
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
nfast,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid,datetime
ndop00,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid,datetime
common/early/nhsym1,nhsym2,ldecoded(32768)
common/decodes/ndecodes
data neme0/-99/,mcall3b/1/
@ -56,7 +56,7 @@ subroutine decode0(dd,ss,savg,nstandalone)
mousedf,mousefqso,nagain,ndecdone,nfshift,ndphi,max_drift, &
nfcal,nkeep,mcall3b,nsum,nsave,nxant,mycall,mygrid, &
neme,ndepth,nstandalone,hiscall,hisgrid,nhsym,nfsample, &
ndiskdat,nxpol,nmode)
ndiskdat,nxpol,nmode,ndop00)
call timer('map65a ',1)
call timer('decode0 ',1)

View File

@ -10,6 +10,7 @@ subroutine ftninit(appd)
addpfx=' '
call pfxdump(appd//'/prefixes.txt')
open(12,file=appd//'/wb_q65.txt',status='unknown')
open(13,file=appd//'/map65.log',status='unknown')
open(19,file=appd//'/livecq.txt',status='unknown')
open(21,file=appd//'/map65_rx.log',status='unknown',access='append',err=950)

View File

@ -7,9 +7,9 @@ program m65
!
! 10 binary input data, *.tf2 files
! 11 prefixes.txt
! 12
! 12 wb_w65.txt
! 13 map65.log
! 14
! 14
! 15
! 16 tquick log
! 17 saved *.tf2 files
@ -41,7 +41,7 @@ program m65
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
nfast,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid,datetime
ndop00,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid,datetime
common/early/nhsym1,nhsym2,ldecoded(32768)
nargs=iargc()

View File

@ -82,7 +82,7 @@ subroutine m65c(dd,ss,savg,nparams0)
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
nfast,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid, &
ndop00,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid, &
datetime,junk1,junk2
common/early/nhsym1,nhsym2,ldecoded(32768)
equivalence (nparams,fcenter)

View File

@ -2,7 +2,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
mousedf,mousefqso,nagain,ndecdone,nfshift,ndphi,max_drift, &
nfcal,nkeep,mcall3b,nsum,nsave,nxant,mycall,mygrid, &
neme,ndepth,nstandalone,hiscall,hisgrid,nhsym,nfsample, &
ndiskdat,nxpol,nmode)
ndiskdat,nxpol,nmode,ndop00)
! Processes timf2 data from Linrad to find and decode JT65 signals.
@ -41,6 +41,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
data nfile/0/,nutc0/-999/,nid/0/,ip000/1/,ip001/1/,mousefqso0/-999/
save
rewind 12
ndecodes=0
! Clean start for Q65 at early decode
@ -365,7 +366,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
call timer('q65b ',0)
call q65b(nutc,nqd,nxant,fcenter,nfcal,nfsample,ikhz,mousedf, &
ntol,xpol,mycall,mygrid, hiscall,hisgrid,mode_q65,f0,fqso, &
newdat,nagain,max_drift,nhsym,idec)
newdat,nagain,max_drift,nhsym,ndop00,idec)
call timer('q65b ',1)
if(idec.ge.0) candec(icand)=.true.
enddo
@ -376,7 +377,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
call timer('q65b ',0)
call q65b(nutc,nqd,nxant,fcenter,nfcal,nfsample,ikhz,mousedf, &
ntol,xpol,mycall,mygrid,hiscall,hisgrid,mode_q65,f0,fqso, &
newdat,nagain,max_drift,nhsym,idec)
newdat,nagain,max_drift,nhsym,ndop00,idec)
call timer('q65b ',1)
endif
endif
@ -420,7 +421,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
call timer('q65b ',0)
call q65b(nutc,nqd,nxant,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
xpol,mycall,mygrid,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
nagain,max_drift,nhsym,idec)
nagain,max_drift,nhsym,ndop00,idec)
call timer('q65b ',1)
if(idec.ge.0) candec(icand)=.true.
enddo ! icand
@ -520,6 +521,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
ndecdone=2
900 close(23)
call flush(12)
ndphi=0
mcall3b=mcall3a

View File

@ -1,6 +1,6 @@
subroutine q65b(nutc,nqd,nxant,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
mycall0,mygrid,hiscall0,hisgrid,mode_q65,f0,fqso,newdat,nagain, &
max_drift,nhsym,idec)
max_drift,nhsym,ndop00,idec)
! This routine provides an interface between MAP65 and the Q65 decoder
! in WSJT-X. All arguments are input data obtained from the MAP65 GUI.
@ -181,11 +181,16 @@ subroutine q65b(nutc,nqd,nxant,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
if(nutc.ne.nutc00 .or. msg0(1:28).ne.msg00 .or. freq1.ne.freq1_00) then
! Write to file map65_rx.log:
ndecodes=ndecodes+1
write(21,1110) freq1,ndf,xdt0,npol,nsnr0,nutc,msg0(1:28),cq0
1110 format(f8.3,i5,f5.1,2i4,i5.4,2x,a28,': A',2x,a3)
write(21,1110) freq1,ndf,xdt0,npol,nsnr0,nutc,msg0(1:28), &
cmode(2:2),cq0
1110 format(f8.3,i5,f5.1,2i4,i5.4,2x,a28,': ',a1,2x,a3)
nutc00=nutc
msg00=msg0(1:28)
freq1_00=freq1
frx=0.001*k0*df+nkhz_center-48.0+1.0 - 0.001*nfcal
fsked=frx - 0.001*ndop00/2.0 - 1.5
write(12,1120) nutc,fsked,xdt0,nsnr0,trim(msg0)
1120 format(i4.4,f9.3,f7.2,i5,2x,a,i6)
endif
endif

View File

@ -1293,7 +1293,25 @@ void MainWindow::decode() //decode()
datcom_.mousefqso=m_wide_graph_window->QSOfreq();
datcom_.ndepth=m_ndepth;
datcom_.ndiskdat=0;
if(m_diskData) datcom_.ndiskdat=1;
if(m_diskData) {
datcom_.ndiskdat=1;
int i0=m_path.indexOf(".tf2");
if(i0<0) i0=m_path.indexOf(".iq");
if(i0>0) {
// Compute self Doppler using the filename for Date and Time
int nyear=m_path.mid(i0-11,2).toInt()+2000;
int month=m_path.mid(i0-9,2).toInt();
int nday=m_path.mid(i0-7,2).toInt();
int nhr=m_path.mid(i0-4,2).toInt();
int nmin=m_path.mid(i0-2,2).toInt();
double uth=nhr + nmin/60.0;
int nfreq=(int)datcom_.fcenter;
int ndop00;
astrosub00_(&nyear, &month, &nday, &uth, &nfreq, m_myGrid.toLatin1(),&ndop00,6);
datcom_.nfast=ndop00; //Send self Doppler to decoder, via datcom
}
}
datcom_.neme=0;
if(ui->actionOnly_EME_calls->isChecked()) datcom_.neme=1;
@ -1322,7 +1340,7 @@ void MainWindow::decode() //decode()
datcom_.nxpol=0;
if(m_xpol) datcom_.nxpol=1;
datcom_.nmode=10*m_modeQ65 + m_modeJT65;
datcom_.nfast=1; //No longer used
// datcom_.nfast=1; //No longer used
datcom_.nsave=m_nsave;
datcom_.max_drift=ui->sbMaxDrift->value();

View File

@ -322,6 +322,9 @@ extern "C" {
int len1, int len2);
int ptt_(int* nport, int* itx, int* iptt);
void astrosub00_ (int* nyear, int* month, int* nday, double* uth, int* nfreq,
const char* mygrid, int* ndop00, int len1);
}
#endif // MAINWINDOW_H

View File

@ -4781,6 +4781,14 @@ void MainWindow::guiUpdate()
if(nsec != m_sec0) {
// qDebug() << "AAA" << nsec << int(m_specOp) << ui->labDXped->text();
if(m_mode=="Q65") {
QFileInfo fi(m_appDir+"/wb_q65.txt");
QDateTime fileTime=fi.lastModified();
QDateTime now = QDateTime::currentDateTimeUtc ();
int age=fileTime.msecsTo(now)/1000;
if(age==1) readWidebandDecodes();
}
if(m_mode=="FST4") chk_FST4_freq_range();
m_currentBand=m_config.bands()->find(m_freqNominal);
if( SpecOp::HOUND == m_specOp ) {
@ -9152,6 +9160,63 @@ void MainWindow::write_transmit_entry (QString const& file_name)
}
}
void MainWindow::readWidebandDecodes()
{
// Update "m_wEMECall" by reading wb_dec.txt
int nhr=0;
int nmin=0;
QFile f(m_appDir+"/wb_q65.txt");
f.open(QIODevice::ReadOnly);
if(f.isOpen()) {
QTextStream in(&f);
QString line,callsign;
for(int i=0; i<99999; i++) {
line=in.readLine();
if(line.length()<=0) break;
nhr=line.mid(0,2).toInt();
nmin=line.mid(2,2).toInt();
double fsked=line.mid(4,9).toDouble();
QString msg=line.mid(27,-1);
int i1=msg.indexOf(" ");
int i2=i1 +1 + msg.mid(i1+1,-1).indexOf(" ");
QString call=msg.mid(i1+1,i2-i1);
QString w3=msg.mid(i2+1,-1);
m_EMECall[call].fsked=fsked;
m_EMECall[call].t=60*nhr + nmin;
m_EMECall[call].worked=false;
if(w3.contains(grid_regexp)) m_EMECall[call].grid4=w3;
}
f.close();
/*
if(m_ActiveStationsWidget != NULL) m_ActiveStationsWidget->erase();
if(m_ActiveStationsWidget!=NULL) m_ActiveStationsWidget->displayRecentStations(t);
QString t1;
if(!bReady) t1 = t1.asprintf(" %3d %+2.2d %4d %1d %2d %4d",az,snr,freq,itx,age,points);
*/
QMap<QString,EMECall>::iterator i;
QString t="";
QString t1;
for(i=m_EMECall.begin(); i!=m_EMECall.end(); i++) {
int age=60*nhr + nmin - (i->t);
if(age<0) age += 1440;
if(i->worked) {
t1=t1.asprintf("%5.1f %8s %4d\n",i->fsked,i.key().toLatin1().constData(),age);
} else {
t1=t1.asprintf("%5.1f * %8s %4d\n",i->fsked,i.key().toLatin1().constData(),age);
}
t+=t1;
}
qDebug() << "bb" << t;
if(m_ActiveStationsWidget != NULL) {
m_ActiveStationsWidget->erase();
m_ActiveStationsWidget->displayRecentStations(t);
}
}
}
// -------------------------- Code for FT8 DXpedition Mode ---------------------------
void MainWindow::hound_reply ()

View File

@ -373,6 +373,7 @@ private:
void setColorHighlighting();
void chkFT4();
bool elide_tx1_not_allowed () const;
void readWidebandDecodes();
QProcessEnvironment const& m_env;
NetworkAccessManager m_network_manager;
@ -701,6 +702,15 @@ private:
};
QMap<QString,ActiveCall> m_activeCall; //Key = callsign, value = grid4, az, points for ARRL_DIGI
struct EMECall
{
QString grid4;
double fsked;
qint32 t;
bool worked;
};
QMap<QString,EMECall> m_EMECall;
struct RecentCall
{
qint64 dialFreq;