Basically operational with save_qm called in the decoder thread. Needs testing!

This commit is contained in:
Joe Taylor 2024-01-15 15:47:57 -05:00
parent 4af9c58bb0
commit 2f46104140
5 changed files with 42 additions and 23 deletions

View File

@ -29,9 +29,9 @@ extern struct { //This is "common/datcom/..." in Fortran
int n60; //nsecs%60 int n60; //nsecs%60
int junk4; // int junk4; //
int nfsample; //Input sample rate int nfsample; //Input sample rate
int junk3; // int ndop58; //EME Self Doppler at t=58
int nBaseSubmode; //Base submode for Q65-60x (aka m_modeQ65) int nBaseSubmode; //Base submode for Q65-60x (aka m_modeQ65)
int ndop00; //EME Self Doppler int ndop00; //EME Self Doppler at t=0
int nsave; //0=None, 1=SaveDecoded, 2=SaveAll int nsave; //0=None, 1=SaveDecoded, 2=SaveAll
int max_drift; //Maximum Q65 drift: units symbol_rate/TxT int max_drift; //Maximum Q65 drift: units symbol_rate/TxT
int offset; //Offset in Hz int offset; //Offset in Hz
@ -70,9 +70,9 @@ extern struct { //This is "common/datcom/..." in Fortran
int n60; //nsecs%60 int n60; //nsecs%60
int junk4; // int junk4; //
int nfsample; //Input sample rate int nfsample; //Input sample rate
int junk3; // int ndop58; //EME Self Doppler at t=58
int nBaseSubmode; //Base submode for Q65-60x (aka m_modeQ65) int nBaseSubmode; //Base submode for Q65-60x (aka m_modeQ65)
int ndop00; //EME Self Doppler int ndop00; //EME Self Doppler at t=0
int nsave; //0=None, 1=SaveDecoded, 2=SaveAll int nsave; //0=None, 1=SaveDecoded, 2=SaveAll
int max_drift; //Maximum Q65 drift: units symbol_rate/TxT int max_drift; //Maximum Q65 drift: units symbol_rate/TxT
int offset; //Offset in Hz int offset; //Offset in Hz

View File

@ -15,7 +15,7 @@ subroutine decode0(dd,ss,savg)
nWTransmitting,result(50) nWTransmitting,result(50)
common/npar/fcenter,nutc,fselected,mousedf,mousefqso,nagain, & common/npar/fcenter,nutc,fselected,mousedf,mousefqso,nagain, &
ndepth,ndiskdat,ntx60,newdat,nfa,nfb,nfcal,nfshift, & ndepth,ndiskdat,ntx60,newdat,nfa,nfb,nfcal,nfshift, &
ntx30a,ntx30b,ntol,n60,nCFOM,nfsample,nxpol,nmode, & ntx30a,ntx30b,ntol,n60,nCFOM,nfsample,ndop58,nmode, &
ndop00,nsave,max_drift,offset,nhsym,mycall,mygrid, & ndop00,nsave,max_drift,offset,nhsym,mycall,mygrid, &
hiscall,hisgrid,datetime,junk1,junk2,bAlso30 hiscall,hisgrid,datetime,junk1,junk2,bAlso30
save save

View File

@ -1,4 +1,4 @@
subroutine q65c(fname,revision) subroutine q65c(fname0,revision0)
use timer_module, only: timer use timer_module, only: timer
use timer_impl, only: fini_timer !, limtrace use timer_impl, only: fini_timer !, limtrace
@ -12,9 +12,12 @@ subroutine q65c(fname,revision)
real*8 fcenter real*8 fcenter
real*4 pdb(4) real*4 pdb(4)
integer nparams0(NJUNK+3),nparams(NJUNK+3) integer nparams0(NJUNK+3),nparams(NJUNK+3)
integer values(8)
logical first logical first
logical*1 bAlso30 logical*1 bAlso30
character*(*) fname,revision character*(*) fname0,revision0
character*120 fname
character*22 revision
character*12 mycall,hiscall character*12 mycall,hiscall
character*6 mygrid,hisgrid character*6 mygrid,hisgrid
character*20 datetime character*20 datetime
@ -25,19 +28,26 @@ subroutine q65c(fname,revision)
!### REMEMBER that /npar/ is not updated until nparams=nparams0 is executed. ### !### REMEMBER that /npar/ is not updated until nparams=nparams0 is executed. ###
common/npar/fcenter,nutc,fselected,mousedf,mousefqso,nagain, & common/npar/fcenter,nutc,fselected,mousedf,mousefqso,nagain, &
ndepth,ndiskdat,ntx60,newdat,nn1,nn2,nfcal,nfshift, & ndepth,ndiskdat,ntx60,newdat,nn1,nn2,nfcal,nfshift, &
ntx30a,ntx30b,ntol,n60,nCFOM,nfsample,nxpol,nmode, & ntx30a,ntx30b,ntol,n60,nCFOM,nfsample,ndop58,nmode, &
ndop00,nsave,nn3,nn4,nhsym,mycall,mygrid,hiscall,hisgrid, & ndop00,nsave,nn3,nn4,nhsym,mycall,mygrid,hiscall,hisgrid, &
datetime,junk1,junk2,bAlso30 datetime,junk1,junk2,bAlso30
equivalence (nparams,fcenter) equivalence (nparams,fcenter)
data first/.true./ data first/.true./
save first save first
fname=fname0
revision=revision0
nparams=nparams0 !Copy parameters into common/npar/ nparams=nparams0 !Copy parameters into common/npar/
datetime(12:)='00 ' datetime(12:)='00 '
npatience=1 npatience=1
newdat=1 !Always on ?? newdat=1 !Always on ??
if(ndiskdat.eq.0) then
if(nhsym.eq.200 .and. n60.ne.30) go to 999
if(nhsym.eq.330 .and. n60.ne.49) go to 999
if(nhsym.eq.390 .and. n60.ne.58) go to 999
endif
if(ndiskdat.eq.1) then if(ndiskdat.eq.1) then
call chkstat(dd,nhsym,pdb) call chkstat(dd,nhsym,pdb)
if((abs(pdb(1)-pdb(2)).gt.3.0 .and. pdb(1).gt.1.0) .or. & if((abs(pdb(1)-pdb(2)).gt.3.0 .and. pdb(1).gt.1.0) .or. &
@ -48,9 +58,6 @@ subroutine q65c(fname,revision)
ntx30a=0 !Older 56s files have no Tx ntx30a=0 !Older 56s files have no Tx
ntx30b=0 !Older 56s files have no Tx ntx30b=0 !Older 56s files have no Tx
endif endif
! write(*,3001) nutc,nhsym,pdb,ntx30a,ntx30b
!3001 format(i4.4,i6,4f7.1,2i6)
endif endif
if(ntx30a.gt.5) then if(ntx30a.gt.5) then
@ -72,10 +79,21 @@ subroutine q65c(fname,revision)
call decode0(dd,ss,savg) call decode0(dd,ss,savg)
call timer('decode0 ',1) call timer('decode0 ',1)
write(*,3001) n60,datetime(1:11),nutc,newdat,nsave,ntx30a,ntx30b,ndecodes call date_and_time(VALUES=values)
3001 format('A',i3,1x,a11,i6.4,5i5) n60b=values(7)
nd=n60b-n60
if(nd.lt.0) nd=nd+60
write(*,3002) nutc,nagain,nhsym,n60,n60b,nd,ntx30a,ntx30b,ndecodes,revision
3002 format('A',i5.4,8i5,2x,a22)
return if(nsave.eq.2 .or. (nsave.eq.1 .and. ndecodes.ge.1)) then
call timer('save_qm ',0)
call save_qm(fname,revision,mycall,mygrid,dd,ntx30a,ntx30b,fcenter, &
nutc,ndop00,ndop58)
call timer('save_qm ',1)
endif
999 return
end subroutine q65c end subroutine q65c
subroutine all_done subroutine all_done

View File

@ -1,9 +1,11 @@
subroutine save_qm(fname,prog_id,mycall,mygrid,dd,ntx30a,ntx30b,fcenter, & subroutine save_qm(fname,revision,mycall,mygrid,dd,ntx30a,ntx30b,fcenter, &
nutc,ndop00,ndop58) nutc,ndop00,ndop58)
parameter(NMAX=60*96000) parameter(NMAX=60*96000)
character*(*) fname,prog_id,mycall,mygrid character*120 fname
character prog_id_24*24,mycall_12*12,mygrid_6*6 character*22 revision
character*12 mycall
character*6 mygrid
real*4 dd(2,NMAX) real*4 dd(2,NMAX)
real*8 fcenter real*8 fcenter
integer nxtra(15) !For possible future additions integer nxtra(15) !For possible future additions
@ -49,11 +51,8 @@ subroutine save_qm(fname,prog_id,mycall,mygrid,dd,ntx30a,ntx30b,fcenter, &
if(ib.eq.30*96000) id1(1:2,ib+1:60*96000)=0 if(ib.eq.30*96000) id1(1:2,ib+1:60*96000)=0
open(29,file=trim(fname),status='unknown',access='stream') open(29,file=trim(fname),status='unknown',access='stream')
prog_id_24=prog_id//" "
mycall_12=mycall
mygrid_6=mygrid
nxtra=0 nxtra=0
write(29) prog_id_24,mycall_12,mygrid_6,fcenter,nutc,ntx30a,ntx30b, & write(29) revision//' ',mycall_12,mygrid_6,fcenter,nutc,ntx30a,ntx30b, &
ndop00,ndop58,ia,ib,fac0,nxtra !Write header to disk ndop00,ndop58,ia,ib,fac0,nxtra !Write header to disk
write(29) id1(1:2,ia:ib) !Write 8-bit data to disk write(29) id1(1:2,ia:ib) !Write 8-bit data to disk
close(29) close(29)

View File

@ -900,6 +900,8 @@ void MainWindow::decode() //decode()
datcom_.junk1=1234; //Check for these values in m65 datcom_.junk1=1234; //Check for these values in m65
datcom_.junk2=5678; datcom_.junk2=5678;
datcom_.bAlso30=m_bAlso30; datcom_.bAlso30=m_bAlso30;
datcom_.ndop00=m_dop00;
datcom_.ndop58=m_dop58;
char *to = (char*) datcom2_.d4; char *to = (char*) datcom2_.d4;
char *from = (char*) datcom_.d4; char *from = (char*) datcom_.d4;