From 8eb12e7dbd8a5e1d7c9bec3354c1c69725eac78c Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 26 Nov 2018 15:40:38 +0000 Subject: [PATCH 001/367] Develop branch version as v2.0.1-devel --- Versions.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Versions.cmake b/Versions.cmake index 3ba5db895..b90379924 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -1,6 +1,6 @@ # Version number components set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 0) -set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 5) # release candidate number, comment out or zero for development versions +set (WSJTX_VERSION_PATCH 1) +set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From 72fef7aa30d0c64fbcf42280775e3a1aa0bbef29 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 10 Dec 2018 00:47:31 +0000 Subject: [PATCH 002/367] Re-enable GA warning --- widgets/mainwindow.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 42dac2f5a..e3bd5e052 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -946,10 +946,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, splashTimer.setSingleShot (true); splashTimer.start (20 * 1000); - //if(QCoreApplication::applicationVersion().contains("-devel") or - // QCoreApplication::applicationVersion().contains("-rc")) { + if(QCoreApplication::applicationVersion().contains("-devel") or + QCoreApplication::applicationVersion().contains("-rc")) { QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); - //} + } if(!ui->cbMenus->isChecked()) { ui->cbMenus->setChecked(true); From e0658f183f04d818e7f3d5278247a2ce30cd04cb Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 10 Jan 2019 10:20:31 -0600 Subject: [PATCH 003/367] Add simulator (ft2sim.f90) and decoder (ft2d.f90) for experimental medium-fast mode. --- CMakeLists.txt | 9 ++ lib/fsk4hf/ft2_params.f90 | 12 ++ lib/fsk4hf/ft2d.f90 | 325 ++++++++++++++++++++++++++++++++++++++ lib/fsk4hf/ft2sim.f90 | 139 ++++++++++++++++ lib/fsk4hf/genft2.f90 | 124 +++++++++++++++ lib/fsk4hf/mskhfsim.f90 | 194 ----------------------- lib/fsk4hf/spb.m | 6 +- lib/fsk4hf/spb_128_90.dat | 19 +++ 8 files changed, 631 insertions(+), 197 deletions(-) create mode 100644 lib/fsk4hf/ft2_params.f90 create mode 100644 lib/fsk4hf/ft2d.f90 create mode 100644 lib/fsk4hf/ft2sim.f90 create mode 100644 lib/fsk4hf/genft2.f90 delete mode 100644 lib/fsk4hf/mskhfsim.f90 create mode 100644 lib/fsk4hf/spb_128_90.dat diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e7e816bc..4a5b5c341 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -459,6 +459,7 @@ set (wsjt_FSRCS lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 + lib/fsk4hf/genft2.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 lib/genwspr.f90 @@ -503,6 +504,8 @@ set (wsjt_FSRCS lib/msk144signalquality.f90 lib/msk144sim.f90 lib/mskrtd.f90 + lib/fsk4hf/ft2sim.f90 + lib/fsk4hf/ft2d.f90 lib/77bit/my_hash.f90 lib/wsprd/osdwspr.f90 lib/ft8/osd174_91.f90 @@ -1247,6 +1250,12 @@ target_link_libraries (ft8sim wsjt_fort wsjt_cxx) add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc) target_link_libraries (msk144sim wsjt_fort wsjt_cxx) +add_executable (ft2sim lib/fsk4hf/ft2sim.f90 wsjtx.rc) +target_link_libraries (ft2sim wsjt_fort wsjt_cxx) + +add_executable (ft2d lib/fsk4hf/ft2d.f90 wsjtx.rc) +target_link_libraries (ft2d wsjt_fort wsjt_cxx) + endif(WSJT_BUILD_UTILS) # build the main application diff --git a/lib/fsk4hf/ft2_params.f90 b/lib/fsk4hf/ft2_params.f90 new file mode 100644 index 000000000..027d72bd8 --- /dev/null +++ b/lib/fsk4hf/ft2_params.f90 @@ -0,0 +1,12 @@ +! LDPC (128,90) code +parameter (KK=90) !Information bits (77 + CRC13) +parameter (ND=128) !Data symbols +parameter (NS=16) !Sync symbols (2x8) +parameter (NN=NS+ND) !Total channel symbols (144) +parameter (NSPS=160) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Samples in full 1.92 s waveform (23040) +parameter (NMAX=3*12000) !Samples in iwave (36,000) +parameter (NFFT1=2*NSPS, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NDOWN=10) !Downsample factor diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 new file mode 100644 index 000000000..14e63c687 --- /dev/null +++ b/lib/fsk4hf/ft2d.f90 @@ -0,0 +1,325 @@ +program ft2d + + use crc + use packjt77 + include 'ft2_params.f90' + character arg*8,message*37,c77*77,infile*80,fname*16,datetime*11 + character*37 decodes(100) + character*120 data_dir + character*90 dmsg + complex c2(0:3*1200-1) !Complex waveform + complex cd(0:144*10-1) !Complex waveform + complex c1(0:9),c0(0:9) + complex ccor(0:1,144) + complex csum,cterm,cc0,cc1 + real*8 fMHz + + real rxdata(128),llr(128) !Soft symbols + real llr2(128) + real sbits(144),sbits1(144),sbits3(144) + real ps(0:8191),psbest(0:8191) + real candidates(100,2) + integer ihdr(11) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),apmask(128),cw(128) + integer*1 hbits(144),hbits1(144),hbits3(144) + logical unpk77_success + + fs=12000.0/NDOWN !Sample rate + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + baud=1.0/tt !Keying rate for "itone" symbols (baud) + txt=NZ*dt !Transmission length (s) + twopi=8.0*atan(1.0) + h=0.8 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + + dphi=twopi/2*baud*h*dt*16 ! dt*16 is samp interval after downsample + dphi0=-1*dphi + dphi1=+1*dphi + phi0=0.0 + phi1=0.0 + do i=0,9 + c1(i)=cmplx(cos(phi1),sin(phi1)) + c0(i)=cmplx(cos(phi0),sin(phi0)) + phi1=mod(phi1+dphi1,twopi) + phi0=mod(phi0+dphi0,twopi) + enddo + the=twopi*h/2.0 + cc1=cmplx(cos(the),-sin(the)) + cc0=cmplx(cos(the),sin(the)) + nargs=iargc() + if(nargs.lt.1) then + print*,'Usage: ft2d [-a ] [-f fMHz] [-c ncoh] file1 [file2 ...]' + go to 999 + endif + iarg=1 + data_dir="." + call getarg(iarg,arg) + if(arg(1:2).eq.'-a') then + call getarg(iarg+1,data_dir) + iarg=iarg+2 + endif + call getarg(iarg,arg) + if(arg(1:2).eq.'-f') then + call getarg(iarg+1,arg) + read(arg,*) fMHz + iarg=iarg+2 + endif + ncoh=1 + npdi=16 + if(arg(1:2).eq.'-c') then + call getarg(iarg+1,arg) + read(arg,*) ncoh + iarg=iarg+2 + npdi=16/ncoh + endif +! write(*,*) 'ncoh: ',ncoh,' npdi: ',npdi + + xs1=0.0 + xs2=0.0 + fr1=0.0 + fr2=0.0 + nav=0 + ngood=0 + + do ifile=iarg,nargs + call getarg(ifile,infile) + j2=index(infile,'.wav') + open(10,file=infile,status='old',access='stream') + read(10,end=999) ihdr,iwave + read(infile(j2-4:j2-1),*) nutc + datetime=infile(j2-11:j2-1) + close(10) + + ndecodes=0 + ncand=1 + do icand=1,ncand + fc0=1500.0 + xsnr=1.0 + istart=6000+8 + call ft2_downsample(iwave,c2) ! downsample from 160s/Symbol to 10s/Symbol + + ib=istart/16 + cd=c2(ib:ib+144*10-1) + s2=sum(cd*conjg(cd))/(10*144) + cd=cd/sqrt(s2) + do nseq=1,7 + if( nseq.eq.1 ) then ! noncoherent single-symbol detection + sbits1=0.0 + do ibit=1,144 + ib=(ibit-1)*10 + ccor(1,ibit)=sum(cd(ib:ib+9)*conjg(c1(0:9))) + ccor(0,ibit)=sum(cd(ib:ib+9)*conjg(c0(0:9))) + sbits1(ibit)=abs(ccor(1,ibit))-abs(ccor(0,ibit)) + hbits1(ibit)=0 + if(sbits1(ibit).gt.0) hbits1(ibit)=1 + enddo + sbits=sbits1 + hbits=hbits1 + sbits3=sbits1 + hbits3=hbits1 + elseif( nseq.ge.2 ) then + nbit=2*nseq-1 + numseq=2**(nbit) + ps=0 + do ibit=nbit/2+1,144-nbit/2 + ps=0.0 + pmax=0.0 + do iseq=0,numseq-1 + csum=0.0 + cterm=1.0 + k=1 + do i=nbit-1,0,-1 + ibb=iand(iseq/(2**i),1) + csum=csum+ccor(ibb,ibit-(nbit/2+1)+k)*cterm + if(ibb.eq.0) cterm=cterm*cc0 + if(ibb.eq.1) cterm=cterm*cc1 + k=k+1 + enddo + ps(iseq)=abs(csum) + if( ps(iseq) .gt. pmax ) then + pmax=ps(iseq) + ibflag=1 + endif + enddo + if( ibflag .eq. 1 ) then + psbest=ps + ibflag=0 + endif + call getbitmetric(2**(nbit/2),psbest,numseq,sbits3(ibit)) + hbits3(ibit)=0 + if(sbits3(ibit).gt.0) hbits3(ibit)=1 + enddo + sbits=sbits3 + hbits=hbits3 + endif + rxdata(1:48)=sbits(9:56) + rxdata(49:128)=sbits(65:144) + rxav=sum(rxdata(1:128))/128.0 + rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 + rxsig=sqrt(rx2av-rxav*rxav) + rxdata=rxdata/rxsig + sigma=0.90 + llr(1:128)=2*rxdata/(sigma*sigma) + apmask=0 + max_iterations=40 + ifer=0 + do ibias=0,0 + llr2=llr + if(ibias.eq.1) llr2=llr+0.4 + if(ibias.eq.2) llr2=llr-0.4 + call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + if(nharderror.ge.0) exit + enddo + nhardmin=-1 + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,message,unpk77_success) + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) goto 888 + ndecodes=ndecodes+1 + decodes(ndecodes)=message + nsnr=nint(xsnr) + freq=fMHz + 1.d-6*(fc1+fbest) +1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) + write(*,1212) datetime(8:11),nsnr,xdt,freq,message,'*',idf,nseq,ijitter,nharderror,nhardmin +1212 format(a4,i4,f5.1,f11.6,2x,a22,a1,i5,i5,i5,i5,i5) + goto 888 + endif + enddo ! nseq +888 continue + enddo !candidate list + enddo !files + + write(*,1120) +1120 format("") + +999 end program ft2d + +subroutine getbitmetric(ib,ps,ns,xmet) + real ps(0:ns-1) + xm1=0 + xm0=0 + do i=0,ns-1 + if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) + if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) + enddo + xmet=xm1-xm0 + return +end subroutine getbitmetric + +subroutine downsample2(ci,f0,co) + parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 + complex ci(0:NI-1),ct(0:NI-1) + complex co(0:NO-1) + fs=12000.0 + df=fs/NI + ct=ci + call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain + i0=nint(f0/df) + ct=cshift(ct,i0) + co=0.0 + co(0)=ct(0) + b=8.0 + do i=1,NO/2 + arg=(i*df/b)**2 + filt=exp(-arg) + co(i)=ct(i)*filt + co(NO-i)=ct(NI-i)*filt + enddo + co=co/NO + call four2a(co,NO,1,1,1) !c2c FFT back to time domain + return +end subroutine downsample2 + +subroutine getcandidate2(c,npts,fs,fa,fb,ncand,candidates) + parameter(NDAT=200,NFFT1=120*12000/32,NH1=NFFT1/2,NFFT2=120*12000/320,NH2=NFFT2/2) + complex c(0:npts-1) !Complex waveform + complex cc(0:NFFT1-1) + complex csfil(0:NFFT2-1) + complex cwork(0:NFFT2-1) + real bigspec(0:NFFT2-1) + complex c2(0:NFFT1-1) !Short spectra + real s(-NH1+1:NH1) !Coarse spectrum + real ss(-NH1+1:NH1) !Smoothed coarse spectrum + real candidates(100,2) + integer indx(NFFT2-1) + logical first + data first/.true./ + save first,w,df,csfil + + if(first) then + df=10*fs/NFFT1 + csfil=cmplx(0.0,0.0) + do i=0,NFFT2-1 + csfil(i)=exp(-((i-NH2)/20.0)**2) + enddo + csfil=cshift(csfil,NH2) + call four2a(csfil,NFFT2,1,-1,1) + first=.false. + endif + + cc=cmplx(0.0,0.0) + cc(0:npts-1)=c; + call four2a(cc,NFFT1,1,-1,1) + cc=abs(cc)**2 + call four2a(cc,NFFT1,1,-1,1) + cwork(0:NH2)=cc(0:NH2)*conjg(csfil(0:NH2)) + cwork(NH2+1:NFFT2-1)=cc(NFFT1-NH2+1:NFFT1-1)*conjg(csfil(NH2+1:NFFT2-1)) + + call four2a(cwork,NFFT2,1,+1,1) + bigspec=cshift(real(cwork),-NH2) + il=NH2+fa/df + ih=NH2+fb/df + nnl=ih-il+1 + call indexx(bigspec(il:il+nnl-1),nnl,indx) + xn=bigspec(il-1+indx(nint(0.3*nnl))) + bigspec=bigspec/xn + ncand=0 + do i=il,ih + if((bigspec(i).gt.bigspec(i-1)).and. & + (bigspec(i).gt.bigspec(i+1)).and. & + (bigspec(i).gt.1.15).and.ncand.lt.100) then + ncand=ncand+1 + candidates(ncand,1)=df*(i-NH2) + candidates(ncand,2)=10*log10(bigspec(i))-30.0 + endif + enddo +! do i=1,ncand +! write(*,*) i,candidates(i,1),candidates(i,2) +! enddo + return +end subroutine getcandidate2 + +subroutine ft2_downsample(iwave,c) + +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 1200 Hz + + include 'ft2_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/16-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX) + equivalence (x,cx) + + df=12000.0/NMAX + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + i0=nint(1500.0/df) + c1(0)=cx(i0) + do i=1,NFFT2/2 + c1(i)=cx(i0+i) + c1(NFFT2-i)=cx(i0-i) + enddo + c1=c1/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/16-1) + return +end subroutine ft2_downsample + diff --git a/lib/fsk4hf/ft2sim.f90 b/lib/fsk4hf/ft2sim.f90 new file mode 100644 index 000000000..565b57474 --- /dev/null +++ b/lib/fsk4hf/ft2sim.f90 @@ -0,0 +1,139 @@ +program ft2sim + +! Generate simulated signals for experimental "FT2" mode + + use wavhdr + use packjt77 + include 'ft2_params.f90' !Set various constants + parameter (NWAVE=NN*NSPS) + type(hdr) h !Header for .wav file + character arg*12,fname*17 + character msg37*37,msgsent37*37 + character c77*77 + complex c0(0:NMAX-1) + complex c(0:NMAX-1) + real wave(NMAX) + integer itone(NN) + integer*1 msgbits(77) + integer*2 iwave(NMAX) !Generated full-length waveform + +! Get command-line argument(s) + nargs=iargc() + if(nargs.ne.8) then + print*,'Usage: ft2sim "message" f0 DT fdop del width nfiles snr' + print*,'Examples: ft2sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18' + print*,' ft2sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 0 10 -18' + print*,' ft2sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 25 1 -10' + go to 999 + endif + call getarg(1,msg37) !Message to be transmitted + call getarg(2,arg) + read(arg,*) f0 !Frequency (only used for single-signal) + call getarg(3,arg) + read(arg,*) xdt !Time offset from nominal (s) + call getarg(4,arg) + read(arg,*) fspread !Watterson frequency spread (Hz) + call getarg(5,arg) + read(arg,*) delay !Watterson delay (ms) + call getarg(6,arg) + read(arg,*) width !Filter transition width (Hz) + call getarg(7,arg) + read(arg,*) nfiles !Number of files + call getarg(8,arg) + read(arg,*) snrdb !SNR_2500 + + nsig=1 + if(f0.lt.100.0) then + nsig=f0 + f0=1500 + endif + + nfiles=abs(nfiles) + twopi=8.0*atan(1.0) + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + hmod=0.8 !Modulation index (0.5 is MSK, 1.0 is FSK) + tt=NSPS*dt !Duration of symbols (s) + baud=1.0/tt !Keying rate (baud) + bw=1.5*baud !Occupied bandwidth (Hz) + txt=NZ*dt !Transmission length (s) + bandwidth_ratio=2500.0/(fs/2.0) + sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) + if(snrdb.gt.90.0) sig=1.0 + txt=NN*NSPS/12000.0 + + ! Source-encode, then get itone() + i3=-1 + n3=-1 + call pack77(msg37,i3,n3,c77) + read(c77,'(77i1)') msgbits + call genft2(msg37,0,msgsent37,itone,itype) + write(*,*) + write(*,'(a9,a37,3x,a7,i1,a1,i1)') 'Message: ',msgsent37,'i3.n3: ',i3,'.',n3 + write(*,1000) f0,xdt,txt,snrdb,bw +1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, & + ' BW:',f5.1) + write(*,*) + if(i3.eq.1) then + write(*,*) ' mycall hiscall hisgrid' + write(*,'(28i1,1x,i1,1x,28i1,1x,i1,1x,i1,1x,15i1,1x,3i1)') msgbits(1:77) + else + write(*,'(a14)') 'Message bits: ' + write(*,'(77i1)') msgbits + endif + write(*,*) + write(*,'(a17)') 'Channel symbols: ' + write(*,'(79i1)') itone + write(*,*) + + call sgran() + + do ifile=1,nfiles + k=nint((xdt+0.5)/dt) + ia=k + phi=0.0 + c0=0.0 + do j=1,NN !Generate complex waveform + dphi=twopi*(f0*dt+(hmod/2.0)*(2*itone(j)-1)/real(NSPS)) + do i=1,NSPS + if(k.ge.0 .and. k.lt.NMAX) c0(k)=cmplx(cos(phi),sin(phi)) + k=k+1 + phi=mod(phi+dphi,twopi) + enddo + enddo + if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,NWAVE,fs,delay,fspread) + c=sig*c0 + + ib=k + wave=real(c) + peak=maxval(abs(wave(ia:ib))) + nslots=1 + if(width.gt.0.0) call filt8(f0,nslots,width,wave) + + if(snrdb.lt.90) then + do i=1,NMAX !Add gaussian noise at specified SNR + xnoise=gran() + wave(i)=wave(i) + xnoise + enddo + endif + + gain=100.0 + if(snrdb.lt.90.0) then + wave=gain*wave + else + datpk=maxval(abs(wave)) + fac=32766.9/datpk + wave=fac*wave + endif + if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." + iwave=nint(wave) + h=default_header(12000,NMAX) + write(fname,1102) ifile +1102 format('000000_',i6.6,'.wav') + open(10,file=fname,status='unknown',access='stream') + write(10) h,iwave !Save to *.wav file + close(10) + write(*,1110) ifile,xdt,f0,snrdb,fname +1110 format(i4,f7.2,f8.2,f7.1,2x,a17) + enddo +999 end program ft2sim diff --git a/lib/fsk4hf/genft2.f90 b/lib/fsk4hf/genft2.f90 new file mode 100644 index 000000000..d6d874e99 --- /dev/null +++ b/lib/fsk4hf/genft2.f90 @@ -0,0 +1,124 @@ +subroutine genft2(msg0,ichk,msgsent,i4tone,itype) +! s8 + 48bits + s8 + 80 bits = 144 bits (72ms message duration) +! +! Encode an MSK144 message +! Input: +! - msg0 requested message to be transmitted +! - ichk if ichk=1, return only msgsent +! if ichk.ge.10000, set imsg=ichk-10000 for short msg +! - msgsent message as it will be decoded +! - i4tone array of audio tone values, 0 or 1 +! - itype message type +! 1 = standard message "Call_1 Call_2 Grid/Rpt" +! 2 = type 1 prefix +! 3 = type 1 suffix +! 4 = type 2 prefix +! 5 = type 2 suffix +! 6 = free text (up to 13 characters) +! 7 = short message " Rpt" + + use iso_c_binding, only: c_loc,c_size_t + use packjt77 + character*37 msg0 + character*37 message !Message to be generated + character*37 msgsent !Message as it will be received + character*77 c77 + integer*4 i4tone(144) + integer*1 codeword(128) + integer*1 msgbits(77) + integer*1 bitseq(144) !Tone #s, data and sync (values 0-1) + integer*1 s8(8) + real*8 pp(12) + real*8 xi(864),xq(864),pi,twopi + data s8/0,1,1,1,0,0,1,0/ + equivalence (ihash,i1hash) + logical first,unpk77_success + data first/.true./ + save + + if(first) then + first=.false. + nsym=128 + pi=4.0*atan(1.0) + twopi=8.*atan(1.0) + do i=1,12 + pp(i)=sin((i-1)*pi/12) + enddo + endif + + message(1:37)=' ' + itype=1 + if(msg0(1:1).eq.'@') then !Generate a fixed tone + read(msg0(2:5),*,end=1,err=1) nfreq !at specified frequency + go to 2 +1 nfreq=1000 +2 i4tone(1)=nfreq + else + message=msg0 + + do i=1, 37 + if(ichar(message(i:i)).eq.0) then + message(i:37)=' ' + exit + endif + enddo + do i=1,37 !Strip leading blanks + if(message(1:1).ne.' ') exit + message=message(i+1:) + enddo + + if(message(1:1).eq.'<') then + i2=index(message,'>') + i1=0 + if(i2.gt.0) i1=index(message(1:i2),' ') + if(i1.gt.0) then + call genmsk40(message,msgsent,ichk,i4tone,itype) + if(itype.lt.0) go to 999 + i4tone(41)=-40 + go to 999 + endif + endif + + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,msgsent,unpk77_success) !Unpack to get msgsent + + if(ichk.eq.1) go to 999 + read(c77,"(77i1)") msgbits + call encode_128_90(msgbits,codeword) + +!Create 144-bit channel vector: +!8-bit sync word + 48 bits + 8-bit sync word + 80 bits + bitseq=0 + bitseq(1:8)=s8 + bitseq(9:56)=codeword(1:48) + bitseq(57:64)=s8 + bitseq(65:144)=codeword(49:128) + + i4tone=bitseq + +! bitseq=2*bitseq-1 +! xq(1:6)=bitseq(1)*pp(7:12) !first bit is mapped to 1st half-symbol on q +! do i=1,71 +! is=(i-1)*12+7 +! xq(is:is+11)=bitseq(2*i+1)*pp +! enddo +! xq(864-5:864)=bitseq(1)*pp(1:6) !last half symbol +! do i=1,72 +! is=(i-1)*12+1 +! xi(is:is+11)=bitseq(2*i)*pp +! enddo +! Map I and Q to tones. +! i4tone=0 +! do i=1,72 +! i4tone(2*i-1)=(bitseq(2*i)*bitseq(2*i-1)+1)/2; +! i4tone(2*i)=-(bitseq(2*i)*bitseq(mod(2*i,144)+1)-1)/2; +! enddo + endif + +! Flip polarity +! i4tone=-i4tone+1 + +999 return +end subroutine genft2 diff --git a/lib/fsk4hf/mskhfsim.f90 b/lib/fsk4hf/mskhfsim.f90 deleted file mode 100644 index 86140e1ce..000000000 --- a/lib/fsk4hf/mskhfsim.f90 +++ /dev/null @@ -1,194 +0,0 @@ -program msksim - -! Simulate characteristics of a potential "MSK10" mode using LDPC (168,84) -! code, OQPDK modulation, and 30 s T/R sequences. - -! Reception and Demodulation algorithm: -! 1. Compute coarse spectrum; find fc1 = approx carrier freq -! 2. Mix from fc1 to 0; LPF at +/- 0.75*R -! 3. Square, FFT; find peaks near -R/2 and +R/2 to get fc2 -! 4. Mix from fc2 to 0 -! 5. Fit cb13 (central part of csync) to c -> lag, phase -! 6. Fit complex ploynomial for channel equalization -! 7. Get soft bits from equalized data - - parameter (KK=84) !Information bits (72 + CRC12) - parameter (ND=168) !Data symbols: LDPC (168,84), r=1/2 - parameter (NS=65) !Sync symbols (2 x 26 + Barker 13) - parameter (NR=3) !Ramp up/down - parameter (NN=NR+NS+ND) !Total symbols (236) - parameter (NSPS=1152/72) !Samples per MSK symbol (16) - parameter (N2=2*NSPS) !Samples per OQPSK symbol (32) - parameter (N13=13*N2) !Samples in central sync vector (416) - parameter (NZ=NSPS*NN) !Samples in baseband waveform (3776) - parameter (NFFT1=4*NSPS,NH1=NFFT1/2) - - character*8 arg - complex cbb(0:NZ-1) !Complex baseband waveform - complex csync(0:NZ-1) !Sync symbols only, from cbb - complex cb13(0:N13-1) !Barker 13 waveform - complex c(0:NZ-1) !Complex waveform - complex c0(0:NZ-1) !Complex waveform - complex zz(NS+ND) !Complex symbol values (intermediate) - complex z - real xnoise(0:NZ-1) !Generated random noise - real ynoise(0:NZ-1) !Generated random noise - real rxdata(ND),llr(ND) !Soft symbols - real pp(2*NSPS) !Shaped pulse for OQPSK - real a(5) !For twkfreq1 - real aa(20),bb(20) !Fitted polyco's - integer id(NS+ND) !NRZ values (+/-1) for Sync and Data - integer ierror(NS+ND) - integer icw(NN) - integer*1 msgbits(KK),decoded(KK),apmask(ND),cw(ND) -! integer*1 codeword(ND) - data msgbits/0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1, & - 1,1,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1, & - 1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0/ - - nargs=iargc() - if(nargs.ne.6) then - print*,'Usage: mskhfsim f0(Hz) delay(ms) fspread(Hz) maxn iters snr(dB)' - print*,'Example: mskhfsim 0 0 0 5 10 -20' - print*,'Set snr=0 to cycle through a range' - go to 999 - endif - call getarg(1,arg) - read(arg,*) f0 !Generated carrier frequency - call getarg(2,arg) - read(arg,*) delay !Delta_t (ms) for Watterson model - call getarg(3,arg) - read(arg,*) fspread !Fspread (Hz) for Watterson model - call getarg(4,arg) - read(arg,*) maxn !Max nterms for polyfit - call getarg(5,arg) - read(arg,*) iters !Iterations at each SNR - call getarg(6,arg) - read(arg,*) snrdb !Specified SNR_2500 - - twopi=8.0*atan(1.0) - fs=12000.0/72.0 !Sample rate = 166.6666667 Hz - dt=1.0/fs !Sample interval (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - ts=2*NSPS*dt !Duration of OQPSK symbols (s) - baud=1.0/tt !Keying rate for "itone" symbols (baud) - txt=NZ*dt !Transmission length (s) - bandwidth_ratio=2500.0/(fs/2.0) - write(*,1000) f0,delay,fspread,maxn,iters,baud,3*baud,txt -1000 format('f0:',f5.1,' Delay:',f4.1,' fSpread:',f5.2,' maxn:',i3, & - ' Iters:',i6/'Baud:',f7.3,' BW:',f5.1,' TxT:',f5.1,f5.2/) - write(*,1004) -1004 format(/' SNR err ber fer fsigma'/37('-')) - - do i=1,N2 !Half-sine pulse shape - pp(i)=sin(0.5*(i-1)*twopi/(2*NSPS)) - enddo - - call genmskhf(msgbits,id,icw,cbb,csync)!Generate baseband waveform and csync - cb13=csync(1680:2095) !Copy the Barker 13 waveform - a=0. - a(1)=f0 - call twkfreq1(cbb,NZ,fs,a,cbb) !Mix to specified frequency - - isna=-10 - isnb=-30 - if(snrdb.ne.0.0) then - isna=nint(snrdb) - isnb=isna - endif - do isnr=isna,isnb,-1 !Loop over SNR range - snrdb=isnr - sig=sqrt(bandwidth_ratio) * 10.0**(0.05*snrdb) - if(snrdb.gt.90.0) sig=1.0 - nhard=0 - nhardsync=0 - nfe=0 - sqf=0. - do iter=1,iters !Loop over requested iterations - c=cbb - if(delay.ne.0.0 .or. fspread.ne.0.0) then - call watterson(c,NZ,fs,delay,fspread) - endif - c=sig*c !Scale to requested SNR - if(snrdb.lt.90) then - do i=0,NZ-1 !Generate gaussian noise - xnoise(i)=gran() - ynoise(i)=gran() - enddo - c=c + cmplx(xnoise,ynoise) !Add AWGN noise - endif - - call getfc1(c,fc1) !First approx for freq - call getfc2(c,csync,fc1,fc2,fc3) !Refined freq - sqf=sqf + (fc1+fc2-f0)**2 - -!NB: Measured performance is about equally good using fc2 or fc3 here: - a(1)=-(fc1+fc2) - a(2:5)=0. - call twkfreq1(c,NZ,fs,a,c) !Mix c down by fc1+fc2 - -! The following may not be necessary? -! z=sum(c(1680:2095)*cb13)/208.0 !Get phase from Barker 13 vector -! z0=z/abs(z) -! c=c*conjg(z0) - -!---------------------------------------------------------------- DT -! Not presently used: - amax=0. - jpk=0 - do j=-20*NSPS,20*NSPS !Get jpk - z=sum(c(1680+j:2095+j)*cb13)/208.0 - if(abs(z).gt.amax) then - amax=abs(z) - jpk=j - endif - enddo - xdt=jpk/fs - - nterms=maxn - c0=c - do itry=1,10 - idf=itry/2 - if(mod(itry,2).eq.0) idf=-idf - nhard0=0 - nhardsync0=0 - ifer=1 - a(1)=idf*0.01 - a(2:5)=0. - call twkfreq1(c0,NZ,fs,a,c) !Mix c0 into c - call cpolyfit(c,pp,id,maxn,aa,bb,zz,nhs) - call msksoftsym(zz,aa,bb,id,nterms,ierror,rxdata,nhard0,nhardsync0) - if(nhardsync0.gt.12) cycle - rxav=sum(rxdata)/ND - rx2av=sum(rxdata*rxdata)/ND - rxsig=sqrt(rx2av-rxav*rxav) - rxdata=rxdata/rxsig - ss=0.84 - llr=2.0*rxdata/(ss*ss) - apmask=0 - max_iterations=40 - ifer=0 - call bpdecode168(llr,apmask,max_iterations,decoded,niterations,cw) - nbadcrc=0 - if(niterations.ge.0) call chkcrc12(decoded,nbadcrc) - if(niterations.lt.0 .or. count(msgbits.ne.decoded).gt.0 .or. & - nbadcrc.ne.0) ifer=1 -! if(ifer.eq.0) write(67,1301) snrdb,itry,idf,niterations, & -! nhardsync0,nhard0 -!1301 format(f6.1,5i6) - if(ifer.eq.0) exit - enddo !Freq dither loop - nhard=nhard+nhard0 - nhardsync=nharsdync+nhardsync0 - nfe=nfe+ifer - enddo - - fsigma=sqrt(sqf/iters) - ber=float(nhard)/((NS+ND)*iters) - fer=float(nfe)/iters - write(*,1050) snrdb,nhard,ber,fer,fsigma -! write(60,1050) snrdb,nhard,ber,fer,fsigma -1050 format(f6.1,i7,f8.4,f7.3,f8.2) - enddo - -999 end program msksim diff --git a/lib/fsk4hf/spb.m b/lib/fsk4hf/spb.m index ed1761925..9bb164506 100644 --- a/lib/fsk4hf/spb.m +++ b/lib/fsk4hf/spb.m @@ -70,14 +70,14 @@ endfunction # M-ary PSK Block Coded Modulation," Igal Sason and Gil Weichman, # doi: 10.1109/EEEI.2006.321097 #------------------------------------------------------------------------------- -N=174 -K=75 +N=128 +K=90 R=K/N delta=0.01; [ths,fval,info,output]=fzero(@f1,[delta,pi/2-delta], optimset ("jacobian", "off")); -for ebnodb=-6:0.5:4 +for ebnodb=-3:0.5:4 ebno=10^(ebnodb/10.0); esno=ebno*R; A=sqrt(2*esno); diff --git a/lib/fsk4hf/spb_128_90.dat b/lib/fsk4hf/spb_128_90.dat new file mode 100644 index 000000000..9e32e28e9 --- /dev/null +++ b/lib/fsk4hf/spb_128_90.dat @@ -0,0 +1,19 @@ +N = 128 +K = 90 +R = 0.70312 +-3.000000 0.000341 +-2.500000 0.001513 +-2.000000 0.006049 +-1.500000 0.021280 +-1.000000 0.064283 +-0.500000 0.162755 +0.000000 0.338430 +0.500000 0.571867 +1.000000 0.791634 +1.500000 0.930284 +2.000000 0.985385 +2.500000 0.998258 +3.000000 0.999893 +3.500000 0.999997 +4.000000 1.000000 + From f63f0301eb9459421cab07ed08ac22dca4c3fc86 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 10 Jan 2019 10:35:09 -0600 Subject: [PATCH 004/367] Tweak some decoder parameters for better performance. --- lib/fsk4hf/ft2d.f90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index 14e63c687..be43b7760 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -103,7 +103,7 @@ program ft2d cd=c2(ib:ib+144*10-1) s2=sum(cd*conjg(cd))/(10*144) cd=cd/sqrt(s2) - do nseq=1,7 + do nseq=1,4 if( nseq.eq.1 ) then ! noncoherent single-symbol detection sbits1=0.0 do ibit=1,144 @@ -159,11 +159,10 @@ program ft2d rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 rxsig=sqrt(rx2av-rxav*rxav) rxdata=rxdata/rxsig - sigma=0.90 + sigma=0.80 llr(1:128)=2*rxdata/(sigma*sigma) apmask=0 max_iterations=40 - ifer=0 do ibias=0,0 llr2=llr if(ibias.eq.1) llr2=llr+0.4 From cf1fe6c3d6ce09a4748ce864a6a814eefd0fc1ef Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 12 Jan 2019 13:28:10 -0600 Subject: [PATCH 005/367] More work on FT2. New frame format is 16sync + 128codeword. Data chunk is assumed to be 2.5s long. A rudimentary sync routine is implemented which finds the single strongest signal. --- CMakeLists.txt | 1 + lib/fsk4hf/ft2_params.f90 | 6 +- lib/fsk4hf/ft2d.f90 | 139 +++++++++++++++------------------- lib/fsk4hf/ft2sim.f90 | 2 +- lib/fsk4hf/genft2.f90 | 58 +++----------- lib/fsk4hf/getcandidates2.f90 | 51 +++++++++++++ 6 files changed, 129 insertions(+), 128 deletions(-) create mode 100644 lib/fsk4hf/getcandidates2.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a5b5c341..29abb9064 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -546,6 +546,7 @@ set (wsjt_FSRCS lib/sync4.f90 lib/sync64.f90 lib/sync65.f90 + lib/fsk4hf/getcandidates2.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 lib/sync9.f90 diff --git a/lib/fsk4hf/ft2_params.f90 b/lib/fsk4hf/ft2_params.f90 index 027d72bd8..351119b4b 100644 --- a/lib/fsk4hf/ft2_params.f90 +++ b/lib/fsk4hf/ft2_params.f90 @@ -5,8 +5,8 @@ parameter (NS=16) !Sync symbols (2x8) parameter (NN=NS+ND) !Total channel symbols (144) parameter (NSPS=160) !Samples per symbol at 12000 S/s parameter (NZ=NSPS*NN) !Samples in full 1.92 s waveform (23040) -parameter (NMAX=3*12000) !Samples in iwave (36,000) -parameter (NFFT1=2*NSPS, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NMAX=2.5*12000) !Samples in iwave (36,000) +parameter (NFFT1=400, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS/4) !Rough time-sync step size parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) -parameter (NDOWN=10) !Downsample factor +parameter (NDOWN=16) !Downsample factor diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index be43b7760..68cdcde32 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -7,23 +7,28 @@ program ft2d character*37 decodes(100) character*120 data_dir character*90 dmsg - complex c2(0:3*1200-1) !Complex waveform + complex c2(0:NMAX/16-1) !Complex waveform + complex cb(0:NMAX/16-1) complex cd(0:144*10-1) !Complex waveform complex c1(0:9),c0(0:9) complex ccor(0:1,144) - complex csum,cterm,cc0,cc1 + complex csum,cterm,cc0,cc1,csync1,csync2 real*8 fMHz + real a(5) real rxdata(128),llr(128) !Soft symbols real llr2(128) real sbits(144),sbits1(144),sbits3(144) real ps(0:8191),psbest(0:8191) real candidates(100,2) + real savg(NH1),sbase(NH1) integer ihdr(11) integer*2 iwave(NMAX) !Generated full-length waveform integer*1 message77(77),apmask(128),cw(128) integer*1 hbits(144),hbits1(144),hbits3(144) + integer*1 s16(16) logical unpk77_success + data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) @@ -81,7 +86,8 @@ program ft2d fr2=0.0 nav=0 ngood=0 - +fsum=0.0 +fsum2=0.0 do ifile=iarg,nargs call getarg(ifile,infile) j2=index(infile,'.wav') @@ -91,16 +97,55 @@ program ft2d datetime=infile(j2-11:j2-1) close(10) + call getcandidates2(iwave,100.0,3000.0,0.2,2200.0,100,savg,candidates,ncand,sbase) + ndecodes=0 ncand=1 do icand=1,ncand - fc0=1500.0 + f0=candidates(icand,1) xsnr=1.0 - istart=6000+8 - call ft2_downsample(iwave,c2) ! downsample from 160s/Symbol to 10s/Symbol - - ib=istart/16 - cd=c2(ib:ib+144*10-1) + call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol +ibest=-1 +sybest=-99. +dfbest=-1. +do if=-15,+15 + df=if + a=0. + a(1)=-df +call twkfreq1(c2,NMAX/16,fs,a,cb) +! 750 samples/second here + do is=0,374 + csync1=0. + cterm=1 + do ib=1,16 + i1=(ib-1)*10+is + i2=i1+136*10 + if(s16(ib).eq.1) then + csync1=csync1+sum(cb(i1:i1+9)*conjg(c1(0:9)))*cterm + cterm=cterm*cc1 + else + csync1=csync1+sum(cb(i1:i1+9)*conjg(c0(0:9)))*cterm + cterm=cterm*cc0 + endif + enddo + if(abs(csync1).gt.sybest) then + ibest=is + sybest=abs(csync1) + dfbest=df + endif + enddo +enddo +freq=f0+dfbest +fsum=fsum+freq +fsum2=fsum+freq*freq +a=0. +a(1)=-dfbest +!write(*,*) 'dfbest ',dfbest +!dfbest=0.0 +!ibest=187 +call twkfreq1(c2,NMAX/16,fs,a,cb) + ib=ibest + cd=cb(ib:ib+144*10-1) s2=sum(cd*conjg(cd))/(10*144) cd=cd/sqrt(s2) do nseq=1,4 @@ -153,8 +198,7 @@ program ft2d sbits=sbits3 hbits=hbits3 endif - rxdata(1:48)=sbits(9:56) - rxdata(49:128)=sbits(65:144) + rxdata=sbits(17:144) rxav=sum(rxdata(1:128))/128.0 rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 rxsig=sqrt(rx2av-rxav*rxav) @@ -175,6 +219,7 @@ program ft2d if( nharderror.ge.0 ) then write(c77,'(77i1)') message77(1:77) call unpack77(c77,message,unpk77_success) + idupe=0 do i=1,ndecodes if(decodes(i).eq.message) idupe=1 enddo @@ -182,10 +227,9 @@ program ft2d ndecodes=ndecodes+1 decodes(ndecodes)=message nsnr=nint(xsnr) - freq=fMHz + 1.d-6*(fc1+fbest) 1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) - write(*,1212) datetime(8:11),nsnr,xdt,freq,message,'*',idf,nseq,ijitter,nharderror,nhardmin -1212 format(a4,i4,f5.1,f11.6,2x,a22,a1,i5,i5,i5,i5,i5) + write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',idf,nseq,ijitter,nharderror,nhardmin +1212 format(a4,i4,f5.1,f11.1,2x,a22,a1,i5,i5,i5,i5,i5) goto 888 endif enddo ! nseq @@ -195,7 +239,9 @@ program ft2d write(*,1120) 1120 format("") - +favg=fsum/1000.0 +fstd=sqrt(fsum2/1000.0-favg*favg) +write(*,*) "Mean, std frequency: ",favg,fstd 999 end program ft2d subroutine getbitmetric(ib,ps,ns,xmet) @@ -234,66 +280,7 @@ subroutine downsample2(ci,f0,co) return end subroutine downsample2 -subroutine getcandidate2(c,npts,fs,fa,fb,ncand,candidates) - parameter(NDAT=200,NFFT1=120*12000/32,NH1=NFFT1/2,NFFT2=120*12000/320,NH2=NFFT2/2) - complex c(0:npts-1) !Complex waveform - complex cc(0:NFFT1-1) - complex csfil(0:NFFT2-1) - complex cwork(0:NFFT2-1) - real bigspec(0:NFFT2-1) - complex c2(0:NFFT1-1) !Short spectra - real s(-NH1+1:NH1) !Coarse spectrum - real ss(-NH1+1:NH1) !Smoothed coarse spectrum - real candidates(100,2) - integer indx(NFFT2-1) - logical first - data first/.true./ - save first,w,df,csfil - - if(first) then - df=10*fs/NFFT1 - csfil=cmplx(0.0,0.0) - do i=0,NFFT2-1 - csfil(i)=exp(-((i-NH2)/20.0)**2) - enddo - csfil=cshift(csfil,NH2) - call four2a(csfil,NFFT2,1,-1,1) - first=.false. - endif - - cc=cmplx(0.0,0.0) - cc(0:npts-1)=c; - call four2a(cc,NFFT1,1,-1,1) - cc=abs(cc)**2 - call four2a(cc,NFFT1,1,-1,1) - cwork(0:NH2)=cc(0:NH2)*conjg(csfil(0:NH2)) - cwork(NH2+1:NFFT2-1)=cc(NFFT1-NH2+1:NFFT1-1)*conjg(csfil(NH2+1:NFFT2-1)) - - call four2a(cwork,NFFT2,1,+1,1) - bigspec=cshift(real(cwork),-NH2) - il=NH2+fa/df - ih=NH2+fb/df - nnl=ih-il+1 - call indexx(bigspec(il:il+nnl-1),nnl,indx) - xn=bigspec(il-1+indx(nint(0.3*nnl))) - bigspec=bigspec/xn - ncand=0 - do i=il,ih - if((bigspec(i).gt.bigspec(i-1)).and. & - (bigspec(i).gt.bigspec(i+1)).and. & - (bigspec(i).gt.1.15).and.ncand.lt.100) then - ncand=ncand+1 - candidates(ncand,1)=df*(i-NH2) - candidates(ncand,2)=10*log10(bigspec(i))-30.0 - endif - enddo -! do i=1,ncand -! write(*,*) i,candidates(i,1),candidates(i,2) -! enddo - return -end subroutine getcandidate2 - -subroutine ft2_downsample(iwave,c) +subroutine ft2_downsample(iwave,f0,c) ! Input: i*2 data in iwave() at sample rate 12000 Hz ! Output: Complex data in c(), sampled at 1200 Hz @@ -310,7 +297,7 @@ subroutine ft2_downsample(iwave,c) df=12000.0/NMAX x=iwave call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain - i0=nint(1500.0/df) + i0=nint(f0/df) c1(0)=cx(i0) do i=1,NFFT2/2 c1(i)=cx(i0+i) diff --git a/lib/fsk4hf/ft2sim.f90 b/lib/fsk4hf/ft2sim.f90 index 565b57474..6addbe8d8 100644 --- a/lib/fsk4hf/ft2sim.f90 +++ b/lib/fsk4hf/ft2sim.f90 @@ -89,7 +89,7 @@ program ft2sim call sgran() do ifile=1,nfiles - k=nint((xdt+0.5)/dt) + k=nint((xdt+0.25)/dt) ia=k phi=0.0 c0=0.0 diff --git a/lib/fsk4hf/genft2.f90 b/lib/fsk4hf/genft2.f90 index d6d874e99..f416c3616 100644 --- a/lib/fsk4hf/genft2.f90 +++ b/lib/fsk4hf/genft2.f90 @@ -9,13 +9,8 @@ subroutine genft2(msg0,ichk,msgsent,i4tone,itype) ! - msgsent message as it will be decoded ! - i4tone array of audio tone values, 0 or 1 ! - itype message type -! 1 = standard message "Call_1 Call_2 Grid/Rpt" -! 2 = type 1 prefix -! 3 = type 1 suffix -! 4 = type 2 prefix -! 5 = type 2 suffix -! 6 = free text (up to 13 characters) -! 7 = short message " Rpt" +! 1 = 77 bit message +! 7 = 16 bit message " Rpt" use iso_c_binding, only: c_loc,c_size_t use packjt77 @@ -27,24 +22,15 @@ subroutine genft2(msg0,ichk,msgsent,i4tone,itype) integer*1 codeword(128) integer*1 msgbits(77) integer*1 bitseq(144) !Tone #s, data and sync (values 0-1) - integer*1 s8(8) - real*8 pp(12) + integer*1 s16(16) real*8 xi(864),xq(864),pi,twopi - data s8/0,1,1,1,0,0,1,0/ + data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ equivalence (ihash,i1hash) - logical first,unpk77_success - data first/.true./ - save + logical unpk77_success - if(first) then - first=.false. - nsym=128 - pi=4.0*atan(1.0) - twopi=8.*atan(1.0) - do i=1,12 - pp(i)=sin((i-1)*pi/12) - enddo - endif + nsym=128 + pi=4.0*atan(1.0) + twopi=8.*atan(1.0) message(1:37)=' ' itype=1 @@ -89,36 +75,12 @@ subroutine genft2(msg0,ichk,msgsent,i4tone,itype) call encode_128_90(msgbits,codeword) !Create 144-bit channel vector: -!8-bit sync word + 48 bits + 8-bit sync word + 80 bits bitseq=0 - bitseq(1:8)=s8 - bitseq(9:56)=codeword(1:48) - bitseq(57:64)=s8 - bitseq(65:144)=codeword(49:128) + bitseq(1:16)=s16 + bitseq(17:144)=codeword i4tone=bitseq - -! bitseq=2*bitseq-1 -! xq(1:6)=bitseq(1)*pp(7:12) !first bit is mapped to 1st half-symbol on q -! do i=1,71 -! is=(i-1)*12+7 -! xq(is:is+11)=bitseq(2*i+1)*pp -! enddo -! xq(864-5:864)=bitseq(1)*pp(1:6) !last half symbol -! do i=1,72 -! is=(i-1)*12+1 -! xi(is:is+11)=bitseq(2*i)*pp -! enddo -! Map I and Q to tones. -! i4tone=0 -! do i=1,72 -! i4tone(2*i-1)=(bitseq(2*i)*bitseq(2*i-1)+1)/2; -! i4tone(2*i)=-(bitseq(2*i)*bitseq(mod(2*i,144)+1)-1)/2; -! enddo endif -! Flip polarity -! i4tone=-i4tone+1 - 999 return end subroutine genft2 diff --git a/lib/fsk4hf/getcandidates2.f90 b/lib/fsk4hf/getcandidates2.f90 new file mode 100644 index 000000000..2f61e8623 --- /dev/null +++ b/lib/fsk4hf/getcandidates2.f90 @@ -0,0 +1,51 @@ +subroutine getcandidates2(id,nfa,nfb,syncmin,nfqso,maxcand,savg,candidate, & + ncand,sbase) + +! For now, hardwired to find the largest peak in the average spectrum + + include 'ft2_params.f90' + real s(NH1,NHSYM) + real savg(NH1),savsm(NH1) + real sbase(NH1) + real x(NFFT1) + complex cx(0:NH1) + real candidate(3,maxcand) + integer*2 id(NMAX) + integer*1 s8(8) + data s8/0,1,1,1,0,0,1,0/ + equivalence (x,cx) + +! Compute symbol spectra, stepping by NSTEP steps. + savg=0. + tstep=NSTEP/12000.0 + df=12000.0/NFFT1 !3.125 Hz + fac=1.0/300.0 + do j=1,NHSYM + ia=(j-1)*NSTEP + 1 + ib=ia+NSPS-1 + x(1:NSPS)=fac*id(ia:ib) + x(NSPS+1:)=0. + call four2a(x,NFFT1,1,-1,0) !r2c FFT + do i=1,NH1 + s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 + enddo + savg=savg + s(1:NH1,j) !Average spectrum + enddo + savsm=0. + do i=2,NH1-1 + savsm(i)=sum(savg(i-1:i+1))/3. + enddo + + imax=-1 + xmax=-99. + do i=2,NH1-1 + if(savsm(i).gt.savsm(i-1).and.savsm(i).gt.savsm(i+1).and.savsm(i).gt.xmax) then + xmax=savsm(i) + imax=i + endif + enddo + ncand=1 + candidate(1,1)=imax*df + +return +end subroutine getcandidates2 From 8f1baae04840a0a103db27f941511335bc53ec78 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 13 Jan 2019 09:25:30 -0600 Subject: [PATCH 006/367] If delay=0.0 make Watterson use only a single component to simulate flat fading. --- lib/ft8/watterson.f90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/ft8/watterson.f90 b/lib/ft8/watterson.f90 index a1131d7b1..fc3dca113 100644 --- a/lib/ft8/watterson.f90 +++ b/lib/ft8/watterson.f90 @@ -46,7 +46,11 @@ subroutine watterson(c,npts,nsig,fs,delay,fspread) endif nshift=nint(0.001*delay*fs) - c2(0:npts-1)=cshift(c(0:npts-1),nshift) + if(delay.gt.0.0) then + c2(0:npts-1)=cshift(c(0:npts-1),nshift) + else + c2(0:npts-1)=0.0 + endif sq=0. do i=0,npts-1 if(nonzero.gt.1) then From 1fb89929a9b78506c6352050acc62800437d0f51 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 13 Jan 2019 10:58:35 -0600 Subject: [PATCH 007/367] Make ft2d slightly more robust. Still very rough. --- lib/fsk4hf/ft2d.f90 | 29 +++++++++++++++++------------ lib/fsk4hf/getcandidates2.f90 | 4 ++-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index 68cdcde32..852975f9b 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -98,12 +98,11 @@ fsum2=0.0 close(10) call getcandidates2(iwave,100.0,3000.0,0.2,2200.0,100,savg,candidates,ncand,sbase) - ndecodes=0 - ncand=1 do icand=1,ncand f0=candidates(icand,1) xsnr=1.0 + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol ibest=-1 sybest=-99. @@ -137,13 +136,12 @@ call twkfreq1(c2,NMAX/16,fs,a,cb) enddo freq=f0+dfbest fsum=fsum+freq -fsum2=fsum+freq*freq -a=0. -a(1)=-dfbest -!write(*,*) 'dfbest ',dfbest +fsum2=fsum2+freq*freq + a=0. + a(1)=-dfbest !dfbest=0.0 !ibest=187 -call twkfreq1(c2,NMAX/16,fs,a,cb) + call twkfreq1(c2,NMAX/16,fs,a,cb) ib=ibest cd=cb(ib:ib+144*10-1) s2=sum(cd*conjg(cd))/(10*144) @@ -198,6 +196,8 @@ call twkfreq1(c2,NMAX/16,fs,a,cb) sbits=sbits3 hbits=hbits3 endif + nsync_qual=count(hbits(1:16).eq.s16) + if(nsync_qual.lt.12) cycle rxdata=sbits(17:144) rxav=sum(rxdata(1:128))/128.0 rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 @@ -239,9 +239,9 @@ call twkfreq1(c2,NMAX/16,fs,a,cb) write(*,1120) 1120 format("") -favg=fsum/1000.0 -fstd=sqrt(fsum2/1000.0-favg*favg) -write(*,*) "Mean, std frequency: ",favg,fstd +favg=fsum/100.0 +fstd=sqrt(fsum2/100.0-favg*favg) +!write(*,*) "Mean, std frequency: ",favg,fstd 999 end program ft2d subroutine getbitmetric(ib,ps,ns,xmet) @@ -294,14 +294,19 @@ subroutine ft2_downsample(iwave,f0,c) real x(NMAX) equivalence (x,cx) + BW=4.0*75 df=12000.0/NMAX x=iwave call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + ibw=nint(BW/df) i0=nint(f0/df) + c1=0. c1(0)=cx(i0) do i=1,NFFT2/2 - c1(i)=cx(i0+i) - c1(NFFT2-i)=cx(i0-i) + arg=(i-1)*df/bw + win=exp(-arg*arg) + c1(i)=cx(i0+i)*win + c1(NFFT2-i)=cx(i0-i)*win enddo c1=c1/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain diff --git a/lib/fsk4hf/getcandidates2.f90 b/lib/fsk4hf/getcandidates2.f90 index 2f61e8623..5ef9a6616 100644 --- a/lib/fsk4hf/getcandidates2.f90 +++ b/lib/fsk4hf/getcandidates2.f90 @@ -44,8 +44,8 @@ subroutine getcandidates2(id,nfa,nfb,syncmin,nfqso,maxcand,savg,candidate, & imax=i endif enddo + f0=imax*df ncand=1 - candidate(1,1)=imax*df - + candidate(1,1)=f0 return end subroutine getcandidates2 From 348e7c8ad541c1e2e7a6f348999193e0cca4c10c Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 13 Jan 2019 15:44:16 -0600 Subject: [PATCH 008/367] In principle, ft2d can now decode multiple signals. Not yet tested. --- lib/fsk4hf/ft2d.f90 | 98 ++++++++++++++--------------------- lib/fsk4hf/getcandidates2.f90 | 20 +++++-- 2 files changed, 56 insertions(+), 62 deletions(-) diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index 852975f9b..fa32e390e 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -54,7 +54,7 @@ program ft2d cc0=cmplx(cos(the),sin(the)) nargs=iargc() if(nargs.lt.1) then - print*,'Usage: ft2d [-a ] [-f fMHz] [-c ncoh] file1 [file2 ...]' + print*,'Usage: ft2d [-a ] [-f fMHz] file1 [file2 ...]' go to 999 endif iarg=1 @@ -71,23 +71,7 @@ program ft2d iarg=iarg+2 endif ncoh=1 - npdi=16 - if(arg(1:2).eq.'-c') then - call getarg(iarg+1,arg) - read(arg,*) ncoh - iarg=iarg+2 - npdi=16/ncoh - endif -! write(*,*) 'ncoh: ',ncoh,' npdi: ',npdi - xs1=0.0 - xs2=0.0 - fr1=0.0 - fr2=0.0 - nav=0 - ngood=0 -fsum=0.0 -fsum2=0.0 do ifile=iarg,nargs call getarg(ifile,infile) j2=index(infile,'.wav') @@ -96,57 +80,56 @@ fsum2=0.0 read(infile(j2-4:j2-1),*) nutc datetime=infile(j2-11:j2-1) close(10) - - call getcandidates2(iwave,100.0,3000.0,0.2,2200.0,100,savg,candidates,ncand,sbase) + candidates=0.0 + ncand=0 + call getcandidates2(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidates,ncand,sbase) ndecodes=0 do icand=1,ncand f0=candidates(icand,1) xsnr=1.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol -ibest=-1 -sybest=-99. -dfbest=-1. -do if=-15,+15 - df=if - a=0. - a(1)=-df -call twkfreq1(c2,NMAX/16,fs,a,cb) ! 750 samples/second here - do is=0,374 - csync1=0. - cterm=1 - do ib=1,16 - i1=(ib-1)*10+is - i2=i1+136*10 - if(s16(ib).eq.1) then - csync1=csync1+sum(cb(i1:i1+9)*conjg(c1(0:9)))*cterm - cterm=cterm*cc1 - else - csync1=csync1+sum(cb(i1:i1+9)*conjg(c0(0:9)))*cterm - cterm=cterm*cc0 + ibest=-1 + sybest=-99. + dfbest=-1. + do if=-15,+15 + df=if + a=0. + a(1)=-df + call twkfreq1(c2,NMAX/16,fs,a,cb) + do is=0,374 + csync1=0. + cterm=1 + do ib=1,16 + i1=(ib-1)*10+is + i2=i1+136*10 + if(s16(ib).eq.1) then + csync1=csync1+sum(cb(i1:i1+9)*conjg(c1(0:9)))*cterm + cterm=cterm*cc1 + else + csync1=csync1+sum(cb(i1:i1+9)*conjg(c0(0:9)))*cterm + cterm=cterm*cc0 + endif + enddo + if(abs(csync1).gt.sybest) then + ibest=is + sybest=abs(csync1) + dfbest=df endif - enddo - if(abs(csync1).gt.sybest) then - ibest=is - sybest=abs(csync1) - dfbest=df - endif - enddo -enddo -freq=f0+dfbest -fsum=fsum+freq -fsum2=fsum2+freq*freq - a=0. - a(1)=-dfbest + enddo + enddo + !dfbest=0.0 !ibest=187 + a=0. + a(1)=-dfbest call twkfreq1(c2,NMAX/16,fs,a,cb) ib=ibest cd=cb(ib:ib+144*10-1) s2=sum(cd*conjg(cd))/(10*144) cd=cd/sqrt(s2) - do nseq=1,4 + do nseq=1,5 if( nseq.eq.1 ) then ! noncoherent single-symbol detection sbits1=0.0 do ibit=1,144 @@ -197,7 +180,7 @@ fsum2=fsum2+freq*freq hbits=hbits3 endif nsync_qual=count(hbits(1:16).eq.s16) - if(nsync_qual.lt.12) cycle + if(nsync_qual.lt.10) exit rxdata=sbits(17:144) rxav=sum(rxdata(1:128))/128.0 rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 @@ -227,21 +210,20 @@ fsum2=fsum2+freq*freq ndecodes=ndecodes+1 decodes(ndecodes)=message nsnr=nint(xsnr) + freq=f0+dfbest 1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',idf,nseq,ijitter,nharderror,nhardmin 1212 format(a4,i4,f5.1,f11.1,2x,a22,a1,i5,i5,i5,i5,i5) goto 888 endif enddo ! nseq -888 continue +888 continue enddo !candidate list enddo !files write(*,1120) 1120 format("") -favg=fsum/100.0 -fstd=sqrt(fsum2/100.0-favg*favg) -!write(*,*) "Mean, std frequency: ",favg,fstd + 999 end program ft2d subroutine getbitmetric(ib,ps,ns,xmet) diff --git a/lib/fsk4hf/getcandidates2.f90 b/lib/fsk4hf/getcandidates2.f90 index 5ef9a6616..3aa841c83 100644 --- a/lib/fsk4hf/getcandidates2.f90 +++ b/lib/fsk4hf/getcandidates2.f90 @@ -1,4 +1,4 @@ -subroutine getcandidates2(id,nfa,nfb,syncmin,nfqso,maxcand,savg,candidate, & +subroutine getcandidates2(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand,sbase) ! For now, hardwired to find the largest peak in the average spectrum @@ -12,6 +12,7 @@ subroutine getcandidates2(id,nfa,nfb,syncmin,nfqso,maxcand,savg,candidate, & real candidate(3,maxcand) integer*2 id(NMAX) integer*1 s8(8) + integer indx(NH1) data s8/0,1,1,1,0,0,1,0/ equivalence (x,cx) @@ -36,16 +37,27 @@ subroutine getcandidates2(id,nfa,nfb,syncmin,nfqso,maxcand,savg,candidate, & savsm(i)=sum(savg(i-1:i+1))/3. enddo + nfa=fa/df + nfb=fb/df + np=nfb-nfa+1 + indx=0 + call indexx(savsm(nfa:nfb),np,indx) + xn=savsm(nfa+indx(nint(0.3*np))) + savsm=savsm/xn imax=-1 xmax=-99. do i=2,NH1-1 - if(savsm(i).gt.savsm(i-1).and.savsm(i).gt.savsm(i+1).and.savsm(i).gt.xmax) then + if(savsm(i).gt.savsm(i-1).and. & + savsm(i).gt.savsm(i+1).and. & + savsm(i).gt.xmax) then xmax=savsm(i) imax=i endif enddo f0=imax*df - ncand=1 - candidate(1,1)=f0 + if(xmax.gt.1.2) then + ncand=ncand+1 + candidate(1,ncand)=f0 + endif return end subroutine getcandidates2 From 8a6cee7e260776efb8f7f5fe14d5c10b6333e6ce Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 14 Jan 2019 16:39:50 -0500 Subject: [PATCH 009/367] Add files for command-line program ft2[.exe]. --- lib/ft2/ft2.f90 | 154 +++++ lib/ft2/ft2.ini | 2 + lib/ft2/ft2_decode.f90 | 277 +++++++++ lib/ft2/ft2_iwave.f90 | 66 +++ lib/ft2/ft2_params.f90 | 12 + lib/ft2/ft2audio.c | 330 +++++++++++ lib/ft2/g4.cmd | 6 + lib/ft2/gcom1.f90 | 30 + lib/ft2/genft2.f90 | 86 +++ lib/ft2/getcandidates2.f90 | 64 ++ lib/ft2/libportaudio.a | Bin 0 -> 1065188 bytes lib/ft2/libwsjt_cxx.a | Bin 0 -> 192392 bytes lib/ft2/libwsjt_fort.a | Bin 0 -> 1588656 bytes lib/ft2/portaudio.h | 1123 ++++++++++++++++++++++++++++++++++++ lib/ft2/ptt.c | 58 ++ lib/ft2/ptt_unix.c | 341 +++++++++++ 16 files changed, 2549 insertions(+) create mode 100644 lib/ft2/ft2.f90 create mode 100644 lib/ft2/ft2.ini create mode 100644 lib/ft2/ft2_decode.f90 create mode 100644 lib/ft2/ft2_iwave.f90 create mode 100644 lib/ft2/ft2_params.f90 create mode 100644 lib/ft2/ft2audio.c create mode 100644 lib/ft2/g4.cmd create mode 100644 lib/ft2/gcom1.f90 create mode 100644 lib/ft2/genft2.f90 create mode 100644 lib/ft2/getcandidates2.f90 create mode 100644 lib/ft2/libportaudio.a create mode 100644 lib/ft2/libwsjt_cxx.a create mode 100644 lib/ft2/libwsjt_fort.a create mode 100644 lib/ft2/portaudio.h create mode 100644 lib/ft2/ptt.c create mode 100644 lib/ft2/ptt_unix.c diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 new file mode 100644 index 000000000..204a8a78f --- /dev/null +++ b/lib/ft2/ft2.f90 @@ -0,0 +1,154 @@ +program ft2 + + use packjt77 + include 'gcom1.f90' + integer ft2audio,ptt + logical allok + character*20 pttport + character*8 arg + integer*2 iwave2(30000) + + allok=.true. +! Get home-station details + open(10,file='ft2.ini',status='old',err=1) + go to 2 +1 print*,'Cannot open ft2.ini' + allok=.false. +2 read(10,*,err=3) mycall,mygrid,ndevin,ndevout,pttport,exch + go to 4 +3 print*,'Error reading ft2.ini' + allok=.false. +4 if(index(pttport,'/').lt.1) read(pttport,*) nport + hiscall=' ' + hiscall_next=' ' + idevin=ndevin + idevout=ndevout + call padevsub(idevin,idevout) + if(idevin.ne.ndevin .or. idevout.ne.ndevout) allok=.false. + i1=ptt(nport,1,1,iptt) + if(i1.lt.0 .and. nport.ne.0) allok=.false. + if(.not.allok) then + write(*,"('Please fix setup error(s) and restart.')") + go to 999 + endif + + nright=1 + iwrite=0 + iwave=0 + nwave=NTZ + nfsample=12000 + ngo=1 + npabuf=1280 + ntxok=0 + ntransmitting=0 + tx_once=.false. + snrdb=99.0 + txmsg='CQ K1JT FN20' + + nargs=iargc() + if(nargs.eq.3) then + call getarg(1,txmsg) + call getarg(2,arg) + read(arg,*) f0 + call getarg(3,arg) + read(arg,*) snrdb + nTxOK=1 + tx_once=.true. + call ft2_iwave(txmsg,f0,snrdb,iwave) + endif + + iwave2(1:23040)=iwave + iwave2(23041:30000)=0 + nutc=0 + nfqso=nint(f0) + + call ft2_decode(nutc,nfqso,iwave2) + + ierr=ft2audio(idevin,idevout,npabuf,nright,y1,y2,NRING,iwrite,itx, & + iwave,nwave,nfsample,nTxOK,nTransmitting,ngo) + if(ierr.ne.0) then + print*,'Error',ierr,' in JTaudio, you will only be able to work offline.' + else + write(*,1006) +1006 format('Audio streams terminated normally.') + endif + +999 end program ft2 + +subroutine update(total_time,ic1,ic2) + + real*8 total_time + integer ptt + logical transmitted + integer*2 id(30000),id2(30000) + include 'gcom1.f90' + data nt0/-1/,transmitted/.false./,snr/0.0/ + save nt0,transmitted,snr + + if(ic1.ne.0 .or. ic2.ne.0) then + if(ic1.eq.27 .and. ic2.eq.0) ngo=0 !ESC + if(nTxOK.eq.0 .and. ntransmitting.eq.0) then + nd=0 + if(ic1.eq.0 .and. ic2.eq.59) nd=7 !F1 + if(ic1.eq.0 .and. ic2.eq.60) nd=6 !F2 + if(ic1.eq.0 .and. ic2.eq.61) nd=5 !F3 + if(ic1.eq.0 .and. ic2.eq.62) nd=4 !F4 + if(ic1.eq.0 .and. ic2.eq.63) nd=3 !F5 + if(nd.gt.0) then + i1=ptt(nport,1,1,iptt) + ntxok=1 + n=1000 + nwave=NTZ + do i=1,nwave/nd + ib=i*nd + ia=ib-nd+1 + iwave(ia:ib)=n + n=-n + enddo + endif + endif + if(ic1.eq.13 .and. ic2.eq.0) hiscall=hiscall_next + endif + + if(ntransmitting.eq.1) transmitted=.true. + if(ntransmitting.eq.0) then + if(iptt.eq.1 .and. nport.gt.0) i1=ptt(nport,0,1,iptt) + if(tx_once .and. transmitted) stop + endif + + nt=2*total_time + if(nt.gt.nt0 .or. ic1.ne.0 .or. ic2.ne.0) then + k=iwrite-6000 + if(k.lt.1) k=k+NRING + sq=0. + do i=1,6000 + k=k+1 + if(k.gt.NRING) k=k-NRING + x=y1(k) + sq=sq + x*x + enddo + sigdb=0. + if(sq.gt.0.0) sigdb=db(sq/6000.0) + k=iwrite-30000 + if(k.lt.1) k=k+NRING + do i=1,30000 + k=k+1 + if(k.gt.NRING) k=k-NRING + id(i)=y1(k) + enddo + nutc=0 + nfqso=1500 + call ft2_iwave(txmsg,1500.0,snr,id2) !### + snr=snr-1.0 + call ft2_decode(nutc,nfqso,id2) !### +!### call ft2_decode(nutc,nfqso,id) + + write(*,1010) nt,total_time,iwrite,itx,ntxok,ntransmitting,sigdb,snr +1010 format(i6,f9.3,4i6,f6.1,f6.0) + nt0=nt + max1=0 + max2=0 + endif + + return +end subroutine update diff --git a/lib/ft2/ft2.ini b/lib/ft2/ft2.ini new file mode 100644 index 000000000..d66770d17 --- /dev/null +++ b/lib/ft2/ft2.ini @@ -0,0 +1,2 @@ +K1JT FN20 1 5 0 NJ +MyCall MyGrid AudioIn AudioOut PTTport Exch diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 new file mode 100644 index 000000000..5647c8d02 --- /dev/null +++ b/lib/ft2/ft2_decode.f90 @@ -0,0 +1,277 @@ +subroutine ft2_decode(nutc,nfqso,iwave) + + use crc + use packjt77 + include 'ft2_params.f90' + character message*37,c77*77 + character*37 decodes(100) + character*120 data_dir + complex c2(0:NMAX/16-1) !Complex waveform + complex cb(0:NMAX/16-1) + complex cd(0:144*10-1) !Complex waveform + complex c1(0:9),c0(0:9) + complex ccor(0:1,144) + complex csum,cterm,cc0,cc1,csync1 + real*8 fMHz + + real a(5) + real rxdata(128),llr(128) !Soft symbols + real llr2(128) + real sbits(144),sbits1(144),sbits3(144) + real ps(0:8191),psbest(0:8191) + real candidate(3,100) + real savg(NH1) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),apmask(128),cw(128) + integer*1 hbits(144),hbits1(144),hbits3(144) + integer*1 s16(16) + logical unpk77_success + data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ + + fs=12000.0/NDOWN !Sample rate + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + baud=1.0/tt !Keying rate for "itone" symbols (baud) + txt=NZ*dt !Transmission length (s) + twopi=8.0*atan(1.0) + h=0.8 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + + dphi=twopi/2*baud*h*dt*16 ! dt*16 is samp interval after downsample + dphi0=-1*dphi + dphi1=+1*dphi + phi0=0.0 + phi1=0.0 + do i=0,9 + c1(i)=cmplx(cos(phi1),sin(phi1)) + c0(i)=cmplx(cos(phi0),sin(phi0)) + phi1=mod(phi1+dphi1,twopi) + phi0=mod(phi0+dphi0,twopi) + enddo + the=twopi*h/2.0 + cc1=cmplx(cos(the),-sin(the)) + cc0=cmplx(cos(the),sin(the)) + + data_dir="." + fMHz=7.074 + ncoh=1 + candidate=0.0 + ncand=0 + fa=375.0 + fb=3000.0 + syncmin=0.2 + maxcand=100 + nfqso=-1 + call getcandidates2(iwave,fa,fb,maxcand,savg,candidate,ncand) + ndecodes=0 + do icand=1,ncand + f0=candidate(1,icand) +! print*,'A',ncand,f0 + xsnr=1.0 + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol +! 750 samples/second here + ibest=-1 + sybest=-99. + dfbest=-1. +!### do if=-15,+15 + do if=-30,30 + df=if + a=0. + a(1)=-df + call twkfreq1(c2,NMAX/16,fs,a,cb) + do is=0,374 + csync1=0. + cterm=1 + do ib=1,16 + i1=(ib-1)*10+is + i2=i1+136*10 + if(s16(ib).eq.1) then + csync1=csync1+sum(cb(i1:i1+9)*conjg(c1(0:9)))*cterm + cterm=cterm*cc1 + else + csync1=csync1+sum(cb(i1:i1+9)*conjg(c0(0:9)))*cterm + cterm=cterm*cc0 + endif + enddo +! write(60,3001) if,is,abs(csync1) +!3001 format(2i6,f10.3) + if(abs(csync1).gt.sybest) then + ibest=is + sybest=abs(csync1) + dfbest=df + endif + enddo + enddo + +!dfbest=0.0 +!ibest=187 + a=0. + a(1)=-dfbest + call twkfreq1(c2,NMAX/16,fs,a,cb) + ib=ibest + cd=cb(ib:ib+144*10-1) + s2=sum(real(cd*conjg(cd)))/(10*144) + cd=cd/sqrt(s2) + do nseq=1,5 + if( nseq.eq.1 ) then ! noncoherent single-symbol detection + sbits1=0.0 + do ibit=1,144 + ib=(ibit-1)*10 + ccor(1,ibit)=sum(cd(ib:ib+9)*conjg(c1(0:9))) + ccor(0,ibit)=sum(cd(ib:ib+9)*conjg(c0(0:9))) + sbits1(ibit)=abs(ccor(1,ibit))-abs(ccor(0,ibit)) + hbits1(ibit)=0 + if(sbits1(ibit).gt.0) hbits1(ibit)=1 + enddo + sbits=sbits1 + hbits=hbits1 + sbits3=sbits1 + hbits3=hbits1 + elseif( nseq.ge.2 ) then + nbit=2*nseq-1 + numseq=2**(nbit) + ps=0 + do ibit=nbit/2+1,144-nbit/2 + ps=0.0 + pmax=0.0 + do iseq=0,numseq-1 + csum=0.0 + cterm=1.0 + k=1 + do i=nbit-1,0,-1 + ibb=iand(iseq/(2**i),1) + csum=csum+ccor(ibb,ibit-(nbit/2+1)+k)*cterm + if(ibb.eq.0) cterm=cterm*cc0 + if(ibb.eq.1) cterm=cterm*cc1 + k=k+1 + enddo + ps(iseq)=abs(csum) + if( ps(iseq) .gt. pmax ) then + pmax=ps(iseq) + ibflag=1 + endif + enddo + if( ibflag .eq. 1 ) then + psbest=ps + ibflag=0 + endif + call getbitmetric(2**(nbit/2),psbest,numseq,sbits3(ibit)) + hbits3(ibit)=0 + if(sbits3(ibit).gt.0) hbits3(ibit)=1 + enddo + sbits=sbits3 + hbits=hbits3 + endif + nsync_qual=count(hbits(1:16).eq.s16) + if(nsync_qual.lt.10) exit + rxdata=sbits(17:144) + rxav=sum(rxdata(1:128))/128.0 + rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 + rxsig=sqrt(rx2av-rxav*rxav) + rxdata=rxdata/rxsig + sigma=0.80 + llr(1:128)=2*rxdata/(sigma*sigma) + apmask=0 + max_iterations=40 + do ibias=0,0 + llr2=llr + if(ibias.eq.1) llr2=llr+0.4 + if(ibias.eq.2) llr2=llr-0.4 + call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + if(nharderror.ge.0) exit + enddo + nhardmin=-1 + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) goto 888 + ndecodes=ndecodes+1 + decodes(ndecodes)=message + nsnr=nint(xsnr) + freq=f0+dfbest + write(*,1212) nutc,nsnr,ibest/750.0,nint(freq),message, & + nseq,nharderror,nhardmin +1212 format(i4.4,i4,f6.2,i6,2x,a37,3i5) + goto 888 + endif + enddo ! nseq +888 continue + enddo !candidate list + +end subroutine ft2_decode + +subroutine getbitmetric(ib,ps,ns,xmet) + real ps(0:ns-1) + xm1=0 + xm0=0 + do i=0,ns-1 + if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) + if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) + enddo + xmet=xm1-xm0 + return +end subroutine getbitmetric + +subroutine downsample2(ci,f0,co) + parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 + complex ci(0:NI-1),ct(0:NI-1) + complex co(0:NO-1) + fs=12000.0 + df=fs/NI + ct=ci + call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain + i0=nint(f0/df) + ct=cshift(ct,i0) + co=0.0 + co(0)=ct(0) + b=8.0 + do i=1,NO/2 + arg=(i*df/b)**2 + filt=exp(-arg) + co(i)=ct(i)*filt + co(NO-i)=ct(NI-i)*filt + enddo + co=co/NO + call four2a(co,NO,1,1,1) !c2c FFT back to time domain + return +end subroutine downsample2 + +subroutine ft2_downsample(iwave,f0,c) + +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 1200 Hz + + include 'ft2_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/16-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX) + equivalence (x,cx) + + BW=4.0*75 + df=12000.0/NMAX + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + ibw=nint(BW/df) + i0=nint(f0/df) + c1=0. + c1(0)=cx(i0) + do i=1,NFFT2/2 + arg=(i-1)*df/bw + win=exp(-arg*arg) + c1(i)=cx(i0+i)*win + c1(NFFT2-i)=cx(i0-i)*win + enddo + c1=c1/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/16-1) + return +end subroutine ft2_downsample + diff --git a/lib/ft2/ft2_iwave.f90 b/lib/ft2/ft2_iwave.f90 new file mode 100644 index 000000000..94445545d --- /dev/null +++ b/lib/ft2/ft2_iwave.f90 @@ -0,0 +1,66 @@ +subroutine ft2_iwave(msg37,f0,snrdb,iwave) + +! Generate waveform for experimental "FT2" mode + + use packjt77 + include 'ft2_params.f90' !Set various constants + parameter (NWAVE=NN*NSPS) + character msg37*37,msgsent37*37 + real wave(NMAX) + integer itone(NN) + integer*2 iwave(NMAX) !Generated full-length waveform + + twopi=8.0*atan(1.0) + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + hmod=0.8 !Modulation index (MSK=0.5, FSK=1.0) + tt=NSPS*dt !Duration of symbols (s) + baud=1.0/tt !Keying rate (baud) + bw=1.5*baud !Occupied bandwidth (Hz) + txt=NZ*dt !Transmission length (s) + bandwidth_ratio=2500.0/(fs/2.0) + sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) + if(snrdb.gt.90.0) sig=1.0 + txt=NN*NSPS/12000.0 + +! Source-encode, then get itone(): + itype=1 + call genft2(msg37,0,msgsent37,itone,itype) + + k=0 + phi=0.0 + do j=1,NN !Generate real waveform + dphi=twopi*(f0*dt+(hmod/2.0)*(2*itone(j)-1)/real(NSPS)) + do i=1,NSPS + k=k+1 + wave(k)=sig*sin(phi) + phi=mod(phi+dphi,twopi) + enddo + enddo + kz=k + + peak=maxval(abs(wave(1:kz))) +! nslots=1 +! if(width.gt.0.0) call filt8(f0,nslots,width,wave) + + if(snrdb.lt.90) then + do i=1,NMAX !Add gaussian noise at specified SNR + xnoise=gran() + wave(i)=wave(i) + xnoise + enddo + endif + + gain=1.0 + if(snrdb.lt.90.0) then + wave=gain*wave + else + datpk=maxval(abs(wave)) + fac=32767.0/datpk + wave=fac*wave + endif + + if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." + iwave(1:kz)=nint(wave(1:kz)) + + return +end subroutine ft2_iwave diff --git a/lib/ft2/ft2_params.f90 b/lib/ft2/ft2_params.f90 new file mode 100644 index 000000000..4751e47e4 --- /dev/null +++ b/lib/ft2/ft2_params.f90 @@ -0,0 +1,12 @@ +! LDPC (128,90) code +parameter (KK=90) !Information bits (77 + CRC13) +parameter (ND=128) !Data symbols +parameter (NS=16) !Sync symbols (2x8) +parameter (NN=NS+ND) !Total channel symbols (144) +parameter (NSPS=160) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Samples in full 1.92 s waveform (23040) +parameter (NMAX=30000) !Samples in iwave (2.5*12000) +parameter (NFFT1=400, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NDOWN=16) !Downsample factor diff --git a/lib/ft2/ft2audio.c b/lib/ft2/ft2audio.c new file mode 100644 index 000000000..9d0589d36 --- /dev/null +++ b/lib/ft2/ft2audio.c @@ -0,0 +1,330 @@ +#include +#include "portaudio.h" +#include + +int iaa; +int icc; +double total_time=0.0; + +// Definition of structure pointing to the audio data +typedef struct +{ + int *iwrite; + int *itx; + int *TxOK; + int *Transmitting; + int *nwave; + int *nright; + int nbuflen; + int nfs; + short *y1; + short *y2; + short *iwave; +} paTestData; + +// Input callback routine: +static int +SoundIn( void *inputBuffer, void *outputBuffer, + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ) +{ + paTestData *data = (paTestData*)userData; + short *in = (short*)inputBuffer; + unsigned int i; + static int ia=0; + + if(*data->Transmitting) return 0; + + if(statusFlags!=0) printf("Status flags %d\n",(int)statusFlags); + + if((statusFlags&1) == 0) { + //increment buffer pointers only if data available + ia=*data->iwrite; + if(*data->nright==0) { //Use left channel for input + for(i=0; iy1[ia] = (*in++); + data->y2[ia] = (*in++); + ia++; + } + } else { //Use right channel + for(i=0; iy2[ia] = (*in++); + data->y1[ia] = (*in++); + ia++; + } + } + } + + if(ia >= data->nbuflen) ia=0; //Wrap buffer pointer if necessary + *data->iwrite = ia; //Save buffer pointer + iaa=ia; + total_time += (double)framesPerBuffer/12000.0; + return 0; +} + +// Output callback routine: +static int +SoundOut( void *inputBuffer, void *outputBuffer, + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ) +{ + paTestData *data = (paTestData*)userData; + short *wptr = (short*)outputBuffer; + unsigned int i,n; + static short int n2; + static int ic=0; + static int TxOKz=0; + + // printf("txOK: %d %d\n",TxOKz,*data->TxOK); + + if(*data->TxOK && (!TxOKz)) ic=0; + TxOKz=*data->TxOK; + *data->Transmitting=*data->TxOK; + + if(*data->TxOK) { + for(i=0 ; i < framesPerBuffer; i++ ) { + n2=data->iwave[ic]; + *wptr++ = n2; //left + *wptr++ = n2; //right + ic++; + + if(ic >= *data->nwave) { + *data->TxOK = 0; + *data->Transmitting = 0; + *data->iwrite = 0; //Reset Rx buffer pointer to 0 + ic=0; + break; + } + } + } else { + memset((void*)outputBuffer, 0, 2*sizeof(short)*framesPerBuffer); + } + *data->itx = icc; //Save buffer pointer + icc=ic; + return 0; +} + +/*******************************************************************/ +int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, + short y1[], short y2[], int *nbuflen, int *iwrite, + int *itx, short iwave[], int *nwave, int *nfsample, + int *TxOK, int *Transmitting, int *ngo) + +{ + paTestData data; + PaStream *instream, *outstream; + PaStreamParameters inputParameters, outputParameters; + // PaStreamInfo *streamInfo; + + int nfpb = *npabuf; + int nSampleRate = *nfsample; + int ndevice_in = *ndevin; + int ndevice_out = *ndevout; + double dSampleRate = (double) *nfsample; + PaError err_init, err_open_in, err_open_out, err_start_in, err_start_out; + PaError err = 0; + + data.iwrite = iwrite; + data.itx = itx; + data.TxOK = TxOK; + data.Transmitting = Transmitting; + data.y1 = y1; + data.y2 = y2; + data.nbuflen = *nbuflen; + data.nright = nright; + data.nwave = nwave; + data.iwave = iwave; + data.nfs = nSampleRate; + + err_init = Pa_Initialize(); // Initialize PortAudio + + if(err_init) { + printf("Error initializing PortAudio.\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_init), + err_init); + Pa_Terminate(); // I don't think we need this but... + return(-1); + } + + // printf("Opening device %d for input, %d for output...\n",ndevice_in,ndevice_out); + + inputParameters.device = ndevice_in; + inputParameters.channelCount = 2; + inputParameters.sampleFormat = paInt16; + inputParameters.suggestedLatency = 0.2; + inputParameters.hostApiSpecificStreamInfo = NULL; + +// Test if this configuration actually works, so we do not run into an ugly assertion + err_open_in = Pa_IsFormatSupported(&inputParameters, NULL, dSampleRate); + + if (err_open_in == 0) { + err_open_in = Pa_OpenStream( + &instream, //address of stream + &inputParameters, + NULL, + dSampleRate, //Sample rate + nfpb, //Frames per buffer + paNoFlag, + (PaStreamCallback *)SoundIn, //Callback routine + (void *)&data); //address of data structure + + if(err_open_in) { // We should have no error here usually + printf("Error opening input audio stream:\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), err_open_in); + + err = 1; + } else { + // printf("Successfully opened audio input.\n"); + } + } else { + printf("Error opening input audio stream.\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), err_open_in); + + err = 1; + } + + outputParameters.device = ndevice_out; + outputParameters.channelCount = 2; + outputParameters.sampleFormat = paInt16; + outputParameters.suggestedLatency = 0.2; + outputParameters.hostApiSpecificStreamInfo = NULL; + +// Test if this configuration actually works, so we do not run into an ugly assertion + err_open_out = Pa_IsFormatSupported(NULL, &outputParameters, dSampleRate); + + if (err_open_out == 0) { + err_open_out = Pa_OpenStream( + &outstream, //address of stream + NULL, + &outputParameters, + dSampleRate, //Sample rate + nfpb, //Frames per buffer + paNoFlag, + (PaStreamCallback *)SoundOut, //Callback routine + (void *)&data); //address of data structure + + if(err_open_out) { // We should have no error here usually + printf("Error opening output audio stream!\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), err_open_out); + + err += 2; + } else { + // printf("Successfully opened audio output.\n"); + } + } else { + printf("Error opening output audio stream.\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), err_open_out); + + err += 2; + } + + // if there was no error in opening both streams start them + if (err == 0) { + err_start_in = Pa_StartStream(instream); //Start input stream + + if(err_start_in) { + printf("Error starting input audio stream!\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_in), err_start_in); + + err += 4; + } + + err_start_out = Pa_StartStream(outstream); //Start output stream + + if(err_start_out) { + printf("Error starting output audio stream!\n"); + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_out), err_start_out); + + err += 8; + } + } + + if (err == 0) printf("Audio streams running normally.\n******************************************************************\n"); + + while( Pa_IsStreamActive(instream) && (*ngo != 0) && (err == 0) ) { + int ic1=0; + int ic2=0; + if(_kbhit()) ic1 = _getch(); + if(_kbhit()) ic2 = _getch(); + // if(ic1!=0 || ic2!=0) printf("%d %d %d\n",iaa,ic1,ic2); + update_(&total_time,&ic1,&ic2); + Pa_Sleep(100); + } + + Pa_AbortStream(instream); // Abort stream + Pa_CloseStream(instream); // Close stream, we're done. + Pa_AbortStream(outstream); // Abort stream + Pa_CloseStream(outstream); // Close stream, we're done. + + Pa_Terminate(); + + return(err); +} + + +int padevsub_(int *idevin, int *idevout) +{ + int numdev,ndefin,ndefout; + int nchin[101], nchout[101]; + int i, devIdx; + int numDevices; + const PaDeviceInfo *pdi; + PaError err; + + Pa_Initialize(); + numDevices = Pa_GetDeviceCount(); + numdev = numDevices; + + if( numDevices < 0 ) { + err = numDevices; + Pa_Terminate(); + return err; + } + + if ((devIdx = Pa_GetDefaultInputDevice()) > 0) { + ndefin = devIdx; + } else { + ndefin = 0; + } + + if ((devIdx = Pa_GetDefaultOutputDevice()) > 0) { + ndefout = devIdx; + } else { + ndefout = 0; + } + + printf("\nAudio Input Output Device Name\n"); + printf("Device Channels Channels\n"); + printf("------------------------------------------------------------------\n"); + + for( i=0; i < numDevices; i++ ) { + pdi = Pa_GetDeviceInfo(i); +// if(i == Pa_GetDefaultInputDevice()) ndefin = i; +// if(i == Pa_GetDefaultOutputDevice()) ndefout = i; + nchin[i]=pdi->maxInputChannels; + nchout[i]=pdi->maxOutputChannels; + printf(" %2d %2d %2d %s\n",i,nchin[i],nchout[i],pdi->name); + } + + printf("\nUser requested devices: Input = %2d Output = %2d\n", + *idevin,*idevout); + printf("Default devices: Input = %2d Output = %2d\n", + ndefin,ndefout); + if((*idevin<0) || (*idevin>=numdev)) *idevin=ndefin; + if((*idevout<0) || (*idevout>=numdev)) *idevout=ndefout; + if((*idevin==0) && (*idevout==0)) { + *idevin=ndefin; + *idevout=ndefout; + } + printf("Will open devices: Input = %2d Output = %2d\n", + *idevin,*idevout); + + Pa_Terminate(); + + return 0; +} + diff --git a/lib/ft2/g4.cmd b/lib/ft2/g4.cmd new file mode 100644 index 000000000..d6d9134e4 --- /dev/null +++ b/lib/ft2/g4.cmd @@ -0,0 +1,6 @@ +gcc -c ft2audio.c +gcc -c ptt.c +gfortran -c ../77bit/packjt77.f90 +gfortran -c ../crc.f90 +gfortran -o ft2 -fbounds-check -fno-second-underscore -Wall -Wno-conversion -Wno-character-truncation ft2.f90 ft2_iwave.f90 ft2_decode.f90 getcandidates2.f90 ft2audio.o ptt.o libwsjt_fort.a libwsjt_cxx.a libportaudio.a ../libfftw3f_win.a -lwinmm +rm *.o *.mod diff --git a/lib/ft2/gcom1.f90 b/lib/ft2/gcom1.f90 new file mode 100644 index 000000000..fa2262127 --- /dev/null +++ b/lib/ft2/gcom1.f90 @@ -0,0 +1,30 @@ +! Variable Purpose +!--------------------------------------------------------------------------- +integer NRING !Length of Rx ring buffer +integer NTZ !Length of Tx waveform in samples +parameter(NRING=32768) !About 2.7 s at 12000 sam/sec +parameter(NTZ=23040) !144*160 +parameter(NMAX=30000) !2.5*12000 +real snrdb +integer ndevin !Device# for audio input +integer ndevout !Device# for audio output +integer iwrite !Pointer to Rx ring buffer +integer itx !Pointer to Tx buffer +integer ngo !Set to 0 to terminate audio streams +integer nTransmitting !Actually transmitting? +integer nTxOK !OK to transmit? +integer nport !COM port for PTT +logical tx_once !Transmit one message, then exit +integer*2 y1 !Ring buffer for audio channel 0 +integer*2 y2 !Ring buffer for audio channel 1 +integer*2 iwave !Data for Tx audio +character*6 mycall +character*6 hiscall +character*6 hiscall_next +character*4 mygrid +character*3 exch +character*37 txmsg + +common/gcom1/snrdb,ndevin,ndevout,iwrite,itx,ngo,nTransmitting,nTxOK,nport, & + tx_once, y1(NRING),y2(NRING),iwave(NTZ),mycall,hiscall, & + hiscall_next,mygrid,exch,txmsg diff --git a/lib/ft2/genft2.f90 b/lib/ft2/genft2.f90 new file mode 100644 index 000000000..f416c3616 --- /dev/null +++ b/lib/ft2/genft2.f90 @@ -0,0 +1,86 @@ +subroutine genft2(msg0,ichk,msgsent,i4tone,itype) +! s8 + 48bits + s8 + 80 bits = 144 bits (72ms message duration) +! +! Encode an MSK144 message +! Input: +! - msg0 requested message to be transmitted +! - ichk if ichk=1, return only msgsent +! if ichk.ge.10000, set imsg=ichk-10000 for short msg +! - msgsent message as it will be decoded +! - i4tone array of audio tone values, 0 or 1 +! - itype message type +! 1 = 77 bit message +! 7 = 16 bit message " Rpt" + + use iso_c_binding, only: c_loc,c_size_t + use packjt77 + character*37 msg0 + character*37 message !Message to be generated + character*37 msgsent !Message as it will be received + character*77 c77 + integer*4 i4tone(144) + integer*1 codeword(128) + integer*1 msgbits(77) + integer*1 bitseq(144) !Tone #s, data and sync (values 0-1) + integer*1 s16(16) + real*8 xi(864),xq(864),pi,twopi + data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ + equivalence (ihash,i1hash) + logical unpk77_success + + nsym=128 + pi=4.0*atan(1.0) + twopi=8.*atan(1.0) + + message(1:37)=' ' + itype=1 + if(msg0(1:1).eq.'@') then !Generate a fixed tone + read(msg0(2:5),*,end=1,err=1) nfreq !at specified frequency + go to 2 +1 nfreq=1000 +2 i4tone(1)=nfreq + else + message=msg0 + + do i=1, 37 + if(ichar(message(i:i)).eq.0) then + message(i:37)=' ' + exit + endif + enddo + do i=1,37 !Strip leading blanks + if(message(1:1).ne.' ') exit + message=message(i+1:) + enddo + + if(message(1:1).eq.'<') then + i2=index(message,'>') + i1=0 + if(i2.gt.0) i1=index(message(1:i2),' ') + if(i1.gt.0) then + call genmsk40(message,msgsent,ichk,i4tone,itype) + if(itype.lt.0) go to 999 + i4tone(41)=-40 + go to 999 + endif + endif + + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,msgsent,unpk77_success) !Unpack to get msgsent + + if(ichk.eq.1) go to 999 + read(c77,"(77i1)") msgbits + call encode_128_90(msgbits,codeword) + +!Create 144-bit channel vector: + bitseq=0 + bitseq(1:16)=s16 + bitseq(17:144)=codeword + + i4tone=bitseq + endif + +999 return +end subroutine genft2 diff --git a/lib/ft2/getcandidates2.f90 b/lib/ft2/getcandidates2.f90 new file mode 100644 index 000000000..d7e75097c --- /dev/null +++ b/lib/ft2/getcandidates2.f90 @@ -0,0 +1,64 @@ +subroutine getcandidates2(id,fa,fb,maxcand,savg,candidate,ncand) + +! For now, hardwired to find the largest peak in the average spectrum + + include 'ft2_params.f90' + real s(NH1,NHSYM) + real savg(NH1),savsm(NH1) + real x(NFFT1) + complex cx(0:NH1) + real candidate(3,100) + integer*2 id(NMAX) + integer*1 s8(8) + integer indx(NH1) + data s8/0,1,1,1,0,0,1,0/ + equivalence (x,cx) + +! Compute symbol spectra, stepping by NSTEP steps. + savg=0. + tstep=NSTEP/12000.0 + df=12000.0/NFFT1 !3.125 Hz + fac=1.0/300.0 + do j=1,NHSYM + ia=(j-1)*NSTEP + 1 + ib=ia+NSPS-1 + x(1:NSPS)=fac*id(ia:ib) + x(NSPS+1:)=0. + call four2a(x,NFFT1,1,-1,0) !r2c FFT + do i=1,NH1 + s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 + enddo + savg=savg + s(1:NH1,j) !Average spectrum + enddo + savsm=0. + do i=2,NH1-1 + savsm(i)=sum(savg(i-1:i+1))/3. + enddo + savsm(1)=savg(1) + savsm(NH1)=savg(NH1) + + nfa=nint(fa/df) + nfb=nint(fb/df) + np=nfb-nfa+1 + indx=0 + call indexx(savsm(nfa:nfb),np,indx) + xn=savsm(nfa+indx(nint(0.3*np))) + savsm=savsm/xn + imax=-1 + xmax=-99. + do i=2,NH1-1 + if(savsm(i).gt.savsm(i-1).and. & + savsm(i).gt.savsm(i+1).and. & + savsm(i).gt.xmax) then + xmax=savsm(i) + imax=i + endif + enddo + f0=imax*df + if(xmax.gt.1.2) then + if(ncand.lt.maxcand) ncand=ncand+1 + candidate(1,ncand)=f0 + endif + +return +end subroutine getcandidates2 diff --git a/lib/ft2/libportaudio.a b/lib/ft2/libportaudio.a new file mode 100644 index 0000000000000000000000000000000000000000..f20f02c16184cea7903388dcac730e73a3b98e9d GIT binary patch literal 1065188 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%0AT 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 literal 0 HcmV?d00001 diff --git a/lib/ft2/libwsjt_fort.a b/lib/ft2/libwsjt_fort.a new file mode 100644 index 0000000000000000000000000000000000000000..84c1c6f09403342ccf559b288681f636cff7ad4e GIT binary patch literal 1588656 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%0D(niM7W!=MMo2a@*W>DKI|te#fGY7hFyR4& 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%0A7n}TKusu9#EXr7?k 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

R*U@^01>S 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%0DbLZ}=7- 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

^?FzLswcqjXK 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

}Xn?prD6|SeL2=DQx{x6V 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 literal 0 HcmV?d00001 diff --git a/lib/ft2/portaudio.h b/lib/ft2/portaudio.h new file mode 100644 index 000000000..250fba021 --- /dev/null +++ b/lib/ft2/portaudio.h @@ -0,0 +1,1123 @@ + +#ifndef PORTAUDIO_H +#define PORTAUDIO_H +/* + * $Id: portaudio.h,v 1.1 2005/11/29 21:27:24 joe Exp $ + * PortAudio Portable Real-Time Audio Library + * PortAudio API Header File + * Latest version available at: http://www.portaudio.com/ + * + * Copyright (c) 1999-2002 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** @file + @brief The PortAudio API. +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** Retrieve the release number of the currently running PortAudio build, + eg 1900. +*/ +int Pa_GetVersion( void ); + + +/** Retrieve a textual description of the current PortAudio build, + eg "PortAudio V19-devel 13 October 2002". +*/ +const char* Pa_GetVersionText( void ); + + +/** Error codes returned by PortAudio functions. + Note that with the exception of paNoError, all PaErrorCodes are negative. +*/ + +typedef int PaError; +typedef enum PaErrorCode +{ + paNoError = 0, + + paNotInitialized = -10000, + paUnanticipatedHostError, + paInvalidChannelCount, + paInvalidSampleRate, + paInvalidDevice, + paInvalidFlag, + paSampleFormatNotSupported, + paBadIODeviceCombination, + paInsufficientMemory, + paBufferTooBig, + paBufferTooSmall, + paNullCallback, + paBadStreamPtr, + paTimedOut, + paInternalError, + paDeviceUnavailable, + paIncompatibleHostApiSpecificStreamInfo, + paStreamIsStopped, + paStreamIsNotStopped, + paInputOverflowed, + paOutputUnderflowed, + paHostApiNotFound, + paInvalidHostApi, + paCanNotReadFromACallbackStream, /**< @todo review error code name */ + paCanNotWriteToACallbackStream, /**< @todo review error code name */ + paCanNotReadFromAnOutputOnlyStream, /**< @todo review error code name */ + paCanNotWriteToAnInputOnlyStream, /**< @todo review error code name */ + paIncompatibleStreamHostApi +} PaErrorCode; + + +/** Translate the supplied PortAudio error code into a human readable + message. +*/ +const char *Pa_GetErrorText( PaError errorCode ); + + +/** Library initialization function - call this before using PortAudio. + This function initialises internal data structures and prepares underlying + host APIs for use. This function MUST be called before using any other + PortAudio API functions. + + If Pa_Initialize() is called multiple times, each successful + call must be matched with a corresponding call to Pa_Terminate(). + Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not + required to be fully nested. + + Note that if Pa_Initialize() returns an error code, Pa_Terminate() should + NOT be called. + + @return paNoError if successful, otherwise an error code indicating the cause + of failure. + + @see Pa_Terminate +*/ +PaError Pa_Initialize( void ); + + +/** Library termination function - call this when finished using PortAudio. + This function deallocates all resources allocated by PortAudio since it was + initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has + been called multiple times, each call must be matched with a corresponding call + to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically + close any PortAudio streams that are still open. + + Pa_Terminate() MUST be called before exiting a program which uses PortAudio. + Failure to do so may result in serious resource leaks, such as audio devices + not being available until the next reboot. + + @return paNoError if successful, otherwise an error code indicating the cause + of failure. + + @see Pa_Initialize +*/ +PaError Pa_Terminate( void ); + + + +/** The type used to refer to audio devices. Values of this type usually + range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice + and paUseHostApiSpecificDeviceSpecification values. + + @see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification +*/ +typedef int PaDeviceIndex; + + +/** A special PaDeviceIndex value indicating that no device is available, + or should be used. + + @see PaDeviceIndex +*/ +#define paNoDevice ((PaDeviceIndex)-1) + + +/** A special PaDeviceIndex value indicating that the device(s) to be used + are specified in the host api specific stream info structure. + + @see PaDeviceIndex +*/ +#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) + + +/* Host API enumeration mechanism */ + +/** The type used to enumerate to host APIs at runtime. Values of this type + range from 0 to (Pa_GetHostApiCount()-1). + + @see Pa_GetHostApiCount +*/ +typedef int PaHostApiIndex; + + +/** Retrieve the number of available host APIs. Even if a host API is + available it may have no devices available. + + @return A non-negative value indicating the number of available host APIs + or, a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. + + @see PaHostApiIndex +*/ +PaHostApiIndex Pa_GetHostApiCount( void ); + + +/** Retrieve the index of the default host API. The default host API will be + the lowest common denominator host API on the current platform and is + unlikely to provide the best performance. + + @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) + indicating the default host API index or, a PaErrorCode (which are always + negative) if PortAudio is not initialized or an error is encountered. +*/ +PaHostApiIndex Pa_GetDefaultHostApi( void ); + + +/** Unchanging unique identifiers for each supported host API. This type + is used in the PaHostApiInfo structure. The values are guaranteed to be + unique and to never change, thus allowing code to be written that + conditionally uses host API specific extensions. + + New type ids will be allocated when support for a host API reaches + "public alpha" status, prior to that developers should use the + paInDevelopment type id. + + @see PaHostApiInfo +*/ +typedef enum PaHostApiTypeId +{ + paInDevelopment=0, /* use while developing support for a new host API */ + paDirectSound=1, + paMME=2, + paASIO=3, + paSoundManager=4, + paCoreAudio=5, + paOSS=7, + paALSA=8, + paAL=9, + paBeOS=10, + paWDMKS=11, + paJACK=12 +} PaHostApiTypeId; + + +/** A structure containing information about a particular host API. */ + +typedef struct PaHostApiInfo +{ + /** this is struct version 1 */ + int structVersion; + /** The well known unique identifier of this host API @see PaHostApiTypeId */ + PaHostApiTypeId type; + /** A textual description of the host API for display on user interfaces. */ + const char *name; + + /** The number of devices belonging to this host API. This field may be + used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate + all devices for this host API. + @see Pa_HostApiDeviceIndexToDeviceIndex + */ + int deviceCount; + + /** The the default input device for this host API. The value will be a + device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice + if no default input device is available. + */ + PaDeviceIndex defaultInputDevice; + + /** The the default output device for this host API. The value will be a + device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice + if no default output device is available. + */ + PaDeviceIndex defaultOutputDevice; + +} PaHostApiInfo; + + +/** Retrieve a pointer to a structure containing information about a specific + host Api. + + @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) + + @return A pointer to an immutable PaHostApiInfo structure describing + a specific host API. If the hostApi parameter is out of range or an error + is encountered, the function returns NULL. + + The returned structure is owned by the PortAudio implementation and must not + be manipulated or freed. The pointer is only guaranteed to be valid between + calls to Pa_Initialize() and Pa_Terminate(). +*/ +const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); + + +/** Convert a static host API unique identifier, into a runtime + host API index. + + @param type A unique host API identifier belonging to the PaHostApiTypeId + enumeration. + + @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, + a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. + + The paHostApiNotFound error code indicates that the host API specified by the + type parameter is not available. + + @see PaHostApiTypeId +*/ +PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); + + +/** Convert a host-API-specific device index to standard PortAudio device index. + This function may be used in conjunction with the deviceCount field of + PaHostApiInfo to enumerate all devices for the specified host API. + + @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) + + @param hostApiDeviceIndex A valid per-host device index in the range + 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) + + @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) + or, a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. + + A paInvalidHostApi error code indicates that the host API index specified by + the hostApi parameter is out of range. + + A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter + is out of range. + + @see PaHostApiInfo +*/ +PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, + int hostApiDeviceIndex ); + + + +/** Structure used to return information about a host error condition. +*/ +typedef struct PaHostErrorInfo{ + PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ + long errorCode; /**< the error code returned */ + const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ +}PaHostErrorInfo; + + +/** Return information about the last host error encountered. The error + information returned by Pa_GetLastHostErrorInfo() will never be modified + asyncronously by errors occurring in other PortAudio owned threads + (such as the thread that manages the stream callback.) + + This function is provided as a last resort, primarily to enhance debugging + by providing clients with access to all available error information. + + @return A pointer to an immutable structure constaining information about + the host error. The values in this structure will only be valid if a + PortAudio function has previously returned the paUnanticipatedHostError + error code. +*/ +const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); + + + +/* Device enumeration and capabilities */ + +/** Retrieve the number of available devices. The number of available devices + may be zero. + + @return A non-negative value indicating the number of available devices or, + a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. +*/ +PaDeviceIndex Pa_GetDeviceCount( void ); + + +/** Retrieve the index of the default input device. The result can be + used in the inputDevice parameter to Pa_OpenStream(). + + @return The default input device index for the default host API, or paNoDevice + if no default input device is available or an error was encountered. +*/ +PaDeviceIndex Pa_GetDefaultInputDevice( void ); + + +/** Retrieve the index of the default output device. The result can be + used in the outputDevice parameter to Pa_OpenStream(). + + @return The default output device index for the defualt host API, or paNoDevice + if no default output device is available or an error was encountered. + + @note + On the PC, the user can specify a default device by + setting an environment variable. For example, to use device #1. +
+ set PA_RECOMMENDED_OUTPUT_DEVICE=1
+
+ The user should first determine the available device ids by using + the supplied application "pa_devs". +*/ +PaDeviceIndex Pa_GetDefaultOutputDevice( void ); + + +/** The type used to represent monotonic time in seconds that can be used + for syncronisation. The type is used for the outTime argument to the + PaStreamCallback and as the result of Pa_GetStreamTime(). + + @see PaStreamCallback, Pa_GetStreamTime +*/ +typedef double PaTime; + + +/** A type used to specify one or more sample formats. Each value indicates + a possible format for sound data passed to and from the stream callback, + Pa_ReadStream and Pa_WriteStream. + + The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 + and aUInt8 are usually implemented by all implementations. + + The floating point representation (paFloat32) uses +1.0 and -1.0 as the + maximum and minimum respectively. + + paUInt8 is an unsigned 8 bit format where 128 is considered "ground" + + The paNonInterleaved flag indicates that a multichannel buffer is passed + as a set of non-interleaved pointers. + + @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo + @see paFloat32, paInt16, paInt32, paInt24, paInt8 + @see paUInt8, paCustomFormat, paNonInterleaved +*/ +typedef unsigned long PaSampleFormat; + + +#define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ +#define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ +#define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ +#define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ +#define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ +#define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ +#define paCustomFormat ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */ + +#define paNonInterleaved ((PaSampleFormat) 0x80000000) + +/** A structure providing information and capabilities of PortAudio devices. + Devices may support input, output or both input and output. +*/ +typedef struct PaDeviceInfo +{ + int structVersion; /* this is struct version 2 */ + const char *name; + PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/ + + int maxInputChannels; + int maxOutputChannels; + + /* Default latency values for interactive performance. */ + PaTime defaultLowInputLatency; + PaTime defaultLowOutputLatency; + /* Default latency values for robust non-interactive applications (eg. playing sound files). */ + PaTime defaultHighInputLatency; + PaTime defaultHighOutputLatency; + + double defaultSampleRate; +} PaDeviceInfo; + + +/** Retrieve a pointer to a PaDeviceInfo structure containing information + about the specified device. + @return A pointer to an immutable PaDeviceInfo structure. If the device + parameter is out of range the function returns NULL. + + @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) + + @note PortAudio manages the memory referenced by the returned pointer, + the client must not manipulate or free the memory. The pointer is only + guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). + + @see PaDeviceInfo, PaDeviceIndex +*/ +const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); + + +/** Parameters for one direction (input or output) of a stream. +*/ +typedef struct PaStreamParameters +{ + /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) + specifying the device to be used or the special constant + paUseHostApiSpecificDeviceSpecification which indicates that the actual + device(s) to use are specified in hostApiSpecificStreamInfo. + This field must not be set to paNoDevice. + */ + PaDeviceIndex device; + + /** The number of channels of sound to be delivered to the + stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). + It can range from 1 to the value of maxInputChannels in the + PaDeviceInfo record for the device specified by the device parameter. + */ + int channelCount; + + /** The sample format of the buffer provided to the stream callback, + a_ReadStream() or Pa_WriteStream(). It may be any of the formats described + by the PaSampleFormat enumeration. + */ + PaSampleFormat sampleFormat; + + /** The desired latency in seconds. Where practical, implementations should + configure their latency based on these parameters, otherwise they may + choose the closest viable latency instead. Unless the suggested latency + is greater than the absolute upper limit for the device implementations + shouldround the suggestedLatency up to the next practial value - ie to + provide an equal or higher latency than suggestedLatency whereever possibe. + Actual latency values for an open stream may be retrieved using the + inputLatency and outputLatency fields of the PaStreamInfo structure + returned by Pa_GetStreamInfo(). + @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo + */ + PaTime suggestedLatency; + + /** An optional pointer to a host api specific data structure + containing additional information for device setup and/or stream processing. + hostApiSpecificStreamInfo is never required for correct operation, + if not used it should be set to NULL. + */ + void *hostApiSpecificStreamInfo; + +} PaStreamParameters; + + +/** Return code for Pa_IsFormatSupported indicating success. */ +#define paFormatIsSupported (0) + +/** Determine whether it would be possible to open a stream with the specified + parameters. + + @param inputParameters A structure that describes the input parameters used to + open a stream. The suggestedLatency field is ignored. See PaStreamParameters + for a description of these parameters. inputParameters must be NULL for + output-only streams. + + @param outputParameters A structure that describes the output parameters used + to open a stream. The suggestedLatency field is ignored. See PaStreamParameters + for a description of these parameters. outputParameters must be NULL for + input-only streams. + + @param sampleRate The required sampleRate. For full-duplex streams it is the + sample rate for both input and output + + @return Returns 0 if the format is supported, and an error code indicating why + the format is not supported otherwise. The constant paFormatIsSupported is + provided to compare with the return value for success. + + @see paFormatIsSupported, PaStreamParameters +*/ +PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); + + + +/* Streaming types and functions */ + + +/** + A single PaStream can provide multiple channels of real-time + streaming audio input and output to a client application. A stream + provides access to audio hardware represented by one or more + PaDevices. Depending on the underlying Host API, it may be possible + to open multiple streams using the same device, however this behavior + is implementation defined. Portable applications should assume that + a PaDevice may be simultaneously used by at most one PaStream. + + Pointers to PaStream objects are passed between PortAudio functions that + operate on streams. + + @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, + Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, + Pa_GetStreamTime, Pa_GetStreamCpuLoad + +*/ +typedef void PaStream; + + +/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() + or Pa_OpenDefaultStream() to indicate that the stream callback will + accept buffers of any size. +*/ +#define paFramesPerBufferUnspecified (0) + + +/** Flags used to control the behavior of a stream. They are passed as + parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be + ORed together. + + @see Pa_OpenStream, Pa_OpenDefaultStream + @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, + paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags +*/ +typedef unsigned long PaStreamFlags; + +/** @see PaStreamFlags */ +#define paNoFlag ((PaStreamFlags) 0) + +/** Disable default clipping of out of range samples. + @see PaStreamFlags +*/ +#define paClipOff ((PaStreamFlags) 0x00000001) + +/** Disable default dithering. + @see PaStreamFlags +*/ +#define paDitherOff ((PaStreamFlags) 0x00000002) + +/** Flag requests that where possible a full duplex stream will not discard + overflowed input samples without calling the stream callback. This flag is + only valid for full duplex callback streams and only when used in combination + with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using + this flag incorrectly results in a paInvalidFlag error being returned from + Pa_OpenStream and Pa_OpenDefaultStream. + + @see PaStreamFlags, paFramesPerBufferUnspecified +*/ +#define paNeverDropInput ((PaStreamFlags) 0x00000004) + +/** Call the stream callback to fill initial output buffers, rather than the + default behavior of priming the buffers with zeros (silence). This flag has + no effect for input-only and blocking read/write streams. + + @see PaStreamFlags +*/ +#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) + +/** A mask specifying the platform specific bits. + @see PaStreamFlags +*/ +#define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) + +/** + Timing information for the buffers passed to the stream callback. +*/ +typedef struct PaStreamCallbackTimeInfo{ + PaTime inputBufferAdcTime; + PaTime currentTime; + PaTime outputBufferDacTime; +} PaStreamCallbackTimeInfo; + + +/** + Flag bit constants for the statusFlags to PaStreamCallback. + + @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, + paPrimingOutput +*/ +typedef unsigned long PaStreamCallbackFlags; + +/** In a stream opened with paFramesPerBufferUnspecified, indicates that + input data is all silence (zeros) because no real data is available. In a + stream opened without paFramesPerBufferUnspecified, it indicates that one or + more zero samples have been inserted into the input buffer to compensate + for an input underflow. + @see PaStreamCallbackFlags +*/ +#define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) + +/** In a stream opened with paFramesPerBufferUnspecified, indicates that data + prior to the first sample of the input buffer was discarded due to an + overflow, possibly because the stream callback is using too much CPU time. + Otherwise indicates that data prior to one or more samples in the + input buffer was discarded. + @see PaStreamCallbackFlags +*/ +#define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) + +/** Indicates that output data (or a gap) was inserted, possibly because the + stream callback is using too much CPU time. + @see PaStreamCallbackFlags +*/ +#define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) + +/** Indicates that output data will be discarded because no room is available. + @see PaStreamCallbackFlags +*/ +#define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) + +/** Some of all of the output data will be used to prime the stream, input + data may be zero. + @see PaStreamCallbackFlags +*/ +#define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) + +/** + Allowable return values for the PaStreamCallback. + @see PaStreamCallback +*/ +typedef enum PaStreamCallbackResult +{ + paContinue=0, + paComplete=1, + paAbort=2 +} PaStreamCallbackResult; + + +/** + Functions of type PaStreamCallback are implemented by PortAudio clients. + They consume, process or generate audio in response to requests from an + active PortAudio stream. + + @param input and @param output are arrays of interleaved samples, + the format, packing and number of channels used by the buffers are + determined by parameters to Pa_OpenStream(). + + @param frameCount The number of sample frames to be processed by + the stream callback. + + @param timeInfo The time in seconds when the first sample of the input + buffer was received at the audio input, the time in seconds when the first + sample of the output buffer will begin being played at the audio output, and + the time in seconds when the stream callback was called. + See also Pa_GetStreamTime() + + @param statusFlags Flags indicating whether input and/or output buffers + have been inserted or will be dropped to overcome underflow or overflow + conditions. + + @param userData The value of a user supplied pointer passed to + Pa_OpenStream() intended for storing synthesis data etc. + + @return + The stream callback should return one of the values in the + PaStreamCallbackResult enumeration. To ensure that the callback continues + to be called, it should return paContinue (0). Either paComplete or paAbort + can be returned to finish stream processing, after either of these values is + returned the callback will not be called again. If paAbort is returned the + stream will finish as soon as possible. If paComplete is returned, the stream + will continue until all buffers generated by the callback have been played. + This may be useful in applications such as soundfile players where a specific + duration of output is required. However, it is not necessary to utilise this + mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also + be used to stop the stream. The callback must always fill the entire output + buffer irrespective of its return value. + + @see Pa_OpenStream, Pa_OpenDefaultStream + + @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call + PortAudio API functions from within the stream callback. +*/ +typedef int PaStreamCallback( + const void *input, void *output, + unsigned long frameCount, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ); + + +/** Opens a stream for either input, output or both. + + @param stream The address of a PaStream pointer which will receive + a pointer to the newly opened stream. + + @param inputParameters A structure that describes the input parameters used by + the opened stream. See PaStreamParameters for a description of these parameters. + inputParameters must be NULL for output-only streams. + + @param outputParameters A structure that describes the output parameters used by + the opened stream. See PaStreamParameters for a description of these parameters. + outputParameters must be NULL for input-only streams. + + @param sampleRate The desired sampleRate. For full-duplex streams it is the + sample rate for both input and output + + @param framesPerBuffer The number of frames passed to the stream callback + function, or the preferred block granularity for a blocking read/write stream. + The special value paFramesPerBufferUnspecified (0) may be used to request that + the stream callback will recieve an optimal (and possibly varying) number of + frames based on host requirements and the requested latency settings. + Note: With some host APIs, the use of non-zero framesPerBuffer for a callback + stream may introduce an additional layer of buffering which could introduce + additional latency. PortAudio guarantees that the additional latency + will be kept to the theoretical minimum however, it is strongly recommended + that a non-zero framesPerBuffer value only be used when your algorithm + requires a fixed number of frames per stream callback. + + @param streamFlags Flags which modify the behaviour of the streaming process. + This parameter may contain a combination of flags ORed together. Some flags may + only be relevant to certain buffer formats. + + @param streamCallback A pointer to a client supplied function that is responsible + for processing and filling input and output buffers. If this parameter is NULL + the stream will be opened in 'blocking read/write' mode. In blocking mode, + the client can receive sample data using Pa_ReadStream and write sample data + using Pa_WriteStream, the number of samples that may be read or written + without blocking is returned by Pa_GetStreamReadAvailable and + Pa_GetStreamWriteAvailable respectively. + + @param userData A client supplied pointer which is passed to the stream callback + function. It could for example, contain a pointer to instance data necessary + for processing the audio buffers. This parameter is ignored if streamCallback + is NULL. + + @return + Upon success Pa_OpenStream() returns paNoError and places a pointer to a + valid PaStream in the stream argument. The stream is inactive (stopped). + If a call to Pa_OpenStream() fails, a non-zero error code is returned (see + PaError for possible error codes) and the value of stream is invalid. + + @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, + Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable +*/ +PaError Pa_OpenStream( PaStream** stream, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); + + +/** A simplified version of Pa_OpenStream() that opens the default input + and/or output devices. + + @param stream The address of a PaStream pointer which will receive + a pointer to the newly opened stream. + + @param numInputChannels The number of channels of sound that will be supplied + to the stream callback or returned by Pa_ReadStream. It can range from 1 to + the value of maxInputChannels in the PaDeviceInfo record for the default input + device. If 0 the stream is opened as an output-only stream. + + @param numOutputChannels The number of channels of sound to be delivered to the + stream callback or passed to Pa_WriteStream. It can range from 1 to the value + of maxOutputChannels in the PaDeviceInfo record for the default output dvice. + If 0 the stream is opened as an output-only stream. + + @param sampleFormat The sample format of both the input and output buffers + provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. + sampleFormat may be any of the formats described by the PaSampleFormat + enumeration. + + @param sampleRate Same as Pa_OpenStream parameter of the same name. + @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. + @param streamCallback Same as Pa_OpenStream parameter of the same name. + @param userData Same as Pa_OpenStream parameter of the same name. + + @return As for Pa_OpenStream + + @see Pa_OpenStream, PaStreamCallback +*/ +PaError Pa_OpenDefaultStream( PaStream** stream, + int numInputChannels, + int numOutputChannels, + PaSampleFormat sampleFormat, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamCallback *streamCallback, + void *userData ); + + +/** Closes an audio stream. If the audio stream is active it + discards any pending buffers as if Pa_AbortStream() had been called. +*/ +PaError Pa_CloseStream( PaStream *stream ); + + +/** Functions of type PaStreamFinishedCallback are implemented by PortAudio + clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback + function. Once registered they are called when the stream becomes inactive + (ie once a call to Pa_StopStream() will not block). + A stream will become inactive after the stream callback returns non-zero, + or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio + output, if the stream callback returns paComplete, or Pa_StopStream is called, + the stream finished callback will not be called until all generated sample data + has been played. + + @param userData The userData parameter supplied to Pa_OpenStream() + + @see Pa_SetStreamFinishedCallback +*/ +typedef void PaStreamFinishedCallback( void *userData ); + + +/** Register a stream finished callback function which will be called when the + stream becomes inactive. See the description of PaStreamFinishedCallback for + further details about when the callback will be called. + + @param stream a pointer to a PaStream that is in the stopped state - if the + stream is not stopped, the stream's finished callback will remain unchanged + and an error code will be returned. + + @param streamFinishedCallback a pointer to a function with the same signature + as PaStreamFinishedCallback, that will be called when the stream becomes + inactive. Passing NULL for this parameter will un-register a previously + registered stream finished callback function. + + @return on success returns paNoError, otherwise an error code indicating the cause + of the error. + + @see PaStreamFinishedCallback +*/ +PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); + + +/** Commences audio processing. +*/ +PaError Pa_StartStream( PaStream *stream ); + + +/** Terminates audio processing. It waits until all pending + audio buffers have been played before it returns. +*/ +PaError Pa_StopStream( PaStream *stream ); + + +/** Terminates audio processing immediately without waiting for pending + buffers to complete. +*/ +PaError Pa_AbortStream( PaStream *stream ); + + +/** Determine whether the stream is stopped. + A stream is considered to be stopped prior to a successful call to + Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. + If a stream callback returns a value other than paContinue the stream is NOT + considered to be stopped. + + @return Returns one (1) when the stream is stopped, zero (0) when + the stream is running or, a PaErrorCode (which are always negative) if + PortAudio is not initialized or an error is encountered. + + @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive +*/ +PaError Pa_IsStreamStopped( PaStream *stream ); + + +/** Determine whether the stream is active. + A stream is active after a successful call to Pa_StartStream(), until it + becomes inactive either as a result of a call to Pa_StopStream() or + Pa_AbortStream(), or as a result of a return value other than paContinue from + the stream callback. In the latter case, the stream is considered inactive + after the last buffer has finished playing. + + @return Returns one (1) when the stream is active (ie playing or recording + audio), zero (0) when not playing or, a PaErrorCode (which are always negative) + if PortAudio is not initialized or an error is encountered. + + @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped +*/ +PaError Pa_IsStreamActive( PaStream *stream ); + + + +/** A structure containing unchanging information about an open stream. + @see Pa_GetStreamInfo +*/ + +typedef struct PaStreamInfo +{ + /** this is struct version 1 */ + int structVersion; + + /** The input latency of the stream in seconds. This value provides the most + accurate estimate of input latency available to the implementation. It may + differ significantly from the suggestedLatency value passed to Pa_OpenStream(). + The value of this field will be zero (0.) for output-only streams. + @see PaTime + */ + PaTime inputLatency; + + /** The output latency of the stream in seconds. This value provides the most + accurate estimate of output latency available to the implementation. It may + differ significantly from the suggestedLatency value passed to Pa_OpenStream(). + The value of this field will be zero (0.) for input-only streams. + @see PaTime + */ + PaTime outputLatency; + + /** The sample rate of the stream in Hertz (samples per second). In cases + where the hardware sample rate is inaccurate and PortAudio is aware of it, + the value of this field may be different from the sampleRate parameter + passed to Pa_OpenStream(). If information about the actual hardware sample + rate is not available, this field will have the same value as the sampleRate + parameter passed to Pa_OpenStream(). + */ + double sampleRate; + +} PaStreamInfo; + + +/** Retrieve a pointer to a PaStreamInfo structure containing information + about the specified stream. + @return A pointer to an immutable PaStreamInfo structure. If the stream + parameter invalid, or an error is encountered, the function returns NULL. + + @param stream A pointer to an open stream previously created with Pa_OpenStream. + + @note PortAudio manages the memory referenced by the returned pointer, + the client must not manipulate or free the memory. The pointer is only + guaranteed to be valid until the specified stream is closed. + + @see PaStreamInfo +*/ +const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); + + +/** Determine the current time for the stream according to the same clock used + to generate buffer timestamps. This time may be used for syncronising other + events to the audio stream, for example synchronizing audio to MIDI. + + @return The stream's current time in seconds, or 0 if an error occurred. + + @see PaTime, PaStreamCallback +*/ +PaTime Pa_GetStreamTime( PaStream *stream ); + + +/** Retrieve CPU usage information for the specified stream. + The "CPU Load" is a fraction of total CPU time consumed by a callback stream's + audio processing routines including, but not limited to the client supplied + stream callback. This function does not work with blocking read/write streams. + + This function may be called from the stream callback function or the + application. + + @return + A floating point value, typically between 0.0 and 1.0, where 1.0 indicates + that the stream callback is consuming the maximum number of CPU cycles possible + to maintain real-time operation. A value of 0.5 would imply that PortAudio and + the stream callback was consuming roughly 50% of the available CPU time. The + return value may exceed 1.0. A value of 0.0 will always be returned for a + blocking read/write stream, or if an error occurrs. +*/ +double Pa_GetStreamCpuLoad( PaStream* stream ); + + +/** Read samples from an input stream. The function doesn't return until + the entire buffer has been filled - this may involve waiting for the operating + system to supply the data. + + @param stream A pointer to an open stream previously created with Pa_OpenStream. + + @param buffer A pointer to a buffer of sample frames. The buffer contains + samples in the format specified by the inputParameters->sampleFormat field + used to open the stream, and the number of channels specified by + inputParameters->numChannels. If non-interleaved samples were requested, + buffer is a pointer to the first element of an array of non-interleaved + buffer pointers, one for each channel. + + @param frames The number of frames to be read into buffer. This parameter + is not constrained to a specific range, however high performance applications + will want to match this parameter to the framesPerBuffer parameter used + when opening the stream. + + @return On success PaNoError will be returned, or PaInputOverflowed if input + data was discarded by PortAudio after the previous call and before this call. +*/ +PaError Pa_ReadStream( PaStream* stream, + void *buffer, + unsigned long frames ); + + +/** Write samples to an output stream. This function doesn't return until the + entire buffer has been consumed - this may involve waiting for the operating + system to consume the data. + + @param stream A pointer to an open stream previously created with Pa_OpenStream. + + @param buffer A pointer to a buffer of sample frames. The buffer contains + samples in the format specified by the outputParameters->sampleFormat field + used to open the stream, and the number of channels specified by + outputParameters->numChannels. If non-interleaved samples were requested, + buffer is a pointer to the first element of an array of non-interleaved + buffer pointers, one for each channel. + + @param frames The number of frames to be written from buffer. This parameter + is not constrained to a specific range, however high performance applications + will want to match this parameter to the framesPerBuffer parameter used + when opening the stream. + + @return On success PaNoError will be returned, or paOutputUnderflowed if + additional output data was inserted after the previous call and before this + call. +*/ +PaError Pa_WriteStream( PaStream* stream, + const void *buffer, + unsigned long frames ); + + +/** Retrieve the number of frames that can be read from the stream without + waiting. + + @return Returns a non-negative value representing the maximum number of frames + that can be read from the stream without blocking or busy waiting or, a + PaErrorCode (which are always negative) if PortAudio is not initialized or an + error is encountered. +*/ +signed long Pa_GetStreamReadAvailable( PaStream* stream ); + + +/** Retrieve the number of frames that can be written to the stream without + waiting. + + @return Returns a non-negative value representing the maximum number of frames + that can be written to the stream without blocking or busy waiting or, a + PaErrorCode (which are always negative) if PortAudio is not initialized or an + error is encountered. +*/ +signed long Pa_GetStreamWriteAvailable( PaStream* stream ); + + +/* Miscellaneous utilities */ + + +/** Retrieve the size of a given sample format in bytes. + + @return The size in bytes of a single sample in the specified format, + or paSampleFormatNotSupported if the format is not supported. +*/ +PaError Pa_GetSampleSize( PaSampleFormat format ); + + +/** Put the caller to sleep for at least 'msec' milliseconds. This function is + provided only as a convenience for authors of portable code (such as the tests + and examples in the PortAudio distribution.) + + The function may sleep longer than requested so don't rely on this for accurate + musical timing. +*/ +void Pa_Sleep( long msec ); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PORTAUDIO_H */ diff --git a/lib/ft2/ptt.c b/lib/ft2/ptt.c new file mode 100644 index 000000000..fdda4ff97 --- /dev/null +++ b/lib/ft2/ptt.c @@ -0,0 +1,58 @@ +#include +#include + +int ptt_(int *nport, int *ntx, int *ndtr, int *iptt) +{ + static HANDLE hFile; + static int open=0, nhold=0; + char s[10]; + int i3,i4,i5,i6,i9,i00; + + if(*nport==0) { + *iptt=*ntx; + return(0); + } + + nhold=0; + if(*nport>100) nhold=1; + + if(*ntx && (!open)) { + sprintf(s,"\\\\.\\COM%d",*nport%100); + hFile=CreateFile( + TEXT(s), + GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + if(hFile==INVALID_HANDLE_VALUE) { + printf("PTT: Cannot open COM port %d.\n",*nport%100); + return(-1); + } + open=1; + } + + if(*ntx && open) { + if(*ndtr) + EscapeCommFunction(hFile,5); //set DTR + else + EscapeCommFunction(hFile,3); //set RTS + *iptt=1; + } + + else { + if(*ndtr) + EscapeCommFunction(hFile,6); //clear DTR + else + EscapeCommFunction(hFile,4); //clear RTS + EscapeCommFunction(hFile,9); //clear BREAK + if(nhold==0) { + i00=CloseHandle(hFile); + open=0; + } + *iptt=0; + } + return(0); +} diff --git a/lib/ft2/ptt_unix.c b/lib/ft2/ptt_unix.c new file mode 100644 index 000000000..b16380608 --- /dev/null +++ b/lib/ft2/ptt_unix.c @@ -0,0 +1,341 @@ +#include +#include +#include +#include +#include +#include +//#include +//#include +//#include +//#include +//#include + +int lp_reset (int fd); +int lp_ptt (int fd, int onoff); + +#ifdef HAVE_SYS_STAT_H +# include +#endif +#if (defined(__unix__) || defined(unix)) && !defined(USG) +# include +#endif + +#include +/* parport functions */ + +int dev_is_parport(int fd); +int ptt_parallel(int fd, int *ntx, int *iptt); +int ptt_serial(int fd, int *ntx, int *iptt); + +int fd=-1; /* Used for both serial and parallel */ + +/* + * ptt_ + * + * generic unix PTT routine called from Fortran + * + * Inputs + * unused Unused, to satisfy old windows calling convention + * ptt_port device name serial or parallel + * ntx pointer to fortran command on or off + * iptt pointer to fortran command status on or off + * Returns - non 0 if error +*/ + +/* Tiny state machine */ +#define STATE_PORT_CLOSED 0 +#define STATE_PORT_OPEN_PARALLEL 1 +#define STATE_PORT_OPEN_SERIAL 2 + +int +ptt_(int *unused, char *ptt_port, int *ntx, int *ndtr, int *iptt) +{ + static int state=0; + char *p; + + /* In the very unlikely event of a NULL pointer, just return. + * Yes, I realise this should not be possible in WSJT. + */ + if (ptt_port == NULL) { + *iptt = *ntx; + return (0); + } + + switch (state) { + case STATE_PORT_CLOSED: + + /* Remove trailing ' ' */ + if ((p = strchr(ptt_port, ' ')) != NULL) + *p = '\0'; + + /* If all that is left is a '\0' then also just return */ + if (*ptt_port == '\0') { + *iptt = *ntx; + return(0); + } + + if ((fd = open(ptt_port, O_RDWR|O_NONBLOCK)) < 0) { + fprintf(stderr, "Can't open %s.\n", ptt_port); + return (1); + } + + if (dev_is_parport(fd)) { + state = STATE_PORT_OPEN_PARALLEL; + lp_reset(fd); + ptt_parallel(fd, ntx, iptt); + } else { + state = STATE_PORT_OPEN_SERIAL; + ptt_serial(fd, ntx, iptt); + } + break; + + case STATE_PORT_OPEN_PARALLEL: + ptt_parallel(fd, ntx, iptt); + break; + + case STATE_PORT_OPEN_SERIAL: + ptt_serial(fd, ntx, iptt); + break; + + default: + close(fd); + fd = -1; + state = STATE_PORT_CLOSED; + break; + } + return(0); +} + +/* + * ptt_serial + * + * generic serial unix PTT routine called indirectly from Fortran + * + * fd - already opened file descriptor + * ntx - pointer to fortran command on or off + * iptt - pointer to fortran command status on or off + */ + +int +ptt_serial(int fd, int *ntx, int *iptt) +{ + int control = TIOCM_RTS | TIOCM_DTR; + + if(*ntx) { + ioctl(fd, TIOCMBIS, &control); /* Set DTR and RTS */ + *iptt = 1; + } else { + ioctl(fd, TIOCMBIC, &control); + *iptt = 0; + } + return(0); +} + + +/* parport functions */ + +/* + * dev_is_parport(fd): + * + * inputs - Already open fd + * output - 1 if parallel port, 0 if not + * side effects - Unfortunately, this is platform specific. + */ + +#if defined(HAVE_LINUX_PPDEV_H) /* Linux (ppdev) */ + +int +dev_is_parport(int fd) +{ + struct stat st; + int m; + + if ((fstat(fd, &st) == -1) || + ((st.st_mode & S_IFMT) != S_IFCHR) || + (ioctl(fd, PPGETMODE, &m) == -1)) + return(0); + + return(1); +} + +#elif defined(HAVE_DEV_PPBUS_PPI_H) /* FreeBSD (ppbus/ppi) */ + +int +dev_is_parport(int fd) +{ + struct stat st; + unsigned char c; + + if ((fstat(fd, &st) == -1) || + ((st.st_mode & S_IFMT) != S_IFCHR) || + (ioctl(fd, PPISSTATUS, &c) == -1)) + return(0); + + return(1); +} + +#else /* Fallback (nothing) */ + +int +dev_is_parport(int fd) +{ + return(0); +} + +#endif +/* Linux wrapper around PPFCONTROL */ +#ifdef HAVE_LINUX_PPDEV_H +static void +parport_control (int fd, unsigned char controlbits, int values) +{ + struct ppdev_frob_struct frob; + frob.mask = controlbits; + frob.val = values; + + if (ioctl (fd, PPFCONTROL, &frob) == -1) + { + fprintf(stderr, "Parallel port PPFCONTROL"); + exit (1); + } +} +#endif + +/* FreeBSD wrapper around PPISCTRL */ +#ifdef HAVE_DEV_PPBUS_PPI_H +static void +parport_control (int fd, unsigned char controlbits, int values) +{ + unsigned char val; + + if (ioctl (fd, PPIGCTRL, &val) == -1) + { + fprintf(stderr, "Parallel port PPIGCTRL"); + exit (1); + } + + val &= ~controlbits; + val |= values; + + if (ioctl (fd, PPISCTRL, &val) == -1) + { + fprintf(stderr, "Parallel port PPISCTRL"); + exit (1); + } +} +#endif + +/* Initialise a parallel port, given open fd */ +int +lp_init (int fd) +{ +#ifdef HAVE_LINUX_PPDEV_H + int mode; +#endif + +#ifdef HAVE_LINUX_PPDEV_H + mode = PARPORT_MODE_PCSPP; + + if (ioctl (fd, PPSETMODE, &mode) == -1) + { + fprintf(stderr, "Setting parallel port mode"); + close (fd); + return(-1); + } + + if (ioctl (fd, PPEXCL, NULL) == -1) + { + fprintf(stderr, "Parallel port is already in use.\n"); + close (fd); + return(-1); + } + if (ioctl (fd, PPCLAIM, NULL) == -1) + { + fprintf(stderr, "Claiming parallel port.\n"); + fprintf(stderr, "HINT: did you unload the lp kernel module?"); + close (fd); + return(-1); + } + + /* Enable CW & PTT - /STROBE bit (pin 1) */ + parport_control (fd, PARPORT_CONTROL_STROBE, PARPORT_CONTROL_STROBE); +#endif +#ifdef HAVE_DEV_PPBUS_PPI_H + parport_control (fd, STROBE, STROBE); +#endif + lp_reset (fd); + return(0); +} + +/* release ppdev and close port */ +int +lp_free (int fd) +{ +#ifdef HAVE_LINUX_PPDEV_H + lp_reset (fd); + + /* Disable CW & PTT - /STROBE bit (pin 1) */ + parport_control (fd, PARPORT_CONTROL_STROBE, 0); + + ioctl (fd, PPRELEASE); +#endif +#ifdef HAVE_DEV_PPBUS_PPI_H + /* Disable CW & PTT - /STROBE bit (pin 1) */ + parport_control (fd, STROBE, 0); +#endif + close (fd); + return(0); +} + +/* set to a known state */ +int +lp_reset (int fd) +{ +#if defined (HAVE_LINUX_PPDEV_H) || defined (HAVE_DEV_PPBUS_PPI_H) + lp_ptt (fd, 0); +#endif + return(0); +} + +/* SSB PTT keying - /INIT bit (pin 16) (inverted) */ +int +lp_ptt (int fd, int onoff) +{ +#ifdef HAVE_LINUX_PPDEV_H + if (onoff == 1) + parport_control (fd, PARPORT_CONTROL_INIT, + PARPORT_CONTROL_INIT); + else + parport_control (fd, PARPORT_CONTROL_INIT, 0); +#endif +#ifdef HAVE_DEV_PPBUS_PPI_H + if (onoff == 1) + parport_control (fd, nINIT, + nINIT); + else + parport_control (fd, nINIT, 0); +#endif + return(0); +} + +/* + * ptt_parallel + * + * generic parallel unix PTT routine called indirectly from Fortran + * + * fd - already opened file descriptor + * ntx - pointer to fortran command on or off + * iptt - pointer to fortran command status on or off + */ + +int +ptt_parallel(int fd, int *ntx, int *iptt) +{ + if(*ntx) { + lp_ptt(fd, 1); + *iptt=1; + } else { + lp_ptt(fd, 0); + *iptt=0; + } + return(0); +} From bbbe83ffe500617e1ae2aee480f29c9393ae4db8 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 15 Jan 2019 15:05:04 -0500 Subject: [PATCH 010/367] Progress: ft2.exe is now basically functional in audio-loopback tests. --- lib/ft2/ft2.f90 | 73 +++++++++++++++++++------------------- lib/ft2/ft2_decode.f90 | 11 +++--- lib/ft2/ft2_iwave.f90 | 46 ++++++++++++------------ lib/ft2/ft2audio.c | 31 +++++++++++----- lib/ft2/g4.cmd | 2 +- lib/ft2/gcom1.f90 | 2 +- lib/ft2/getcandidates2.f90 | 6 ++-- 7 files changed, 93 insertions(+), 78 deletions(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index 204a8a78f..21e5d154d 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -6,7 +6,7 @@ program ft2 logical allok character*20 pttport character*8 arg - integer*2 iwave2(30000) +! integer*2 iwave2(30000) allok=.true. ! Get home-station details @@ -38,7 +38,7 @@ program ft2 nwave=NTZ nfsample=12000 ngo=1 - npabuf=1280 + npabuf=1152 ntxok=0 ntransmitting=0 tx_once=.false. @@ -52,25 +52,16 @@ program ft2 read(arg,*) f0 call getarg(3,arg) read(arg,*) snrdb - nTxOK=1 tx_once=.true. call ft2_iwave(txmsg,f0,snrdb,iwave) + nTxOK=1 endif - - iwave2(1:23040)=iwave - iwave2(23041:30000)=0 - nutc=0 - nfqso=nint(f0) - call ft2_decode(nutc,nfqso,iwave2) - +! Start the audio streams ierr=ft2audio(idevin,idevout,npabuf,nright,y1,y2,NRING,iwrite,itx, & iwave,nwave,nfsample,nTxOK,nTransmitting,ngo) if(ierr.ne.0) then - print*,'Error',ierr,' in JTaudio, you will only be able to work offline.' - else - write(*,1006) -1006 format('Audio streams terminated normally.') + print*,'Error',ierr,' starting audio input and/or output.' endif 999 end program ft2 @@ -78,33 +69,31 @@ program ft2 subroutine update(total_time,ic1,ic2) real*8 total_time + integer*8 count00,count0,count1,clkfreq integer ptt + integer*2 id(30000) logical transmitted - integer*2 id(30000),id2(30000) + character*30 line + character cdate*8,ctime*10,cdatetime*17 include 'gcom1.f90' - data nt0/-1/,transmitted/.false./,snr/0.0/ - save nt0,transmitted,snr + data nt0/-1/,transmitted/.false./,snr/-99.0/,count00/-1/ + save nt0,transmitted,snr,count00 if(ic1.ne.0 .or. ic2.ne.0) then if(ic1.eq.27 .and. ic2.eq.0) ngo=0 !ESC if(nTxOK.eq.0 .and. ntransmitting.eq.0) then nd=0 - if(ic1.eq.0 .and. ic2.eq.59) nd=7 !F1 - if(ic1.eq.0 .and. ic2.eq.60) nd=6 !F2 - if(ic1.eq.0 .and. ic2.eq.61) nd=5 !F3 + if(ic1.eq.0 .and. ic2.eq.59) nd=1 !F1 + if(ic1.eq.0 .and. ic2.eq.60) nd=2 !F2 + if(ic1.eq.0 .and. ic2.eq.61) nd=3 !F3 if(ic1.eq.0 .and. ic2.eq.62) nd=4 !F4 - if(ic1.eq.0 .and. ic2.eq.63) nd=3 !F5 + if(ic1.eq.0 .and. ic2.eq.63) nd=5 !F5 if(nd.gt.0) then i1=ptt(nport,1,1,iptt) ntxok=1 - n=1000 - nwave=NTZ - do i=1,nwave/nd - ib=i*nd - ia=ib-nd+1 - iwave(ia:ib)=n - n=-n - enddo + if(nd.eq.1) txmsg='CQ K1JT FN20' + if(nd.eq.2) txmsg='K9AN K1JT 559 NJ' + call ft2_iwave(txmsg,1500.0,99.0,iwave) endif endif if(ic1.eq.13 .and. ic2.eq.0) hiscall=hiscall_next @@ -138,13 +127,25 @@ subroutine update(total_time,ic1,ic2) enddo nutc=0 nfqso=1500 - call ft2_iwave(txmsg,1500.0,snr,id2) !### - snr=snr-1.0 - call ft2_decode(nutc,nfqso,id2) !### -!### call ft2_decode(nutc,nfqso,id) - - write(*,1010) nt,total_time,iwrite,itx,ntxok,ntransmitting,sigdb,snr -1010 format(i6,f9.3,4i6,f6.1,f6.0) + ndecodes=0 + if(maxval(abs(id)).gt.0) then + call date_and_time(cdate,ctime) + cdatetime=cdate(3:8)//'_'//ctime + call system_clock(count0,clkfreq) + call ft2_decode(cdatetime,nfqso,id,ndecodes) + call system_clock(count1,clkfreq) + tdecode=float(count1-count0)/float(clkfreq) + if(count00.lt.0) count00=count0 + trun=float(count1-count00)/float(clkfreq) + endif + n=2*sigdb-30.0 + if(n.lt.1) n=1 + if(n.gt.30) n=30 + line=' ' + line(n:n)='*' +! write(*,1010) nt,total_time,iwrite,itx,ntxok,ntransmitting,ndecodes, & +! snr,sigdb,line +!1010 format(i6,f9.3,i10,i6,3i3,f6.0,f6.1,1x,a30) nt0=nt max1=0 max2=0 diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index 5647c8d02..74cab3ee4 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -1,4 +1,4 @@ -subroutine ft2_decode(nutc,nfqso,iwave) +subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) use crc use packjt77 @@ -6,6 +6,7 @@ subroutine ft2_decode(nutc,nfqso,iwave) character message*37,c77*77 character*37 decodes(100) character*120 data_dir + character*17 cdatetime complex c2(0:NMAX/16-1) !Complex waveform complex cb(0:NMAX/16-1) complex cd(0:144*10-1) !Complex waveform @@ -27,7 +28,7 @@ subroutine ft2_decode(nutc,nfqso,iwave) integer*1 s16(16) logical unpk77_success data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ - + fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) tt=NSPS*dt !Duration of "itone" symbols (s) @@ -65,7 +66,6 @@ subroutine ft2_decode(nutc,nfqso,iwave) ndecodes=0 do icand=1,ncand f0=candidate(1,icand) -! print*,'A',ncand,f0 xsnr=1.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol @@ -194,15 +194,16 @@ subroutine ft2_decode(nutc,nfqso,iwave) decodes(ndecodes)=message nsnr=nint(xsnr) freq=f0+dfbest - write(*,1212) nutc,nsnr,ibest/750.0,nint(freq),message, & + write(*,1212) cdatetime,nsnr,ibest/750.0,nint(freq),message, & nseq,nharderror,nhardmin -1212 format(i4.4,i4,f6.2,i6,2x,a37,3i5) +1212 format(a17,i4,f6.2,i6,2x,a37,3i5) goto 888 endif enddo ! nseq 888 continue enddo !candidate list + return end subroutine ft2_decode subroutine getbitmetric(ib,ps,ns,xmet) diff --git a/lib/ft2/ft2_iwave.f90 b/lib/ft2/ft2_iwave.f90 index 94445545d..10b9908de 100644 --- a/lib/ft2/ft2_iwave.f90 +++ b/lib/ft2/ft2_iwave.f90 @@ -6,9 +6,9 @@ subroutine ft2_iwave(msg37,f0,snrdb,iwave) include 'ft2_params.f90' !Set various constants parameter (NWAVE=NN*NSPS) character msg37*37,msgsent37*37 - real wave(NMAX) + real wave(NWAVE),xnoise(NWAVE) integer itone(NN) - integer*2 iwave(NMAX) !Generated full-length waveform + integer*2 iwave(NWAVE) !Generated full-length waveform twopi=8.0*atan(1.0) fs=12000.0 !Sample rate (Hz) @@ -19,8 +19,8 @@ subroutine ft2_iwave(msg37,f0,snrdb,iwave) bw=1.5*baud !Occupied bandwidth (Hz) txt=NZ*dt !Transmission length (s) bandwidth_ratio=2500.0/(fs/2.0) - sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) - if(snrdb.gt.90.0) sig=1.0 +! sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) +! if(snrdb.gt.90.0) sig=1.0 txt=NN*NSPS/12000.0 ! Source-encode, then get itone(): @@ -29,38 +29,36 @@ subroutine ft2_iwave(msg37,f0,snrdb,iwave) k=0 phi=0.0 + sqsig=0. do j=1,NN !Generate real waveform dphi=twopi*(f0*dt+(hmod/2.0)*(2*itone(j)-1)/real(NSPS)) do i=1,NSPS k=k+1 - wave(k)=sig*sin(phi) + wave(k)=sqrt(2.0)*sin(phi) !Signal has rms = 1.0 + sqsig=sqsig + wave(k)**2 phi=mod(phi+dphi,twopi) enddo enddo - kz=k - peak=maxval(abs(wave(1:kz))) -! nslots=1 -! if(width.gt.0.0) call filt8(f0,nslots,width,wave) - + if(snrdb.gt.90.0) then + iwave=nint((32767.0/sqrt(2.0))*wave) + return + endif + + sqnoise=1.e-30 if(snrdb.lt.90) then - do i=1,NMAX !Add gaussian noise at specified SNR - xnoise=gran() - wave(i)=wave(i) + xnoise + do i=1,NWAVE !Add gaussian noise at specified SNR + xnoise(i)=gran() !Noise has rms = 1.0 enddo endif + xnoise=xnoise*sqrt(0.5*fs/2500.0) + fac=30.0 + snr_amplitude=10.0**(0.05*snrdb) + wave=fac*(snr_amplitude*wave + xnoise) + datpk=maxval(abs(wave)) + print*,'A',snr_amplitude,datpk - gain=1.0 - if(snrdb.lt.90.0) then - wave=gain*wave - else - datpk=maxval(abs(wave)) - fac=32767.0/datpk - wave=fac*wave - endif - - if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." - iwave(1:kz)=nint(wave(1:kz)) + iwave=nint((30000.0/datpk)*wave) return end subroutine ft2_iwave diff --git a/lib/ft2/ft2audio.c b/lib/ft2/ft2audio.c index 9d0589d36..3826f4579 100644 --- a/lib/ft2/ft2audio.c +++ b/lib/ft2/ft2audio.c @@ -1,6 +1,7 @@ #include #include "portaudio.h" #include +#include int iaa; int icc; @@ -15,7 +16,7 @@ typedef struct int *Transmitting; int *nwave; int *nright; - int nbuflen; + int nring; int nfs; short *y1; short *y2; @@ -57,10 +58,11 @@ SoundIn( void *inputBuffer, void *outputBuffer, } } - if(ia >= data->nbuflen) ia=0; //Wrap buffer pointer if necessary + if(ia >= data->nring) ia=0; //Wrap buffer pointer if necessary *data->iwrite = ia; //Save buffer pointer iaa=ia; total_time += (double)framesPerBuffer/12000.0; + // printf("iwrite: %d\n",*data->iwrite); return 0; } @@ -78,28 +80,41 @@ SoundOut( void *inputBuffer, void *outputBuffer, static short int n2; static int ic=0; static int TxOKz=0; + static clock_t tstart=-1; + static clock_t tend=-1; + static int nsent=0; // printf("txOK: %d %d\n",TxOKz,*data->TxOK); - if(*data->TxOK && (!TxOKz)) ic=0; - TxOKz=*data->TxOK; - *data->Transmitting=*data->TxOK; + if(*data->TxOK && (!TxOKz)) ic=0; //Reset buffer pointer to start Tx + *data->Transmitting=*data->TxOK; //Set the "transmitting" flag if(*data->TxOK) { + if(!TxOKz) { + // Start of a transmission + tstart=clock(); + nsent=0; + // printf("Start Tx\n"); + } + TxOKz=*data->TxOK; for(i=0 ; i < framesPerBuffer; i++ ) { n2=data->iwave[ic]; *wptr++ = n2; //left *wptr++ = n2; //right ic++; - if(ic >= *data->nwave) { + if(ic > *data->nwave) { *data->TxOK = 0; *data->Transmitting = 0; *data->iwrite = 0; //Reset Rx buffer pointer to 0 ic=0; + tend=clock(); + double TxT=((double)(tend-tstart))/CLOCKS_PER_SEC; + // printf("End Tx, TxT = %f nSent = %d\n",TxT,nsent); break; } } + nsent += framesPerBuffer; } else { memset((void*)outputBuffer, 0, 2*sizeof(short)*framesPerBuffer); } @@ -110,7 +125,7 @@ SoundOut( void *inputBuffer, void *outputBuffer, /*******************************************************************/ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, - short y1[], short y2[], int *nbuflen, int *iwrite, + short y1[], short y2[], int *nring, int *iwrite, int *itx, short iwave[], int *nwave, int *nfsample, int *TxOK, int *Transmitting, int *ngo) @@ -134,7 +149,7 @@ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, data.Transmitting = Transmitting; data.y1 = y1; data.y2 = y2; - data.nbuflen = *nbuflen; + data.nring = *nring; data.nright = nright; data.nwave = nwave; data.iwave = iwave; diff --git a/lib/ft2/g4.cmd b/lib/ft2/g4.cmd index d6d9134e4..5abf200e6 100644 --- a/lib/ft2/g4.cmd +++ b/lib/ft2/g4.cmd @@ -2,5 +2,5 @@ gcc -c ft2audio.c gcc -c ptt.c gfortran -c ../77bit/packjt77.f90 gfortran -c ../crc.f90 -gfortran -o ft2 -fbounds-check -fno-second-underscore -Wall -Wno-conversion -Wno-character-truncation ft2.f90 ft2_iwave.f90 ft2_decode.f90 getcandidates2.f90 ft2audio.o ptt.o libwsjt_fort.a libwsjt_cxx.a libportaudio.a ../libfftw3f_win.a -lwinmm +gfortran -o ft2 -fbounds-check -fno-second-underscore -ffpe-trap=invalid,zero -Wall -Wno-conversion -Wno-character-truncation ft2.f90 ft2_iwave.f90 ft2_decode.f90 getcandidates2.f90 ft2audio.o ptt.o libwsjt_fort.a libwsjt_cxx.a libportaudio.a ../libfftw3f_win.a -lwinmm rm *.o *.mod diff --git a/lib/ft2/gcom1.f90 b/lib/ft2/gcom1.f90 index fa2262127..d4a952e5c 100644 --- a/lib/ft2/gcom1.f90 +++ b/lib/ft2/gcom1.f90 @@ -2,7 +2,7 @@ !--------------------------------------------------------------------------- integer NRING !Length of Rx ring buffer integer NTZ !Length of Tx waveform in samples -parameter(NRING=32768) !About 2.7 s at 12000 sam/sec +parameter(NRING=230400) !Ring buffer at 12000 samples/sec parameter(NTZ=23040) !144*160 parameter(NMAX=30000) !2.5*12000 real snrdb diff --git a/lib/ft2/getcandidates2.f90 b/lib/ft2/getcandidates2.f90 index d7e75097c..dd5dac507 100644 --- a/lib/ft2/getcandidates2.f90 +++ b/lib/ft2/getcandidates2.f90 @@ -43,7 +43,7 @@ subroutine getcandidates2(id,fa,fb,maxcand,savg,candidate,ncand) indx=0 call indexx(savsm(nfa:nfb),np,indx) xn=savsm(nfa+indx(nint(0.3*np))) - savsm=savsm/xn + if(xn.ne.0) savsm=savsm/xn imax=-1 xmax=-99. do i=2,NH1-1 @@ -59,6 +59,6 @@ subroutine getcandidates2(id,fa,fb,maxcand,savg,candidate,ncand) if(ncand.lt.maxcand) ncand=ncand+1 candidate(1,ncand)=f0 endif - -return + + return end subroutine getcandidates2 From 4a4a83f021e3a3eda7a8f4879ef14e74e1131649 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 15 Jan 2019 19:21:58 -0500 Subject: [PATCH 011/367] Correct the logic for PTT control through a Windows COM port. --- lib/ft2/ft2.f90 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index 21e5d154d..7b8af2a27 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -25,7 +25,8 @@ program ft2 idevout=ndevout call padevsub(idevin,idevout) if(idevin.ne.ndevin .or. idevout.ne.ndevout) allok=.false. - i1=ptt(nport,1,1,iptt) + i1=0 +! i1=ptt(nport,1,1,iptt) if(i1.lt.0 .and. nport.ne.0) allok=.false. if(.not.allok) then write(*,"('Please fix setup error(s) and restart.')") @@ -77,7 +78,7 @@ subroutine update(total_time,ic1,ic2) character cdate*8,ctime*10,cdatetime*17 include 'gcom1.f90' data nt0/-1/,transmitted/.false./,snr/-99.0/,count00/-1/ - save nt0,transmitted,snr,count00 + save nt0,transmitted,snr,count00,iptt if(ic1.ne.0 .or. ic2.ne.0) then if(ic1.eq.27 .and. ic2.eq.0) ngo=0 !ESC @@ -100,9 +101,11 @@ subroutine update(total_time,ic1,ic2) endif if(ntransmitting.eq.1) transmitted=.true. - if(ntransmitting.eq.0) then + if(transmitted .and. ntransmitting.eq.0) then + i1=0 if(iptt.eq.1 .and. nport.gt.0) i1=ptt(nport,0,1,iptt) if(tx_once .and. transmitted) stop + transmitted=.false. endif nt=2*total_time From 60fb12dcd44c547a157af59ba86148c78f067f82 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 15 Jan 2019 20:19:18 -0500 Subject: [PATCH 012/367] Add several more messages for testing. --- lib/ft2/ft2.f90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index 7b8af2a27..c77de142f 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -94,7 +94,11 @@ subroutine update(total_time,ic1,ic2) ntxok=1 if(nd.eq.1) txmsg='CQ K1JT FN20' if(nd.eq.2) txmsg='K9AN K1JT 559 NJ' + if(nd.eq.3) txmsg='K9AN K1JT R 559 NJ' + if(nd.eq.4) txmsg='K9AN K1JT RR73' + if(nd.eq.5) txmsg='TNX STEVE 73' call ft2_iwave(txmsg,1500.0,99.0,iwave) + print*,'Tx: ',txmsg endif endif if(ic1.eq.13 .and. ic2.eq.0) hiscall=hiscall_next From f194621695dae6fb04743458660dc2ca2da4a36e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 16 Jan 2019 13:10:36 -0500 Subject: [PATCH 013/367] Many improvements to ft2, including: - SNR displayed on decode line - Separate transmit() subroutine - Output sent to all_ft2.txt - Display Rx level (hit L to toggle On/Off) - Auto-sequencing (hit A to toggle On/Off) --- lib/ft2/ft2.f90 | 171 ++++++++++++++++++++++++++++------------- lib/ft2/ft2_decode.f90 | 37 ++++++--- lib/ft2/ft2audio.c | 42 +++++----- lib/ft2/gcom1.f90 | 8 +- 4 files changed, 172 insertions(+), 86 deletions(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index c77de142f..92280c4bb 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -26,12 +26,13 @@ program ft2 call padevsub(idevin,idevout) if(idevin.ne.ndevin .or. idevout.ne.ndevout) allok=.false. i1=0 -! i1=ptt(nport,1,1,iptt) + i1=ptt(nport,1,0,iptt) if(i1.lt.0 .and. nport.ne.0) allok=.false. if(.not.allok) then write(*,"('Please fix setup error(s) and restart.')") go to 999 endif + open(12,file='all_ft2.txt',status='unknown',position='append') nright=1 iwrite=0 @@ -45,6 +46,11 @@ program ft2 tx_once=.false. snrdb=99.0 txmsg='CQ K1JT FN20' + ltx=.false. + lrx=.false. + autoseq=.false. + QSO_in_progress=.false. + ntxed=0 nargs=iargc() if(nargs.eq.3) then @@ -54,8 +60,8 @@ program ft2 call getarg(3,arg) read(arg,*) snrdb tx_once=.true. - call ft2_iwave(txmsg,f0,snrdb,iwave) - nTxOK=1 + ftx=1500.0 + call transmit(-1,ftx,iptt) endif ! Start the audio streams @@ -70,38 +76,34 @@ program ft2 subroutine update(total_time,ic1,ic2) real*8 total_time - integer*8 count00,count0,count1,clkfreq + integer*8 count0,count1,clkfreq integer ptt integer*2 id(30000) - logical transmitted - character*30 line - character cdate*8,ctime*10,cdatetime*17 + logical transmitted,level + character*70 line + character cdatetime*17 include 'gcom1.f90' - data nt0/-1/,transmitted/.false./,snr/-99.0/,count00/-1/ - save nt0,transmitted,snr,count00,iptt + data nt0/-1/,transmitted/.false./,snr/-99.0/ + data level/.false./ + save nt0,transmitted,level,snr,iptt if(ic1.ne.0 .or. ic2.ne.0) then - if(ic1.eq.27 .and. ic2.eq.0) ngo=0 !ESC + if(ic1.eq.27 .and. ic2.eq.0) ngo=0 !ESC if(nTxOK.eq.0 .and. ntransmitting.eq.0) then - nd=0 - if(ic1.eq.0 .and. ic2.eq.59) nd=1 !F1 - if(ic1.eq.0 .and. ic2.eq.60) nd=2 !F2 - if(ic1.eq.0 .and. ic2.eq.61) nd=3 !F3 - if(ic1.eq.0 .and. ic2.eq.62) nd=4 !F4 - if(ic1.eq.0 .and. ic2.eq.63) nd=5 !F5 - if(nd.gt.0) then - i1=ptt(nport,1,1,iptt) - ntxok=1 - if(nd.eq.1) txmsg='CQ K1JT FN20' - if(nd.eq.2) txmsg='K9AN K1JT 559 NJ' - if(nd.eq.3) txmsg='K9AN K1JT R 559 NJ' - if(nd.eq.4) txmsg='K9AN K1JT RR73' - if(nd.eq.5) txmsg='TNX STEVE 73' - call ft2_iwave(txmsg,1500.0,99.0,iwave) - print*,'Tx: ',txmsg + nfunc=0 + if(ic1.eq.0 .and. ic2.eq.59) nfunc=1 !F1 + if(ic1.eq.0 .and. ic2.eq.60) nfunc=2 !F2 + if(ic1.eq.0 .and. ic2.eq.61) nfunc=3 !F3 + if(ic1.eq.0 .and. ic2.eq.62) nfunc=4 !F4 + if(ic1.eq.0 .and. ic2.eq.63) nfunc=5 !F5 + if(nfunc.eq.1 .or. (nfunc.ge.2 .and. hiscall.ne.' ')) then + ftx=1500.0 + call transmit(nfunc,ftx,iptt) endif endif if(ic1.eq.13 .and. ic2.eq.0) hiscall=hiscall_next + if(ic1.eq.97 .and. ic2.eq.0) autoseq=.not.autoseq + if(ic1.eq.108 .and. ic2.eq.0) level=.not.level endif if(ntransmitting.eq.1) transmitted=.true. @@ -114,17 +116,30 @@ subroutine update(total_time,ic1,ic2) nt=2*total_time if(nt.gt.nt0 .or. ic1.ne.0 .or. ic2.ne.0) then - k=iwrite-6000 - if(k.lt.1) k=k+NRING - sq=0. - do i=1,6000 - k=k+1 - if(k.gt.NRING) k=k-NRING - x=y1(k) - sq=sq + x*x - enddo - sigdb=0. - if(sq.gt.0.0) sigdb=db(sq/6000.0) + if(level) then +! Measure and display the average level of signal plus noise in past 0.5 s + k=iwrite-6000 + if(k.lt.1) k=k+NRING + sq=0. + do i=1,6000 + k=k+1 + if(k.gt.NRING) k=k-NRING + x=y1(k) + sq=sq + x*x + enddo + sigdb=0. + if(sq.gt.0.0) sigdb=db(sq/6000.0) + n=sigdb + if(n.lt.1) n=1 + if(n.gt.70) n=70 + line=' ' + line(n:n)='*' + write(*,1030) sigdb,ntxed,autoseq,QSO_in_progress,(line(i:i),i=1,n) +1030 format(f4.1,i3,2L2,1x,70a1) +! write(*,1020) nt,total_time,iwrite,itx,ntxok,ntransmitting,ndecodes, & +! snr,sigdb,line +!1020 format(i6,f9.3,i10,i6,3i3,f6.0,f6.1,1x,a30) + endif k=iwrite-30000 if(k.lt.1) k=k+NRING do i=1,30000 @@ -136,27 +151,77 @@ subroutine update(total_time,ic1,ic2) nfqso=1500 ndecodes=0 if(maxval(abs(id)).gt.0) then - call date_and_time(cdate,ctime) - cdatetime=cdate(3:8)//'_'//ctime call system_clock(count0,clkfreq) - call ft2_decode(cdatetime,nfqso,id,ndecodes) + nrx=-1 + call ft2_decode(cdatetime(),nfqso,id,ndecodes,mycall,hiscall,nrx) call system_clock(count1,clkfreq) - tdecode=float(count1-count0)/float(clkfreq) - if(count00.lt.0) count00=count0 - trun=float(count1-count00)/float(clkfreq) +! tdecode=float(count1-count0)/float(clkfreq) +! write(*,3001) trun +!3001 format(f10.3) + + if(autoseq .and.nrx.eq.2) QSO_in_progress=.true. + if(autoseq .and. QSO_in_progress .and. nrx.ge.1 .and. nrx.le.4) then + lrx(nrx)=.true. + ftx=1500.0 + if(ntxed.eq.1) then + if(nrx.eq.2) then + call transmit(3,ftx,iptt) + else + call transmit(1,ftx,iptt) + endif + endif + if(ntxed.eq.2) then + if(nrx.eq.3) then + call transmit(4,ftx,iptt) + QSO_in_progress=.false. + else + call transmit(2,ftx,iptt) + endif + endif + if(ntxed.eq.3) then + if(nrx.eq.4) then + QSO_in_progress=.false. + else + call transmit(3,ftx,iptt) + endif + endif + endif endif - n=2*sigdb-30.0 - if(n.lt.1) n=1 - if(n.gt.30) n=30 - line=' ' - line(n:n)='*' -! write(*,1010) nt,total_time,iwrite,itx,ntxok,ntransmitting,ndecodes, & -! snr,sigdb,line -!1010 format(i6,f9.3,i10,i6,3i3,f6.0,f6.1,1x,a30) nt0=nt - max1=0 - max2=0 endif return end subroutine update + +character*17 function cdatetime() + character cdate*8,ctime*10 + call date_and_time(cdate,ctime) + cdatetime=cdate(3:8)//'_'//ctime + return +end function cdatetime + +subroutine transmit(nfunc,ftx,iptt) + include 'gcom1.f90' + character*17 cdatetime + integer ptt + + if(nfunc.eq.1) txmsg='CQ '//trim(mycall)//' '//mygrid + if(nfunc.eq.2) txmsg=trim(hiscall)//' '//trim(mycall)// & + ' 559 '//trim(exch) + if(nfunc.eq.3) txmsg=trim(hiscall)//' '//trim(mycall)// & + ' R 559 '//trim(exch) + if(nfunc.eq.4) txmsg=trim(hiscall)//' '//trim(mycall)//' RR73' + if(nfunc.eq.5) txmsg='TNX 73 GL' + call ft2_iwave(txmsg,ftx,99.0,iwave) + i1=ptt(nport,1,1,iptt) + ntxok=1 + n=len(trim(txmsg)) + write(*,1010) cdatetime(),0,0.0,nint(ftx),(txmsg(i:i),i=1,n) + write(12,1010) cdatetime(),0,0.0,nint(ftx),(txmsg(i:i),i=1,n) +1010 format(a17,' Tx',i4,f6.2,i6,2x,37a1) + if(nfunc.ge.1 .and. nfunc.le.4) ntxed=nfunc + if(nfunc.ge.1 .and. nfunc.le.5) ltx(nfunc)=.true. + if(nfunc.eq.2 .or. nfunc.eq.3) QSO_in_progress=.true. + + return +end subroutine transmit diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index 74cab3ee4..560732570 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -1,4 +1,4 @@ -subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) +subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) use crc use packjt77 @@ -7,6 +7,7 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) character*37 decodes(100) character*120 data_dir character*17 cdatetime + character*6 mycall,hiscall complex c2(0:NMAX/16-1) !Complex waveform complex cb(0:NMAX/16-1) complex cd(0:144*10-1) !Complex waveform @@ -66,7 +67,6 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) ndecodes=0 do icand=1,ncand f0=candidate(1,icand) - xsnr=1.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol ! 750 samples/second here @@ -93,8 +93,6 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) cterm=cterm*cc0 endif enddo -! write(60,3001) if,is,abs(csync1) -!3001 format(2i6,f10.3) if(abs(csync1).gt.sybest) then ibest=is sybest=abs(csync1) @@ -103,8 +101,6 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) enddo enddo -!dfbest=0.0 -!ibest=187 a=0. a(1)=-dfbest call twkfreq1(c2,NMAX/16,fs,a,cb) @@ -189,18 +185,37 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes) do i=1,ndecodes if(decodes(i).eq.message) idupe=1 enddo - if(idupe.eq.1) goto 888 + if(idupe.eq.1) exit ndecodes=ndecodes+1 decodes(ndecodes)=message + xsnr=db(sybest*sybest) - 115.0 !### Rough estimate of S/N ### nsnr=nint(xsnr) freq=f0+dfbest - write(*,1212) cdatetime,nsnr,ibest/750.0,nint(freq),message, & + write(*,1000) cdatetime,nsnr,ibest/750.0,nint(freq),message, & nseq,nharderror,nhardmin -1212 format(a17,i4,f6.2,i6,2x,a37,3i5) - goto 888 + write(12,1000) cdatetime,nsnr,ibest/750.0,nint(freq),message, & + nseq,nharderror,nhardmin +1000 format(a17,' Rx',i4,f6.2,i6,3x,a37,3i5) + +!### Temporary: assume most recent decoded message conveys "hiscall". + i0=index(message,' ') + if(i0.ge.3 .and. i0.le.7) then + hiscall=message(i0+1:i0+6) + i1=index(hiscall,' ') + if(i1.gt.0) hiscall=hiscall(1:i1) + endif + nrx=-1 + if(index(message,'CQ ').eq.1) nrx=1 + if((index(message,trim(mycall)//' ').eq.1) .and. & + (index(message,' '//trim(hiscall)//' ').ge.4)) then + if(index(message,' 559 ').gt.8) nrx=2 + if(index(message,' R 559 ').gt.8) nrx=3 + if(index(message,' RR73 ').gt.8) nrx=4 + endif +!### + exit endif enddo ! nseq -888 continue enddo !candidate list return diff --git a/lib/ft2/ft2audio.c b/lib/ft2/ft2audio.c index 3826f4579..b5f19fa40 100644 --- a/lib/ft2/ft2audio.c +++ b/lib/ft2/ft2audio.c @@ -59,7 +59,7 @@ SoundIn( void *inputBuffer, void *outputBuffer, } if(ia >= data->nring) ia=0; //Wrap buffer pointer if necessary - *data->iwrite = ia; //Save buffer pointer + *data->iwrite = ia; //Save buffer pointer iaa=ia; total_time += (double)framesPerBuffer/12000.0; // printf("iwrite: %d\n",*data->iwrite); @@ -165,7 +165,8 @@ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, return(-1); } - // printf("Opening device %d for input, %d for output...\n",ndevice_in,ndevice_out); + // printf("Opening device %d for input, %d for output...\n", + // ndevice_in,ndevice_out); inputParameters.device = ndevice_in; inputParameters.channelCount = 2; @@ -173,7 +174,8 @@ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, inputParameters.suggestedLatency = 0.2; inputParameters.hostApiSpecificStreamInfo = NULL; -// Test if this configuration actually works, so we do not run into an ugly assertion +// Test if this configuration actually works, so we do not run into an +// ugly assertion err_open_in = Pa_IsFormatSupported(&inputParameters, NULL, dSampleRate); if (err_open_in == 0) { @@ -189,16 +191,16 @@ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, if(err_open_in) { // We should have no error here usually printf("Error opening input audio stream:\n"); - printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), err_open_in); - + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), + err_open_in); err = 1; } else { // printf("Successfully opened audio input.\n"); } } else { printf("Error opening input audio stream.\n"); - printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), err_open_in); - + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), + err_open_in); err = 1; } @@ -208,7 +210,8 @@ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, outputParameters.suggestedLatency = 0.2; outputParameters.hostApiSpecificStreamInfo = NULL; -// Test if this configuration actually works, so we do not run into an ugly assertion +// Test if this configuration actually works, so we do not run into an +// ugly assertion. err_open_out = Pa_IsFormatSupported(NULL, &outputParameters, dSampleRate); if (err_open_out == 0) { @@ -224,36 +227,34 @@ int ft2audio_(int *ndevin, int *ndevout, int *npabuf, int *nright, if(err_open_out) { // We should have no error here usually printf("Error opening output audio stream!\n"); - printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), err_open_out); - + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), + err_open_out); err += 2; } else { // printf("Successfully opened audio output.\n"); } } else { printf("Error opening output audio stream.\n"); - printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), err_open_out); - + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), + err_open_out); err += 2; } // if there was no error in opening both streams start them if (err == 0) { err_start_in = Pa_StartStream(instream); //Start input stream - if(err_start_in) { printf("Error starting input audio stream!\n"); - printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_in), err_start_in); - + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_in), + err_start_in); err += 4; } - err_start_out = Pa_StartStream(outstream); //Start output stream - + err_start_out = Pa_StartStream(outstream); //Start output stream if(err_start_out) { printf("Error starting output audio stream!\n"); - printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_out), err_start_out); - + printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_out), + err_start_out); err += 8; } } @@ -322,7 +323,8 @@ int padevsub_(int *idevin, int *idevout) // if(i == Pa_GetDefaultOutputDevice()) ndefout = i; nchin[i]=pdi->maxInputChannels; nchout[i]=pdi->maxOutputChannels; - printf(" %2d %2d %2d %s\n",i,nchin[i],nchout[i],pdi->name); + printf(" %2d %2d %2d %s\n",i,nchin[i],nchout[i], + pdi->name); } printf("\nUser requested devices: Input = %2d Output = %2d\n", diff --git a/lib/ft2/gcom1.f90 b/lib/ft2/gcom1.f90 index d4a952e5c..48bf391c6 100644 --- a/lib/ft2/gcom1.f90 +++ b/lib/ft2/gcom1.f90 @@ -15,6 +15,10 @@ integer nTransmitting !Actually transmitting? integer nTxOK !OK to transmit? integer nport !COM port for PTT logical tx_once !Transmit one message, then exit +logical ltx !True if msg i has been transmitted +logical lrx !True if msg i has been received +logical autoseq +logical QSO_in_progress integer*2 y1 !Ring buffer for audio channel 0 integer*2 y2 !Ring buffer for audio channel 1 integer*2 iwave !Data for Tx audio @@ -26,5 +30,5 @@ character*3 exch character*37 txmsg common/gcom1/snrdb,ndevin,ndevout,iwrite,itx,ngo,nTransmitting,nTxOK,nport, & - tx_once, y1(NRING),y2(NRING),iwave(NTZ),mycall,hiscall, & - hiscall_next,mygrid,exch,txmsg + ntxed,tx_once, y1(NRING),y2(NRING),iwave(NTZ),ltx(5),lrx(5),autoseq, & + QSO_in_progress,mycall,hiscall,hiscall_next,mygrid,exch,txmsg From 12463451e203b1ad010ee076d15740d1cc9bbbab Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 16 Jan 2019 13:16:10 -0500 Subject: [PATCH 014/367] Allow upper or lower case for "A" and "L" commands. --- lib/ft2/ft2.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index 92280c4bb..056e5fef7 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -102,8 +102,8 @@ subroutine update(total_time,ic1,ic2) endif endif if(ic1.eq.13 .and. ic2.eq.0) hiscall=hiscall_next - if(ic1.eq.97 .and. ic2.eq.0) autoseq=.not.autoseq - if(ic1.eq.108 .and. ic2.eq.0) level=.not.level + if((ic1.eq.97 .or. ic1.eq.65) .and. ic2.eq.0) autoseq=.not.autoseq + if((ic1.eq.108 .or. ic1.eq.76) .and. ic2.eq.0) level=.not.level endif if(ntransmitting.eq.1) transmitted=.true. From dc5d9f1617ec91a9dfce94a4b5e1141d628e37fb Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 16 Jan 2019 13:20:13 -0500 Subject: [PATCH 015/367] Add a comment. --- lib/ft2/ft2_decode.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index 560732570..c7497f74d 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -79,7 +79,7 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) a=0. a(1)=-df call twkfreq1(c2,NMAX/16,fs,a,cb) - do is=0,374 + do is=0,374 !DT search range is 0 - 0.5 s csync1=0. cterm=1 do ib=1,16 From 3023f7e5c6f8e8100d27a011991fd40223f2f6e9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 16 Jan 2019 13:58:56 -0500 Subject: [PATCH 016/367] Minor tweaks in formatting, etc. --- lib/ft2/ft2.f90 | 8 +++++++- lib/ft2/ft2_decode.f90 | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index 056e5fef7..cacd538a9 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -174,6 +174,8 @@ subroutine update(total_time,ic1,ic2) if(nrx.eq.3) then call transmit(4,ftx,iptt) QSO_in_progress=.false. + write(*,1032) +1032 format('QSO complete: S+P side') else call transmit(2,ftx,iptt) endif @@ -181,6 +183,8 @@ subroutine update(total_time,ic1,ic2) if(ntxed.eq.3) then if(nrx.eq.4) then QSO_in_progress=.false. + write(*,1034) +1034 format('QSO complete: CQ side') else call transmit(3,ftx,iptt) endif @@ -205,6 +209,8 @@ subroutine transmit(nfunc,ftx,iptt) character*17 cdatetime integer ptt + if(nTxOK.eq.1) return + if(nfunc.eq.1) txmsg='CQ '//trim(mycall)//' '//mygrid if(nfunc.eq.2) txmsg=trim(hiscall)//' '//trim(mycall)// & ' 559 '//trim(exch) @@ -218,7 +224,7 @@ subroutine transmit(nfunc,ftx,iptt) n=len(trim(txmsg)) write(*,1010) cdatetime(),0,0.0,nint(ftx),(txmsg(i:i),i=1,n) write(12,1010) cdatetime(),0,0.0,nint(ftx),(txmsg(i:i),i=1,n) -1010 format(a17,' Tx',i4,f6.2,i6,2x,37a1) +1010 format(a17,i4,f6.2,i5,' Tx ',37a1) if(nfunc.ge.1 .and. nfunc.le.4) ntxed=nfunc if(nfunc.ge.1 .and. nfunc.le.5) ltx(nfunc)=.true. if(nfunc.eq.2 .or. nfunc.eq.3) QSO_in_progress=.true. diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index c7497f74d..96f728354 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -195,7 +195,7 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) nseq,nharderror,nhardmin write(12,1000) cdatetime,nsnr,ibest/750.0,nint(freq),message, & nseq,nharderror,nhardmin -1000 format(a17,' Rx',i4,f6.2,i6,3x,a37,3i5) +1000 format(a17,i4,f6.2,i5,' Rx ',a37,3i5) !### Temporary: assume most recent decoded message conveys "hiscall". i0=index(message,' ') From 0a648a109f364c6f2b326e0eabf618151d1c1cb6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 16 Jan 2019 15:00:12 -0500 Subject: [PATCH 017/367] Correct broken S/N for tx_once transmissions. --- lib/ft2/ft2.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index cacd538a9..129655feb 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -62,6 +62,7 @@ program ft2 tx_once=.true. ftx=1500.0 call transmit(-1,ftx,iptt) + snrdb=99.0 endif ! Start the audio streams @@ -218,7 +219,7 @@ subroutine transmit(nfunc,ftx,iptt) ' R 559 '//trim(exch) if(nfunc.eq.4) txmsg=trim(hiscall)//' '//trim(mycall)//' RR73' if(nfunc.eq.5) txmsg='TNX 73 GL' - call ft2_iwave(txmsg,ftx,99.0,iwave) + call ft2_iwave(txmsg,ftx,snrdb,iwave) i1=ptt(nport,1,1,iptt) ntxok=1 n=len(trim(txmsg)) From bab80a1ac28f9e12f19a274cd0c0ff7d43d307de Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 16 Jan 2019 20:34:53 +0000 Subject: [PATCH 018/367] Bump develop branch to 2.1.0 --- Versions.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Versions.cmake b/Versions.cmake index b90379924..4a5c860cd 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -1,6 +1,6 @@ # Version number components set (WSJTX_VERSION_MAJOR 2) -set (WSJTX_VERSION_MINOR 0) -set (WSJTX_VERSION_PATCH 1) +set (WSJTX_VERSION_MINOR 1) +set (WSJTX_VERSION_PATCH 0) set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From 5137b47c0a51d67ddefadaf1b4813d1b239fe6f4 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 16 Jan 2019 20:44:04 +0000 Subject: [PATCH 019/367] Switch off nag window for develop --- widgets/mainwindow.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 29070c291..a3c031c53 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -946,14 +946,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, splashTimer.setSingleShot (true); splashTimer.start (20 * 1000); -<<<<<<< HEAD if(QCoreApplication::applicationVersion().contains("-devel") or QCoreApplication::applicationVersion().contains("-rc")) { - QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); + // QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); } -======= - //QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); ->>>>>>> hotfix-2.0.1-rc1 if(!ui->cbMenus->isChecked()) { ui->cbMenus->setChecked(true); From 074914d6074f1fdb84a837116e9c7c6738679a2d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 16 Jan 2019 20:55:01 +0000 Subject: [PATCH 020/367] Fix merge issues --- lib/fsk4hf/ft2d.f90 | 2 +- lib/fsk4hf/genft2.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index fa32e390e..c42bd38c4 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -201,7 +201,7 @@ program ft2d if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then write(c77,'(77i1)') message77(1:77) - call unpack77(c77,message,unpk77_success) + call unpack77(c77,1,message,unpk77_success) idupe=0 do i=1,ndecodes if(decodes(i).eq.message) idupe=1 diff --git a/lib/fsk4hf/genft2.f90 b/lib/fsk4hf/genft2.f90 index f416c3616..2eb36bccc 100644 --- a/lib/fsk4hf/genft2.f90 +++ b/lib/fsk4hf/genft2.f90 @@ -68,7 +68,7 @@ subroutine genft2(msg0,ichk,msgsent,i4tone,itype) i3=-1 n3=-1 call pack77(message,i3,n3,c77) - call unpack77(c77,msgsent,unpk77_success) !Unpack to get msgsent + call unpack77(c77,0,msgsent,unpk77_success) !Unpack to get msgsent if(ichk.eq.1) go to 999 read(c77,"(77i1)") msgbits From 9b483d5ee1e66c7d773431ea0bd13ac93223c07a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 16 Jan 2019 16:25:31 -0500 Subject: [PATCH 021/367] Fix ft2 build to accommodate having merged changes from the hotfix branch. --- lib/ft2/ft2_decode.f90 | 2 +- lib/ft2/libwsjt_cxx.a | Bin 192392 -> 192392 bytes lib/ft2/libwsjt_fort.a | Bin 1588656 -> 1699796 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index 96f728354..e26fc5567 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -180,7 +180,7 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then write(c77,'(77i1)') message77(1:77) - call unpack77(c77,message,unpk77_success) + call unpack77(c77,nrx,message,unpk77_success) idupe=0 do i=1,ndecodes if(decodes(i).eq.message) idupe=1 diff --git a/lib/ft2/libwsjt_cxx.a b/lib/ft2/libwsjt_cxx.a index c7dde28c873dc15efeefcac37ec08e9464403f29..d10d509cf91fbb0fc6577ccb0d76ce5608858e73 100644 GIT binary patch delta 587 zcmeCU&)spKdx8v`nYpp4g~>*xL+oItxykf`TTJ4c899FPLj+7WN!YPMnUf^MHb=?s z;y~gWs9oSg;>wuTF+;hV7g(HPfw0Xs7uc?2gR((}Sh+Mnm6>fm;I4s?lGx1V_YbPe z9HdeqxQP>@5zO5e69v_1KCOgNVzXI7h&M#qV)KO62cU8mAe}kuCqZ2XW-e(N; zh9yWg>o6M+M586d$GztzwLP6xRy35p>kby^F6KG-gQdG#q4VOwXDkPQGI5^k_U1VF zkPAe!9DFFi`LWyh;4?AKkG&>)8GwNELwB*v!Dk#GTH@fd$*+I?Vq81<+3$K5-GBf8 zZ_fR*+kmlhvS6gdc1K;t&!S9~%+n337)7>wIWulBfI4Jb3FAF>R&b0={x2@E{dYBE zvnCRM_EN@BQ?ObKL!ckF^W0{1Nkro3*f7EQAWunbKR1`@g%CuA5ik(8U*5p977_{; vK)%@aIop`da6{ycLHw3OOplQHP3M?iK=~%yK_&`A6hl(U_N8x`9y0;}OR2sI delta 587 zcmeCU&)spKdx8v`iG`WDrSV3kL+lWy!SsS#OyZjvIezj(1vW|8u|k=XB*ZpH$?oES za1B9R1GNi$NU}1fb<9xi<^>j~SfDC57uc?2L(*mC(g0OvxcPv)20}_=Gn?N(m@bg{ z3c*dBNE-LWL_swgO)FuP*ld;%;ti2D+B{+P0hk;}XU_UbP?s4^k`Ui4z0Vlx4Io!+ zbJk%t9;il$k9*HcYP$vtbbIr3S1WX0IQWp|;18x=lf4W;z;D|NjIa*qr-kw*h16 zWWh*@?T)&PpGBEUnWr06F^X*Wa%S9M0CmW=62^PbXfOskdHe5b#%4{39GE|QDPyQ9 zR4vdC+j(v?x+Eg;b8MJkd}ENOB(|TM%k)AB$%M-rnASo=0cfJw_Bq>_&Tzx!#kRK` eVtRzkZ#u{H0>R5q?2?~9nx8V01Xz9K!hMs5{VcfNPw_O1k@;~41z>O3Bo8^!RkoL zrT`Va&J3=j^PCaixG;$#YQmBrZh#^v3Oa6SkWFO|$^ZA=s_t|kD9oFA=lsukIj2&$ z?(*I5-urF$yGy@(a_T3$Z(f$BT{58mCH?w)y;)xR3;*x+<_yTTBD_;$1VOA8gsh3y zlRHEZ{?#Xcvmk^XE$rjbCPDa>M^tVR&iP672;#Xs8fEI6f95mpE}WW5w*_>t)BNiLPYTSWSS7s#uM4@CxJhy(}l?3(_0lH>AB1;M2^;y z@ej}Bv`o>A(EcD+19h~E+O*hav>^ljS!XkxDeI*8X;IU(wg4+~MR4HBYi@`b2xUJ#=8J}E@~yj*Y!-wMvC#|5W*kKjyx*?M|@ zE;zLdcL~mZD+T8jn+4|`cOxQCa4x=+KhZs36{2rmD@5PgC`8XYAw+9ag=iqhpXVeY zdgXIM^lR&d=(oy*=nq#5(ccvb(I;*bV#KPJC*emSCivXELx`C_O^8|eix9J9u@Lho zkD$f8HbjW|BwmR5;d&wF@C!mr)15+WQlk*-{X&TC)lP`*A1TBRL|pK>Zh;Ux_iiCp zds>KHUM$2ue@uw2ULnNRdW6_5B|_}iJ|TAB^+N24Z2q{~4G~-ybZB|9s{~i@xx7Xb zTqEumT({gMxbAVcJVzuUu0ysEm$_Al%bOv@P1-NSJ+N4ad+atLt~yVM`^X{0?Q~jC z;CdlGwn~WirV8;{D~0%>KMC=p2 z#6L7fh<{XT6yi5MD8&DeEGUsaK}q>VP`a-Yls+2;B~KNUQ8j|HaO?R$d;ci7rL}^) zXPV&d`-0#um@K%*x&-&ty#)7^iGq9D9>IOjM!~HuTp+k#T_d1m-|#kZ}WkLC;QwykXQNxX8l(B`wfSV;VG zqo5@o{6$Fomwx7v-oKt`SAtT^P!e0B!9J|U7q�I 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 delta 114482 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 SZU49}qkfQw%Rj|^ul+x$42|Ug From 7701516b439b7ce1f8179bdbb7a3caf80d8bbf24 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 17 Jan 2019 14:01:40 -0600 Subject: [PATCH 022/367] ft2sim now creates a GFSK waveform with BT=1.0. It also adds raised cosine ramp up and down at the beginning and end of the transmission. --- lib/fsk4hf/ft2d.f90 | 9 ++---- lib/fsk4hf/ft2sim.f90 | 72 ++++++++++++++++++++++++++++--------------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index c42bd38c4..e924366c6 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -93,7 +93,7 @@ program ft2d ibest=-1 sybest=-99. dfbest=-1. - do if=-15,+15 + do if=-30,+30 df=if a=0. a(1)=-df @@ -120,8 +120,6 @@ program ft2d enddo enddo -!dfbest=0.0 -!ibest=187 a=0. a(1)=-dfbest call twkfreq1(c2,NMAX/16,fs,a,cb) @@ -197,7 +195,6 @@ program ft2d call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) if(nharderror.ge.0) exit enddo - nhardmin=-1 if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then write(c77,'(77i1)') message77(1:77) @@ -212,8 +209,8 @@ program ft2d nsnr=nint(xsnr) freq=f0+dfbest 1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) - write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',idf,nseq,ijitter,nharderror,nhardmin -1212 format(a4,i4,f5.1,f11.1,2x,a22,a1,i5,i5,i5,i5,i5) + write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',nseq,nharderror +1212 format(a4,i4,f5.1,f11.1,2x,a22,a1,i5,i5) goto 888 endif enddo ! nseq diff --git a/lib/fsk4hf/ft2sim.f90 b/lib/fsk4hf/ft2sim.f90 index 6addbe8d8..49d53c728 100644 --- a/lib/fsk4hf/ft2sim.f90 +++ b/lib/fsk4hf/ft2sim.f90 @@ -1,3 +1,10 @@ +real function gfsk_pulse(b,t) +pi=4.*atan(1.0) +c=pi*sqrt(2.0/log(2.0)) +gfsk_pulse=0.5*(erf(c*b*(t+0.5))-erf(c*b*(t-0.5))) +return +end function gfsk_pulse + program ft2sim ! Generate simulated signals for experimental "FT2" mode @@ -13,10 +20,12 @@ program ft2sim complex c0(0:NMAX-1) complex c(0:NMAX-1) real wave(NMAX) + real dphi(0:NMAX-1) + real pulse(480) integer itone(NN) integer*1 msgbits(77) integer*2 iwave(NMAX) !Generated full-length waveform - + ! Get command-line argument(s) nargs=iargc() if(nargs.ne.8) then @@ -42,12 +51,6 @@ program ft2sim call getarg(8,arg) read(arg,*) snrdb !SNR_2500 - nsig=1 - if(f0.lt.100.0) then - nsig=f0 - f0=1500 - endif - nfiles=abs(nfiles) twopi=8.0*atan(1.0) fs=12000.0 !Sample rate (Hz) @@ -55,8 +58,8 @@ program ft2sim hmod=0.8 !Modulation index (0.5 is MSK, 1.0 is FSK) tt=NSPS*dt !Duration of symbols (s) baud=1.0/tt !Keying rate (baud) - bw=1.5*baud !Occupied bandwidth (Hz) txt=NZ*dt !Transmission length (s) + bandwidth_ratio=2500.0/(fs/2.0) sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) if(snrdb.gt.90.0) sig=1.0 @@ -70,9 +73,8 @@ program ft2sim call genft2(msg37,0,msgsent37,itone,itype) write(*,*) write(*,'(a9,a37,3x,a7,i1,a1,i1)') 'Message: ',msgsent37,'i3.n3: ',i3,'.',n3 - write(*,1000) f0,xdt,txt,snrdb,bw -1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, & - ' BW:',f5.1) + write(*,1000) f0,xdt,txt,snrdb +1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1) write(*,*) if(i3.eq.1) then write(*,*) ' mycall hiscall hisgrid' @@ -88,21 +90,41 @@ program ft2sim call sgran() +! The filtered frequency pulse + do i=1,480 + tt=(i-240.5)/160.0 + pulse(i)=gfsk_pulse(1.0,tt) + enddo + +! Define the instantaneous frequency waveform + dphi_peak=twopi*(hmod/2.0)/real(NSPS) + dphi=0.0 + do j=1,NN + ib=(j-1)*160 + ie=ib+480-1 + dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*(2*itone(j)-1) + enddo + + phi=0.0 + c0=0.0 + dphi=dphi+twopi*f0*dt + do j=0,NMAX-1 + c0(j)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + + c0(0:159)=c0(0:159)*(1.0-cos(twopi*(/(i,i=0,159)/)/320.0) )/2.0 + c0(144*160:144*160+159)=c0(144*160:144*160+159)*(1.0+cos(twopi*(/(i,i=0,159)/)/320.0 ))/2.0 + c0(145*160:)=0. + + k=nint((xdt+0.25)/dt) + c0=cshift(c0,-k) + ia=k + do ifile=1,nfiles - k=nint((xdt+0.25)/dt) - ia=k - phi=0.0 - c0=0.0 - do j=1,NN !Generate complex waveform - dphi=twopi*(f0*dt+(hmod/2.0)*(2*itone(j)-1)/real(NSPS)) - do i=1,NSPS - if(k.ge.0 .and. k.lt.NMAX) c0(k)=cmplx(cos(phi),sin(phi)) - k=k+1 - phi=mod(phi+dphi,twopi) - enddo - enddo - if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,NWAVE,fs,delay,fspread) - c=sig*c0 + c=c0 + if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c,NMAX,NWAVE,fs,delay,fspread) + c=sig*c ib=k wave=real(c) From f447fe49e19465e3fe2413e1bcb303a93a0be8b7 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 17 Jan 2019 15:25:06 -0600 Subject: [PATCH 023/367] Fix some indexing problems. Create subroutine ft2_gfsk_iwave.f90 for use with ft2.exe. Needs testing. --- CMakeLists.txt | 1 + lib/fsk4hf/ft2sim.f90 | 11 +---- lib/ft2/ft2_gfsk_iwave.f90 | 88 ++++++++++++++++++++++++++++++++++++++ lib/ft2/gfsk_pulse.f90 | 6 +++ 4 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 lib/ft2/ft2_gfsk_iwave.f90 create mode 100644 lib/ft2/gfsk_pulse.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index ef0bac291..e33ffe408 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -469,6 +469,7 @@ set (wsjt_FSRCS lib/geodist.f90 lib/getlags.f90 lib/getmet4.f90 + lib/ft2/gfsk_pulse.f90 lib/graycode.f90 lib/graycode65.f90 lib/grayline.f90 diff --git a/lib/fsk4hf/ft2sim.f90 b/lib/fsk4hf/ft2sim.f90 index 49d53c728..5c0e07431 100644 --- a/lib/fsk4hf/ft2sim.f90 +++ b/lib/fsk4hf/ft2sim.f90 @@ -1,10 +1,3 @@ -real function gfsk_pulse(b,t) -pi=4.*atan(1.0) -c=pi*sqrt(2.0/log(2.0)) -gfsk_pulse=0.5*(erf(c*b*(t+0.5))-erf(c*b*(t-0.5))) -return -end function gfsk_pulse - program ft2sim ! Generate simulated signals for experimental "FT2" mode @@ -114,8 +107,8 @@ program ft2sim enddo c0(0:159)=c0(0:159)*(1.0-cos(twopi*(/(i,i=0,159)/)/320.0) )/2.0 - c0(144*160:144*160+159)=c0(144*160:144*160+159)*(1.0+cos(twopi*(/(i,i=0,159)/)/320.0 ))/2.0 - c0(145*160:)=0. + c0(145*160:145*160+159)=c0(145*160:145*160+159)*(1.0+cos(twopi*(/(i,i=0,159)/)/320.0 ))/2.0 + c0(146*160:)=0. k=nint((xdt+0.25)/dt) c0=cshift(c0,-k) diff --git a/lib/ft2/ft2_gfsk_iwave.f90 b/lib/ft2/ft2_gfsk_iwave.f90 new file mode 100644 index 000000000..2611eca09 --- /dev/null +++ b/lib/ft2/ft2_gfsk_iwave.f90 @@ -0,0 +1,88 @@ +subroutine ft2_gfsk_iwave(msg37,f0,snrdb,iwave) + +! Generate waveform for experimental "FT2" mode + + use packjt77 + include 'ft2_params.f90' !Set various constants + parameter (NWAVE=(NN+2)*NSPS) + character msg37*37,msgsent37*37 + real wave(NWAVE),xnoise(NWAVE) + real dphi(NWAVE) + real pulse(480) + + integer itone(NN) + integer*2 iwave(NWAVE) !Generated full-length waveform + logical first + data first/.true./ + save pulse + + twopi=8.0*atan(1.0) + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + hmod=0.8 !Modulation index (MSK=0.5, FSK=1.0) + tt=NSPS*dt !Duration of symbols (s) + baud=1.0/tt !Keying rate (baud) + bw=1.5*baud !Occupied bandwidth (Hz) + txt=NZ*dt !Transmission length (s) + bandwidth_ratio=2500.0/(fs/2.0) +! sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) +! if(snrdb.gt.90.0) sig=1.0 + txt=NN*NSPS/12000.0 + + if(first) then +! The filtered frequency pulse + do i=1,480 + tt=(i-240.5)/160.0 + pulse(i)=gfsk_pulse(1.0,tt) + enddo + dphi_peak=twopi*(hmod/2.0)/real(NSPS) + first=.false. + endif + +! Source-encode, then get itone(): + itype=1 + call genft2(msg37,0,msgsent37,itone,itype) + +! Create the instantaneous frequency waveform + dphi=0.0 + do j=1,NN + ib=(j-1)*160+1 + ie=ib+480-1 + dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*(2*itone(j)-1) + enddo + + phi=0.0 + wave=0.0 + sqrt2=sqrt(2.) + dphi=dphi+twopi*f0*dt + do j=1,NWAVE + wave(j)=sqrt2*sin(phi) + sqsig=sqsig + wave(j)**2 + phi=mod(phi+dphi(j),twopi) + enddo + wave(1:160)=wave(1:160)*(1.0-cos(twopi*(/(i,i=0,159)/)/320.0) )/2.0 + wave(145*160+1:146*160)=wave(145*160+1:146*160)*(1.0+cos(twopi*(/(i,i=0,159)/)/320.0 ))/2.0 + wave(146*160+1:)=0. + + if(snrdb.gt.90.0) then + iwave=nint((32767.0/sqrt(2.0))*wave) + return + endif + + sqnoise=1.e-30 + if(snrdb.lt.90) then + do i=1,NWAVE !Add gaussian noise at specified SNR + xnoise(i)=gran() !Noise has rms = 1.0 + enddo + endif + xnoise=xnoise*sqrt(0.5*fs/2500.0) + fac=30.0 + snr_amplitude=10.0**(0.05*snrdb) + wave=fac*(snr_amplitude*wave + xnoise) + datpk=maxval(abs(wave)) + print*,'A',snr_amplitude,datpk + + iwave=nint((30000.0/datpk)*wave) + + return +end subroutine ft2_gfsk_iwave diff --git a/lib/ft2/gfsk_pulse.f90 b/lib/ft2/gfsk_pulse.f90 new file mode 100644 index 000000000..99ab78e35 --- /dev/null +++ b/lib/ft2/gfsk_pulse.f90 @@ -0,0 +1,6 @@ +real function gfsk_pulse(b,t) + pi=4.*atan(1.0) + c=pi*sqrt(2.0/log(2.0)) + gfsk_pulse=0.5*(erf(c*b*(t+0.5))-erf(c*b*(t-0.5))) + return +end function gfsk_pulse From c6bc3c64bb915f7abe197c655733b61a126e6000 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 18 Jan 2019 07:45:59 -0500 Subject: [PATCH 024/367] Add parameters for FT8 and Ft2 to wavhdr.f90. --- lib/wavhdr.f90 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/wavhdr.f90 b/lib/wavhdr.f90 index b54fba787..6568c1fa6 100644 --- a/lib/wavhdr.f90 +++ b/lib/wavhdr.f90 @@ -37,17 +37,17 @@ module wavhdr subroutine set_wsjtx_wav_params(fMHz,mode,nsubmode,ntrperiod,id2) - parameter (NBANDS=23,NMODES=11) + parameter (NBANDS=23,NMODES=13) character*8 mode,modes(NMODES) integer*2 id2(4) - integer iperiod(7) + integer iperiod(8) real fband(NBANDS) data fband/0.137,0.474,1.8,3.5,5.1,7.0,10.14,14.0,18.1,21.0,24.9, & 28.0,50.0,144.0,222.0,432.0,902.0,1296.0,2304.0,3400.0, & 5760.0,10368.0,24048.0/ data modes/'Echo','FSK441','ISCAT','JT4','JT65','JT6M','JT9', & - 'JT9+JT65','JTMS','JTMSK','WSPR'/ - data iperiod/5,10,15,30,60,120,900/ + 'JT9+JT65','JTMS','JTMSK','WSPR','FT8','FT2'/ + data iperiod/5,10,15,30,60,120,900,0/ dmin=1.e30 iband=0 @@ -64,7 +64,7 @@ module wavhdr enddo ip=0 - do i=1,7 + do i=1,8 if(ntrperiod.eq.iperiod(i)) ip=i enddo @@ -78,15 +78,15 @@ module wavhdr subroutine get_wsjtx_wav_params(id2,band,mode,nsubmode,ntrperiod,ok) - parameter (NBANDS=23,NMODES=11) + parameter (NBANDS=23,NMODES=13) character*8 mode,modes(NMODES) character*6 band,bands(NBANDS) integer*2 id2(4) - integer iperiod(7) + integer iperiod(8) logical ok data modes/'Echo','FSK441','ISCAT','JT4','JT65','JT6M','JT9', & - 'JT9+JT65','JTMS','JTMSK','WSPR'/ - data iperiod/5,10,15,30,60,120,900/ + 'JT9+JT65','JTMS','JTMSK','WSPR','FT8','FT2'/ + data iperiod/5,10,15,30,60,120,900,0/ data bands/'2190m','630m','160m','80m','60m','40m','30m','20m', & '17m','15m','12m','10m','6m','2m','1.25m','70cm','33cm', & '23cm','13cm','9cm','6cm','3cm','1.25cm'/ @@ -95,7 +95,7 @@ module wavhdr if(id2(1).lt.1 .or. id2(1).gt.NBANDS) ok=.false. if(id2(2).lt.1 .or. id2(2).gt.NMODES) ok=.false. if(id2(3).lt.1 .or. id2(3).gt.8) ok=.false. - if(id2(4).lt.1 .or. id2(4).gt.7) ok=.false. + if(id2(4).lt.1 .or. id2(4).gt.8) ok=.false. if(ok) then band=bands(id2(1)) From c81af0bbe571a7d2cc1120a060bc03d9728d9c24 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 18 Jan 2019 08:57:46 -0500 Subject: [PATCH 025/367] Updates to code for stand-alone ft2[.exe]. --- lib/ft2/ft2.f90 | 61 +++++++++++++++++++++++++++++++++++------ lib/ft2/g4.cmd | 3 +- lib/ft2/gcom1.f90 | 6 ++-- lib/ft2/libwsjt_fort.a | Bin 1699796 -> 1699980 bytes 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/lib/ft2/ft2.f90 b/lib/ft2/ft2.f90 index 129655feb..e5c389f90 100644 --- a/lib/ft2/ft2.f90 +++ b/lib/ft2/ft2.f90 @@ -6,8 +6,21 @@ program ft2 logical allok character*20 pttport character*8 arg -! integer*2 iwave2(30000) + character*80 fname + integer*2 id2(30000) + open(12,file='all_ft2.txt',status='unknown',position='append') + nargs=iargc() + if(nargs.eq.1) then + call getarg(1,fname) + open(10,file=fname,status='old',access='stream') + read(10) id2(1:22) !Read (and ignore) the header + read(10) id2 !Read the Rx data + close(10) + call ft2_decode(fname(1:17),nfqso,id2,ndecodes,mycall,hiscall,nrx) + go to 999 + endif + allok=.true. ! Get home-station details open(10,file='ft2.ini',status='old',err=1) @@ -26,13 +39,13 @@ program ft2 call padevsub(idevin,idevout) if(idevin.ne.ndevin .or. idevout.ne.ndevout) allok=.false. i1=0 + i1=ptt(nport,1,1,iptt) i1=ptt(nport,1,0,iptt) if(i1.lt.0 .and. nport.ne.0) allok=.false. if(.not.allok) then write(*,"('Please fix setup error(s) and restart.')") go to 999 endif - open(12,file='all_ft2.txt',status='unknown',position='append') nright=1 iwrite=0 @@ -52,7 +65,6 @@ program ft2 QSO_in_progress=.false. ntxed=0 - nargs=iargc() if(nargs.eq.3) then call getarg(1,txmsg) call getarg(2,arg) @@ -67,7 +79,7 @@ program ft2 ! Start the audio streams ierr=ft2audio(idevin,idevout,npabuf,nright,y1,y2,NRING,iwrite,itx, & - iwave,nwave,nfsample,nTxOK,nTransmitting,ngo) + iwave,nwave+3*1152,nfsample,nTxOK,nTransmitting,ngo) if(ierr.ne.0) then print*,'Error',ierr,' starting audio input and/or output.' endif @@ -76,13 +88,15 @@ program ft2 subroutine update(total_time,ic1,ic2) + use wavhdr + type(hdr) h real*8 total_time integer*8 count0,count1,clkfreq integer ptt integer*2 id(30000) - logical transmitted,level + logical transmitted,level,ok character*70 line - character cdatetime*17 + character cdatetime*17,fname*17,mode*8,band*6 include 'gcom1.f90' data nt0/-1/,transmitted/.false./,snr/-99.0/ data level/.false./ @@ -157,9 +171,39 @@ subroutine update(total_time,ic1,ic2) call ft2_decode(cdatetime(),nfqso,id,ndecodes,mycall,hiscall,nrx) call system_clock(count1,clkfreq) ! tdecode=float(count1-count0)/float(clkfreq) -! write(*,3001) trun -!3001 format(f10.3) + if(ndecodes.ge.1) then + fMHz=7.074 + mode='FT2' + nsubmode=1 + ntrperiod=0 + h=default_header(12000,30000) + k=0 + do i=1,250 + sq=0 + do n=1,120 + k=k+1 + x=id(k) + sq=sq + x*x + enddo + write(43,3043) i,0.01*i,1.e-4*sq +3043 format(i7,f12.6,f12.3) + enddo + call set_wsjtx_wav_params(fMHz,mode,nsubmode,ntrperiod,id) + band="" + mode="" + nsubmode=-1 + ntrperiod=-1 + call get_wsjtx_wav_params(id,band,mode,nsubmode,ntrperiod,ok) +! write(*,1010) band,ntrperiod,mode,char(ichar('A')-1+id(3)) +!1010 format('Band: ',a6,' T/R period:',i4,' Mode: ',a8,1x,a1) + + fname=cdatetime() + fname(14:17)='.wav' + open(13,file=fname,status='unknown',access='stream') + write(13) h,id + close(13) + endif if(autoseq .and.nrx.eq.2) QSO_in_progress=.true. if(autoseq .and. QSO_in_progress .and. nrx.ge.1 .and. nrx.le.4) then lrx(nrx)=.true. @@ -220,6 +264,7 @@ subroutine transmit(nfunc,ftx,iptt) if(nfunc.eq.4) txmsg=trim(hiscall)//' '//trim(mycall)//' RR73' if(nfunc.eq.5) txmsg='TNX 73 GL' call ft2_iwave(txmsg,ftx,snrdb,iwave) + iwave(23041:)=0 i1=ptt(nport,1,1,iptt) ntxok=1 n=len(trim(txmsg)) diff --git a/lib/ft2/g4.cmd b/lib/ft2/g4.cmd index 5abf200e6..0894dbebe 100644 --- a/lib/ft2/g4.cmd +++ b/lib/ft2/g4.cmd @@ -1,6 +1,7 @@ gcc -c ft2audio.c gcc -c ptt.c gfortran -c ../77bit/packjt77.f90 +gfortran -c ../wavhdr.f90 gfortran -c ../crc.f90 -gfortran -o ft2 -fbounds-check -fno-second-underscore -ffpe-trap=invalid,zero -Wall -Wno-conversion -Wno-character-truncation ft2.f90 ft2_iwave.f90 ft2_decode.f90 getcandidates2.f90 ft2audio.o ptt.o libwsjt_fort.a libwsjt_cxx.a libportaudio.a ../libfftw3f_win.a -lwinmm +gfortran -o ft2 -fbounds-check -fno-second-underscore -ffpe-trap=invalid,zero -Wall -Wno-conversion -Wno-character-truncation ft2.f90 ft2_iwave.f90 ft2_decode.f90 getcandidates2.f90 ft2audio.o ptt.o /JTSDK/wsjtx-output/qt55/2.1.0/Release/build/libwsjt_fort.a /JTSDK/wsjtx-output/qt55/2.1.0/Release/build/libwsjt_cxx.a libportaudio.a ../libfftw3f_win.a -lwinmm rm *.o *.mod diff --git a/lib/ft2/gcom1.f90 b/lib/ft2/gcom1.f90 index 48bf391c6..9402f9d9e 100644 --- a/lib/ft2/gcom1.f90 +++ b/lib/ft2/gcom1.f90 @@ -29,6 +29,6 @@ character*4 mygrid character*3 exch character*37 txmsg -common/gcom1/snrdb,ndevin,ndevout,iwrite,itx,ngo,nTransmitting,nTxOK,nport, & - ntxed,tx_once, y1(NRING),y2(NRING),iwave(NTZ),ltx(5),lrx(5),autoseq, & - QSO_in_progress,mycall,hiscall,hiscall_next,mygrid,exch,txmsg +common/gcom1/snrdb,ndevin,ndevout,iwrite,itx,ngo,nTransmitting,nTxOK,nport, & + ntxed,tx_once,y1(NRING),y2(NRING),iwave(NTZ+3*1152),ltx(5),lrx(5), & + autoseq,QSO_in_progress,mycall,hiscall,hiscall_next,mygrid,exch,txmsg diff --git a/lib/ft2/libwsjt_fort.a b/lib/ft2/libwsjt_fort.a index 53b9c28788462ae1b90759ef98ece412ef8abd85..7884c85bb645b2967400426a8c95083b78f366e3 100644 GIT binary patch delta 2182 zcmb8w4{(#^9S895n*<9`O$>fNvg*1)>tNmw@qSn(39J7(qy{`C;n zJq97x2ch*KgoFWs9WHNgKZN~_5c=969I1kEY$JrzW(a?)fXx(};Mfb>b?drdd$b&J z+m;^Ko({pb=RMdCWnmkB6SlKDY?q_3{c|Qny$|BlXCcmf2jXo-Gj9de;I(7 zh(O#WLELu$;^CDLUwseakQ3tPL5Slz#O%2|$&rOLeQ3h$SRB&qSiyo;NXxzt>8I6@ z9)Ekn<$lOz=OEwG3AxS-IkFFOdk8YEfSkSr`Pj>lk7o+L)S*Z*DBeLRHEW=Reh=l& zH=#tTpfsI_(tHrgh6I#H*}Oypl=k>bP_V1E+8RPNfab(jUNCyY5DHPB_D?_6t+N8x?Toe9~QTVi3;1OK>?3 z!!_-~cZq-3g#TUtpaQOujc|<-xXuUQx^faadZ3F7p;wxq&+3Ezqekef2cSO?nDDF9 z&~tXgBhY_cTQD#N{Z!Y4ub0AIeH8AtstLPB;NG_x?%@pFW5Y14>tU3~U{sI7Xgv+% z$V)KZ_#KRQ2Vo3tf^mE!j58q^SLVSZ$KdhY4Ns-Fpl&xj(;hhs&$k^Kf@h$*;3U~O zKF^b^v&RUx6G}bKc|MC`n1$=%?|{;`4+W>IUc#TS)DA2&+>P)0Je?V}QjK0b*&R2pYHq(Z(G{U)~VV|;8uN&4a>@&f1U z2>P~V-U|7wR#rL8rh$Dh8?0AD=g+bZ{bt%SnK*fGKD$8wJeeeE?_}bpKfj60G4+f2 zGJ9*eB^UBbZrqd|Grwt+^?%CU>GhpcVPE66j2gO z65(E@P4`*Kxem(hmv#Ew3}WSm)4!cTzToa3V<*o&btnG8M!Ba%K-j*8Y!Vw4GJi2! zSj?6cv(?3HZ83X-p1GOazT~T7>0+@YTdr?g#zuup{f3R~`OEJwj{1tDSLhvnvWGiK zKlPI(ra=pBdEZiIiLvi-Xy=BxQ|OvXvXnE^J60*K_SY&&`n5{F#be3;xznk~Wp{hS zBA&4_0%K!DMoKpQ>k8n42rjKTAKN7RA%9 sZ+9@IjFWLOdRpJ^E?2KjVmlh`%Xhic%Xb;|P1nNQdC~_i8@_M;1(ZKCtN;K2 delta 1998 zcmb8w3rrJt90&0475cySuD!dKYkTD-Xca`n2V@upXB6F3M6-~|6knTyZir|Y5;Rr^ zmMLg_Ab;bG(FGHenfPF#3&Ghr;*4{?hMNzDGd`zNi85u3js4q3h-TTcOFsSo?)&@S zFaM^OwE9MV%k}&%k+eNY({ss3`Y+MBT_8i4bOmIZJt(IJ~wM)!Oe z+2I1}bTA&QgR#CD#$&}Wo^6Ejb|#Eng%G%gK9*l0ypVqxLg_-dg>@YeHdjOVM1@d4 z9zu%*;qF`rza4<^*9wTXZiq3h5EHBrlL^EzEPG+jYKR|}L3HnhSd$HLe6kK2`F)qP=+0Vl92;tx(UiV2~gbg-iEU9K9p6bpsZUBA6&3RpMho37FgVO zVA-`9md`$hrRj3elQvjKX2CjhFRbftz3f~mtd|b{qp-J%@G5s8_%Rz{Kb=BYdk4Zg z)<89MLNzx-wR)f?AAVU{F4U>4S3D)Cxe%(~m0Lk=8q`0sVY33Z{-ghk`@c5)d;ek~ zY?m5gyO{;s<1*Nu$HUgs0lTmf_V_8V59@|~N*(Mo?Xc&T^;ww&yI(bXbL~4<2c1oX z{pZVl+PA=wWP)Q=ai1O0aO^(`M~eZDTanQCqtGH6pe4DWl_o(u_6%BcJG5^#XcwBG zU2TMRryAO`wQ!mm;M8`(8NWCvtqsop%Z9`Gs`_v^zbgs4p0)kaC}(*(UzyHxjE)Im zLK(d`ohRv*?S+X^YHISRn7}n($mDqVuah)3kwjQx2$0AD@#a8^arDSA&Y}0QD3flz zV;oQ$&c_pk045`yao#wcTIPxB_GKevp_M(6X#x(&)aNAQIe~_R6AvfSjp4+_U8aY^ ziI3eCMUbMf6gHqL!!@H(#~!+ZEBa2I_h|&#$LShFXi*eVIgQSUCQ))I>wlBs3XNf_ zoY79dk0Ry%4=XK*CaLbKY*+4j-*GX}eO{I6iXY*t8qLzg@*cfh<16nGyq#7Pw6J*mP_v!KS7-e?|B7Bb~HmP-r~;GKS;? zD(~1>vO9#fxkzN_=_iwy(=Gd*i|MBWNe)*+7tGQ}a$_m?*r3wHK}6sxys3l8ZEp5G zb_k74RH0+v!2hEV2&@Wb{d%*+-fU8Dmerfh?#({v&DPVE@np<^S$e<{82fH-wWPON z!72wme#q&h_Q7Ng*GhK`CU0At(>2z@krS;lQ&p4yK_CXhF|ZhGT5Z>uazAl|YB zzQ{>u Date: Fri, 18 Jan 2019 11:51:15 -0500 Subject: [PATCH 026/367] Implement basic Rx capability for FT2 in WSJT-X. --- CMakeLists.txt | 3 + lib/ft2/ft2_decode.f90 | 28 ++++-- ...getcandidates2.f90 => getcandidates2a.f90} | 4 +- models/Modes.cpp | 3 +- models/Modes.hpp | 1 + widgets/mainwindow.cpp | 97 ++++++++++++++++++- widgets/mainwindow.h | 3 + widgets/mainwindow.ui | 9 ++ 8 files changed, 132 insertions(+), 16 deletions(-) rename lib/ft2/{getcandidates2.f90 => getcandidates2a.f90} (93%) diff --git a/CMakeLists.txt b/CMakeLists.txt index ef0bac291..a058fa258 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -509,6 +509,8 @@ set (wsjt_FSRCS lib/mskrtd.f90 lib/fsk4hf/ft2sim.f90 lib/fsk4hf/ft2d.f90 + lib/ft2/cdatetime.f90 + lib/ft2/ft2_decode.f90 lib/77bit/my_hash.f90 lib/wsprd/osdwspr.f90 lib/ft8/osd174_91.f90 @@ -550,6 +552,7 @@ set (wsjt_FSRCS lib/sync64.f90 lib/sync65.f90 lib/fsk4hf/getcandidates2.f90 + lib/ft2/getcandidates2a.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 lib/sync9.f90 diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index e26fc5567..5f7eb95e0 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -1,13 +1,14 @@ -subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) +subroutine ft2_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) use crc use packjt77 include 'ft2_params.f90' character message*37,c77*77 + character*61 line character*37 decodes(100) character*120 data_dir - character*17 cdatetime - character*6 mycall,hiscall + character*17 cdatetime0,cdatetime,cdt + character*6 mycall,hiscall,hhmmss complex c2(0:NMAX/16-1) !Complex waveform complex cb(0:NMAX/16-1) complex cd(0:144*10-1) !Complex waveform @@ -30,6 +31,12 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) logical unpk77_success data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ + hhmmss=' ' + if(cdatetime0==' ') then + cdt=cdatetime() + hhmmss=cdt(8:13) + endif + fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) tt=NSPS*dt !Duration of "itone" symbols (s) @@ -63,7 +70,7 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) syncmin=0.2 maxcand=100 nfqso=-1 - call getcandidates2(iwave,fa,fb,maxcand,savg,candidate,ncand) + call getcandidates2a(iwave,fa,fb,maxcand,savg,candidate,ncand) ndecodes=0 do icand=1,ncand f0=candidate(1,icand) @@ -191,11 +198,15 @@ subroutine ft2_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx) xsnr=db(sybest*sybest) - 115.0 !### Rough estimate of S/N ### nsnr=nint(xsnr) freq=f0+dfbest - write(*,1000) cdatetime,nsnr,ibest/750.0,nint(freq),message, & + write(line,1000) hhmmss,nsnr,ibest/750.0,nint(freq),message +1000 format(a6,i4,f5.2,i5,' + ',1x,a37) + open(24,file='all_ft2.txt',status='unknown',position='append') + write(24,1002) cdatetime0,nsnr,ibest/750.0,nint(freq),message, & nseq,nharderror,nhardmin - write(12,1000) cdatetime,nsnr,ibest/750.0,nint(freq),message, & - nseq,nharderror,nhardmin -1000 format(a17,i4,f6.2,i5,' Rx ',a37,3i5) + if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & + ibest/750.0,nint(freq),message,nseq,nharderror,nhardmin +1002 format(a17,i4,f6.2,i5,' Rx ',a37,3i5) + close(24) !### Temporary: assume most recent decoded message conveys "hiscall". i0=index(message,' ') @@ -290,4 +301,3 @@ subroutine ft2_downsample(iwave,f0,c) c=c1(0:NMAX/16-1) return end subroutine ft2_downsample - diff --git a/lib/ft2/getcandidates2.f90 b/lib/ft2/getcandidates2a.f90 similarity index 93% rename from lib/ft2/getcandidates2.f90 rename to lib/ft2/getcandidates2a.f90 index dd5dac507..8e7209c9c 100644 --- a/lib/ft2/getcandidates2.f90 +++ b/lib/ft2/getcandidates2a.f90 @@ -1,4 +1,4 @@ -subroutine getcandidates2(id,fa,fb,maxcand,savg,candidate,ncand) +subroutine getcandidates2a(id,fa,fb,maxcand,savg,candidate,ncand) ! For now, hardwired to find the largest peak in the average spectrum @@ -61,4 +61,4 @@ subroutine getcandidates2(id,fa,fb,maxcand,savg,candidate,ncand) endif return -end subroutine getcandidates2 +end subroutine getcandidates2a diff --git a/models/Modes.cpp b/models/Modes.cpp index 9d21459c7..b823e3649 100644 --- a/models/Modes.cpp +++ b/models/Modes.cpp @@ -23,7 +23,8 @@ namespace "MSK144", "QRA64", "FreqCal", - "FT8" + "FT8", + "FT2" }; std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]); } diff --git a/models/Modes.hpp b/models/Modes.hpp index cdf299749..6af3e5ef3 100644 --- a/models/Modes.hpp +++ b/models/Modes.hpp @@ -49,6 +49,7 @@ public: QRA64, FreqCal, FT8, + FT2, MODES_END_SENTINAL_AND_COUNT // this must be last }; Q_ENUM (Mode) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a3c031c53..54e37905f 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -159,6 +159,10 @@ extern "C" { void plotsave_(float swide[], int* m_w , int* m_h1, int* irow); void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); + + void ft2_decode_(char* cdatetime, int* nfqso, short int id[], int* ndecodes, + char* mycall6, char* hiscall6, int* nrx, char* line, + int len1, int len2, int len3, int len4); } int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols @@ -544,6 +548,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, on_EraseButton_clicked (); QActionGroup* modeGroup = new QActionGroup(this); + ui->actionFT2->setActionGroup(modeGroup); ui->actionFT8->setActionGroup(modeGroup); ui->actionJT9->setActionGroup(modeGroup); ui->actionJT65->setActionGroup(modeGroup); @@ -874,6 +879,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, if(m_bFast9) m_bFastMode=true; ui->cbFast9->setChecked(m_bFast9 or m_bFastMode); + if(m_mode=="FT2") on_actionFT2_triggered(); if(m_mode=="FT8") on_actionFT8_triggered(); if(m_mode=="JT4") on_actionJT4_triggered(); if(m_mode=="JT9") on_actionJT9_triggered(); @@ -1345,7 +1351,8 @@ void MainWindow::dataSink(qint64 frames) if(m_monitoring || m_diskData) { m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); } - if(m_mode=="MSK144") return; + if(m_mode=="FT2") ft2Data(k); + if(m_mode=="MSK144" or m_mode=="FT2") return; fixStop(); if (m_mode == "FreqCal" @@ -1546,7 +1553,6 @@ void MainWindow::fastSink(qint64 frames) { int k (frames); bool decodeNow=false; - if(k < m_k0) { //New sequence ? memcpy(fast_green2,fast_green,4*703); //Copy fast_green[] to fast_green2[] memcpy(fast_s2,fast_s,4*703*64); //Copy fast_s[] into fast_s2[] @@ -3836,6 +3842,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { +// qDebug() << "cc oneSec" << dec_data.params.kin << m_ihsym; // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { @@ -5497,6 +5504,52 @@ void MainWindow::displayWidgets(qint64 n) genStdMsgs (m_rpt, true); } +void MainWindow::on_actionFT2_triggered() +{ + m_mode="FT2"; + m_modeTx="FT2"; + m_TRperiod=2147483647; + bool bVHF=m_config.enable_VHF_features(); + m_bFast9=false; + m_bFastMode=false; + WSPR_config(false); + switch_mode (Modes::FT2); + m_nsps=6912; + m_FFTSize = m_nsps/2; + Q_EMIT FFTSize (m_FFTSize); + m_hsymStop=50; + setup_status_bar (bVHF); + m_toneSpacing=0.0; //??? + ui->actionFT2->setChecked(true); //??? + m_wideGraph->setMode(m_mode); + m_wideGraph->setModeTx(m_modeTx); + VHF_features_enabled(bVHF); + ui->cbAutoSeq->setChecked(false); + m_fastGraph->hide(); + m_wideGraph->show(); + ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); + m_wideGraph->setPeriod(m_TRperiod,m_nsps); + m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe + m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe + ui->label_7->setText("Rx Frequency"); + ui->label_6->setText("Band Activity"); + ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); + displayWidgets(nWidgets("111010000100111000010000100110001")); + ui->txrb2->setEnabled(true); + ui->txrb4->setEnabled(true); + ui->txrb5->setEnabled(true); + ui->txrb6->setEnabled(true); + ui->txb2->setEnabled(true); + ui->txb4->setEnabled(true); + ui->txb5->setEnabled(true); + ui->txb6->setEnabled(true); + ui->txFirstCheckBox->setEnabled(true); + ui->cbAutoSeq->setEnabled(true); + ui->labDXped->setVisible(false); + ui->labDXped->setText(""); + statusChanged(); +} + void MainWindow::on_actionFT8_triggered() { m_mode="FT8"; @@ -5599,8 +5652,6 @@ void MainWindow::on_actionFT8_triggered() statusChanged(); } - - void MainWindow::on_actionJT4_triggered() { m_mode="JT4"; @@ -8499,3 +8550,41 @@ void MainWindow::write_all(QString txRx, QString message) MessageBox::warning_message(this, tr ("Log File Error"), message2); }); } } + +void MainWindow::ft2Data(int k) +{ + static int nhsec0=-1; + short id[30000]; + int nhsec=k/6000; + if(nhsec!=nhsec0) { + //Process FT2 data at 0.5 s intervals + int j=k-30000; + if(j<0) j+=NRING; + for(int i=0; i<30000; i++) { + id[i]=dec_data.d2[j]; + j++; + if(j>=NRING) j=j-NRING; + } + if(k>=NRING) { + k=k-NRING; + dec_data.params.kin=k; + } + char cdatetime[]=" "; + char mycall6[] ="K1JT "; + char hiscall6[]="K9AN "; + char line[61]; + int nfqso=1500; + int ndecodes=0; + int nrx=-1; + ft2_decode_(cdatetime,&nfqso,id,&ndecodes,mycall6,hiscall6,&nrx,&line[0], + 17,6,6,61); + line[60]=0; + if(ndecodes>0) { + QString sline{QString::fromLatin1(line)}; + DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; + ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, + m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); + } + nhsec0=nhsec; + } +} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index acabffe7f..fad9262c9 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -49,6 +49,7 @@ #define NUM_CW_SYMBOLS 250 #define TX_SAMPLE_RATE 48000 #define N_WIDGETS 33 +#define NRING 432000 extern int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols extern int volatile icw[NUM_CW_SYMBOLS]; //Dits for CW ID @@ -200,6 +201,7 @@ private slots: void on_actionJT65_triggered(); void on_actionJT9_JT65_triggered(); void on_actionJT4_triggered(); + void on_actionFT2_triggered(); void on_actionFT8_triggered(); void on_TxFreqSpinBox_valueChanged(int arg1); void on_actionSave_decoded_triggered(); @@ -309,6 +311,7 @@ private slots: void on_comboBoxHoundSort_activated (int index); void not_GA_warning_message (); void checkMSK144ContestType(); + void ft2Data(int k); int setTxMsg(int n); bool stdCall(QString const& w); diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index 4e39e6d6c..ca9551ec2 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -2705,6 +2705,7 @@ list. The list can be maintained in Settings (F2). Mode + @@ -3338,6 +3339,14 @@ list. The list can be maintained in Settings (F2). Erase WSPR hashtable + + + true + + + FT2 + + From 2033a2b33d59d3425c0603caab94bae7652c8684 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 18 Jan 2019 12:33:45 -0500 Subject: [PATCH 027/367] Add a missing file; tweak the FT2 decoder. --- lib/ft2/cdatetime.f90 | 6 ++++++ lib/ft2/ft2_decode.f90 | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 lib/ft2/cdatetime.f90 diff --git a/lib/ft2/cdatetime.f90 b/lib/ft2/cdatetime.f90 new file mode 100644 index 000000000..33deaf30a --- /dev/null +++ b/lib/ft2/cdatetime.f90 @@ -0,0 +1,6 @@ +character*17 function cdatetime() + character cdate*8,ctime*10 + call date_and_time(cdate,ctime) + cdatetime=cdate(3:8)//'_'//ctime + return +end function cdatetime diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index 5f7eb95e0..b250fca32 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -7,7 +7,7 @@ subroutine ft2_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) character*61 line character*37 decodes(100) character*120 data_dir - character*17 cdatetime0,cdatetime,cdt + character*17 cdatetime0,cdatetime character*6 mycall,hiscall,hhmmss complex c2(0:NMAX/16-1) !Complex waveform complex cb(0:NMAX/16-1) @@ -33,8 +33,8 @@ subroutine ft2_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) hhmmss=' ' if(cdatetime0==' ') then - cdt=cdatetime() - hhmmss=cdt(8:13) + cdatetime0=cdatetime() + hhmmss=cdatetime0(8:13) endif fs=12000.0/NDOWN !Sample rate From 568fc0810e7539c0d2feab79918fedac66958809 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 18 Jan 2019 16:22:25 -0500 Subject: [PATCH 028/367] Tx now works, more or less, in FT2 mode. Needs testing! --- Modulator.cpp | 20 +++-- lib/ft2/ft2_decode.f90 | 7 +- widgets/displaytext.cpp | 1 + widgets/mainwindow.cpp | 185 +++++++++++++++++++++++++++++++--------- widgets/mainwindow.h | 4 +- 5 files changed, 163 insertions(+), 54 deletions(-) diff --git a/Modulator.cpp b/Modulator.cpp index a7564f6cf..9934e9ab1 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -47,14 +47,13 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, SoundOutput * stream, Channel channel, bool synchronize, bool fastMode, double dBSNR, int TRperiod) { +// qDebug() << "Mod AA" << symbolsLength << framesPerSymbol << frequency +// << toneSpacing << synchronize << fastMode << dBSNR << TRperiod; Q_ASSERT (stream); // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; - if (m_state != Idle) - { - stop (); - } + if(m_state != Idle) stop (); m_quickClose = false; @@ -92,6 +91,14 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } + if(symbolsLength==144 and framesPerSymbol==160 and toneSpacing==60) { + //### FT2 params + delay_ms=100; + mstr=1947; + m_ic=0; + m_silentFrames=0; + } +// qDebug() << "Mod AB" << delay_ms << mstr << m_ic << m_silentFrames; initialize (QIODevice::ReadOnly, channel); Q_EMIT stateChanged ((m_state = (synchronize && m_silentFrames) ? @@ -170,7 +177,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) case Active: { unsigned int isym=0; -// qDebug() << "Mod A" << m_toneSpacing << m_ic; +// qDebug() << "Mod A" << m_toneSpacing << m_frequency << m_nsps +// << m_ic << m_symbolsLength << icw[0]; if(!m_tuning) isym=m_ic/(4.0*m_nsps); // Actual fsample=48000 bool slowCwId=((isym >= m_symbolsLength) && (icw[0] > 0)) && (!m_bFastMode); if(m_TRperiod==3) slowCwId=false; @@ -289,6 +297,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) if (m_ic > i1) m_amp = 0.0; sample=qRound(m_amp*qSin(m_phi)); + +//Here's where we transmit from a precomputed wave[] array: if(m_toneSpacing < 0) sample=qRound(m_amp*foxcom_.wave[m_ic]); // if(m_ic < 100) qDebug() << "Mod C" << m_ic << m_amp << foxcom_.wave[m_ic] << sample; diff --git a/lib/ft2/ft2_decode.f90 b/lib/ft2/ft2_decode.f90 index b250fca32..1d1bb6a53 100644 --- a/lib/ft2/ft2_decode.f90 +++ b/lib/ft2/ft2_decode.f90 @@ -31,12 +31,7 @@ subroutine ft2_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) logical unpk77_success data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ - hhmmss=' ' - if(cdatetime0==' ') then - cdatetime0=cdatetime() - hhmmss=cdatetime0(8:13) - endif - + hhmmss=cdatetime0(8:13) fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) tt=NSPS*dt !Duration of "itone" symbols (s) diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index 8058908ba..0f1a9ce1b 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -455,6 +455,7 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 txFreq,bool bFastMode) { QString t1=" @ "; + if(modeTx=="FT2") t1=" + "; if(modeTx=="FT8") t1=" ~ "; if(modeTx=="JT4") t1=" $ "; if(modeTx=="JT65") t1=" # "; diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 54e37905f..5ae884a4d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -99,6 +99,9 @@ extern "C" { void genft8_(char* msg, int* i3, int* n3, char* msgsent, char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t); + void genft2_(char* msg, int* ichk, char* msgsent, int itone[], int* itype, + fortran_charlen_t, fortran_charlen_t); + void gen4_(char* msg, int* ichk, char* msgsent, int itone[], int* itext, fortran_charlen_t, fortran_charlen_t); @@ -1883,6 +1886,10 @@ void MainWindow::keyPressEvent (QKeyEvent * e) break; case Qt::Key_F1: if(bAltF1F5) { + if(m_mode=="FT2") { + ft2_tx(6); + return; + } auto_tx_mode(true); on_txb6_clicked(); return; @@ -1892,6 +1899,10 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F2: if(bAltF1F5) { + if(m_mode=="FT2") { + ft2_tx(2); + return; + } auto_tx_mode(true); on_txb2_clicked(); return; @@ -1901,6 +1912,10 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F3: if(bAltF1F5) { + if(m_mode=="FT2") { + ft2_tx(3); + return; + } auto_tx_mode(true); on_txb3_clicked(); return; @@ -1910,6 +1925,10 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F4: if(bAltF1F5) { + if(m_mode=="FT2") { + ft2_tx(4); + return; + } auto_tx_mode(true); on_txb4_clicked(); return; @@ -1920,6 +1939,10 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F5: if(bAltF1F5) { + if(m_mode=="FT2") { + ft2_tx(5); + return; + } auto_tx_mode(true); on_txb5_clicked(); return; @@ -3372,7 +3395,7 @@ void MainWindow::guiUpdate() double tx1=0.0; double tx2=txDuration; - if(m_mode=="FT8") icw[0]=0; //No CW ID in FT8 mode + if(m_mode=="FT8" or m_mode=="FT2") icw[0]=0; //No CW ID in FT2 or FT8 mode if((icw[0]>0) and (!m_bFast9)) tx2 += icw[0]*2560.0/48000.0; //Full length including CW ID if(tx2>m_TRperiod) tx2=m_TRperiod; @@ -3782,21 +3805,22 @@ void MainWindow::guiUpdate() } } - if (g_iptt == 1 && m_iptt0 == 0) - { - auto const& current_message = QString::fromLatin1 (msgsent); - if(m_config.watchdog () && !m_mode.startsWith ("WSPR") - && current_message != m_msgSent0) { - tx_watchdog (false); // in case we are auto sequencing - m_msgSent0 = current_message; - } + if (g_iptt == 1 && m_iptt0 == 0) { + auto const& current_message = QString::fromLatin1 (msgsent); + if(m_config.watchdog () && !m_mode.startsWith ("WSPR") + && current_message != m_msgSent0) { + tx_watchdog (false); // in case we are auto sequencing + m_msgSent0 = current_message; + } + if(m_mode!="FT2") { if(!m_tune) write_all("Tx",m_currentMessage); if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, - ui->TxFreqSpinBox->value(),m_bFastMode); + ui->TxFreqSpinBox->value(),m_bFastMode); } + } switch (m_ntx) { @@ -3842,7 +3866,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { -// qDebug() << "cc oneSec" << dec_data.params.kin << m_ihsym; +// qDebug() << "cc onesec" << g_iptt << m_iptt0; // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { @@ -5519,7 +5543,7 @@ void MainWindow::on_actionFT2_triggered() Q_EMIT FFTSize (m_FFTSize); m_hsymStop=50; setup_status_bar (bVHF); - m_toneSpacing=0.0; //??? + m_toneSpacing=0.8*75.0; //??? ui->actionFT2->setChecked(true); //??? m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); @@ -6815,6 +6839,15 @@ void MainWindow::transmit (double snr) true, false, snr, m_TRperiod); } + if (m_modeTx == "FT2") { + toneSpacing=0.8*12000.0/160.0; +// if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1; + Q_EMIT sendMessage (NUM_FT2_SYMBOLS, + 160.0, ui->TxFreqSpinBox->value() - m_XIT, + toneSpacing, m_soundOutput, m_config.audio_output_channel (), + true, false, snr, 2); + } + if (m_modeTx == "QRA64") { if(m_nSubMode==0) toneSpacing=12000.0/6912.0; if(m_nSubMode==1) toneSpacing=2*12000.0/6912.0; @@ -8555,36 +8588,104 @@ void MainWindow::ft2Data(int k) { static int nhsec0=-1; short id[30000]; + int nhsec=k/6000; - if(nhsec!=nhsec0) { - //Process FT2 data at 0.5 s intervals - int j=k-30000; - if(j<0) j+=NRING; - for(int i=0; i<30000; i++) { - id[i]=dec_data.d2[j]; - j++; - if(j>=NRING) j=j-NRING; - } - if(k>=NRING) { - k=k-NRING; - dec_data.params.kin=k; - } - char cdatetime[]=" "; - char mycall6[] ="K1JT "; - char hiscall6[]="K9AN "; - char line[61]; - int nfqso=1500; - int ndecodes=0; - int nrx=-1; - ft2_decode_(cdatetime,&nfqso,id,&ndecodes,mycall6,hiscall6,&nrx,&line[0], - 17,6,6,61); - line[60]=0; - if(ndecodes>0) { - QString sline{QString::fromLatin1(line)}; - DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; - ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, - m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); - } - nhsec0=nhsec; + if(nhsec==nhsec0) return; + +//Process FT2 data at 0.5 s intervals + int j=k/6000; + j=6000*j-30000; + if(j<0) j+=NRING; + for(int i=0; i<30000; i++) { + id[i]=dec_data.d2[j]; + j++; + if(j>=NRING) j=j-NRING; } + + if(k>=NRING) { +//Wrap the ring buffer pointer + k=k-NRING; + dec_data.params.kin=k; + } + + auto time = QDateTime::currentDateTimeUtc (); + QString t=time.toString("yyMMdd_hhmmss.sss"); + QByteArray ba=time.toString("yyMMdd_hhmmss.sss").toLatin1(); + char* cdatetime=ba.data(); + char mycall6[] ="K1JT "; + char hiscall6[]="K9AN "; + char line[61]; + int nfqso=1500; + int ndecodes=0; + int nrx=-1; + ft2_decode_(cdatetime,&nfqso,id,&ndecodes,mycall6,hiscall6,&nrx,&line[0], + 17,6,6,61); + line[60]=0; + if(ndecodes>0) { + QString sline{QString::fromLatin1(line)}; + DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; + ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, + m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); + } + nhsec0=nhsec; +} + +void MainWindow::ft2_tx(int ntx) +{ + if(g_iptt!=0) return; //Alreadt transmitting? + static char message[38]; + static char msgsent[38]; + QByteArray ba; + m_ntx=ntx; + if(m_ntx == 1) ba=ui->tx1->text().toLocal8Bit(); + if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit(); + if(m_ntx == 3) ba=ui->tx3->text().toLocal8Bit(); + if(m_ntx == 4) ba=ui->tx4->text().toLocal8Bit(); + if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); + if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); + if(m_ntx == 7) ba=ui->genMsg->text().toLocal8Bit(); + if(m_ntx == 8) ba=ui->freeTextMsg->currentText().toLocal8Bit(); + ba2msg(ba,message); + int ichk=0; + int itype=-1; + genft2_(message, &ichk, msgsent, const_cast(itone), &itype, 37, 37); + msgsent[37]=0; + m_currentMessage = QString::fromLatin1(msgsent); + on_txb6_clicked(); + auto_tx_mode(true); + + icw[0]=0; + g_iptt = 1; + setRig (); + setXIT (ui->TxFreqSpinBox->value ()); + Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT + m_tx_when_ready = true; + + if (g_iptt == 1 && m_iptt0 == 0) { + auto const& current_message = QString::fromLatin1 (msgsent); + write_all("Tx",m_currentMessage); + + if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { + ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, + ui->TxFreqSpinBox->value(),m_bFastMode); + } + + switch (m_ntx) + { + case 1: m_QSOProgress = REPLYING; break; + case 2: m_QSOProgress = REPORT; break; + case 3: m_QSOProgress = ROGER_REPORT; break; + case 4: m_QSOProgress = ROGERS; break; + case 5: m_QSOProgress = SIGNOFF; break; + case 6: m_QSOProgress = CALLING; break; + default: break; // determined elsewhere + } + m_transmitting = true; + transmitDisplay (true); + statusUpdate (); + } + + if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); + +// if(!m_bTxTime and !m_tune) m_btxok=false; //Time to stop transmitting } diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index fad9262c9..942ccd563 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -46,10 +46,11 @@ #define NUM_MSK144_SYMBOLS 144 //s8 + d48 + s8 + d80 #define NUM_QRA64_SYMBOLS 84 //63 data + 21 sync #define NUM_FT8_SYMBOLS 79 +#define NUM_FT2_SYMBOLS 144 #define NUM_CW_SYMBOLS 250 #define TX_SAMPLE_RATE 48000 #define N_WIDGETS 33 -#define NRING 432000 +#define NRING 3456000 extern int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols extern int volatile icw[NUM_CW_SYMBOLS]; //Dits for CW ID @@ -312,6 +313,7 @@ private slots: void not_GA_warning_message (); void checkMSK144ContestType(); void ft2Data(int k); + void ft2_tx(int ntx); int setTxMsg(int n); bool stdCall(QString const& w); From f2dc394c84322135cafe3cb0e8c834e4e84d25ea Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 21 Jan 2019 19:31:54 -0600 Subject: [PATCH 029/367] Add ft4 files; ft4sim works, ft4d is work in progress. --- CMakeLists.txt | 14 +- lib/fsk4hf/ft2d.f90 | 54 +++++- lib/fsk4hf/ft2sim.f90 | 2 +- lib/fsk4hf/ft4_params.f90 | 14 ++ lib/fsk4hf/ft4d.f90 | 317 ++++++++++++++++++++++++++++++++++ lib/fsk4hf/ft4sim.f90 | 158 +++++++++++++++++ lib/fsk4hf/genft4.f90 | 68 ++++++++ lib/fsk4hf/getcandidates4.f90 | 63 +++++++ 8 files changed, 675 insertions(+), 15 deletions(-) create mode 100644 lib/fsk4hf/ft4_params.f90 create mode 100644 lib/fsk4hf/ft4d.f90 create mode 100644 lib/fsk4hf/ft4sim.f90 create mode 100644 lib/fsk4hf/genft4.f90 create mode 100644 lib/fsk4hf/getcandidates4.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index e33ffe408..1b1ba38ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -462,7 +462,7 @@ set (wsjt_FSRCS lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 - lib/fsk4hf/genft2.f90 + lib/fsk4hf/genft4.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 lib/genwspr.f90 @@ -508,8 +508,8 @@ set (wsjt_FSRCS lib/msk144signalquality.f90 lib/msk144sim.f90 lib/mskrtd.f90 - lib/fsk4hf/ft2sim.f90 - lib/fsk4hf/ft2d.f90 + lib/fsk4hf/ft4sim.f90 + lib/fsk4hf/ft4d.f90 lib/77bit/my_hash.f90 lib/wsprd/osdwspr.f90 lib/ft8/osd174_91.f90 @@ -1261,11 +1261,11 @@ target_link_libraries (ft8sim wsjt_fort wsjt_cxx) add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc) target_link_libraries (msk144sim wsjt_fort wsjt_cxx) -add_executable (ft2sim lib/fsk4hf/ft2sim.f90 wsjtx.rc) -target_link_libraries (ft2sim wsjt_fort wsjt_cxx) +add_executable (ft4sim lib/fsk4hf/ft4sim.f90 wsjtx.rc) +target_link_libraries (ft4sim wsjt_fort wsjt_cxx) -add_executable (ft2d lib/fsk4hf/ft2d.f90 wsjtx.rc) -target_link_libraries (ft2d wsjt_fort wsjt_cxx) +add_executable (ft4d lib/fsk4hf/ft4d.f90 wsjtx.rc) +target_link_libraries (ft4d wsjt_fort wsjt_cxx) endif(WSJT_BUILD_UTILS) diff --git a/lib/fsk4hf/ft2d.f90 b/lib/fsk4hf/ft2d.f90 index e924366c6..fda1f1826 100644 --- a/lib/fsk4hf/ft2d.f90 +++ b/lib/fsk4hf/ft2d.f90 @@ -13,6 +13,7 @@ program ft2d complex c1(0:9),c0(0:9) complex ccor(0:1,144) complex csum,cterm,cc0,cc1,csync1,csync2 + complex csync(16),csl(0:159) real*8 fMHz real a(5) @@ -26,9 +27,10 @@ program ft2d integer*2 iwave(NMAX) !Generated full-length waveform integer*1 message77(77),apmask(128),cw(128) integer*1 hbits(144),hbits1(144),hbits3(144) - integer*1 s16(16) + integer*1 s16(16),s45(45) logical unpk77_success data s16/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0/ + data s45/0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0/ fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) @@ -36,7 +38,7 @@ program ft2d baud=1.0/tt !Keying rate for "itone" symbols (baud) txt=NZ*dt !Transmission length (s) twopi=8.0*atan(1.0) - h=0.8 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + h=0.800 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) dphi=twopi/2*baud*h*dt*16 ! dt*16 is samp interval after downsample dphi0=-1*dphi @@ -52,6 +54,18 @@ program ft2d the=twopi*h/2.0 cc1=cmplx(cos(the),-sin(the)) cc0=cmplx(cos(the),sin(the)) + + k=0 + do j=1,16 + dphi1=(2*s16(j)-1)*dphi + phi1=0.0 + do i=0,9 + csl(k)=cmplx(cos(phi1),sin(phi1)) + phi1=mod(phi1+dphi1,twopi) + k=k+1 + enddo + enddo + nargs=iargc() if(nargs.lt.1) then print*,'Usage: ft2d [-a ] [-f fMHz] file1 [file2 ...]' @@ -89,6 +103,22 @@ program ft2d xsnr=1.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft2_downsample(iwave,f0,c2) ! downsample from 160s/Symbol to 10s/Symbol + +!c2=c2/sqrt(sum(abs(c2(0:NMAX/16-1)))) +!ishift=-1 +!rccbest=-99. +!do is=0,435 +!rcc=0.0 +! do id=10,10 +! rcc=rcc+abs(sum(conjg(c2(is:is+159-id))*c2(is+id:is+159)*csl(0:159-id)*conjg(csl(id:159)))) +! enddo +! if(rcc.gt.rccbest) then +! rccbest=rcc +! ishift=is +! endif +!write(21,*) is,rcc +!enddo + ! 750 samples/second here ibest=-1 sybest=-99. @@ -102,9 +132,10 @@ program ft2d csync1=0. cterm=1 do ib=1,16 +! do ib=1,45 i1=(ib-1)*10+is - i2=i1+136*10 if(s16(ib).eq.1) then +! if(s45(ib).eq.1) then csync1=csync1+sum(cb(i1:i1+9)*conjg(c1(0:9)))*cterm cterm=cterm*cc1 else @@ -121,13 +152,18 @@ program ft2d enddo a=0. +!dfbest=1500.0-f0 a(1)=-dfbest + call twkfreq1(c2,NMAX/16,fs,a,cb) + +!ibest=197 ib=ibest + cd=cb(ib:ib+144*10-1) s2=sum(cd*conjg(cd))/(10*144) cd=cd/sqrt(s2) - do nseq=1,5 + do nseq=1,4 if( nseq.eq.1 ) then ! noncoherent single-symbol detection sbits1=0.0 do ibit=1,144 @@ -178,7 +214,7 @@ program ft2d hbits=hbits3 endif nsync_qual=count(hbits(1:16).eq.s16) - if(nsync_qual.lt.10) exit +! if(nsync_qual.lt.10) exit rxdata=sbits(17:144) rxav=sum(rxdata(1:128))/128.0 rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 @@ -186,7 +222,11 @@ program ft2d rxdata=rxdata/rxsig sigma=0.80 llr(1:128)=2*rxdata/(sigma*sigma) +!xllrmax=maxval(abs(llr)) +!write(*,*) ifile,icand,nseq,nsync_qual apmask=0 +!apmask(1:29)=1 +!llr(1:29)=xllrmax*(2*s45(17:45)-1) max_iterations=40 do ibias=0,0 llr2=llr @@ -209,8 +249,8 @@ program ft2d nsnr=nint(xsnr) freq=f0+dfbest 1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) - write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',nseq,nharderror -1212 format(a4,i4,f5.1,f11.1,2x,a22,a1,i5,i5) + write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',nseq,nharderror,nsync_qual +1212 format(a4,i4,2x,f5.3,f11.1,2x,a22,a1,i5,i5,i5) goto 888 endif enddo ! nseq diff --git a/lib/fsk4hf/ft2sim.f90 b/lib/fsk4hf/ft2sim.f90 index 5c0e07431..ea0518a52 100644 --- a/lib/fsk4hf/ft2sim.f90 +++ b/lib/fsk4hf/ft2sim.f90 @@ -48,7 +48,7 @@ program ft2sim twopi=8.0*atan(1.0) fs=12000.0 !Sample rate (Hz) dt=1.0/fs !Sample interval (s) - hmod=0.8 !Modulation index (0.5 is MSK, 1.0 is FSK) + hmod=0.800 !Modulation index (0.5 is MSK, 1.0 is FSK) tt=NSPS*dt !Duration of symbols (s) baud=1.0/tt !Keying rate (baud) txt=NZ*dt !Transmission length (s) diff --git a/lib/fsk4hf/ft4_params.f90 b/lib/fsk4hf/ft4_params.f90 new file mode 100644 index 000000000..3f3e9769d --- /dev/null +++ b/lib/fsk4hf/ft4_params.f90 @@ -0,0 +1,14 @@ +! FT4 37.5 baud - 26.67 ms symbol duration +! LDPC (128,90) code + +parameter (KK=90) !Information bits (77 + CRC13) +parameter (ND=64) !Data symbols +parameter (NS=12) !Sync symbols (12) +parameter (NN=NS+ND) !Total channel symbols (76) +parameter (NSPS=320) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Samples in full 1.92 s waveform (23040) +parameter (NMAX=2.5*12000) !Samples in iwave (36,000) +parameter (NFFT1=640, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NDOWN=16) !Downsample factor diff --git a/lib/fsk4hf/ft4d.f90 b/lib/fsk4hf/ft4d.f90 new file mode 100644 index 000000000..22c81cec8 --- /dev/null +++ b/lib/fsk4hf/ft4d.f90 @@ -0,0 +1,317 @@ +program ft4d + + use crc + use packjt77 + include 'ft4_params.f90' + character arg*8,message*37,c77*77,infile*80,fname*16,datetime*11 + character*37 decodes(100) + character*120 data_dir + character*90 dmsg + complex cd2(0:NMAX/16-1) !Complex waveform + complex cb(0:NMAX/16-1) + complex cd(0:76*10-1) !Complex waveform + complex c3(0:19),c2(0:19),c1(0:19),c0(0:19) + complex ccor(0:3,76) + complex csum,cterm,cc0,cc1,csync1,csync2 + complex csync(12) + real*8 fMHz + + real a(5) + real rxdata(128),llr(128) !Soft symbols + real llr2(128) + real sbits(152),sbits1(152),sbits3(152) + real ps(0:8191),psbest(0:8191) + real candidates(100,2) + real savg(NH1),sbase(NH1) + integer ihdr(11) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),apmask(128),cw(128) + integer*1 hbits(152),hbits1(152),hbits3(152) + integer*1 s12(12) + logical unpk77_success + data s12/0,0,0,1,1,1,1,1,1,0,0,0/ + + fs=12000.0/NDOWN !Sample rate + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + baud=1.0/tt !Keying rate for "itone" symbols (baud) + txt=NZ*dt !Transmission length (s) + twopi=8.0*atan(1.0) + h=1.000 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + + dphi=twopi/2*baud*h*dt*16 ! dt*16 is samp interval after downsample + dphi0=-1.5*dphi + dphi1=-0.5*dphi + dphi2=+0.5*dphi + dphi3=+1.5*dphi + phi0=0.0 + phi1=0.0 + phi2=0.0 + phi3=0.0 + do i=0,9 + c3(i)=cmplx(cos(phi3),sin(phi3)) + c2(i)=cmplx(cos(phi2),sin(phi2)) + c1(i)=cmplx(cos(phi1),sin(phi1)) + c0(i)=cmplx(cos(phi0),sin(phi0)) + phi3=mod(phi1+dphi3,twopi) + phi2=mod(phi1+dphi2,twopi) + phi1=mod(phi1+dphi1,twopi) + phi0=mod(phi0+dphi0,twopi) + enddo + the=twopi*h/2.0 + cc3=cmplx(cos(3*the),-sin(3*the)) + cc2=cmplx(cos(the),-sin(the)) + cc1=cmplx(cos(the),sin(the)) + cc0=cmplx(cos(3*the),-sin(3*the)) + + nargs=iargc() + if(nargs.lt.1) then + print*,'Usage: ft4d [-a ] [-f fMHz] file1 [file2 ...]' + go to 999 + endif + iarg=1 + data_dir="." + call getarg(iarg,arg) + if(arg(1:2).eq.'-a') then + call getarg(iarg+1,data_dir) + iarg=iarg+2 + endif + call getarg(iarg,arg) + if(arg(1:2).eq.'-f') then + call getarg(iarg+1,arg) + read(arg,*) fMHz + iarg=iarg+2 + endif + ncoh=1 + + do ifile=iarg,nargs + call getarg(ifile,infile) + j2=index(infile,'.wav') + open(10,file=infile,status='old',access='stream') + read(10,end=999) ihdr,iwave + read(infile(j2-4:j2-1),*) nutc + datetime=infile(j2-11:j2-1) + close(10) + candidates=0.0 + ncand=0 + call getcandidates2(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidates,ncand,sbase) + ndecodes=0 + do icand=1,ncand + f0=candidates(icand,1) + xsnr=1.0 + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + call ft4_downsample(iwave,f0,cd2) ! downsample from 160s/Symbol to 10s/Symbol + +! 750 samples/second here + ibest=-1 + sybest=-99. + dfbest=-1. + do if=-60,+60 + df=if + a=0. + a(1)=-df + call twkfreq1(cd2,NMAX/16,fs,a,cb) + do is=0,380 + csync1=0. + cterm=1 + do ib=1,12 + i1=(ib-1)*10+is + if(s12(ib).eq.0) then + csync1=csync1+sum(cb(i1:i1+19)*conjg(c0(0:19)))*cterm + cterm=cterm*cc0 + else + csync1=csync1+sum(cb(i1:i1+19)*conjg(c3(0:19)))*cterm + cterm=cterm*cc3 + endif + enddo + if(abs(csync1).gt.sybest) then + ibest=is + sybest=abs(csync1) + dfbest=df + endif + enddo + enddo + + a=0. +!dfbest=1500.0-f0 + a(1)=-dfbest + + call twkfreq1(c2,NMAX/16,fs,a,cb) + +!ibest=197 + ib=ibest +write(*,*) f0,f0+dfbest,ibest +goto 888 + cd=cb(ib:ib+144*10-1) + s2=sum(cd*conjg(cd))/(10*144) + cd=cd/sqrt(s2) + do nseq=1,1 + if( nseq.eq.1 ) then ! noncoherent single-symbol detection + sbits1=0.0 + do ibit=1,76 + ib=(ibit-1)*10 + ccor(1,ibit)=sum(cd(ib:ib+9)*conjg(c1(0:9))) + ccor(0,ibit)=sum(cd(ib:ib+9)*conjg(c0(0:9))) + sbits1(ibit)=abs(ccor(1,ibit))-abs(ccor(0,ibit)) + hbits1(ibit)=0 + if(sbits1(ibit).gt.0) hbits1(ibit)=1 + enddo + sbits=sbits1 + hbits=hbits1 + sbits3=sbits1 + hbits3=hbits1 + elseif( nseq.ge.2 ) then + nbit=2*nseq-1 + numseq=2**(nbit) + ps=0 + do ibit=nbit/2+1,144-nbit/2 + ps=0.0 + pmax=0.0 + do iseq=0,numseq-1 + csum=0.0 + cterm=1.0 + k=1 + do i=nbit-1,0,-1 + ibb=iand(iseq/(2**i),1) + csum=csum+ccor(ibb,ibit-(nbit/2+1)+k)*cterm + if(ibb.eq.0) cterm=cterm*cc0 + if(ibb.eq.1) cterm=cterm*cc1 + k=k+1 + enddo + ps(iseq)=abs(csum) + if( ps(iseq) .gt. pmax ) then + pmax=ps(iseq) + ibflag=1 + endif + enddo + if( ibflag .eq. 1 ) then + psbest=ps + ibflag=0 + endif + call getbitmetric(2**(nbit/2),psbest,numseq,sbits3(ibit)) + hbits3(ibit)=0 + if(sbits3(ibit).gt.0) hbits3(ibit)=1 + enddo + sbits=sbits3 + hbits=hbits3 + endif + nsync_qual=count(hbits(1:16).eq.s16) +! if(nsync_qual.lt.10) exit + rxdata=sbits(17:144) + rxav=sum(rxdata(1:128))/128.0 + rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 + rxsig=sqrt(rx2av-rxav*rxav) + rxdata=rxdata/rxsig + sigma=0.80 + llr(1:128)=2*rxdata/(sigma*sigma) +!xllrmax=maxval(abs(llr)) +!write(*,*) ifile,icand,nseq,nsync_qual + apmask=0 +!apmask(1:29)=1 +!llr(1:29)=xllrmax*(2*s45(17:45)-1) + max_iterations=40 + do ibias=0,0 + llr2=llr + if(ibias.eq.1) llr2=llr+0.4 + if(ibias.eq.2) llr2=llr-0.4 + call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + if(nharderror.ge.0) exit + enddo + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) goto 888 + ndecodes=ndecodes+1 + decodes(ndecodes)=message + nsnr=nint(xsnr) + freq=f0+dfbest +1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) + write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',nseq,nharderror,nsync_qual +1212 format(a4,i4,2x,f5.3,f11.1,2x,a22,a1,i5,i5,i5) + goto 888 + endif + enddo ! nseq +888 continue + enddo !candidate list + enddo !files + + write(*,1120) +1120 format("") + +999 end program ft4d + +subroutine getbitmetric(ib,ps,ns,xmet) + real ps(0:ns-1) + xm1=0 + xm0=0 + do i=0,ns-1 + if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) + if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) + enddo + xmet=xm1-xm0 + return +end subroutine getbitmetric + +subroutine downsample2(ci,f0,co) + parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 + complex ci(0:NI-1),ct(0:NI-1) + complex co(0:NO-1) + fs=12000.0 + df=fs/NI + ct=ci + call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain + i0=nint(f0/df) + ct=cshift(ct,i0) + co=0.0 + co(0)=ct(0) + b=8.0 + do i=1,NO/2 + arg=(i*df/b)**2 + filt=exp(-arg) + co(i)=ct(i)*filt + co(NO-i)=ct(NI-i)*filt + enddo + co=co/NO + call four2a(co,NO,1,1,1) !c2c FFT back to time domain + return +end subroutine downsample2 + +subroutine ft4_downsample(iwave,f0,c) + +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 1200 Hz + + include 'ft4_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/16-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX) + equivalence (x,cx) + + BW=4.0*75 + df=12000.0/NMAX + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + ibw=nint(BW/df) + i0=nint(f0/df) + c1=0. + c1(0)=cx(i0) + do i=1,NFFT2/2 + arg=(i-1)*df/bw + win=exp(-arg*arg) + c1(i)=cx(i0+i)*win + c1(NFFT2-i)=cx(i0-i)*win + enddo + c1=c1/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/16-1) + return +end subroutine ft4_downsample + diff --git a/lib/fsk4hf/ft4sim.f90 b/lib/fsk4hf/ft4sim.f90 new file mode 100644 index 000000000..c5fb3e572 --- /dev/null +++ b/lib/fsk4hf/ft4sim.f90 @@ -0,0 +1,158 @@ +program ft4sim + +! Generate simulated signals for experimental "FT4" mode + + use wavhdr + use packjt77 + include 'ft4_params.f90' !Set various constants + parameter (NWAVE=NN*NSPS) + type(hdr) h !Header for .wav file + character arg*12,fname*17 + character msg37*37,msgsent37*37 + character c77*77 + complex c0(0:NMAX-1) + complex c(0:NMAX-1) + real wave(NMAX) + real dphi(0:NMAX-1) + real pulse(960) + integer itone(NN) + integer*1 msgbits(77) + integer*2 iwave(NMAX) !Generated full-length waveform + +! Get command-line argument(s) + nargs=iargc() + if(nargs.ne.8) then + print*,'Usage: ft4sim "message" f0 DT fdop del width nfiles snr' + print*,'Examples: ft4sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18' + print*,' ft4sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 0 10 -18' + print*,' ft4sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 25 1 -10' + go to 999 + endif + call getarg(1,msg37) !Message to be transmitted + call getarg(2,arg) + read(arg,*) f0 !Frequency (only used for single-signal) + call getarg(3,arg) + read(arg,*) xdt !Time offset from nominal (s) + call getarg(4,arg) + read(arg,*) fspread !Watterson frequency spread (Hz) + call getarg(5,arg) + read(arg,*) delay !Watterson delay (ms) + call getarg(6,arg) + read(arg,*) width !Filter transition width (Hz) + call getarg(7,arg) + read(arg,*) nfiles !Number of files + call getarg(8,arg) + read(arg,*) snrdb !SNR_2500 + + nfiles=abs(nfiles) + twopi=8.0*atan(1.0) + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + hmod=1.000 !Modulation index (0.5 is MSK, 1.0 is FSK) + tt=NSPS*dt !Duration of symbols (s) + baud=1.0/tt !Keying rate (baud) + txt=NZ*dt !Transmission length (s) + + bandwidth_ratio=2500.0/(fs/2.0) + sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) + if(snrdb.gt.90.0) sig=1.0 + txt=NN*NSPS/12000.0 + + ! Source-encode, then get itone() + i3=-1 + n3=-1 + call pack77(msg37,i3,n3,c77) + read(c77,'(77i1)') msgbits + call genft4(msg37,0,msgsent37,itone) + write(*,*) + write(*,'(a9,a37,3x,a7,i1,a1,i1)') 'Message: ',msgsent37,'i3.n3: ',i3,'.',n3 + write(*,1000) f0,xdt,txt,snrdb +1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1) + write(*,*) + if(i3.eq.1) then + write(*,*) ' mycall hiscall hisgrid' + write(*,'(28i1,1x,i1,1x,28i1,1x,i1,1x,i1,1x,15i1,1x,3i1)') msgbits(1:77) + else + write(*,'(a14)') 'Message bits: ' + write(*,'(77i1)') msgbits + endif + write(*,*) + write(*,'(a17)') 'Channel symbols: ' + write(*,'(76i1)') itone + write(*,*) + + call sgran() + +! The filtered frequency pulse + do i=1,960 + tt=(i-480.5)/320.0 + pulse(i)=gfsk_pulse(1.0,tt) + enddo + +! Define the instantaneous frequency waveform + dphi_peak=twopi*(hmod/2.0)/real(NSPS) + dphi=0.0 + do j=1,NN + ib=(j-1)*320 + ie=ib+960-1 + dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*(2*itone(j)-3) + enddo + + phi=0.0 + c0=0.0 + dphi=dphi+twopi*f0*dt + do j=0,NMAX-1 + c0(j)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + + c0(0:319)=c0(0:319)*(1.0-cos(twopi*(/(i,i=0,319)/)/640.0) )/2.0 + c0(77*320:77*320+319)=c0(77*320:77*320+319)*(1.0+cos(twopi*(/(i,i=0,319)/)/640.0 ))/2.0 + c0(78*320:)=0. + + k=nint((xdt+0.25)/dt) + c0=cshift(c0,-k) + ia=k + +do i=0,NMAX-1 +write(21,*) i,real(c0(i)),imag(c0(i)),dphi(i) +enddo + + do ifile=1,nfiles + c=c0 + if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c,NMAX,NWAVE,fs,delay,fspread) + c=sig*c + + ib=k + wave=real(c) + peak=maxval(abs(wave(ia:ib))) + nslots=1 + if(width.gt.0.0) call filt8(f0,nslots,width,wave) + + if(snrdb.lt.90) then + do i=1,NMAX !Add gaussian noise at specified SNR + xnoise=gran() + wave(i)=wave(i) + xnoise + enddo + endif + + gain=100.0 + if(snrdb.lt.90.0) then + wave=gain*wave + else + datpk=maxval(abs(wave)) + fac=32766.9/datpk + wave=fac*wave + endif + if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." + iwave=nint(wave) + h=default_header(12000,NMAX) + write(fname,1102) ifile +1102 format('000000_',i6.6,'.wav') + open(10,file=fname,status='unknown',access='stream') + write(10) h,iwave !Save to *.wav file + close(10) + write(*,1110) ifile,xdt,f0,snrdb,fname +1110 format(i4,f7.2,f8.2,f7.1,2x,a17) + enddo +999 end program ft4sim diff --git a/lib/fsk4hf/genft4.f90 b/lib/fsk4hf/genft4.f90 new file mode 100644 index 000000000..da7ff40c3 --- /dev/null +++ b/lib/fsk4hf/genft4.f90 @@ -0,0 +1,68 @@ +subroutine genft4(msg0,ichk,msgsent,i4tone) +! s12 + 64symbols = 76 channel symbols 2.027s message duration +! +! Encode an FT4 message +! Input: +! - msg0 requested message to be transmitted +! - ichk if ichk=1, return only msgsent +! if ichk.ge.10000, set imsg=ichk-10000 for short msg +! - msgsent message as it will be decoded +! - i4tone array of audio tone values, {0,1,2,3} + + use iso_c_binding, only: c_loc,c_size_t + use packjt77 + character*37 msg0 + character*37 message !Message to be generated + character*37 msgsent !Message as it will be received + character*77 c77 + integer*4 i4tone(76) + integer*1 codeword(128) + integer*1 msgbits(77) + integer*1 s12(12) + real*8 xi(864),xq(864),pi,twopi + data s12/0,0,0,3,3,3,3,3,3,0,0,0/ + logical unpk77_success + + twopi=8.*atan(1.0) + pi=twopi/2.0 + + message=msg0 + + do i=1, 37 + if(ichar(message(i:i)).eq.0) then + message(i:37)=' ' + exit + endif + enddo + do i=1,37 !Strip leading blanks + if(message(1:1).ne.' ') exit + message=message(i+1:) + enddo + + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,0,msgsent,unpk77_success) !Unpack to get msgsent + + if(ichk.eq.1) go to 999 + read(c77,"(77i1)") msgbits + call encode_128_90(msgbits,codeword) + +! Grayscale mapping: +! bits tone +! 00 0 +! 01 1 +! 11 2 +! 10 3 + +!Create 144-bit channel vector: + i4tone(1:12)=s12 + do i=1,64 + is=codeword(2*i-1)+2*codeword(2*i) + if(is.le.1) i4tone(12+i)=is + if(is.eq.2) i4tone(12+i)=3 + if(is.eq.3) i4tone(12+i)=2 + enddo + +999 return +end subroutine genft4 diff --git a/lib/fsk4hf/getcandidates4.f90 b/lib/fsk4hf/getcandidates4.f90 new file mode 100644 index 000000000..428b8faf5 --- /dev/null +++ b/lib/fsk4hf/getcandidates4.f90 @@ -0,0 +1,63 @@ +subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & + ncand,sbase) + +! For now, hardwired to find the largest peak in the average spectrum + + include 'ft2_params.f90' + real s(NH1,NHSYM) + real savg(NH1),savsm(NH1) + real sbase(NH1) + real x(NFFT1) + complex cx(0:NH1) + real candidate(3,maxcand) + integer*2 id(NMAX) + integer*1 s8(8) + integer indx(NH1) + data s8/0,1,1,1,0,0,1,0/ + equivalence (x,cx) + +! Compute symbol spectra, stepping by NSTEP steps. + savg=0. + tstep=NSTEP/12000.0 + df=12000.0/NFFT1 !3.125 Hz + fac=1.0/300.0 + do j=1,NHSYM + ia=(j-1)*NSTEP + 1 + ib=ia+NSPS-1 + x(1:NSPS)=fac*id(ia:ib) + x(NSPS+1:)=0. + call four2a(x,NFFT1,1,-1,0) !r2c FFT + do i=1,NH1 + s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 + enddo + savg=savg + s(1:NH1,j) !Average spectrum + enddo + savsm=0. + do i=2,NH1-1 + savsm(i)=sum(savg(i-1:i+1))/3. + enddo + + nfa=fa/df + nfb=fb/df + np=nfb-nfa+1 + indx=0 + call indexx(savsm(nfa:nfb),np,indx) + xn=savsm(nfa+indx(nint(0.3*np))) + savsm=savsm/xn + imax=-1 + xmax=-99. + do i=2,NH1-1 + if(savsm(i).gt.savsm(i-1).and. & + savsm(i).gt.savsm(i+1).and. & + savsm(i).gt.xmax) then + xmax=savsm(i) + imax=i + endif + enddo + f0=imax*df + if(xmax.gt.1.2) then + ncand=ncand+1 + candidate(1,ncand)=f0 + endif +return +end subroutine getcandidates4 From b4639b77d03b4024ab9246d238afdc2c3bf63560 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 21 Jan 2019 19:52:13 -0600 Subject: [PATCH 030/367] Fix CMakeLists.txt so that ft2_decode still builds. Fix a bug in ft4d - sync now seems to work. --- CMakeLists.txt | 1 + lib/fsk4hf/ft4d.f90 | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd0860c60..79c8302e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -462,6 +462,7 @@ set (wsjt_FSRCS lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 + lib/fsk4hf/genft2.f90 lib/fsk4hf/genft4.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 diff --git a/lib/fsk4hf/ft4d.f90 b/lib/fsk4hf/ft4d.f90 index 22c81cec8..ba5a717ef 100644 --- a/lib/fsk4hf/ft4d.f90 +++ b/lib/fsk4hf/ft4d.f90 @@ -106,7 +106,7 @@ program ft4d ibest=-1 sybest=-99. dfbest=-1. - do if=-60,+60 + do if=-30,+30 df=if a=0. a(1)=-df @@ -115,7 +115,7 @@ program ft4d csync1=0. cterm=1 do ib=1,12 - i1=(ib-1)*10+is + i1=(ib-1)*20+is if(s12(ib).eq.0) then csync1=csync1+sum(cb(i1:i1+19)*conjg(c0(0:19)))*cterm cterm=cterm*cc0 From 3bdbf19d1de29f0cece2700c4ad7cfab1fc735b9 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 22 Jan 2019 11:01:28 -0600 Subject: [PATCH 031/367] Make ft4sim and ft4d work. --- lib/fsk4hf/ft4d.f90 | 80 +++++++++++++++++++++---------------------- lib/fsk4hf/genft4.f90 | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/lib/fsk4hf/ft4d.f90 b/lib/fsk4hf/ft4d.f90 index ba5a717ef..d41853075 100644 --- a/lib/fsk4hf/ft4d.f90 +++ b/lib/fsk4hf/ft4d.f90 @@ -9,10 +9,10 @@ program ft4d character*90 dmsg complex cd2(0:NMAX/16-1) !Complex waveform complex cb(0:NMAX/16-1) - complex cd(0:76*10-1) !Complex waveform + complex cd(0:76*20-1) !Complex waveform complex c3(0:19),c2(0:19),c1(0:19),c0(0:19) complex ccor(0:3,76) - complex csum,cterm,cc0,cc1,csync1,csync2 + complex csum,cterm,cc0,cc1,cc2,cc3,csync1,csync2 complex csync(12) real*8 fMHz @@ -40,28 +40,28 @@ program ft4d h=1.000 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) dphi=twopi/2*baud*h*dt*16 ! dt*16 is samp interval after downsample - dphi0=-1.5*dphi - dphi1=-0.5*dphi - dphi2=+0.5*dphi - dphi3=+1.5*dphi + dphi0=-3*dphi + dphi1=-dphi + dphi2=+dphi + dphi3=+3*dphi phi0=0.0 phi1=0.0 phi2=0.0 phi3=0.0 - do i=0,9 + do i=0,19 c3(i)=cmplx(cos(phi3),sin(phi3)) c2(i)=cmplx(cos(phi2),sin(phi2)) c1(i)=cmplx(cos(phi1),sin(phi1)) c0(i)=cmplx(cos(phi0),sin(phi0)) - phi3=mod(phi1+dphi3,twopi) - phi2=mod(phi1+dphi2,twopi) + phi3=mod(phi3+dphi3,twopi) + phi2=mod(phi2+dphi2,twopi) phi1=mod(phi1+dphi1,twopi) phi0=mod(phi0+dphi0,twopi) enddo the=twopi*h/2.0 - cc3=cmplx(cos(3*the),-sin(3*the)) - cc2=cmplx(cos(the),-sin(the)) - cc1=cmplx(cos(the),sin(the)) + cc3=cmplx(cos(3*the),+sin(3*the)) + cc2=cmplx(cos(the),+sin(the)) + cc1=cmplx(cos(the),-sin(the)) cc0=cmplx(cos(3*the),-sin(3*the)) nargs=iargc() @@ -100,8 +100,9 @@ program ft4d f0=candidates(icand,1) xsnr=1.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call ft4_downsample(iwave,f0,cd2) ! downsample from 160s/Symbol to 10s/Symbol - + call ft4_downsample(iwave,f0,cd2) ! downsample from 320s/Symbol to 20s/Symbol + s2=sum(cd2*conjg(cd2))/(20.0*76) + if(s2.gt.0.0) cd2=cd2/sqrt(s2) ! 750 samples/second here ibest=-1 sybest=-99. @@ -111,21 +112,21 @@ program ft4d a=0. a(1)=-df call twkfreq1(cd2,NMAX/16,fs,a,cb) - do is=0,380 + do istart=0,380 csync1=0. cterm=1 do ib=1,12 - i1=(ib-1)*20+is + i1=(ib-1)*20+istart if(s12(ib).eq.0) then csync1=csync1+sum(cb(i1:i1+19)*conjg(c0(0:19)))*cterm - cterm=cterm*cc0 + cterm=cterm*conjg(cc0) else csync1=csync1+sum(cb(i1:i1+19)*conjg(c3(0:19)))*cterm - cterm=cterm*cc3 + cterm=cterm*conjg(cc3) endif enddo if(abs(csync1).gt.sybest) then - ibest=is + ibest=istart sybest=abs(csync1) dfbest=df endif @@ -136,25 +137,28 @@ program ft4d !dfbest=1500.0-f0 a(1)=-dfbest - call twkfreq1(c2,NMAX/16,fs,a,cb) + call twkfreq1(cd2,NMAX/16,fs,a,cb) -!ibest=197 +!ibest=208 ib=ibest -write(*,*) f0,f0+dfbest,ibest -goto 888 - cd=cb(ib:ib+144*10-1) - s2=sum(cd*conjg(cd))/(10*144) - cd=cd/sqrt(s2) + + cd=cb(ib:ib+76*20-1) do nseq=1,1 if( nseq.eq.1 ) then ! noncoherent single-symbol detection sbits1=0.0 - do ibit=1,76 - ib=(ibit-1)*10 - ccor(1,ibit)=sum(cd(ib:ib+9)*conjg(c1(0:9))) - ccor(0,ibit)=sum(cd(ib:ib+9)*conjg(c0(0:9))) - sbits1(ibit)=abs(ccor(1,ibit))-abs(ccor(0,ibit)) - hbits1(ibit)=0 - if(sbits1(ibit).gt.0) hbits1(ibit)=1 + do isym=1,76 + ib=(isym-1)*20 + ccor(3,isym)=sum(cd(ib:ib+19)*conjg(c3(0:19))) + ccor(2,isym)=sum(cd(ib:ib+19)*conjg(c2(0:19))) + ccor(1,isym)=sum(cd(ib:ib+19)*conjg(c1(0:19))) + ccor(0,isym)=sum(cd(ib:ib+19)*conjg(c0(0:19))) + sbits1(2*isym-1)= max(abs(ccor(2,isym)),abs(ccor(3,isym)))- & + max(abs(ccor(0,isym)),abs(ccor(1,isym))) + sbits1(2*isym) = max(abs(ccor(1,isym)),abs(ccor(2,isym)))- & + max(abs(ccor(0,isym)),abs(ccor(3,isym))) + hbits1(2*isym-1:2*isym)=0 + if(sbits1(2*isym-1).gt.0) hbits1(2*isym-1)=1 + if(sbits1(2*isym ).gt.0) hbits1(2*isym )=1 enddo sbits=sbits1 hbits=hbits1 @@ -195,20 +199,16 @@ goto 888 sbits=sbits3 hbits=hbits3 endif - nsync_qual=count(hbits(1:16).eq.s16) + nsync_qual=count(hbits(1:24).eq.(/0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0/)) ! if(nsync_qual.lt.10) exit - rxdata=sbits(17:144) + rxdata=sbits(25:152) rxav=sum(rxdata(1:128))/128.0 rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 rxsig=sqrt(rx2av-rxav*rxav) rxdata=rxdata/rxsig sigma=0.80 llr(1:128)=2*rxdata/(sigma*sigma) -!xllrmax=maxval(abs(llr)) -!write(*,*) ifile,icand,nseq,nsync_qual apmask=0 -!apmask(1:29)=1 -!llr(1:29)=xllrmax*(2*s45(17:45)-1) max_iterations=40 do ibias=0,0 llr2=llr @@ -295,7 +295,7 @@ subroutine ft4_downsample(iwave,f0,c) real x(NMAX) equivalence (x,cx) - BW=4.0*75 + BW=6.0*75 df=12000.0/NMAX x=iwave call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain diff --git a/lib/fsk4hf/genft4.f90 b/lib/fsk4hf/genft4.f90 index da7ff40c3..3aed650e5 100644 --- a/lib/fsk4hf/genft4.f90 +++ b/lib/fsk4hf/genft4.f90 @@ -58,7 +58,7 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) !Create 144-bit channel vector: i4tone(1:12)=s12 do i=1,64 - is=codeword(2*i-1)+2*codeword(2*i) + is=codeword(2*i)+2*codeword(2*i-1) if(is.le.1) i4tone(12+i)=is if(is.eq.2) i4tone(12+i)=3 if(is.eq.3) i4tone(12+i)=2 From 50c1daf61f7fece7b0d6964be8d4fdc86f10e1f9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 23 Jan 2019 10:09:18 -0500 Subject: [PATCH 032/367] Use a timer to establish length of an FT2 (to be FT4?) transmission. --- CMakeLists.txt | 1 + Modulator.cpp | 4 ++-- Modulator.hpp | 2 ++ widgets/displaytext.cpp | 2 +- widgets/mainwindow.cpp | 21 ++++++++++++++++----- widgets/mainwindow.h | 1 + 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd0860c60..6c9b52822 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -459,6 +459,7 @@ set (wsjt_FSRCS lib/gen65.f90 lib/gen9.f90 lib/geniscat.f90 + lib/fsk4hf/genft2.f90 lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 diff --git a/Modulator.cpp b/Modulator.cpp index 9934e9ab1..66c7a3202 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -47,8 +47,6 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, SoundOutput * stream, Channel channel, bool synchronize, bool fastMode, double dBSNR, int TRperiod) { -// qDebug() << "Mod AA" << symbolsLength << framesPerSymbol << frequency -// << toneSpacing << synchronize << fastMode << dBSNR << TRperiod; Q_ASSERT (stream); // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; @@ -319,6 +317,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) m_frequency0 = m_frequency; // done for this chunk - continue on next call +// qint64 ms1=QDateTime::currentMSecsSinceEpoch() - m_ms0; +// if(m_ic>=4*144*160) qDebug() << "Modulator finished" << m_ic << 0.001*ms1; return framesGenerated * bytesPerFrame (); } // fall through diff --git a/Modulator.hpp b/Modulator.hpp index 493b94bc3..e8df7f2dd 100644 --- a/Modulator.hpp +++ b/Modulator.hpp @@ -33,6 +33,7 @@ public: void setSpread(double s) {m_fSpread=s;} void setTRPeriod(unsigned p) {m_period=p;} void set_nsym(int n) {m_symbolsLength=n;} + void set_ms0(qint64 ms) {m_ms0=ms;} Q_SLOT void start (unsigned symbolsLength, double framesPerSymbol, double frequency, double toneSpacing, SoundOutput *, Channel = Mono, @@ -73,6 +74,7 @@ private: double m_fSpread; qint64 m_silentFrames; + qint64 m_ms0; qint32 m_TRperiod; qint16 m_ramp; diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index 0f1a9ce1b..5d68bb4f8 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -463,7 +463,7 @@ void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 tx QString t2; t2.sprintf("%4d",txFreq); QString t; - if(bFastMode or modeTx=="FT8") { + if(bFastMode or modeTx=="FT8" or modeTx=="FT2") { t = QDateTime::currentDateTimeUtc().toString("hhmmss") + \ " Tx " + t2 + t1 + text; } else if(modeTx.mid(0,6)=="FT8fox") { diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 5ae884a4d..d2b9ef86e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -727,6 +727,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, connect(&m_guiTimer, &QTimer::timeout, this, &MainWindow::guiUpdate); m_guiTimer.start(100); //### Don't change the 100 ms! ### + + FT2_TxTimer.setSingleShot(true); + connect(&FT2_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); + ptt0Timer.setSingleShot(true); connect(&ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2); @@ -3553,7 +3557,7 @@ void MainWindow::guiUpdate() Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT m_tx_when_ready = true; } - if(!m_bTxTime and !m_tune) m_btxok=false; //Time to stop transmitting + if(!m_bTxTime and !m_tune and m_mode!="FT2") m_btxok=false; //Time to stop transmitting } if(m_mode.startsWith ("WSPR") and @@ -3695,7 +3699,7 @@ void MainWindow::guiUpdate() } } - m_currentMessage = QString::fromLatin1(msgsent); + if(m_mode!="FT2") m_currentMessage = QString::fromLatin1(msgsent); m_bCallingCQ = CALLING == m_QSOProgress || m_currentMessage.contains (QRegularExpression {"^(CQ|QRZ) "}); if(m_mode=="FT8") { @@ -3925,6 +3929,7 @@ void MainWindow::guiUpdate() if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==2 and foxcom_.nslots==1) { t=m_fm1.trimmed(); } + if(m_mode=="FT2") t="Tx: "+ m_currentMessage; tx_status_label.setText(t.trimmed()); } } @@ -4000,7 +4005,6 @@ void MainWindow::startTx2() ui->decodedTextBrowser->appendText(t); } write_all("Tx",m_currentMessage); -// write_transmit_entry ("ALL_WSPR.TXT"); } } } @@ -7217,7 +7221,8 @@ void MainWindow::replyToCQ (QTime time, qint32 snr, float delta_time, quint32 de } QString format_string {"%1 %2 %3 %4 %5 %6"}; - auto const& time_string = time.toString ("~" == mode || "&" == mode ? "hhmmss" : "hhmm"); + auto const& time_string = time.toString ("~" == mode || "&" == mode + || "+" == mode ? "hhmmss" : "hhmm"); auto message_line = format_string .arg (time_string) .arg (snr, 3) @@ -8650,7 +8655,10 @@ void MainWindow::ft2_tx(int ntx) int itype=-1; genft2_(message, &ichk, msgsent, const_cast(itone), &itype, 37, 37); msgsent[37]=0; - m_currentMessage = QString::fromLatin1(msgsent); + m_currentMessage = QString::fromLatin1(msgsent).trimmed(); + tx_status_label.setStyleSheet("QLabel{background-color: #ffff33}"); + tx_status_label.setText("TX: " + m_currentMessage); + on_txb6_clicked(); auto_tx_mode(true); @@ -8660,6 +8668,9 @@ void MainWindow::ft2_tx(int ntx) setXIT (ui->TxFreqSpinBox->value ()); Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT m_tx_when_ready = true; + qint64 ms=QDateTime::currentMSecsSinceEpoch(); + m_modulator->set_ms0(ms); + FT2_TxTimer.start(2200); //Slightly more than FT2 transmission length if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 942ccd563..5f554500c 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -581,6 +581,7 @@ private: QTimer minuteTimer; QTimer splashTimer; QTimer p1Timer; + QTimer FT2_TxTimer; QString m_path; QString m_baseCall; From 14db0d682b35a1ebe3f7dbaca24b4474b1561092 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 23 Jan 2019 10:51:26 -0500 Subject: [PATCH 033/367] Make double-clicking of decodes to work in FT2 mode. --- widgets/mainwindow.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d2b9ef86e..a817a1954 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4254,10 +4254,6 @@ void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers) { -// if(!(modifiers & Qt::AltModifier) and m_transmitting) { -// qDebug() << "aa" << "Double-click on decode is ignored while transmitting"; -// return; -// } QTextCursor cursor; if(m_mode=="ISCAT") { MessageBox::information_message (this, @@ -4393,7 +4389,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ui->TxFreqSpinBox->setValue(frequency); } if(m_mode != "JT4" && m_mode != "JT65" && !m_mode.startsWith ("JT9") && - m_mode != "QRA64" && m_mode!="FT8") { + m_mode != "QRA64" && m_mode!="FT8" && m_mode!="FT2") { return; } } From 3fa7c7b9a770b227c7b5b19610e1c7893e9361b2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 23 Jan 2019 16:53:03 -0500 Subject: [PATCH 034/367] More work on integrating FT2 (will become FT4?) into WSJT-X. Not finished! --- widgets/mainwindow.cpp | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a817a1954..ab752229d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3702,7 +3702,7 @@ void MainWindow::guiUpdate() if(m_mode!="FT2") m_currentMessage = QString::fromLatin1(msgsent); m_bCallingCQ = CALLING == m_QSOProgress || m_currentMessage.contains (QRegularExpression {"^(CQ|QRZ) "}); - if(m_mode=="FT8") { + if(m_mode=="FT8" or m_mode=="FT2") { if(m_bCallingCQ && ui->cbFirst->isVisible () && ui->cbFirst->isChecked ()) { ui->cbFirst->setStyleSheet("QCheckBox{color:red}"); } else { @@ -3854,7 +3854,7 @@ void MainWindow::guiUpdate() } } - if(m_mode=="FT8" or m_mode=="MSK144") { + if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT2") { if(ui->txrb1->isEnabled() and (SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::FIELD_DAY==m_config.special_op_id() or @@ -3870,7 +3870,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { -// qDebug() << "cc onesec" << g_iptt << m_iptt0; +// qDebug() << "cc onesec" << (SpecOp::RTTY == m_config.special_op_id()); // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { @@ -4530,7 +4530,8 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } m_QSOProgress = SIGNOFF; } else if((m_QSOProgress >= REPORT - || (m_QSOProgress >= REPLYING && (m_mode=="MSK144" or m_mode=="FT8"))) + || (m_QSOProgress >= REPLYING && + (m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT2"))) && r.mid(0,1)=="R") { m_ntx=4; m_QSOProgress = ROGERS; @@ -4562,6 +4563,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } } } else { // nothing for us + qDebug() << "aa"; return; } } @@ -4610,6 +4612,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie m_bDoubleClickAfterCQnnn=false; } else { + qDebug() << "bb"; return; // nothing we need to respond to } } @@ -4625,6 +4628,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie // ui->labNextCall->setText("Next: " + m_nextCall); // ui->labNextCall->setStyleSheet("QLabel {background-color: #66ff66}"); // } + qDebug() << "cc"; return; } } @@ -4754,7 +4758,14 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } if(m_transmitting) m_restart=true; - if (ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isChecked () && !m_bDoubleClicked) return; + if (ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isChecked () && !m_bDoubleClicked) { + qDebug() << "dd"; + return; + } + if(m_mode=="FT2") { + qDebug() << "ee"; + ft2_tx(m_ntx); //### Is this right ??? ### + } if(m_config.quick_call()) auto_tx_mode(true); m_bDoubleClicked=false; } @@ -4895,7 +4906,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) int n=rpt.toInt(); rpt.sprintf("%+2.2d",n); - if(m_mode=="MSK144" or m_mode=="FT8") { + if(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT2") { QString t2,t3; QString sent=rpt; QString rs,rst; @@ -4949,7 +4960,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) } } - if((m_mode!="MSK144" and m_mode!="FT8")) { + if((m_mode!="MSK144" and m_mode!="FT8" and m_mode!="FT2")) { t=t00 + rpt; msgtype(t, ui->tx2); t=t0 + "R" + rpt; @@ -5571,6 +5582,14 @@ void MainWindow::on_actionFT2_triggered() ui->cbAutoSeq->setEnabled(true); ui->labDXped->setVisible(false); ui->labDXped->setText(""); + + ui->labDXped->setVisible(false); + if (SpecOp::RTTY == m_config.special_op_id ()) { + ui->labDXped->setVisible(true); + ui->labDXped->setText("RTTY"); + on_contest_log_action_triggered(); + } + statusChanged(); } @@ -7900,7 +7919,7 @@ void MainWindow::on_cbFirst_toggled(bool b) void MainWindow::on_cbAutoSeq_toggled(bool b) { if(!b) ui->cbFirst->setChecked(false); - ui->cbFirst->setVisible((m_mode=="FT8") and b); + ui->cbFirst->setVisible((m_mode=="FT8" or m_mode=="FT2") and b); } void MainWindow::on_measure_check_box_stateChanged (int state) @@ -8638,6 +8657,7 @@ void MainWindow::ft2_tx(int ntx) static char msgsent[38]; QByteArray ba; m_ntx=ntx; + setTxMsg(m_ntx); if(m_ntx == 1) ba=ui->tx1->text().toLocal8Bit(); if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit(); if(m_ntx == 3) ba=ui->tx3->text().toLocal8Bit(); @@ -8655,8 +8675,7 @@ void MainWindow::ft2_tx(int ntx) tx_status_label.setStyleSheet("QLabel{background-color: #ffff33}"); tx_status_label.setText("TX: " + m_currentMessage); - on_txb6_clicked(); - auto_tx_mode(true); + auto_tx_mode(true); //Enable Tx icw[0]=0; g_iptt = 1; From c8cdd05f34c777af8716db1ab3dc1fe2b6e3eaff Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 24 Jan 2019 11:58:57 -0500 Subject: [PATCH 035/367] Implement auto-sequencing for FT2. --- widgets/mainwindow.cpp | 62 ++++++++++++++++++++++++++++++------------ widgets/mainwindow.h | 2 ++ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index ab752229d..f8a5079b9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -731,6 +731,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, FT2_TxTimer.setSingleShot(true); connect(&FT2_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); + FT2_WriteTxTimer.setSingleShot(true); + connect(&FT2_WriteTxTimer, &QTimer::timeout, this, &MainWindow::FT2_writeTx); + ptt0Timer.setSingleShot(true); connect(&ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2); @@ -3105,7 +3108,6 @@ void MainWindow::readFromStdout() //readFromStdout //Right (Rx Frequency) window bool bDisplayRight=bAvgMsg; int audioFreq=decodedtext.frequencyOffset(); - if(m_mode=="FT8") { auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); @@ -4300,7 +4302,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie || ("JT9" == m_mode && mode != "@") || ("MSK144" == m_mode && !("&" == mode || "^" == mode)) || ("QRA64" == m_mode && mode.left (1) != ":")) { - return; + return; //Currently we do auto-sequencing only in FT2, FT8, and MSK144 } //Skip the rest if no decoded text extracted @@ -4563,7 +4565,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } } } else { // nothing for us - qDebug() << "aa"; return; } } @@ -4612,7 +4613,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie m_bDoubleClickAfterCQnnn=false; } else { - qDebug() << "bb"; return; // nothing we need to respond to } } @@ -4628,7 +4628,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie // ui->labNextCall->setText("Next: " + m_nextCall); // ui->labNextCall->setStyleSheet("QLabel {background-color: #66ff66}"); // } - qDebug() << "cc"; return; } } @@ -4758,13 +4757,14 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } if(m_transmitting) m_restart=true; - if (ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isChecked () && !m_bDoubleClicked) { - qDebug() << "dd"; + if (ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isChecked () + && !m_bDoubleClicked && m_mode!="FT2") { return; } - if(m_mode=="FT2") { - qDebug() << "ee"; - ft2_tx(m_ntx); //### Is this right ??? ### + if(m_mode=="FT2" and ui->cbAutoSeq->isChecked()) { + if(m_ntx==3 or m_ntx==4 or m_bDoubleClicked) { + ft2_tx(m_ntx); + } } if(m_config.quick_call()) auto_tx_mode(true); m_bDoubleClicked=false; @@ -5559,7 +5559,7 @@ void MainWindow::on_actionFT2_triggered() m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); VHF_features_enabled(bVHF); - ui->cbAutoSeq->setChecked(false); +// ui->cbAutoSeq->setChecked(false); m_fastGraph->hide(); m_wideGraph->show(); ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); @@ -5589,7 +5589,6 @@ void MainWindow::on_actionFT2_triggered() ui->labDXped->setText("RTTY"); on_contest_log_action_triggered(); } - statusChanged(); } @@ -8581,7 +8580,7 @@ void MainWindow::write_all(QString txRx, QString message) t.sprintf("%5d",ui->TxFreqSpinBox->value()); if(txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); - time = time.addSecs (-(time.time ().second () % m_TRperiod)); + if(m_mode!="FT2") time = time.addSecs(-(time.time().second() % m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); if(m_diskData) { line=m_fileDateTime + t + txRx + " " + m_mode.leftJustified(6,' ') + msg; @@ -8646,6 +8645,31 @@ void MainWindow::ft2Data(int k) DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); + +//### + //Right (Rx Frequency) window + int audioFreq=decodedtext.frequencyOffset(); + auto const& parts = decodedtext.string().remove("<").remove(">") + .split (' ', QString::SkipEmptyParts); + if (parts.size () > 6) { + auto for_us = parts[5].contains (m_baseCall) + || ("DE" == parts[5] && qAbs (ui->RxFreqSpinBox->value () - audioFreq) <= 10); + if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[5]) for_us=false; + if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked()) { + m_bDoubleClicked=true; + m_bAutoReply = true; + ui->cbFirst->setStyleSheet(""); + } + if(for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10)) { + // This msg is within 10 hertz of our tuned frequency, or contains MyCall + ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, + m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); + m_QSOText = decodedtext.string().trimmed (); + } + processMessage(decodedtext); + write_all("Rx",decodedtext.string().trimmed()); + } +//### } nhsec0=nhsec; } @@ -8676,7 +8700,6 @@ void MainWindow::ft2_tx(int ntx) tx_status_label.setText("TX: " + m_currentMessage); auto_tx_mode(true); //Enable Tx - icw[0]=0; g_iptt = 1; setRig (); @@ -8689,7 +8712,8 @@ void MainWindow::ft2_tx(int ntx) if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); - write_all("Tx",m_currentMessage); +// write_all("Tx",m_currentMessage); + FT2_WriteTxTimer.start(100); if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, @@ -8710,8 +8734,10 @@ void MainWindow::ft2_tx(int ntx) transmitDisplay (true); statusUpdate (); } - if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); - -// if(!m_bTxTime and !m_tune) m_btxok=false; //Time to stop transmitting +} + +void MainWindow::FT2_writeTx() +{ + write_all("Tx",m_currentMessage); } diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 5f554500c..e21a8f8db 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -582,6 +582,7 @@ private: QTimer splashTimer; QTimer p1Timer; QTimer FT2_TxTimer; + QTimer FT2_WriteTxTimer; QString m_path; QString m_baseCall; @@ -749,6 +750,7 @@ private: void foxTxSequencer(); void foxGenWaveform(int i,QString fm); void writeFoxQSO (QString const& msg); + void FT2_writeTx(); }; extern int killbyname(const char* progName); From e55a8baa259ef020a9a5dcd109fd24e8482929b3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 24 Jan 2019 12:38:02 -0500 Subject: [PATCH 036/367] Minor tweaks to FT2 auto-sequencing and writes to all.txt. --- widgets/mainwindow.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index f8a5079b9..8e6d12c20 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4762,7 +4762,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie return; } if(m_mode=="FT2" and ui->cbAutoSeq->isChecked()) { - if(m_ntx==3 or m_ntx==4 or m_bDoubleClicked) { + if((m_ntx==3 and ui->cbFirst->isChecked()) or m_ntx==4 or m_bDoubleClicked) { ft2_tx(m_ntx); } } @@ -8712,9 +8712,7 @@ void MainWindow::ft2_tx(int ntx) if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); -// write_all("Tx",m_currentMessage); - FT2_WriteTxTimer.start(100); - + FT2_WriteTxTimer.start(100); //Why is a delay necessary to ensure Tx after Rx in all.txt? if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, ui->TxFreqSpinBox->value(),m_bFastMode); From a9100f02916fdbe0fbf074ef88614e0071529838 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 24 Jan 2019 13:02:47 -0500 Subject: [PATCH 037/367] Log FT2 QSOs when they are finished. --- widgets/mainwindow.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 8e6d12c20..c715f0bcc 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4762,6 +4762,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie return; } if(m_mode=="FT2" and ui->cbAutoSeq->isChecked()) { + if(m_ntx==4 or m_ntx==5) logQSOTimer.start(0); // Log the QSO if((m_ntx==3 and ui->cbFirst->isChecked()) or m_ntx==4 or m_bDoubleClicked) { ft2_tx(m_ntx); } @@ -8698,6 +8699,11 @@ void MainWindow::ft2_tx(int ntx) m_currentMessage = QString::fromLatin1(msgsent).trimmed(); tx_status_label.setStyleSheet("QLabel{background-color: #ffff33}"); tx_status_label.setText("TX: " + m_currentMessage); + if(m_ntx==2 or m_ntx==3) { + QStringList t=ui->tx2->text().split(' ', QString::SkipEmptyParts); + int n=t.size(); + m_xSent=t.at(n-2) + " " + t.at(n-1); + } auto_tx_mode(true); //Enable Tx icw[0]=0; From edf4af530776aa7beb14d67a35a8cecb2e8504cd Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 24 Jan 2019 15:58:08 -0500 Subject: [PATCH 038/367] Be sure to set start time of QSO. --- widgets/mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index c715f0bcc..baff7adad 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8738,6 +8738,7 @@ void MainWindow::ft2_tx(int ntx) transmitDisplay (true); statusUpdate (); } + m_dateTimeQSOOn=QDateTime::currentDateTimeUtc(); if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); } From a0ddc1485ee28c516b61a6dfd8b1ad2e39d300ed Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 24 Jan 2019 17:29:03 -0500 Subject: [PATCH 039/367] Make the ProgressBar invisible in FT2 mode. --- widgets/mainwindow.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index baff7adad..85099122e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3887,12 +3887,13 @@ void MainWindow::guiUpdate() //To keep calling Fox, Hound must reactivate Enable Tx at least once every 2 minutes if(tHound >= 120 and m_ntx==1) auto_tx_mode(false); } + + progressBar.setVisible(!(m_mode=="FT2")); if(m_auto and m_mode=="Echo" and m_bEchoTxOK) { progressBar.setMaximum(6); progressBar.setValue(int(m_s6)); } - - if(m_mode!="Echo") { + if(m_mode!="Echo" and m_mode!="FT2") { if(m_monitoring or m_transmitting) { progressBar.setMaximum(m_TRperiod); int isec=int(fmod(tsec,m_TRperiod)); From 5efa28164c596a68cf7f3367f07c40356440c8d7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 25 Jan 2019 14:46:17 -0500 Subject: [PATCH 040/367] Remove a redundant file reference in CMakeLists.txt. Fix call to unpck77 in genft2.f90 --- CMakeLists.txt | 1 - lib/ft2/genft2.f90 | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41404d4ed..79c8302e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -459,7 +459,6 @@ set (wsjt_FSRCS lib/gen65.f90 lib/gen9.f90 lib/geniscat.f90 - lib/fsk4hf/genft2.f90 lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 diff --git a/lib/ft2/genft2.f90 b/lib/ft2/genft2.f90 index f416c3616..2eb36bccc 100644 --- a/lib/ft2/genft2.f90 +++ b/lib/ft2/genft2.f90 @@ -68,7 +68,7 @@ subroutine genft2(msg0,ichk,msgsent,i4tone,itype) i3=-1 n3=-1 call pack77(message,i3,n3,c77) - call unpack77(c77,msgsent,unpk77_success) !Unpack to get msgsent + call unpack77(c77,0,msgsent,unpk77_success) !Unpack to get msgsent if(ichk.eq.1) go to 999 read(c77,"(77i1)") msgbits From f6e3dbb8e9d69a9afb9fdbe202315abdc32b7d92 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 25 Jan 2019 16:52:38 -0500 Subject: [PATCH 041/367] Increase the FT2 Tx duration timer from 2200 to 2500 ms. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 85099122e..13cc34e1e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8715,7 +8715,7 @@ void MainWindow::ft2_tx(int ntx) m_tx_when_ready = true; qint64 ms=QDateTime::currentMSecsSinceEpoch(); m_modulator->set_ms0(ms); - FT2_TxTimer.start(2200); //Slightly more than FT2 transmission length + FT2_TxTimer.start(2500); //Slightly more than FT2 transmission length if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); From 66e3f11fbabfefded738c0669d27b377a325422d Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 25 Jan 2019 16:01:34 -0600 Subject: [PATCH 042/367] Add ft4 files in lib/ft4. --- CMakeLists.txt | 21 +- lib/fsk4hf/ft4d.f90 | 592 +++++++++++++------------ lib/{fsk4hf => ft4}/ft4_params.f90 | 8 +- lib/ft4/ft4d.f90 | 329 ++++++++++++++ lib/{fsk4hf => ft4}/ft4sim.f90 | 8 +- lib/{fsk4hf => ft4}/genft4.f90 | 19 +- lib/{fsk4hf => ft4}/getcandidates4.f90 | 13 +- lib/ft4/sync4d.f90 | 54 +++ lib/ft4/syncft4.f90 | 145 ++++++ 9 files changed, 871 insertions(+), 318 deletions(-) rename lib/{fsk4hf => ft4}/ft4_params.f90 (64%) create mode 100644 lib/ft4/ft4d.f90 rename lib/{fsk4hf => ft4}/ft4sim.f90 (96%) rename lib/{fsk4hf => ft4}/genft4.f90 (82%) rename lib/{fsk4hf => ft4}/getcandidates4.f90 (83%) create mode 100644 lib/ft4/sync4d.f90 create mode 100644 lib/ft4/syncft4.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 79c8302e5..52b69b84a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -463,7 +463,7 @@ set (wsjt_FSRCS lib/genmsk_128_90.f90 lib/genmsk40.f90 lib/fsk4hf/genft2.f90 - lib/fsk4hf/genft4.f90 + lib/ft4/genft4.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 lib/genwspr.f90 @@ -509,8 +509,10 @@ set (wsjt_FSRCS lib/msk144signalquality.f90 lib/msk144sim.f90 lib/mskrtd.f90 - lib/fsk4hf/ft4sim.f90 - lib/fsk4hf/ft4d.f90 + lib/fsk4hf/ft2sim.f90 + lib/fsk4hf/ft2d.f90 + lib/ft4/ft4sim.f90 + lib/ft4/ft4d.f90 lib/ft2/cdatetime.f90 lib/ft2/ft2_decode.f90 lib/77bit/my_hash.f90 @@ -553,10 +555,13 @@ set (wsjt_FSRCS lib/sync4.f90 lib/sync64.f90 lib/sync65.f90 + lib/ft4/getcandidates4.f90 lib/fsk4hf/getcandidates2.f90 lib/ft2/getcandidates2a.f90 + lib/ft4/syncft4.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 + lib/ft4/sync4d.f90 lib/sync9.f90 lib/sync9f.f90 lib/sync9w.f90 @@ -1265,10 +1270,16 @@ target_link_libraries (ft8sim wsjt_fort wsjt_cxx) add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc) target_link_libraries (msk144sim wsjt_fort wsjt_cxx) -add_executable (ft4sim lib/fsk4hf/ft4sim.f90 wsjtx.rc) +add_executable (ft2sim lib/fsk4hf/ft2sim.f90 wsjtx.rc) +target_link_libraries (ft2sim wsjt_fort wsjt_cxx) + +add_executable (ft2d lib/fsk4hf/ft2d.f90 wsjtx.rc) +target_link_libraries (ft2d wsjt_fort wsjt_cxx) + +add_executable (ft4sim lib/ft4/ft4sim.f90 wsjtx.rc) target_link_libraries (ft4sim wsjt_fort wsjt_cxx) -add_executable (ft4d lib/fsk4hf/ft4d.f90 wsjtx.rc) +add_executable (ft4d lib/ft4/ft4d.f90 wsjtx.rc) target_link_libraries (ft4d wsjt_fort wsjt_cxx) endif(WSJT_BUILD_UTILS) diff --git a/lib/fsk4hf/ft4d.f90 b/lib/fsk4hf/ft4d.f90 index d41853075..d1bf262c1 100644 --- a/lib/fsk4hf/ft4d.f90 +++ b/lib/fsk4hf/ft4d.f90 @@ -1,317 +1,329 @@ program ft4d - use crc - use packjt77 - include 'ft4_params.f90' - character arg*8,message*37,c77*77,infile*80,fname*16,datetime*11 - character*37 decodes(100) - character*120 data_dir - character*90 dmsg - complex cd2(0:NMAX/16-1) !Complex waveform - complex cb(0:NMAX/16-1) - complex cd(0:76*20-1) !Complex waveform - complex c3(0:19),c2(0:19),c1(0:19),c0(0:19) - complex ccor(0:3,76) - complex csum,cterm,cc0,cc1,cc2,cc3,csync1,csync2 - complex csync(12) - real*8 fMHz + use crc + use packjt77 + include 'ft4_params.f90' + character arg*8,message*37,c77*77,infile*80,fname*16,datetime*11 + character*37 decodes(100) + character*120 data_dir + character*90 dmsg + complex cd2(0:NMAX/16-1) !Complex waveform + complex cb(0:NMAX/16-1) + complex cd(0:76*20-1) !Complex waveform + complex csum,cterm + complex ctwk(80),ctwk2(80) + complex csymb(20) + complex cs(0:3,NN) + real s4(0:3,NN) - real a(5) - real rxdata(128),llr(128) !Soft symbols - real llr2(128) - real sbits(152),sbits1(152),sbits3(152) - real ps(0:8191),psbest(0:8191) - real candidates(100,2) - real savg(NH1),sbase(NH1) - integer ihdr(11) - integer*2 iwave(NMAX) !Generated full-length waveform - integer*1 message77(77),apmask(128),cw(128) - integer*1 hbits(152),hbits1(152),hbits3(152) - integer*1 s12(12) - logical unpk77_success - data s12/0,0,0,1,1,1,1,1,1,0,0,0/ + real*8 fMHz + real ps(0:8191),psbest(0:8191) + real bmeta(152),bmetb(152),bmetc(152) + real s(NH1,NHSYM) + real a(5) + real llr(128),llr2(128),llra(128),llrb(128),llrc(128) + real s2(0:255) + real candidate(3,100) + real savg(NH1),sbase(NH1) + integer ihdr(11) + integer icos4(0:3) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),apmask(128),cw(128) + integer*1 hbits(152),hbits1(152),hbits3(152) + integer*1 s12(12) + integer graymap(0:3) + integer ip(1) + logical unpk77_success + logical one(0:511,0:7) ! 256 4-symbol sequences, 8 bits + data s12/1,1,1,2,2,2,2,2,2,1,1,1/ + data icos4/0,1,3,2/ + data graymap/0,1,3,2/ + save one - fs=12000.0/NDOWN !Sample rate - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - baud=1.0/tt !Keying rate for "itone" symbols (baud) - txt=NZ*dt !Transmission length (s) - twopi=8.0*atan(1.0) - h=1.000 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + fs=12000.0/NDOWN !Sample rate + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + baud=1.0/tt !Keying rate for "itone" symbols (baud) + txt=NZ*dt !Transmission length (s) + twopi=8.0*atan(1.0) + h=1.0 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) - dphi=twopi/2*baud*h*dt*16 ! dt*16 is samp interval after downsample - dphi0=-3*dphi - dphi1=-dphi - dphi2=+dphi - dphi3=+3*dphi - phi0=0.0 - phi1=0.0 - phi2=0.0 - phi3=0.0 - do i=0,19 - c3(i)=cmplx(cos(phi3),sin(phi3)) - c2(i)=cmplx(cos(phi2),sin(phi2)) - c1(i)=cmplx(cos(phi1),sin(phi1)) - c0(i)=cmplx(cos(phi0),sin(phi0)) - phi3=mod(phi3+dphi3,twopi) - phi2=mod(phi2+dphi2,twopi) - phi1=mod(phi1+dphi1,twopi) - phi0=mod(phi0+dphi0,twopi) - enddo - the=twopi*h/2.0 - cc3=cmplx(cos(3*the),+sin(3*the)) - cc2=cmplx(cos(the),+sin(the)) - cc1=cmplx(cos(the),-sin(the)) - cc0=cmplx(cos(3*the),-sin(3*the)) + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo + enddo + + nargs=iargc() + if(nargs.lt.1) then + print*,'Usage: ft4d [-a ] [-f fMHz] file1 [file2 ...]' + go to 999 + endif + iarg=1 + data_dir="." + call getarg(iarg,arg) + if(arg(1:2).eq.'-a') then + call getarg(iarg+1,data_dir) + iarg=iarg+2 + endif + call getarg(iarg,arg) + if(arg(1:2).eq.'-f') then + call getarg(iarg+1,arg) + read(arg,*) fMHz + iarg=iarg+2 + endif + ncoh=1 + + do ifile=iarg,nargs + call getarg(ifile,infile) + j2=index(infile,'.wav') + open(10,file=infile,status='old',access='stream') + read(10,end=999) ihdr,iwave + read(infile(j2-4:j2-1),*) nutc + datetime=infile(j2-11:j2-1) + close(10) + candidate=0.0 + ncand=0 + + nfqso=1500 + nfa=500 + nfb=2700 + syncmin=1.0 + maxcand=100 +! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase) + + call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase) + ndecodes=0 + do icand=1,ncand + f0=candidate(1,icand)-1.5*37.5 + xsnr=1.0 + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol + sum2=sum(cd2*conjg(cd2))/(20.0*76) + if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) - nargs=iargc() - if(nargs.lt.1) then - print*,'Usage: ft4d [-a ] [-f fMHz] file1 [file2 ...]' - go to 999 - endif - iarg=1 - data_dir="." - call getarg(iarg,arg) - if(arg(1:2).eq.'-a') then - call getarg(iarg+1,data_dir) - iarg=iarg+2 - endif - call getarg(iarg,arg) - if(arg(1:2).eq.'-f') then - call getarg(iarg+1,arg) - read(arg,*) fMHz - iarg=iarg+2 - endif - ncoh=1 - - do ifile=iarg,nargs - call getarg(ifile,infile) - j2=index(infile,'.wav') - open(10,file=infile,status='old',access='stream') - read(10,end=999) ihdr,iwave - read(infile(j2-4:j2-1),*) nutc - datetime=infile(j2-11:j2-1) - close(10) - candidates=0.0 - ncand=0 - call getcandidates2(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidates,ncand,sbase) - ndecodes=0 - do icand=1,ncand - f0=candidates(icand,1) - xsnr=1.0 - if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call ft4_downsample(iwave,f0,cd2) ! downsample from 320s/Symbol to 20s/Symbol - s2=sum(cd2*conjg(cd2))/(20.0*76) - if(s2.gt.0.0) cd2=cd2/sqrt(s2) ! 750 samples/second here - ibest=-1 - sybest=-99. - dfbest=-1. - do if=-30,+30 - df=if - a=0. - a(1)=-df - call twkfreq1(cd2,NMAX/16,fs,a,cb) - do istart=0,380 - csync1=0. - cterm=1 - do ib=1,12 - i1=(ib-1)*20+istart - if(s12(ib).eq.0) then - csync1=csync1+sum(cb(i1:i1+19)*conjg(c0(0:19)))*cterm - cterm=cterm*conjg(cc0) - else - csync1=csync1+sum(cb(i1:i1+19)*conjg(c3(0:19)))*cterm - cterm=cterm*conjg(cc3) - endif - enddo - if(abs(csync1).gt.sybest) then - ibest=istart - sybest=abs(csync1) - dfbest=df - endif - enddo - enddo - - a=0. -!dfbest=1500.0-f0 - a(1)=-dfbest - - call twkfreq1(cd2,NMAX/16,fs,a,cb) + ibest=-1 + smax=-99. + dfbest=-1. + do idf=-90,+90,5 + df=idf + a=0. + a(1)=df + ctwk=1. + call twkfreq1(ctwk,80,fs,a,ctwk2) + do istart=0,315 + call sync4d(cd2,istart,ctwk2,1,sync) + if(sync.gt.smax) then + smax=sync + ibest=istart + dfbest=df + endif + enddo + enddo + f0=f0+dfbest +!f0=1443.75 + call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol + sum2=sum(abs(cb)**2)/(20.0*76) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) !ibest=208 - ib=ibest + cd=cb(ibest:ibest+76*20-1) + do k=1,NN + i1=(k-1)*20 + csymb=cd(i1:i1+19) + call four2a(csymb,20,1,-1,1) + cs(0:3,k)=csymb(1:4)/1e2 + s4(0:3,k)=abs(csymb(1:4)) + enddo - cd=cb(ib:ib+76*20-1) - do nseq=1,1 - if( nseq.eq.1 ) then ! noncoherent single-symbol detection - sbits1=0.0 - do isym=1,76 - ib=(isym-1)*20 - ccor(3,isym)=sum(cd(ib:ib+19)*conjg(c3(0:19))) - ccor(2,isym)=sum(cd(ib:ib+19)*conjg(c2(0:19))) - ccor(1,isym)=sum(cd(ib:ib+19)*conjg(c1(0:19))) - ccor(0,isym)=sum(cd(ib:ib+19)*conjg(c0(0:19))) - sbits1(2*isym-1)= max(abs(ccor(2,isym)),abs(ccor(3,isym)))- & - max(abs(ccor(0,isym)),abs(ccor(1,isym))) - sbits1(2*isym) = max(abs(ccor(1,isym)),abs(ccor(2,isym)))- & - max(abs(ccor(0,isym)),abs(ccor(3,isym))) - hbits1(2*isym-1:2*isym)=0 - if(sbits1(2*isym-1).gt.0) hbits1(2*isym-1)=1 - if(sbits1(2*isym ).gt.0) hbits1(2*isym )=1 - enddo - sbits=sbits1 - hbits=hbits1 - sbits3=sbits1 - hbits3=hbits1 - elseif( nseq.ge.2 ) then - nbit=2*nseq-1 - numseq=2**(nbit) - ps=0 - do ibit=nbit/2+1,144-nbit/2 - ps=0.0 - pmax=0.0 - do iseq=0,numseq-1 - csum=0.0 - cterm=1.0 - k=1 - do i=nbit-1,0,-1 - ibb=iand(iseq/(2**i),1) - csum=csum+ccor(ibb,ibit-(nbit/2+1)+k)*cterm - if(ibb.eq.0) cterm=cterm*cc0 - if(ibb.eq.1) cterm=cterm*cc1 - k=k+1 - enddo - ps(iseq)=abs(csum) - if( ps(iseq) .gt. pmax ) then - pmax=ps(iseq) - ibflag=1 - endif - enddo - if( ibflag .eq. 1 ) then - psbest=ps - ibflag=0 - endif - call getbitmetric(2**(nbit/2),psbest,numseq,sbits3(ibit)) - hbits3(ibit)=0 - if(sbits3(ibit).gt.0) hbits3(ibit)=1 - enddo - sbits=sbits3 - hbits=hbits3 - endif - nsync_qual=count(hbits(1:24).eq.(/0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0/)) -! if(nsync_qual.lt.10) exit - rxdata=sbits(25:152) - rxav=sum(rxdata(1:128))/128.0 - rx2av=sum(rxdata(1:128)*rxdata(1:128))/128.0 - rxsig=sqrt(rx2av-rxav*rxav) - rxdata=rxdata/rxsig - sigma=0.80 - llr(1:128)=2*rxdata/(sigma*sigma) - apmask=0 - max_iterations=40 - do ibias=0,0 - llr2=llr - if(ibias.eq.1) llr2=llr+0.4 - if(ibias.eq.2) llr2=llr-0.4 - call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) - if(nharderror.ge.0) exit - enddo - if(sum(message77).eq.0) cycle - if( nharderror.ge.0 ) then - write(c77,'(77i1)') message77(1:77) - call unpack77(c77,1,message,unpk77_success) - idupe=0 - do i=1,ndecodes - if(decodes(i).eq.message) idupe=1 - enddo - if(idupe.eq.1) goto 888 - ndecodes=ndecodes+1 - decodes(ndecodes)=message - nsnr=nint(xsnr) - freq=f0+dfbest -1210 format(a11,2i4,f6.2,f12.7,2x,a22,i3) - write(*,1212) datetime(8:11),nsnr,ibest/750.0,freq,message,'*',nseq,nharderror,nsync_qual -1212 format(a4,i4,2x,f5.3,f11.1,2x,a22,a1,i5,i5,i5) - goto 888 - endif - enddo ! nseq -888 continue - enddo !candidate list - enddo !files +! sync quality check + is1=0 + is2=0 + is3=0 + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+36)) + if(icos4(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+72)) + if(icos4(k-1).eq.(ip(1)-1)) is3=is3+1 + enddo +! hard sync sum - max is 12 + nsync=is1+is2+is3 - write(*,1120) + do nseq=1,3 + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,76,nsym + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib .gt.152) cycle + if(nsym.eq.1) then + bmeta(ipt+ib)=bm + elseif(nsym.eq.2) then + bmetb(ipt+ib)=bm + elseif(nsym.eq.4) then + bmetc(ipt+ib)=bm + endif + enddo + enddo + enddo + + call normalizebmet(bmeta,152) + call normalizebmet(bmetb,152) + call normalizebmet(bmetc,152) + + hbits=0 + where(bmeta.ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 73: 80).eq.(/0,0,0,1,1,0,1,1/)) + ns3=count(hbits(145:152).eq.(/0,0,0,1,1,0,1,1/)) + nsync_qual=ns1+ns2+ns3 + + sigma=0.7 + llra(1:64)=bmeta(9:72) + llra(65:128)=bmeta(81:144) + llra=2*llra/sigma**2 + llrb(1:64)=bmetb(9:72) + llrb(65:128)=bmetb(81:144) + llrb=2*llrb/sigma**2 + llrc(1:64)=bmetc(9:72) + llrc(65:128)=bmetc(81:144) + llrc=2*llrc/sigma**2 + + do isd=1,3 + if(isd.eq.1) llr=llra + if(isd.eq.2) llr=llrb + if(isd.eq.3) llr=llrc + apmask=0 + max_iterations=40 + do ibias=0,0 + llr2=llr + if(ibias.eq.1) llr2=llr+0.4 + if(ibias.eq.2) llr2=llr-0.4 + call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + if(nharderror.ge.0) exit + enddo + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) cycle + ndecodes=ndecodes+1 + decodes(ndecodes)=message + nsnr=nint(xsnr) + write(*,1212) datetime(8:11),nsnr,ibest/750.0,f0,message,'*',nharderror,nsync_qual,isd,niterations +1212 format(a4,i4,2x,f5.3,f11.1,2x,a22,a1,i5,i5,i5,i5) + endif + enddo ! sequence estimation + enddo !candidate list + enddo !files + + write(*,1120) 1120 format("") 999 end program ft4d subroutine getbitmetric(ib,ps,ns,xmet) - real ps(0:ns-1) - xm1=0 - xm0=0 - do i=0,ns-1 - if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) - if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) - enddo - xmet=xm1-xm0 - return + real ps(0:ns-1) + xm1=0 + xm0=0 + do i=0,ns-1 + if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) + if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) + enddo + xmet=xm1-xm0 + return end subroutine getbitmetric -subroutine downsample2(ci,f0,co) - parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 - complex ci(0:NI-1),ct(0:NI-1) - complex co(0:NO-1) - fs=12000.0 - df=fs/NI - ct=ci - call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain - i0=nint(f0/df) - ct=cshift(ct,i0) - co=0.0 - co(0)=ct(0) - b=8.0 - do i=1,NO/2 - arg=(i*df/b)**2 - filt=exp(-arg) - co(i)=ct(i)*filt - co(NO-i)=ct(NI-i)*filt - enddo - co=co/NO - call four2a(co,NO,1,1,1) !c2c FFT back to time domain - return -end subroutine downsample2 +subroutine downsample4(ci,f0,co) + parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 + complex ci(0:NI-1),ct(0:NI-1) + complex co(0:NO-1) + fs=12000.0 + df=fs/NI + ct=ci + call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain + i0=nint(f0/df) + ct=cshift(ct,i0) + co=0.0 + co(0)=ct(0) + b=8.0 + do i=1,NO/2 + arg=(i*df/b)**2 + filt=exp(-arg) + co(i)=ct(i)*filt + co(NO-i)=ct(NI-i)*filt + enddo + co=co/NO + call four2a(co,NO,1,1,1) !c2c FFT back to time domain + return +end subroutine downsample4 subroutine ft4_downsample(iwave,f0,c) ! Input: i*2 data in iwave() at sample rate 12000 Hz ! Output: Complex data in c(), sampled at 1200 Hz - include 'ft4_params.f90' - parameter (NFFT2=NMAX/16) - integer*2 iwave(NMAX) - complex c(0:NMAX/16-1) - complex c1(0:NFFT2-1) - complex cx(0:NMAX/2) - real x(NMAX) - equivalence (x,cx) + include 'ft4_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/16-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX) + equivalence (x,cx) - BW=6.0*75 - df=12000.0/NMAX - x=iwave - call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain - ibw=nint(BW/df) - i0=nint(f0/df) - c1=0. - c1(0)=cx(i0) - do i=1,NFFT2/2 - arg=(i-1)*df/bw - win=exp(-arg*arg) - c1(i)=cx(i0+i)*win - c1(NFFT2-i)=cx(i0-i)*win - enddo - c1=c1/NFFT2 - call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain - c=c1(0:NMAX/16-1) - return + BW=6.0*75 + df=12000.0/NMAX + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + ibw=nint(BW/df) + i0=nint(f0/df) + c1=0. + c1(0)=cx(i0) + do i=1,NFFT2/2 + arg=(i-1)*df/bw + win=exp(-arg*arg) + c1(i)=cx(i0+i)*win + c1(NFFT2-i)=cx(i0-i)*win + enddo + c1=c1/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/16-1) + return end subroutine ft4_downsample diff --git a/lib/fsk4hf/ft4_params.f90 b/lib/ft4/ft4_params.f90 similarity index 64% rename from lib/fsk4hf/ft4_params.f90 rename to lib/ft4/ft4_params.f90 index 3f3e9769d..07f7d66e9 100644 --- a/lib/fsk4hf/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -6,9 +6,9 @@ parameter (ND=64) !Data symbols parameter (NS=12) !Sync symbols (12) parameter (NN=NS+ND) !Total channel symbols (76) parameter (NSPS=320) !Samples per symbol at 12000 S/s -parameter (NZ=NSPS*NN) !Samples in full 1.92 s waveform (23040) -parameter (NMAX=2.5*12000) !Samples in iwave (36,000) -parameter (NFFT1=640, NH1=NFFT1/2) !Length of FFTs for symbol spectra -parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NZ=NSPS*NN) !Samples in full 2.03 s message frame (24320) +parameter (NMAX=2.5*12000) !Samples in iwave (30,000) +parameter (NFFT1=1280, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Coarse time-sync step size parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) parameter (NDOWN=16) !Downsample factor diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 new file mode 100644 index 000000000..6701e6b2e --- /dev/null +++ b/lib/ft4/ft4d.f90 @@ -0,0 +1,329 @@ +program ft4d + + use crc + use packjt77 + include 'ft4_params.f90' + character arg*8,message*37,c77*77,infile*80,fname*16,datetime*11 + character*37 decodes(100) + character*120 data_dir + character*90 dmsg + complex cd2(0:NMAX/16-1) !Complex waveform + complex cb(0:NMAX/16-1) + complex cd(0:76*20-1) !Complex waveform + complex csum,cterm + complex ctwk(80),ctwk2(80) + complex csymb(20) + complex cs(0:3,NN) + real s4(0:3,NN) + + real*8 fMHz + real ps(0:8191),psbest(0:8191) + real bmeta(152),bmetb(152),bmetc(152) + real s(NH1,NHSYM) + real a(5) + real llr(128),llr2(128),llra(128),llrb(128),llrc(128) + real s2(0:255) + real candidate(3,100) + real savg(NH1),sbase(NH1) + integer ihdr(11) + integer icos4(0:3) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),apmask(128),cw(128) + integer*1 hbits(152),hbits1(152),hbits3(152) + integer*1 s12(12) + integer graymap(0:3) + integer ip(1) + logical unpk77_success + logical one(0:511,0:7) ! 256 4-symbol sequences, 8 bits + data s12/1,1,1,2,2,2,2,2,2,1,1,1/ + data icos4/0,1,3,2/ + data graymap/0,1,3,2/ + save one + + fs=12000.0/NDOWN !Sample rate + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + baud=1.0/tt !Keying rate for "itone" symbols (baud) + txt=NZ*dt !Transmission length (s) + twopi=8.0*atan(1.0) + h=1.0 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo + enddo + + nargs=iargc() + if(nargs.lt.1) then + print*,'Usage: ft4d [-a ] [-f fMHz] file1 [file2 ...]' + go to 999 + endif + iarg=1 + data_dir="." + call getarg(iarg,arg) + if(arg(1:2).eq.'-a') then + call getarg(iarg+1,data_dir) + iarg=iarg+2 + endif + call getarg(iarg,arg) + if(arg(1:2).eq.'-f') then + call getarg(iarg+1,arg) + read(arg,*) fMHz + iarg=iarg+2 + endif + ncoh=1 + + do ifile=iarg,nargs + call getarg(ifile,infile) + j2=index(infile,'.wav') + open(10,file=infile,status='old',access='stream') + read(10,end=999) ihdr,iwave + read(infile(j2-4:j2-1),*) nutc + datetime=infile(j2-11:j2-1) + close(10) + candidate=0.0 + ncand=0 + + nfqso=1500 + nfa=500 + nfb=2700 + syncmin=1.0 + maxcand=100 +! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase) + + call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase) + ndecodes=0 + do icand=1,ncand + f0=candidate(1,icand)-1.5*37.5 + xsnr=1.0 + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol + sum2=sum(cd2*conjg(cd2))/(20.0*76) + if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) + +! 750 samples/second here + ibest=-1 + smax=-99. + dfbest=-1. + do idf=-90,+90,5 + df=idf + a=0. + a(1)=df + ctwk=1. + call twkfreq1(ctwk,80,fs,a,ctwk2) + do istart=0,315 + call sync4d(cd2,istart,ctwk2,1,sync) + if(sync.gt.smax) then + smax=sync + ibest=istart + dfbest=df + endif + enddo + enddo + + f0=f0+dfbest +f0=1443.75 + call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol + sum2=sum(abs(cb)**2)/(20.0*76) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) +ibest=208 + cd=cb(ibest:ibest+76*20-1) + do k=1,NN + i1=(k-1)*20 + csymb=cd(i1:i1+19) + call four2a(csymb,20,1,-1,1) + cs(0:3,k)=csymb(1:4)/1e2 + s4(0:3,k)=abs(csymb(1:4)) + enddo + +! sync quality check + is1=0 + is2=0 + is3=0 + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+36)) + if(icos4(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+72)) + if(icos4(k-1).eq.(ip(1)-1)) is3=is3+1 + enddo +! hard sync sum - max is 12 + nsync=is1+is2+is3 + + do nseq=1,3 + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,76,nsym + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib .gt.152) cycle + if(nsym.eq.1) then + bmeta(ipt+ib)=bm + elseif(nsym.eq.2) then + bmetb(ipt+ib)=bm + elseif(nsym.eq.4) then + bmetc(ipt+ib)=bm + endif + enddo + enddo + enddo + + call normalizebmet(bmeta,152) + call normalizebmet(bmetb,152) + call normalizebmet(bmetc,152) + + hbits=0 + where(bmeta.ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 73: 80).eq.(/0,0,0,1,1,0,1,1/)) + ns3=count(hbits(145:152).eq.(/0,0,0,1,1,0,1,1/)) + nsync_qual=ns1+ns2+ns3 + + sigma=0.7 + llra(1:64)=bmeta(9:72) + llra(65:128)=bmeta(81:144) + llra=2*llra/sigma**2 + llrb(1:64)=bmetb(9:72) + llrb(65:128)=bmetb(81:144) + llrb=2*llrb/sigma**2 + llrc(1:64)=bmetc(9:72) + llrc(65:128)=bmetc(81:144) + llrc=2*llrc/sigma**2 + + do isd=1,3 + if(isd.eq.1) llr=llra + if(isd.eq.2) llr=llrb + if(isd.eq.3) llr=llrc + apmask=0 + max_iterations=40 + do ibias=0,0 + llr2=llr + if(ibias.eq.1) llr2=llr+0.4 + if(ibias.eq.2) llr2=llr-0.4 + call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + if(nharderror.ge.0) exit + enddo + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) cycle + ndecodes=ndecodes+1 + decodes(ndecodes)=message + nsnr=nint(xsnr) + write(*,1212) datetime(8:11),nsnr,ibest/750.0,f0,message,'*',nharderror,nsync_qual,isd,niterations +1212 format(a4,i4,2x,f5.3,f11.1,2x,a22,a1,i5,i5,i5,i5) + endif + enddo ! sequence estimation + enddo !candidate list + enddo !files + + write(*,1120) +1120 format("") + +999 end program ft4d + +subroutine getbitmetric(ib,ps,ns,xmet) + real ps(0:ns-1) + xm1=0 + xm0=0 + do i=0,ns-1 + if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) + if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) + enddo + xmet=xm1-xm0 + return +end subroutine getbitmetric + +subroutine downsample4(ci,f0,co) + parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 + complex ci(0:NI-1),ct(0:NI-1) + complex co(0:NO-1) + fs=12000.0 + df=fs/NI + ct=ci + call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain + i0=nint(f0/df) + ct=cshift(ct,i0) + co=0.0 + co(0)=ct(0) + b=8.0 + do i=1,NO/2 + arg=(i*df/b)**2 + filt=exp(-arg) + co(i)=ct(i)*filt + co(NO-i)=ct(NI-i)*filt + enddo + co=co/NO + call four2a(co,NO,1,1,1) !c2c FFT back to time domain + return +end subroutine downsample4 + +subroutine ft4_downsample(iwave,f0,c) + +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 1200 Hz + + include 'ft4_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/16-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX) + equivalence (x,cx) + + BW=6.0*75 + df=12000.0/NMAX + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + ibw=nint(BW/df) + i0=nint(f0/df) + c1=0. + c1(0)=cx(i0) + do i=1,NFFT2/2 + arg=(i-1)*df/bw + win=exp(-arg*arg) + c1(i)=cx(i0+i)*win + c1(NFFT2-i)=cx(i0-i)*win + enddo + c1=c1/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/16-1) + return +end subroutine ft4_downsample + diff --git a/lib/fsk4hf/ft4sim.f90 b/lib/ft4/ft4sim.f90 similarity index 96% rename from lib/fsk4hf/ft4sim.f90 rename to lib/ft4/ft4sim.f90 index c5fb3e572..92b09bdd0 100644 --- a/lib/fsk4hf/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -18,6 +18,8 @@ program ft4sim integer itone(NN) integer*1 msgbits(77) integer*2 iwave(NMAX) !Generated full-length waveform + integer icos4(4) + data icos4/0,1,3,2/ ! Get command-line argument(s) nargs=iargc() @@ -48,7 +50,7 @@ program ft4sim twopi=8.0*atan(1.0) fs=12000.0 !Sample rate (Hz) dt=1.0/fs !Sample interval (s) - hmod=1.000 !Modulation index (0.5 is MSK, 1.0 is FSK) + hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) tt=NSPS*dt !Duration of symbols (s) baud=1.0/tt !Keying rate (baud) txt=NZ*dt !Transmission length (s) @@ -114,10 +116,6 @@ program ft4sim c0=cshift(c0,-k) ia=k -do i=0,NMAX-1 -write(21,*) i,real(c0(i)),imag(c0(i)),dphi(i) -enddo - do ifile=1,nfiles c=c0 if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c,NMAX,NWAVE,fs,delay,fspread) diff --git a/lib/fsk4hf/genft4.f90 b/lib/ft4/genft4.f90 similarity index 82% rename from lib/fsk4hf/genft4.f90 rename to lib/ft4/genft4.f90 index 3aed650e5..450efcd4d 100644 --- a/lib/fsk4hf/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -15,12 +15,15 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) character*37 message !Message to be generated character*37 msgsent !Message as it will be received character*77 c77 - integer*4 i4tone(76) + integer*4 i4tone(76),itmp(64) integer*1 codeword(128) integer*1 msgbits(77) integer*1 s12(12) + integer icos4(4) real*8 xi(864),xq(864),pi,twopi - data s12/0,0,0,3,3,3,3,3,3,0,0,0/ +! data s12/1,1,1,2,2,2,2,2,2,1,1,1/ + data icos4/0,1,3,2/ + logical unpk77_success twopi=8.*atan(1.0) @@ -56,13 +59,17 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) ! 10 3 !Create 144-bit channel vector: - i4tone(1:12)=s12 do i=1,64 is=codeword(2*i)+2*codeword(2*i-1) - if(is.le.1) i4tone(12+i)=is - if(is.eq.2) i4tone(12+i)=3 - if(is.eq.3) i4tone(12+i)=2 + if(is.le.1) itmp(i)=is + if(is.eq.2) itmp(i)=3 + if(is.eq.3) itmp(i)=2 enddo + i4tone(1:4)=icos4 + i4tone(5:36)=itmp(1:32) + i4tone(37:40)=icos4 + i4tone(41:72)=itmp(33:64) + i4tone(73:76)=icos4 999 return end subroutine genft4 diff --git a/lib/fsk4hf/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 similarity index 83% rename from lib/fsk4hf/getcandidates4.f90 rename to lib/ft4/getcandidates4.f90 index 428b8faf5..9d75187fe 100644 --- a/lib/fsk4hf/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -1,9 +1,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand,sbase) -! For now, hardwired to find the largest peak in the average spectrum - - include 'ft2_params.f90' + include 'ft4_params.f90' real s(NH1,NHSYM) real savg(NH1),savsm(NH1) real sbase(NH1) @@ -11,9 +9,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & complex cx(0:NH1) real candidate(3,maxcand) integer*2 id(NMAX) - integer*1 s8(8) integer indx(NH1) - data s8/0,1,1,1,0,0,1,0/ equivalence (x,cx) ! Compute symbol spectra, stepping by NSTEP steps. @@ -33,10 +29,9 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & savg=savg + s(1:NH1,j) !Average spectrum enddo savsm=0. - do i=2,NH1-1 - savsm(i)=sum(savg(i-1:i+1))/3. + do i=6,NH1-5 + savsm(i)=sum(savg(i-5:i+5))/11. enddo - nfa=fa/df nfb=fb/df np=nfb-nfa+1 @@ -58,6 +53,8 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & if(xmax.gt.1.2) then ncand=ncand+1 candidate(1,ncand)=f0 + candidate(2,ncand)=-99.9 + candidate(3,ncand)=xmax endif return end subroutine getcandidates4 diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 new file mode 100644 index 000000000..efbe9b94f --- /dev/null +++ b/lib/ft4/sync4d.f90 @@ -0,0 +1,54 @@ +subroutine sync4d(cd0,i0,ctwk,itwk,sync) + +! Compute sync power for a complex, downsampled FT4 signal. +! 20 samples per symbol + + include 'ft4_params.f90' + parameter(NP=NMAX/16) + complex cd0(0:NP-1) + complex csync(80) + complex csync2(80) + complex ctwk(80) + complex z1,z2,z3 + logical first + integer icos4(0:3) + data icos4/0,1,3,2/ + data first/.true./ + save first,twopi,fs2,dt2,taus,baud,csync + + p(z1)=real(z1)**2 + aimag(z1)**2 !Statement function for power + +! Set some constants and compute the csync array. + if( first ) then + twopi=8.0*atan(1.0) + fs2=12000.0/NDOWN !Sample rate after downsampling + dt2=1/fs2 !Corresponding sample interval + taus=20*dt2 !Symbol duration + baud=1.0/taus !Keying rate + k=1 + phi=0.0 + do i=0,3 +! dphi=(twopi/2.0)*(2*icos4(i)-3)*baud*dt2 + dphi=twopi*icos4(i)*baud*dt2 + do j=1,20 + csync(k)=cmplx(cos(phi),sin(phi)) !Waveform for 7x7 Costas array + phi=mod(phi+dphi,twopi) + k=k+1 + enddo + enddo + first=.false. + endif + + sync=0 + i1=i0 !three Costas arrays + i2=i0+36*20-1 + i3=i0+72*20-1 + csync2=csync + if(itwk.eq.1) csync2=ctwk*csync2 !Tweak the frequency + if(i1.ge.0 .and. i1+79.le.NP-1) z1=sum(cd0(i1:i1+79)*conjg(csync2)) + if(i2.ge.0 .and. i2+79.le.NP-1) z2=sum(cd0(i2:i2+79)*conjg(csync2)) + if(i3.ge.0 .and. i3+79.le.NP-1) z3=sum(cd0(i3:i3+79)*conjg(csync2)) + sync = sync + p(z1) + p(z2) + p(z3) + + return +end subroutine sync4d diff --git a/lib/ft4/syncft4.f90 b/lib/ft4/syncft4.f90 new file mode 100644 index 000000000..db21b1e1e --- /dev/null +++ b/lib/ft4/syncft4.f90 @@ -0,0 +1,145 @@ +subroutine syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate, & + ncand,sbase) + + include 'ft4_params.f90' +! Search over +/- 2.5s relative to 0.5s TX start time. + parameter (JZ=20) + complex cx(0:NH1) + real s(NH1,NHSYM) + real savg(NH1) + real sbase(NH1) + real x(NFFT1) + real sync2d(NH1,-JZ:JZ) + real red(NH1) + real candidate0(3,maxcand) + real candidate(3,maxcand) + real dd(NMAX) + integer jpeak(NH1) + integer indx(NH1) + integer ii(1) + integer*2 iwave(NMAX) + integer icos4(0:3) + data icos4/0,1,3,2/ !Costas 4x4 tone pattern + equivalence (x,cx) + + dd=iwave/1e3 +! Compute symbol spectra, stepping by NSTEP steps. + savg=0. + tstep=NSTEP/12000.0 + df=12000.0/NFFT1 !3.125 Hz + fac=1.0/300.0 + do j=1,NHSYM + ia=(j-1)*NSTEP + 1 + ib=ia+NSPS-1 + x(1:NSPS)=fac*dd(ia:ib) + x(NSPS+1:)=0. + call four2a(x,NFFT1,1,-1,0) !r2c FFT + do i=1,NH1 + s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 + enddo + savg=savg + s(1:NH1,j) !Average spectrum + enddo + + call baseline(savg,nfa,nfb,sbase) + + ia=max(1,nint(nfa/df)) + ib=nint(nfb/df) + nssy=NSPS/NSTEP ! # steps per symbol + nfos=NFFT1/NSPS ! # frequency bin oversampling factor + jstrt=0.25/tstep + candidate0=0. + k=0 + + do i=ia,ib + do j=-JZ,+JZ + ta=0. + tb=0. + tc=0. + t0a=0. + t0b=0. + t0c=0. + do n=0,3 + m=j+jstrt+nssy*n + if(m.ge.1.and.m.le.NHSYM) then + ta=ta + s(i+nfos*icos4(n),m) + t0a=t0a + sum(s(i:i+nfos*3:nfos,m)) + endif + tb=tb + s(i+nfos*icos4(n),m+nssy*36) + t0b=t0b + sum(s(i:i+nfos*3:nfos,m+nssy*36)) + if(m+nssy*72.le.NHSYM) then + tc=tc + s(i+nfos*icos4(n),m+nssy*72) + t0c=t0c + sum(s(i:i+nfos*3:nfos,m+nssy*72)) + endif + enddo + t=ta+tb+tc + t0=t0a+t0b+t0c + t0=(t0-t)/3.0 + sync_abc=t/t0 + t=tb+tc + t0=t0b+t0c + t0=(t0-t)/3.0 + sync_bc=t/t0 + sync2d(i,j)=max(sync_abc,sync_bc) + enddo + enddo + + red=0. + do i=ia,ib + ii=maxloc(sync2d(i,-JZ:JZ)) - 1 - JZ + j0=ii(1) + jpeak(i)=j0 + red(i)=sync2d(i,j0) + enddo + iz=ib-ia+1 + call indexx(red(ia:ib),iz,indx) + ibase=indx(nint(0.40*iz)) - 1 + ia + if(ibase.lt.1) ibase=1 + if(ibase.gt.nh1) ibase=nh1 + base=red(ibase) + red=red/base + do i=1,min(maxcand,iz) + n=ia + indx(iz+1-i) - 1 + if(red(n).lt.syncmin.or.isnan(red(n)).or.k.eq.maxcand) exit + k=k+1 +! candidate0(1,k)=n*df+37.5*1.5 + candidate0(1,k)=n*df + candidate0(2,k)=(jpeak(n)-1)*tstep + candidate0(3,k)=red(n) + enddo + ncand=k + +! Put nfqso at top of list, and save only the best of near-dupe freqs. + do i=1,ncand + if(abs(candidate0(1,i)-nfqso).lt.10.0) candidate0(1,i)=-candidate0(1,i) + if(i.ge.2) then + do j=1,i-1 + fdiff=abs(candidate0(1,i))-abs(candidate0(1,j)) + if(abs(fdiff).lt.4.0) then + if(candidate0(3,i).ge.candidate0(3,j)) candidate0(3,j)=0. + if(candidate0(3,i).lt.candidate0(3,j)) candidate0(3,i)=0. + endif + enddo + endif + enddo + + fac=20.0/maxval(s) + s=fac*s + +! Sort by sync +! call indexx(candidate0(3,1:ncand),ncand,indx) +! Sort by frequency + call indexx(candidate0(1,1:ncand),ncand,indx) + k=1 +! do i=ncand,1,-1 + do i=1,ncand + j=indx(i) +! if( candidate0(3,j) .ge. syncmin .and. candidate0(2,j).ge.-1.5 ) then + if( candidate0(3,j) .ge. syncmin ) then + candidate(2:3,k)=candidate0(2:3,j) + candidate(1,k)=abs(candidate0(1,j)) + k=k+1 + endif + enddo + ncand=k-1 + return +end subroutine syncft4 From 9fa08d383846aa8fc2a2c159167bdd6da9ff9a93 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 25 Jan 2019 16:06:45 -0600 Subject: [PATCH 043/367] Un-hardwire sync. --- lib/ft4/ft4d.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 6701e6b2e..d1bf262c1 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -124,11 +124,11 @@ program ft4d enddo f0=f0+dfbest -f0=1443.75 +!f0=1443.75 call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol sum2=sum(abs(cb)**2)/(20.0*76) if(sum2.gt.0.0) cb=cb/sqrt(sum2) -ibest=208 +!ibest=208 cd=cb(ibest:ibest+76*20-1) do k=1,NN i1=(k-1)*20 From c52f755afc498b880bfdf7ca00c0c73f2c35ffff Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 25 Jan 2019 16:26:13 -0600 Subject: [PATCH 044/367] Make Watterson simulator causal. --- lib/ft8/watterson.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft8/watterson.f90 b/lib/ft8/watterson.f90 index fc3dca113..7c3aa35d3 100644 --- a/lib/ft8/watterson.f90 +++ b/lib/ft8/watterson.f90 @@ -47,7 +47,7 @@ subroutine watterson(c,npts,nsig,fs,delay,fspread) nshift=nint(0.001*delay*fs) if(delay.gt.0.0) then - c2(0:npts-1)=cshift(c(0:npts-1),nshift) + c2(0:npts-1)=cshift(c(0:npts-1),-nshift) !negative shifts are right shifts else c2(0:npts-1)=0.0 endif From d9f4a27a3e97f8167afc1fbbbc9992ef9454f0e3 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 26 Jan 2019 11:42:07 -0600 Subject: [PATCH 045/367] Create ft4_decode.f90. Change stand-alone decoder ft4d.f90 to use ft4_decode.f90. --- CMakeLists.txt | 1 + lib/ft4/ft4_decode.f90 | 295 +++++++++++++++++++++++++++++++++++++++++ lib/ft4/ft4d.f90 | 293 +++------------------------------------- lib/ft4/ft4sim.f90 | 4 +- lib/ft4/genft4.f90 | 2 - lib/ft4/syncft4.f90 | 2 +- 6 files changed, 314 insertions(+), 283 deletions(-) create mode 100644 lib/ft4/ft4_decode.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 52b69b84a..cbde4135c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -513,6 +513,7 @@ set (wsjt_FSRCS lib/fsk4hf/ft2d.f90 lib/ft4/ft4sim.f90 lib/ft4/ft4d.f90 + lib/ft4/ft4_decode.f90 lib/ft2/cdatetime.f90 lib/ft2/ft2_decode.f90 lib/77bit/my_hash.f90 diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 new file mode 100644 index 000000000..4bafea1a9 --- /dev/null +++ b/lib/ft4/ft4_decode.f90 @@ -0,0 +1,295 @@ +subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) + + use packjt77 + include 'ft4_params.f90' + character message*37 + character c77*77 + character*61 line + character*37 decodes(100) + character*120 data_dir + character*17 cdatetime0 + character*6 mycall,hiscall,hhmmss + + complex cd2(0:NMAX/16-1) !Complex waveform + complex cb(0:NMAX/16-1) + complex cd(0:76*20-1) !Complex waveform + complex ctwk(80),ctwk2(80) + complex csymb(20) + complex cs(0:3,NN) + real s4(0:3,NN) + + real bmeta(152),bmetb(152),bmetc(152) + real s(NH1,NHSYM) + real a(5) + real llr(128),llr2(128),llra(128),llrb(128),llrc(128) + real s2(0:255) + real candidate(3,100) + real savg(NH1),sbase(NH1) + integer icos4(0:3) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),apmask(128),cw(128) + integer*1 hbits(152) + integer graymap(0:3) + integer ip(1) + logical unpk77_success + logical one(0:511,0:7) ! 256 4-symbol sequences, 8 bits + logical first + data icos4/0,1,3,2/ + data graymap/0,1,3,2/ + data first/.true./ + save one + + hhmmss=cdatetime0(12:17) + fs=12000.0/NDOWN !Sample rate + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + baud=1.0/tt !Keying rate for "itone" symbols (baud) + txt=NZ*dt !Transmission length (s) + twopi=8.0*atan(1.0) + h=1.0 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + + if(first) then + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo + enddo + first=.false. + endif + + data_dir="." + fMHz=7.074 + + candidate=0.0 + ncand=0 + + nfa=375 + nfb=3000 + syncmin=1.0 + maxcand=100 +! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase) + + call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase) + ndecodes=0 + do icand=1,ncand + f0=candidate(1,icand)-1.5*37.5 + xsnr=10*log10(candidate(3,icand)) + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol + sum2=sum(cd2*conjg(cd2))/(20.0*76) + if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) + +! 750 samples/second here + ibest=-1 + smax=-99. + dfbest=-1. + do idf=-90,+90,5 + df=idf + a=0. + a(1)=df + ctwk=1. + call twkfreq1(ctwk,80,fs,a,ctwk2) + do istart=0,315 + call sync4d(cd2,istart,ctwk2,1,sync) + if(sync.gt.smax) then + smax=sync + ibest=istart + dfbest=df + endif + enddo + enddo + + f0=f0+dfbest +!f0=1443.75 + call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol + sum2=sum(abs(cb)**2)/(20.0*76) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) +!ibest=208 + cd=cb(ibest:ibest+76*20-1) + do k=1,NN + i1=(k-1)*20 + csymb=cd(i1:i1+19) + call four2a(csymb,20,1,-1,1) + cs(0:3,k)=csymb(1:4)/1e2 + s4(0:3,k)=abs(csymb(1:4)) + enddo + +! sync quality check + is1=0 + is2=0 + is3=0 + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+36)) + if(icos4(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+72)) + if(icos4(k-1).eq.(ip(1)-1)) is3=is3+1 + enddo +! hard sync sum - max is 12 + nsync=is1+is2+is3 + + do nseq=1,3 + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,76,nsym + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib .gt.152) cycle + if(nsym.eq.1) then + bmeta(ipt+ib)=bm + elseif(nsym.eq.2) then + bmetb(ipt+ib)=bm + elseif(nsym.eq.4) then + bmetc(ipt+ib)=bm + endif + enddo + enddo + enddo + + call normalizebmet(bmeta,152) + call normalizebmet(bmetb,152) + call normalizebmet(bmetc,152) + + hbits=0 + where(bmeta.ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 73: 80).eq.(/0,0,0,1,1,0,1,1/)) + ns3=count(hbits(145:152).eq.(/0,0,0,1,1,0,1,1/)) + nsync_qual=ns1+ns2+ns3 + + sigma=0.7 + llra(1:64)=bmeta(9:72) + llra(65:128)=bmeta(81:144) + llra=2*llra/sigma**2 + llrb(1:64)=bmetb(9:72) + llrb(65:128)=bmetb(81:144) + llrb=2*llrb/sigma**2 + llrc(1:64)=bmetc(9:72) + llrc(65:128)=bmetc(81:144) + llrc=2*llrc/sigma**2 + + do isd=1,3 + if(isd.eq.1) llr=llra + if(isd.eq.2) llr=llrb + if(isd.eq.3) llr=llrc + apmask=0 + max_iterations=40 + do ibias=0,0 + llr2=llr + if(ibias.eq.1) llr2=llr+0.4 + if(ibias.eq.2) llr2=llr-0.4 + call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + if(nharderror.ge.0) exit + enddo + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) exit + ndecodes=ndecodes+1 + decodes(ndecodes)=message + nsnr=nint(xsnr)-15 + freq=f0 + + write(line,1000) hhmmss,nsnr,ibest/750.0,nint(freq),message +1000 format(a6,i4,f5.2,i5,' + ',1x,a37) + open(24,file='all_ft2.txt',status='unknown',position='append') + write(24,1002) cdatetime0,nsnr,ibest/750.0,nint(freq),message, & + nharderror,nsync_qual,isd,niterations + if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & + ibest/750.0,nint(freq),message,nharderror,nsync_qual,isd,niterations +1002 format(a17,i4,f6.2,i5,' Rx ',a37,4i5) + close(24) + +!### Temporary: assume most recent decoded message conveys "hiscall". + i0=index(message,' ') + if(i0.ge.3 .and. i0.le.7) then + hiscall=message(i0+1:i0+6) + i1=index(hiscall,' ') + if(i1.gt.0) hiscall=hiscall(1:i1) + endif + nrx=-1 + if(index(message,'CQ ').eq.1) nrx=1 + if((index(message,trim(mycall)//' ').eq.1) .and. & + (index(message,' '//trim(hiscall)//' ').ge.4)) then + if(index(message,' 559 ').gt.8) nrx=2 + if(index(message,' R 559 ').gt.8) nrx=3 + if(index(message,' RR73 ').gt.8) nrx=4 + endif +!### + exit + + endif + enddo ! sequence estimation + enddo !candidate list + + return +end subroutine ft4_decode + +subroutine ft4_downsample(iwave,f0,c) + +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 1200 Hz + + include 'ft4_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/16-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX) + equivalence (x,cx) + + BW=6.0*75 + df=12000.0/NMAX + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + ibw=nint(BW/df) + i0=nint(f0/df) + c1=0. + c1(0)=cx(i0) + do i=1,NFFT2/2 + arg=(i-1)*df/bw + win=exp(-arg*arg) + c1(i)=cx(i0+i)*win + c1(NFFT2-i)=cx(i0-i)*win + enddo + c1=c1/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/16-1) + return +end subroutine ft4_downsample + diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index d1bf262c1..1f4dccd59 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -1,59 +1,28 @@ program ft4d - use crc - use packjt77 include 'ft4_params.f90' - character arg*8,message*37,c77*77,infile*80,fname*16,datetime*11 - character*37 decodes(100) - character*120 data_dir - character*90 dmsg - complex cd2(0:NMAX/16-1) !Complex waveform - complex cb(0:NMAX/16-1) - complex cd(0:76*20-1) !Complex waveform - complex csum,cterm - complex ctwk(80),ctwk2(80) - complex csymb(20) - complex cs(0:3,NN) - real s4(0:3,NN) + character*8 arg + character*17 cdatetime + character*120 data_dir + character*11 datetime + character*37 decodes(100) + character*16 fname + character*6 hiscall + character*80 infile + character*61 line + character*6 mycall + real*8 fMHz - real ps(0:8191),psbest(0:8191) - real bmeta(152),bmetb(152),bmetc(152) - real s(NH1,NHSYM) - real a(5) - real llr(128),llr2(128),llra(128),llrb(128),llrc(128) - real s2(0:255) - real candidate(3,100) - real savg(NH1),sbase(NH1) + integer ihdr(11) - integer icos4(0:3) integer*2 iwave(NMAX) !Generated full-length waveform - integer*1 message77(77),apmask(128),cw(128) - integer*1 hbits(152),hbits1(152),hbits3(152) - integer*1 s12(12) - integer graymap(0:3) - integer ip(1) - logical unpk77_success - logical one(0:511,0:7) ! 256 4-symbol sequences, 8 bits - data s12/1,1,1,2,2,2,2,2,2,1,1,1/ - data icos4/0,1,3,2/ - data graymap/0,1,3,2/ - save one fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) tt=NSPS*dt !Duration of "itone" symbols (s) baud=1.0/tt !Keying rate for "itone" symbols (baud) txt=NZ*dt !Transmission length (s) - twopi=8.0*atan(1.0) - h=1.0 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) - - one=.false. - do i=0,255 - do j=0,7 - if(iand(i,2**j).ne.0) one(i,j)=.true. - enddo - enddo nargs=iargc() if(nargs.lt.1) then @@ -82,174 +51,11 @@ program ft4d read(10,end=999) ihdr,iwave read(infile(j2-4:j2-1),*) nutc datetime=infile(j2-11:j2-1) + cdatetime=' '//datetime close(10) - candidate=0.0 - ncand=0 - nfqso=1500 - nfa=500 - nfb=2700 - syncmin=1.0 - maxcand=100 -! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase) - - call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase) - ndecodes=0 - do icand=1,ncand - f0=candidate(1,icand)-1.5*37.5 - xsnr=1.0 - if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol - sum2=sum(cd2*conjg(cd2))/(20.0*76) - if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) - -! 750 samples/second here - ibest=-1 - smax=-99. - dfbest=-1. - do idf=-90,+90,5 - df=idf - a=0. - a(1)=df - ctwk=1. - call twkfreq1(ctwk,80,fs,a,ctwk2) - do istart=0,315 - call sync4d(cd2,istart,ctwk2,1,sync) - if(sync.gt.smax) then - smax=sync - ibest=istart - dfbest=df - endif - enddo - enddo - - f0=f0+dfbest -!f0=1443.75 - call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol - sum2=sum(abs(cb)**2)/(20.0*76) - if(sum2.gt.0.0) cb=cb/sqrt(sum2) -!ibest=208 - cd=cb(ibest:ibest+76*20-1) - do k=1,NN - i1=(k-1)*20 - csymb=cd(i1:i1+19) - call four2a(csymb,20,1,-1,1) - cs(0:3,k)=csymb(1:4)/1e2 - s4(0:3,k)=abs(csymb(1:4)) - enddo - -! sync quality check - is1=0 - is2=0 - is3=0 - do k=1,4 - ip=maxloc(s4(:,k)) - if(icos4(k-1).eq.(ip(1)-1)) is1=is1+1 - ip=maxloc(s4(:,k+36)) - if(icos4(k-1).eq.(ip(1)-1)) is2=is2+1 - ip=maxloc(s4(:,k+72)) - if(icos4(k-1).eq.(ip(1)-1)) is3=is3+1 - enddo -! hard sync sum - max is 12 - nsync=is1+is2+is3 - - do nseq=1,3 - if(nseq.eq.1) nsym=1 - if(nseq.eq.2) nsym=2 - if(nseq.eq.3) nsym=4 - nt=2**(2*nsym) - do ks=1,76,nsym - amax=-1.0 - do i=0,nt-1 - i1=i/64 - i2=iand(i,63)/16 - i3=iand(i,15)/4 - i4=iand(i,3) - if(nsym.eq.1) then - s2(i)=abs(cs(graymap(i4),ks)) - elseif(nsym.eq.2) then - s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) - elseif(nsym.eq.4) then - s2(i)=abs(cs(graymap(i1),ks ) + & - cs(graymap(i2),ks+1) + & - cs(graymap(i3),ks+2) + & - cs(graymap(i4),ks+3) & - ) - else - print*,"Error - nsym must be 1, 2, or 4." - endif - enddo - ipt=1+(ks-1)*2 - if(nsym.eq.1) ibmax=1 - if(nsym.eq.2) ibmax=3 - if(nsym.eq.4) ibmax=7 - do ib=0,ibmax - bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & - maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) - if(ipt+ib .gt.152) cycle - if(nsym.eq.1) then - bmeta(ipt+ib)=bm - elseif(nsym.eq.2) then - bmetb(ipt+ib)=bm - elseif(nsym.eq.4) then - bmetc(ipt+ib)=bm - endif - enddo - enddo - enddo - - call normalizebmet(bmeta,152) - call normalizebmet(bmetb,152) - call normalizebmet(bmetc,152) - - hbits=0 - where(bmeta.ge.0) hbits=1 - ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 73: 80).eq.(/0,0,0,1,1,0,1,1/)) - ns3=count(hbits(145:152).eq.(/0,0,0,1,1,0,1,1/)) - nsync_qual=ns1+ns2+ns3 - - sigma=0.7 - llra(1:64)=bmeta(9:72) - llra(65:128)=bmeta(81:144) - llra=2*llra/sigma**2 - llrb(1:64)=bmetb(9:72) - llrb(65:128)=bmetb(81:144) - llrb=2*llrb/sigma**2 - llrc(1:64)=bmetc(9:72) - llrc(65:128)=bmetc(81:144) - llrc=2*llrc/sigma**2 - - do isd=1,3 - if(isd.eq.1) llr=llra - if(isd.eq.2) llr=llrb - if(isd.eq.3) llr=llrc - apmask=0 - max_iterations=40 - do ibias=0,0 - llr2=llr - if(ibias.eq.1) llr2=llr+0.4 - if(ibias.eq.2) llr2=llr-0.4 - call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) - if(nharderror.ge.0) exit - enddo - if(sum(message77).eq.0) cycle - if( nharderror.ge.0 ) then - write(c77,'(77i1)') message77(1:77) - call unpack77(c77,1,message,unpk77_success) - idupe=0 - do i=1,ndecodes - if(decodes(i).eq.message) idupe=1 - enddo - if(idupe.eq.1) cycle - ndecodes=ndecodes+1 - decodes(ndecodes)=message - nsnr=nint(xsnr) - write(*,1212) datetime(8:11),nsnr,ibest/750.0,f0,message,'*',nharderror,nsync_qual,isd,niterations -1212 format(a4,i4,2x,f5.3,f11.1,2x,a22,a1,i5,i5,i5,i5) - endif - enddo ! sequence estimation - enddo !candidate list + call ft4_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) + if(ndecodes.ge.1) write(*,'(a61)') line enddo !files write(*,1120) @@ -257,73 +63,4 @@ program ft4d 999 end program ft4d -subroutine getbitmetric(ib,ps,ns,xmet) - real ps(0:ns-1) - xm1=0 - xm0=0 - do i=0,ns-1 - if( iand(i/ib,1) .eq. 1 .and. ps(i) .gt. xm1 ) xm1=ps(i) - if( iand(i/ib,1) .eq. 0 .and. ps(i) .gt. xm0 ) xm0=ps(i) - enddo - xmet=xm1-xm0 - return -end subroutine getbitmetric - -subroutine downsample4(ci,f0,co) - parameter(NI=144*160,NH=NI/2,NO=NI/16) ! downsample from 200 samples per symbol to 10 - complex ci(0:NI-1),ct(0:NI-1) - complex co(0:NO-1) - fs=12000.0 - df=fs/NI - ct=ci - call four2a(ct,NI,1,-1,1) !c2c FFT to freq domain - i0=nint(f0/df) - ct=cshift(ct,i0) - co=0.0 - co(0)=ct(0) - b=8.0 - do i=1,NO/2 - arg=(i*df/b)**2 - filt=exp(-arg) - co(i)=ct(i)*filt - co(NO-i)=ct(NI-i)*filt - enddo - co=co/NO - call four2a(co,NO,1,1,1) !c2c FFT back to time domain - return -end subroutine downsample4 - -subroutine ft4_downsample(iwave,f0,c) - -! Input: i*2 data in iwave() at sample rate 12000 Hz -! Output: Complex data in c(), sampled at 1200 Hz - - include 'ft4_params.f90' - parameter (NFFT2=NMAX/16) - integer*2 iwave(NMAX) - complex c(0:NMAX/16-1) - complex c1(0:NFFT2-1) - complex cx(0:NMAX/2) - real x(NMAX) - equivalence (x,cx) - - BW=6.0*75 - df=12000.0/NMAX - x=iwave - call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain - ibw=nint(BW/df) - i0=nint(f0/df) - c1=0. - c1(0)=cx(i0) - do i=1,NFFT2/2 - arg=(i-1)*df/bw - win=exp(-arg*arg) - c1(i)=cx(i0+i)*win - c1(NFFT2-i)=cx(i0-i)*win - enddo - c1=c1/NFFT2 - call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain - c=c1(0:NMAX/16-1) - return -end subroutine ft4_downsample diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 92b09bdd0..3ed3b2553 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -92,12 +92,12 @@ program ft4sim enddo ! Define the instantaneous frequency waveform - dphi_peak=twopi*(hmod/2.0)/real(NSPS) + dphi_peak=twopi*hmod/real(NSPS) dphi=0.0 do j=1,NN ib=(j-1)*320 ie=ib+960-1 - dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*(2*itone(j)-3) + dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*itone(j) enddo phi=0.0 diff --git a/lib/ft4/genft4.f90 b/lib/ft4/genft4.f90 index 450efcd4d..ba906f6cd 100644 --- a/lib/ft4/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -5,7 +5,6 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) ! Input: ! - msg0 requested message to be transmitted ! - ichk if ichk=1, return only msgsent -! if ichk.ge.10000, set imsg=ichk-10000 for short msg ! - msgsent message as it will be decoded ! - i4tone array of audio tone values, {0,1,2,3} @@ -21,7 +20,6 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) integer*1 s12(12) integer icos4(4) real*8 xi(864),xq(864),pi,twopi -! data s12/1,1,1,2,2,2,2,2,2,1,1,1/ data icos4/0,1,3,2/ logical unpk77_success diff --git a/lib/ft4/syncft4.f90 b/lib/ft4/syncft4.f90 index db21b1e1e..4841c560e 100644 --- a/lib/ft4/syncft4.f90 +++ b/lib/ft4/syncft4.f90 @@ -26,7 +26,7 @@ subroutine syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate, & ! Compute symbol spectra, stepping by NSTEP steps. savg=0. tstep=NSTEP/12000.0 - df=12000.0/NFFT1 !3.125 Hz + df=12000.0/NFFT1 fac=1.0/300.0 do j=1,NHSYM ia=(j-1)*NSTEP + 1 From 9b942910e01b2aced11f1c62cd78e0b70aa8b4bc Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 27 Jan 2019 00:50:25 +0000 Subject: [PATCH 046/367] Allow for tx periods shorter than the audio buffer size Audio will not start until at least one buffer full is achieved and as we use a large target latency of 2s to minimize CPU usage and glitches we must pad with silence when the QAudioOutput pulls buffers from the Modulator i/o device. This is all necessary with pulseaudio using the underlying o/s ALSA device, i.e. on Linux. --- Modulator.cpp | 6 ++++++ soundout.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Modulator.cpp b/Modulator.cpp index 66c7a3202..5f6f9a5ac 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -319,6 +319,12 @@ qint64 Modulator::readData (char * data, qint64 maxSize) // done for this chunk - continue on next call // qint64 ms1=QDateTime::currentMSecsSinceEpoch() - m_ms0; // if(m_ic>=4*144*160) qDebug() << "Modulator finished" << m_ic << 0.001*ms1; + + while (samples != end) // pad block with silence + { + samples = load (0, samples); + ++framesGenerated; + } return framesGenerated * bytesPerFrame (); } // fall through diff --git a/soundout.cpp b/soundout.cpp index a4f8800df..b21675b3a 100644 --- a/soundout.cpp +++ b/soundout.cpp @@ -101,7 +101,7 @@ void SoundOutput::restart (QIODevice * source) m_stream->setBufferSize (m_stream->format().bytesForDuration((m_msBuffered ? m_msBuffered : MS_BUFFERED) * 1000)); // qDebug() << "B" << m_stream->bufferSize() << // m_stream->periodSize() << m_stream->notifyInterval(); - + m_stream->setCategory ("production"); m_stream->start (source); } From 613bfaf3eebf4538579c444d6e5b89b0960151ee Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 26 Jan 2019 23:03:54 -0600 Subject: [PATCH 047/367] Change ft4 to use (174,91) code and 512 Sa/symbol. --- lib/ft4/ft4_decode.f90 | 115 ++++++++++++++++++++++------------------- lib/ft4/ft4_params.f90 | 20 +++---- lib/ft4/ft4sim.f90 | 16 +++--- lib/ft4/genft4.f90 | 34 ++++++------ lib/ft4/sync4d.f90 | 41 +++++++-------- 5 files changed, 113 insertions(+), 113 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 4bafea1a9..9e2f6d177 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -2,6 +2,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) use packjt77 include 'ft4_params.f90' + parameter (NSS=NSPS/NDOWN) character message*37 character c77*77 character*61 line @@ -10,29 +11,29 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) character*17 cdatetime0 character*6 mycall,hiscall,hhmmss - complex cd2(0:NMAX/16-1) !Complex waveform - complex cb(0:NMAX/16-1) - complex cd(0:76*20-1) !Complex waveform - complex ctwk(80),ctwk2(80) - complex csymb(20) + complex cd2(0:NMAX/NDOWN-1) !Complex waveform + complex cb(0:NMAX/NDOWN-1) + complex cd(0:NN*NSS-1) !Complex waveform + complex ctwk(4*NSS),ctwk2(4*NSS) + complex csymb(NSS) complex cs(0:3,NN) real s4(0:3,NN) - real bmeta(152),bmetb(152),bmetc(152) + real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) real s(NH1,NHSYM) real a(5) - real llr(128),llr2(128),llra(128),llrb(128),llrc(128) + real llr(2*ND),llr2(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND) real s2(0:255) real candidate(3,100) real savg(NH1),sbase(NH1) integer icos4(0:3) integer*2 iwave(NMAX) !Generated full-length waveform - integer*1 message77(77),apmask(128),cw(128) - integer*1 hbits(152) + integer*1 message77(77),apmask(2*ND),cw(2*ND) + integer*1 hbits(2*NN) integer graymap(0:3) integer ip(1) logical unpk77_success - logical one(0:511,0:7) ! 256 4-symbol sequences, 8 bits + logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first data icos4/0,1,3,2/ data graymap/0,1,3,2/ @@ -43,10 +44,9 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) tt=NSPS*dt !Duration of "itone" symbols (s) - baud=1.0/tt !Keying rate for "itone" symbols (baud) txt=NZ*dt !Transmission length (s) twopi=8.0*atan(1.0) - h=1.0 !h=0.8 seems to be optimum for AWGN sensitivity (not for fading) + h=1.0 if(first) then one=.false. @@ -73,8 +73,8 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase) ndecodes=0 do icand=1,ncand - f0=candidate(1,icand)-1.5*37.5 - xsnr=10*log10(candidate(3,icand)) + f0=candidate(1,icand)-35.0 + xsnr=10*log10(candidate(3,icand))-15.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol sum2=sum(cd2*conjg(cd2))/(20.0*76) @@ -84,13 +84,13 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ibest=-1 smax=-99. dfbest=-1. - do idf=-90,+90,5 + do idf=-30,+30,2 df=idf a=0. a(1)=df ctwk=1. - call twkfreq1(ctwk,80,fs,a,ctwk2) - do istart=0,315 + call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) + do istart=0,374 call sync4d(cd2,istart,ctwk2,1,sync) if(sync.gt.smax) then smax=sync @@ -101,41 +101,43 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) enddo f0=f0+dfbest -!f0=1443.75 call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol - sum2=sum(abs(cb)**2)/(20.0*76) + sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) -!ibest=208 - cd=cb(ibest:ibest+76*20-1) + cd=cb(ibest:ibest+NN*NSS-1) do k=1,NN - i1=(k-1)*20 - csymb=cd(i1:i1+19) - call four2a(csymb,20,1,-1,1) - cs(0:3,k)=csymb(1:4)/1e2 + i1=(k-1)*NSS + csymb=cd(i1:i1+NSS-1) + call four2a(csymb,NSS,1,-1,1) + cs(0:3,k)=csymb(1:4) s4(0:3,k)=abs(csymb(1:4)) +!write(*,'(i4,4f8.1)') k, s4(0:3,k) enddo ! sync quality check is1=0 is2=0 is3=0 + is4=0 do k=1,4 ip=maxloc(s4(:,k)) if(icos4(k-1).eq.(ip(1)-1)) is1=is1+1 - ip=maxloc(s4(:,k+36)) + ip=maxloc(s4(:,k+33)) if(icos4(k-1).eq.(ip(1)-1)) is2=is2+1 - ip=maxloc(s4(:,k+72)) + ip=maxloc(s4(:,k+66)) if(icos4(k-1).eq.(ip(1)-1)) is3=is3+1 + ip=maxloc(s4(:,k+99)) + if(icos4(k-1).eq.(ip(1)-1)) is4=is4+1 enddo -! hard sync sum - max is 12 - nsync=is1+is2+is3 +! hard sync sum - max is 16 + nsync=is1+is2+is3+is4 do nseq=1,3 if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 if(nseq.eq.3) nsym=4 nt=2**(2*nsym) - do ks=1,76,nsym + do ks=1,NN-nsym+1,nsym !87+16=103 symbols. amax=-1.0 do i=0,nt-1 i1=i/64 @@ -163,7 +165,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) do ib=0,ibmax bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) - if(ipt+ib .gt.152) cycle + if(ipt+ib.gt.2*NN) cycle if(nsym.eq.1) then bmeta(ipt+ib)=bm elseif(nsym.eq.2) then @@ -175,27 +177,31 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) enddo enddo - call normalizebmet(bmeta,152) - call normalizebmet(bmetb,152) - call normalizebmet(bmetc,152) + call normalizebmet(bmeta,2*NN) + call normalizebmet(bmetb,2*NN) + call normalizebmet(bmetc,2*NN) hbits=0 where(bmeta.ge.0) hbits=1 ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 73: 80).eq.(/0,0,0,1,1,0,1,1/)) - ns3=count(hbits(145:152).eq.(/0,0,0,1,1,0,1,1/)) - nsync_qual=ns1+ns2+ns3 + ns2=count(hbits( 67: 74).eq.(/0,0,0,1,1,0,1,1/)) + ns3=count(hbits(133:140).eq.(/0,0,0,1,1,0,1,1/)) + ns4=count(hbits(199:206).eq.(/0,0,0,1,1,0,1,1/)) + nsync_qual=ns1+ns2+ns3+ns4 - sigma=0.7 - llra(1:64)=bmeta(9:72) - llra(65:128)=bmeta(81:144) - llra=2*llra/sigma**2 - llrb(1:64)=bmetb(9:72) - llrb(65:128)=bmetb(81:144) - llrb=2*llrb/sigma**2 - llrc(1:64)=bmetc(9:72) - llrc(65:128)=bmetc(81:144) - llrc=2*llrc/sigma**2 + scalefac=2.83 + llra( 1: 58)=bmeta( 9: 66) + llra( 59:116)=bmeta( 75:132) + llra(117:174)=bmeta(141:198) + llra=scalefac*llra + llrb( 1: 58)=bmetb( 9: 66) + llrb( 59:116)=bmetb( 75:132) + llrb(117:174)=bmetb(141:198) + llrb=scalefac*llrb + llrc( 1: 58)=bmetc( 9: 66) + llrc( 59:116)=bmetc( 75:132) + llrc(117:174)=bmetc(141:198) + llrc=scalefac*llrc do isd=1,3 if(isd.eq.1) llr=llra @@ -207,7 +213,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) llr2=llr if(ibias.eq.1) llr2=llr+0.4 if(ibias.eq.2) llr2=llr-0.4 - call bpdecode128_90(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + call bpdecode174_91(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) if(nharderror.ge.0) exit enddo if(sum(message77).eq.0) cycle @@ -221,12 +227,12 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) if(idupe.eq.1) exit ndecodes=ndecodes+1 decodes(ndecodes)=message - nsnr=nint(xsnr)-15 + nsnr=nint(xsnr) freq=f0 write(line,1000) hhmmss,nsnr,ibest/750.0,nint(freq),message 1000 format(a6,i4,f5.2,i5,' + ',1x,a37) - open(24,file='all_ft2.txt',status='unknown',position='append') + open(24,file='all_ft4.txt',status='unknown',position='append') write(24,1002) cdatetime0,nsnr,ibest/750.0,nint(freq),message, & nharderror,nsync_qual,isd,niterations if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & @@ -267,17 +273,18 @@ subroutine ft4_downsample(iwave,f0,c) include 'ft4_params.f90' parameter (NFFT2=NMAX/16) integer*2 iwave(NMAX) - complex c(0:NMAX/16-1) + complex c(0:NMAX/NDOWN-1) complex c1(0:NFFT2-1) complex cx(0:NMAX/2) real x(NMAX) equivalence (x,cx) - BW=6.0*75 +!****** Tune this + bw=250.0 df=12000.0/NMAX x=iwave call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain - ibw=nint(BW/df) + ibw=nint(bw/df) i0=nint(f0/df) c1=0. c1(0)=cx(i0) @@ -289,7 +296,7 @@ subroutine ft4_downsample(iwave,f0,c) enddo c1=c1/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain - c=c1(0:NMAX/16-1) + c=c1(0:NMAX/NDOWN-1) return end subroutine ft4_downsample diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 07f7d66e9..5acd63e59 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -1,14 +1,14 @@ -! FT4 37.5 baud - 26.67 ms symbol duration -! LDPC (128,90) code +! FT4 +! LDPC (174,91) code -parameter (KK=90) !Information bits (77 + CRC13) -parameter (ND=64) !Data symbols -parameter (NS=12) !Sync symbols (12) -parameter (NN=NS+ND) !Total channel symbols (76) -parameter (NSPS=320) !Samples per symbol at 12000 S/s -parameter (NZ=NSPS*NN) !Samples in full 2.03 s message frame (24320) -parameter (NMAX=2.5*12000) !Samples in iwave (30,000) -parameter (NFFT1=1280, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (KK=91) !Information bits (77 + CRC14) +parameter (ND=87) !Data symbols +parameter (NS=16) !Sync symbols +parameter (NN=NS+ND) !Total channel symbols (103) +parameter (NSPS=512) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Samples in full 4.395 s message frame (52736) +parameter (NMAX=5.0*12000) !Samples in iwave (60,000) +parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS/4) !Coarse time-sync step size parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) parameter (NDOWN=16) !Downsample factor diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 3ed3b2553..31a4f57d9 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -14,7 +14,7 @@ program ft4sim complex c(0:NMAX-1) real wave(NMAX) real dphi(0:NMAX-1) - real pulse(960) + real pulse(3*NSPS) integer itone(NN) integer*1 msgbits(77) integer*2 iwave(NMAX) !Generated full-length waveform @@ -86,8 +86,8 @@ program ft4sim call sgran() ! The filtered frequency pulse - do i=1,960 - tt=(i-480.5)/320.0 + do i=1,3*NSPS + tt=(i-1.5*NSPS)/real(NSPS) pulse(i)=gfsk_pulse(1.0,tt) enddo @@ -95,8 +95,8 @@ program ft4sim dphi_peak=twopi*hmod/real(NSPS) dphi=0.0 do j=1,NN - ib=(j-1)*320 - ie=ib+960-1 + ib=(j-1)*NSPS + ie=ib+3*NSPS-1 dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*itone(j) enddo @@ -108,9 +108,9 @@ program ft4sim phi=mod(phi+dphi(j),twopi) enddo - c0(0:319)=c0(0:319)*(1.0-cos(twopi*(/(i,i=0,319)/)/640.0) )/2.0 - c0(77*320:77*320+319)=c0(77*320:77*320+319)*(1.0+cos(twopi*(/(i,i=0,319)/)/640.0 ))/2.0 - c0(78*320:)=0. + c0(0:NSPS-1)=c0(0:NSPS-1)*(1.0-cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)) )/2.0 + c0((NN+1)*NSPS:(NN+2)*NSPS-1)=c0((NN+1)*NSPS:(NN+2)*NSPS-1)*(1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS) ))/2.0 + c0((NN+2)*NSPS:)=0. k=nint((xdt+0.25)/dt) c0=cshift(c0,-k) diff --git a/lib/ft4/genft4.f90 b/lib/ft4/genft4.f90 index ba906f6cd..1fc406194 100644 --- a/lib/ft4/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -1,6 +1,6 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) -! s12 + 64symbols = 76 channel symbols 2.027s message duration -! +! s16 + 87symbols + 2 ramp up/down = 105 channel symbols 4.48s message duration +! s4+58symb+s4+58symb+s4+58sym+s4 ! Encode an FT4 message ! Input: ! - msg0 requested message to be transmitted @@ -8,25 +8,22 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) ! - msgsent message as it will be decoded ! - i4tone array of audio tone values, {0,1,2,3} - use iso_c_binding, only: c_loc,c_size_t +! use iso_c_binding, only: c_loc,c_size_t + use packjt77 + include 'ft4_params.f90' character*37 msg0 character*37 message !Message to be generated character*37 msgsent !Message as it will be received character*77 c77 - integer*4 i4tone(76),itmp(64) - integer*1 codeword(128) + integer*4 i4tone(NN),itmp(ND) + integer*1 codeword(2*ND) integer*1 msgbits(77) - integer*1 s12(12) integer icos4(4) - real*8 xi(864),xq(864),pi,twopi data icos4/0,1,3,2/ logical unpk77_success - twopi=8.*atan(1.0) - pi=twopi/2.0 - message=msg0 do i=1, 37 @@ -47,7 +44,7 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) if(ichk.eq.1) go to 999 read(c77,"(77i1)") msgbits - call encode_128_90(msgbits,codeword) + call encode174_91(msgbits,codeword) ! Grayscale mapping: ! bits tone @@ -56,18 +53,19 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) ! 11 2 ! 10 3 -!Create 144-bit channel vector: - do i=1,64 + do i=1,ND is=codeword(2*i)+2*codeword(2*i-1) if(is.le.1) itmp(i)=is if(is.eq.2) itmp(i)=3 if(is.eq.3) itmp(i)=2 enddo - i4tone(1:4)=icos4 - i4tone(5:36)=itmp(1:32) - i4tone(37:40)=icos4 - i4tone(41:72)=itmp(33:64) - i4tone(73:76)=icos4 + i4tone(1:4)=icos4 + i4tone(5:33)=itmp(1:29) + i4tone(34:37)=icos4 + i4tone(38:66)=itmp(30:58) + i4tone(67:70)=icos4 + i4tone(71:99)=itmp(59:87) + i4tone(100:103)=icos4 999 return end subroutine genft4 diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index efbe9b94f..5623dba8c 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -1,37 +1,30 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) ! Compute sync power for a complex, downsampled FT4 signal. -! 20 samples per symbol include 'ft4_params.f90' - parameter(NP=NMAX/16) + parameter(NP=NMAX/NDOWN,NSS=NSPS/NDOWN) complex cd0(0:NP-1) - complex csync(80) - complex csync2(80) - complex ctwk(80) - complex z1,z2,z3 + complex csync(4*NSS) + complex csync2(4*NSS) + complex ctwk(4*NSS) + complex z1,z2,z3,z4 logical first integer icos4(0:3) data icos4/0,1,3,2/ data first/.true./ - save first,twopi,fs2,dt2,taus,baud,csync + save first,twopi,csync p(z1)=real(z1)**2 + aimag(z1)**2 !Statement function for power -! Set some constants and compute the csync array. if( first ) then twopi=8.0*atan(1.0) - fs2=12000.0/NDOWN !Sample rate after downsampling - dt2=1/fs2 !Corresponding sample interval - taus=20*dt2 !Symbol duration - baud=1.0/taus !Keying rate k=1 phi=0.0 do i=0,3 -! dphi=(twopi/2.0)*(2*icos4(i)-3)*baud*dt2 - dphi=twopi*icos4(i)*baud*dt2 - do j=1,20 - csync(k)=cmplx(cos(phi),sin(phi)) !Waveform for 7x7 Costas array + dphi=twopi*icos4(i)/real(NSS) + do j=1,NSS + csync(k)=cmplx(cos(phi),sin(phi)) phi=mod(phi+dphi,twopi) k=k+1 enddo @@ -40,15 +33,17 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) endif sync=0 - i1=i0 !three Costas arrays - i2=i0+36*20-1 - i3=i0+72*20-1 + i1=i0 !four Costas arrays + i2=i0+33*NSS-1 + i3=i0+66*NSS-1 + i4=i0+99*NSS-1 csync2=csync if(itwk.eq.1) csync2=ctwk*csync2 !Tweak the frequency - if(i1.ge.0 .and. i1+79.le.NP-1) z1=sum(cd0(i1:i1+79)*conjg(csync2)) - if(i2.ge.0 .and. i2+79.le.NP-1) z2=sum(cd0(i2:i2+79)*conjg(csync2)) - if(i3.ge.0 .and. i3+79.le.NP-1) z3=sum(cd0(i3:i3+79)*conjg(csync2)) - sync = sync + p(z1) + p(z2) + p(z3) + if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+4*NSS-1)*conjg(csync2)) + if(i2.ge.0 .and. i2+4*NSS-1.le.NP-1) z2=sum(cd0(i2:i2+4*NSS-1)*conjg(csync2)) + if(i3.ge.0 .and. i3+4*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+4*NSS-1)*conjg(csync2)) + if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) z4=sum(cd0(i4:i4+4*NSS-1)*conjg(csync2)) + sync = sync + p(z1) + p(z2) + p(z3) + p(z4) return end subroutine sync4d From 57cf69e6ad7b37a297931d6e7024c883a776e471 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 27 Jan 2019 19:19:47 -0600 Subject: [PATCH 048/367] First cut at identifying multiple candidates for decoding. Needs work. --- lib/ft4/ft4_decode.f90 | 66 +++++++++++++++++++++++++------------- lib/ft4/getcandidates4.f90 | 37 ++++++++++----------- 2 files changed, 62 insertions(+), 41 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 9e2f6d177..27b9922b7 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -64,16 +64,16 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) candidate=0.0 ncand=0 - nfa=375 - nfb=3000 - syncmin=1.0 + fa=375.0 + fb=3000.0 + syncmin=1.2 maxcand=100 ! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase) - call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase) + call getcandidates4(iwave,fa,fb,syncmin,nfqso,100,savg,candidate,ncand,sbase) ndecodes=0 do icand=1,ncand - f0=candidate(1,icand)-35.0 + f0=candidate(1,icand) xsnr=10*log10(candidate(3,icand))-15.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol @@ -81,26 +81,43 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! 750 samples/second here - ibest=-1 - smax=-99. - dfbest=-1. - do idf=-30,+30,2 - df=idf - a=0. - a(1)=df - ctwk=1. - call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) - do istart=0,374 - call sync4d(cd2,istart,ctwk2,1,sync) - if(sync.gt.smax) then - smax=sync - ibest=istart - dfbest=df - endif + + do isync=1,2 + if(isync.eq.1) then + idfmin=-50 + idfmax=50 + idfstp=3 + ibmin=0 + ibmax=374 + ibstp=4 + else + idfmin=idfbest-5 + idfmax=idfbest+5 + idfstp=1 + ibmin=max(0,ibest-5) + ibmax=min(ibest+5,NMAX/NDOWN-1) + ibstp=1 + endif + ibest=-1 + smax=-99. + idfbest=0 + do idf=idfmin,idfmax,idfstp + a=0. + a(1)=real(idf) + ctwk=1. + call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) + do istart=ibmin,ibmax,ibstp + call sync4d(cd2,istart,ctwk2,1,sync) + if(sync.gt.smax) then + smax=sync + ibest=istart + idfbest=idf + endif + enddo enddo enddo - f0=f0+dfbest + f0=f0+real(idfbest) call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) @@ -111,7 +128,6 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) call four2a(csymb,NSS,1,-1,1) cs(0:3,k)=csymb(1:4) s4(0:3,k)=abs(csymb(1:4)) -!write(*,'(i4,4f8.1)') k, s4(0:3,k) enddo ! sync quality check @@ -189,6 +205,10 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ns4=count(hbits(199:206).eq.(/0,0,0,1,1,0,1,1/)) nsync_qual=ns1+ns2+ns3+ns4 + if(nsync.lt.8 .or. nsync_qual.lt. 20) then + cycle + endif + scalefac=2.83 llra( 1: 58)=bmeta( 9: 66) llra( 59:116)=bmeta( 75:132) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 9d75187fe..276625942 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -10,6 +10,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & real candidate(3,maxcand) integer*2 id(NMAX) integer indx(NH1) + integer ipk(1) equivalence (x,cx) ! Compute symbol spectra, stepping by NSTEP steps. @@ -29,8 +30,8 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & savg=savg + s(1:NH1,j) !Average spectrum enddo savsm=0. - do i=6,NH1-5 - savsm(i)=sum(savg(i-5:i+5))/11. + do i=8,NH1-7 + savsm(i)=sum(savg(i-7:i+7))/15. enddo nfa=fa/df nfb=fb/df @@ -39,22 +40,22 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & call indexx(savsm(nfa:nfb),np,indx) xn=savsm(nfa+indx(nint(0.3*np))) savsm=savsm/xn - imax=-1 - xmax=-99. - do i=2,NH1-1 - if(savsm(i).gt.savsm(i-1).and. & - savsm(i).gt.savsm(i+1).and. & - savsm(i).gt.xmax) then - xmax=savsm(i) - imax=i - endif + + ncand=0 + f_offset = -1.5*12000/512 + do i=1,maxcand + ipk=maxloc(savsm(nfa:nfb)) + ip=nfa-1+ipk(1) + xmax=savsm(ip) + savsm(max(1,ip-8):min(NH1,ip+8))=0.0 + if(xmax.ge.syncmin) then + ncand=ncand+1 + candidate(1,ncand)=ip*df+f_offset + candidate(2,ncand)=-99.9 + candidate(3,ncand)=xmax + else + exit + endif enddo - f0=imax*df - if(xmax.gt.1.2) then - ncand=ncand+1 - candidate(1,ncand)=f0 - candidate(2,ncand)=-99.9 - candidate(3,ncand)=xmax - endif return end subroutine getcandidates4 From d3b1f7e5606b9cc247ac60a6a1616eb54fac0264 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 27 Jan 2019 19:28:41 -0600 Subject: [PATCH 049/367] Prevent some out-of-bounds problems. --- lib/ft4/ft4_decode.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 27b9922b7..ed7e8275d 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -64,7 +64,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) candidate=0.0 ncand=0 - fa=375.0 + fa=400.0 fb=3000.0 syncmin=1.2 maxcand=100 @@ -311,8 +311,8 @@ subroutine ft4_downsample(iwave,f0,c) do i=1,NFFT2/2 arg=(i-1)*df/bw win=exp(-arg*arg) - c1(i)=cx(i0+i)*win - c1(NFFT2-i)=cx(i0-i)*win + if(i0+i.le.NMAX/2) c1(i)=cx(i0+i)*win + if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i)*win enddo c1=c1/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain From 6e4f0f32eefa732bd2f3453527e17a36ae1cabdd Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 28 Jan 2019 10:19:46 -0500 Subject: [PATCH 050/367] Remove FT2; implement basic functionality in FT4. --- CMakeLists.txt | 12 ---- Modulator.cpp | 8 ++- models/Modes.cpp | 2 +- models/Modes.hpp | 2 +- widgets/displaytext.cpp | 4 +- widgets/mainwindow.cpp | 124 ++++++++++++++++++++-------------------- widgets/mainwindow.h | 14 ++--- widgets/mainwindow.ui | 6 +- 8 files changed, 81 insertions(+), 91 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cbde4135c..24371c0ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -462,7 +462,6 @@ set (wsjt_FSRCS lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 - lib/fsk4hf/genft2.f90 lib/ft4/genft4.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 @@ -509,13 +508,9 @@ set (wsjt_FSRCS lib/msk144signalquality.f90 lib/msk144sim.f90 lib/mskrtd.f90 - lib/fsk4hf/ft2sim.f90 - lib/fsk4hf/ft2d.f90 lib/ft4/ft4sim.f90 lib/ft4/ft4d.f90 lib/ft4/ft4_decode.f90 - lib/ft2/cdatetime.f90 - lib/ft2/ft2_decode.f90 lib/77bit/my_hash.f90 lib/wsprd/osdwspr.f90 lib/ft8/osd174_91.f90 @@ -558,7 +553,6 @@ set (wsjt_FSRCS lib/sync65.f90 lib/ft4/getcandidates4.f90 lib/fsk4hf/getcandidates2.f90 - lib/ft2/getcandidates2a.f90 lib/ft4/syncft4.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 @@ -1271,12 +1265,6 @@ target_link_libraries (ft8sim wsjt_fort wsjt_cxx) add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc) target_link_libraries (msk144sim wsjt_fort wsjt_cxx) -add_executable (ft2sim lib/fsk4hf/ft2sim.f90 wsjtx.rc) -target_link_libraries (ft2sim wsjt_fort wsjt_cxx) - -add_executable (ft2d lib/fsk4hf/ft2d.f90 wsjtx.rc) -target_link_libraries (ft2d wsjt_fort wsjt_cxx) - add_executable (ft4sim lib/ft4/ft4sim.f90 wsjtx.rc) target_link_libraries (ft4sim wsjt_fort wsjt_cxx) diff --git a/Modulator.cpp b/Modulator.cpp index 5f6f9a5ac..c80889a7d 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -89,13 +89,15 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } - if(symbolsLength==144 and framesPerSymbol==160 and toneSpacing==60) { - //### FT2 params + if((symbolsLength==103 or symbolsLength==105) and framesPerSymbol==512 + and toneSpacing==12000.0/512.0) { +//### FT4 parameters delay_ms=100; - mstr=1947; + mstr=5000; m_ic=0; m_silentFrames=0; } +// qDebug() << "Mod AA" << symbolsLength << framesPerSymbol << toneSpacing; // qDebug() << "Mod AB" << delay_ms << mstr << m_ic << m_silentFrames; initialize (QIODevice::ReadOnly, channel); diff --git a/models/Modes.cpp b/models/Modes.cpp index b823e3649..838585b2a 100644 --- a/models/Modes.cpp +++ b/models/Modes.cpp @@ -24,7 +24,7 @@ namespace "QRA64", "FreqCal", "FT8", - "FT2" + "FT4" }; std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]); } diff --git a/models/Modes.hpp b/models/Modes.hpp index 6af3e5ef3..fea55e4d4 100644 --- a/models/Modes.hpp +++ b/models/Modes.hpp @@ -49,7 +49,7 @@ public: QRA64, FreqCal, FT8, - FT2, + FT4, MODES_END_SENTINAL_AND_COUNT // this must be last }; Q_ENUM (Mode) diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index 5d68bb4f8..b67701aaa 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -455,7 +455,7 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 txFreq,bool bFastMode) { QString t1=" @ "; - if(modeTx=="FT2") t1=" + "; + if(modeTx=="FT4") t1=" + "; if(modeTx=="FT8") t1=" ~ "; if(modeTx=="JT4") t1=" $ "; if(modeTx=="JT65") t1=" # "; @@ -463,7 +463,7 @@ void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 tx QString t2; t2.sprintf("%4d",txFreq); QString t; - if(bFastMode or modeTx=="FT8" or modeTx=="FT2") { + if(bFastMode or modeTx=="FT8" or modeTx=="FT4") { t = QDateTime::currentDateTimeUtc().toString("hhmmss") + \ " Tx " + t2 + t1 + text; } else if(modeTx.mid(0,6)=="FT8fox") { diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 13cc34e1e..0cd19b553 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -99,7 +99,7 @@ extern "C" { void genft8_(char* msg, int* i3, int* n3, char* msgsent, char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t); - void genft2_(char* msg, int* ichk, char* msgsent, int itone[], int* itype, + void genft4_(char* msg, int* ichk, char* msgsent, int itone[], int* itype, fortran_charlen_t, fortran_charlen_t); void gen4_(char* msg, int* ichk, char* msgsent, int itone[], @@ -163,7 +163,7 @@ extern "C" { void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); - void ft2_decode_(char* cdatetime, int* nfqso, short int id[], int* ndecodes, + void ft4_decode_(char* cdatetime, int* nfqso, short int id[], int* ndecodes, char* mycall6, char* hiscall6, int* nrx, char* line, int len1, int len2, int len3, int len4); } @@ -551,7 +551,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, on_EraseButton_clicked (); QActionGroup* modeGroup = new QActionGroup(this); - ui->actionFT2->setActionGroup(modeGroup); + ui->actionFT4->setActionGroup(modeGroup); ui->actionFT8->setActionGroup(modeGroup); ui->actionJT9->setActionGroup(modeGroup); ui->actionJT65->setActionGroup(modeGroup); @@ -728,11 +728,11 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_guiTimer.start(100); //### Don't change the 100 ms! ### - FT2_TxTimer.setSingleShot(true); - connect(&FT2_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); + FT4_TxTimer.setSingleShot(true); + connect(&FT4_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); - FT2_WriteTxTimer.setSingleShot(true); - connect(&FT2_WriteTxTimer, &QTimer::timeout, this, &MainWindow::FT2_writeTx); + FT4_WriteTxTimer.setSingleShot(true); + connect(&FT4_WriteTxTimer, &QTimer::timeout, this, &MainWindow::FT4_writeTx); ptt0Timer.setSingleShot(true); connect(&ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2); @@ -889,7 +889,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, if(m_bFast9) m_bFastMode=true; ui->cbFast9->setChecked(m_bFast9 or m_bFastMode); - if(m_mode=="FT2") on_actionFT2_triggered(); + if(m_mode=="FT4") on_actionFT4_triggered(); if(m_mode=="FT8") on_actionFT8_triggered(); if(m_mode=="JT4") on_actionJT4_triggered(); if(m_mode=="JT9") on_actionJT9_triggered(); @@ -1361,8 +1361,8 @@ void MainWindow::dataSink(qint64 frames) if(m_monitoring || m_diskData) { m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); } - if(m_mode=="FT2") ft2Data(k); - if(m_mode=="MSK144" or m_mode=="FT2") return; + if(m_mode=="FT4") ft4Data(k); + if(m_mode=="MSK144" or m_mode=="FT4") return; fixStop(); if (m_mode == "FreqCal" @@ -1893,8 +1893,8 @@ void MainWindow::keyPressEvent (QKeyEvent * e) break; case Qt::Key_F1: if(bAltF1F5) { - if(m_mode=="FT2") { - ft2_tx(6); + if(m_mode=="FT4") { + ft4_tx(6); return; } auto_tx_mode(true); @@ -1906,8 +1906,8 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F2: if(bAltF1F5) { - if(m_mode=="FT2") { - ft2_tx(2); + if(m_mode=="FT4") { + ft4_tx(2); return; } auto_tx_mode(true); @@ -1919,8 +1919,8 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F3: if(bAltF1F5) { - if(m_mode=="FT2") { - ft2_tx(3); + if(m_mode=="FT4") { + ft4_tx(3); return; } auto_tx_mode(true); @@ -1932,8 +1932,8 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F4: if(bAltF1F5) { - if(m_mode=="FT2") { - ft2_tx(4); + if(m_mode=="FT4") { + ft4_tx(4); return; } auto_tx_mode(true); @@ -1946,8 +1946,8 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F5: if(bAltF1F5) { - if(m_mode=="FT2") { - ft2_tx(5); + if(m_mode=="FT4") { + ft4_tx(5); return; } auto_tx_mode(true); @@ -3401,7 +3401,7 @@ void MainWindow::guiUpdate() double tx1=0.0; double tx2=txDuration; - if(m_mode=="FT8" or m_mode=="FT2") icw[0]=0; //No CW ID in FT2 or FT8 mode + if(m_mode=="FT8" or m_mode=="FT4") icw[0]=0; //No CW ID in FT4 or FT8 mode if((icw[0]>0) and (!m_bFast9)) tx2 += icw[0]*2560.0/48000.0; //Full length including CW ID if(tx2>m_TRperiod) tx2=m_TRperiod; @@ -3559,7 +3559,7 @@ void MainWindow::guiUpdate() Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT m_tx_when_ready = true; } - if(!m_bTxTime and !m_tune and m_mode!="FT2") m_btxok=false; //Time to stop transmitting + if(!m_bTxTime and !m_tune and m_mode!="FT4") m_btxok=false; //Time to stop transmitting } if(m_mode.startsWith ("WSPR") and @@ -3701,10 +3701,10 @@ void MainWindow::guiUpdate() } } - if(m_mode!="FT2") m_currentMessage = QString::fromLatin1(msgsent); + if(m_mode!="FT4") m_currentMessage = QString::fromLatin1(msgsent); m_bCallingCQ = CALLING == m_QSOProgress || m_currentMessage.contains (QRegularExpression {"^(CQ|QRZ) "}); - if(m_mode=="FT8" or m_mode=="FT2") { + if(m_mode=="FT8" or m_mode=="FT4") { if(m_bCallingCQ && ui->cbFirst->isVisible () && ui->cbFirst->isChecked ()) { ui->cbFirst->setStyleSheet("QCheckBox{color:red}"); } else { @@ -3819,7 +3819,7 @@ void MainWindow::guiUpdate() m_msgSent0 = current_message; } - if(m_mode!="FT2") { + if(m_mode!="FT4") { if(!m_tune) write_all("Tx",m_currentMessage); if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { @@ -3856,7 +3856,7 @@ void MainWindow::guiUpdate() } } - if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT2") { + if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT4") { if(ui->txrb1->isEnabled() and (SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::FIELD_DAY==m_config.special_op_id() or @@ -3888,12 +3888,12 @@ void MainWindow::guiUpdate() if(tHound >= 120 and m_ntx==1) auto_tx_mode(false); } - progressBar.setVisible(!(m_mode=="FT2")); + progressBar.setVisible(!(m_mode=="FT4")); if(m_auto and m_mode=="Echo" and m_bEchoTxOK) { progressBar.setMaximum(6); progressBar.setValue(int(m_s6)); } - if(m_mode!="Echo" and m_mode!="FT2") { + if(m_mode!="Echo" and m_mode!="FT4") { if(m_monitoring or m_transmitting) { progressBar.setMaximum(m_TRperiod); int isec=int(fmod(tsec,m_TRperiod)); @@ -3932,7 +3932,7 @@ void MainWindow::guiUpdate() if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==2 and foxcom_.nslots==1) { t=m_fm1.trimmed(); } - if(m_mode=="FT2") t="Tx: "+ m_currentMessage; + if(m_mode=="FT4") t="Tx: "+ m_currentMessage; tx_status_label.setText(t.trimmed()); } } @@ -4303,7 +4303,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie || ("JT9" == m_mode && mode != "@") || ("MSK144" == m_mode && !("&" == mode || "^" == mode)) || ("QRA64" == m_mode && mode.left (1) != ":")) { - return; //Currently we do auto-sequencing only in FT2, FT8, and MSK144 + return; //Currently we do auto-sequencing only in FT4, FT8, and MSK144 } //Skip the rest if no decoded text extracted @@ -4392,7 +4392,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ui->TxFreqSpinBox->setValue(frequency); } if(m_mode != "JT4" && m_mode != "JT65" && !m_mode.startsWith ("JT9") && - m_mode != "QRA64" && m_mode!="FT8" && m_mode!="FT2") { + m_mode != "QRA64" && m_mode!="FT8" && m_mode!="FT4") { return; } } @@ -4534,7 +4534,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie m_QSOProgress = SIGNOFF; } else if((m_QSOProgress >= REPORT || (m_QSOProgress >= REPLYING && - (m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT2"))) + (m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4"))) && r.mid(0,1)=="R") { m_ntx=4; m_QSOProgress = ROGERS; @@ -4759,13 +4759,13 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie if(m_transmitting) m_restart=true; if (ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isChecked () - && !m_bDoubleClicked && m_mode!="FT2") { + && !m_bDoubleClicked && m_mode!="FT4") { return; } - if(m_mode=="FT2" and ui->cbAutoSeq->isChecked()) { + if(m_mode=="FT4" and ui->cbAutoSeq->isChecked()) { if(m_ntx==4 or m_ntx==5) logQSOTimer.start(0); // Log the QSO if((m_ntx==3 and ui->cbFirst->isChecked()) or m_ntx==4 or m_bDoubleClicked) { - ft2_tx(m_ntx); + ft4_tx(m_ntx); } } if(m_config.quick_call()) auto_tx_mode(true); @@ -4908,7 +4908,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) int n=rpt.toInt(); rpt.sprintf("%+2.2d",n); - if(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT2") { + if(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4") { QString t2,t3; QString sent=rpt; QString rs,rst; @@ -4962,7 +4962,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) } } - if((m_mode!="MSK144" and m_mode!="FT8" and m_mode!="FT2")) { + if((m_mode!="MSK144" and m_mode!="FT8" and m_mode!="FT4")) { t=t00 + rpt; msgtype(t, ui->tx2); t=t0 + "R" + rpt; @@ -5541,23 +5541,23 @@ void MainWindow::displayWidgets(qint64 n) genStdMsgs (m_rpt, true); } -void MainWindow::on_actionFT2_triggered() +void MainWindow::on_actionFT4_triggered() { - m_mode="FT2"; - m_modeTx="FT2"; + m_mode="FT4"; + m_modeTx="FT4"; m_TRperiod=2147483647; bool bVHF=m_config.enable_VHF_features(); m_bFast9=false; m_bFastMode=false; WSPR_config(false); - switch_mode (Modes::FT2); - m_nsps=6912; + switch_mode (Modes::FT4); + m_nsps=6912; //??? m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=50; + m_hsymStop=50; //??? setup_status_bar (bVHF); - m_toneSpacing=0.8*75.0; //??? - ui->actionFT2->setChecked(true); //??? + m_toneSpacing=12000.0/512.0; + ui->actionFT4->setChecked(true); //??? m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); VHF_features_enabled(bVHF); @@ -6859,11 +6859,11 @@ void MainWindow::transmit (double snr) true, false, snr, m_TRperiod); } - if (m_modeTx == "FT2") { - toneSpacing=0.8*12000.0/160.0; + if (m_modeTx == "FT4") { + toneSpacing=12000.0/512.0; // if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1; - Q_EMIT sendMessage (NUM_FT2_SYMBOLS, - 160.0, ui->TxFreqSpinBox->value() - m_XIT, + Q_EMIT sendMessage (NUM_FT4_SYMBOLS, + 512.0, ui->TxFreqSpinBox->value() - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel (), true, false, snr, 2); } @@ -7920,7 +7920,7 @@ void MainWindow::on_cbFirst_toggled(bool b) void MainWindow::on_cbAutoSeq_toggled(bool b) { if(!b) ui->cbFirst->setChecked(false); - ui->cbFirst->setVisible((m_mode=="FT8" or m_mode=="FT2") and b); + ui->cbFirst->setVisible((m_mode=="FT8" or m_mode=="FT4") and b); } void MainWindow::on_measure_check_box_stateChanged (int state) @@ -8582,7 +8582,7 @@ void MainWindow::write_all(QString txRx, QString message) t.sprintf("%5d",ui->TxFreqSpinBox->value()); if(txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); - if(m_mode!="FT2") time = time.addSecs(-(time.time().second() % m_TRperiod)); + if(m_mode!="FT4") time = time.addSecs(-(time.time().second() % m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); if(m_diskData) { line=m_fileDateTime + t + txRx + " " + m_mode.leftJustified(6,' ') + msg; @@ -8605,19 +8605,19 @@ void MainWindow::write_all(QString txRx, QString message) } } -void MainWindow::ft2Data(int k) +void MainWindow::ft4Data(int k) { static int nhsec0=-1; - short id[30000]; + short id[60000]; int nhsec=k/6000; if(nhsec==nhsec0) return; -//Process FT2 data at 0.5 s intervals +//Process FT4 data at 0.5 s intervals int j=k/6000; - j=6000*j-30000; + j=6000*j-60000; if(j<0) j+=NRING; - for(int i=0; i<30000; i++) { + for(int i=0; i<60000; i++) { id[i]=dec_data.d2[j]; j++; if(j>=NRING) j=j-NRING; @@ -8639,7 +8639,7 @@ void MainWindow::ft2Data(int k) int nfqso=1500; int ndecodes=0; int nrx=-1; - ft2_decode_(cdatetime,&nfqso,id,&ndecodes,mycall6,hiscall6,&nrx,&line[0], + ft4_decode_(cdatetime,&nfqso,id,&ndecodes,mycall6,hiscall6,&nrx,&line[0], 17,6,6,61); line[60]=0; if(ndecodes>0) { @@ -8676,7 +8676,7 @@ void MainWindow::ft2Data(int k) nhsec0=nhsec; } -void MainWindow::ft2_tx(int ntx) +void MainWindow::ft4_tx(int ntx) { if(g_iptt!=0) return; //Alreadt transmitting? static char message[38]; @@ -8695,7 +8695,7 @@ void MainWindow::ft2_tx(int ntx) ba2msg(ba,message); int ichk=0; int itype=-1; - genft2_(message, &ichk, msgsent, const_cast(itone), &itype, 37, 37); + genft4_(message, &ichk, msgsent, const_cast(itone), &itype, 37, 37); msgsent[37]=0; m_currentMessage = QString::fromLatin1(msgsent).trimmed(); tx_status_label.setStyleSheet("QLabel{background-color: #ffff33}"); @@ -8715,11 +8715,11 @@ void MainWindow::ft2_tx(int ntx) m_tx_when_ready = true; qint64 ms=QDateTime::currentMSecsSinceEpoch(); m_modulator->set_ms0(ms); - FT2_TxTimer.start(2500); //Slightly more than FT2 transmission length + FT4_TxTimer.start(5000); //Slightly more than FT4 transmission length if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); - FT2_WriteTxTimer.start(100); //Why is a delay necessary to ensure Tx after Rx in all.txt? + FT4_WriteTxTimer.start(100); //Why is a delay necessary to ensure Tx after Rx in all.txt? if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, ui->TxFreqSpinBox->value(),m_bFastMode); @@ -8743,7 +8743,7 @@ void MainWindow::ft2_tx(int ntx) if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); } -void MainWindow::FT2_writeTx() +void MainWindow::FT4_writeTx() { write_all("Tx",m_currentMessage); } diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index e21a8f8db..5a1e5037c 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -46,7 +46,7 @@ #define NUM_MSK144_SYMBOLS 144 //s8 + d48 + s8 + d80 #define NUM_QRA64_SYMBOLS 84 //63 data + 21 sync #define NUM_FT8_SYMBOLS 79 -#define NUM_FT2_SYMBOLS 144 +#define NUM_FT4_SYMBOLS 103 #define NUM_CW_SYMBOLS 250 #define TX_SAMPLE_RATE 48000 #define N_WIDGETS 33 @@ -202,7 +202,7 @@ private slots: void on_actionJT65_triggered(); void on_actionJT9_JT65_triggered(); void on_actionJT4_triggered(); - void on_actionFT2_triggered(); + void on_actionFT4_triggered(); void on_actionFT8_triggered(); void on_TxFreqSpinBox_valueChanged(int arg1); void on_actionSave_decoded_triggered(); @@ -312,8 +312,8 @@ private slots: void on_comboBoxHoundSort_activated (int index); void not_GA_warning_message (); void checkMSK144ContestType(); - void ft2Data(int k); - void ft2_tx(int ntx); + void ft4Data(int k); + void ft4_tx(int ntx); int setTxMsg(int n); bool stdCall(QString const& w); @@ -581,8 +581,8 @@ private: QTimer minuteTimer; QTimer splashTimer; QTimer p1Timer; - QTimer FT2_TxTimer; - QTimer FT2_WriteTxTimer; + QTimer FT4_TxTimer; + QTimer FT4_WriteTxTimer; QString m_path; QString m_baseCall; @@ -750,7 +750,7 @@ private: void foxTxSequencer(); void foxGenWaveform(int i,QString fm); void writeFoxQSO (QString const& msg); - void FT2_writeTx(); + void FT4_writeTx(); }; extern int killbyname(const char* progName); diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index ca9551ec2..cab236b62 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -2705,7 +2705,7 @@ list. The list can be maintained in Settings (F2). Mode - + @@ -3339,12 +3339,12 @@ list. The list can be maintained in Settings (F2). Erase WSPR hashtable - + true - FT2 + FT4 From 7da4fc63a6c73626524e147288160820642d3fe7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 28 Jan 2019 11:07:52 -0500 Subject: [PATCH 051/367] Add freq markers for FT4 to Wide Graph. Tentative default FT4 freqs for 40m and 20m. --- models/FrequencyList.cpp | 4 ++-- widgets/plotter.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/models/FrequencyList.cpp b/models/FrequencyList.cpp index 57f850eb7..d080f76cf 100644 --- a/models/FrequencyList.cpp +++ b/models/FrequencyList.cpp @@ -68,7 +68,7 @@ namespace {7038600, Modes::WSPR, IARURegions::ALL}, {7074000, Modes::FT8, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL}, - {7078000, Modes::FT8, IARURegions::ALL}, + {7078000, Modes::FT4, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL}, {10136000, Modes::FT8, IARURegions::ALL}, @@ -79,7 +79,7 @@ namespace {14095600, Modes::WSPR, IARURegions::ALL}, {14074000, Modes::FT8, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL}, - {14078000, Modes::FT8, IARURegions::ALL}, + {14078000, Modes::FT4, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL}, {18100000, Modes::FT8, IARURegions::ALL}, diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 761dae08d..4fad379d8 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -409,7 +409,7 @@ void CPlotter::DrawOverlay() //DrawOverlay() } float bw=9.0*12000.0/m_nsps; //JT9 - + if(m_mode=="FT4") bw=3*12000.0/512.0; //FT4 ### (3x, or 4x???) ### if(m_mode=="FT8") bw=7*12000.0/1920.0; //FT8 if(m_mode=="JT4") { //JT4 @@ -484,7 +484,8 @@ void CPlotter::DrawOverlay() //DrawOverlay() painter0.drawLine(x1,24,x1,30); } - if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65" or m_mode=="QRA64" or m_mode=="FT8") { + if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65" + or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") { if(m_mode=="QRA64" or (m_mode=="JT65" and m_bVHF)) { painter0.setPen(penGreen); @@ -518,7 +519,8 @@ void CPlotter::DrawOverlay() //DrawOverlay() } if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65" or - m_mode.mid(0,4)=="WSPR" or m_mode=="QRA64" or m_mode=="FT8") { + m_mode.mid(0,4)=="WSPR" or m_mode=="QRA64" or m_mode=="FT8" + or m_mode=="FT4") { painter0.setPen(penRed); x1=XfromFreq(m_txFreq); x2=XfromFreq(m_txFreq+bw); From 2e4035c8bbf68d32f5cd47a00f37f82670174048 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 28 Jan 2019 13:50:23 -0500 Subject: [PATCH 052/367] Insert red line on waterfall to mark an FT4 transmission. --- widgets/mainwindow.cpp | 3 ++- widgets/plotter.cpp | 2 +- widgets/widegraph.cpp | 3 ++- widgets/widegraph.h | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0cd19b553..626324e10 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4036,7 +4036,8 @@ void MainWindow::stopTx2() on_stopTxButton_clicked (); m_nTx73 = 0; } - if(m_mode.startsWith ("WSPR") and m_ntr==-1 and !m_tuneup) { + if(((m_mode.startsWith("WSPR") and m_ntr==-1) or m_mode=="FT4") and + !m_tuneup) { m_wideGraph->setWSPRtransmitted(); WSPR_scheduling (); m_ntr=0; diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 4fad379d8..813e2bc31 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -166,7 +166,7 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) ymin=1.e30; if(swide[0]>1.e29 and swide[0]< 1.5e30) painter1.setPen(Qt::green); - if(swide[0]>1.4e30) painter1.setPen(Qt::yellow); + if(swide[0]>1.4e30) painter1.setPen(Qt::red); if(!m_bReplot) { m_j=0; int irow=-1; diff --git a/widgets/widegraph.cpp b/widgets/widegraph.cpp index b4601ba4c..1f3110cee 100644 --- a/widgets/widegraph.cpp +++ b/widgets/widegraph.cpp @@ -187,7 +187,8 @@ void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dat // Time according to this computer qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; int ntr = (ms/1000) % m_TRperiod; - if((ndiskdata && ihsym <= m_waterfallAvg) || (!ndiskdata && ntr Date: Mon, 28 Jan 2019 14:20:32 -0500 Subject: [PATCH 053/367] Code cleanup. --- widgets/mainwindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 626324e10..1b2443f01 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4043,7 +4043,6 @@ void MainWindow::stopTx2() m_ntr=0; } last_tx_label.setText("Last Tx: " + m_currentMessage.trimmed()); -//### if(m_mode=="FT8" and (SpecOp::HOUND == m_config.special_op_id())) auto_tx_mode(false); ### } void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg() @@ -4781,6 +4780,7 @@ int MainWindow::setTxMsg(int n) if(n==3) ui->txrb3->setChecked(true); if(n==4) ui->txrb4->setChecked(true); if(n==5) ui->txrb5->setChecked(true); + if(n==6) ui->txrb6->setChecked(true); if(ui->tabWidget->currentIndex()==1) { m_ntx=7; //### FIX THIS ### m_gen_message_is_cq = false; @@ -8691,8 +8691,6 @@ void MainWindow::ft4_tx(int ntx) if(m_ntx == 4) ba=ui->tx4->text().toLocal8Bit(); if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); - if(m_ntx == 7) ba=ui->genMsg->text().toLocal8Bit(); - if(m_ntx == 8) ba=ui->freeTextMsg->currentText().toLocal8Bit(); ba2msg(ba,message); int ichk=0; int itype=-1; From 7a9240c9efbf4489f9cdf13b8f48db943b9cebb6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 28 Jan 2019 15:58:14 -0500 Subject: [PATCH 054/367] Basic saving of .wav files for FT4. --- widgets/mainwindow.cpp | 18 +++++++++++++++++- widgets/mainwindow.h | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 1b2443f01..7a9a96853 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8625,7 +8625,8 @@ void MainWindow::ft4Data(int k) } if(k>=NRING) { -//Wrap the ring buffer pointer + if(m_saveAll) save_FT4(); + //Wrap the ring buffer pointer k=k-NRING; dec_data.params.kin=k; } @@ -8740,9 +8741,24 @@ void MainWindow::ft4_tx(int ntx) } m_dateTimeQSOOn=QDateTime::currentDateTimeUtc(); if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); + if(m_saveAll) save_FT4(); } void MainWindow::FT4_writeTx() { write_all("Tx",m_currentMessage); } + +void MainWindow::save_FT4() +{ + auto time = QDateTime::currentDateTimeUtc (); + QString t=time.toString("yyMMdd_hhmmss"); + m_fnameWE=m_config.save_directory().absoluteFilePath(t); + int nsec=(dec_data.params.kin + 3456)/12000; +// The following is potential a threading hazard - not a good +// idea to pass pointer to be processed in another thread + m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, + this, m_fnameWE, &dec_data.d2[0], nsec, m_config.my_callsign(), + m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); +// qDebug() << "aa" << m_fnameWE << nsec; +} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 5a1e5037c..f97bdef32 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -751,6 +751,7 @@ private: void foxGenWaveform(int i,QString fm); void writeFoxQSO (QString const& msg); void FT4_writeTx(); + void save_FT4(); }; extern int killbyname(const char* progName); From e98231d4c1444d7453388d575ae747e72e6b6ef3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 10:39:34 -0500 Subject: [PATCH 055/367] Correct the call to genft4(); fix the displayed time for data from disk. --- lib/ft4/ft4_decode.f90 | 2 +- widgets/mainwindow.cpp | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index ed7e8275d..790553bd1 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -40,7 +40,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) data first/.true./ save one - hhmmss=cdatetime0(12:17) + hhmmss=cdatetime0(8:13) fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) tt=NSPS*dt !Duration of "itone" symbols (s) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7a9a96853..10149dce9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -99,7 +99,7 @@ extern "C" { void genft8_(char* msg, int* i3, int* n3, char* msgsent, char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t); - void genft4_(char* msg, int* ichk, char* msgsent, int itone[], int* itype, + void genft4_(char* msg, int* ichk, char* msgsent, int itone[], fortran_charlen_t, fortran_charlen_t); void gen4_(char* msg, int* ichk, char* msgsent, int itone[], @@ -8631,9 +8631,13 @@ void MainWindow::ft4Data(int k) dec_data.params.kin=k; } - auto time = QDateTime::currentDateTimeUtc (); - QString t=time.toString("yyMMdd_hhmmss.sss"); - QByteArray ba=time.toString("yyMMdd_hhmmss.sss").toLatin1(); + QByteArray ba; + if(m_diskData) { + ba=(m_fileDateTime + ".000").toLatin1(); + } else { + auto time = QDateTime::currentDateTimeUtc (); + ba=time.toString("yyMMdd_hhmmss.sss").toLatin1(); + } char* cdatetime=ba.data(); char mycall6[] ="K1JT "; char hiscall6[]="K9AN "; @@ -8694,8 +8698,7 @@ void MainWindow::ft4_tx(int ntx) if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); ba2msg(ba,message); int ichk=0; - int itype=-1; - genft4_(message, &ichk, msgsent, const_cast(itone), &itype, 37, 37); + genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); msgsent[37]=0; m_currentMessage = QString::fromLatin1(msgsent).trimmed(); tx_status_label.setStyleSheet("QLabel{background-color: #ffff33}"); From 6d6e2e83147e9f783b76be0208e460aa35b9d234 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 11:49:11 -0500 Subject: [PATCH 056/367] Don't try to transmit a blank FT4 message! --- widgets/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 10149dce9..3a6c8b75c 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8696,6 +8696,8 @@ void MainWindow::ft4_tx(int ntx) if(m_ntx == 4) ba=ui->tx4->text().toLocal8Bit(); if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); + QString msg = QString::fromLatin1(ba.data()); + if(msg.trimmed().length()==0) return; //Don't transmit a blank message ba2msg(ba,message); int ichk=0; genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); From 65398bbffa7d0c52a0677f017ed0c14e8945f60d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 12:12:54 -0500 Subject: [PATCH 057/367] Fix the UTC display on waterfall, for FT4 mode. --- widgets/plotter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 813e2bc31..60f0892c3 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -235,13 +235,15 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) if(m_bReplot) return; if(swide[0]>1.0e29) m_line=0; + if(m_mode=="FT4" and m_line==34) m_line=0; if(m_line == painter1.fontMetrics ().height ()) { painter1.setPen(Qt::white); QString t; qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; int n=(ms/1000) % m_TRperiod; + if(m_mode=="FT4") n=0; QDateTime t1=QDateTime::currentDateTimeUtc().addSecs(-n); - if(m_TRperiod < 60) { + if(m_TRperiod < 60 or m_mode=="FT4") { t=t1.toString("hh:mm:ss") + " " + m_rxBand; } else { t=t1.toString("hh:mm") + " " + m_rxBand; From 3ab7c1edf6dae72464ca951d3dfe0b0abc78214c Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 13:19:36 -0500 Subject: [PATCH 058/367] Don't logQSO or transmit in response to a decode from disk. --- widgets/mainwindow.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 3a6c8b75c..1736589ec 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4763,7 +4763,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie return; } if(m_mode=="FT4" and ui->cbAutoSeq->isChecked()) { - if(m_ntx==4 or m_ntx==5) logQSOTimer.start(0); // Log the QSO + if((m_ntx==4 or m_ntx==5) and !m_diskData) logQSOTimer.start(0); // Log the QSO if((m_ntx==3 and ui->cbFirst->isChecked()) or m_ntx==4 or m_bDoubleClicked) { ft4_tx(m_ntx); } @@ -8697,7 +8697,8 @@ void MainWindow::ft4_tx(int ntx) if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); QString msg = QString::fromLatin1(ba.data()); - if(msg.trimmed().length()==0) return; //Don't transmit a blank message + if(msg.trimmed().length()==0) return; //Don't transmit a blank message, or ... + if(m_diskData) return; //... in response to a decode from disk ba2msg(ba,message); int ichk=0; genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); From 0a6d67c1d66ac1d085784aedab558c59ff3deb63 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 13:55:04 -0500 Subject: [PATCH 059/367] Make the simulated data files slightly longer so that WSJT-X can decode them. --- lib/ft4/ft4sim.f90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 31a4f57d9..494b35a6e 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -144,11 +144,13 @@ program ft4sim endif if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." iwave=nint(wave) - h=default_header(12000,NMAX) + h=default_header(12000,NMAX+2208) write(fname,1102) ifile 1102 format('000000_',i6.6,'.wav') open(10,file=fname,status='unknown',access='stream') write(10) h,iwave !Save to *.wav file + iwave(1:2208)=0 + write(10) iwave(1:2208) !Add 0.5 s of zeroes close(10) write(*,1110) ifile,xdt,f0,snrdb,fname 1110 format(i4,f7.2,f8.2,f7.1,2x,a17) From 7e3b153d8b8c91c4330c3ec4eac4a8752eefdb77 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 13:56:04 -0500 Subject: [PATCH 060/367] Correct the estimate of SNR for FT4 signals. --- lib/ft4/ft4_decode.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 790553bd1..0c2630438 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -74,7 +74,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ndecodes=0 do icand=1,ncand f0=candidate(1,icand) - xsnr=10*log10(candidate(3,icand))-15.0 + xsnr=10*log10(candidate(3,icand))-18.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol sum2=sum(cd2*conjg(cd2))/(20.0*76) From e11acde9fb6f1e719324de3c79e4f5248b15e6ec Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 14:19:22 -0500 Subject: [PATCH 061/367] Better handling of calls to ft4_decode(), depending on ring-buffer pointer. --- widgets/mainwindow.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 1736589ec..4b07b2017 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8609,10 +8609,13 @@ void MainWindow::write_all(QString txRx, QString message) void MainWindow::ft4Data(int k) { static int nhsec0=-1; + static bool wrapped=false; short id[60000]; int nhsec=k/6000; + if(nhsec0>nhsec) nhsec0=-1; if(nhsec==nhsec0) return; + if(k<60000 and !wrapped) return; //Process FT4 data at 0.5 s intervals int j=k/6000; @@ -8621,8 +8624,12 @@ void MainWindow::ft4Data(int k) for(int i=0; i<60000; i++) { id[i]=dec_data.d2[j]; j++; - if(j>=NRING) j=j-NRING; + if(j>=NRING) { + j=j-NRING; + wrapped=true; + } } + if(j>60000) wrapped=false; if(k>=NRING) { if(m_saveAll) save_FT4(); From a7ded943136cfb41c9f38dabc054e458a12e1daa Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 29 Jan 2019 15:24:08 -0500 Subject: [PATCH 062/367] Saved FT4 files must be at least 5 s long; Shift+F6 now works for FT4 files. --- widgets/mainwindow.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 4b07b2017..b6004ca9c 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8687,6 +8687,11 @@ void MainWindow::ft4Data(int k) //### } nhsec0=nhsec; + if(m_diskData and (k > (dec_data.params.kin-6000))) m_startAnother=m_loopall; + if(m_bNoMoreFiles) { + MessageBox::information_message(this, tr("Just one more file to open.")); + m_bNoMoreFiles=false; + } } void MainWindow::ft4_tx(int ntx) @@ -8764,14 +8769,14 @@ void MainWindow::FT4_writeTx() void MainWindow::save_FT4() { + int nsec=(dec_data.params.kin + 3456)/12000; + if(nsec<5) return; //Saved data must be at least 5 seconds long. auto time = QDateTime::currentDateTimeUtc (); QString t=time.toString("yyMMdd_hhmmss"); m_fnameWE=m_config.save_directory().absoluteFilePath(t); - int nsec=(dec_data.params.kin + 3456)/12000; // The following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, this, m_fnameWE, &dec_data.d2[0], nsec, m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); -// qDebug() << "aa" << m_fnameWE << nsec; } From e57df307ddd68e80bd05d92dcd6b7cdd772280ba Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 29 Jan 2019 15:42:30 -0600 Subject: [PATCH 063/367] Fix a comment. --- lib/ft4/ft4_decode.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 0c2630438..95f725829 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -76,7 +76,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) f0=candidate(1,icand) xsnr=10*log10(candidate(3,icand))-18.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol + call ft4_downsample(iwave,f0,cd2) ! downsample from 512 Sa/Symbol to 32 Sa/Symbol sum2=sum(cd2*conjg(cd2))/(20.0*76) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) From 2888c05eff37cabc248e8de0fa3c902346f6c7ce Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 30 Jan 2019 11:20:29 -0500 Subject: [PATCH 064/367] Code cleanup. --- lib/ft4/genft4.f90 | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/ft4/genft4.f90 b/lib/ft4/genft4.f90 index 1fc406194..668be5166 100644 --- a/lib/ft4/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -1,6 +1,5 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) -! s16 + 87symbols + 2 ramp up/down = 105 channel symbols 4.48s message duration -! s4+58symb+s4+58symb+s4+58sym+s4 + ! Encode an FT4 message ! Input: ! - msg0 requested message to be transmitted @@ -8,7 +7,13 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) ! - msgsent message as it will be decoded ! - i4tone array of audio tone values, {0,1,2,3} -! use iso_c_binding, only: c_loc,c_size_t +! Frame structure: +! s16 + 87symbols + 2 ramp up/down = 105 total channel symbols +! r1 + s4 + d29 + s4 + d29 + s4 + d29 + s4 + r1 + +! Message duration: TxT = 105*512/12000 = 4.48 s + +! use iso_c_binding, only: c_loc,c_size_t use packjt77 include 'ft4_params.f90' @@ -20,9 +25,8 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) integer*1 codeword(2*ND) integer*1 msgbits(77) integer icos4(4) - data icos4/0,1,3,2/ - logical unpk77_success + data icos4/0,1,3,2/ message=msg0 @@ -60,12 +64,13 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) if(is.eq.3) itmp(i)=2 enddo - i4tone(1:4)=icos4 - i4tone(5:33)=itmp(1:29) - i4tone(34:37)=icos4 - i4tone(38:66)=itmp(30:58) - i4tone(67:70)=icos4 - i4tone(71:99)=itmp(59:87) - i4tone(100:103)=icos4 + i4tone(1:4)=icos4 + i4tone(5:33)=itmp(1:29) + i4tone(34:37)=icos4 + i4tone(38:66)=itmp(30:58) + i4tone(67:70)=icos4 + i4tone(71:99)=itmp(59:87) + i4tone(100:103)=icos4 + 999 return end subroutine genft4 From 3f7fb38e8123f708c2e916bdbf90dcb040dbf58e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 30 Jan 2019 12:22:41 -0500 Subject: [PATCH 065/367] More code cleanup -- just comments and formatting. --- lib/ft4/ft4_decode.f90 | 64 ++++++++++++++++++++++-------------------- lib/ft4/ft4_params.f90 | 8 ++++-- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 95f725829..f8515ac56 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -3,6 +3,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) use packjt77 include 'ft4_params.f90' parameter (NSS=NSPS/NDOWN) + character message*37 character c77*77 character*61 line @@ -13,7 +14,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) complex cd2(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) - complex cd(0:NN*NSS-1) !Complex waveform + complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(4*NSS),ctwk2(4*NSS) complex csymb(NSS) complex cs(0:3,NN) @@ -26,6 +27,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) real s2(0:255) real candidate(3,100) real savg(NH1),sbase(NH1) + integer icos4(0:3) integer*2 iwave(NMAX) !Generated full-length waveform integer*1 message77(77),apmask(2*ND),cw(2*ND) @@ -35,16 +37,17 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) logical unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first + data icos4/0,1,3,2/ data graymap/0,1,3,2/ data first/.true./ - save one + save one,first hhmmss=cdatetime0(8:13) - fs=12000.0/NDOWN !Sample rate - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - txt=NZ*dt !Transmission length (s) + fs=12000.0/NDOWN !Sample rate after downsampling + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + txt=NZ*dt !Transmission length (s) without ramp up/down twopi=8.0*atan(1.0) h=1.0 @@ -58,30 +61,29 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) first=.false. endif - data_dir="." - fMHz=7.074 - candidate=0.0 ncand=0 - - fa=400.0 - fb=3000.0 syncmin=1.2 maxcand=100 -! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase) - call getcandidates4(iwave,fa,fb,syncmin,nfqso,100,savg,candidate,ncand,sbase) +! These are temporary. Correct values should be passed in as arguments. + data_dir="." + fMHz=7.074 + fa=400.0 + fb=3000.0 + + call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & + ncand,sbase) + ndecodes=0 do icand=1,ncand f0=candidate(1,icand) xsnr=10*log10(candidate(3,icand))-18.0 - if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call ft4_downsample(iwave,f0,cd2) ! downsample from 512 Sa/Symbol to 32 Sa/Symbol + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle !### TBD? ### + call ft4_downsample(iwave,f0,cd2) !Downsample to 32 Samples/Symbol sum2=sum(cd2*conjg(cd2))/(20.0*76) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) - -! 750 samples/second here - +! Sample rate is now 12000/16 = 750 samples/second do isync=1,2 if(isync.eq.1) then idfmin=-50 @@ -107,7 +109,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ctwk=1. call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2,1,sync) + call sync4d(cd2,istart,ctwk2,1,sync) !Find sync power if(sync.gt.smax) then smax=sync ibest=istart @@ -118,7 +120,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) enddo f0=f0+real(idfbest) - call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol + call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) cd=cb(ibest:ibest+NN*NSS-1) @@ -130,7 +132,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) s4(0:3,k)=abs(csymb(1:4)) enddo -! sync quality check +! Sync quality check is1=0 is2=0 is3=0 @@ -145,10 +147,9 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ip=maxloc(s4(:,k+99)) if(icos4(k-1).eq.(ip(1)-1)) is4=is4+1 enddo -! hard sync sum - max is 16 - nsync=is1+is2+is3+is4 + nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 - do nseq=1,3 + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 if(nseq.eq.3) nsym=4 @@ -233,7 +234,8 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) llr2=llr if(ibias.eq.1) llr2=llr+0.4 if(ibias.eq.2) llr2=llr-0.4 - call bpdecode174_91(llr2,apmask,max_iterations,message77,cw,nharderror,niterations) + call bpdecode174_91(llr2,apmask,max_iterations,message77, & + cw,nharderror,niterations) if(nharderror.ge.0) exit enddo if(sum(message77).eq.0) cycle @@ -256,11 +258,12 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) write(24,1002) cdatetime0,nsnr,ibest/750.0,nint(freq),message, & nharderror,nsync_qual,isd,niterations if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & - ibest/750.0,nint(freq),message,nharderror,nsync_qual,isd,niterations + ibest/750.0,nint(freq),message,nharderror,nsync_qual,isd, & + niterations 1002 format(a17,i4,f6.2,i5,' Rx ',a37,4i5) close(24) -!### Temporary: assume most recent decoded message conveys "hiscall". +!### Temporary: assume most recent decoded message conveys "hiscall". ### i0=index(message,' ') if(i0.ge.3 .and. i0.le.7) then hiscall=message(i0+1:i0+6) @@ -279,8 +282,8 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) exit endif - enddo ! sequence estimation - enddo !candidate list + enddo !Sequence estimation + enddo !Candidate list return end subroutine ft4_decode @@ -317,6 +320,7 @@ subroutine ft4_downsample(iwave,f0,c) c1=c1/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain c=c1(0:NMAX/NDOWN-1) + return end subroutine ft4_downsample diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 5acd63e59..4a14e7c95 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -1,12 +1,14 @@ ! FT4 -! LDPC (174,91) code +! LDPC(174,91) code, four 4x4 Costas arrays for Sync parameter (KK=91) !Information bits (77 + CRC14) parameter (ND=87) !Data symbols parameter (NS=16) !Sync symbols -parameter (NN=NS+ND) !Total channel symbols (103) +parameter (NN=NS+ND) !Sync and data symbols (103) +parameter (NN2=NS+ND+2) !Total channel symbols (105) parameter (NSPS=512) !Samples per symbol at 12000 S/s -parameter (NZ=NSPS*NN) !Samples in full 4.395 s message frame (52736) +parameter (NZ=NSPS*NN) !Sync and Data samples (52736) +parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) parameter (NMAX=5.0*12000) !Samples in iwave (60,000) parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS/4) !Coarse time-sync step size From 66bb999126e00874a7b300735b2aef631386a099 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 30 Jan 2019 12:47:01 -0600 Subject: [PATCH 066/367] Improve ft4_downsample filter. Improve getcandidates4. --- lib/ft4/ft4_decode.f90 | 40 +++++++++++++++++++++++++------------- lib/ft4/getcandidates4.f90 | 17 +++++++++++++--- lib/ft4/sync4d.f90 | 5 +++-- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 95f725829..73f258ce0 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -77,7 +77,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) xsnr=10*log10(candidate(3,icand))-18.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call ft4_downsample(iwave,f0,cd2) ! downsample from 512 Sa/Symbol to 32 Sa/Symbol - sum2=sum(cd2*conjg(cd2))/(20.0*76) + sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! 750 samples/second here @@ -148,6 +148,8 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ! hard sync sum - max is 16 nsync=is1+is2+is3+is4 + if(smax .lt. 0.9 .or. nsync .lt. 9) cycle + do nseq=1,3 if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 @@ -205,9 +207,7 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) ns4=count(hbits(199:206).eq.(/0,0,0,1,1,0,1,1/)) nsync_qual=ns1+ns2+ns3+ns4 - if(nsync.lt.8 .or. nsync_qual.lt. 20) then - cycle - endif + if(nsync_qual.lt. 20) cycle scalefac=2.83 llra( 1: 58)=bmeta( 9: 66) @@ -296,25 +296,39 @@ subroutine ft4_downsample(iwave,f0,c) complex c(0:NMAX/NDOWN-1) complex c1(0:NFFT2-1) complex cx(0:NMAX/2) - real x(NMAX) + real x(NMAX), window(0:NFFT2-1) equivalence (x,cx) + logical first + data first/.true./ + save first,window -!****** Tune this - bw=250.0 df=12000.0/NMAX + baud=12000.0/NSPS + if(first) then + bw_transition = 0.5*baud + bw_flat = 4*baud + iwt = bw_transition / df + iwf = bw_flat / df + pi=4.0*atan(1.0) + window(0:iwt-1) = 0.5*(1+cos(pi*(/(i,i=iwt-1,0,-1)/)/iwt)) + window(iwt:iwt+iwf-1)=1.0 + window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt)/)/iwt)) + window(2*iwt+iwf:)=0.0 + iws = baud / df + window=cshift(window,iws) + first=.false. + endif + x=iwave call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain - ibw=nint(bw/df) i0=nint(f0/df) c1=0. c1(0)=cx(i0) do i=1,NFFT2/2 - arg=(i-1)*df/bw - win=exp(-arg*arg) - if(i0+i.le.NMAX/2) c1(i)=cx(i0+i)*win - if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i)*win + if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) + if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) enddo - c1=c1/NFFT2 + c1=c1*window/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain c=c1(0:NMAX/NDOWN-1) return diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 276625942..436ce59d1 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -6,12 +6,23 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & real savg(NH1),savsm(NH1) real sbase(NH1) real x(NFFT1) + real window(NFFT1) complex cx(0:NH1) real candidate(3,maxcand) integer*2 id(NMAX) integer indx(NH1) integer ipk(1) equivalence (x,cx) + logical first + data first/.true./ + save first,window + + if(first) then + first=.false. + pi=4.0*atan(1.) + window=0.5*(1-cos(pi*(/(i,i=1,NFFT1)/)/(NFFT1/2.0))) + window=window**2 + endif ! Compute symbol spectra, stepping by NSTEP steps. savg=0. @@ -20,9 +31,9 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & fac=1.0/300.0 do j=1,NHSYM ia=(j-1)*NSTEP + 1 - ib=ia+NSPS-1 - x(1:NSPS)=fac*id(ia:ib) - x(NSPS+1:)=0. + ib=ia+NFFT1-1 + if(ib.gt.NMAX) exit + x=fac*id(ia:ib)*window call four2a(x,NFFT1,1,-1,0) !r2c FFT do i=1,NH1 s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index 5623dba8c..e0f87cb8e 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -13,9 +13,9 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) integer icos4(0:3) data icos4/0,1,3,2/ data first/.true./ - save first,twopi,csync + save first,twopi,csync,fac - p(z1)=real(z1)**2 + aimag(z1)**2 !Statement function for power + p(z1)=real(z1*fac)**2 + aimag(z1*fac)**2 !Statement function for power if( first ) then twopi=8.0*atan(1.0) @@ -30,6 +30,7 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) enddo enddo first=.false. + fac=1.0/(4.0*NSS) endif sync=0 From 189f538dc08bdb3a9a405e802c6ef8cb62bc3d03 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 30 Jan 2019 15:33:47 -0500 Subject: [PATCH 067/367] Add ft4sim_mult, which is basically functional. --- CMakeLists.txt | 4 + lib/ft4/ft4_params.f90 | 2 +- lib/ft4/ft4sim_mult.f90 | 129 ++++++++++++++++++++++++++++++++ lib/ft4/messages.txt | 162 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 lib/ft4/ft4sim_mult.f90 create mode 100644 lib/ft4/messages.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 24371c0ab..184788c8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -509,6 +509,7 @@ set (wsjt_FSRCS lib/msk144sim.f90 lib/mskrtd.f90 lib/ft4/ft4sim.f90 + lib/ft4/ft4sim_mult.f90 lib/ft4/ft4d.f90 lib/ft4/ft4_decode.f90 lib/77bit/my_hash.f90 @@ -1268,6 +1269,9 @@ target_link_libraries (msk144sim wsjt_fort wsjt_cxx) add_executable (ft4sim lib/ft4/ft4sim.f90 wsjtx.rc) target_link_libraries (ft4sim wsjt_fort wsjt_cxx) +add_executable (ft4sim_mult lib/ft4/ft4sim_mult.f90 wsjtx.rc) +target_link_libraries (ft4sim_mult wsjt_fort wsjt_cxx) + add_executable (ft4d lib/ft4/ft4d.f90 wsjtx.rc) target_link_libraries (ft4d wsjt_fort wsjt_cxx) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 4a14e7c95..bcc7f7404 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -9,7 +9,7 @@ parameter (NN2=NS+ND+2) !Total channel symbols (105) parameter (NSPS=512) !Samples per symbol at 12000 S/s parameter (NZ=NSPS*NN) !Sync and Data samples (52736) parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) -parameter (NMAX=5.0*12000) !Samples in iwave (60,000) +parameter (NMAX=5*12000) !Samples in iwave (60,000) parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS/4) !Coarse time-sync step size parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 new file mode 100644 index 000000000..bb17a860d --- /dev/null +++ b/lib/ft4/ft4sim_mult.f90 @@ -0,0 +1,129 @@ +program ft4sim_mult + +! Generate simulated signals for experimental "FT4" mode + + use wavhdr + use packjt77 + include 'ft4_params.f90' !FT4 protocol constants + parameter (NWAVE=NN*NSPS) + parameter (NZZ=15*12000) !Length of .wav file, 180,000 i*2 samples + type(hdr) h !Header for .wav file + character arg*12,fname*17,cjunk*4 + character msg37*37,msgsent37*37,c77*77 + real wave(NZZ) + real tmp(NZZ) + real dphi(0:NMAX-1) + real pulse(3*NSPS) + integer itone(NN) + integer*2 iwave(NZZ) !Generated full-length waveform + integer icos4(4) + data icos4/0,1,3,2/ + +! Get command-line argument(s) + nargs=iargc() + if(nargs.ne.2) then + print*,'Usage: ft4sim nsigs nfiles' + print*,'Example: ft4sim 20 8 ' + go to 999 + endif + call getarg(1,arg) + read(arg,*) nsigs !Number of signals + call getarg(2,arg) + read(arg,*) nfiles !Number of files + + twopi=8.0*atan(1.0) + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) + tt=NSPS*dt !Duration of unsmoothed symbols (s) + baud=1.0/tt !Keying rate (baud) + txt=NZ*dt !Transmission length (s) without ramp up/down + bandwidth_ratio=2500.0/(fs/2.0) + txt=NN*NSPS/12000.0 + xdtmax=10.0 - 0.086 + +! Compute the filtered frequency pulse + do i=1,3*NSPS + tt=(i-1.5*NSPS)/real(NSPS) + pulse(i)=gfsk_pulse(1.0,tt) + enddo + open(10,file='messages.txt',status='old',err=998) + + do ifile=1,nfiles +1 read(10,1001,end=999) cjunk,n +1001 format(a4,i2) + if(cjunk.ne.'File' .or. n.ne.ifile) go to 1 + wave=0. + write(fname,1002) ifile +1002 format('000000_',i6.6,'.wav') + + do isig=1,nsigs + read(10,1003,end=100) cjunk,isnr,xdt0,ifreq,msg37 +1003 format(a4,30x,i3,f5.1,i5,1x,a37) + if(cjunk.eq.'File') go to 100 + if(isnr.lt.-16) isnr=-16 + f0=ifreq*93.75/50.0 + call random_number(r) + xdt=r*xdtmax +! Source-encode, then get itone() + i3=-1 + n3=-1 + call pack77(msg37,i3,n3,c77) + call genft4(msg37,0,msgsent37,itone) + +! Compute the smoothed frequency waveform + dphi_peak=twopi*hmod/real(NSPS) + dphi=0.0 + do j=1,NN + ib=(j-1)*NSPS + ie=ib+3*NSPS-1 + dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*itone(j) + enddo + +! Calculate and insert the audio waveform + phi=0.0 + dphi=dphi+twopi*f0*dt + tmp=0. + k0=nint((xdt+0.043)/dt) + k=k0-1 + do j=0,NMAX-1 + k=k+1 + tmp(k)=sin(phi) + phi=mod(phi+dphi(j),twopi) + enddo + k1=k + +! Compute the ramp-up and ramp-down symbols + tmp(k0-NSPS:k0-1)=tmp(k0-NSPS:k0-1) * & + (1.0-cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)))/2.0 + tmp(k1+1:k1+NSPS)=tmp(k1+1:k1+NSPS) * & + (1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)))/2.0 + + ! Insert this signal into wave() array + sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*isnr) + wave=wave + sig*tmp + write(*,1100) fname,isig,isnr,nint(f0),msg37 +1100 format(a17,i4,i5,i6,2x,a37) + enddo ! isig + +100 backspace 10 + do i=1,NMAX !Add gaussian noise at specified SNR + xnoise=gran() + wave(i)=wave(i) + xnoise + enddo + + gain=30.0 + wave=gain*wave + if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." + iwave=nint(wave) + h=default_header(12000,NZZ) + open(12,file=fname,status='unknown',access='stream') + write(12) h,iwave !Save to *.wav file + close(12) + print*,' ' + enddo ! ifile + go to 999 + +998 print*,'Cannot open file "messages.txt"' + +999 end program ft4sim_mult diff --git a/lib/ft4/messages.txt b/lib/ft4/messages.txt new file mode 100644 index 000000000..16329fceb --- /dev/null +++ b/lib/ft4/messages.txt @@ -0,0 +1,162 @@ +File 1 +190106_000015 7.080 Rx FT8 -15 0.2 178 N1TRK N4FKH 569 VA +190106_000015 7.080 Rx FT8 -13 -0.1 253 N1TRK KB7RUQ 539 UT +190106_000015 7.080 Rx FT8 10 0.2 389 W0ZF N3LFC RR73 +190106_000015 7.080 Rx FT8 -10 0.1 450 PY4AZ KF7YED 559 MT +190106_000015 7.080 Rx FT8 -3 0.2 507 N1TRK WA4DYD 559 GA +190106_000015 7.080 Rx FT8 14 0.2 689 KB0VHA KA1YQC R 539 MA +190106_000015 7.080 Rx FT8 -5 0.1 984 W9JA N9OY RR73 +190106_000015 7.080 Rx FT8 -12 0.1 1123 VA2CZ K8GNG RR73 +190106_000015 7.080 Rx FT8 2 0.1 1240 CQ RU K7RL CN88 +190106_000015 7.080 Rx FT8 -11 0.5 1293 K4ZMW K7VZ RR73 +190106_000015 7.080 Rx FT8 2 0.1 1387 WD9IGY KX1X 73 +190106_000015 7.080 Rx FT8 -10 0.1 1536 CQ RU W0FRC DM79 +190106_000015 7.080 Rx FT8 -2 0.1 1635 K4SQC VE3RX 549 ON +190106_000030 7.080 Rx FT8 -11 0.2 1745 CQ RU K1LOG FN56 +190106_000030 7.080 Rx FT8 3 0.8 1798 WD5DAX WS4WW 73 +190106_000030 7.080 Rx FT8 12 0.1 1895 DJ6GI KG4W 73 +190106_000030 7.080 Rx FT8 -14 0.2 2119 KF7YED KF5ZNQ 549 TX +190106_000030 7.080 Rx FT8 -5 0.1 336 CQ RU AB5XS EM12 +190106_000030 7.080 Rx FT8 0 0.0 1415 W3KIT AA8SW RR73 +190106_000030 7.080 Rx FT8 -13 0.3 1540 NI6G W7DRW 579 AZ +190106_000030 7.080 Rx FT8 -10 0.1 312 SHIFT W9JA +190106_000030 7.080 Rx FT8 -16 0.1 1447 W7BOB KJ7G 549 WA +File 2 +190106_000045 7.080 Rx FT8 -9 0.1 178 N1TRK N4FKH 569 VA +190106_000045 7.080 Rx FT8 -9 -0.1 253 N1TRK KB7RUQ RR73 +190106_000045 7.080 Rx FT8 -8 0.1 336 CQ RU AB5XS EM12 +190106_000045 7.080 Rx FT8 16 0.3 689 KB0VHA KA1YQC R 539 MA +190106_000045 7.080 Rx FT8 -3 0.1 984 CQ RU N9OY EN43 +190106_000045 7.080 Rx FT8 -10 0.1 1146 K1JT WB4HXE 559 GA +190106_000045 7.080 Rx FT8 6 0.1 1240 VE3LON K7RL R 549 WA +190106_000045 7.080 Rx FT8 -1 0.1 1386 WD9IGY KX1X 73 +190106_000045 7.080 Rx FT8 -12 0.1 1536 CQ RU W0FRC DM79 +190106_000045 7.080 Rx FT8 3 0.1 1635 K4SQC VE3RX RR73 +190106_000045 7.080 Rx FT8 -5 0.1 1688 CQ RU W1QA FN32 +190106_000045 7.080 Rx FT8 1 0.8 1797 CQ RU WS4WW FM17 +190106_000045 7.080 Rx FT8 14 0.1 1895 HB9BUN KG4W R 549 VA +190106_000100 7.080 Rx FT8 -7 0.1 2002 W9TO KN3ILZ 529 PA +190106_000100 7.080 Rx FT8 -9 0.1 312 W9JA PY2APK RRR +190106_000100 7.080 Rx FT8 -12 0.1 436 NZ7P WA7JAY 589 CA +190106_000100 7.080 Rx FT8 -13 -0.1 1380 AC6BW KR9A R 559 WI +190106_000100 7.080 Rx FT8 -17 0.1 1448 W7BOB KJ7G RR73 +190106_000100 7.080 Rx FT8 -7 0.3 1540 NI6G W7DRW 569 AZ +File 3 +190106_000115 7.080 Rx FT8 -13 0.2 178 N1TRK N4FKH 569 VA +190106_000115 7.080 Rx FT8 -14 -0.1 253 N1TRK KB7RUQ RR73 +190106_000115 7.080 Rx FT8 -5 0.1 336 CQ RU AB5XS EM12 +190106_000115 7.080 Rx FT8 -7 0.1 449 NI6G KF7YED 569 MT +190106_000115 7.080 Rx FT8 14 0.2 689 KB0VHA KA1YQC 73 +190106_000115 7.080 Rx FT8 11 0.4 852 W9TO N4QWF 569 VA +190106_000115 7.080 Rx FT8 -3 0.1 984 W4EMB N9OY R 529 WI +190106_000115 7.080 Rx FT8 -14 0.1 1117 WB4FAY K7PDW 549 UT +190106_000115 7.080 Rx FT8 3 0.2 1240 VE3LON K7RL R 559 WA +190106_000115 7.080 Rx FT8 -18 0.1 1380 AC6BW KR9A R 559 WI +190106_000115 7.080 Rx FT8 4 0.1 1475 K4KCL KB4S 559 VA +190106_000130 7.080 Rx FT8 -5 0.1 1612 K1JT WB4HXE RR73 +190106_000115 7.080 Rx FT8 -1 0.1 1688 KW4RTR W1QA R 539 MA +190106_000115 7.080 Rx FT8 -15 0.2 1745 CQ RU K1LOG FN56 +190106_000115 7.080 Rx FT8 3 0.8 1798 WA1T WS4WW R 579 VA +190106_000115 7.080 Rx FT8 14 0.1 1895 HB9BUN KG4W R 549 VA +190106_000115 7.080 Rx FT8 -9 0.2 2125 CQ RU NF3R FN20 +190106_000130 7.080 Rx FT8 -8 0.4 976 AG1T K7VZ 569 AZ +190106_000130 7.080 Rx FT8 -7 0.1 1434 Z36W N4KMC 529 FL +File 4 +190106_000145 7.080 Rx FT8 -8 0.1 335 CQ RU AB5XS EM12 +190106_000145 7.080 Rx FT8 -11 0.2 388 W0ZF WW4LL 559 ME +190106_000145 7.080 Rx FT8 -10 0.1 449 NI6G KF7YED 569 MT +190106_000145 7.080 Rx FT8 10 0.3 689 CQ RU KA1YQC FN42 +190106_000145 7.080 Rx FT8 12 0.4 852 W9TO N4QWF RR73 +190106_000145 7.080 Rx FT8 -2 0.1 984 W4EMB N9OY R 529 WI +190106_000145 7.080 Rx FT8 -12 0.1 1117 WB4FAY K7PDW 549 UT +190106_000145 7.080 Rx FT8 4 0.2 1240 VE3LON K7RL 73 +190106_000145 7.080 Rx FT8 -13 0.1 1348 WW5M KO9V 559 NC +190106_000145 7.080 Rx FT8 -14 0.1 1380 AC6BW KR9A R 559 WI +190106_000145 7.080 Rx FT8 2 0.1 1475 K4KCL KB4S RR73 +190106_000145 7.080 Rx FT8 -9 0.1 1536 KC1HTT W0FRC 73 +190106_000145 7.080 Rx FT8 1 0.1 1688 KW4RTR W1QA R 539 MA +190106_000200 7.080 Rx FT8 1 0.8 1797 WA1T WS4WW R 569 VA +190106_000200 7.080 Rx FT8 15 0.1 1895 CQ RU KG4W FM17 +190106_000200 7.080 Rx FT8 -6 0.2 2125 CQ RU NF3R FN20 +190106_000200 7.080 Rx FT8 -7 0.1 311 PD8DX PY2APK 539 0081 +190106_000200 7.080 Rx FT8 -3 0.5 976 AG1T K7VZ RR73 +190106_000200 7.080 Rx FT8 -5 0.1 1432 Z36W N4KMC 529 FL +190106_000200 7.080 Rx FT8 -7 0.3 1540 N7BT W7DRW 559 AZ +190106_000200 7.080 Rx FT8 -16 0.3 2124 N3KCR ON9COP 529 0053 +190106_000200 7.080 Rx FT8 -12 0.1 1448 K2DH KJ7G 549 WA +File 5 +190106_000215 7.080 Rx FT8 11 0.1 435 K1JT WV8WA 569 WV +190106_000215 7.080 Rx FT8 -4 0.1 335 CQ RU AB5XS EM12 +190106_000215 7.080 Rx FT8 10 0.5 689 CQ RU KA1YQC FN42 +190106_000215 7.080 Rx FT8 -10 0.1 843 CQ RU AE5JH EL07 +190106_000215 7.080 Rx FT8 -3 0.1 984 W4EMB N9OY R 529 WI +190106_000215 7.080 Rx FT8 -10 0.1 1118 WB4FAY W5MO 539 TX +190106_000215 7.080 Rx FT8 -16 0.1 1170 K1JT K8GNG 569 MI +190106_000215 7.080 Rx FT8 6 0.1 1240 CQ RU K7RL CN88 +190106_000215 7.080 Rx FT8 -8 0.1 1348 WW5M KO9V RR73 +190106_000215 7.080 Rx FT8 -12 0.1 1432 Z36W N4KMC 529 FL +190106_000215 7.080 Rx FT8 2 0.1 1490 KA6BIM KB4S 529 VA +190106_000230 7.080 Rx FT8 -1 0.1 1688 CQ RU W1QA FN32 +190106_000230 7.080 Rx FT8 15 0.1 1895 DD5ZZ KG4W R 539 VA +190106_000230 7.080 Rx FT8 -8 0.2 2125 CQ RU NF3R FN20 +190106_000230 7.080 Rx FT8 -13 0.1 1380 AC6BW KR9A R 559 WI +190106_000230 7.080 Rx FT8 -4 0.1 1536 CQ RU W0FRC DM79 +190106_000230 7.080 Rx FT8 -8 0.3 1540 N7BT W7DRW 559 AZ +File 6 +190106_000245 7.080 Rx FT8 6 0.1 635 K1JT WV8WA RR73 +190106_000245 7.080 Rx FT8 -12 0.1 335 VE3RX AB5XS R 589 TX +190106_000245 7.080 Rx FT8 -16 0.1 423 WA1T PY2APK 529 0081 +190106_000245 7.080 Rx FT8 9 0.4 507 N1TRK N4QWF RR73 +190106_000245 7.080 Rx FT8 -10 0.1 869 W7BOB W3KIT 539 MD +190106_000245 7.080 Rx FT8 -7 0.1 984 W4EMB N9OY R 529 WI +190106_000245 7.080 Rx FT8 -13 0.1 1170 K1JT K8GNG 569 MI +190106_000245 7.080 Rx FT8 5 0.1 1240 W6GMT K7RL R 569 WA +190106_000245 7.080 Rx FT8 2 0.1 1490 KA6BIM KB4S 529 VA +190106_000245 7.080 Rx FT8 -1 0.1 1688 CQ RU W1QA FN32 +190106_000245 7.080 Rx FT8 1 0.7 1798 N3KCR WS4WW R 599 VA +190106_000245 7.080 Rx FT8 17 0.1 1895 DD5ZZ KG4W 73 +190106_000300 7.080 Rx FT8 -10 0.2 2125 CQ RU NF3R FN20 +190106_000300 7.080 Rx FT8 8 0.1 546 W7BOB W4DHE 539 KY +190106_000300 7.080 Rx FT8 -9 0.2 844 CQ RU AE5JH EL07 +190106_000300 7.080 Rx FT8 -5 0.1 1536 W9WLX W0FRC R 549 CO +File 7 +190106_000315 7.080 Rx FT8 -5 0.1 335 VE3RX AB5XS 73 +190106_000315 7.080 Rx FT8 -13 0.1 424 WA1T PY2APK 529 0081 +190106_000315 7.080 Rx FT8 6 0.1 545 W7BOB W4DHE 539 KY +190106_000315 7.080 Rx FT8 -7 0.4 600 K2DH K7VZ 549 AZ +190106_000315 7.080 Rx FT8 9 0.1 689 VE3LON KA1YQC 73 +190106_000315 7.080 Rx FT8 -8 0.1 869 W7BOB W3KIT 539 MD +190106_000315 7.080 Rx FT8 -1 0.1 984 W4EMB N9OY R 529 WI +190106_000315 7.080 Rx FT8 -15 -0.1 1117 WB4FAY KB7RUQ 529 UT +190106_000315 7.080 Rx FT8 7 -0.2 1240 W6GMT K7RL 73 +190106_000315 7.080 Rx FT8 -5 0.2 1581 VA3WW WA4DYD 559 GA +190106_000315 7.080 Rx FT8 -8 0.1 1688 DD5ZZ W1QA R 569 MA +190106_000315 7.080 Rx FT8 4 0.7 1798 N3KCR WS4WW 73 +190106_000315 7.080 Rx FT8 16 0.1 1895 CQ RU KG4W FM17 +190106_000315 7.080 Rx FT8 -11 0.2 2125 CQ RU NF3R FN20 +190106_000330 7.080 Rx FT8 -8 0.1 1170 K1JT K8GNG RR73 +190106_000330 7.080 Rx FT8 -13 -0.1 454 NZ7P KM7S R 549 CA +190106_000330 7.080 Rx FT8 1 0.1 941 KW4RTR KO9V 559 NC +190106_000330 7.080 Rx FT8 -16 0.3 1034 W9JA W9OY 539 FL +190106_000330 7.080 Rx FT8 -2 0.1 1240 K2DH KD2GXL 559 NY +190106_000330 7.080 Rx FT8 -5 0.1 1536 W9WLX W0FRC 73 +190106_000330 7.080 Rx FT8 -2 -0.1 918 KF6JXM W5BT 529 TX +File 8 +190106_000345 7.080 Rx FT8 -5 0.1 335 CQ RU AB5XS EM12 +190106_000345 7.080 Rx FT8 -13 0.1 423 WA1T PY2APK 529 0081 +190106_000345 7.080 Rx FT8 6 0.2 689 CQ RU KA1YQC FN42 +190106_000345 7.080 Rx FT8 -16 0.1 852 W9TO KM4LFT RR73 +190106_000345 7.080 Rx FT8 -4 -0.1 918 KF6JXM W5BT 529 TX +190106_000345 7.080 Rx FT8 2 0.1 984 W4EMB N9OY R 529 WI +190106_000345 7.080 Rx FT8 -15 0.3 1034 W9JA W9OY RR73 +190106_000345 7.080 Rx FT8 -7 0.1 1175 K2DH KD2GXL 559 NY +190106_000345 7.080 Rx FT8 6 -0.1 1240 CQ RU K7RL CN88 +190106_000345 7.080 Rx FT8 -10 0.1 1536 CQ RU W0FRC DM79 +190106_000345 7.080 Rx FT8 -7 0.2 1581 VA3WW WA4DYD RR73 +190106_000345 7.080 Rx FT8 -9 0.1 1688 DD5ZZ W1QA 73 +190106_000345 7.080 Rx FT8 17 0.1 1895 CQ RU KG4W FM17 +190106_000345 7.080 Rx FT8 -9 0.1 2002 K2DH KN3ILZ 549 PA +190106_000400 7.080 Rx FT8 -5 0.7 2052 CQ RU WS4WW FM17 +190106_000400 7.080 Rx FT8 -9 0.2 2125 NV4G NF3R R 549 PA +190106_000400 7.080 Rx FT8 -5 0.0 941 KW4RTR KO9V RR73 +190106_000400 7.080 Rx FT8 -7 0.2 1744 KC1HTT K1LOG R 569 ME From 9f909b6b1b79fa2a843a2635f8089dd06905881f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 30 Jan 2019 15:49:52 -0500 Subject: [PATCH 068/367] Oops, I left garbage in the file. --- lib/ft4/ft4_decode.f90 | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index ce566fff3..6fc0059f3 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -148,14 +148,9 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) if(icos4(k-1).eq.(ip(1)-1)) is4=is4+1 enddo nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 - -<<<<<<< HEAD - do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols -======= if(smax .lt. 0.9 .or. nsync .lt. 9) cycle - - do nseq=1,3 ->>>>>>> 66bb999126e00874a7b300735b2aef631386a099 + + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 if(nseq.eq.3) nsym=4 From fdb84c0e6345a57154ba2172e6b46a3e083186e0 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 30 Jan 2019 19:19:38 -0600 Subject: [PATCH 069/367] Fix an off-by-one error. --- lib/ft4/sync4d.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index e0f87cb8e..bb63cf7c1 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -35,9 +35,9 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) sync=0 i1=i0 !four Costas arrays - i2=i0+33*NSS-1 - i3=i0+66*NSS-1 - i4=i0+99*NSS-1 + i2=i0+33*NSS + i3=i0+66*NSS + i4=i0+99*NSS csync2=csync if(itwk.eq.1) csync2=ctwk*csync2 !Tweak the frequency if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+4*NSS-1)*conjg(csync2)) From 7ae1210266e95d45d7f03d762833f20d81d7a2a3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 31 Jan 2019 11:37:54 -0500 Subject: [PATCH 070/367] Fix several flaws in the waveforms generated by ft4sim_mult. --- lib/ft4/ft4sim_mult.f90 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index bb17a860d..4e2e31dc8 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -71,33 +71,35 @@ program ft4sim_mult call pack77(msg37,i3,n3,c77) call genft4(msg37,0,msgsent37,itone) -! Compute the smoothed frequency waveform +! Compute the smoothed frequency waveform. +! Length = (NN+2)*NSPS samples, zero-padded to NMAX dphi_peak=twopi*hmod/real(NSPS) dphi=0.0 do j=1,NN ib=(j-1)*NSPS ie=ib+3*NSPS-1 - dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse*itone(j) + dphi(ib:ie) = dphi(ib:ie) + dphi_peak*pulse*itone(j) enddo ! Calculate and insert the audio waveform phi=0.0 - dphi=dphi+twopi*f0*dt + dphi = dphi + twopi*f0*dt !Shift frequency up by f0 tmp=0. - k0=nint((xdt+0.043)/dt) + k0=nint(xdt/dt) k=k0-1 do j=0,NMAX-1 k=k+1 tmp(k)=sin(phi) phi=mod(phi+dphi(j),twopi) enddo - k1=k + k1=k0+(NN+1)*NSPS ! Compute the ramp-up and ramp-down symbols - tmp(k0-NSPS:k0-1)=tmp(k0-NSPS:k0-1) * & + tmp(k0:k0+NSPS-1)=tmp(k0:k0+NSPS-1) * & (1.0-cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)))/2.0 - tmp(k1+1:k1+NSPS)=tmp(k1+1:k1+NSPS) * & + tmp(k1:k1+NSPS-1)=tmp(k1:k1+NSPS-1) * & (1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)))/2.0 + tmp(k1+NSPS:)=0. ! Insert this signal into wave() array sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*isnr) @@ -107,7 +109,8 @@ program ft4sim_mult enddo ! isig 100 backspace 10 - do i=1,NMAX !Add gaussian noise at specified SNR + + do i=1,NZZ !Add gaussian noise at specified SNR xnoise=gran() wave(i)=wave(i) + xnoise enddo From a80b955fe7410d658dcc261f86cb559c47451f72 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 31 Jan 2019 12:10:58 -0500 Subject: [PATCH 071/367] Decode FT4 over the full frequency range displayed in waterfall. --- lib/ft4/ft4_decode.f90 | 10 +++++----- lib/ft4/ft4d.f90 | 5 ++++- lib/ft4/getcandidates4.f90 | 2 ++ widgets/mainwindow.cpp | 10 ++++++---- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 6fc0059f3..29427ffb9 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,4 +1,5 @@ -subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) +subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & + hiscall,nrx,line) use packjt77 include 'ft4_params.f90' @@ -66,12 +67,11 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) syncmin=1.2 maxcand=100 -! These are temporary. Correct values should be passed in as arguments. +! ### This is temporary. Correct directory should be passed in as an argument. data_dir="." - fMHz=7.074 - fa=400.0 - fb=3000.0 + fa=nfa + fb=nfb call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand,sbase) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 1f4dccd59..c0bd15270 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -43,6 +43,8 @@ program ft4d iarg=iarg+2 endif ncoh=1 + nfa=200 + nfb=3000 do ifile=iarg,nargs call getarg(ifile,infile) @@ -54,7 +56,8 @@ program ft4d cdatetime=' '//datetime close(10) - call ft4_decode(cdatetime,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line) + call ft4_decode(cdatetime,nfa,nfb,nfqso,iwave,ndecodes,mycall, & + hiscall,nrx,line) if(ndecodes.ge.1) write(*,'(a61)') line enddo !files diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 436ce59d1..402116a27 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -45,7 +45,9 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & savsm(i)=sum(savg(i-7:i+7))/15. enddo nfa=fa/df + if(nfa.lt.1) nfa=1 nfb=fb/df + if(nfb.gt.nint(5000.0/df)) nfb=nint(5000.0/df) np=nfb-nfa+1 indx=0 call indexx(savsm(nfa:nfb),np,indx) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b6004ca9c..e63f57124 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -163,8 +163,8 @@ extern "C" { void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); - void ft4_decode_(char* cdatetime, int* nfqso, short int id[], int* ndecodes, - char* mycall6, char* hiscall6, int* nrx, char* line, + void ft4_decode_(char* cdatetime, int* nfa, int* nfb, int* nfqso, short int id[], + int* ndecodes, char* mycall6, char* hiscall6, int* nrx, char* line, int len1, int len2, int len3, int len4); } @@ -8652,8 +8652,10 @@ void MainWindow::ft4Data(int k) int nfqso=1500; int ndecodes=0; int nrx=-1; - ft4_decode_(cdatetime,&nfqso,id,&ndecodes,mycall6,hiscall6,&nrx,&line[0], - 17,6,6,61); + int nfa=m_wideGraph->nStartFreq(); + int nfb=m_wideGraph->Fmax(); + ft4_decode_(cdatetime,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6, + &nrx,&line[0],17,6,6,61); line[60]=0; if(ndecodes>0) { QString sline{QString::fromLatin1(line)}; From 04f085bb24ab53022d5c75fcde0c1f44bb3568ff Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 31 Jan 2019 13:55:21 -0500 Subject: [PATCH 072/367] Proper handling of multiple decodes from one call to ft4_decode. --- lib/ft4/ft4_decode.f90 | 34 +++++++++++++++++++++------------- lib/ft4/ft4d.f90 | 8 ++++++-- widgets/mainwindow.cpp | 17 ++++++++++++----- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 29427ffb9..83d9531d1 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,4 +1,4 @@ -subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & +subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & hiscall,nrx,line) use packjt77 @@ -7,7 +7,7 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & character message*37 character c77*77 - character*61 line + character*61 line,linex(100) character*37 decodes(100) character*120 data_dir character*17 cdatetime0 @@ -22,13 +22,13 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & real s4(0:3,NN) real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) - real s(NH1,NHSYM) real a(5) real llr(2*ND),llr2(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND) real s2(0:255) real candidate(3,100) real savg(NH1),sbase(NH1) - + + integer nrxx(100) integer icos4(0:3) integer*2 iwave(NMAX) !Generated full-length waveform integer*1 message77(77),apmask(2*ND),cw(2*ND) @@ -42,7 +42,7 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & data icos4/0,1,3,2/ data graymap/0,1,3,2/ data first/.true./ - save one,first + save one,first,nrxx,linex hhmmss=cdatetime0(8:13) fs=12000.0/NDOWN !Sample rate after downsampling @@ -250,17 +250,19 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & decodes(ndecodes)=message nsnr=nint(xsnr) freq=f0 + tsig=mod(tbuf + ibest/750.0,100.0) - write(line,1000) hhmmss,nsnr,ibest/750.0,nint(freq),message -1000 format(a6,i4,f5.2,i5,' + ',1x,a37) + write(line,1000) hhmmss,nsnr,tsig,nint(freq),message +1000 format(a6,i4,f5.1,i5,' + ',1x,a37) open(24,file='all_ft4.txt',status='unknown',position='append') - write(24,1002) cdatetime0,nsnr,ibest/750.0,nint(freq),message, & + write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & nharderror,nsync_qual,isd,niterations if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & - ibest/750.0,nint(freq),message,nharderror,nsync_qual,isd, & + tsig,nint(freq),message,nharderror,nsync_qual,isd, & niterations -1002 format(a17,i4,f6.2,i5,' Rx ',a37,4i5) +1002 format(a17,i4,f5.1,i5,' Rx ',a37,4i5) close(24) + linex(ndecodes)=line !### Temporary: assume most recent decoded message conveys "hiscall". ### i0=index(message,' ') @@ -273,18 +275,24 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & if(index(message,'CQ ').eq.1) nrx=1 if((index(message,trim(mycall)//' ').eq.1) .and. & (index(message,' '//trim(hiscall)//' ').ge.4)) then - if(index(message,' 559 ').gt.8) nrx=2 - if(index(message,' R 559 ').gt.8) nrx=3 + if(index(message,' 559 ').gt.8) nrx=2 !### Not right ! + if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! if(index(message,' RR73 ').gt.8) nrx=4 endif + nrxx(ndecodes)=nrx !### exit endif enddo !Sequence estimation enddo !Candidate list - return + + entry get_ft4msg(idecode,nrx,line) + line=linex(idecode) + nrx=nrxx(idecode) + return + end subroutine ft4_decode subroutine ft4_downsample(iwave,f0,c) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index c0bd15270..20da1d2ab 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -56,9 +56,13 @@ program ft4d cdatetime=' '//datetime close(10) - call ft4_decode(cdatetime,nfa,nfb,nfqso,iwave,ndecodes,mycall, & + call ft4_decode(cdatetime,0.0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & hiscall,nrx,line) - if(ndecodes.ge.1) write(*,'(a61)') line + + do idecode=1,ndecodes + call get_ft4msg(idecode,nrx,line) + write(*,'(a61)') line + enddo enddo !files write(*,1120) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index e63f57124..cf20023b6 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -163,9 +163,12 @@ extern "C" { void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); - void ft4_decode_(char* cdatetime, int* nfa, int* nfb, int* nfqso, short int id[], - int* ndecodes, char* mycall6, char* hiscall6, int* nrx, char* line, - int len1, int len2, int len3, int len4); + void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nfqso, + short int id[], int* ndecodes, char* mycall6, char* hiscall6, + int* nrx, char* line, int len1, int len2, int len3, int len4); + + void get_ft4msg_(int* idecode, int* nrx, char* line, int len); + } int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols @@ -8621,6 +8624,7 @@ void MainWindow::ft4Data(int k) int j=k/6000; j=6000*j-60000; if(j<0) j+=NRING; + float tbuf=j/12000.0; for(int i=0; i<60000; i++) { id[i]=dec_data.d2[j]; j++; @@ -8654,10 +8658,13 @@ void MainWindow::ft4Data(int k) int nrx=-1; int nfa=m_wideGraph->nStartFreq(); int nfb=m_wideGraph->Fmax(); - ft4_decode_(cdatetime,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6, + ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6, &nrx,&line[0],17,6,6,61); line[60]=0; - if(ndecodes>0) { +// if(ndecodes>0) { + for (int idecode=1; idecode<=ndecodes; idecode++) { + get_ft4msg_(&idecode,&nrx,&line[0],61); + line[60]=0; QString sline{QString::fromLatin1(line)}; DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, From b32799d2b80eee2137cb44e772d2ad34b1f9d271 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 31 Jan 2019 14:06:05 -0500 Subject: [PATCH 073/367] Add xdt to lines printed by ft4sim_mult. --- lib/ft4/ft4sim_mult.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 4e2e31dc8..adf053666 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -104,8 +104,8 @@ program ft4sim_mult ! Insert this signal into wave() array sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*isnr) wave=wave + sig*tmp - write(*,1100) fname,isig,isnr,nint(f0),msg37 -1100 format(a17,i4,i5,i6,2x,a37) + write(*,1100) fname(1:13),isig,isnr,xdt,nint(f0),msg37 +1100 format(a13,i4,i5,f5.1,i6,2x,a37) enddo ! isig 100 backspace 10 From 9c2700128c7e66fca2759e02d6c6641b88cea16d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 31 Jan 2019 16:07:07 -0500 Subject: [PATCH 074/367] Generation of FT4 Tx waveform from itone() moved to a separate subroutine. --- CMakeLists.txt | 1 + lib/ft4/ft4sim_mult.f90 | 43 ++++++---------------------------- lib/ft4/gen_ft4wave.f90 | 52 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 36 deletions(-) create mode 100644 lib/ft4/gen_ft4wave.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 184788c8f..c4374779e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -463,6 +463,7 @@ set (wsjt_FSRCS lib/genmsk_128_90.f90 lib/genmsk40.f90 lib/ft4/genft4.f90 + lib/ft4/gen_ft4wave.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 lib/genwspr.f90 diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index adf053666..16f7bb11c 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -10,10 +10,9 @@ program ft4sim_mult type(hdr) h !Header for .wav file character arg*12,fname*17,cjunk*4 character msg37*37,msgsent37*37,c77*77 + real wave0((NN+2)*NSPS) real wave(NZZ) real tmp(NZZ) - real dphi(0:NMAX-1) - real pulse(3*NSPS) integer itone(NN) integer*2 iwave(NZZ) !Generated full-length waveform integer icos4(4) @@ -41,12 +40,6 @@ program ft4sim_mult bandwidth_ratio=2500.0/(fs/2.0) txt=NN*NSPS/12000.0 xdtmax=10.0 - 0.086 - -! Compute the filtered frequency pulse - do i=1,3*NSPS - tt=(i-1.5*NSPS)/real(NSPS) - pulse(i)=gfsk_pulse(1.0,tt) - enddo open(10,file='messages.txt',status='old',err=998) do ifile=1,nfiles @@ -70,36 +63,14 @@ program ft4sim_mult n3=-1 call pack77(msg37,i3,n3,c77) call genft4(msg37,0,msgsent37,itone) + nwave0=(NN+2)*NSPS + call gen_ft4wave(itone,NN,NSPS,12000.0,f0,wave0,nwave0) -! Compute the smoothed frequency waveform. -! Length = (NN+2)*NSPS samples, zero-padded to NMAX - dphi_peak=twopi*hmod/real(NSPS) - dphi=0.0 - do j=1,NN - ib=(j-1)*NSPS - ie=ib+3*NSPS-1 - dphi(ib:ie) = dphi(ib:ie) + dphi_peak*pulse*itone(j) - enddo - -! Calculate and insert the audio waveform - phi=0.0 - dphi = dphi + twopi*f0*dt !Shift frequency up by f0 - tmp=0. k0=nint(xdt/dt) - k=k0-1 - do j=0,NMAX-1 - k=k+1 - tmp(k)=sin(phi) - phi=mod(phi+dphi(j),twopi) - enddo - k1=k0+(NN+1)*NSPS - -! Compute the ramp-up and ramp-down symbols - tmp(k0:k0+NSPS-1)=tmp(k0:k0+NSPS-1) * & - (1.0-cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)))/2.0 - tmp(k1:k1+NSPS-1)=tmp(k1:k1+NSPS-1) * & - (1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS)))/2.0 - tmp(k1+NSPS:)=0. + if(k0.lt.1) k0=1 + tmp(:k0-1)=0.0 + tmp(k0:k0+nwave0-1)=wave0 + tmp(k0+nwave0:)=0.0 ! Insert this signal into wave() array sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*isnr) diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 new file mode 100644 index 000000000..305310e68 --- /dev/null +++ b/lib/ft4/gen_ft4wave.f90 @@ -0,0 +1,52 @@ +subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,wave,nwave) + + real wave(nwave) + real pulse(6144) !512*4*3 + real dphi(0:240000-1) + integer itone(nsym) + logical first + data first/.true./ + save pulse,first,twopi,dt,hmod + + if(first) then + twopi=8.0*atan(1.0) + dt=1.0/fsample + hmod=1.0 +! Compute the frequency-smoothing pulse + do i=1,3*nsps + tt=(i-1.5*nsps)/real(nsps) + pulse(i)=gfsk_pulse(1.0,tt) + enddo + first=.false. + endif + +! Compute the smoothed frequency waveform. +! Length = (nsym+2)*nsps samples, zero-padded + dphi_peak=twopi*hmod/real(nsps) + dphi=0.0 + do j=1,nsym + ib=(j-1)*nsps + ie=ib+3*nsps-1 + dphi(ib:ie) = dphi(ib:ie) + dphi_peak*pulse(1:3*nsps)*itone(j) + enddo + +! Calculate and insert the audio waveform + phi=0.0 + dphi = dphi + twopi*f0*dt !Shift frequency up by f0 + wave=0. + k=0 + do j=0,nwave-1 + k=k+1 + wave(k)=sin(phi) + phi=mod(phi+dphi(j),twopi) + enddo + +! Compute the ramp-up and ramp-down symbols + wave(1:nsps)=wave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + wave(k1:k1+nsps-1)=wave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + + return +end subroutine gen_ft4wave From 98d665c6780eeaa36c2d168a33cd3f1b0ec8974b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 1 Feb 2019 10:47:47 -0500 Subject: [PATCH 075/367] Add subroutine clockit() and use it for profiling ft4_decode(). --- CMakeLists.txt | 1 + lib/ft4/clockit.f90 | 104 +++++++++++++++++++++++++++++++++++++++++ lib/ft4/ft4_decode.f90 | 24 +++++++++- 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 lib/ft4/clockit.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index c4374779e..38699265c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -394,6 +394,7 @@ set (wsjt_FSRCS lib/chkhist.f90 lib/chkmsg.f90 lib/chkss2.f90 + lib/ft4/clockit.f90 lib/ft8/compress.f90 lib/coord.f90 lib/db.f90 diff --git a/lib/ft4/clockit.f90 b/lib/ft4/clockit.f90 new file mode 100644 index 000000000..69d9690d7 --- /dev/null +++ b/lib/ft4/clockit.f90 @@ -0,0 +1,104 @@ +subroutine clockit(dname,k) + +! Times procedure number n between a call with k=0 (tstart) and with +! k=1 (tstop). Accumulates sums of these times in array ut (user time). +! Also traces all calls (for debugging purposes) if limtrace.gt.0 + + character*8 dname,name(50),space,ename + character*16 sname + logical first,on(50) + real ut(50),ut0(50),dut(50),tt(2) + integer ncall(50),nlevel(50),nparent(50) + integer onlevel(0:10) +! common/tracer/ limtrace,lu,ntimer + data first/.true./,eps/0.000001/,ntrace/0/ + data level/0/,nmax/0/,space/' '/ + data limtrace/0/,lu/29/,ntimer/1/ + save + + if(ntimer.eq.0) return + if(lu.lt.1) lu=6 + if(k.gt.1) go to 40 !Check for "all done" (k>1) + onlevel(0)=0 + + do n=1,nmax !Check for existing name + if(name(n).eq.dname) go to 20 + enddo + + nmax=nmax+1 !This is a new one + n=nmax + ncall(n)=0 + on(n)=.false. + ut(n)=eps + name(n)=dname + +20 if(k.eq.0) then !Get start times (k=0) + if(on(n)) print*,'Error in timer: ',dname,' already on.' + level=level+1 !Increment the level + on(n)=.true. + ut0(n)=etime(tt) + ncall(n)=ncall(n)+1 + if(ncall(n).gt.1.and.nlevel(n).ne.level) then + nlevel(n)=-1 + else + nlevel(n)=level + endif + nparent(n)=onlevel(level-1) + onlevel(level)=n + + else if(k.eq.1) then !Get stop times and accumulate sums. (k=1) + if(on(n)) then + on(n)=.false. + ut1=etime(tt) + ut(n)=ut(n)+ut1-ut0(n) + endif + level=level-1 + endif + + ntrace=ntrace+1 + if(ntrace.lt.limtrace) write(lu,1020) ntrace,dname,k,level,nparent(n) +1020 format(i5,': ',a8,3i5) + return + +! Write out the timer statistics + +40 open(lu,file='clockit.out',status='unknown') + write(lu,1040) +1040 format(/' name time frac dtime', & + ' dfrac calls level parent'/73('-')) + + if(k.gt.100) then + ndiv=k-100 + do i=1,nmax + ncall(i)=ncall(i)/ndiv + ut(i)=ut(i)/ndiv + enddo + endif + + total=ut(1) + sum=0. + sumf=0. + do i=1,nmax + dut(i)=ut(i) + do j=i,nmax + if(nparent(j).eq.i) dut(i)=dut(i)-ut(j) + enddo + utf=ut(i)/total + dutf=dut(i)/total + sum=sum+dut(i) + sumf=sumf+dutf + kk=nlevel(i) + sname=space(1:kk)//name(i)//space(1:8-kk) + ename=space + if(i.ge.2) ename=name(nparent(i)) + write(lu,1060) float(i),sname,ut(i),utf,dut(i),dutf, & + ncall(i),nlevel(i),ename +1060 format(f4.0,a16,2(f10.2,f6.2),i7,i5,2x,a8) + enddo + + write(lu,1070) sum,sumf +1070 format(/36x,f10.2,f6.2) + close(lu) + + return +end subroutine clockit diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 83d9531d1..5ef9527a9 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -44,6 +44,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & data first/.true./ save one,first,nrxx,linex + call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) fs=12000.0/NDOWN !Sample rate after downsampling dt=1/fs !Sample interval after downsample (s) @@ -72,15 +73,20 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & fa=nfa fb=nfb + call clockit('getcand4',0) call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand,sbase) + call clockit('getcand4',1) ndecodes=0 do icand=1,ncand f0=candidate(1,icand) xsnr=10*log10(candidate(3,icand))-18.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call ft4_downsample(iwave,f0,cd2) ! downsample from 512 Sa/Symbol to 32 Sa/Symbol + call clockit('ft4_down',0) + call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol + call clockit('ft4_down',1) + sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! Sample rate is now 12000/16 = 750 samples/second @@ -107,7 +113,11 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & a=0. a(1)=real(idf) ctwk=1. + call clockit('twkfreq1',0) call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) + call clockit('twkfreq1',1) + + call clockit('sync4d ',0) do istart=ibmin,ibmax,ibstp call sync4d(cd2,istart,ctwk2,1,sync) !Find sync power if(sync.gt.smax) then @@ -116,14 +126,19 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & idfbest=idf endif enddo + call clockit('sync4d ',1) + enddo enddo f0=f0+real(idfbest) + call clockit('ft4down ',0) call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 + call clockit('ft4down ',1) sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) cd=cb(ibest:ibest+NN*NSS-1) + call clockit('four2a ',0) do k=1,NN i1=(k-1)*NSS csymb=cd(i1:i1+NSS-1) @@ -131,6 +146,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & cs(0:3,k)=csymb(1:4) s4(0:3,k)=abs(csymb(1:4)) enddo + call clockit('four2a ',1) ! Sync quality check is1=0 @@ -195,9 +211,11 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & enddo enddo + call clockit('normaliz',0) call normalizebmet(bmeta,2*NN) call normalizebmet(bmetb,2*NN) call normalizebmet(bmetc,2*NN) + call clockit('normaliz',1) hbits=0 where(bmeta.ge.0) hbits=1 @@ -233,8 +251,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & llr2=llr if(ibias.eq.1) llr2=llr+0.4 if(ibias.eq.2) llr2=llr-0.4 + call clockit('bpdecode',0) call bpdecode174_91(llr2,apmask,max_iterations,message77, & cw,nharderror,niterations) + call clockit('bpdecode',1) if(nharderror.ge.0) exit enddo if(sum(message77).eq.0) cycle @@ -286,6 +306,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & endif enddo !Sequence estimation enddo !Candidate list + call clockit('ft4_deco',1) + call clockit('ft4_deco',101) return entry get_ft4msg(idecode,nrx,line) From 22209030e2bdd4996b51c4f28430a7fdb3e94225 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 1 Feb 2019 11:56:08 -0500 Subject: [PATCH 076/367] Move files all_ft4.txt and clockit.out to the data_dir directory. --- lib/ft4/clockit.f90 | 13 +++++++++---- lib/ft4/ft4_decode.f90 | 12 ++++++------ lib/ft4/ft4d.f90 | 4 ++-- widgets/mainwindow.cpp | 9 +++++++-- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/ft4/clockit.f90 b/lib/ft4/clockit.f90 index 69d9690d7..7e05f55de 100644 --- a/lib/ft4/clockit.f90 +++ b/lib/ft4/clockit.f90 @@ -6,16 +6,16 @@ subroutine clockit(dname,k) character*8 dname,name(50),space,ename character*16 sname + character*512 data_dir,fname logical first,on(50) real ut(50),ut0(50),dut(50),tt(2) integer ncall(50),nlevel(50),nparent(50) integer onlevel(0:10) -! common/tracer/ limtrace,lu,ntimer data first/.true./,eps/0.000001/,ntrace/0/ data level/0/,nmax/0/,space/' '/ data limtrace/0/,lu/29/,ntimer/1/ save - + if(ntimer.eq.0) return if(lu.lt.1) lu=6 if(k.gt.1) go to 40 !Check for "all done" (k>1) @@ -62,7 +62,7 @@ subroutine clockit(dname,k) ! Write out the timer statistics -40 open(lu,file='clockit.out',status='unknown') +40 open(lu,file=trim(fname),status='unknown') write(lu,1040) 1040 format(/' name time frac dtime', & ' dfrac calls level parent'/73('-')) @@ -99,6 +99,11 @@ subroutine clockit(dname,k) write(lu,1070) sum,sumf 1070 format(/36x,f10.2,f6.2) close(lu) - return + + entry clockit2(data_dir) + i0=index(data_dir,char(0)) + fname=trim(data_dir(1:i0-1))//'/clockit.out' + return + end subroutine clockit diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 5ef9527a9..2150568b7 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,5 +1,5 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & - hiscall,nrx,line) + hiscall,nrx,line,data_dir) use packjt77 include 'ft4_params.f90' @@ -9,7 +9,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & character c77*77 character*61 line,linex(100) character*37 decodes(100) - character*120 data_dir + character*512 data_dir,fname character*17 cdatetime0 character*6 mycall,hiscall,hhmmss @@ -68,9 +68,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & syncmin=1.2 maxcand=100 -! ### This is temporary. Correct directory should be passed in as an argument. - data_dir="." - fa=nfa fb=nfb call clockit('getcand4',0) @@ -274,7 +271,9 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & write(line,1000) hhmmss,nsnr,tsig,nint(freq),message 1000 format(a6,i4,f5.1,i5,' + ',1x,a37) - open(24,file='all_ft4.txt',status='unknown',position='append') + i0=index(data_dir,char(0)) + fname=trim(data_dir(1:i0-1))//'/all_ft4.txt' + open(24,file=trim(fname),status='unknown',position='append') write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & nharderror,nsync_qual,isd,niterations if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & @@ -307,6 +306,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & enddo !Sequence estimation enddo !Candidate list call clockit('ft4_deco',1) + call clockit2(data_dir) call clockit('ft4_deco',101) return diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 20da1d2ab..12e4e5660 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -4,7 +4,7 @@ program ft4d character*8 arg character*17 cdatetime - character*120 data_dir + character*512 data_dir character*11 datetime character*37 decodes(100) character*16 fname @@ -57,7 +57,7 @@ program ft4d close(10) call ft4_decode(cdatetime,0.0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & - hiscall,nrx,line) + hiscall,nrx,line,data_dir) do idecode=1,ndecodes call get_ft4msg(idecode,nrx,line) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index cf20023b6..f24628781 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -165,7 +165,8 @@ extern "C" { void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nfqso, short int id[], int* ndecodes, char* mycall6, char* hiscall6, - int* nrx, char* line, int len1, int len2, int len3, int len4); + int* nrx, char* line, char* ddir, int len1, int len2, int len3, + int len4, int len5); void get_ft4msg_(int* idecode, int* nrx, char* line, int len); @@ -8658,8 +8659,12 @@ void MainWindow::ft4Data(int k) int nrx=-1; int nfa=m_wideGraph->nStartFreq(); int nfb=m_wideGraph->Fmax(); + QString dataDir; + dataDir = m_config.writeable_data_dir ().absolutePath (); + char ddir[512]; + strncpy(ddir,dataDir.toLatin1(), sizeof (ddir) - 1); ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6, - &nrx,&line[0],17,6,6,61); + &nrx,&line[0],&ddir[0],17,6,6,61,512); line[60]=0; // if(ndecodes>0) { for (int idecode=1; idecode<=ndecodes; idecode++) { From 40fd3f655109683779dbb3d15a2f0b03067ebd6a Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 2 Feb 2019 11:04:11 -0600 Subject: [PATCH 077/367] Make writing to data_dir work on the Mac. --- lib/ft4/clockit.f90 | 3 +-- lib/ft4/ft4_decode.f90 | 3 +-- lib/ft4/ft4d.f90 | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/ft4/clockit.f90 b/lib/ft4/clockit.f90 index 7e05f55de..e5b9d5bbd 100644 --- a/lib/ft4/clockit.f90 +++ b/lib/ft4/clockit.f90 @@ -102,8 +102,7 @@ subroutine clockit(dname,k) return entry clockit2(data_dir) - i0=index(data_dir,char(0)) - fname=trim(data_dir(1:i0-1))//'/clockit.out' + fname=trim(data_dir)//'/clockit.out' return end subroutine clockit diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 2150568b7..f5a3174ad 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -271,8 +271,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & write(line,1000) hhmmss,nsnr,tsig,nint(freq),message 1000 format(a6,i4,f5.1,i5,' + ',1x,a37) - i0=index(data_dir,char(0)) - fname=trim(data_dir(1:i0-1))//'/all_ft4.txt' + fname=trim(data_dir)//'/all_ft4.txt' open(24,file=trim(fname),status='unknown',position='append') write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & nharderror,nsync_qual,isd,niterations diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 12e4e5660..8381bc9b6 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -42,7 +42,6 @@ program ft4d read(arg,*) fMHz iarg=iarg+2 endif - ncoh=1 nfa=200 nfb=3000 From 91e3dbdf20b9ece72d945aeca8db7bae60a71c4f Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 2 Feb 2019 16:29:17 -0600 Subject: [PATCH 078/367] New scheme for finding candidates. Speed up sync. Improved SNR calibration. --- lib/ft4/ft4_decode.f90 | 15 ++++++++++----- lib/ft4/ft4_params.f90 | 4 ++-- lib/ft4/getcandidates4.f90 | 39 +++++++++++++++++++++++++------------- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index f5a3174ad..7b4edcf79 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -78,7 +78,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & ndecodes=0 do icand=1,ncand f0=candidate(1,icand) - xsnr=10*log10(candidate(3,icand))-18.0 + snr=candidate(3,icand)-1.0 if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle call clockit('ft4_down',0) call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol @@ -89,15 +89,15 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & ! Sample rate is now 12000/16 = 750 samples/second do isync=1,2 if(isync.eq.1) then - idfmin=-50 - idfmax=50 + idfmin=-12 + idfmax=12 idfstp=3 ibmin=0 ibmax=374 ibstp=4 else - idfmin=idfbest-5 - idfmax=idfbest+5 + idfmin=idfbest-4 + idfmax=idfbest+4 idfstp=1 ibmin=max(0,ibest-5) ibmax=min(ibest+5,NMAX/NDOWN-1) @@ -265,6 +265,11 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & if(idupe.eq.1) exit ndecodes=ndecodes+1 decodes(ndecodes)=message + if(snr.gt.0.0) then + xsnr=10*log10(snr)-14.0 + else + xsnr=-18.0 + endif nsnr=nint(xsnr) freq=f0 tsig=mod(tbuf + ibest/750.0,100.0) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index bcc7f7404..02d9de655 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -11,6 +11,6 @@ parameter (NZ=NSPS*NN) !Sync and Data samples (52736) parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) parameter (NMAX=5*12000) !Samples in iwave (60,000) parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra -parameter (NSTEP=NSPS/4) !Coarse time-sync step size -parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NSTEP=NSPS) !Coarse time-sync step size +parameter (NHSYM=(NMAX-NFFT1)/NSTEP) !Number of symbol spectra (1/4-sym steps) parameter (NDOWN=16) !Downsample factor diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 402116a27..47b08d426 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -56,19 +56,32 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand=0 f_offset = -1.5*12000/512 - do i=1,maxcand - ipk=maxloc(savsm(nfa:nfb)) - ip=nfa-1+ipk(1) - xmax=savsm(ip) - savsm(max(1,ip-8):min(NH1,ip+8))=0.0 - if(xmax.ge.syncmin) then - ncand=ncand+1 - candidate(1,ncand)=ip*df+f_offset - candidate(2,ncand)=-99.9 - candidate(3,ncand)=xmax - else - exit - endif + do i=nfa+1,nfb-1 + if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. savsm(i).ge.syncmin) then + del=0.5*(savsm(i-1)-savsm(i+1))/(savsm(i-1)-2*savsm(i)+savsm(i+1)) + fpeak=(i+del)*df+f_offset + speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del + ncand=ncand+1 + if(ncand.gt.maxcand) exit + candidate(1,ncand)=fpeak + candidate(2,ncand)=-99.99 + candidate(3,ncand)=speak + endif enddo + +! do i=1,maxcand +! ipk=maxloc(savsm(nfa:nfb)) +! ip=nfa-1+ipk(1) +! xmax=savsm(ip) +! savsm(max(1,ip-8):min(NH1,ip+8))=0.0 +! if(xmax.ge.syncmin) then +! ncand=ncand+1 +! candidate(1,ncand)=ip*df+f_offset +! candidate(2,ncand)=-99.9 +! candidate(3,ncand)=xmax +! else +! exit +! endif +! enddo return end subroutine getcandidates4 From 71cb6d9f50283ba15fc3301bbc579a2dcce4bac8 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 5 Feb 2019 19:18:50 -0600 Subject: [PATCH 079/367] Use 4 different Costas arrays to prevent false syncs as received frames move through the analysis window. Add a random 77-bit vector to each message so that tone transitions occur even if the message contains a long string of 0 or 1 (like a CQ). Add alternative sync calculation as an option (sync2), for testing. Add basic framework for AP decoding. --- lib/ft4/ft4_decode.f90 | 98 ++++++++++++++++++++++++++++++------------ lib/ft4/ft4d.f90 | 3 +- lib/ft4/genft4.f90 | 22 ++++++---- lib/ft4/sync4d.f90 | 69 +++++++++++++++++++++++------ widgets/mainwindow.cpp | 11 ++--- 5 files changed, 148 insertions(+), 55 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 7b4edcf79..b24c11c91 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,17 +1,19 @@ -subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & +subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes,mycall, & hiscall,nrx,line,data_dir) use packjt77 include 'ft4_params.f90' parameter (NSS=NSPS/NDOWN) - character message*37 + character message*37,msgsent*37 character c77*77 character*61 line,linex(100) character*37 decodes(100) character*512 data_dir,fname character*17 cdatetime0 - character*6 mycall,hiscall,hhmmss + character*6 mycall,hiscall + character*6 mycall0,hiscall0 + character*6 hhmmss complex cd2(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) @@ -29,31 +31,50 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & real savg(NH1),sbase(NH1) integer nrxx(100) - integer icos4(0:3) + integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) integer*2 iwave(NMAX) !Generated full-length waveform - integer*1 message77(77),apmask(2*ND),cw(2*ND) + integer*1 message77(77),rvec(77),apbits(2*ND),apmask(2*ND),cw(2*ND) integer*1 hbits(2*NN) integer graymap(0:3) integer ip(1) + integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 + integer naptypes(0:5,4) ! nQSOProgress, decoding pass + integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) + integer mrrr(19),m73(19),mrr73(19) + integer mcall(29),hcall(29) + logical unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first - data icos4/0,1,3,2/ + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ data graymap/0,1,3,2/ data first/.true./ - save one,first,nrxx,linex + data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ + data mcqru/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0/ + data mcqfd/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0/ + data mcqtest/0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0/ + data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ + data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ + data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ + data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ + save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes,mycall0,hiscall0 call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) - fs=12000.0/NDOWN !Sample rate after downsampling - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - txt=NZ*dt !Transmission length (s) without ramp up/down - twopi=8.0*atan(1.0) - h=1.0 if(first) then + fs=12000.0/NDOWN !Sample rate after downsampling + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + txt=NZ*dt !Transmission length (s) without ramp up/down + twopi=8.0*atan(1.0) + h=1.0 one=.false. do i=0,255 do j=0,7 @@ -63,6 +84,22 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & first=.false. endif + if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then + message=trim(mycall)//' '//trim(hiscall)//' '//'RR73' + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,0,msgsent,unpk77_success) + if(message.ne.msgsent) write(*,*) 'ERROR setting AP message' + read(c77,"(77i1)") message77 + message77=mod(message77+rvec,2) + call encode174_91(message77,cw) + mcall=cw(1:29) + hcall=cw(30:58) + mycall0=mycall + hiscall0=hiscall + endif + candidate=0.0 ncand=0 syncmin=1.2 @@ -87,7 +124,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! Sample rate is now 12000/16 = 750 samples/second - do isync=1,2 + do isync=1,1 if(isync.eq.1) then idfmin=-12 idfmax=12 @@ -116,7 +153,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & call clockit('sync4d ',0) do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2,1,sync) !Find sync power + call sync4d(cd2,istart,ctwk2,1,sync,sync2) !Find sync power if(sync.gt.smax) then smax=sync ibest=istart @@ -127,8 +164,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & enddo enddo - f0=f0+real(idfbest) + +!f0=1500 +!ibest=219 call clockit('ft4down ',0) call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 call clockit('ft4down ',1) @@ -152,17 +191,17 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & is4=0 do k=1,4 ip=maxloc(s4(:,k)) - if(icos4(k-1).eq.(ip(1)-1)) is1=is1+1 + if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 ip=maxloc(s4(:,k+33)) - if(icos4(k-1).eq.(ip(1)-1)) is2=is2+1 + if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 ip=maxloc(s4(:,k+66)) - if(icos4(k-1).eq.(ip(1)-1)) is3=is3+1 + if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 ip=maxloc(s4(:,k+99)) - if(icos4(k-1).eq.(ip(1)-1)) is4=is4+1 + if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 enddo nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 - if(smax .lt. 0.9 .or. nsync .lt. 9) cycle - + if(smax .lt. 0.7 .or. nsync .lt. 8) cycle + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 @@ -217,11 +256,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & hbits=0 where(bmeta.ge.0) hbits=1 ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 67: 74).eq.(/0,0,0,1,1,0,1,1/)) - ns3=count(hbits(133:140).eq.(/0,0,0,1,1,0,1,1/)) - ns4=count(hbits(199:206).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) + ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) + ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) nsync_qual=ns1+ns2+ns3+ns4 - if(nsync_qual.lt. 20) cycle scalefac=2.83 @@ -242,7 +280,9 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & if(isd.eq.1) llr=llra if(isd.eq.2) llr=llrb if(isd.eq.3) llr=llrc +!llr(1:59)=1.5*scalefac*(2*apbits(1:59)-1) apmask=0 +!apmask(1:91)=1 max_iterations=40 do ibias=0,0 llr2=llr @@ -256,6 +296,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & enddo if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then + message77=mod(message77+rvec,2) write(c77,'(77i1)') message77(1:77) call unpack77(c77,1,message,unpk77_success) idupe=0 @@ -310,8 +351,9 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, & enddo !Sequence estimation enddo !Candidate list call clockit('ft4_deco',1) - call clockit2(data_dir) - call clockit('ft4_deco',101) +! clockit data directory does not get set properly on the Mac. +! call clockit2(data_dir) +! call clockit('ft4_deco',101) return entry get_ft4msg(idecode,nrx,line) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 8381bc9b6..4d21a11fb 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -44,6 +44,7 @@ program ft4d endif nfa=200 nfb=3000 + nQSOProgress=0 do ifile=iarg,nargs call getarg(ifile,infile) @@ -55,7 +56,7 @@ program ft4d cdatetime=' '//datetime close(10) - call ft4_decode(cdatetime,0.0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & + call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes,mycall, & hiscall,nrx,line,data_dir) do idecode=1,ndecodes diff --git a/lib/ft4/genft4.f90 b/lib/ft4/genft4.f90 index 668be5166..3c6b8ead1 100644 --- a/lib/ft4/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -23,11 +23,16 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) character*77 c77 integer*4 i4tone(NN),itmp(ND) integer*1 codeword(2*ND) - integer*1 msgbits(77) - integer icos4(4) + integer*1 msgbits(77),rvec(77) + integer icos4a(4),icos4b(4),icos4c(4),icos4d(4) logical unpk77_success - data icos4/0,1,3,2/ - + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ + data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ message=msg0 do i=1, 37 @@ -48,6 +53,7 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) if(ichk.eq.1) go to 999 read(c77,"(77i1)") msgbits + msgbits=mod(msgbits+rvec,2) call encode174_91(msgbits,codeword) ! Grayscale mapping: @@ -64,13 +70,13 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) if(is.eq.3) itmp(i)=2 enddo - i4tone(1:4)=icos4 + i4tone(1:4)=icos4a i4tone(5:33)=itmp(1:29) - i4tone(34:37)=icos4 + i4tone(34:37)=icos4b i4tone(38:66)=itmp(30:58) - i4tone(67:70)=icos4 + i4tone(67:70)=icos4c i4tone(71:99)=itmp(59:87) - i4tone(100:103)=icos4 + i4tone(100:103)=icos4d 999 return end subroutine genft4 diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index bb63cf7c1..4a6e7e899 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -1,31 +1,47 @@ -subroutine sync4d(cd0,i0,ctwk,itwk,sync) +subroutine sync4d(cd0,i0,ctwk,itwk,sync,sync2) ! Compute sync power for a complex, downsampled FT4 signal. include 'ft4_params.f90' parameter(NP=NMAX/NDOWN,NSS=NSPS/NDOWN) complex cd0(0:NP-1) - complex csync(4*NSS) + complex csynca(4*NSS),csyncb(4*NSS),csyncc(4*NSS),csyncd(4*NSS) complex csync2(4*NSS) complex ctwk(4*NSS) complex z1,z2,z3,z4 + complex zz1,zz2,zz3,zz4 logical first - integer icos4(0:3) - data icos4/0,1,3,2/ + integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ data first/.true./ - save first,twopi,csync,fac + save first,twopi,csynca,csyncb,csyncc,csyncd,fac p(z1)=real(z1*fac)**2 + aimag(z1*fac)**2 !Statement function for power if( first ) then twopi=8.0*atan(1.0) k=1 - phi=0.0 + phia=0.0 + phib=0.0 + phic=0.0 + phid=0.0 do i=0,3 - dphi=twopi*icos4(i)/real(NSS) + dphia=twopi*icos4a(i)/real(NSS) + dphib=twopi*icos4b(i)/real(NSS) + dphic=twopi*icos4c(i)/real(NSS) + dphid=twopi*icos4d(i)/real(NSS) do j=1,NSS - csync(k)=cmplx(cos(phi),sin(phi)) - phi=mod(phi+dphi,twopi) + csynca(k)=cmplx(cos(phia),sin(phia)) + csyncb(k)=cmplx(cos(phib),sin(phib)) + csyncc(k)=cmplx(cos(phic),sin(phic)) + csyncd(k)=cmplx(cos(phid),sin(phid)) + phia=mod(phia+dphia,twopi) + phib=mod(phib+dphib,twopi) + phic=mod(phic+dphic,twopi) + phid=mod(phid+dphid,twopi) k=k+1 enddo enddo @@ -33,18 +49,45 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) fac=1.0/(4.0*NSS) endif - sync=0 i1=i0 !four Costas arrays i2=i0+33*NSS i3=i0+66*NSS i4=i0+99*NSS - csync2=csync - if(itwk.eq.1) csync2=ctwk*csync2 !Tweak the frequency + + z1=0. + z2=0. + z3=0. + z4=0. + + if(itwk.eq.1) csync2=ctwk*csynca !Tweak the frequency if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+4*NSS-1)*conjg(csync2)) + + if(itwk.eq.1) csync2=ctwk*csyncb !Tweak the frequency if(i2.ge.0 .and. i2+4*NSS-1.le.NP-1) z2=sum(cd0(i2:i2+4*NSS-1)*conjg(csync2)) + + if(itwk.eq.1) csync2=ctwk*csyncc !Tweak the frequency if(i3.ge.0 .and. i3+4*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+4*NSS-1)*conjg(csync2)) + + if(itwk.eq.1) csync2=ctwk*csyncd !Tweak the frequency if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) z4=sum(cd0(i4:i4+4*NSS-1)*conjg(csync2)) - sync = sync + p(z1) + p(z2) + p(z3) + p(z4) + + sync = p(z1) + p(z2) + p(z3) + p(z4) + +sync2=0.0 +do i=1,4 + i1=i0+(i-1)*33*NSS + if(i.eq.1) csync2=ctwk*csynca + if(i.eq.2) csync2=ctwk*csyncb + if(i.eq.3) csync2=ctwk*csyncc + if(i.eq.4) csync2=ctwk*csyncd + z1=sum(cd0(i1 :i1+ NSS-1)*conjg(csync2( 1: NSS))) + z2=sum(cd0(i1+ NSS:i1+2*NSS-1)*conjg(csync2( NSS+1:2*NSS))) + z3=sum(cd0(i1+2*NSS:i1+3*NSS-1)*conjg(csync2(2*NSS+1:3*NSS))) + z4=sum(cd0(i1+3*NSS:i1+4*NSS-1)*conjg(csync2(3*NSS+1:4*NSS))) + sync2=sync2 + abs(z1)**2+abs(z2)**2+abs(z3)**2+abs(z4)**2+& + 2*abs(z1*conjg(z2)+z2*conjg(z3)+z3*conjg(z4)) +enddo +sync2=sync2*(fac**2) return end subroutine sync4d diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index f24628781..91ef2f83c 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -163,10 +163,10 @@ extern "C" { void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); - void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nfqso, - short int id[], int* ndecodes, char* mycall6, char* hiscall6, - int* nrx, char* line, char* ddir, int len1, int len2, int len3, - int len4, int len5); + void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nQSOProgress, + int* nfqso, short int id[], int* ndecodes, char* mycall6, + char* hiscall6, int* nrx, char* line, char* ddir, int len1, int len2, + int len3, int len4, int len5); void get_ft4msg_(int* idecode, int* nrx, char* line, int len); @@ -8659,11 +8659,12 @@ void MainWindow::ft4Data(int k) int nrx=-1; int nfa=m_wideGraph->nStartFreq(); int nfb=m_wideGraph->Fmax(); + int nQSOProgress=m_QSOProgress; QString dataDir; dataDir = m_config.writeable_data_dir ().absolutePath (); char ddir[512]; strncpy(ddir,dataDir.toLatin1(), sizeof (ddir) - 1); - ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6, + ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nfqso,id,&ndecodes,mycall6,hiscall6, &nrx,&line[0],&ddir[0],17,6,6,61,512); line[60]=0; // if(ndecodes>0) { From 60cb4a33aa8f11d6ccfea5929b9a443f32eb11c6 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 5 Feb 2019 19:53:53 -0600 Subject: [PATCH 080/367] Re-enable second sync pass. --- lib/ft4/ft4_decode.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index b24c11c91..7f4a09adb 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -124,7 +124,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! Sample rate is now 12000/16 = 750 samples/second - do isync=1,1 + do isync=1,2 if(isync.eq.1) then idfmin=-12 idfmax=12 From ecbeda5297987a95660f9475365463572f579dc9 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 7 Feb 2019 10:16:28 -0600 Subject: [PATCH 081/367] Disable sync2 calculation for now. --- lib/ft4/ft4_decode.f90 | 1 + lib/ft4/sync4d.f90 | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 7f4a09adb..4eb69dd5a 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -16,6 +16,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, character*6 hhmmss complex cd2(0:NMAX/NDOWN-1) !Complex waveform + complex cds(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(4*NSS),ctwk2(4*NSS) diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index 4a6e7e899..4d8ba2df2 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -74,20 +74,22 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync,sync2) sync = p(z1) + p(z2) + p(z3) + p(z4) sync2=0.0 -do i=1,4 - i1=i0+(i-1)*33*NSS - if(i.eq.1) csync2=ctwk*csynca - if(i.eq.2) csync2=ctwk*csyncb - if(i.eq.3) csync2=ctwk*csyncc - if(i.eq.4) csync2=ctwk*csyncd - z1=sum(cd0(i1 :i1+ NSS-1)*conjg(csync2( 1: NSS))) - z2=sum(cd0(i1+ NSS:i1+2*NSS-1)*conjg(csync2( NSS+1:2*NSS))) - z3=sum(cd0(i1+2*NSS:i1+3*NSS-1)*conjg(csync2(2*NSS+1:3*NSS))) - z4=sum(cd0(i1+3*NSS:i1+4*NSS-1)*conjg(csync2(3*NSS+1:4*NSS))) - sync2=sync2 + abs(z1)**2+abs(z2)**2+abs(z3)**2+abs(z4)**2+& - 2*abs(z1*conjg(z2)+z2*conjg(z3)+z3*conjg(z4)) -enddo -sync2=sync2*(fac**2) +!do i=1,4 +! i1=i0+(i-1)*33*NSS +! if(i.eq.1) csync2=ctwk*csynca +! if(i.eq.2) csync2=ctwk*csyncb +! if(i.eq.3) csync2=ctwk*csyncc +! if(i.eq.4) csync2=ctwk*csyncd +! z1=sum(cd0(i1 :i1+ NSS-1)*conjg(csync2( 1: NSS))) +! z2=sum(cd0(i1+ NSS:i1+2*NSS-1)*conjg(csync2( NSS+1:2*NSS))) +! z3=sum(cd0(i1+2*NSS:i1+3*NSS-1)*conjg(csync2(2*NSS+1:3*NSS))) +! z4=sum(cd0(i1+3*NSS:i1+4*NSS-1)*conjg(csync2(3*NSS+1:4*NSS))) +! sync2=sync2 + abs(z1)**2+abs(z2)**2+abs(z3)**2+abs(z4)**2+& +! 2*abs(z1*conjg(z2)+z2*conjg(z3)+z3*conjg(z4)) + & +! 2*abs(z1*conjg(z3)+z2*conjg(z4)) + & +! 2*abs(z1*conjg(z4)) +!enddo +!sync2=sync2*(fac**2) return end subroutine sync4d From cbfcb76193a0535cc53050eb949dcc6307180067 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 7 Feb 2019 18:48:38 -0600 Subject: [PATCH 082/367] AP decoding basically works. Make data_dir setting work on the Mac. --- CMakeLists.txt | 1 + lib/ft4/clockit.f90 | 4 +- lib/ft4/ft4_decode.f90 | 265 ++++++++++++--------- lib/ft4/ft4_decode.indent | 459 +++++++++++++++++++++++++++++++++++++ lib/ft4/ft4_downsample.f90 | 49 ++++ lib/ft4/ft4d.f90 | 21 +- widgets/mainwindow.cpp | 20 +- 7 files changed, 694 insertions(+), 125 deletions(-) create mode 100644 lib/ft4/ft4_decode.indent create mode 100644 lib/ft4/ft4_downsample.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 38699265c..f5cab4232 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -514,6 +514,7 @@ set (wsjt_FSRCS lib/ft4/ft4sim_mult.f90 lib/ft4/ft4d.f90 lib/ft4/ft4_decode.f90 + lib/ft4/ft4_downsample.f90 lib/77bit/my_hash.f90 lib/wsprd/osdwspr.f90 lib/ft8/osd174_91.f90 diff --git a/lib/ft4/clockit.f90 b/lib/ft4/clockit.f90 index e5b9d5bbd..17cb6ade1 100644 --- a/lib/ft4/clockit.f90 +++ b/lib/ft4/clockit.f90 @@ -102,7 +102,9 @@ subroutine clockit(dname,k) return entry clockit2(data_dir) - fname=trim(data_dir)//'/clockit.out' + l1=index(data_dir,char(0))-1 + data_dir(l1+1:l1+1)='/' + fname=data_dir(1:l1+1)//'clockit.out' return end subroutine clockit diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 4eb69dd5a..af4340901 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,18 +1,18 @@ -subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes,mycall, & - hiscall,nrx,line,data_dir) +subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & + ndecodes,mycall,hiscall,nrx,line,data_dir) use packjt77 include 'ft4_params.f90' parameter (NSS=NSPS/NDOWN) - + character message*37,msgsent*37 character c77*77 character*61 line,linex(100) character*37 decodes(100) character*512 data_dir,fname character*17 cdatetime0 - character*6 mycall,hiscall - character*6 mycall0,hiscall0 + character*12 mycall,hiscall + character*12 mycall0,hiscall0 character*6 hhmmss complex cd2(0:NMAX/NDOWN-1) !Complex waveform @@ -26,15 +26,16 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) real a(5) - real llr(2*ND),llr2(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND) + real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) real s2(0:255) real candidate(3,100) real savg(NH1),sbase(NH1) + integer apbits(58) integer nrxx(100) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) integer*2 iwave(NMAX) !Generated full-length waveform - integer*1 message77(77),rvec(77),apbits(2*ND),apmask(2*ND),cw(2*ND) + integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) integer*1 hbits(2*NN) integer graymap(0:3) integer ip(1) @@ -42,12 +43,11 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, integer naptypes(0:5,4) ! nQSOProgress, decoding pass integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) integer mrrr(19),m73(19),mrr73(19) - integer mcall(29),hcall(29) logical unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first - + data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ data icos4c/2,3,1,0/ @@ -62,9 +62,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & - 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & - 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ - save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes,mycall0,hiscall0 + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ + save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & + mycall0,hiscall0,ncontest0 call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) @@ -75,28 +76,56 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, tt=NSPS*dt !Duration of "itone" symbols (s) txt=NZ*dt !Transmission length (s) without ramp up/down twopi=8.0*atan(1.0) - h=1.0 + h=1.0 one=.false. do i=0,255 do j=0,7 if(iand(i,2**j).ne.0) one(i,j)=.true. enddo enddo + + mcq=2*mod(mcq+rvec(1:29),2)-1 + mcqfd=2*mod(mcqfd+rvec(1:29),2)-1 + mcqru=2*mod(mcqru+rvec(1:29),2)-1 + mcqtest=2*mod(mcqtest+rvec(1:29),2)-1 + mrrr=2*mod(mrrr+rvec(59:77),2)-1 + m73=2*mod(m73+rvec(59:77),2)-1 + mrr73=2*mod(mrr73+rvec(59:77),2)-1 + nappasses(0)=2 + nappasses(1)=2 + nappasses(2)=2 + nappasses(3)=2 + nappasses(4)=2 + nappasses(5)=3 + +! iaptype +!------------------------ +! 1 CQ ??? ??? (29+3=32 ap bits) +! 2 MyCall ??? ??? (29+3=32 ap bits) +! 3 MyCall DxCall ??? (58+3=61 ap bits) +! 4 MyCall DxCall RRR (77 ap bits) +! 5 MyCall DxCall 73 (77 ap bits) +! 6 MyCall DxCall RR73 (77 ap bits) + + naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) + naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 + naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 + naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 + naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 + naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 first=.false. endif if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then - message=trim(mycall)//' '//trim(hiscall)//' '//'RR73' - i3=-1 - n3=-1 - call pack77(message,i3,n3,c77) - call unpack77(c77,0,msgsent,unpk77_success) - if(message.ne.msgsent) write(*,*) 'ERROR setting AP message' - read(c77,"(77i1)") message77 - message77=mod(message77+rvec,2) - call encode174_91(message77,cw) - mcall=cw(1:29) - hcall=cw(30:58) + call ft8apset(mycall,hiscall,apbits) + if(apbits( 1).ne.99) then + apbits( 1:29)=(apbits(1:29)+1)/2 + apbits( 1:29)=2*mod(apbits( 1:29)+rvec( 1:29),2)-1 + endif + if(apbits(30).ne.99) then + apbits(30:58)=(apbits(30:58)+1)/2 + apbits(30:58)=2*mod(apbits(30:58)+rvec(30:58),2)-1 + endif mycall0=mycall hiscall0=hiscall endif @@ -110,7 +139,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, fb=nfb call clockit('getcand4',0) call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & - ncand,sbase) + ncand,sbase) call clockit('getcand4',1) ndecodes=0 @@ -140,7 +169,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, ibmin=max(0,ibest-5) ibmax=min(ibest+5,NMAX/NDOWN-1) ibstp=1 - endif + endif ibest=-1 smax=-99. idfbest=0 @@ -151,7 +180,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, call clockit('twkfreq1',0) call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) call clockit('twkfreq1',1) - + call clockit('sync4d ',0) do istart=ibmin,ibmax,ibstp call sync4d(cd2,istart,ctwk2,1,sync,sync2) !Find sync power @@ -162,7 +191,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, endif enddo call clockit('sync4d ',1) - + enddo enddo f0=f0+real(idfbest) @@ -202,13 +231,12 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, enddo nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 if(smax .lt. 0.7 .or. nsync .lt. 8) cycle - do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 if(nseq.eq.3) nsym=4 nt=2**(2*nsym) - do ks=1,NN-nsym+1,nsym !87+16=103 symbols. + do ks=1,NN-nsym+1,nsym !87+16=103 symbols. amax=-1.0 do i=0,nt-1 i1=i/64 @@ -261,7 +289,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) nsync_qual=ns1+ns2+ns3+ns4 - if(nsync_qual.lt. 20) cycle + if(nsync_qual.lt. 20) cycle scalefac=2.83 llra( 1: 58)=bmeta( 9: 66) @@ -277,24 +305,89 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, llrc(117:174)=bmetc(141:198) llrc=scalefac*llrc - do isd=1,3 - if(isd.eq.1) llr=llra - if(isd.eq.2) llr=llrb - if(isd.eq.3) llr=llrc -!llr(1:59)=1.5*scalefac*(2*apbits(1:59)-1) - apmask=0 -!apmask(1:91)=1 + apmag=maxval(abs(llra))*1.1 + npasses=3+nappasses(nQSOProgress) + do ipass=1,npasses + if(ipass.eq.1) llr=llra + if(ipass.eq.2) llr=llrb + if(ipass.eq.3) llr=llrc + if(ipass.le.3) then + apmask=0 + iaptype=0 + endif + + if(ipass .gt. 3) then + llrd=llrc + iaptype=naptypes(nQSOProgress,ipass-3) + if(iaptype.eq.1) then ! CQ or CQ TEST + apmask=0 + apmask(1:29)=1 + if(ncontest.eq.0) llrd(1:29)=apmag*mcq(1:29) + if(ncontest.eq.1) llrd(1:29)=apmag*mcqtest(1:29) + if(ncontest.eq.2) llrd(1:29)=apmag*mcqtest(1:29) + if(ncontest.eq.3) llrd(1:29)=apmag*mcqfd(1:29) + if(ncontest.eq.4) llrd(1:29)=apmag*mcqru(1:29) + if(ncontest.eq.6) llrd(1:29)=apmag*mcq(1:29) + endif + + if(iaptype.eq.2) then ! MyCall,???,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1) then + apmask(1:29)=1 + llrd(1:29)=apmag*apbits(1:29) + else if(ncontest.eq.2) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.3) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.4) then + apmask(2:29)=1 + llrd(2:29)=apmag*apbits(1:28) + else if(ncontest.eq.6) then ! ??? RR73; MyCall ??? + apmask(29:56)=1 + llrd(29:56)=apmag*apbits(1:28) + endif + endif + + if(iaptype.eq.3) then ! MyCall,DxCall,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2.or.ncontest.eq.6) then + apmask(1:58)=1 + llrd(1:58)=apmag*apbits + else if(ncontest.eq.3) then ! Field Day + apmask(1:56)=1 + llrd(1:28)=apmag*apbits(1:28) + llrd(29:56)=apmag*apbits(30:57) + else if(ncontest.eq.4) then ! RTTY RU + apmask(2:57)=1 + llrd(2:29)=apmag*apbits(1:28) + llrd(30:57)=apmag*apbits(30:57) + endif + endif + + if(iaptype.eq.5.and.ncontest.eq.6) cycle !Hound + if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then + apmask=0 + if(ncontest.le.4 .or. (ncontest.eq.6.and.iaptype.eq.6)) then + apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 + llrd(1:58)=apmag*apbits + if(iaptype.eq.4) llrd(59:77)=apmag*mrrr + if(iaptype.eq.5) llrd(59:77)=apmag*m73 + if(iaptype.eq.6) llrd(59:77)=apmag*mrr73 + else if(ncontest.eq.6.and.iaptype.eq.4) then ! Hound listens for MyCall RR73;... + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + endif + endif + + llr=llrd + endif max_iterations=40 - do ibias=0,0 - llr2=llr - if(ibias.eq.1) llr2=llr+0.4 - if(ibias.eq.2) llr2=llr-0.4 - call clockit('bpdecode',0) - call bpdecode174_91(llr2,apmask,max_iterations,message77, & - cw,nharderror,niterations) - call clockit('bpdecode',1) - if(nharderror.ge.0) exit - enddo + call clockit('bpdecode',0) + call bpdecode174_91(llr,apmask,max_iterations,message77, & + cw,nharderror,niterations) + call clockit('bpdecode',1) if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then message77=mod(message77+rvec,2) @@ -310,22 +403,24 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, if(snr.gt.0.0) then xsnr=10*log10(snr)-14.0 else - xsnr=-18.0 + xsnr=-20.0 endif - nsnr=nint(xsnr) + nsnr=nint(max(-20.0,xsnr)) freq=f0 tsig=mod(tbuf + ibest/750.0,100.0) write(line,1000) hhmmss,nsnr,tsig,nint(freq),message 1000 format(a6,i4,f5.1,i5,' + ',1x,a37) - fname=trim(data_dir)//'/all_ft4.txt' + l1=index(data_dir,char(0))-1 + data_dir(l1+1:l1+1)="/" + fname=data_dir(1:l1+1)//'all_ft4.txt' open(24,file=trim(fname),status='unknown',position='append') write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & - nharderror,nsync_qual,isd,niterations + nharderror,nsync_qual,ipass,niterations,iaptype if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & - tsig,nint(freq),message,nharderror,nsync_qual,isd, & - niterations -1002 format(a17,i4,f5.1,i5,' Rx ',a37,4i5) + tsig,nint(freq),message,nharderror,nsync_qual,ipass, & + niterations,iaptype +1002 format(a17,i4,f5.1,i5,' Rx ',a37,5i5) close(24) linex(ndecodes)=line @@ -341,7 +436,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, if((index(message,trim(mycall)//' ').eq.1) .and. & (index(message,' '//trim(hiscall)//' ').ge.4)) then if(index(message,' 559 ').gt.8) nrx=2 !### Not right ! - if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! + if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! if(index(message,' RR73 ').gt.8) nrx=4 endif nrxx(ndecodes)=nrx @@ -352,65 +447,13 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes, enddo !Sequence estimation enddo !Candidate list call clockit('ft4_deco',1) -! clockit data directory does not get set properly on the Mac. -! call clockit2(data_dir) -! call clockit('ft4_deco',101) + call clockit2(data_dir) + call clockit('ft4_deco',101) return - entry get_ft4msg(idecode,nrx,line) + entry get_ft4msg(idecode,nrx,line) line=linex(idecode) nrx=nrxx(idecode) return end subroutine ft4_decode - -subroutine ft4_downsample(iwave,f0,c) - -! Input: i*2 data in iwave() at sample rate 12000 Hz -! Output: Complex data in c(), sampled at 1200 Hz - - include 'ft4_params.f90' - parameter (NFFT2=NMAX/16) - integer*2 iwave(NMAX) - complex c(0:NMAX/NDOWN-1) - complex c1(0:NFFT2-1) - complex cx(0:NMAX/2) - real x(NMAX), window(0:NFFT2-1) - equivalence (x,cx) - logical first - data first/.true./ - save first,window - - df=12000.0/NMAX - baud=12000.0/NSPS - if(first) then - bw_transition = 0.5*baud - bw_flat = 4*baud - iwt = bw_transition / df - iwf = bw_flat / df - pi=4.0*atan(1.0) - window(0:iwt-1) = 0.5*(1+cos(pi*(/(i,i=iwt-1,0,-1)/)/iwt)) - window(iwt:iwt+iwf-1)=1.0 - window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt)/)/iwt)) - window(2*iwt+iwf:)=0.0 - iws = baud / df - window=cshift(window,iws) - first=.false. - endif - - x=iwave - call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain - i0=nint(f0/df) - c1=0. - c1(0)=cx(i0) - do i=1,NFFT2/2 - if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) - if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) - enddo - c1=c1*window/NFFT2 - call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain - c=c1(0:NMAX/NDOWN-1) - - return -end subroutine ft4_downsample - diff --git a/lib/ft4/ft4_decode.indent b/lib/ft4/ft4_decode.indent new file mode 100644 index 000000000..af4340901 --- /dev/null +++ b/lib/ft4/ft4_decode.indent @@ -0,0 +1,459 @@ +subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & + ndecodes,mycall,hiscall,nrx,line,data_dir) + + use packjt77 + include 'ft4_params.f90' + parameter (NSS=NSPS/NDOWN) + + character message*37,msgsent*37 + character c77*77 + character*61 line,linex(100) + character*37 decodes(100) + character*512 data_dir,fname + character*17 cdatetime0 + character*12 mycall,hiscall + character*12 mycall0,hiscall0 + character*6 hhmmss + + complex cd2(0:NMAX/NDOWN-1) !Complex waveform + complex cds(0:NMAX/NDOWN-1) !Complex waveform + complex cb(0:NMAX/NDOWN-1) + complex cd(0:NN*NSS-1) !Complex waveform + complex ctwk(4*NSS),ctwk2(4*NSS) + complex csymb(NSS) + complex cs(0:3,NN) + real s4(0:3,NN) + + real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) + real a(5) + real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) + real s2(0:255) + real candidate(3,100) + real savg(NH1),sbase(NH1) + + integer apbits(58) + integer nrxx(100) + integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) + integer*2 iwave(NMAX) !Generated full-length waveform + integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) + integer*1 hbits(2*NN) + integer graymap(0:3) + integer ip(1) + integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 + integer naptypes(0:5,4) ! nQSOProgress, decoding pass + integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) + integer mrrr(19),m73(19),mrr73(19) + + logical unpk77_success + logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits + logical first + + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ + data graymap/0,1,3,2/ + data first/.true./ + data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ + data mcqru/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0/ + data mcqfd/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0/ + data mcqtest/0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0/ + data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ + data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ + data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ + data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ + save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & + mycall0,hiscall0,ncontest0 + + call clockit('ft4_deco',0) + hhmmss=cdatetime0(8:13) + + if(first) then + fs=12000.0/NDOWN !Sample rate after downsampling + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + txt=NZ*dt !Transmission length (s) without ramp up/down + twopi=8.0*atan(1.0) + h=1.0 + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo + enddo + + mcq=2*mod(mcq+rvec(1:29),2)-1 + mcqfd=2*mod(mcqfd+rvec(1:29),2)-1 + mcqru=2*mod(mcqru+rvec(1:29),2)-1 + mcqtest=2*mod(mcqtest+rvec(1:29),2)-1 + mrrr=2*mod(mrrr+rvec(59:77),2)-1 + m73=2*mod(m73+rvec(59:77),2)-1 + mrr73=2*mod(mrr73+rvec(59:77),2)-1 + nappasses(0)=2 + nappasses(1)=2 + nappasses(2)=2 + nappasses(3)=2 + nappasses(4)=2 + nappasses(5)=3 + +! iaptype +!------------------------ +! 1 CQ ??? ??? (29+3=32 ap bits) +! 2 MyCall ??? ??? (29+3=32 ap bits) +! 3 MyCall DxCall ??? (58+3=61 ap bits) +! 4 MyCall DxCall RRR (77 ap bits) +! 5 MyCall DxCall 73 (77 ap bits) +! 6 MyCall DxCall RR73 (77 ap bits) + + naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) + naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 + naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 + naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 + naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 + naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 + first=.false. + endif + + if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then + call ft8apset(mycall,hiscall,apbits) + if(apbits( 1).ne.99) then + apbits( 1:29)=(apbits(1:29)+1)/2 + apbits( 1:29)=2*mod(apbits( 1:29)+rvec( 1:29),2)-1 + endif + if(apbits(30).ne.99) then + apbits(30:58)=(apbits(30:58)+1)/2 + apbits(30:58)=2*mod(apbits(30:58)+rvec(30:58),2)-1 + endif + mycall0=mycall + hiscall0=hiscall + endif + + candidate=0.0 + ncand=0 + syncmin=1.2 + maxcand=100 + + fa=nfa + fb=nfb + call clockit('getcand4',0) + call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & + ncand,sbase) + call clockit('getcand4',1) + + ndecodes=0 + do icand=1,ncand + f0=candidate(1,icand) + snr=candidate(3,icand)-1.0 + if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + call clockit('ft4_down',0) + call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol + call clockit('ft4_down',1) + + sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) + if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) +! Sample rate is now 12000/16 = 750 samples/second + do isync=1,2 + if(isync.eq.1) then + idfmin=-12 + idfmax=12 + idfstp=3 + ibmin=0 + ibmax=374 + ibstp=4 + else + idfmin=idfbest-4 + idfmax=idfbest+4 + idfstp=1 + ibmin=max(0,ibest-5) + ibmax=min(ibest+5,NMAX/NDOWN-1) + ibstp=1 + endif + ibest=-1 + smax=-99. + idfbest=0 + do idf=idfmin,idfmax,idfstp + a=0. + a(1)=real(idf) + ctwk=1. + call clockit('twkfreq1',0) + call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) + call clockit('twkfreq1',1) + + call clockit('sync4d ',0) + do istart=ibmin,ibmax,ibstp + call sync4d(cd2,istart,ctwk2,1,sync,sync2) !Find sync power + if(sync.gt.smax) then + smax=sync + ibest=istart + idfbest=idf + endif + enddo + call clockit('sync4d ',1) + + enddo + enddo + f0=f0+real(idfbest) + +!f0=1500 +!ibest=219 + call clockit('ft4down ',0) + call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 + call clockit('ft4down ',1) + sum2=sum(abs(cb)**2)/(real(NSS)*NN) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) + cd=cb(ibest:ibest+NN*NSS-1) + call clockit('four2a ',0) + do k=1,NN + i1=(k-1)*NSS + csymb=cd(i1:i1+NSS-1) + call four2a(csymb,NSS,1,-1,1) + cs(0:3,k)=csymb(1:4) + s4(0:3,k)=abs(csymb(1:4)) + enddo + call clockit('four2a ',1) + +! Sync quality check + is1=0 + is2=0 + is3=0 + is4=0 + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+33)) + if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+66)) + if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 + ip=maxloc(s4(:,k+99)) + if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 + enddo + nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 + if(smax .lt. 0.7 .or. nsync .lt. 8) cycle + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,NN-nsym+1,nsym !87+16=103 symbols. + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib.gt.2*NN) cycle + if(nsym.eq.1) then + bmeta(ipt+ib)=bm + elseif(nsym.eq.2) then + bmetb(ipt+ib)=bm + elseif(nsym.eq.4) then + bmetc(ipt+ib)=bm + endif + enddo + enddo + enddo + + call clockit('normaliz',0) + call normalizebmet(bmeta,2*NN) + call normalizebmet(bmetb,2*NN) + call normalizebmet(bmetc,2*NN) + call clockit('normaliz',1) + + hbits=0 + where(bmeta.ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) + ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) + ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) + nsync_qual=ns1+ns2+ns3+ns4 + if(nsync_qual.lt. 20) cycle + + scalefac=2.83 + llra( 1: 58)=bmeta( 9: 66) + llra( 59:116)=bmeta( 75:132) + llra(117:174)=bmeta(141:198) + llra=scalefac*llra + llrb( 1: 58)=bmetb( 9: 66) + llrb( 59:116)=bmetb( 75:132) + llrb(117:174)=bmetb(141:198) + llrb=scalefac*llrb + llrc( 1: 58)=bmetc( 9: 66) + llrc( 59:116)=bmetc( 75:132) + llrc(117:174)=bmetc(141:198) + llrc=scalefac*llrc + + apmag=maxval(abs(llra))*1.1 + npasses=3+nappasses(nQSOProgress) + do ipass=1,npasses + if(ipass.eq.1) llr=llra + if(ipass.eq.2) llr=llrb + if(ipass.eq.3) llr=llrc + if(ipass.le.3) then + apmask=0 + iaptype=0 + endif + + if(ipass .gt. 3) then + llrd=llrc + iaptype=naptypes(nQSOProgress,ipass-3) + if(iaptype.eq.1) then ! CQ or CQ TEST + apmask=0 + apmask(1:29)=1 + if(ncontest.eq.0) llrd(1:29)=apmag*mcq(1:29) + if(ncontest.eq.1) llrd(1:29)=apmag*mcqtest(1:29) + if(ncontest.eq.2) llrd(1:29)=apmag*mcqtest(1:29) + if(ncontest.eq.3) llrd(1:29)=apmag*mcqfd(1:29) + if(ncontest.eq.4) llrd(1:29)=apmag*mcqru(1:29) + if(ncontest.eq.6) llrd(1:29)=apmag*mcq(1:29) + endif + + if(iaptype.eq.2) then ! MyCall,???,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1) then + apmask(1:29)=1 + llrd(1:29)=apmag*apbits(1:29) + else if(ncontest.eq.2) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.3) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.4) then + apmask(2:29)=1 + llrd(2:29)=apmag*apbits(1:28) + else if(ncontest.eq.6) then ! ??? RR73; MyCall ??? + apmask(29:56)=1 + llrd(29:56)=apmag*apbits(1:28) + endif + endif + + if(iaptype.eq.3) then ! MyCall,DxCall,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2.or.ncontest.eq.6) then + apmask(1:58)=1 + llrd(1:58)=apmag*apbits + else if(ncontest.eq.3) then ! Field Day + apmask(1:56)=1 + llrd(1:28)=apmag*apbits(1:28) + llrd(29:56)=apmag*apbits(30:57) + else if(ncontest.eq.4) then ! RTTY RU + apmask(2:57)=1 + llrd(2:29)=apmag*apbits(1:28) + llrd(30:57)=apmag*apbits(30:57) + endif + endif + + if(iaptype.eq.5.and.ncontest.eq.6) cycle !Hound + if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then + apmask=0 + if(ncontest.le.4 .or. (ncontest.eq.6.and.iaptype.eq.6)) then + apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 + llrd(1:58)=apmag*apbits + if(iaptype.eq.4) llrd(59:77)=apmag*mrrr + if(iaptype.eq.5) llrd(59:77)=apmag*m73 + if(iaptype.eq.6) llrd(59:77)=apmag*mrr73 + else if(ncontest.eq.6.and.iaptype.eq.4) then ! Hound listens for MyCall RR73;... + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + endif + endif + + llr=llrd + endif + max_iterations=40 + call clockit('bpdecode',0) + call bpdecode174_91(llr,apmask,max_iterations,message77, & + cw,nharderror,niterations) + call clockit('bpdecode',1) + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + message77=mod(message77+rvec,2) + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) exit + ndecodes=ndecodes+1 + decodes(ndecodes)=message + if(snr.gt.0.0) then + xsnr=10*log10(snr)-14.0 + else + xsnr=-20.0 + endif + nsnr=nint(max(-20.0,xsnr)) + freq=f0 + tsig=mod(tbuf + ibest/750.0,100.0) + + write(line,1000) hhmmss,nsnr,tsig,nint(freq),message +1000 format(a6,i4,f5.1,i5,' + ',1x,a37) + l1=index(data_dir,char(0))-1 + data_dir(l1+1:l1+1)="/" + fname=data_dir(1:l1+1)//'all_ft4.txt' + open(24,file=trim(fname),status='unknown',position='append') + write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & + nharderror,nsync_qual,ipass,niterations,iaptype + if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & + tsig,nint(freq),message,nharderror,nsync_qual,ipass, & + niterations,iaptype +1002 format(a17,i4,f5.1,i5,' Rx ',a37,5i5) + close(24) + linex(ndecodes)=line + +!### Temporary: assume most recent decoded message conveys "hiscall". ### + i0=index(message,' ') + if(i0.ge.3 .and. i0.le.7) then + hiscall=message(i0+1:i0+6) + i1=index(hiscall,' ') + if(i1.gt.0) hiscall=hiscall(1:i1) + endif + nrx=-1 + if(index(message,'CQ ').eq.1) nrx=1 + if((index(message,trim(mycall)//' ').eq.1) .and. & + (index(message,' '//trim(hiscall)//' ').ge.4)) then + if(index(message,' 559 ').gt.8) nrx=2 !### Not right ! + if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! + if(index(message,' RR73 ').gt.8) nrx=4 + endif + nrxx(ndecodes)=nrx +!### + exit + + endif + enddo !Sequence estimation + enddo !Candidate list + call clockit('ft4_deco',1) + call clockit2(data_dir) + call clockit('ft4_deco',101) + return + + entry get_ft4msg(idecode,nrx,line) + line=linex(idecode) + nrx=nrxx(idecode) + return + +end subroutine ft4_decode diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 new file mode 100644 index 000000000..48368ab9b --- /dev/null +++ b/lib/ft4/ft4_downsample.f90 @@ -0,0 +1,49 @@ +subroutine ft4_downsample(iwave,f0,c) + +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 1200 Hz + + include 'ft4_params.f90' + parameter (NFFT2=NMAX/16) + integer*2 iwave(NMAX) + complex c(0:NMAX/NDOWN-1) + complex c1(0:NFFT2-1) + complex cx(0:NMAX/2) + real x(NMAX), window(0:NFFT2-1) + equivalence (x,cx) + logical first + data first/.true./ + save first,window + + df=12000.0/NMAX + baud=12000.0/NSPS + if(first) then + bw_transition = 0.5*baud + bw_flat = 4*baud + iwt = bw_transition / df + iwf = bw_flat / df + pi=4.0*atan(1.0) + window(0:iwt-1) = 0.5*(1+cos(pi*(/(i,i=iwt-1,0,-1)/)/iwt)) + window(iwt:iwt+iwf-1)=1.0 + window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt)/)/iwt)) + window(2*iwt+iwf:)=0.0 + iws = baud / df + window=cshift(window,iws) + first=.false. + endif + + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + i0=nint(f0/df) + c1=0. + c1(0)=cx(i0) + do i=1,NFFT2/2 + if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) + if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) + enddo + c1=c1*window/NFFT2 + call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain + c=c1(0:NMAX/NDOWN-1) + + return +end subroutine ft4_downsample diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 4d21a11fb..560a68824 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -8,10 +8,10 @@ program ft4d character*11 datetime character*37 decodes(100) character*16 fname - character*6 hiscall + character*12 mycall + character*12 hiscall character*80 infile character*61 line - character*6 mycall real*8 fMHz @@ -26,7 +26,7 @@ program ft4d nargs=iargc() if(nargs.lt.1) then - print*,'Usage: ft4d [-a ] [-f fMHz] file1 [file2 ...]' + print*,'Usage: ft4d [-a ] [-f fMHz] [-n nQSOProgress] file1 [file2 ...]' go to 999 endif iarg=1 @@ -42,9 +42,18 @@ program ft4d read(arg,*) fMHz iarg=iarg+2 endif + nQSOProgress=0 + if(arg(1:2).eq.'-n') then + call getarg(iarg+1,arg) + read(arg,*) nQSOProgress + iarg=iarg+2 + endif nfa=200 nfb=3000 - nQSOProgress=0 + ncontest=0 + nfqso=1500 + mycall="K9AN" + hiscall="K1JT" do ifile=iarg,nargs call getarg(ifile,infile) @@ -56,8 +65,8 @@ program ft4d cdatetime=' '//datetime close(10) - call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,nfqso,iwave,ndecodes,mycall, & - hiscall,nrx,line,data_dir) + call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & + ndecodes,mycall,hiscall,nrx,line,data_dir) do idecode=1,ndecodes call get_ft4msg(idecode,nrx,line) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 91ef2f83c..8923160f1 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -164,8 +164,8 @@ extern "C" { void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nQSOProgress, - int* nfqso, short int id[], int* ndecodes, char* mycall6, - char* hiscall6, int* nrx, char* line, char* ddir, int len1, int len2, + int* nContest, int* nfqso, short int id[], int* ndecodes, char* mycall, + char* hiscall, int* nrx, char* line, char* ddir, int len1, int len2, int len3, int len4, int len5); void get_ft4msg_(int* idecode, int* nrx, char* line, int len); @@ -8651,21 +8651,27 @@ void MainWindow::ft4Data(int k) ba=time.toString("yyMMdd_hhmmss.sss").toLatin1(); } char* cdatetime=ba.data(); - char mycall6[] ="K1JT "; - char hiscall6[]="K9AN "; + + strncpy(dec_data.params.mycall, (m_config.my_callsign()+" ").toLatin1(),12); + char mycall[13]; + strncpy(mycall,m_config.my_callsign().toLatin1(),12); + char hiscall[13]; + strncpy(hiscall,m_hisCall.toLatin1(),12); + char line[61]; int nfqso=1500; int ndecodes=0; int nrx=-1; int nfa=m_wideGraph->nStartFreq(); int nfb=m_wideGraph->Fmax(); - int nQSOProgress=m_QSOProgress; + int nQSOProgress = static_cast ( m_QSOProgress ); + int nContest = static_cast (m_config.special_op_id()); QString dataDir; dataDir = m_config.writeable_data_dir ().absolutePath (); char ddir[512]; strncpy(ddir,dataDir.toLatin1(), sizeof (ddir) - 1); - ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nfqso,id,&ndecodes,mycall6,hiscall6, - &nrx,&line[0],&ddir[0],17,6,6,61,512); + ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], + &nrx,&line[0],&ddir[0],17,12,12,61,512); line[60]=0; // if(ndecodes>0) { for (int idecode=1; idecode<=ndecodes; idecode++) { From e3830dcb27a9569a0ce0ddb3f3f30f056735931f Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 7 Feb 2019 18:52:51 -0600 Subject: [PATCH 083/367] Remove temporary indent file. --- lib/ft4/ft4_decode.indent | 459 -------------------------------------- 1 file changed, 459 deletions(-) delete mode 100644 lib/ft4/ft4_decode.indent diff --git a/lib/ft4/ft4_decode.indent b/lib/ft4/ft4_decode.indent deleted file mode 100644 index af4340901..000000000 --- a/lib/ft4/ft4_decode.indent +++ /dev/null @@ -1,459 +0,0 @@ -subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & - ndecodes,mycall,hiscall,nrx,line,data_dir) - - use packjt77 - include 'ft4_params.f90' - parameter (NSS=NSPS/NDOWN) - - character message*37,msgsent*37 - character c77*77 - character*61 line,linex(100) - character*37 decodes(100) - character*512 data_dir,fname - character*17 cdatetime0 - character*12 mycall,hiscall - character*12 mycall0,hiscall0 - character*6 hhmmss - - complex cd2(0:NMAX/NDOWN-1) !Complex waveform - complex cds(0:NMAX/NDOWN-1) !Complex waveform - complex cb(0:NMAX/NDOWN-1) - complex cd(0:NN*NSS-1) !Complex waveform - complex ctwk(4*NSS),ctwk2(4*NSS) - complex csymb(NSS) - complex cs(0:3,NN) - real s4(0:3,NN) - - real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) - real a(5) - real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) - real s2(0:255) - real candidate(3,100) - real savg(NH1),sbase(NH1) - - integer apbits(58) - integer nrxx(100) - integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) - integer*2 iwave(NMAX) !Generated full-length waveform - integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) - integer*1 hbits(2*NN) - integer graymap(0:3) - integer ip(1) - integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 - integer naptypes(0:5,4) ! nQSOProgress, decoding pass - integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) - integer mrrr(19),m73(19),mrr73(19) - - logical unpk77_success - logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits - logical first - - data icos4a/0,1,3,2/ - data icos4b/1,0,2,3/ - data icos4c/2,3,1,0/ - data icos4d/3,2,0,1/ - data graymap/0,1,3,2/ - data first/.true./ - data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ - data mcqru/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0/ - data mcqfd/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0/ - data mcqtest/0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0/ - data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ - data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ - data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ - data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & - 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & - 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ - save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & - mycall0,hiscall0,ncontest0 - - call clockit('ft4_deco',0) - hhmmss=cdatetime0(8:13) - - if(first) then - fs=12000.0/NDOWN !Sample rate after downsampling - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - txt=NZ*dt !Transmission length (s) without ramp up/down - twopi=8.0*atan(1.0) - h=1.0 - one=.false. - do i=0,255 - do j=0,7 - if(iand(i,2**j).ne.0) one(i,j)=.true. - enddo - enddo - - mcq=2*mod(mcq+rvec(1:29),2)-1 - mcqfd=2*mod(mcqfd+rvec(1:29),2)-1 - mcqru=2*mod(mcqru+rvec(1:29),2)-1 - mcqtest=2*mod(mcqtest+rvec(1:29),2)-1 - mrrr=2*mod(mrrr+rvec(59:77),2)-1 - m73=2*mod(m73+rvec(59:77),2)-1 - mrr73=2*mod(mrr73+rvec(59:77),2)-1 - nappasses(0)=2 - nappasses(1)=2 - nappasses(2)=2 - nappasses(3)=2 - nappasses(4)=2 - nappasses(5)=3 - -! iaptype -!------------------------ -! 1 CQ ??? ??? (29+3=32 ap bits) -! 2 MyCall ??? ??? (29+3=32 ap bits) -! 3 MyCall DxCall ??? (58+3=61 ap bits) -! 4 MyCall DxCall RRR (77 ap bits) -! 5 MyCall DxCall 73 (77 ap bits) -! 6 MyCall DxCall RR73 (77 ap bits) - - naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) - naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 - naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 - naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 - naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 - naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 - first=.false. - endif - - if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then - call ft8apset(mycall,hiscall,apbits) - if(apbits( 1).ne.99) then - apbits( 1:29)=(apbits(1:29)+1)/2 - apbits( 1:29)=2*mod(apbits( 1:29)+rvec( 1:29),2)-1 - endif - if(apbits(30).ne.99) then - apbits(30:58)=(apbits(30:58)+1)/2 - apbits(30:58)=2*mod(apbits(30:58)+rvec(30:58),2)-1 - endif - mycall0=mycall - hiscall0=hiscall - endif - - candidate=0.0 - ncand=0 - syncmin=1.2 - maxcand=100 - - fa=nfa - fb=nfb - call clockit('getcand4',0) - call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & - ncand,sbase) - call clockit('getcand4',1) - - ndecodes=0 - do icand=1,ncand - f0=candidate(1,icand) - snr=candidate(3,icand)-1.0 - if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle - call clockit('ft4_down',0) - call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol - call clockit('ft4_down',1) - - sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) - if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) -! Sample rate is now 12000/16 = 750 samples/second - do isync=1,2 - if(isync.eq.1) then - idfmin=-12 - idfmax=12 - idfstp=3 - ibmin=0 - ibmax=374 - ibstp=4 - else - idfmin=idfbest-4 - idfmax=idfbest+4 - idfstp=1 - ibmin=max(0,ibest-5) - ibmax=min(ibest+5,NMAX/NDOWN-1) - ibstp=1 - endif - ibest=-1 - smax=-99. - idfbest=0 - do idf=idfmin,idfmax,idfstp - a=0. - a(1)=real(idf) - ctwk=1. - call clockit('twkfreq1',0) - call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) - call clockit('twkfreq1',1) - - call clockit('sync4d ',0) - do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2,1,sync,sync2) !Find sync power - if(sync.gt.smax) then - smax=sync - ibest=istart - idfbest=idf - endif - enddo - call clockit('sync4d ',1) - - enddo - enddo - f0=f0+real(idfbest) - -!f0=1500 -!ibest=219 - call clockit('ft4down ',0) - call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 - call clockit('ft4down ',1) - sum2=sum(abs(cb)**2)/(real(NSS)*NN) - if(sum2.gt.0.0) cb=cb/sqrt(sum2) - cd=cb(ibest:ibest+NN*NSS-1) - call clockit('four2a ',0) - do k=1,NN - i1=(k-1)*NSS - csymb=cd(i1:i1+NSS-1) - call four2a(csymb,NSS,1,-1,1) - cs(0:3,k)=csymb(1:4) - s4(0:3,k)=abs(csymb(1:4)) - enddo - call clockit('four2a ',1) - -! Sync quality check - is1=0 - is2=0 - is3=0 - is4=0 - do k=1,4 - ip=maxloc(s4(:,k)) - if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 - ip=maxloc(s4(:,k+33)) - if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 - ip=maxloc(s4(:,k+66)) - if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 - ip=maxloc(s4(:,k+99)) - if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 - enddo - nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 - if(smax .lt. 0.7 .or. nsync .lt. 8) cycle - do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols - if(nseq.eq.1) nsym=1 - if(nseq.eq.2) nsym=2 - if(nseq.eq.3) nsym=4 - nt=2**(2*nsym) - do ks=1,NN-nsym+1,nsym !87+16=103 symbols. - amax=-1.0 - do i=0,nt-1 - i1=i/64 - i2=iand(i,63)/16 - i3=iand(i,15)/4 - i4=iand(i,3) - if(nsym.eq.1) then - s2(i)=abs(cs(graymap(i4),ks)) - elseif(nsym.eq.2) then - s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) - elseif(nsym.eq.4) then - s2(i)=abs(cs(graymap(i1),ks ) + & - cs(graymap(i2),ks+1) + & - cs(graymap(i3),ks+2) + & - cs(graymap(i4),ks+3) & - ) - else - print*,"Error - nsym must be 1, 2, or 4." - endif - enddo - ipt=1+(ks-1)*2 - if(nsym.eq.1) ibmax=1 - if(nsym.eq.2) ibmax=3 - if(nsym.eq.4) ibmax=7 - do ib=0,ibmax - bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & - maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) - if(ipt+ib.gt.2*NN) cycle - if(nsym.eq.1) then - bmeta(ipt+ib)=bm - elseif(nsym.eq.2) then - bmetb(ipt+ib)=bm - elseif(nsym.eq.4) then - bmetc(ipt+ib)=bm - endif - enddo - enddo - enddo - - call clockit('normaliz',0) - call normalizebmet(bmeta,2*NN) - call normalizebmet(bmetb,2*NN) - call normalizebmet(bmetc,2*NN) - call clockit('normaliz',1) - - hbits=0 - where(bmeta.ge.0) hbits=1 - ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) - ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) - ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) - nsync_qual=ns1+ns2+ns3+ns4 - if(nsync_qual.lt. 20) cycle - - scalefac=2.83 - llra( 1: 58)=bmeta( 9: 66) - llra( 59:116)=bmeta( 75:132) - llra(117:174)=bmeta(141:198) - llra=scalefac*llra - llrb( 1: 58)=bmetb( 9: 66) - llrb( 59:116)=bmetb( 75:132) - llrb(117:174)=bmetb(141:198) - llrb=scalefac*llrb - llrc( 1: 58)=bmetc( 9: 66) - llrc( 59:116)=bmetc( 75:132) - llrc(117:174)=bmetc(141:198) - llrc=scalefac*llrc - - apmag=maxval(abs(llra))*1.1 - npasses=3+nappasses(nQSOProgress) - do ipass=1,npasses - if(ipass.eq.1) llr=llra - if(ipass.eq.2) llr=llrb - if(ipass.eq.3) llr=llrc - if(ipass.le.3) then - apmask=0 - iaptype=0 - endif - - if(ipass .gt. 3) then - llrd=llrc - iaptype=naptypes(nQSOProgress,ipass-3) - if(iaptype.eq.1) then ! CQ or CQ TEST - apmask=0 - apmask(1:29)=1 - if(ncontest.eq.0) llrd(1:29)=apmag*mcq(1:29) - if(ncontest.eq.1) llrd(1:29)=apmag*mcqtest(1:29) - if(ncontest.eq.2) llrd(1:29)=apmag*mcqtest(1:29) - if(ncontest.eq.3) llrd(1:29)=apmag*mcqfd(1:29) - if(ncontest.eq.4) llrd(1:29)=apmag*mcqru(1:29) - if(ncontest.eq.6) llrd(1:29)=apmag*mcq(1:29) - endif - - if(iaptype.eq.2) then ! MyCall,???,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1) then - apmask(1:29)=1 - llrd(1:29)=apmag*apbits(1:29) - else if(ncontest.eq.2) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.3) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.4) then - apmask(2:29)=1 - llrd(2:29)=apmag*apbits(1:28) - else if(ncontest.eq.6) then ! ??? RR73; MyCall ??? - apmask(29:56)=1 - llrd(29:56)=apmag*apbits(1:28) - endif - endif - - if(iaptype.eq.3) then ! MyCall,DxCall,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2.or.ncontest.eq.6) then - apmask(1:58)=1 - llrd(1:58)=apmag*apbits - else if(ncontest.eq.3) then ! Field Day - apmask(1:56)=1 - llrd(1:28)=apmag*apbits(1:28) - llrd(29:56)=apmag*apbits(30:57) - else if(ncontest.eq.4) then ! RTTY RU - apmask(2:57)=1 - llrd(2:29)=apmag*apbits(1:28) - llrd(30:57)=apmag*apbits(30:57) - endif - endif - - if(iaptype.eq.5.and.ncontest.eq.6) cycle !Hound - if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then - apmask=0 - if(ncontest.le.4 .or. (ncontest.eq.6.and.iaptype.eq.6)) then - apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 - llrd(1:58)=apmag*apbits - if(iaptype.eq.4) llrd(59:77)=apmag*mrrr - if(iaptype.eq.5) llrd(59:77)=apmag*m73 - if(iaptype.eq.6) llrd(59:77)=apmag*mrr73 - else if(ncontest.eq.6.and.iaptype.eq.4) then ! Hound listens for MyCall RR73;... - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - endif - endif - - llr=llrd - endif - max_iterations=40 - call clockit('bpdecode',0) - call bpdecode174_91(llr,apmask,max_iterations,message77, & - cw,nharderror,niterations) - call clockit('bpdecode',1) - if(sum(message77).eq.0) cycle - if( nharderror.ge.0 ) then - message77=mod(message77+rvec,2) - write(c77,'(77i1)') message77(1:77) - call unpack77(c77,1,message,unpk77_success) - idupe=0 - do i=1,ndecodes - if(decodes(i).eq.message) idupe=1 - enddo - if(idupe.eq.1) exit - ndecodes=ndecodes+1 - decodes(ndecodes)=message - if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.0 - else - xsnr=-20.0 - endif - nsnr=nint(max(-20.0,xsnr)) - freq=f0 - tsig=mod(tbuf + ibest/750.0,100.0) - - write(line,1000) hhmmss,nsnr,tsig,nint(freq),message -1000 format(a6,i4,f5.1,i5,' + ',1x,a37) - l1=index(data_dir,char(0))-1 - data_dir(l1+1:l1+1)="/" - fname=data_dir(1:l1+1)//'all_ft4.txt' - open(24,file=trim(fname),status='unknown',position='append') - write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & - nharderror,nsync_qual,ipass,niterations,iaptype - if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & - tsig,nint(freq),message,nharderror,nsync_qual,ipass, & - niterations,iaptype -1002 format(a17,i4,f5.1,i5,' Rx ',a37,5i5) - close(24) - linex(ndecodes)=line - -!### Temporary: assume most recent decoded message conveys "hiscall". ### - i0=index(message,' ') - if(i0.ge.3 .and. i0.le.7) then - hiscall=message(i0+1:i0+6) - i1=index(hiscall,' ') - if(i1.gt.0) hiscall=hiscall(1:i1) - endif - nrx=-1 - if(index(message,'CQ ').eq.1) nrx=1 - if((index(message,trim(mycall)//' ').eq.1) .and. & - (index(message,' '//trim(hiscall)//' ').ge.4)) then - if(index(message,' 559 ').gt.8) nrx=2 !### Not right ! - if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! - if(index(message,' RR73 ').gt.8) nrx=4 - endif - nrxx(ndecodes)=nrx -!### - exit - - endif - enddo !Sequence estimation - enddo !Candidate list - call clockit('ft4_deco',1) - call clockit2(data_dir) - call clockit('ft4_deco',101) - return - - entry get_ft4msg(idecode,nrx,line) - line=linex(idecode) - nrx=nrxx(idecode) - return - -end subroutine ft4_decode From 7d70c5e9e18b524c3e7e46ef7dfbdd8b4c059a76 Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Fri, 8 Feb 2019 11:24:22 -0600 Subject: [PATCH 084/367] Still trying to make data_dir work under all conditions. This makes it work with ft4d. --- lib/ft4/clockit.f90 | 2 +- lib/ft4/ft4_decode.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/clockit.f90 b/lib/ft4/clockit.f90 index 17cb6ade1..a6306409e 100644 --- a/lib/ft4/clockit.f90 +++ b/lib/ft4/clockit.f90 @@ -103,7 +103,7 @@ subroutine clockit(dname,k) entry clockit2(data_dir) l1=index(data_dir,char(0))-1 - data_dir(l1+1:l1+1)='/' + if(l1.ge.1) data_dir(l1+1:l1+1)='/' fname=data_dir(1:l1+1)//'clockit.out' return diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index af4340901..f0bf2f41c 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -412,7 +412,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, write(line,1000) hhmmss,nsnr,tsig,nint(freq),message 1000 format(a6,i4,f5.1,i5,' + ',1x,a37) l1=index(data_dir,char(0))-1 - data_dir(l1+1:l1+1)="/" + if(l1.ge.1) data_dir(l1+1:l1+1)="/" fname=data_dir(1:l1+1)//'all_ft4.txt' open(24,file=trim(fname),status='unknown',position='append') write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & From 33498cc10f8473daefa277431668b3f684922dfa Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 8 Feb 2019 15:17:46 -0600 Subject: [PATCH 085/367] Disable AP if ncontest=5 or 6 (Fox and Hound). --- lib/ft4/ft4_decode.f90 | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index af4340901..6fd3a8fc3 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -100,13 +100,16 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, ! iaptype !------------------------ -! 1 CQ ??? ??? (29+3=32 ap bits) -! 2 MyCall ??? ??? (29+3=32 ap bits) -! 3 MyCall DxCall ??? (58+3=61 ap bits) +! 1 CQ ??? ??? (29 ap bits) +! 2 MyCall ??? ??? (29 ap bits) +! 3 MyCall DxCall ??? (58 ap bits) ! 4 MyCall DxCall RRR (77 ap bits) ! 5 MyCall DxCall 73 (77 ap bits) ! 6 MyCall DxCall RR73 (77 ap bits) - +!******** +! For this contest-oriented mode, OK to only look for RR73?? +! Currently, 2 AP passes in all Txn states except for Tx5. +!******** naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 @@ -231,6 +234,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, enddo nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 if(smax .lt. 0.7 .or. nsync .lt. 8) cycle + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols if(nseq.eq.1) nsym=1 if(nseq.eq.2) nsym=2 @@ -307,6 +311,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, apmag=maxval(abs(llra))*1.1 npasses=3+nappasses(nQSOProgress) + if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound + do ipass=1,npasses if(ipass.eq.1) llr=llra if(ipass.eq.2) llr=llrb From b415faae203a4b63047ff186300d26250985f6b0 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 8 Feb 2019 16:44:18 -0600 Subject: [PATCH 086/367] Remove char(0) from mycall and hiscall. --- lib/ft4/ft4_decode.f90 | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 6cdf01775..512aec339 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -116,9 +116,16 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 + + mycall0='' + hiscall0='' first=.false. endif + l1=index(mycall,char(0)) + if(l1.ne.0) mycall(l1:)=" " + l1=index(hiscall,char(0)) + if(l1.ne.0) hiscall(l1:)=" " if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then call ft8apset(mycall,hiscall,apbits) if(apbits( 1).ne.99) then @@ -132,7 +139,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, mycall0=mycall hiscall0=hiscall endif - candidate=0.0 ncand=0 syncmin=1.2 @@ -325,6 +331,21 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, if(ipass .gt. 3) then llrd=llrc iaptype=naptypes(nQSOProgress,ipass-3) + +! ncontest=0 : NONE +! 1 : NA_VHF +! 2 : EU_VHF +! 3 : FIELD DAY +! 4 : RTTY +! 5 : FOX +! 6 : HOUND +! +! Conditions that cause us to bail out of AP decoding + napwid=50 + if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f0-nfqso).gt.napwid) ) cycle + if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall + if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall + if(iaptype.eq.1) then ! CQ or CQ TEST apmask=0 apmask(1:29)=1 From 186482811a0ba47eab2bf17a5a04ac04304c00c4 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 9 Feb 2019 16:08:39 -0600 Subject: [PATCH 087/367] Use 91 bits for RR73 messages. --- lib/ft4/ft4_decode.f90 | 50 ++++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 512aec339..f57d5cc69 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,5 +1,5 @@ -subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & - ndecodes,mycall,hiscall,nrx,line,data_dir) +subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & + iwave,ndecodes,mycall,hiscall,nrx,line,data_dir) use packjt77 include 'ft4_params.f90' @@ -31,7 +31,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, real candidate(3,100) real savg(NH1),sbase(NH1) - integer apbits(58) + integer apbits(2*ND) integer nrxx(100) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) integer*2 iwave(NMAX) !Generated full-length waveform @@ -44,7 +44,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) integer mrrr(19),m73(19),mrr73(19) - logical unpk77_success + logical nohiscall,unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first @@ -127,15 +127,29 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, l1=index(hiscall,char(0)) if(l1.ne.0) hiscall(l1:)=" " if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then - call ft8apset(mycall,hiscall,apbits) - if(apbits( 1).ne.99) then - apbits( 1:29)=(apbits(1:29)+1)/2 - apbits( 1:29)=2*mod(apbits( 1:29)+rvec( 1:29),2)-1 - endif - if(apbits(30).ne.99) then - apbits(30:58)=(apbits(30:58)+1)/2 - apbits(30:58)=2*mod(apbits(30:58)+rvec(30:58),2)-1 + apbits=0 + apbits(1)=99 + apbits(30)=99 + + if(len(trim(mycall)) .lt. 3) go to 10 + + nohiscall=.false. + hiscall0=hiscall + if(len(trim(hiscall0)).lt.3) then + hiscall0=mycall ! use mycall for dummy hiscall - mycall won't be hashed. + nohiscall=.true. endif + message=trim(mycall)//' '//trim(hiscall0)//' RR73' + call pack77(message,i3,n3,c77) + call unpack77(c77,1,msgsent,unpk77_success) + if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 + read(c77,'(77i1)') message77 + message77=mod(message77+rvec,2) + call encode174_91(message77,cw) + apbits=2*cw-1 + if(nohiscall) apbits(30)=99 + +10 continue mycall0=mycall hiscall0=hiscall endif @@ -381,7 +395,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, apmask=0 if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2.or.ncontest.eq.6) then apmask(1:58)=1 - llrd(1:58)=apmag*apbits + llrd(1:58)=apmag*apbits(1:58) else if(ncontest.eq.3) then ! Field Day apmask(1:56)=1 llrd(1:28)=apmag*apbits(1:28) @@ -397,11 +411,13 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then apmask=0 if(ncontest.le.4 .or. (ncontest.eq.6.and.iaptype.eq.6)) then - apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 - llrd(1:58)=apmag*apbits +! apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 + apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 + llrd(1:58)=apmag*apbits(1:58) if(iaptype.eq.4) llrd(59:77)=apmag*mrrr if(iaptype.eq.5) llrd(59:77)=apmag*m73 - if(iaptype.eq.6) llrd(59:77)=apmag*mrr73 +! if(iaptype.eq.6) llrd(59:77)=apmag*mrr73 + if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) else if(ncontest.eq.6.and.iaptype.eq.4) then ! Hound listens for MyCall RR73;... apmask(1:28)=1 llrd(1:28)=apmag*apbits(1:28) @@ -417,7 +433,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, call clockit('bpdecode',1) if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then - message77=mod(message77+rvec,2) + message77=mod(message77+rvec,2) ! remove rvec scrambling write(c77,'(77i1)') message77(1:77) call unpack77(c77,1,message,unpk77_success) idupe=0 From c2cb55a68abc81bd64e54c06b46c8fb2f64357fe Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 13 Feb 2019 14:42:57 -0500 Subject: [PATCH 088/367] Reduce FT4 chunk size fro 500 to 288 ms; suppress duplicate decodes from close to chunk ends. --- lib/ft4/ft4_decode.f90 | 9 ++++++--- widgets/mainwindow.cpp | 13 ++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index f57d5cc69..366365fe7 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -5,7 +5,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & include 'ft4_params.f90' parameter (NSS=NSPS/NDOWN) - character message*37,msgsent*37 + character message*37,msgsent*37,msg0*37 character c77*77 character*61 line,linex(100) character*37 decodes(100) @@ -53,6 +53,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & data icos4c/2,3,1,0/ data icos4d/3,2,0,1/ data graymap/0,1,3,2/ + data msg0/' '/ data first/.true./ data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ data mcqru/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0/ @@ -65,7 +66,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & - mycall0,hiscall0,ncontest0 + mycall0,hiscall0,ncontest0,msg0 call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) @@ -183,7 +184,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & idfmax=12 idfstp=3 ibmin=0 - ibmax=374 + ibmax=215 ibstp=4 else idfmin=idfbest-4 @@ -440,6 +441,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & do i=1,ndecodes if(decodes(i).eq.message) idupe=1 enddo + if(ibest.le.10 .and. message.eq.msg0) idupe=1 !Already decoded if(idupe.eq.1) exit ndecodes=ndecodes+1 decodes(ndecodes)=message @@ -466,6 +468,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & 1002 format(a17,i4,f5.1,i5,' Rx ',a37,5i5) close(24) linex(ndecodes)=line + if(ibest.ge.210) msg0=message !Possible dupe candidate !### Temporary: assume most recent decoded message conveys "hiscall". ### i0=index(message,' ') diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 8923160f1..177907f12 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8612,18 +8612,14 @@ void MainWindow::write_all(QString txRx, QString message) void MainWindow::ft4Data(int k) { - static int nhsec0=-1; static bool wrapped=false; short id[60000]; - int nhsec=k/6000; - if(nhsec0>nhsec) nhsec0=-1; - if(nhsec==nhsec0) return; if(k<60000 and !wrapped) return; -//Process FT4 data at 0.5 s intervals - int j=k/6000; - j=6000*j-60000; +//Process FT4 data at 0.288 s intervals + int j=k/3456; + j=3456*j-60000; if(j<0) j+=NRING; float tbuf=j/12000.0; for(int i=0; i<60000; i++) { @@ -8707,8 +8703,7 @@ void MainWindow::ft4Data(int k) } //### } - nhsec0=nhsec; - if(m_diskData and (k > (dec_data.params.kin-6000))) m_startAnother=m_loopall; + if(m_diskData and (k > (dec_data.params.kin-3456))) m_startAnother=m_loopall; if(m_bNoMoreFiles) { MessageBox::information_message(this, tr("Just one more file to open.")); m_bNoMoreFiles=false; From 073a22125a32f81ec45f45025b19664cf78624b8 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 14 Feb 2019 14:09:22 -0500 Subject: [PATCH 089/367] Minor cleanup: debugging a problem with FT4 decoding. --- CMakeLists.txt | 1 - lib/ft4/clockit.f90 | 5 +++-- lib/ft4/ft4_decode.f90 | 9 ++++----- lib/ft4/ft4d.f90 | 12 +++++------- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f5cab4232..01f4959c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -512,7 +512,6 @@ set (wsjt_FSRCS lib/mskrtd.f90 lib/ft4/ft4sim.f90 lib/ft4/ft4sim_mult.f90 - lib/ft4/ft4d.f90 lib/ft4/ft4_decode.f90 lib/ft4/ft4_downsample.f90 lib/77bit/my_hash.f90 diff --git a/lib/ft4/clockit.f90 b/lib/ft4/clockit.f90 index a6306409e..eb3e7d8b1 100644 --- a/lib/ft4/clockit.f90 +++ b/lib/ft4/clockit.f90 @@ -14,6 +14,7 @@ subroutine clockit(dname,k) data first/.true./,eps/0.000001/,ntrace/0/ data level/0/,nmax/0/,space/' '/ data limtrace/0/,lu/29/,ntimer/1/ +! data limtrace/1000000/,lu/29/,ntimer/1/ save if(ntimer.eq.0) return @@ -56,8 +57,8 @@ subroutine clockit(dname,k) endif ntrace=ntrace+1 - if(ntrace.lt.limtrace) write(lu,1020) ntrace,dname,k,level,nparent(n) -1020 format(i5,': ',a8,3i5) + if(ntrace.lt.limtrace) write(28,1020) ntrace,dname,k,level,nparent(n) +1020 format(i8,': ',a8,3i5) return ! Write out the timer statistics diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 366365fe7..a65b96417 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -16,7 +16,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & character*6 hhmmss complex cd2(0:NMAX/NDOWN-1) !Complex waveform - complex cds(0:NMAX/NDOWN-1) !Complex waveform +! complex cds(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(4*NSS),ctwk2(4*NSS) @@ -66,8 +66,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & - mycall0,hiscall0,ncontest0,msg0 - + mycall0,hiscall0,msg0 + call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) @@ -333,7 +333,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & apmag=maxval(abs(llra))*1.1 npasses=3+nappasses(nQSOProgress) if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound - do ipass=1,npasses if(ipass.eq.1) llr=llra if(ipass.eq.2) llr=llrb @@ -480,7 +479,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & nrx=-1 if(index(message,'CQ ').eq.1) nrx=1 if((index(message,trim(mycall)//' ').eq.1) .and. & - (index(message,' '//trim(hiscall)//' ').ge.4)) then + (index(message,' '//trim(hiscall)//' ').ge.4)) then if(index(message,' 559 ').gt.8) nrx=2 !### Not right ! if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! if(index(message,' RR73 ').gt.8) nrx=4 diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 560a68824..a4d77d461 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -5,7 +5,6 @@ program ft4d character*8 arg character*17 cdatetime character*512 data_dir - character*11 datetime character*37 decodes(100) character*16 fname character*12 mycall @@ -48,9 +47,10 @@ program ft4d read(arg,*) nQSOProgress iarg=iarg+2 endif - nfa=200 - nfb=3000 - ncontest=0 + nfa=0 + nfb=4200 + ncontest=4 + ndecodes=0 nfqso=1500 mycall="K9AN" hiscall="K1JT" @@ -60,10 +60,8 @@ program ft4d j2=index(infile,'.wav') open(10,file=infile,status='old',access='stream') read(10,end=999) ihdr,iwave - read(infile(j2-4:j2-1),*) nutc - datetime=infile(j2-11:j2-1) - cdatetime=' '//datetime close(10) + cdatetime=infile(1:13)//'.000' call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & ndecodes,mycall,hiscall,nrx,line,data_dir) From 9a6c82d09bad66de7008948a51d8d312da0dd3d5 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 14 Feb 2019 14:56:02 -0500 Subject: [PATCH 090/367] Tweaks to make valgrind somewhat happier. --- lib/ft4/ft4_decode.f90 | 2 ++ lib/ft4/ft4_downsample.f90 | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index a65b96417..d49ff8906 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -141,6 +141,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & nohiscall=.true. endif message=trim(mycall)//' '//trim(hiscall0)//' RR73' + i3=-1 + n3=-1 call pack77(message,i3,n3,c77) call unpack77(c77,1,msgsent,unpk77_success) if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index 48368ab9b..37b4fbc29 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -25,7 +25,8 @@ subroutine ft4_downsample(iwave,f0,c) pi=4.0*atan(1.0) window(0:iwt-1) = 0.5*(1+cos(pi*(/(i,i=iwt-1,0,-1)/)/iwt)) window(iwt:iwt+iwf-1)=1.0 - window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt)/)/iwt)) +! window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt)/)/iwt)) + window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt-1)/)/iwt)) window(2*iwt+iwf:)=0.0 iws = baud / df window=cshift(window,iws) From 55e0e32e594fb9c4a5ff3b00b4375b02c348e443 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 14 Feb 2019 15:10:41 -0500 Subject: [PATCH 091/367] Fix ft4d so that it reads and processed full 15-second files. --- lib/ft4/ft4d.f90 | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index a4d77d461..b2c827995 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -1,21 +1,16 @@ program ft4d include 'ft4_params.f90' - character*8 arg character*17 cdatetime character*512 data_dir - character*37 decodes(100) - character*16 fname character*12 mycall character*12 hiscall character*80 infile character*61 line - real*8 fMHz - integer ihdr(11) - integer*2 iwave(NMAX) !Generated full-length waveform + integer*2 iwave(180000) !15*12000 fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) @@ -59,18 +54,23 @@ program ft4d call getarg(ifile,infile) j2=index(infile,'.wav') open(10,file=infile,status='old',access='stream') - read(10,end=999) ihdr,iwave + read(10) ihdr + npts=ihdr(11)/2 + read(10) iwave(1:npts) close(10) cdatetime=infile(1:13)//'.000' - call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,ncontest,nfqso,iwave, & - ndecodes,mycall,hiscall,nrx,line,data_dir) - - do idecode=1,ndecodes - call get_ft4msg(idecode,nrx,line) - write(*,'(a61)') line - enddo - enddo !files + nsteps=npts/3456 + do n=1,nsteps + i0=(n-1)*3456 + 1 + call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,ncontest, & + nfqso,iwave(i0),ndecodes,mycall,hiscall,nrx,line,data_dir) + do idecode=1,ndecodes + call get_ft4msg(idecode,nrx,line) + write(*,'(a61)') line + enddo + enddo !steps + enddo !files write(*,1120) 1120 format("") From e4ba9f25fd57219ea25efaf08e88bc7945c779c9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 14 Feb 2019 15:21:01 -0500 Subject: [PATCH 092/367] Process one more 3456-sample chunk in ft4d. --- lib/ft4/ft4d.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index b2c827995..d7583f3cc 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -43,7 +43,7 @@ program ft4d iarg=iarg+2 endif nfa=0 - nfb=4200 + nfb=4224 ncontest=4 ndecodes=0 nfqso=1500 @@ -60,7 +60,7 @@ program ft4d close(10) cdatetime=infile(1:13)//'.000' - nsteps=npts/3456 + nsteps=(npts-60000)/3456 + 1 do n=1,nsteps i0=(n-1)*3456 + 1 call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,ncontest, & From 6ad6d44ffa83a6ff68e64979224455bd103f5b33 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 14 Feb 2019 17:34:46 -0600 Subject: [PATCH 093/367] When doing block detection of symbols, fill in incomplete blocks using data from shorter block sizes. --- lib/ft4/ft4_decode.f90 | 4 ++++ lib/ft4/getcandidates4.f90 | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 366365fe7..36f257a60 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -301,6 +301,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & enddo enddo + bmetb(205:206)=bmeta(205:206) + bmetc(201:204)=bmetb(201:204) + bmetc(205:206)=bmeta(205:206) + call clockit('normaliz',0) call normalizebmet(bmeta,2*NN) call normalizebmet(bmetb,2*NN) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 47b08d426..424a7d297 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -27,7 +27,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! Compute symbol spectra, stepping by NSTEP steps. savg=0. tstep=NSTEP/12000.0 - df=12000.0/NFFT1 !3.125 Hz + df=12000.0/NFFT1 !5.86 Hz fac=1.0/300.0 do j=1,NHSYM ia=(j-1)*NSTEP + 1 From 6c8a204d7e3c8b0b41179842434a48271e36be2f Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 14 Feb 2019 18:54:14 -0600 Subject: [PATCH 094/367] Make sure that message77 is initialized. --- lib/ft4/ft4_decode.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index bab83b35e..fe983bb08 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -433,6 +433,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & llr=llrd endif max_iterations=40 + message77=0 call clockit('bpdecode',0) call bpdecode174_91(llr,apmask,max_iterations,message77, & cw,nharderror,niterations) From e5ea814bb935572b42b6dfbaccea5774c8cfff75 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 15 Feb 2019 08:59:41 -0500 Subject: [PATCH 095/367] Destroy FFTW plans when ft4d is finished. --- lib/ft4/ft4d.f90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index d7583f3cc..12f2fdfc3 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -72,8 +72,7 @@ program ft4d enddo !steps enddo !files - write(*,1120) -1120 format("") + call four2a(xx,-1,1,-1,1) !Destroy FFTW plans to free their memory 999 end program ft4d From 3c77b720f88e476f61f3dc7d02916a9a44f341cf Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 15 Feb 2019 09:06:41 -0500 Subject: [PATCH 096/367] Account for buffer start time in ft4d. --- lib/ft4/ft4d.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 12f2fdfc3..12aa26181 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -63,7 +63,8 @@ program ft4d nsteps=(npts-60000)/3456 + 1 do n=1,nsteps i0=(n-1)*3456 + 1 - call ft4_decode(cdatetime,0.0,nfa,nfb,nQSOProgress,ncontest, & + tbuf=(i0-1)/12000.0 + call ft4_decode(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & nfqso,iwave(i0),ndecodes,mycall,hiscall,nrx,line,data_dir) do idecode=1,ndecodes call get_ft4msg(idecode,nrx,line) From 41c22b0153be180f6b5613f8c7434e07754a16e3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 15 Feb 2019 09:38:28 -0500 Subject: [PATCH 097/367] Call fftwf_cleanup() from four2a to free all remaining fftw memory. --- lib/four2a.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/four2a.f90 b/lib/four2a.f90 index 57c7239e1..337ca15c3 100644 --- a/lib/four2a.f90 +++ b/lib/four2a.f90 @@ -19,6 +19,7 @@ subroutine four2a(a,nfft,ndim,isign,iform) ! This version of four2a makes calls to the FFTW library to do the ! actual computations. + use fftw3 parameter (NPMAX=2100) !Max numberf of stored plans parameter (NSMALL=16384) !Max size of "small" FFTs complex a(nfft) !Array to be transformed @@ -29,7 +30,6 @@ subroutine four2a(a,nfft,ndim,isign,iform) logical found_plan data nplan/0/ !Number of stored plans common/patience/npatience,nthreads !Patience and threads for FFTW plans - include 'fftw3.f90' !FFTW definitions save plan,nplan,nn,ns,nf,nl if(nfft.lt.0) go to 999 @@ -107,7 +107,7 @@ subroutine four2a(a,nfft,ndim,isign,iform) !$omp end critical(fftw) end if enddo - + call fftwf_cleanup() nplan=0 !$omp end critical(four2a) From a98e1d7f37b62e372877f1e3772aff9ca7ce43bf Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 15 Feb 2019 09:55:27 -0500 Subject: [PATCH 098/367] Minor code cleanup. --- lib/ft4/ft4_downsample.f90 | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index 37b4fbc29..ca5991346 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -25,7 +25,6 @@ subroutine ft4_downsample(iwave,f0,c) pi=4.0*atan(1.0) window(0:iwt-1) = 0.5*(1+cos(pi*(/(i,i=iwt-1,0,-1)/)/iwt)) window(iwt:iwt+iwf-1)=1.0 -! window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt)/)/iwt)) window(iwt+iwf:2*iwt+iwf-1) = 0.5*(1+cos(pi*(/(i,i=0,iwt-1)/)/iwt)) window(2*iwt+iwf:)=0.0 iws = baud / df From f014fd2a7e56332a850ba831cd8f1fdafb17931e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 20 Feb 2019 10:41:55 -0500 Subject: [PATCH 099/367] Temporarily, at least, remove the default timestamps from qDebug() messages. --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index fd510bffb..e10dc22c1 100644 --- a/main.cpp +++ b/main.cpp @@ -92,7 +92,7 @@ namespace int main(int argc, char *argv[]) { // Add timestamps to all debug messages - qSetMessagePattern ("[%{time yyyyMMdd HH:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{message}"); +// qSetMessagePattern ("[%{time yyyyMMdd HH:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{message}"); init_random_seed (); From f1e7b0c30a2f50e3759af243d80c42dbca2a191f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 20 Feb 2019 10:43:30 -0500 Subject: [PATCH 100/367] Add (temporary?) code for converting FoxQSO.txt to an ADIF log. --- widgets/mainwindow.cpp | 98 +++++++++++++++++++++++++++++++++++++++++- widgets/mainwindow.h | 11 +++++ 2 files changed, 107 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 177907f12..9767e513b 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2005,7 +2005,8 @@ void MainWindow::keyPressEvent (QKeyEvent * e) return; case Qt::Key_X: if(e->modifiers() & Qt::AltModifier) { - foxTest(); +// foxTest(); + foxLog(); return; } case Qt::Key_E: @@ -5384,6 +5385,7 @@ void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button void MainWindow::on_logQSOButton_clicked() //Log QSO button { + qDebug() << "bbb" << m_hisCall << m_hisGrid; if (!m_hisCall.size ()) { MessageBox::warning_message (this, tr ("Warning: DX Call field is empty.")); } @@ -8367,7 +8369,9 @@ list2Done: { writeFoxQSO (QString {" Log: %1 %2 %3 %4 %5"}.arg (m_hisCall).arg (m_hisGrid) .arg (m_rptSent).arg (m_rptRcvd).arg (m_lastBand)); - logQSOTimer.start(0); + qDebug() << "aaa" << hc1; +// logQSOTimer.start(0); + on_logQSOButton_clicked(); m_foxRateQueue.enqueue (now); //Add present time in seconds //to Rate queue. } @@ -8796,3 +8800,93 @@ void MainWindow::save_FT4() this, m_fnameWE, &dec_data.d2[0], nsec, m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); } + +void MainWindow::foxLog() +{ + // This is part of the "Fox-log fixup" code + QFile f("FoxQSO_XX9D_1.txt"); + if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) return; + QTextStream s(&f); + QString line; + QString msg; + QString hc1; + QString rptRcvd; + int nRx=0; + int nTx=0; + + while(!s.atEnd()) { + line=s.readLine(); + if(line.length()==0) continue; + + if(line.contains(" Sel:")) { + QStringList w=line.split(' ', QString::SkipEmptyParts); + hc1=w.at(7); // his call + m_fixupQSO[hc1].sent=w.at(8); // sent report + m_fixupQSO[hc1].grid=w.at(9); // his grid + } + + if(line.contains(" Rx:")) { + int i0=line.indexOf(" ~ ") + 4; + msg=line.mid(i0); + if(msg.left(4)!="XX9D") { + break; + } + int i1=msg.indexOf(" "); + nRx++; + hc1=msg.mid(i1+1); + int i2=hc1.indexOf(" "); + hc1=hc1.mid(0,i2); + int i3=qMax(msg.indexOf("R+"),msg.indexOf("R-")); + if(i3>8) { + m_fixupQSO[hc1].rcvd=msg.mid(i3+1,3); + } + } + + if(line.contains(" Tx")) { + int i0=line.indexOf(" Tx") + 7; + msg=line.mid(i0); + nTx++; + QStringList w=msg.split(' ', QString::SkipEmptyParts); + if(w.size()<3) continue; + if(w.at(2).left(1)=="+" or w.at(2).left(1)=="-") { + hc1=w.at(0); + m_fixupQSO[hc1].sent=w.at(2); + } + if(w.at(2)=="RR73") { + hc1=w.at(0); + loggit(hc1,line); + } + if(w.at(1)=="RR73;") { + hc1=w.at(0); + loggit(hc1,line); + } + hc1=w.at(0); + } + } +} + +void MainWindow::loggit(QString hc1, QString line) +{ + // This is part of the "Fox-log fixup" code + static int nQSO=0; + // Log a QSO with callsign hc1; + QDateTime QSO_time = QDateTime::fromString(line.left(19),"yyyy-MM-dd hh:mm:ss"); + QString sMHz=line.split(' ', QString::SkipEmptyParts).at(2); + Frequency nHz=1000000.0 * sMHz.toDouble() + 0.5; + auto const& band_name = m_config.bands()->find(nHz); + m_hisCall=hc1; + m_hisGrid=m_fixupQSO[hc1].grid; + if(m_hisGrid=="....") m_hisGrid=""; + m_rptSent=m_fixupQSO[hc1].sent; + m_rptRcvd=m_fixupQSO[hc1].rcvd; + nQSO++; + if (!m_foxLog) m_foxLog.reset (new FoxLog {&m_config}); + if (!m_foxLogWindow) on_fox_log_action_triggered (); + bool ok=m_foxLog->add_QSO (QSO_time, m_hisCall, m_hisGrid, m_rptSent, m_rptRcvd, band_name); + qDebug().noquote() << nQSO << line.left(19) << m_hisCall << m_hisGrid << m_rptSent + << m_rptRcvd << sMHz << band_name << ok; + + m_logDlg->initLogQSO (m_hisCall, m_hisGrid, m_modeTx, m_rptSent, m_rptRcvd, + QSO_time, QSO_time, nHz, m_noSuffix, "", "", + m_cabrilloLog.data ()); +} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index f97bdef32..cfb8e2a25 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -347,6 +347,7 @@ private: void auto_sequence (DecodedText const& message, unsigned start_tolerance, unsigned stop_tolerance); void hideMenus(bool b); void foxTest(); + void foxLog(); void setColorHighlighting(); NetworkAccessManager m_network_manager; @@ -634,6 +635,15 @@ private: QMap m_foxQSO; //Key = HoundCall, value = parameters for QSO in progress QMap m_loggedByFox; //Key = HoundCall, value = logged band + struct FixupQSO //Info for fixing Fox's log from file "FoxQSO.txt" + { + QString grid; //Hound's declared locator + QString sent; //Report sent to Hound + QString rcvd; //Report received from Hound + QDateTime QSO_time; + }; + QMap m_fixupQSO; //Key = HoundCall, value = info for QSO in progress + QQueue m_houndQueue; //Selected Hounds available for starting a QSO QQueue m_foxQSOinProgress; //QSOs in progress: Fox has sent a report QQueue m_foxRateQueue; @@ -752,6 +762,7 @@ private: void writeFoxQSO (QString const& msg); void FT4_writeTx(); void save_FT4(); + void loggit(QString hc1, QString line); }; extern int killbyname(const char* progName); From d5a16712104f74584a8e2ac26d475711b9dd3c3a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 21 Feb 2019 10:08:18 -0500 Subject: [PATCH 101/367] FT4 decoding interval is now 288 ms. Saving of FT4 files is somewhat rationalized. --- lib/ft4/ft4_decode.f90 | 4 +-- lib/ft4/ft4d.f90 | 7 +++-- main.cpp | 2 +- widgets/mainwindow.cpp | 64 +++++++++++++++++++++++++----------------- widgets/mainwindow.h | 3 +- 5 files changed, 48 insertions(+), 32 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index fe983bb08..8d40aa8cd 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -186,7 +186,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & idfmax=12 idfstp=3 ibmin=0 - ibmax=215 + ibmax=216 !Max DT = 216/750 = 0.288 s ibstp=4 else idfmin=idfbest-4 @@ -474,7 +474,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & 1002 format(a17,i4,f5.1,i5,' Rx ',a37,5i5) close(24) linex(ndecodes)=line - if(ibest.ge.210) msg0=message !Possible dupe candidate + if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate !### Temporary: assume most recent decoded message conveys "hiscall". ### i0=index(message,' ') diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 12aa26181..b92ff8711 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -60,12 +60,13 @@ program ft4d close(10) cdatetime=infile(1:13)//'.000' - nsteps=(npts-60000)/3456 + 1 + istep=3456 + nsteps=(npts-52800)/istep + 1 do n=1,nsteps - i0=(n-1)*3456 + 1 + i0=(n-1)*istep + 1 tbuf=(i0-1)/12000.0 call ft4_decode(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & - nfqso,iwave(i0),ndecodes,mycall,hiscall,nrx,line,data_dir) + nfqso,iwave(i0),ndecodes,mycall,hiscall,nrx,line,data_dir) do idecode=1,ndecodes call get_ft4msg(idecode,nrx,line) write(*,'(a61)') line diff --git a/main.cpp b/main.cpp index e10dc22c1..fd510bffb 100644 --- a/main.cpp +++ b/main.cpp @@ -92,7 +92,7 @@ namespace int main(int argc, char *argv[]) { // Add timestamps to all debug messages -// qSetMessagePattern ("[%{time yyyyMMdd HH:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{message}"); + qSetMessagePattern ("[%{time yyyyMMdd HH:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{message}"); init_random_seed (); diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 9767e513b..a69283989 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1460,7 +1460,7 @@ void MainWindow::dataSink(qint64 frames) // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], m_TRperiod, m_config.my_callsign(), + this, m_fnameWE, &dec_data.d2[0], m_TRperiod*12000, m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); if (m_mode=="WSPR") { QString c2name_string {m_fnameWE + ".c2"}; @@ -1519,7 +1519,7 @@ void MainWindow::startP1() p1.start(m_cmndP1); } -QString MainWindow::save_wave_file (QString const& name, short const * data, int seconds, +QString MainWindow::save_wave_file (QString const& name, short const * data, int samples, QString const& my_callsign, QString const& my_grid, QString const& mode, qint32 sub_mode, Frequency frequency, QString const& his_call, QString const& his_grid) const { @@ -1555,7 +1555,7 @@ QString MainWindow::save_wave_file (QString const& name, short const * data, int BWFFile wav {format, file_name, list_info}; if (!wav.open (BWFFile::WriteOnly) || 0 > wav.write (reinterpret_cast (data) - , sizeof (short) * seconds * format.sampleRate ())) + , sizeof (short) * samples)) { return file_name + ": " + wav.errorString (); } @@ -1670,7 +1670,7 @@ void MainWindow::fastSink(qint64 frames) // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], m_TRperiod, m_config.my_callsign(), + this, m_fnameWE, &dec_data.d2[0], m_TRperiod*12000, m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); } if(m_mode!="MSK144") { @@ -4768,8 +4768,12 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie return; } if(m_mode=="FT4" and ui->cbAutoSeq->isChecked()) { - if((m_ntx==4 or m_ntx==5) and !m_diskData) logQSOTimer.start(0); // Log the QSO + if((m_ntx==4 or m_ntx==5) and !m_diskData) { + save_FT4(); + logQSOTimer.start(0); // Log the QSO + } if((m_ntx==3 and ui->cbFirst->isChecked()) or m_ntx==4 or m_bDoubleClicked) { + QThread::msleep(600); //Wait a bit. ### Is this a good idea??? ### ft4_tx(m_ntx); } } @@ -5385,7 +5389,6 @@ void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button void MainWindow::on_logQSOButton_clicked() //Log QSO button { - qDebug() << "bbb" << m_hisCall << m_hisGrid; if (!m_hisCall.size ()) { MessageBox::warning_message (this, tr ("Warning: DX Call field is empty.")); } @@ -8369,8 +8372,6 @@ list2Done: { writeFoxQSO (QString {" Log: %1 %2 %3 %4 %5"}.arg (m_hisCall).arg (m_hisGrid) .arg (m_rptSent).arg (m_rptRcvd).arg (m_lastBand)); - qDebug() << "aaa" << hc1; -// logQSOTimer.start(0); on_logQSOButton_clicked(); m_foxRateQueue.enqueue (now); //Add present time in seconds //to Rate queue. @@ -8616,14 +8617,22 @@ void MainWindow::write_all(QString txRx, QString message) void MainWindow::ft4Data(int k) { + static int nhsec0=-1; static bool wrapped=false; short id[60000]; + const int istep=3456; - if(k<60000 and !wrapped) return; + if(knhsec) nhsec0=-1; + if(nhsec==nhsec0) return; -//Process FT4 data at 0.288 s intervals - int j=k/3456; - j=3456*j-60000; +// if(k<60000 and !wrapped) return; + if(k<52800 and !wrapped) return; + +//Process FT4 data at intervals of istep/12000.0 seconds + int j=k/istep; + j=istep*j-52800; if(j<0) j+=NRING; float tbuf=j/12000.0; for(int i=0; i<60000; i++) { @@ -8635,9 +8644,10 @@ void MainWindow::ft4Data(int k) } } if(j>60000) wrapped=false; + if(((k-m_kin0)/12000.0 > 15.0) and !m_diskData) save_FT4(); if(k>=NRING) { - if(m_saveAll) save_FT4(); + if(m_saveAll and !m_diskData) save_FT4(); //Wrap the ring buffer pointer k=k-NRING; dec_data.params.kin=k; @@ -8673,7 +8683,6 @@ void MainWindow::ft4Data(int k) ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], &nrx,&line[0],&ddir[0],17,12,12,61,512); line[60]=0; -// if(ndecodes>0) { for (int idecode=1; idecode<=ndecodes; idecode++) { get_ft4msg_(&idecode,&nrx,&line[0],61); line[60]=0; @@ -8707,7 +8716,8 @@ void MainWindow::ft4Data(int k) } //### } - if(m_diskData and (k > (dec_data.params.kin-3456))) m_startAnother=m_loopall; + nhsec0=nhsec; + if(m_diskData and (k > (dec_data.params.kin-istep))) m_startAnother=m_loopall; if(m_bNoMoreFiles) { MessageBox::information_message(this, tr("Just one more file to open.")); m_bNoMoreFiles=false; @@ -8743,7 +8753,6 @@ void MainWindow::ft4_tx(int ntx) int n=t.size(); m_xSent=t.at(n-2) + " " + t.at(n-1); } - auto_tx_mode(true); //Enable Tx icw[0]=0; g_iptt = 1; @@ -8753,7 +8762,7 @@ void MainWindow::ft4_tx(int ntx) m_tx_when_ready = true; qint64 ms=QDateTime::currentMSecsSinceEpoch(); m_modulator->set_ms0(ms); - FT4_TxTimer.start(5000); //Slightly more than FT4 transmission length + FT4_TxTimer.start(4600); //Slightly more than FT4 transmission length if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); @@ -8779,7 +8788,7 @@ void MainWindow::ft4_tx(int ntx) } m_dateTimeQSOOn=QDateTime::currentDateTimeUtc(); if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); - if(m_saveAll) save_FT4(); + if(m_saveAll and !m_diskData) save_FT4(); } void MainWindow::FT4_writeTx() @@ -8789,16 +8798,21 @@ void MainWindow::FT4_writeTx() void MainWindow::save_FT4() { - int nsec=(dec_data.params.kin + 3456)/12000; - if(nsec<5) return; //Saved data must be at least 5 seconds long. + double tsec=(dec_data.params.kin - m_kin0)/12000.0; + if(tsec<4.4) return; //Saved data must be at least 4.4 seconds long. auto time = QDateTime::currentDateTimeUtc (); QString t=time.toString("yyMMdd_hhmmss"); m_fnameWE=m_config.save_directory().absoluteFilePath(t); + // The following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread + int nsamples=dec_data.params.kin - m_kin0 + 1; m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], nsec, m_config.my_callsign(), - m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); + this, m_fnameWE, &dec_data.d2[m_kin0], nsamples, m_config.my_callsign(), + m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, + m_hisGrid))); + + m_kin0=dec_data.params.kin; } void MainWindow::foxLog() @@ -8882,9 +8896,9 @@ void MainWindow::loggit(QString hc1, QString line) nQSO++; if (!m_foxLog) m_foxLog.reset (new FoxLog {&m_config}); if (!m_foxLogWindow) on_fox_log_action_triggered (); - bool ok=m_foxLog->add_QSO (QSO_time, m_hisCall, m_hisGrid, m_rptSent, m_rptRcvd, band_name); - qDebug().noquote() << nQSO << line.left(19) << m_hisCall << m_hisGrid << m_rptSent - << m_rptRcvd << sMHz << band_name << ok; + m_foxLog->add_QSO (QSO_time, m_hisCall, m_hisGrid, m_rptSent, m_rptRcvd, band_name); +// qDebug().noquote() << nQSO << line.left(19) << m_hisCall << m_hisGrid << m_rptSent +// << m_rptRcvd << sMHz << band_name; m_logDlg->initLogQSO (m_hisCall, m_hisGrid, m_modeTx, m_rptSent, m_rptRcvd, QSO_time, QSO_time, nHz, m_noSuffix, "", "", diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index cfb8e2a25..b54193815 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -467,6 +467,7 @@ private: qint32 m_tFoxTxSinceCQ=999; //Fox Tx cycles since most recent CQ qint32 m_nFoxFreq; //Audio freq at which Hound received a call from Fox qint32 m_nSentFoxRrpt=0; //Serial number for next R+rpt Hound will send to Fox + qint32 m_kin0=0; bool m_btxok; //True if OK to transmit bool m_diskData; @@ -726,7 +727,7 @@ private: QString save_wave_file (QString const& name , short const * data - , int seconds + , int samples , QString const& my_callsign , QString const& my_grid , QString const& mode From 57a20f838f638ae2ee9d778ef41ea6a750a1cad3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 21 Feb 2019 10:24:58 -0500 Subject: [PATCH 102/367] Remove the code that builds an ADIF file from FoxQSO.txt. --- widgets/mainwindow.cpp | 91 ------------------------------------------ widgets/mainwindow.h | 2 - 2 files changed, 93 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a69283989..eb3fc2f82 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2006,7 +2006,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) case Qt::Key_X: if(e->modifiers() & Qt::AltModifier) { // foxTest(); - foxLog(); return; } case Qt::Key_E: @@ -8814,93 +8813,3 @@ void MainWindow::save_FT4() m_kin0=dec_data.params.kin; } - -void MainWindow::foxLog() -{ - // This is part of the "Fox-log fixup" code - QFile f("FoxQSO_XX9D_1.txt"); - if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) return; - QTextStream s(&f); - QString line; - QString msg; - QString hc1; - QString rptRcvd; - int nRx=0; - int nTx=0; - - while(!s.atEnd()) { - line=s.readLine(); - if(line.length()==0) continue; - - if(line.contains(" Sel:")) { - QStringList w=line.split(' ', QString::SkipEmptyParts); - hc1=w.at(7); // his call - m_fixupQSO[hc1].sent=w.at(8); // sent report - m_fixupQSO[hc1].grid=w.at(9); // his grid - } - - if(line.contains(" Rx:")) { - int i0=line.indexOf(" ~ ") + 4; - msg=line.mid(i0); - if(msg.left(4)!="XX9D") { - break; - } - int i1=msg.indexOf(" "); - nRx++; - hc1=msg.mid(i1+1); - int i2=hc1.indexOf(" "); - hc1=hc1.mid(0,i2); - int i3=qMax(msg.indexOf("R+"),msg.indexOf("R-")); - if(i3>8) { - m_fixupQSO[hc1].rcvd=msg.mid(i3+1,3); - } - } - - if(line.contains(" Tx")) { - int i0=line.indexOf(" Tx") + 7; - msg=line.mid(i0); - nTx++; - QStringList w=msg.split(' ', QString::SkipEmptyParts); - if(w.size()<3) continue; - if(w.at(2).left(1)=="+" or w.at(2).left(1)=="-") { - hc1=w.at(0); - m_fixupQSO[hc1].sent=w.at(2); - } - if(w.at(2)=="RR73") { - hc1=w.at(0); - loggit(hc1,line); - } - if(w.at(1)=="RR73;") { - hc1=w.at(0); - loggit(hc1,line); - } - hc1=w.at(0); - } - } -} - -void MainWindow::loggit(QString hc1, QString line) -{ - // This is part of the "Fox-log fixup" code - static int nQSO=0; - // Log a QSO with callsign hc1; - QDateTime QSO_time = QDateTime::fromString(line.left(19),"yyyy-MM-dd hh:mm:ss"); - QString sMHz=line.split(' ', QString::SkipEmptyParts).at(2); - Frequency nHz=1000000.0 * sMHz.toDouble() + 0.5; - auto const& band_name = m_config.bands()->find(nHz); - m_hisCall=hc1; - m_hisGrid=m_fixupQSO[hc1].grid; - if(m_hisGrid=="....") m_hisGrid=""; - m_rptSent=m_fixupQSO[hc1].sent; - m_rptRcvd=m_fixupQSO[hc1].rcvd; - nQSO++; - if (!m_foxLog) m_foxLog.reset (new FoxLog {&m_config}); - if (!m_foxLogWindow) on_fox_log_action_triggered (); - m_foxLog->add_QSO (QSO_time, m_hisCall, m_hisGrid, m_rptSent, m_rptRcvd, band_name); -// qDebug().noquote() << nQSO << line.left(19) << m_hisCall << m_hisGrid << m_rptSent -// << m_rptRcvd << sMHz << band_name; - - m_logDlg->initLogQSO (m_hisCall, m_hisGrid, m_modeTx, m_rptSent, m_rptRcvd, - QSO_time, QSO_time, nHz, m_noSuffix, "", "", - m_cabrilloLog.data ()); -} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index b54193815..db732e053 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -347,7 +347,6 @@ private: void auto_sequence (DecodedText const& message, unsigned start_tolerance, unsigned stop_tolerance); void hideMenus(bool b); void foxTest(); - void foxLog(); void setColorHighlighting(); NetworkAccessManager m_network_manager; @@ -763,7 +762,6 @@ private: void writeFoxQSO (QString const& msg); void FT4_writeTx(); void save_FT4(); - void loggit(QString hc1, QString line); }; extern int killbyname(const char* progName); From aeddaeab9eae660ff53e28a562cb94f0b9e1e94e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 21 Feb 2019 12:10:27 -0500 Subject: [PATCH 103/367] FT4 now transmits a waveform generated from Gaussian-filtered frequency changes. --- Modulator.cpp | 10 +++++++--- widgets/mainwindow.cpp | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Modulator.cpp b/Modulator.cpp index c80889a7d..0b1b9a929 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -51,6 +51,9 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; +// qDebug() << "ModStart" << symbolsLength << framesPerSymbol +// << frequency << toneSpacing; + if(m_state != Idle) stop (); m_quickClose = false; @@ -90,7 +93,7 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } if((symbolsLength==103 or symbolsLength==105) and framesPerSymbol==512 - and toneSpacing==12000.0/512.0) { + and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) { //### FT4 parameters delay_ms=100; mstr=5000; @@ -300,8 +303,9 @@ qint64 Modulator::readData (char * data, qint64 maxSize) //Here's where we transmit from a precomputed wave[] array: if(m_toneSpacing < 0) sample=qRound(m_amp*foxcom_.wave[m_ic]); - -// if(m_ic < 100) qDebug() << "Mod C" << m_ic << m_amp << foxcom_.wave[m_ic] << sample; +// if(m_ic < 10) qDebug() << "Mod Tx" << m_ic << m_amp +// << foxcom_.wave[m_ic] << sample +// << m_toneSpacing; samples = load(postProcessSample(sample), samples); ++framesGenerated; diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index eb3fc2f82..616c8d257 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -102,6 +102,9 @@ extern "C" { void genft4_(char* msg, int* ichk, char* msgsent, int itone[], fortran_charlen_t, fortran_charlen_t); + void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, + float wave[], int* nwave); + void gen4_(char* msg, int* ichk, char* msgsent, int itone[], int* itext, fortran_charlen_t, fortran_charlen_t); @@ -6869,8 +6872,8 @@ void MainWindow::transmit (double snr) } if (m_modeTx == "FT4") { - toneSpacing=12000.0/512.0; -// if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1; +// toneSpacing=12000.0/512.0; //Generate Tx waveform from itone[] array + toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform. Q_EMIT sendMessage (NUM_FT4_SYMBOLS, 512.0, ui->TxFreqSpinBox->value() - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel (), @@ -8757,6 +8760,14 @@ void MainWindow::ft4_tx(int ntx) g_iptt = 1; setRig (); setXIT (ui->TxFreqSpinBox->value ()); + + int nsym=103; + int nsps=4*512; + float fsample=48000.0; + float f0=ui->TxFreqSpinBox->value() - m_XIT; + int nwave=(nsym+2)*nsps; + gen_ft4wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,&nwave); + Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT m_tx_when_ready = true; qint64 ms=QDateTime::currentMSecsSinceEpoch(); From 1acb5d5d999742ee23c4844819694a9f7db23041 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 21 Feb 2019 15:48:02 -0600 Subject: [PATCH 104/367] Add routines needed to test FT8 with GFSK pulses. --- CMakeLists.txt | 5 ++ lib/ft8/ft8sim_gfsk.f90 | 129 ++++++++++++++++++++++++++++++++++++++++ lib/ft8/gen_ft8wave.f90 | 63 ++++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 lib/ft8/ft8sim_gfsk.f90 create mode 100644 lib/ft8/gen_ft8wave.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 01f4959c4..dbb70f147 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -456,6 +456,7 @@ set (wsjt_FSRCS lib/ft8.f90 lib/ft8dec.f90 lib/ft8/ft8sim.f90 + lib/ft8/ft8sim_gfsk.f90 lib/gen4.f90 lib/gen65.f90 lib/gen9.f90 @@ -465,6 +466,7 @@ set (wsjt_FSRCS lib/genmsk40.f90 lib/ft4/genft4.f90 lib/ft4/gen_ft4wave.f90 + lib/ft8/gen_ft8wave.f90 lib/genqra64.f90 lib/ft8/genft8refsig.f90 lib/genwspr.f90 @@ -1265,6 +1267,9 @@ target_link_libraries (ft8 wsjt_fort wsjt_cxx) add_executable (ft8sim lib/ft8/ft8sim.f90 wsjtx.rc) target_link_libraries (ft8sim wsjt_fort wsjt_cxx) +add_executable (ft8sim_gfsk lib/ft8/ft8sim_gfsk.f90 wsjtx.rc) +target_link_libraries (ft8sim_gfsk wsjt_fort wsjt_cxx) + add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc) target_link_libraries (msk144sim wsjt_fort wsjt_cxx) diff --git a/lib/ft8/ft8sim_gfsk.f90 b/lib/ft8/ft8sim_gfsk.f90 new file mode 100644 index 000000000..335e63f6b --- /dev/null +++ b/lib/ft8/ft8sim_gfsk.f90 @@ -0,0 +1,129 @@ +program ft8sim_gfsk + +! Generate simulated "type 2" ft8 files +! Output is saved to a *.wav file. + + use wavhdr + use packjt77 + include 'ft8_params.f90' !Set various constants + parameter (NWAVE=(NN+2)*NSPS) + type(hdr) h !Header for .wav file + character arg*12,fname*17 + character msg37*37,msgsent37*37 + character c77*77 + complex c0(0:NMAX-1) + complex c(0:NMAX-1) + complex cwave(0:NWAVE-1) + real wave(NMAX) + integer itone(NN) + integer*1 msgbits(77) + integer*2 iwave(NMAX) !Generated full-length waveform + +! Get command-line argument(s) + nargs=iargc() + if(nargs.ne.7) then + print*,'Usage: ft8sim "message" f0 DT fdop del nfiles snr' + print*,'Examples: ft8sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 10 -18' + print*,' ft8sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 10 -18' + print*,' ft8sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 25 1 -10' + go to 999 + endif + call getarg(1,msg37) !Message to be transmitted + call getarg(2,arg) + read(arg,*) f0 !Frequency (only used for single-signal) + call getarg(3,arg) + read(arg,*) xdt !Time offset from nominal (s) + call getarg(4,arg) + read(arg,*) fspread !Watterson frequency spread (Hz) + call getarg(5,arg) + read(arg,*) delay !Watterson delay (ms) + call getarg(6,arg) + read(arg,*) nfiles !Number of files + call getarg(7,arg) + read(arg,*) snrdb !SNR_2500 + + nsig=1 + if(f0.lt.100.0) then + nsig=f0 + f0=1500 + endif + + nfiles=abs(nfiles) + twopi=8.0*atan(1.0) + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + tt=NSPS*dt !Duration of symbols (s) + baud=1.0/tt !Keying rate (baud) + bw=8*baud !Occupied bandwidth (Hz) + txt=NZ*dt !Transmission length (s) + bandwidth_ratio=2500.0/(fs/2.0) + sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) + if(snrdb.gt.90.0) sig=1.0 + txt=NN*NSPS/12000.0 + + ! Source-encode, then get itone() + i3=-1 + n3=-1 + call pack77(msg37,i3,n3,c77) + call genft8(msg37,i3,n3,msgsent37,msgbits,itone) + call gen_ft8wave(itone,NN,NSPS,fs,f0,cwave,NWAVE) + + write(*,*) + write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3 + write(*,1000) f0,xdt,txt,snrdb,bw +1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, & + ' BW:',f4.1) + write(*,*) + if(i3.eq.1) then + write(*,*) ' mycall hiscall hisgrid' + write(*,'(28i1,1x,i1,1x,28i1,1x,i1,1x,i1,1x,15i1,1x,3i1)') msgbits(1:77) + else + write(*,'(a14)') 'Message bits: ' + write(*,'(77i1)') msgbits + endif + write(*,*) + write(*,'(a17)') 'Channel symbols: ' + write(*,'(79i1)') itone + write(*,*) + + call sgran() + + msg0=msg + do ifile=1,nfiles + c0=0. + c0(0:NWAVE-1)=cwave + c0=cshift(c0,-nint((xdt+0.5)/dt)) + if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,NWAVE,fs,delay,fspread) + c=sig*c0 + + wave=imag(c) + peak=maxval(abs(wave)) + nslots=1 + + if(snrdb.lt.90) then + do i=1,NMAX !Add gaussian noise at specified SNR + xnoise=gran() + wave(i)=wave(i) + xnoise + enddo + endif + + gain=100.0 + if(snrdb.lt.90.0) then + wave=gain*wave + else + datpk=maxval(abs(wave)) + fac=32766.9/datpk + wave=fac*wave + endif + if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." + iwave=nint(wave) + h=default_header(12000,NMAX) + write(fname,1102) ifile +1102 format('000000_',i6.6,'.wav') + open(10,file=fname,status='unknown',access='stream') + write(10) h,iwave !Save to *.wav file + close(10) + write(*,1110) ifile,xdt,f0,snrdb,fname +1110 format(i4,f7.2,f8.2,f7.1,2x,a17) + enddo +999 end program ft8sim_gfsk diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 new file mode 100644 index 000000000..609cb2000 --- /dev/null +++ b/lib/ft8/gen_ft8wave.f90 @@ -0,0 +1,63 @@ +subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) +! +! generate ft8 waveform using Gaussian-filtered frequency pulses. +! + + parameter(MAX_SECONDS=20) + real wave(nwave) + complex cwave(nwave) + real pulse(5760) + real dphi(0:(nsym+2)*nint(fsample)-1) + integer itone(nsym) + logical first + data first/.true./ + save pulse,first,twopi,dt,hmod + + if(nsave .gt. MAX_SECONDS*nint(fsample)) then + print*,"gen_ft8wave: ERROR - waveform length too large." + endif + + if(first) then + twopi=8.0*atan(1.0) + dt=1.0/fsample + hmod=1.0 + bt=1.0 +! Compute the frequency-smoothing pulse + do i=1,3*nsps + tt=(i-1.5*nsps)/real(nsps) + pulse(i)=gfsk_pulse(bt,tt) + enddo + first=.false. + endif + +! Compute the smoothed frequency waveform. +! Length = (nsym+2)*nsps samples, zero-padded + dphi_peak=twopi*hmod/real(nsps) + dphi=0.0 + do j=1,nsym + ib=(j-1)*nsps + ie=ib+3*nsps-1 + dphi(ib:ie) = dphi(ib:ie) + dphi_peak*pulse(1:3*nsps)*itone(j) + enddo + +! Calculate and insert the audio waveform + phi=0.0 + dphi = dphi + twopi*f0*dt !Shift frequency up by f0 + wave=0. + k=0 + do j=0,nwave-1 + k=k+1 + wave(k)=sin(phi) + cwave(k)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + +! Compute the ramp-up and ramp-down symbols + cwave(1:nsps)=cwave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + + return +end subroutine gen_ft8wave From d9c99601aeb7ca418cf15dfd63ffa9bbe0b54aef Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 21 Feb 2019 15:56:21 -0600 Subject: [PATCH 105/367] Fix bugs in gen_ft8wave.f90. --- lib/ft8/gen_ft8wave.f90 | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 609cb2000..13abd0b3f 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -7,16 +7,12 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) real wave(nwave) complex cwave(nwave) real pulse(5760) - real dphi(0:(nsym+2)*nint(fsample)-1) + real dphi(0:(nsym+2)*nsps-1) integer itone(nsym) logical first data first/.true./ save pulse,first,twopi,dt,hmod - if(nsave .gt. MAX_SECONDS*nint(fsample)) then - print*,"gen_ft8wave: ERROR - waveform length too large." - endif - if(first) then twopi=8.0*atan(1.0) dt=1.0/fsample From 574ad3840086c94bf73060797407a58d38b891a8 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Feb 2019 11:29:57 -0500 Subject: [PATCH 106/367] Fix "Tune" operation in FT4 mode. --- Modulator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modulator.cpp b/Modulator.cpp index 0b1b9a929..8811d16a3 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -302,7 +302,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) sample=qRound(m_amp*qSin(m_phi)); //Here's where we transmit from a precomputed wave[] array: - if(m_toneSpacing < 0) sample=qRound(m_amp*foxcom_.wave[m_ic]); + if(!m_tuning and (m_toneSpacing < 0)) sample=qRound(m_amp*foxcom_.wave[m_ic]); // if(m_ic < 10) qDebug() << "Mod Tx" << m_ic << m_amp // << foxcom_.wave[m_ic] << sample // << m_toneSpacing; From 25bfa3798a1900f14dee2a80e491ef69f7e54bd9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Feb 2019 13:39:39 -0500 Subject: [PATCH 107/367] Transmit FT8 using a gaussian-filtered waveform. --- lib/ft8/ft8sim_gfsk.f90 | 2 +- lib/ft8/gen_ft8wave.f90 | 29 ++++++++++++++++++++--------- widgets/mainwindow.cpp | 15 ++++++++++++++- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/lib/ft8/ft8sim_gfsk.f90 b/lib/ft8/ft8sim_gfsk.f90 index 335e63f6b..85f85910f 100644 --- a/lib/ft8/ft8sim_gfsk.f90 +++ b/lib/ft8/ft8sim_gfsk.f90 @@ -66,7 +66,7 @@ program ft8sim_gfsk n3=-1 call pack77(msg37,i3,n3,c77) call genft8(msg37,i3,n3,msgsent37,msgbits,itone) - call gen_ft8wave(itone,NN,NSPS,fs,f0,cwave,NWAVE) + call gen_ft8wave(itone,NN,NSPS,fs,f0,cwave,xjunk,1,NWAVE) !Generate complex cwave write(*,*) write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3 diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 13abd0b3f..755b3bac1 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -1,4 +1,4 @@ -subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) +subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) ! ! generate ft8 waveform using Gaussian-filtered frequency pulses. ! @@ -6,7 +6,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) parameter(MAX_SECONDS=20) real wave(nwave) complex cwave(nwave) - real pulse(5760) + real pulse(23040) real dphi(0:(nsym+2)*nsps-1) integer itone(nsym) logical first @@ -43,17 +43,28 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) k=0 do j=0,nwave-1 k=k+1 - wave(k)=sin(phi) - cwave(k)=cmplx(cos(phi),sin(phi)) + if(icmplx.eq.0) then + wave(k)=sin(phi) + else + cwave(k)=cmplx(cos(phi),sin(phi)) + endif phi=mod(phi+dphi(j),twopi) enddo ! Compute the ramp-up and ramp-down symbols - cwave(1:nsps)=cwave(1:nsps) * & - (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 - k1=(nsym+1)*nsps+1 - cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & - (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + if(icmplx.eq.0) then + wave(1:nsps)=wave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + wave(k1:k1+nsps-1)=wave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + else + cwave(1:nsps)=cwave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + endif return end subroutine gen_ft8wave diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 616c8d257..78b70229a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -102,6 +102,9 @@ extern "C" { void genft4_(char* msg, int* ichk, char* msgsent, int itone[], fortran_charlen_t, fortran_charlen_t); + void gen_ft8wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, + float xjunk[], float wave[], int* icmplx, int* nwave); + void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, float wave[], int* nwave); @@ -6861,7 +6864,17 @@ void MainWindow::transmit (double snr) } if (m_modeTx == "FT8") { - toneSpacing=12000.0/1920.0; +// toneSpacing=12000.0/1920.0; + toneSpacing=-3; + int nsym=79; + int nsps=4*1920; + float fsample=48000.0; + float f0=ui->TxFreqSpinBox->value() - m_XIT; + int icmplx=0; + int nwave=(nsym+2)*nsps; + gen_ft8wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, + foxcom_.wave,&icmplx,&nwave); + if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0; if(m_config.x4ToneSpacing()) toneSpacing=4*12000.0/1920.0; if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1; From 5d914a1eb19f22e6887e9e7ee24a8bbcc00c1822 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 22 Feb 2019 15:16:29 -0600 Subject: [PATCH 108/367] Make ft8sim_gfsk work with recent changes to gen_ft8wave.f90. --- lib/ft8/ft8sim_gfsk.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ft8/ft8sim_gfsk.f90 b/lib/ft8/ft8sim_gfsk.f90 index 85f85910f..c40ffb2fa 100644 --- a/lib/ft8/ft8sim_gfsk.f90 +++ b/lib/ft8/ft8sim_gfsk.f90 @@ -15,6 +15,7 @@ program ft8sim_gfsk complex c(0:NMAX-1) complex cwave(0:NWAVE-1) real wave(NMAX) + real xjunk(NWAVE) integer itone(NN) integer*1 msgbits(77) integer*2 iwave(NMAX) !Generated full-length waveform From 17ac99344cc58050c738ae733d328cbcd7c593a7 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 23 Feb 2019 14:18:22 -0600 Subject: [PATCH 109/367] For now, change to BT=1.5 for FT8. This commit enables the waterfall analysis window. This decreases sidelobes significantly in exchange for increased noise bandwidth. Sensitivity to weak tones will be degraded somewhat. --- lib/ft8/gen_ft8wave.f90 | 2 +- lib/symspec.f90 | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 755b3bac1..51c0033df 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -17,7 +17,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) twopi=8.0*atan(1.0) dt=1.0/fsample hmod=1.0 - bt=1.0 + bt=1.5 ! Compute the frequency-smoothing pulse do i=1,3*nsps tt=(i-1.5*nsps)/real(nsps) diff --git a/lib/symspec.f90 b/lib/symspec.f90 index 28035d2c8..be2bd296e 100644 --- a/lib/symspec.f90 +++ b/lib/symspec.f90 @@ -48,10 +48,23 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & if(nfft3.ne.nfft3z) then ! Compute new window pi=4.0*atan(1.0) - width=0.25*nsps +! width=0.25*nsps +! do i=1,nfft3 +! z=(i-nfft3/2)/width +! w3(i)=exp(-z*z) +! enddo +! Coefficients taken from equation 37 of NUSC report: +! "Some windows with very good sidelobe behavior: application to +! discrete Hilbert Transform, by Albert Nuttall" +! + a0=0.3635819 + a1=0.4891775; + a2=0.1365995; + a3=0.0106411; do i=1,nfft3 - z=(i-nfft3/2)/width - w3(i)=exp(-z*z) + w3(i)=a0-a1*cos(2*pi*(i-1)/(nfft3))+ & + a2*cos(4*pi*(i-1)/(nfft3))+ & + a3*cos(6*pi*(i-1)/(nfft3)) enddo nfft3z=nfft3 endif @@ -86,7 +99,7 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & enddo ihsym=ihsym+1 -! xc(0:nfft3-1)=w3(1:nfft3)*xc(0:nfft3-1) !Apply window w3 + xc(0:nfft3-1)=w3(1:nfft3)*xc(0:nfft3-1) !Apply window w3 call four2a(xc,nfft3,1,-1,0) !Real-to-complex FFT df3=12000.0/nfft3 !JT9-1: 0.732 Hz = 0.42 * tone spacing From ec2d5b6233516b2b7cb5797ce35a9dc6c609d757 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 25 Feb 2019 12:57:34 -0600 Subject: [PATCH 110/367] Fix the sign of one of the Nuttal window coefficients. Change BT to 2.0. --- lib/ft8/gen_ft8wave.f90 | 2 +- lib/symspec.f90 | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 51c0033df..f9665ca56 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -17,7 +17,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) twopi=8.0*atan(1.0) dt=1.0/fsample hmod=1.0 - bt=1.5 + bt=2.0 ! Compute the frequency-smoothing pulse do i=1,3*nsps tt=(i-1.5*nsps)/real(nsps) diff --git a/lib/symspec.f90 b/lib/symspec.f90 index be2bd296e..20bf4dbf1 100644 --- a/lib/symspec.f90 +++ b/lib/symspec.f90 @@ -58,11 +58,11 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & ! discrete Hilbert Transform, by Albert Nuttall" ! a0=0.3635819 - a1=0.4891775; + a1=-0.4891775; a2=0.1365995; - a3=0.0106411; + a3=-0.0106411; do i=1,nfft3 - w3(i)=a0-a1*cos(2*pi*(i-1)/(nfft3))+ & + w3(i)=a0+a1*cos(2*pi*(i-1)/(nfft3))+ & a2*cos(4*pi*(i-1)/(nfft3))+ & a3*cos(6*pi*(i-1)/(nfft3)) enddo From fdfb655b0610fdbbe12499e7891211a4e3b117c1 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 25 Feb 2019 15:04:05 -0500 Subject: [PATCH 111/367] Option to select "Low sidelobes" or "Most sensitive" for waterfall spectra. --- Configuration.cpp | 7 ++++++ Configuration.hpp | 2 ++ Configuration.ui | 56 ++++++++++++++++++++++++++++++++++++------ lib/symspec.f90 | 36 ++++++++++++--------------- widgets/mainwindow.cpp | 8 +++--- 5 files changed, 79 insertions(+), 30 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 8fcb5cee1..059c514c8 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -630,6 +630,7 @@ private: bool udpWindowToFront_; bool udpWindowRestore_; DataMode data_mode_; + bool bLowSidelobes_; bool pwrBandTxMemory_; bool pwrBandTuneMemory_; @@ -720,6 +721,7 @@ bool Configuration::accept_udp_requests () const {return m_->accept_udp_requests QString Configuration::n1mm_server_name () const {return m_->n1mm_server_name_;} auto Configuration::n1mm_server_port () const -> port_type {return m_->n1mm_server_port_;} bool Configuration::broadcast_to_n1mm () const {return m_->broadcast_to_n1mm_;} +bool Configuration::lowSidelobes() const {return m_->bLowSidelobes_;} bool Configuration::udpWindowToFront () const {return m_->udpWindowToFront_;} bool Configuration::udpWindowRestore () const {return m_->udpWindowRestore_;} Bands * Configuration::bands () {return &m_->bands_;} @@ -1285,6 +1287,8 @@ void Configuration::impl::initialize_models () ui_->udpWindowRestore->setChecked(udpWindowRestore_); ui_->calibration_intercept_spin_box->setValue (calibration_.intercept); ui_->calibration_slope_ppm_spin_box->setValue (calibration_.slope_ppm); + ui_->rbLowSidelobes->setChecked(bLowSidelobes_); + if(!bLowSidelobes_) ui_->rbMaxSensitivity->setChecked(true); if (rig_params_.ptt_port.isEmpty ()) { @@ -1476,6 +1480,7 @@ void Configuration::impl::read_settings () rig_params_.audio_source = settings_->value ("TXAudioSource", QVariant::fromValue (TransceiverFactory::TX_audio_source_front)).value (); rig_params_.ptt_port = settings_->value ("PTTport").toString (); data_mode_ = settings_->value ("DataMode", QVariant::fromValue (data_mode_none)).value (); + bLowSidelobes_ = settings_->value("LowSidelobes",true).toBool(); prompt_to_log_ = settings_->value ("PromptToLog", false).toBool (); autoLog_ = settings_->value ("AutoLog", false).toBool (); decodes_from_top_ = settings_->value ("DecodesFromTop", false).toBool (); @@ -1577,6 +1582,7 @@ void Configuration::impl::write_settings () settings_->setValue ("CATStopBits", QVariant::fromValue (rig_params_.stop_bits)); settings_->setValue ("CATHandshake", QVariant::fromValue (rig_params_.handshake)); settings_->setValue ("DataMode", QVariant::fromValue (data_mode_)); + settings_->setValue ("LowSidelobes",bLowSidelobes_); settings_->setValue ("PromptToLog", prompt_to_log_); settings_->setValue ("AutoLog", autoLog_); settings_->setValue ("DecodesFromTop", decodes_from_top_); @@ -2035,6 +2041,7 @@ void Configuration::impl::accept () watchdog_ = ui_->tx_watchdog_spin_box->value (); TX_messages_ = ui_->TX_messages_check_box->isChecked (); data_mode_ = static_cast (ui_->TX_mode_button_group->checkedId ()); + bLowSidelobes_ = ui_->rbLowSidelobes->isChecked(); save_directory_ = ui_->save_path_display_label->text (); azel_directory_ = ui_->azel_path_display_label->text (); enable_VHF_features_ = ui_->enable_VHF_features_check_box->isChecked (); diff --git a/Configuration.hpp b/Configuration.hpp index 9aa0c286b..991e126fb 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -137,6 +137,7 @@ public: bool twoPass() const; bool bFox() const; bool bHound() const; + bool bLowSidelobes() const; bool x2ToneSpacing() const; bool x4ToneSpacing() const; bool MyDx() const; @@ -152,6 +153,7 @@ public: port_type n1mm_server_port () const; bool valid_n1mm_info () const; bool broadcast_to_n1mm() const; + bool lowSidelobes() const; bool accept_udp_requests () const; bool udpWindowToFront () const; bool udpWindowRestore () const; diff --git a/Configuration.ui b/Configuration.ui index 9bc5f35aa..e2c0b3819 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -17,7 +17,7 @@ - 0 + 7 @@ -2821,6 +2821,48 @@ Right click for insert and delete options. + + + + + 0 + 50 + + + + Waterfall spectra + + + + + 10 + 20 + 91 + 17 + + + + Low sidelobes + + + true + + + + + + 120 + 20 + 92 + 17 + + + + Most sensitive + + + + @@ -3036,13 +3078,13 @@ Right click for insert and delete options. - - - - - - + + + + + + diff --git a/lib/symspec.f90 b/lib/symspec.f90 index 20bf4dbf1..78215e209 100644 --- a/lib/symspec.f90 +++ b/lib/symspec.f90 @@ -1,13 +1,14 @@ -subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & - df3,ihsym,npts8,pxdbmax) +subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,bLowSidelobes, & + nminw,pxdb,s,df3,ihsym,npts8,pxdbmax) ! Input: -! k pointer to the most recent new data -! ntrperiod T/R sequence length, minutes -! nsps samples per symbol, at 12000 Hz -! ndiskdat 0/1 to indicate if data from disk -! nb 0/1 status of noise blanker (off/on) -! nbslider NB setting, 0-100 +! k pointer to the most recent new data +! ntrperiod T/R sequence length, minutes +! nsps samples per symbol, at 12000 Hz +! bLowSidelobes true to use windowed FFTs +! ndiskdat 0/1 to indicate if data from disk +! nb 0/1 status of noise blanker (off/on) +! nbslider NB setting, 0-100 ! Output: ! pxdb raw power (0-90 dB) @@ -29,6 +30,7 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & real*4 tmp(NSMAX) complex cx(0:MAXFFT3/2) integer nch(7) + logical*1 bLowSidelobes common/spectra/syellow(NSMAX),ref(0:3456),filter(0:3456) data k0/99999999/,nfft3z/0/ @@ -48,23 +50,17 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & if(nfft3.ne.nfft3z) then ! Compute new window pi=4.0*atan(1.0) -! width=0.25*nsps -! do i=1,nfft3 -! z=(i-nfft3/2)/width -! w3(i)=exp(-z*z) -! enddo ! Coefficients taken from equation 37 of NUSC report: ! "Some windows with very good sidelobe behavior: application to ! discrete Hilbert Transform, by Albert Nuttall" -! a0=0.3635819 a1=-0.4891775; a2=0.1365995; a3=-0.0106411; do i=1,nfft3 - w3(i)=a0+a1*cos(2*pi*(i-1)/(nfft3))+ & - a2*cos(4*pi*(i-1)/(nfft3))+ & - a3*cos(6*pi*(i-1)/(nfft3)) + w3(i)=a0+a1*cos(2*pi*(i-1)/(nfft3))+ & + a2*cos(4*pi*(i-1)/(nfft3))+ & + a3*cos(6*pi*(i-1)/(nfft3)) enddo nfft3z=nfft3 endif @@ -99,10 +95,10 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb,s, & enddo ihsym=ihsym+1 - xc(0:nfft3-1)=w3(1:nfft3)*xc(0:nfft3-1) !Apply window w3 - call four2a(xc,nfft3,1,-1,0) !Real-to-complex FFT + if(bLowSidelobes) xc(0:nfft3-1)=w3(1:nfft3)*xc(0:nfft3-1) !Apply window + call four2a(xc,nfft3,1,-1,0) !Real-to-complex FFT - df3=12000.0/nfft3 !JT9-1: 0.732 Hz = 0.42 * tone spacing + df3=12000.0/nfft3 !JT9: 0.732 Hz = 0.42 * tone spacing iz=min(NSMAX,nint(5000.0/df3)) fac=(1.0/nfft3)**2 do i=1,iz diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 78b70229a..60daea9aa 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -86,8 +86,8 @@ extern "C" { //----------------------------------------------------- C and Fortran routines void symspec_(struct dec_data *, int* k, int* ntrperiod, int* nsps, int* ingain, - int* minw, float* px, float s[], float* df3, int* nhsym, int* npts8, - float *m_pxmax); + bool* bLowSidelobes, int* minw, float* px, float s[], float* df3, + int* nhsym, int* npts8, float *m_pxmax); void hspec_(short int d2[], int* k, int* nutc0, int* ntrperiod, int* nrxfreq, int* ntol, int* nContest, bool* bmsk144, bool* btrain, double const pcoeffs[], int* ingain, @@ -1364,7 +1364,9 @@ void MainWindow::dataSink(qint64 frames) int nsps=m_nsps; if(m_bFastMode) nsps=6912; int nsmo=m_wideGraph->smoothYellow()-1; - symspec_(&dec_data,&k,&trmin,&nsps,&m_inGain,&nsmo,&m_px,s,&m_df3,&m_ihsym,&m_npts8,&m_pxmax); + bool bLowSidelobes=m_config.lowSidelobes(); + symspec_(&dec_data,&k,&trmin,&nsps,&m_inGain,&bLowSidelobes,&nsmo,&m_px,s, + &m_df3,&m_ihsym,&m_npts8,&m_pxmax); if(m_mode=="WSPR") wspr_downsample_(dec_data.d2,&k); if(m_ihsym <=0) return; if(ui) ui->signal_meter_widget->setValue(m_px,m_pxmax); // Update thermometer From 37591989829f0558c3d0cf693fa7e27cd663a01f Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 25 Feb 2019 15:03:43 -0600 Subject: [PATCH 112/367] Remove ramp-up and ramp-down symbols. Instead, shape the first 1/8th of first and last real symbols. --- lib/ft8/ft8sim_gfsk.f90 | 2 +- lib/ft8/gen_ft8wave.f90 | 30 +++++++++++++++++------------- widgets/mainwindow.cpp | 2 +- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/ft8/ft8sim_gfsk.f90 b/lib/ft8/ft8sim_gfsk.f90 index c40ffb2fa..aba046cef 100644 --- a/lib/ft8/ft8sim_gfsk.f90 +++ b/lib/ft8/ft8sim_gfsk.f90 @@ -6,7 +6,7 @@ program ft8sim_gfsk use wavhdr use packjt77 include 'ft8_params.f90' !Set various constants - parameter (NWAVE=(NN+2)*NSPS) + parameter (NWAVE=NN*NSPS) type(hdr) h !Header for .wav file character arg*12,fname*17 character msg37*37,msgsent37*37 diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index f9665ca56..d4b58a426 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -27,7 +27,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) endif ! Compute the smoothed frequency waveform. -! Length = (nsym+2)*nsps samples, zero-padded +! Length = (nsym+2)*nsps samples, first and last symbols extended dphi_peak=twopi*hmod/real(nsps) dphi=0.0 do j=1,nsym @@ -35,13 +35,16 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) ie=ib+3*nsps-1 dphi(ib:ie) = dphi(ib:ie) + dphi_peak*pulse(1:3*nsps)*itone(j) enddo +! Add dummy symbols at beginning and end with tone values equal to 1st and last symbol, respectively + 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) ! Calculate and insert the audio waveform phi=0.0 dphi = dphi + twopi*f0*dt !Shift frequency up by f0 wave=0. k=0 - do j=0,nwave-1 + do j=nsps,nsps+nwave-1 !Don't include dummy symbols k=k+1 if(icmplx.eq.0) then wave(k)=sin(phi) @@ -51,19 +54,20 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) phi=mod(phi+dphi(j),twopi) enddo -! Compute the ramp-up and ramp-down symbols +! Apply envelope shaping to the first and last symbols + nramp=nint(nsps/8.0) if(icmplx.eq.0) then - wave(1:nsps)=wave(1:nsps) * & - (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 - k1=(nsym+1)*nsps+1 - wave(k1:k1+nsps-1)=wave(k1:k1+nsps-1) * & - (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + wave(1:nramp)=wave(1:nramp) * & + (1.0-cos(twopi*(/(i,i=0,nramp-1)/)/(2.0*nramp)))/2.0 + k1=nsym*nsps-nramp+1 + wave(k1:k1+nramp-1)=wave(k1:k1+nramp-1) * & + (1.0+cos(twopi*(/(i,i=0,nramp-1)/)/(2.0*nramp)))/2.0 else - cwave(1:nsps)=cwave(1:nsps) * & - (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 - k1=(nsym+1)*nsps+1 - cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & - (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + cwave(1:nramp)=cwave(1:nramp) * & + (1.0-cos(twopi*(/(i,i=0,nramp-1)/)/(2.0*nramp)))/2.0 + k1=nsym*nsps-nramp+1 + cwave(k1:k1+nramp-1)=cwave(k1:k1+nramp-1) * & + (1.0+cos(twopi*(/(i,i=0,nramp-1)/)/(2.0*nramp)))/2.0 endif return diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 78b70229a..62af345da 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -6871,7 +6871,7 @@ void MainWindow::transmit (double snr) float fsample=48000.0; float f0=ui->TxFreqSpinBox->value() - m_XIT; int icmplx=0; - int nwave=(nsym+2)*nsps; + int nwave=nsym*nsps; gen_ft8wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, foxcom_.wave,&icmplx,&nwave); From bc0b7213cdcb873c434e5fdc290751b253c7d0a9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 25 Feb 2019 18:00:12 -0500 Subject: [PATCH 113/367] Reset default Configuration tab to 0. --- Configuration.ui | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Configuration.ui b/Configuration.ui index e2c0b3819..a8f36797c 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -17,7 +17,7 @@ - 7 + 0 @@ -3078,13 +3078,13 @@ Right click for insert and delete options. - - - - - + + + + + From 1c617e2367bbb7a804aa87e99665e9f01e01c43a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 27 Feb 2019 09:34:40 -0500 Subject: [PATCH 114/367] Minor code cleanup to ft4sim.f90 and ft4sim_mult.f90. --- lib/ft4/ft4sim.f90 | 13 +++++-------- lib/ft4/ft4sim_mult.f90 | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 494b35a6e..c127769c6 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -24,10 +24,10 @@ program ft4sim ! Get command-line argument(s) nargs=iargc() if(nargs.ne.8) then - print*,'Usage: ft4sim "message" f0 DT fdop del width nfiles snr' - print*,'Examples: ft4sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18' - print*,' ft4sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 0 10 -18' - print*,' ft4sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 25 1 -10' + print*,'Usage: ft4sim "message" f0 DT fdop del nfiles snr' + print*,'Examples: ft4sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 10 -15' + print*,' ft4sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 10 -15' + print*,' ft4sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 1 -10' go to 999 endif call getarg(1,msg37) !Message to be transmitted @@ -40,10 +40,8 @@ program ft4sim call getarg(5,arg) read(arg,*) delay !Watterson delay (ms) call getarg(6,arg) - read(arg,*) width !Filter transition width (Hz) - call getarg(7,arg) read(arg,*) nfiles !Number of files - call getarg(8,arg) + call getarg(7,arg) read(arg,*) snrdb !SNR_2500 nfiles=abs(nfiles) @@ -125,7 +123,6 @@ program ft4sim wave=real(c) peak=maxval(abs(wave(ia:ib))) nslots=1 - if(width.gt.0.0) call filt8(f0,nslots,width,wave) if(snrdb.lt.90) then do i=1,NMAX !Add gaussian noise at specified SNR diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 16f7bb11c..bc696e814 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -21,8 +21,8 @@ program ft4sim_mult ! Get command-line argument(s) nargs=iargc() if(nargs.ne.2) then - print*,'Usage: ft4sim nsigs nfiles' - print*,'Example: ft4sim 20 8 ' + print*,'Usage: ft4sim_mult nsigs nfiles' + print*,'Example: ft4sim_mult 20 8 ' go to 999 endif call getarg(1,arg) From 5c7e1ba35d6975f13933aeb84f3492077fe88df6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 27 Feb 2019 09:38:59 -0500 Subject: [PATCH 115/367] Complete the code cleanup in ft4sim. --- lib/ft4/ft4sim.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index c127769c6..a8b5975a2 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -23,7 +23,7 @@ program ft4sim ! Get command-line argument(s) nargs=iargc() - if(nargs.ne.8) then + if(nargs.ne.7) then print*,'Usage: ft4sim "message" f0 DT fdop del nfiles snr' print*,'Examples: ft4sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 10 -15' print*,' ft4sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 10 -15' From 6b5131ab5ed544d15a527c7538bc1b6d8da10795 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Feb 2019 11:21:06 -0500 Subject: [PATCH 116/367] Trial changes to support messages for Slovenian Contest Club's RTTY-like contest. --- Configuration.cpp | 1 + widgets/mainwindow.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 059c514c8..ecf4c5ef1 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -209,6 +209,7 @@ namespace |LB|NU|YT|PEI |DC # District of Columbia |DX # anyone else + |SCC # Slovenia Contest Club contest ) )", QRegularExpression::CaseInsensitiveOption | QRegularExpression::ExtendedPatternSyntaxOption}; diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2a1c12e70..06b0e307a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5492,10 +5492,10 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, if (m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX (); m_dateTimeQSOOn = QDateTime {}; auto special_op = m_config.special_op_id (); - if (SpecOp::NONE < special_op && special_op < SpecOp::FOX) - { - ui->sbSerialNumber->setValue (ui->sbSerialNumber->value () + 1); - } + if (SpecOp::NONE < special_op && special_op < SpecOp::FOX && + m_config.RTTY_Exchange()!="SCC") { + ui->sbSerialNumber->setValue(ui->sbSerialNumber->value() + 1); + } m_xSent.clear (); m_xRcvd.clear (); @@ -5564,7 +5564,7 @@ void MainWindow::displayWidgets(qint64 n) j=j>>1; } b=SpecOp::EU_VHF==m_config.special_op_id() or (SpecOp::RTTY==m_config.special_op_id() and - (m_config.RTTY_Exchange()=="#" or m_config.RTTY_Exchange()=="DX")); + (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="SCC")); ui->sbSerialNumber->setVisible(b); m_lastCallsign.clear (); // ensures Tx5 is updated for new modes genStdMsgs (m_rpt, true); @@ -6292,7 +6292,7 @@ void MainWindow::on_reset_cabrillo_log_action_triggered () "They will be kept in the ADIF log file but will not be available " "for export in your Cabrillo log."))) { - ui->sbSerialNumber->setValue (1); + if(m_config.RTTY_Exchange()!="SCC") ui->sbSerialNumber->setValue(1); if (!m_cabrilloLog) m_cabrilloLog.reset (new CabrilloLog {&m_config}); m_cabrilloLog->reset (); } From 871ff3892b3a53612432d7cdf146521f0b7d73d1 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Feb 2019 11:42:28 -0500 Subject: [PATCH 117/367] Use "CQ SCC ..." for Tx6 message if RTTY RU Exch = SCC. --- widgets/mainwindow.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 06b0e307a..a304af574 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4849,12 +4849,17 @@ void MainWindow::genCQMsg () } QString t=ui->tx6->text(); - if((m_mode=="FT8" or m_mode=="MSK144") and SpecOp::NONE != m_config.special_op_id() and - t.split(" ").at(1)==m_config.my_callsign() and stdCall(m_config.my_callsign())) { + if((m_mode=="FT4" or m_mode=="FT8" or m_mode=="MSK144") and + SpecOp::NONE != m_config.special_op_id() and + t.split(" ").at(1)==m_config.my_callsign() and + stdCall(m_config.my_callsign())) { if(SpecOp::NA_VHF == m_config.special_op_id()) t="CQ TEST" + t.mid(2,-1); if(SpecOp::EU_VHF == m_config.special_op_id()) t="CQ TEST" + t.mid(2,-1); if(SpecOp::FIELD_DAY == m_config.special_op_id()) t="CQ FD" + t.mid(2,-1); - if(SpecOp::RTTY == m_config.special_op_id()) t="CQ RU" + t.mid(2,-1); + if(SpecOp::RTTY == m_config.special_op_id()) { + if(m_config.RTTY_Exchange()!="SCC") t="CQ RU" + t.mid(2,-1); + if(m_config.RTTY_Exchange()=="SCC") t="CQ SCC" + t.mid(2,-1); + } ui->tx6->setText(t); } } else { From 1786d7e8f8881ba0e5fd61f39cd69b34997fb79f Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 28 Feb 2019 21:35:48 +0000 Subject: [PATCH 118/367] Bunp version for v2.0.2 hot fix branch --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 450a98894..5019b0765 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -1,6 +1,6 @@ # Version number components set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 0) -set (WSJTX_VERSION_PATCH 1) +set (WSJTX_VERSION_PATCH 2) set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 1) # set to 1 for final release build From 9ff9dc5c42dee71460a06a2a933acaa46fb2d31c Mon Sep 17 00:00:00 2001 From: K9AN Date: Fri, 1 Mar 2019 14:36:26 -0600 Subject: [PATCH 119/367] Make wsprd Makefile work on Linux with gcc/gfortran. --- lib/wsprd/Makefile | 12 ++---- lib/wsprd/indexx.f90 | 91 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 lib/wsprd/indexx.f90 diff --git a/lib/wsprd/Makefile b/lib/wsprd/Makefile index 920407349..aef4840e0 100644 --- a/lib/wsprd/Makefile +++ b/lib/wsprd/Makefile @@ -5,7 +5,7 @@ FC = gfortran CFLAGS= -I/usr/include -Wall -Wno-missing-braces -O3 -ffast-math LDFLAGS = -L/usr/lib FFLAGS = -O2 -Wall -Wno-conversion -LIBS = -lfftw3f -lm +LIBS = -lfftw3f -lm -lgfortran # Default rules %.o: %.c $(DEPS) @@ -19,16 +19,12 @@ LIBS = -lfftw3f -lm %.o: %.F90 ${FC} ${FFLAGS} -c $< -all: wsprd wsprsim wsprd_exp +all: wsprd DEPS = wsprsim_utils.h wsprd_utils.h fano.h jelinek.h nhash.h -OBJS1 = wsprd.o wsprsim_utils.o wsprd_utils.o tab.o fano.o jelinek.o nhash.o +OBJS1 = wsprd.o wsprsim_utils.o wsprd_utils.o tab.o fano.o jelinek.o nhash.o indexx.o osdwspr.o wsprd: $(OBJS1) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS) -OBJS2 = wsprsim.o wsprsim_utils.o wsprd_utils.o tab.o fano.o nhash.o -wsprsim: $(OBJS2) - $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS) - clean: - rm *.o wsprd wsprsim + rm *.o wsprd diff --git a/lib/wsprd/indexx.f90 b/lib/wsprd/indexx.f90 new file mode 100644 index 000000000..7a35f53b8 --- /dev/null +++ b/lib/wsprd/indexx.f90 @@ -0,0 +1,91 @@ +subroutine indexx(arr,n,indx) + + parameter (M=7,NSTACK=50) + integer n,indx(n) + real arr(n) + integer i,indxt,ir,itemp,j,jstack,k,l,istack(NSTACK) + real a + + do j=1,n + indx(j)=j + enddo + + jstack=0 + l=1 + ir=n +1 if(ir-l.lt.M) then + do j=l+1,ir + indxt=indx(j) + a=arr(indxt) + do i=j-1,1,-1 + if(arr(indx(i)).le.a) goto 2 + indx(i+1)=indx(i) + enddo + i=0 +2 indx(i+1)=indxt + enddo + if(jstack.eq.0) return + + ir=istack(jstack) + l=istack(jstack-1) + jstack=jstack-2 + + else + k=(l+ir)/2 + itemp=indx(k) + indx(k)=indx(l+1) + indx(l+1)=itemp + + if(arr(indx(l+1)).gt.arr(indx(ir))) then + itemp=indx(l+1) + indx(l+1)=indx(ir) + indx(ir)=itemp + endif + + if(arr(indx(l)).gt.arr(indx(ir))) then + itemp=indx(l) + indx(l)=indx(ir) + indx(ir)=itemp + endif + + if(arr(indx(l+1)).gt.arr(indx(l))) then + itemp=indx(l+1) + indx(l+1)=indx(l) + indx(l)=itemp + endif + + i=l+1 + j=ir + indxt=indx(l) + a=arr(indxt) +3 continue + i=i+1 + if(arr(indx(i)).lt.a) goto 3 + +4 continue + j=j-1 + if(arr(indx(j)).gt.a) goto 4 + if(j.lt.i) goto 5 + itemp=indx(i) + indx(i)=indx(j) + indx(j)=itemp + goto 3 + +5 indx(l)=indx(j) + indx(j)=indxt + jstack=jstack+2 + if(jstack.gt.NSTACK) stop 'NSTACK too small in indexx' + if(ir-i+1.ge.j-l)then + istack(jstack)=ir + istack(jstack-1)=i + ir=j-1 + else + istack(jstack)=j-1 + istack(jstack-1)=l + l=i + endif + endif + goto 1 + +end subroutine indexx + From 4d5fa21821f6e27b6075649746886072b4fb9d9c Mon Sep 17 00:00:00 2001 From: K9AN Date: Fri, 1 Mar 2019 17:07:11 -0600 Subject: [PATCH 120/367] More tweaks to wsprd Makefile. --- lib/wsprd/Makefile | 13 +++++-- lib/wsprd/indexx.f90 | 91 -------------------------------------------- 2 files changed, 9 insertions(+), 95 deletions(-) delete mode 100644 lib/wsprd/indexx.f90 diff --git a/lib/wsprd/Makefile b/lib/wsprd/Makefile index aef4840e0..872f4976c 100644 --- a/lib/wsprd/Makefile +++ b/lib/wsprd/Makefile @@ -2,9 +2,9 @@ CC = gcc #CC = clang-3.5 FC = gfortran -CFLAGS= -I/usr/include -Wall -Wno-missing-braces -O3 -ffast-math +CFLAGS= -I/usr/include -Wall -Wno-missing-braces -Wno-unused-result -O3 -ffast-math LDFLAGS = -L/usr/lib -FFLAGS = -O2 -Wall -Wno-conversion +FFLAGS = -O2 -Wall -Wno-conversion LIBS = -lfftw3f -lm -lgfortran # Default rules @@ -14,7 +14,7 @@ LIBS = -lfftw3f -lm -lgfortran ${FC} ${FFLAGS} -c $< %.o: %.F ${FC} ${FFLAGS} -c $< -%.o: %.f90 +%.o: %.f90 ${FC} ${FFLAGS} -c $< %.o: %.F90 ${FC} ${FFLAGS} -c $< @@ -22,9 +22,14 @@ LIBS = -lfftw3f -lm -lgfortran all: wsprd DEPS = wsprsim_utils.h wsprd_utils.h fano.h jelinek.h nhash.h + +indexx.o: ../indexx.f90 + ${FC} -o indexx.o ${FFLAGS} -c ../indexx.f90 + OBJS1 = wsprd.o wsprsim_utils.o wsprd_utils.o tab.o fano.o jelinek.o nhash.o indexx.o osdwspr.o + wsprd: $(OBJS1) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS) clean: - rm *.o wsprd + $(RM) *.o wsprd diff --git a/lib/wsprd/indexx.f90 b/lib/wsprd/indexx.f90 deleted file mode 100644 index 7a35f53b8..000000000 --- a/lib/wsprd/indexx.f90 +++ /dev/null @@ -1,91 +0,0 @@ -subroutine indexx(arr,n,indx) - - parameter (M=7,NSTACK=50) - integer n,indx(n) - real arr(n) - integer i,indxt,ir,itemp,j,jstack,k,l,istack(NSTACK) - real a - - do j=1,n - indx(j)=j - enddo - - jstack=0 - l=1 - ir=n -1 if(ir-l.lt.M) then - do j=l+1,ir - indxt=indx(j) - a=arr(indxt) - do i=j-1,1,-1 - if(arr(indx(i)).le.a) goto 2 - indx(i+1)=indx(i) - enddo - i=0 -2 indx(i+1)=indxt - enddo - if(jstack.eq.0) return - - ir=istack(jstack) - l=istack(jstack-1) - jstack=jstack-2 - - else - k=(l+ir)/2 - itemp=indx(k) - indx(k)=indx(l+1) - indx(l+1)=itemp - - if(arr(indx(l+1)).gt.arr(indx(ir))) then - itemp=indx(l+1) - indx(l+1)=indx(ir) - indx(ir)=itemp - endif - - if(arr(indx(l)).gt.arr(indx(ir))) then - itemp=indx(l) - indx(l)=indx(ir) - indx(ir)=itemp - endif - - if(arr(indx(l+1)).gt.arr(indx(l))) then - itemp=indx(l+1) - indx(l+1)=indx(l) - indx(l)=itemp - endif - - i=l+1 - j=ir - indxt=indx(l) - a=arr(indxt) -3 continue - i=i+1 - if(arr(indx(i)).lt.a) goto 3 - -4 continue - j=j-1 - if(arr(indx(j)).gt.a) goto 4 - if(j.lt.i) goto 5 - itemp=indx(i) - indx(i)=indx(j) - indx(j)=itemp - goto 3 - -5 indx(l)=indx(j) - indx(j)=indxt - jstack=jstack+2 - if(jstack.gt.NSTACK) stop 'NSTACK too small in indexx' - if(ir-i+1.ge.j-l)then - istack(jstack)=ir - istack(jstack-1)=i - ir=j-1 - else - istack(jstack)=j-1 - istack(jstack-1)=l - l=i - endif - endif - goto 1 - -end subroutine indexx - From 3176c1d3ef3a24e65a4cf001161830ad7526a002 Mon Sep 17 00:00:00 2001 From: K9AN Date: Fri, 1 Mar 2019 17:48:57 -0600 Subject: [PATCH 121/367] wsprd Makefile now builds wsprsim too. --- lib/wsprd/Makefile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/wsprd/Makefile b/lib/wsprd/Makefile index 872f4976c..c8e15723f 100644 --- a/lib/wsprd/Makefile +++ b/lib/wsprd/Makefile @@ -1,5 +1,4 @@ CC = gcc -#CC = clang-3.5 FC = gfortran CFLAGS= -I/usr/include -Wall -Wno-missing-braces -Wno-unused-result -O3 -ffast-math @@ -19,7 +18,7 @@ LIBS = -lfftw3f -lm -lgfortran %.o: %.F90 ${FC} ${FFLAGS} -c $< -all: wsprd +all: wsprd wsprsim DEPS = wsprsim_utils.h wsprd_utils.h fano.h jelinek.h nhash.h @@ -31,5 +30,10 @@ OBJS1 = wsprd.o wsprsim_utils.o wsprd_utils.o tab.o fano.o jelinek.o nhash.o ind wsprd: $(OBJS1) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS) +OBJS2 = wsprsim.o wsprsim_utils.o wsprd_utils.o tab.o fano.o nhash.o + +wsprsim: $(OBJS2) + $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS) + clean: - $(RM) *.o wsprd + $(RM) *.o wsprd wsprsim From f63c5e14bba9b17827306c54a7d0d1716dc10037 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 2 Mar 2019 13:22:42 +0000 Subject: [PATCH 122/367] Load LoTW Users data if CSV file exists at startup --- Configuration.cpp | 5 ++++- LotWUsers.cpp | 18 +++++++++++------- LotWUsers.hpp | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 8fcb5cee1..c7884113d 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -1012,6 +1012,9 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network }); lotw_users_.set_local_file_path (writeable_data_dir_.absoluteFilePath ("lotw-user-activity.csv")); + // load the dictionary if it exists + lotw_users_.load (ui_->LotW_CSV_URL_line_edit->text (), false); + // // validation ui_->callsign_line_edit->setValidator (new CallsignValidator {this}); @@ -2155,7 +2158,7 @@ void Configuration::impl::on_rescan_log_push_button_clicked (bool /*clicked*/) void Configuration::impl::on_LotW_CSV_fetch_push_button_clicked (bool /*checked*/) { - lotw_users_.load (ui_->LotW_CSV_URL_line_edit->text (), true); + lotw_users_.load (ui_->LotW_CSV_URL_line_edit->text (), true, true); ui_->LotW_CSV_fetch_push_button->setEnabled (false); } diff --git a/LotWUsers.cpp b/LotWUsers.cpp index 877e70549..fd1b5746c 100644 --- a/LotWUsers.cpp +++ b/LotWUsers.cpp @@ -42,11 +42,12 @@ public: { } - void load (QString const& url, bool forced_fetch) + void load (QString const& url, bool fetch, bool forced_fetch) { - auto csv_file_name = csv_file_.fileName (); abort (); // abort any active download - if (!QFileInfo::exists (csv_file_name) || forced_fetch) + auto csv_file_name = csv_file_.fileName (); + auto exists = QFileInfo::exists (csv_file_name); + if (fetch && (!exists || forced_fetch)) { current_url_.setUrl (url); if (current_url_.isValid () && !QSslSocket::supportsSsl ()) @@ -58,8 +59,11 @@ public: } else { - // load the database asynchronously - future_load_ = std::async (std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_name); + if (exists) + { + // load the database asynchronously + future_load_ = std::async (std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_name); + } } } @@ -254,9 +258,9 @@ void LotWUsers::set_local_file_path (QString const& path) m_->csv_file_.setFileName (path); } -void LotWUsers::load (QString const& url, bool force_download) +void LotWUsers::load (QString const& url, bool fetch, bool force_download) { - m_->load (url, force_download); + m_->load (url, fetch, force_download); } void LotWUsers::set_age_constraint (qint64 uploaded_since_days) diff --git a/LotWUsers.hpp b/LotWUsers.hpp index e088b151e..238c57402 100644 --- a/LotWUsers.hpp +++ b/LotWUsers.hpp @@ -23,7 +23,7 @@ public: void set_local_file_path (QString const&); - Q_SLOT void load (QString const& url, bool force_download = false); + Q_SLOT void load (QString const& url, bool fetch = true, bool force_download = false); Q_SLOT void set_age_constraint (qint64 uploaded_since_days); // returns true if the specified call sign 'call' has uploaded their From d4aa208b151d93d94ea8f585ee8e70a3b673f2f1 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 3 Mar 2019 11:48:43 +0000 Subject: [PATCH 123/367] Updated OpenSSL package download link --- doc/common/links.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/common/links.adoc b/doc/common/links.adoc index b81743fc4..85fdb1064 100644 --- a/doc/common/links.adoc +++ b/doc/common/links.adoc @@ -91,7 +91,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes. :sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK] :ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice] :win_openssl_packages: https://slproweb.com/products/Win32OpenSSL.html[Windows OpenSSL Packages] -:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2q.exe[Win32 OpenSSL Lite Package] +:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2r.exe[Win32 OpenSSL Lite Package] :writelog: https://writelog.com/[Writelog] :wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group] :wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X] From 4769bf45d2780010ee6b2c8488e8c843141bbd8f Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 3 Mar 2019 13:02:22 -0600 Subject: [PATCH 124/367] Make FT4 AP decoding work in RTTY RU and Field Day activities. Move Nuttal window to standalone subroutine nuttal_window.f90 and use Nuttal window in ft4/getcandidates4.f90. --- CMakeLists.txt | 1 + lib/ft4/ft4_decode.f90 | 31 ++++++++++--------------------- lib/ft4/getcandidates4.f90 | 18 ++---------------- lib/nuttal_window.f90 | 15 +++++++++++++++ lib/symspec.f90 | 14 ++------------ 5 files changed, 30 insertions(+), 49 deletions(-) create mode 100644 lib/nuttal_window.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 0db7a569e..ccb2f6d5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -512,6 +512,7 @@ set (wsjt_FSRCS lib/msk144signalquality.f90 lib/msk144sim.f90 lib/mskrtd.f90 + lib/nuttal_window.f90 lib/ft4/ft4sim.f90 lib/ft4/ft4sim_mult.f90 lib/ft4/ft4_decode.f90 diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 8d40aa8cd..89e219545 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -16,7 +16,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & character*6 hhmmss complex cd2(0:NMAX/NDOWN-1) !Complex waveform -! complex cds(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(4*NSS),ctwk2(4*NSS) @@ -32,6 +31,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & real savg(NH1),sbase(NH1) integer apbits(2*ND) + integer apmy_ru(28),aphis_fd(28) integer nrxx(100) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) integer*2 iwave(NMAX) !Generated full-length waveform @@ -107,9 +107,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & ! 4 MyCall DxCall RRR (77 ap bits) ! 5 MyCall DxCall 73 (77 ap bits) ! 6 MyCall DxCall RR73 (77 ap bits) -!******** -! For this contest-oriented mode, OK to only look for RR73?? -! Currently, 2 AP passes in all Txn states except for Tx5. !******** naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 @@ -131,6 +128,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & apbits=0 apbits(1)=99 apbits(30)=99 + apmy_ru=0 + aphis_fd=0 if(len(trim(mycall)) .lt. 3) go to 10 @@ -147,6 +146,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & call unpack77(c77,1,msgsent,unpk77_success) if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 read(c77,'(77i1)') message77 + apmy_ru=2*mod(message77(1:28)+rvec(2:29),2)-1 + aphis_fd=2*mod(message77(30:57)+rvec(29:56),2)-1 message77=mod(message77+rvec,2) call encode174_91(message77,cw) apbits=2*cw-1 @@ -390,43 +391,31 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & llrd(1:28)=apmag*apbits(1:28) else if(ncontest.eq.4) then apmask(2:29)=1 - llrd(2:29)=apmag*apbits(1:28) - else if(ncontest.eq.6) then ! ??? RR73; MyCall ??? - apmask(29:56)=1 - llrd(29:56)=apmag*apbits(1:28) + llrd(2:29)=apmag*apmy_ru(1:28) endif endif if(iaptype.eq.3) then ! MyCall,DxCall,??? apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2.or.ncontest.eq.6) then + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then apmask(1:58)=1 llrd(1:58)=apmag*apbits(1:58) else if(ncontest.eq.3) then ! Field Day apmask(1:56)=1 llrd(1:28)=apmag*apbits(1:28) - llrd(29:56)=apmag*apbits(30:57) + llrd(29:56)=apmag*aphis_fd(1:28) else if(ncontest.eq.4) then ! RTTY RU apmask(2:57)=1 - llrd(2:29)=apmag*apbits(1:28) + llrd(2:29)=apmag*apmy_ru(1:28) llrd(30:57)=apmag*apbits(30:57) endif endif - if(iaptype.eq.5.and.ncontest.eq.6) cycle !Hound if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then apmask=0 - if(ncontest.le.4 .or. (ncontest.eq.6.and.iaptype.eq.6)) then -! apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 + if(ncontest.le.4) then apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 - llrd(1:58)=apmag*apbits(1:58) - if(iaptype.eq.4) llrd(59:77)=apmag*mrrr - if(iaptype.eq.5) llrd(59:77)=apmag*m73 -! if(iaptype.eq.6) llrd(59:77)=apmag*mrr73 if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) - else if(ncontest.eq.6.and.iaptype.eq.4) then ! Hound listens for MyCall RR73;... - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) endif endif diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 424a7d297..9b5200845 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -20,8 +20,8 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & if(first) then first=.false. pi=4.0*atan(1.) - window=0.5*(1-cos(pi*(/(i,i=1,NFFT1)/)/(NFFT1/2.0))) - window=window**2 + window=0. + call nuttal_window(window,NFFT1) endif ! Compute symbol spectra, stepping by NSTEP steps. @@ -69,19 +69,5 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & endif enddo -! do i=1,maxcand -! ipk=maxloc(savsm(nfa:nfb)) -! ip=nfa-1+ipk(1) -! xmax=savsm(ip) -! savsm(max(1,ip-8):min(NH1,ip+8))=0.0 -! if(xmax.ge.syncmin) then -! ncand=ncand+1 -! candidate(1,ncand)=ip*df+f_offset -! candidate(2,ncand)=-99.9 -! candidate(3,ncand)=xmax -! else -! exit -! endif -! enddo return end subroutine getcandidates4 diff --git a/lib/nuttal_window.f90 b/lib/nuttal_window.f90 new file mode 100644 index 000000000..aa813b15d --- /dev/null +++ b/lib/nuttal_window.f90 @@ -0,0 +1,15 @@ +subroutine nuttal_window(win,n) + real win(n) + + pi=4.0*atan(1.0) + a0=0.3635819 + a1=-0.4891775; + a2=0.1365995; + a3=-0.0106411; + do i=1,n + win(i)=a0+a1*cos(2*pi*(i-1)/(n))+ & + a2*cos(4*pi*(i-1)/(n))+ & + a3*cos(6*pi*(i-1)/(n)) + enddo + return +end subroutine nuttal_window diff --git a/lib/symspec.f90 b/lib/symspec.f90 index 78215e209..b9f5e2088 100644 --- a/lib/symspec.f90 +++ b/lib/symspec.f90 @@ -50,18 +50,8 @@ subroutine symspec(shared_data,k,ntrperiod,nsps,ingain,bLowSidelobes, & if(nfft3.ne.nfft3z) then ! Compute new window pi=4.0*atan(1.0) -! Coefficients taken from equation 37 of NUSC report: -! "Some windows with very good sidelobe behavior: application to -! discrete Hilbert Transform, by Albert Nuttall" - a0=0.3635819 - a1=-0.4891775; - a2=0.1365995; - a3=-0.0106411; - do i=1,nfft3 - w3(i)=a0+a1*cos(2*pi*(i-1)/(nfft3))+ & - a2*cos(4*pi*(i-1)/(nfft3))+ & - a3*cos(6*pi*(i-1)/(nfft3)) - enddo + w3=0 + call nuttal_window(w3,nfft3) nfft3z=nfft3 endif From 89cffbc95941dc8450ddd26c5775750290863aba Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 4 Mar 2019 10:11:55 -0500 Subject: [PATCH 125/367] Move the call to processMessage() to correct place in ft4Data(). --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a304af574..be579deef 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8737,6 +8737,7 @@ void MainWindow::ft4Data(int k) if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked()) { m_bDoubleClicked=true; m_bAutoReply = true; + processMessage(decodedtext); ui->cbFirst->setStyleSheet(""); } if(for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10)) { @@ -8745,7 +8746,6 @@ void MainWindow::ft4Data(int k) m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); m_QSOText = decodedtext.string().trimmed (); } - processMessage(decodedtext); write_all("Rx",decodedtext.string().trimmed()); } //### From d7012267c063b05602a42ceb94ab3b4f53bde9b1 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 4 Mar 2019 17:10:57 -0600 Subject: [PATCH 126/367] CQ message type strings are now passed from mainwindow.cpp to ft4_decode.f90, to enable AP decoding of special CQ messages. --- lib/ft4/ft4_decode.f90 | 40 +++++++++++++++++++++++----------------- widgets/mainwindow.cpp | 15 ++++++++++++--- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 89e219545..3a8c12f14 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,5 +1,5 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & - iwave,ndecodes,mycall,hiscall,nrx,line,data_dir) + iwave,ndecodes,mycall,hiscall,cqstr,nrx,line,data_dir) use packjt77 include 'ft4_params.f90' @@ -14,6 +14,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & character*12 mycall,hiscall character*12 mycall0,hiscall0 character*6 hhmmss + character*4 cqstr,cqstr0 complex cd2(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) @@ -41,7 +42,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & integer ip(1) integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 integer naptypes(0:5,4) ! nQSOProgress, decoding pass - integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) + integer mcq(29) integer mrrr(19),m73(19),mrr73(19) logical nohiscall,unpk77_success @@ -56,9 +57,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & data msg0/' '/ data first/.true./ data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ - data mcqru/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0/ - data mcqfd/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0/ - data mcqtest/0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0/ data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ @@ -66,7 +64,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & - mycall0,hiscall0,msg0 + mycall0,hiscall0,msg0,cqstr0 call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) @@ -85,10 +83,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & enddo enddo - mcq=2*mod(mcq+rvec(1:29),2)-1 - mcqfd=2*mod(mcqfd+rvec(1:29),2)-1 - mcqru=2*mod(mcqru+rvec(1:29),2)-1 - mcqtest=2*mod(mcqtest+rvec(1:29),2)-1 mrrr=2*mod(mrrr+rvec(59:77),2)-1 m73=2*mod(m73+rvec(59:77),2)-1 mrr73=2*mod(mrr73+rvec(59:77),2)-1 @@ -117,9 +111,26 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & mycall0='' hiscall0='' + cqstr0='' first=.false. endif + if(cqstr.ne.cqstr0) then + i0=index(cqstr,' ') + if(i0.le.1) then + message='CQ A1AA AA01' + else + message='CQ '//cqstr(1:i0-1)//' A1AA AA01' + endif + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,1,msgsent,unpk77_success) + read(c77,'(29i1)') mcq + mcq=2*mod(mcq+rvec(1:29),2)-1 + cqstr0=cqstr + endif + l1=index(mycall,char(0)) if(l1.ne.0) mycall(l1:)=" " l1=index(hiscall,char(0)) @@ -367,15 +378,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall - if(iaptype.eq.1) then ! CQ or CQ TEST + if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC apmask=0 apmask(1:29)=1 - if(ncontest.eq.0) llrd(1:29)=apmag*mcq(1:29) - if(ncontest.eq.1) llrd(1:29)=apmag*mcqtest(1:29) - if(ncontest.eq.2) llrd(1:29)=apmag*mcqtest(1:29) - if(ncontest.eq.3) llrd(1:29)=apmag*mcqfd(1:29) - if(ncontest.eq.4) llrd(1:29)=apmag*mcqru(1:29) - if(ncontest.eq.6) llrd(1:29)=apmag*mcq(1:29) + llrd(1:29)=apmag*mcq(1:29) endif if(iaptype.eq.2) then ! MyCall,???,??? diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a304af574..ef6df71c4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -171,8 +171,8 @@ extern "C" { void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nQSOProgress, int* nContest, int* nfqso, short int id[], int* ndecodes, char* mycall, - char* hiscall, int* nrx, char* line, char* ddir, int len1, int len2, - int len3, int len4, int len5); + char* hiscall, char* cqstr, int* nrx, char* line, char* ddir, int len1, + int len2, int len3, int len4, int len5, int len6); void get_ft4msg_(int* idecode, int* nrx, char* line, int len); @@ -8714,8 +8714,17 @@ void MainWindow::ft4Data(int k) dataDir = m_config.writeable_data_dir ().absolutePath (); char ddir[512]; strncpy(ddir,dataDir.toLatin1(), sizeof (ddir) - 1); + char cqstr[4]; + strncpy(cqstr," ",4); + if(SpecOp::NA_VHF == m_config.special_op_id()) strncpy(cqstr,"TEST",4); + if(SpecOp::EU_VHF == m_config.special_op_id()) strncpy(cqstr,"TEST",4); + if(SpecOp::FIELD_DAY == m_config.special_op_id()) strncpy(cqstr,"FD",2); + if(SpecOp::RTTY == m_config.special_op_id()) { + if(m_config.RTTY_Exchange()!="SCC") strncpy(cqstr,"RU",2); + if(m_config.RTTY_Exchange()=="SCC") strncpy(cqstr,"SCC",3); + } ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], - &nrx,&line[0],&ddir[0],17,12,12,61,512); + &cqstr[0],&nrx,&line[0],&ddir[0],17,12,12,4,61,512); line[60]=0; for (int idecode=1; idecode<=ndecodes; idecode++) { get_ft4msg_(&idecode,&nrx,&line[0],61); From 1b591e2c8c888c17f54e6b9d8df7969c7bd5c9ff Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 4 Mar 2019 17:26:24 -0600 Subject: [PATCH 127/367] Make ft4d work with cqstr. --- lib/ft4/ft4d.f90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index b92ff8711..7c17481b1 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -8,6 +8,7 @@ program ft4d character*12 hiscall character*80 infile character*61 line + character*4 cqstr real*8 fMHz integer ihdr(11) integer*2 iwave(180000) !15*12000 @@ -44,11 +45,12 @@ program ft4d endif nfa=0 nfb=4224 - ncontest=4 ndecodes=0 nfqso=1500 mycall="K9AN" hiscall="K1JT" + ncontest=4 + cqstr="RU " do ifile=iarg,nargs call getarg(ifile,infile) @@ -66,7 +68,7 @@ program ft4d i0=(n-1)*istep + 1 tbuf=(i0-1)/12000.0 call ft4_decode(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & - nfqso,iwave(i0),ndecodes,mycall,hiscall,nrx,line,data_dir) + nfqso,iwave(i0),ndecodes,mycall,hiscall,cqstr,nrx,line,data_dir) do idecode=1,ndecodes call get_ft4msg(idecode,nrx,line) write(*,'(a61)') line From 4f57cc7fdb717b80b313b5e2e0717bfa22fe4104 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 5 Mar 2019 22:46:04 +0000 Subject: [PATCH 128/367] Fix a thread safety issue in diagnostic trace to file code --- TraceFile.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/TraceFile.cpp b/TraceFile.cpp index 2329b425f..87d4a82bb 100644 --- a/TraceFile.cpp +++ b/TraceFile.cpp @@ -3,6 +3,8 @@ #include #include +#include +#include #include #include #include @@ -28,10 +30,11 @@ private: QTextStream * original_stream_; QtMessageHandler original_handler_; static QTextStream * current_stream_; + static QMutex mutex_; }; QTextStream * TraceFile::impl::current_stream_; - +QMutex TraceFile::impl::mutex_; // delegate to implementation class TraceFile::TraceFile (QString const& trace_file_path) @@ -73,7 +76,10 @@ TraceFile::impl::~impl () void TraceFile::impl::message_handler (QtMsgType type, QMessageLogContext const& context, QString const& msg) { Q_ASSERT_X (current_stream_, "TraceFile:message_handler", "no stream to write to"); - *current_stream_ << qFormatLogMessage (type, context, msg) << endl; + { + QMutexLocker lock {&mutex_}; // thread safety - serialize writes to the trace file + *current_stream_ << qFormatLogMessage (type, context, msg) << endl; + } if (QtFatalMsg == type) { From 87826d1a6c40f318760b543545de277bbdb4dd63 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 7 Mar 2019 11:21:17 -0500 Subject: [PATCH 129/367] Clean up some FT4 code. --- widgets/mainwindow.cpp | 54 ++++++++++++++++++++---------------------- widgets/mainwindow.h | 2 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2f4c47db3..6af904be9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1384,7 +1384,7 @@ void MainWindow::dataSink(qint64 frames) if(m_monitoring || m_diskData) { m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); } - if(m_mode=="FT4") ft4Data(k); + if(m_mode=="FT4") ft4_rx(k); if(m_mode=="MSK144" or m_mode=="FT4") return; fixStop(); @@ -3851,20 +3851,20 @@ void MainWindow::guiUpdate() } } - switch (m_ntx) - { - case 1: m_QSOProgress = REPLYING; break; - case 2: m_QSOProgress = REPORT; break; - case 3: m_QSOProgress = ROGER_REPORT; break; - case 4: m_QSOProgress = ROGERS; break; - case 5: m_QSOProgress = SIGNOFF; break; - case 6: m_QSOProgress = CALLING; break; - default: break; // determined elsewhere - } - m_transmitting = true; - transmitDisplay (true); - statusUpdate (); + switch (m_ntx) + { + case 1: m_QSOProgress = REPLYING; break; + case 2: m_QSOProgress = REPORT; break; + case 3: m_QSOProgress = ROGER_REPORT; break; + case 4: m_QSOProgress = ROGERS; break; + case 5: m_QSOProgress = SIGNOFF; break; + case 6: m_QSOProgress = CALLING; break; + default: break; // determined elsewhere } + m_transmitting = true; + transmitDisplay (true); + statusUpdate (); + } if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); @@ -4375,7 +4375,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie hiscall+="/P"; ui->dxCallEntry->setText(hiscall); } - bool is_73 = message_words.filter (QRegularExpression {"^(73|RR73)$"}).size (); if (!is_73 and !message.isStandardMessage() and !message.string().contains("<")) { qDebug () << "Not processing message - hiscall:" << hiscall << "hisgrid:" << hisgrid @@ -4534,6 +4533,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } else { m_bTUmsg=false; m_nextCall=""; //### Temporary: disable use of "TU;" message + if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") { // We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message logQSOTimer.start(0); @@ -4740,6 +4740,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie // i.e. compound version of same base call ui->dxCallEntry->setText (hiscall); } + if (hisgrid.contains (grid_regexp)) { if(ui->dxGridEntry->text().mid(0,4) != hisgrid) ui->dxGridEntry->setText(hisgrid); } @@ -5605,7 +5606,7 @@ void MainWindow::on_actionFT4_triggered() ui->label_7->setText("Rx Frequency"); ui->label_6->setText("Band Activity"); ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); - displayWidgets(nWidgets("111010000100111000010000100110001")); + displayWidgets(nWidgets("011010000100111000010000100110001")); ui->txrb2->setEnabled(true); ui->txrb4->setEnabled(true); ui->txrb5->setEnabled(true); @@ -5616,9 +5617,7 @@ void MainWindow::on_actionFT4_triggered() ui->txb6->setEnabled(true); ui->txFirstCheckBox->setEnabled(true); ui->cbAutoSeq->setEnabled(true); - ui->labDXped->setVisible(false); ui->labDXped->setText(""); - ui->labDXped->setVisible(false); if (SpecOp::RTTY == m_config.special_op_id ()) { ui->labDXped->setVisible(true); @@ -8649,7 +8648,7 @@ void MainWindow::write_all(QString txRx, QString message) } } -void MainWindow::ft4Data(int k) +void MainWindow::ft4_rx(int k) { static int nhsec0=-1; static bool wrapped=false; @@ -8734,30 +8733,29 @@ void MainWindow::ft4Data(int k) ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); -//### - //Right (Rx Frequency) window +//Right (Rx Frequency) window int audioFreq=decodedtext.frequencyOffset(); auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); - if (parts.size () > 6) { - auto for_us = parts[5].contains (m_baseCall) - || ("DE" == parts[5] && qAbs (ui->RxFreqSpinBox->value () - audioFreq) <= 10); + if(parts.size() > 6) { + auto for_us = parts[5].contains(m_baseCall) + || ("DE" == parts[5] && qAbs(ui->TxFreqSpinBox->value() - audioFreq) <= 150); if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[5]) for_us=false; if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked()) { m_bDoubleClicked=true; m_bAutoReply = true; - processMessage(decodedtext); ui->cbFirst->setStyleSheet(""); } - if(for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10)) { - // This msg is within 10 hertz of our tuned frequency, or contains MyCall + if(for_us or ((qAbs(audioFreq - ui->TxFreqSpinBox->value()) <= 150) and parts[5]!="CQ")) { + // This msg contains MyCall, or is within 150 hertz of our Tx frequency + // (Is that the best logic to use here??) ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); + processMessage(decodedtext); m_QSOText = decodedtext.string().trimmed (); } write_all("Rx",decodedtext.string().trimmed()); } -//### } nhsec0=nhsec; if(m_diskData and (k > (dec_data.params.kin-istep))) m_startAnother=m_loopall; diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index db732e053..f40030d4e 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -312,7 +312,7 @@ private slots: void on_comboBoxHoundSort_activated (int index); void not_GA_warning_message (); void checkMSK144ContestType(); - void ft4Data(int k); + void ft4_rx(int k); void ft4_tx(int ntx); int setTxMsg(int n); bool stdCall(QString const& w); From 69675153a7cb861d2417c565494ba8307de1cd2b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 7 Mar 2019 14:36:58 -0500 Subject: [PATCH 130/367] FT4 sequencing seems OK now (but needs thorough testing). No "TU;" msgs yet. --- widgets/mainwindow.cpp | 6 +++++- widgets/mainwindow.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 6af904be9..81318f1a4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4272,6 +4272,7 @@ void MainWindow::on_txb6_clicked() void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) { + if(m_mode=="FT4" and m_inQSOwith!="") return; set_dateTimeQSO(-1); // reset our QSO start time m_decodedText2=true; doubleClickOnCall(modifiers); @@ -4280,6 +4281,7 @@ void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers) { + if(m_mode=="FT4" and m_inQSOwith!="") return; QTextCursor cursor; if(m_mode=="ISCAT") { MessageBox::information_message (this, @@ -5459,6 +5461,7 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button m_dateTimeQSOOn, dateTimeQSOOff, m_freqNominal + ui->TxFreqSpinBox->value(), m_noSuffix, m_xSent, m_xRcvd, m_cabrilloLog.data ()); + m_inQSOwith=""; } void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, QString const& grid @@ -8751,7 +8754,7 @@ void MainWindow::ft4_rx(int k) // (Is that the best logic to use here??) ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); - processMessage(decodedtext); + if(decodedtext.string().trimmed().contains(m_inQSOwith)) processMessage(decodedtext); m_QSOText = decodedtext.string().trimmed (); } write_all("Rx",decodedtext.string().trimmed()); @@ -8780,6 +8783,7 @@ void MainWindow::ft4_tx(int ntx) if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); QString msg = QString::fromLatin1(ba.data()); + if(m_ntx==2 or m_ntx==3) m_inQSOwith=m_hisCall; if(msg.trimmed().length()==0) return; //Don't transmit a blank message, or ... if(m_diskData) return; //... in response to a decode from disk ba2msg(ba,message); diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index f40030d4e..97f38783b 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -617,6 +617,7 @@ private: QString m_nextCall; QString m_nextGrid; QString m_fileDateTime; + QString m_inQSOwith; QSet m_pfx; QSet m_sfx; From 8ddf3f8accdaa949d93e65ac13b795a6f50517f3 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 9 Mar 2019 09:13:26 -0600 Subject: [PATCH 131/367] Change default to DT=0.14 s for simulated wav files. --- lib/ft4/ft4sim.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index a8b5975a2..0a9a1dcbc 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -110,7 +110,7 @@ program ft4sim c0((NN+1)*NSPS:(NN+2)*NSPS-1)=c0((NN+1)*NSPS:(NN+2)*NSPS-1)*(1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS) ))/2.0 c0((NN+2)*NSPS:)=0. - k=nint((xdt+0.25)/dt) + k=nint((xdt+0.14)/dt) c0=cshift(c0,-k) ia=k From 7a0823301a62dcaea40a869b6f2cae7c88138887 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 9 Mar 2019 10:03:01 -0600 Subject: [PATCH 132/367] Remove some temporary code. --- lib/ft4/ft4_decode.f90 | 25 +++---------------------- lib/ft4/ft4d.f90 | 4 ++-- widgets/mainwindow.cpp | 11 +++++------ 3 files changed, 10 insertions(+), 30 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 3a8c12f14..d8f1a6d8f 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -1,5 +1,5 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & - iwave,ndecodes,mycall,hiscall,cqstr,nrx,line,data_dir) + iwave,ndecodes,mycall,hiscall,cqstr,line,data_dir) use packjt77 include 'ft4_params.f90' @@ -33,7 +33,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & integer apbits(2*ND) integer apmy_ru(28),aphis_fd(28) - integer nrxx(100) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) integer*2 iwave(NMAX) !Generated full-length waveform integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) @@ -63,7 +62,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ - save fs,dt,tt,txt,twopi,h,one,first,nrxx,linex,apbits,nappasses,naptypes, & + save fs,dt,tt,txt,twopi,h,one,first,linex,apbits,nappasses,naptypes, & mycall0,hiscall0,msg0,cqstr0 call clockit('ft4_deco',0) @@ -471,23 +470,6 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & linex(ndecodes)=line if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate -!### Temporary: assume most recent decoded message conveys "hiscall". ### - i0=index(message,' ') - if(i0.ge.3 .and. i0.le.7) then - hiscall=message(i0+1:i0+6) - i1=index(hiscall,' ') - if(i1.gt.0) hiscall=hiscall(1:i1) - endif - nrx=-1 - if(index(message,'CQ ').eq.1) nrx=1 - if((index(message,trim(mycall)//' ').eq.1) .and. & - (index(message,' '//trim(hiscall)//' ').ge.4)) then - if(index(message,' 559 ').gt.8) nrx=2 !### Not right ! - if(index(message,' R 559 ').gt.8) nrx=3 !### Not right ! - if(index(message,' RR73 ').gt.8) nrx=4 - endif - nrxx(ndecodes)=nrx -!### exit endif @@ -498,9 +480,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & call clockit('ft4_deco',101) return - entry get_ft4msg(idecode,nrx,line) + entry get_ft4msg(idecode,line) line=linex(idecode) - nrx=nrxx(idecode) return end subroutine ft4_decode diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 7c17481b1..7725992df 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -68,9 +68,9 @@ program ft4d i0=(n-1)*istep + 1 tbuf=(i0-1)/12000.0 call ft4_decode(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & - nfqso,iwave(i0),ndecodes,mycall,hiscall,cqstr,nrx,line,data_dir) + nfqso,iwave(i0),ndecodes,mycall,hiscall,cqstr,line,data_dir) do idecode=1,ndecodes - call get_ft4msg(idecode,nrx,line) + call get_ft4msg(idecode,line) write(*,'(a61)') line enddo enddo !steps diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 81318f1a4..264cf2fe0 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -171,10 +171,10 @@ extern "C" { void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nQSOProgress, int* nContest, int* nfqso, short int id[], int* ndecodes, char* mycall, - char* hiscall, char* cqstr, int* nrx, char* line, char* ddir, int len1, + char* hiscall, char* cqstr, char* line, char* ddir, int len1, int len2, int len3, int len4, int len5, int len6); - void get_ft4msg_(int* idecode, int* nrx, char* line, int len); + void get_ft4msg_(int* idecode, char* line, int len); } @@ -8707,7 +8707,6 @@ void MainWindow::ft4_rx(int k) char line[61]; int nfqso=1500; int ndecodes=0; - int nrx=-1; int nfa=m_wideGraph->nStartFreq(); int nfb=m_wideGraph->Fmax(); int nQSOProgress = static_cast ( m_QSOProgress ); @@ -8726,10 +8725,10 @@ void MainWindow::ft4_rx(int k) if(m_config.RTTY_Exchange()=="SCC") strncpy(cqstr,"SCC",3); } ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], - &cqstr[0],&nrx,&line[0],&ddir[0],17,12,12,4,61,512); + &cqstr[0],&line[0],&ddir[0],17,12,12,4,61,512); line[60]=0; for (int idecode=1; idecode<=ndecodes; idecode++) { - get_ft4msg_(&idecode,&nrx,&line[0],61); + get_ft4msg_(&idecode,&line[0],61); line[60]=0; QString sline{QString::fromLatin1(line)}; DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; @@ -8770,7 +8769,7 @@ void MainWindow::ft4_rx(int k) void MainWindow::ft4_tx(int ntx) { - if(g_iptt!=0) return; //Alreadt transmitting? + if(g_iptt!=0) return; //Already transmitting? static char message[38]; static char msgsent[38]; QByteArray ba; From e9a999cda15981a3d31cdc605332d6457d482ddd Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 12 Mar 2019 11:09:49 -0400 Subject: [PATCH 133/367] Use the "TU; ..." message when starting another FT4 QSO almost right away. --- decodedtext.cpp | 11 ++++++----- main.cpp | 4 ++-- widgets/mainwindow.cpp | 26 +++++++++++++++++++++----- widgets/mainwindow.h | 2 ++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/decodedtext.cpp b/decodedtext.cpp index 88f6bd621..bfa808173 100644 --- a/decodedtext.cpp +++ b/decodedtext.cpp @@ -51,11 +51,12 @@ DecodedText::DecodedText (QString const& the_string) QStringList DecodedText::messageWords () const { - if (is_standard_) - { - // extract up to the first four message words - return words_re.match (message_).capturedTexts (); - } + if(is_standard_) { + // extract up to the first four message words + QString t=message_; + if(t.left(4)=="TU; ") t=message_.mid(4,-1); + return words_re.match(t).capturedTexts(); + } // simple word split for free text messages auto words = message_.split (' ', QString::SkipEmptyParts); // add whole message as item 0 to mimic RE capture list diff --git a/main.cpp b/main.cpp index fd510bffb..1ea0c6a49 100644 --- a/main.cpp +++ b/main.cpp @@ -91,8 +91,8 @@ namespace int main(int argc, char *argv[]) { - // Add timestamps to all debug messages - qSetMessagePattern ("[%{time yyyyMMdd HH:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{message}"); + // ### Add timestamps to all debug messages +// qSetMessagePattern ("[%{time yyyyMMdd HH:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{message}"); init_random_seed (); diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 264cf2fe0..2298635b9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -808,6 +808,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->TxPowerComboBox->addItem(t); } + m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc(); + m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); + ui->labAz->setStyleSheet("border: 0px;"); ui->labAz->setText(""); auto t = "UTC dB DT Freq Message"; @@ -4377,6 +4380,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie hiscall+="/P"; ui->dxCallEntry->setText(hiscall); } + bool is_73 = message_words.filter (QRegularExpression {"^(73|RR73)$"}).size (); if (!is_73 and !message.isStandardMessage() and !message.string().contains("<")) { qDebug () << "Not processing message - hiscall:" << hiscall << "hisgrid:" << hisgrid @@ -4384,6 +4388,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie return; } + // only allow automatic mode changes between JT9 and JT65, and when not transmitting if (!m_transmitting and m_mode == "JT9+JT65") { if (message.isJT9()) @@ -4981,6 +4986,15 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) msgtype(t + sent, ui->tx2); if(sent==rpt) msgtype(t + "R" + sent, ui->tx3); if(sent!=rpt) msgtype(t + "R " + sent, ui->tx3); + if(m_mode=="FT4") { + QDateTime now=QDateTime::currentDateTimeUtc(); + int sinceTx3 = m_dateTimeSentTx3.secsTo(now); + int sinceRR73 = m_dateTimeRcvdRR73.secsTo(now); + if(m_bDoubleClicked and (qAbs(sinceTx3-12) <= 3) and (sinceRR73 < 5)) { + t="TU; " + ui->tx3->text(); + ui->tx3->setText(t); + } + } } if(m_mode=="MSK144" and m_bShMsgs) { @@ -8740,15 +8754,16 @@ void MainWindow::ft4_rx(int k) auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); if(parts.size() > 6) { - auto for_us = parts[5].contains(m_baseCall) - || ("DE" == parts[5] && qAbs(ui->TxFreqSpinBox->value() - audioFreq) <= 150); - if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[5]) for_us=false; + int iFirstCall=5; + if(parts[5]=="TU;") iFirstCall=6; + auto for_us = parts[iFirstCall].contains(m_baseCall); + if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[iFirstCall]) for_us=false; if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked()) { m_bDoubleClicked=true; m_bAutoReply = true; ui->cbFirst->setStyleSheet(""); } - if(for_us or ((qAbs(audioFreq - ui->TxFreqSpinBox->value()) <= 150) and parts[5]!="CQ")) { + if(for_us or ((qAbs(audioFreq - ui->TxFreqSpinBox->value()) <= 150) and parts[iFirstCall]!="CQ")) { // This msg contains MyCall, or is within 150 hertz of our Tx frequency // (Is that the best logic to use here??) ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, @@ -8756,6 +8771,7 @@ void MainWindow::ft4_rx(int k) if(decodedtext.string().trimmed().contains(m_inQSOwith)) processMessage(decodedtext); m_QSOText = decodedtext.string().trimmed (); } + if(for_us and parts[iFirstCall+2]=="RR73") m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc(); write_all("Rx",decodedtext.string().trimmed()); } } @@ -8809,7 +8825,7 @@ void MainWindow::ft4_tx(int ntx) float f0=ui->TxFreqSpinBox->value() - m_XIT; int nwave=(nsym+2)*nsps; gen_ft4wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,&nwave); - + if(m_ntx==3) m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT m_tx_when_ready = true; qint64 ms=QDateTime::currentMSecsSinceEpoch(); diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 97f38783b..216405ae8 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -651,6 +651,8 @@ private: QDateTime m_dateTimeQSOOn; QDateTime m_dateTimeLastTX; + QDateTime m_dateTimeSentTx3; + QDateTime m_dateTimeRcvdRR73; QSharedMemory *mem_jt9; QString m_QSOText; From 09ee9d3dc05fb1c2e0a71f545e936f02732066b9 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 13 Mar 2019 00:08:50 +0000 Subject: [PATCH 134/367] Add helpful tool tips to serial port drop down list items --- Configuration.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Configuration.cpp b/Configuration.cpp index c7884113d..a937dcfcd 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -1073,6 +1073,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network // fill_port_combo_box (ui_->PTT_port_combo_box); ui_->PTT_port_combo_box->addItem ("CAT"); + ui_->PTT_port_combo_box->setItemData (ui_->PTT_port_combo_box->count () - 1, "Delegate to proxy CAT service", Qt::ToolTipRole); // // setup hooks to keep audio channels aligned with devices @@ -2922,9 +2923,15 @@ void Configuration::impl::fill_port_combo_box (QComboBox * cb) // remove possibly confusing Windows device path (OK because // it gets added back by Hamlib) cb->addItem (p.systemLocation ().remove (QRegularExpression {R"(^\\\\\.\\)"})); + auto tip = QString {"%1 %2 %3"}.arg (p.manufacturer ()).arg (p.serialNumber ()).arg (p.description ()).trimmed (); + if (tip.size ()) + { + cb->setItemData (cb->count () - 1, tip, Qt::ToolTipRole); + } } } - cb->addItem("USB"); + cb->addItem ("USB"); + cb->setItemData (cb->count () - 1, "Custom USB device", Qt::ToolTipRole); cb->setEditText (current_text); } From e150d003d699777496a92935df6ce45d074b41b6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 13 Mar 2019 10:31:23 -0400 Subject: [PATCH 135/367] Fix an inforrect constant in ft4_rx() that skipped over first 0.208 s of Rx data. --- lib/ft4/ft4_decode.f90 | 2 +- widgets/mainwindow.cpp | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index d8f1a6d8f..f62569343 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -34,7 +34,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & integer apbits(2*ND) integer apmy_ru(28),aphis_fd(28) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) - integer*2 iwave(NMAX) !Generated full-length waveform + integer*2 iwave(NMAX) !Raw received data integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) integer*1 hbits(2*NN) integer graymap(0:3) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2298635b9..1194a0942 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8671,18 +8671,17 @@ void MainWindow::ft4_rx(int k) static bool wrapped=false; short id[60000]; const int istep=3456; + const int k_enough=55296; //4.608 s if(knhsec) nhsec0=-1; if(nhsec==nhsec0) return; + if(k Date: Wed, 13 Mar 2019 11:35:47 -0400 Subject: [PATCH 136/367] Bring allsim up to date with changes elsewhere. --- lib/addit.f90 | 10 +++++++--- lib/allsim.f90 | 16 +++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/addit.f90 b/lib/addit.f90 index 48082833f..33ed5a289 100644 --- a/lib/addit.f90 +++ b/lib/addit.f90 @@ -12,18 +12,22 @@ subroutine addit(itone,nfsample,nsym,nsps,ifreq,sig,dat) dphi=0. iters=1 - if(nsym.eq.79) iters=2 + if(nsym.eq.79) iters=2 !FT8 + if(nsym.eq.103) iters=5 !FT4 + do iter=1,iters f=ifreq phi=0. ntot=nsym*tsym/dt k=12000 !Start audio at t = 1.0 s t=0. - if(nsym.eq.79) k=12000 + (iter-1)*12000*30 !Special case for FT8 + if(nsym.eq.79) k=12000 + (iter-1)*12000*30 !Special case for FT8 + if(nsym.eq.103) k=12000 + (iter-1)*12000*10 !Special case for FT4 isym0=-1 do i=1,ntot t=t+dt isym=nint(t/tsym) + 1 + if(isym.gt.nsym) exit if(isym.ne.isym0) then freq=f + itone(isym)*baud dphi=twopi*freq*dt @@ -59,7 +63,7 @@ subroutine addcw(icw,ncw,ifreq,sig,dat) phi=0. k=12000 !Start audio at t = 1.0 s t=0. - npts=60*12000 + npts=59*12000 x=0. do i=1,npts t=t+dt diff --git a/lib/allsim.f90 b/lib/allsim.f90 index 2d948b64f..59d3fa264 100644 --- a/lib/allsim.f90 +++ b/lib/allsim.f90 @@ -1,6 +1,6 @@ program allsim -! Generate simulated data for WSJT-X slow modes: JT4, JT9, JT65, QRA64, +! Generate simulated data for WSJT-X modes: JT4, JT9, JT65, FT8, FT4, QRA64, ! and WSPR. Also unmodulated carrier and 20 WPM CW. @@ -15,6 +15,7 @@ program allsim logical*1 bcontest real*4 dat(NMAX) character message*22,msgsent*22,arg*8,mygrid*6 + character*37 msg37,msgsent37 nargs=iargc() if(nargs.ne.1) then @@ -60,15 +61,20 @@ program allsim call gen4(message,0,msgsent,itone,itype) call addit(itone,11025,206,2520,1200,sig,dat) !JT4 - i3bit=0 ! ### TEMPORARY ??? ### - call genft8(message,mygrid,bcontest,i3bit,msgsent,msgbits,itone) + i3=-1 + n3=-1 + call genft8(message,i3,n3,msgsent,msgbits,itone) call addit(itone,12000,79,1920,1400,sig,dat) !FT8 + msg37=message//' ' + call genft4(msg37,0,msgsent37,itone) + call addit(itone,12000,103,512,1600,sig,dat) !FT4 + call genqra64(message,0,msgsent,itone,itype) - call addit(itone,12000,84,6912,1600,sig,dat) !QRA64 + call addit(itone,12000,84,6912,1800,sig,dat) !QRA64 call gen65(message,0,msgsent,itone,itype) - call addit(itone,11025,126,4096,1800,sig,dat) !JT65 + call addit(itone,11025,126,4096,2000,sig,dat) !JT65 iwave(1:npts)=nint(rms*dat(1:npts)) From 6a2effcfc67d6f08f8df02f86aad33b8a2e6a494 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 13 Mar 2019 13:59:41 -0400 Subject: [PATCH 137/367] In FT4 mode, Tx4 is now hardwired to the 'RR73' message. --- widgets/mainwindow.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 1194a0942..8a189812a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4173,6 +4173,7 @@ void MainWindow::on_txrb4_doubleClicked () auto const& my_callsign = m_config.my_callsign (); auto is_compound = my_callsign != m_baseCall; m_send_RR73 = !((is_compound && !shortList (my_callsign)) || m_send_RR73); + if(m_mode=="FT4") m_send_RR73=true; genStdMsgs (m_rpt); } @@ -4248,6 +4249,7 @@ void MainWindow::on_txb4_doubleClicked() auto const& my_callsign = m_config.my_callsign (); auto is_compound = my_callsign != m_baseCall; m_send_RR73 = !((is_compound && !shortList (my_callsign)) || m_send_RR73); + if(m_mode=="FT4") m_send_RR73=true; genStdMsgs (m_rpt); } @@ -5028,7 +5030,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) } t=t0 + (m_send_RR73 ? "RR73" : "RRR"); - if((m_mode=="MSK144" and !m_bShMsgs) or m_mode=="FT8") { + if((m_mode=="MSK144" and !m_bShMsgs) or m_mode=="FT8" or m_mode=="FT4") { if(!bHisCall and bMyCall) t=hisCall + " <" + my_callsign + "> " + (m_send_RR73 ? "RR73" : "RRR"); if(bHisCall and !bMyCall) t="<" + hisCall + "> " + my_callsign + " " + (m_send_RR73 ? "RR73" : "RRR"); } @@ -5603,15 +5605,16 @@ void MainWindow::on_actionFT4_triggered() m_bFastMode=false; WSPR_config(false); switch_mode (Modes::FT4); - m_nsps=6912; //??? + m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=50; //??? + m_hsymStop=50; setup_status_bar (bVHF); m_toneSpacing=12000.0/512.0; - ui->actionFT4->setChecked(true); //??? + ui->actionFT4->setChecked(true); m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); + m_send_RR73=true; VHF_features_enabled(bVHF); // ui->cbAutoSeq->setChecked(false); m_fastGraph->hide(); From 3a6e26d6455cd7338d76d5349582a4925ddcae91 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 14 Mar 2019 12:03:07 -0400 Subject: [PATCH 138/367] Clean up the FT4 logic for setting status of labDXped, cbAutoSeq, cbFirst. --- widgets/mainwindow.cpp | 41 +++++++++++++++++++++++++++++++++-------- widgets/mainwindow.h | 1 + 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 8a189812a..26c7229f8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1795,6 +1795,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog ui->actionEnable_AP_JT65->setVisible(false); } if(m_config.special_op_id()!=nContest0) ui->tx1->setEnabled(true); + chkFT4(); } } @@ -5636,14 +5637,7 @@ void MainWindow::on_actionFT4_triggered() ui->txb5->setEnabled(true); ui->txb6->setEnabled(true); ui->txFirstCheckBox->setEnabled(true); - ui->cbAutoSeq->setEnabled(true); - ui->labDXped->setText(""); - ui->labDXped->setVisible(false); - if (SpecOp::RTTY == m_config.special_op_id ()) { - ui->labDXped->setVisible(true); - ui->labDXped->setText("RTTY"); - on_contest_log_action_triggered(); - } + chkFT4(); statusChanged(); } @@ -8884,3 +8878,34 @@ void MainWindow::save_FT4() m_kin0=dec_data.params.kin; } + +void MainWindow::chkFT4() +{ + if(m_mode!="FT4") return; + if(m_config.special_op_id()==SpecOp::RTTY) { + ui->cbAutoSeq->setEnabled(true); + ui->cbFirst->setEnabled(true); + } else { + ui->cbAutoSeq->setChecked(false); + ui->cbAutoSeq->setEnabled(false); + ui->cbFirst->setChecked(false); + ui->cbFirst->setEnabled(false); + ui->cbFirst->setVisible(false); + } + ui->cbFirst->setVisible(ui->cbAutoSeq->isChecked()); + + if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) { + QString t0=""; + if(SpecOp::NA_VHF==m_config.special_op_id()) t0+="NA VHF"; + if(SpecOp::EU_VHF==m_config.special_op_id()) t0+="EU VHF"; + if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0+="Field Day"; + if(SpecOp::RTTY==m_config.special_op_id()) t0+="RTTY"; + if(t0=="") { + ui->labDXped->setVisible(false); + } else { + ui->labDXped->setVisible(true); + ui->labDXped->setText(t0); + } + on_contest_log_action_triggered(); + } +} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 216405ae8..8be317596 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -348,6 +348,7 @@ private: void hideMenus(bool b); void foxTest(); void setColorHighlighting(); + void chkFT4(); NetworkAccessManager m_network_manager; bool m_valid; From 0dc43a069398c0e731944f58ac7fe6731cc5ddb3 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 15 Mar 2019 17:39:06 +0000 Subject: [PATCH 139/367] Add FAQ item explaining how to fix configurations on KDE Linux desktops --- doc/user_guide/en/faq.adoc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/doc/user_guide/en/faq.adoc b/doc/user_guide/en/faq.adoc index 9240f3436..27751a493 100644 --- a/doc/user_guide/en/faq.adoc +++ b/doc/user_guide/en/faq.adoc @@ -95,3 +95,19 @@ QT_QPA_PLATFORMTHEME set to empty (the space after the '=' character is necessary): QT_QPA_PLATFORMTHEME= wsjtx + +I am running _WSJT-X_ on Linux using a KDE desktop. Why does *Menu->Configurations* misbehave?:: + +The KDE development team have added code to Qt that tries to +automatically add shortcut accelerator keys to all buttons including +pop up menu buttons, this interferes with operation of the application +(many other Qt applications have similar issues with KDE). Until this +is fixed by the KDE team you must disable this misfeature. Edit the +file ~/.config/kdeglobals and add a section containing the following: + + [Development] + AutoCheckAccelerators=false + ++ +See https://stackoverflow.com/a/32711483 and +https://bugs.kde.org/show_bug.cgi?id=337491 for more details. From ffb6d3624f3ae4a3f76cb449704698bcc855a66f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 21 Mar 2019 09:33:37 -0400 Subject: [PATCH 140/367] In FT4 mode, display only "for us" and Tx messages in right window. --- widgets/mainwindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 26c7229f8..f0b4b01de 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8759,9 +8759,7 @@ void MainWindow::ft4_rx(int k) m_bAutoReply = true; ui->cbFirst->setStyleSheet(""); } - if(for_us or ((qAbs(audioFreq - ui->TxFreqSpinBox->value()) <= 150) and parts[iFirstCall]!="CQ")) { - // This msg contains MyCall, or is within 150 hertz of our Tx frequency - // (Is that the best logic to use here??) + if(for_us) { ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); if(decodedtext.string().trimmed().contains(m_inQSOwith)) processMessage(decodedtext); From 212e4a3c071334cd28e042069308779993617843 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 21 Mar 2019 12:36:38 -0400 Subject: [PATCH 141/367] Add a timeout message for what will become v2.1.0-rc1. --- widgets/mainwindow.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index f0b4b01de..ade54bdc1 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -988,7 +988,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, if(QCoreApplication::applicationVersion().contains("-devel") or QCoreApplication::applicationVersion().contains("-rc")) { - // QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); + QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); } if(!ui->cbMenus->isChecked()) { @@ -1003,18 +1003,12 @@ void MainWindow::not_GA_warning_message () { MessageBox::critical_message (this, "

" - "IMPORTANT: New protocols for the FT8 and MSK144 modes " - "became the world‑wide standards on December 10, 2018." - , "

" - "WSJT‑X 2.0 cannot communicate in these modes with other " - "stations using WSJT‑X v1.9.1 or earlier." - "

" - "Please help by urging everyone to upgrade to WSJT‑X 2.0 " - "no later than January 1, 2019."); - -// QDateTime now=QDateTime::currentDateTime(); -// QDateTime timeout=QDateTime(QDate(2018,12,31)); -// if(now.daysTo(timeout) < 0) Q_EMIT finished(); + "This is a pre-release version of WSJT-X 2.1.0 made " + "available for testing purposes. It will become nonfunctional " + "after May 1, 2019."); + QDateTime now=QDateTime::currentDateTime(); + QDateTime timeout=QDateTime(QDate(2019,5,1)); + if(now.daysTo(timeout) < 0) Q_EMIT finished(); } void MainWindow::initialize_fonts () From 0fef707118cc111a656839a614355b705a997094 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 21 Mar 2019 13:27:10 -0500 Subject: [PATCH 142/367] Widen candidate frequency offset window to f0=[10,4990] Hz. --- lib/ft4/ft4_decode.f90 | 5 ++--- lib/ft4/ft4d.f90 | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index f62569343..63cc6753e 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -183,7 +183,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & do icand=1,ncand f0=candidate(1,icand) snr=candidate(3,icand)-1.0 - if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle + if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle call clockit('ft4_down',0) call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol call clockit('ft4_down',1) @@ -232,9 +232,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & enddo enddo f0=f0+real(idfbest) + if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle -!f0=1500 -!ibest=219 call clockit('ft4down ',0) call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 call clockit('ft4down ',1) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 7725992df..f8e6dab71 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -43,8 +43,8 @@ program ft4d read(arg,*) nQSOProgress iarg=iarg+2 endif - nfa=0 - nfb=4224 + nfa=10 + nfb=4990 ndecodes=0 nfqso=1500 mycall="K9AN" From e2db793b5d26960e20f84b32926402d992f60556 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Mar 2019 08:20:19 -0400 Subject: [PATCH 143/367] Don't save .wav files in FT4 mode unless SaveAll is checked. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index ade54bdc1..04af3697b 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8684,7 +8684,7 @@ void MainWindow::ft4_rx(int k) } } if(j>60000) wrapped=false; - if(((k-m_kin0)/12000.0 > 15.0) and !m_diskData) save_FT4(); + if(m_saveAll and ((k-m_kin0)/12000.0 > 15.0) and !m_diskData) save_FT4(); if(k>=NRING) { if(m_saveAll and !m_diskData) save_FT4(); From 2f0ff14134d4515ef09c9d254a8ef22528530af2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Mar 2019 08:49:22 -0400 Subject: [PATCH 144/367] Enable NA_VHF contest messages in FT4 mode. --- widgets/mainwindow.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 04af3697b..7abf32d50 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4895,11 +4895,6 @@ bool MainWindow::stdCall(QString const& w) void MainWindow::genStdMsgs(QString rpt, bool unconditional) { -// Prevent abortQSO from working when a TU; message is already queued -// if(ui->tx3->text().left(4)=="TU; ") { -// return; -// } - genCQMsg (); auto const& hisCall=ui->dxCallEntry->text(); if(!hisCall.size ()) { @@ -4983,7 +4978,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) msgtype(t + sent, ui->tx2); if(sent==rpt) msgtype(t + "R" + sent, ui->tx3); if(sent!=rpt) msgtype(t + "R " + sent, ui->tx3); - if(m_mode=="FT4") { + if(m_mode=="FT4" and SpecOp::RTTY==m_config.special_op_id()) { QDateTime now=QDateTime::currentDateTimeUtc(); int sinceTx3 = m_dateTimeSentTx3.secsTo(now); int sinceRR73 = m_dateTimeRcvdRR73.secsTo(now); @@ -8740,7 +8735,7 @@ void MainWindow::ft4_rx(int k) m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); //Right (Rx Frequency) window - int audioFreq=decodedtext.frequencyOffset(); +// int audioFreq=decodedtext.frequencyOffset(); auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); if(parts.size() > 6) { @@ -8874,7 +8869,7 @@ void MainWindow::save_FT4() void MainWindow::chkFT4() { if(m_mode!="FT4") return; - if(m_config.special_op_id()==SpecOp::RTTY) { + if(m_config.special_op_id()==SpecOp::RTTY or m_config.special_op_id()==SpecOp::NA_VHF) { ui->cbAutoSeq->setEnabled(true); ui->cbFirst->setEnabled(true); } else { From 974cf50e16351c23a9337e262361bad2f8696d02 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Mar 2019 09:24:52 -0400 Subject: [PATCH 145/367] Red label (ui->labDXped) should disappear in FT4 modeif we leave all contest modes. --- widgets/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7abf32d50..3ee421e48 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8872,12 +8872,14 @@ void MainWindow::chkFT4() if(m_config.special_op_id()==SpecOp::RTTY or m_config.special_op_id()==SpecOp::NA_VHF) { ui->cbAutoSeq->setEnabled(true); ui->cbFirst->setEnabled(true); + ui->labDXped->setVisible(true); } else { ui->cbAutoSeq->setChecked(false); ui->cbAutoSeq->setEnabled(false); ui->cbFirst->setChecked(false); ui->cbFirst->setEnabled(false); ui->cbFirst->setVisible(false); + ui->labDXped->setVisible(false); } ui->cbFirst->setVisible(ui->cbAutoSeq->isChecked()); From e38091705bf3a6968810c1d61ba89ea382bdbe7d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Mar 2019 10:57:09 -0400 Subject: [PATCH 146/367] In FT4 mode, let F11 and F12 move Tx freq by +/- 120 Hz. --- widgets/mainwindow.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 3ee421e48..18dab0088 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1993,7 +1993,9 @@ void MainWindow::keyPressEvent (QKeyEvent * e) n=11; if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { - ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()-60); + int offset=60; + if(m_mode=="FT4") offset=120; + ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()-offset); } else{ bumpFqso(n); } @@ -2007,7 +2009,9 @@ void MainWindow::keyPressEvent (QKeyEvent * e) n=12; if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { - ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()+60); + int offset=60; + if(m_mode=="FT4") offset=120; + ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()+offset); } else { bumpFqso(n); } From 665dbd0f78e6391ef674ef94c645a0c2a5f671c8 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Mar 2019 13:52:06 -0400 Subject: [PATCH 147/367] With Alternate F1-F5 checked, let Ctrl+F1 send the message in Tx1. --- widgets/mainwindow.cpp | 6 +++++- widgets/mainwindow.ui | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 18dab0088..b318d2528 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1915,7 +1915,11 @@ void MainWindow::keyPressEvent (QKeyEvent * e) case Qt::Key_F1: if(bAltF1F5) { if(m_mode=="FT4") { - ft4_tx(6); + if(e->modifiers() & Qt::ControlModifier) { + ft4_tx(1); + } else { + ft4_tx(6); + } return; } auto_tx_mode(true); diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index cab236b62..a779cb413 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -2774,9 +2774,6 @@ list. The list can be maintained in Settings (F2). About WSJT-X - - Ctrl+F1 - From 68ee0a6bcad00222c238e1c854650869bf8b8ed4 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 22 Mar 2019 16:16:05 -0400 Subject: [PATCH 148/367] Add a sample file for FT4. --- samples/FT4/190106_000115.wav | Bin 0 -> 360044 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 samples/FT4/190106_000115.wav diff --git a/samples/FT4/190106_000115.wav b/samples/FT4/190106_000115.wav new file mode 100644 index 0000000000000000000000000000000000000000..cf23159f884b7d4a7719ea4179fef3465c8c66b1 GIT binary patch literal 360044 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 literal 0 HcmV?d00001 From 74ff96c60740f7a0816cf2287c23c6ce32655da3 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 22 Mar 2019 22:19:51 +0000 Subject: [PATCH 149/367] Add new FT4 sample WAV file to CMake script --- samples/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 78bdcf07e..cab1609cb 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,4 +1,5 @@ set (SAMPLE_FILES + FT4/190106_000115.wav FT8/181201_180245.wav ISCAT/ISCAT-A/VK7MO_110401_235515.wav ISCAT/ISCAT-B/K0AWU_100714_115000.wav From d6eff44b546514a3c34c012ca7bd8fb83982e7a0 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 22 Mar 2019 22:30:42 +0000 Subject: [PATCH 150/367] Updated AD1C CTY.DAT file (19th March 2019 Big CTY.DAT version) --- cty.dat | 1199 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 608 insertions(+), 591 deletions(-) diff --git a/cty.dat b/cty.dat index a94878c03..1f533072f 100644 --- a/cty.dat +++ b/cty.dat @@ -48,7 +48,8 @@ ITU HQ: 14: 28: EU: 46.17: -6.05: -1.0: 4U1I: United Nations HQ: 05: 08: NA: 40.75: 73.97: 5.0: 4U1U: =4U1UN,=4U50SPACE,=4U60UN,=4U64UN,=4U70UN; Vienna Intl Ctr: 15: 28: EU: 48.20: -16.30: -1.0: *4U1V: - =4U0R,=4U10NPT,=4U18FIFA,=4U1A,=4U1VIC,=4U1WED,=4U1XMAS,=4U2U,=4U30VIC,=4U70VIC,=4Y1A,=C7A; + =4U0R,=4U10NPT,=4U18FIFA,=4U1A,=4U1VIC,=4U1WED,=4U1XMAS,=4U2U,=4U30VIC,=4U500M,=4U70VIC,=4Y1A, + =C7A; Timor - Leste: 28: 54: OC: -8.80: -126.05: -9.0: 4W: 4W,=4U1ET; Israel: 20: 39: AS: 31.32: -34.82: -2.0: 4X: @@ -118,15 +119,15 @@ West Malaysia: 28: 54: AS: 3.95: -102.23: -8.0: 9M2: =9W6MAN/2; East Malaysia: 28: 54: OC: 2.68: -113.32: -8.0: 9M6: 9M6,9M8,9W6,9W8,=9M1CSQ,=9M1CSS,=9M2/G3TMA/6,=9M2/PG5M/6,=9M2/R6AF/6,=9M2GCN/6,=9M2MDX/6, - =9M4ARD/6,=9M4CBP,=9M4CCB,=9M4CHQ,=9M4CJN,=9M4CMY,=9M4CPB,=9M4CRB,=9M4CSR,=9M4CWS,=9M4GCW,=9M4JSE, - =9M4LHM,=9M4LHS,=9M4LTW,=9M4RSA,=9M4SAB,=9M4SEB,=9M4SHQ,=9M4SJE,=9M4SJO,=9M4SJQ,=9M4SJS,=9M4SJSA, - =9M4SJSB,=9M4SJSD,=9M4SJSL,=9M4SJSP,=9M4SJST,=9M4SJSW,=9M4SJX,=9M4SMO,=9M4SMS,=9M4SMY,=9M4STA, - =9M4SWK,=9M50IARU/6,=9M50IARU/8,=9M50MQ,=9M50MS,=9M51GW,=9M51SB,=9M53QA,=9M57MS,=9M57MW,=9M58MS, - =9M58MW,=9M59MS,=9M59MW,=9M9/7M2VPR,=9M9/CCL,=9W2RCR/6,=9W2VVH/6; + =9M4ARD/6,=9M4CBP,=9M4CCB,=9M4CHQ,=9M4CJN,=9M4CMY,=9M4CPB,=9M4CRB,=9M4CRP,=9M4CSR,=9M4CWS,=9M4GCW, + =9M4JSE,=9M4LHM,=9M4LHS,=9M4LTW,=9M4RSA,=9M4SAB,=9M4SEB,=9M4SHQ,=9M4SJE,=9M4SJO,=9M4SJQ,=9M4SJS, + =9M4SJSA,=9M4SJSB,=9M4SJSD,=9M4SJSL,=9M4SJSP,=9M4SJST,=9M4SJSW,=9M4SJX,=9M4SMO,=9M4SMS,=9M4SMY, + =9M4STA,=9M4SWK,=9M50IARU/6,=9M50IARU/8,=9M50MQ,=9M50MS,=9M51GW,=9M51SB,=9M53QA,=9M57MS,=9M57MW, + =9M58MS,=9M58MW,=9M59MS,=9M59MW,=9M9/7M2VPR,=9M9/CCL,=9W2RCR/6,=9W2VVH/6; Nepal: 22: 42: AS: 27.70: -85.33: -5.75: 9N: 9N; Dem. Rep. of the Congo: 36: 52: AF: -3.12: -23.03: -1.0: 9Q: - 9O,9P,9Q,9R,9S,9T,=VERSION; + 9O,9P,9Q,9R,9S,9T; Burundi: 36: 52: AF: -3.17: -29.78: -2.0: 9U: 9U; Singapore: 28: 54: AS: 1.37: -103.78: -8.0: 9V: @@ -517,7 +518,7 @@ Antarctica: 13: 74: SA: -90.00: 0.00: 0.0: CE9: FT7Y(30)[70],FT8Y(30)[70], =VP8DLM[73], =FT5YK/KC4[73],=KC4/FT5YK[73], - =VP8/UT1KY[73], + =VP8/UT1KY[73],=VP8CTR[73], =VP8DJB/P[73], =VP8/G0VZM/P[73],=VP8/MM0TJR/P[73],=VP8BF[73],=VP8DJB[73],=VP8DOU[73],=VP8DPE[73],=VP8ROT[73], =VP8ADE[73],=VP8ADE/B[73],=VP8DLJ[73],=VP8DPJ[73], @@ -577,7 +578,9 @@ Antarctica: 13: 74: SA: -90.00: 0.00: 0.0: CE9: =D8A(30)[71], =DP1POL/P(38)[67], =KC4/K6REF(32)[71], - =DP0GVN/P(38)[67]; + =DP0GVN/P(38)[67], + =FT5YK/P[73], + =RI1ANX(38)[67]; Cuba: 08: 11: NA: 21.50: 80.00: 5.0: CM: CL,CM,CO,T4, =T40C/LT, @@ -585,7 +588,7 @@ Cuba: 08: 11: NA: 21.50: 80.00: 5.0: CM: Morocco: 33: 37: AF: 32.00: 5.00: 0.0: CN: 5C,5D,5E,5F,5G,CN; Bolivia: 10: 12: SA: -17.00: 65.00: 4.0: CP: - CP, + CP,=VERSION, CP2[14], CP3[14], CP4[14], @@ -629,17 +632,17 @@ Fed. Rep. of Germany: 14: 28: EU: 51.00: -10.00: -1.0: DL: =DF5FO/LH,=DF8AN/LGT,=DF8AN/LH,=DF8AN/P/LH,=DF9HG/LH,=DG0GF/LH,=DG3XA/LH,=DH0IPA/LH,=DH1DH/LH, =DH1DH/M/LH,=DH6RS/LH,=DH7RK/LH,=DH9JK/LH,=DH9UW/YL,=DJ0PJ/LH,=DJ2OC/LH,=DJ3XG/LH,=DJ5AA/LH, =DJ7AO/LH,=DJ7MH/LH,=DJ8RH/LH,=DJ9QE/LH,=DK0DAN/LH,=DK0FC/LGT,=DK0FC/LH,=DK0IZ/LH,=DK0KTL/LH, - =DK0LWL/L,=DK0LWL/LH,=DK0OC/LH,=DK0PRE/LH,=DK0RA/LH,=DK0RBY/LH,=DK0RU/LH,=DK0RZ/LH,=DK3DUA/LH, - =DK3R/LH,=DK4DS/LH,=DK4MT/LT,=DK5AN/P/LH,=DK5T/LH,=DK5T/LS,=DL/HB9DQJ/LH,=DL0AWG/LH,=DL0BLA/LH, - =DL0BPS/LH,=DL0BUX/LGT,=DL0BUX/LH,=DL0CA/LH,=DL0CUX/LGT,=DL0CUX/LV,=DL0DAB/LH,=DL0EJ/LH, - =DL0EM/LGT,=DL0EM/LH,=DL0EO/LGT,=DL0EO/LH,=DL0FFF/LGT,=DL0FFF/LH,=DL0FFF/LS,=DL0FHD/LH,=DL0FL/FF, - =DL0HDF/LH,=DL0HGW/LGT,=DL0HGW/LH,=DL0HST/LH,=DL0II/LH,=DL0IOO/LH,=DL0IPA/LH,=DL0LGT/LH, - =DL0LNW/LH,=DL0MCM/LH,=DL0MFH/LGT,=DL0MFH/LH,=DL0MFK/LGT,=DL0MFK/LH,=DL0MFN/LH,=DL0MHR/LH, - =DL0NH/LH,=DL0PAS/LH,=DL0PBS/LH,=DL0PJ/LH,=DL0RSH/LH,=DL0RUG/LGT,=DL0RUG/LH,=DL0RWE/LH,=DL0SH/LH, - =DL0SY/LH,=DL0TO/LH,=DL0UEM/LH,=DL0YLM/LH,=DL1BSN/LH,=DL1DUT/LH,=DL1ELU/LH,=DL1HZM/YL,=DL1SKK/LH, - =DL2FCA/YL,=DL2RPS/LH,=DL3ANK/LH,=DL3KWR/YL,=DL3KZA/LH,=DL3RNZ/LH,=DL4ABB/LH,=DL5CX/LH,=DL5KUA/LH, - =DL5SE/LH,=DL65DARC/LH,=DL6ABN/LH,=DL6AP/LH,=DL6KWN/LH,=DL7ANC/LH,=DL7BMG/LH,=DL7MFK/LH, - =DL7UVO/LH,=DL7VDX/LH,=DL8HK/YL,=DL8MTG/LH,=DL8TG/LV,=DL8UAA/FF,=DL9CU/LH,=DL9NEI/ND2N,=DL9OE/LH, + =DK0LWL/LH,=DK0OC/LH,=DK0PRE/LH,=DK0RA/LH,=DK0RBY/LH,=DK0RU/LH,=DK0RZ/LH,=DK3DUA/LH,=DK3R/LH, + =DK4DS/LH,=DK4MT/LT,=DK5AN/P/LH,=DK5T/LH,=DK5T/LS,=DL/HB9DQJ/LH,=DL0AWG/LH,=DL0BLA/LH,=DL0BPS/LH, + =DL0BUX/LGT,=DL0BUX/LH,=DL0CA/LH,=DL0CUX/LGT,=DL0CUX/LV,=DL0DAB/LH,=DL0EJ/LH,=DL0EM/LGT,=DL0EM/LH, + =DL0EO/LGT,=DL0EO/LH,=DL0FFF/LGT,=DL0FFF/LH,=DL0FFF/LS,=DL0FHD/LH,=DL0FL/FF,=DL0HDF/LH, + =DL0HGW/LGT,=DL0HGW/LH,=DL0HST/LH,=DL0II/LH,=DL0IOO/LH,=DL0IPA/LH,=DL0LGT/LH,=DL0LNW/LH, + =DL0MCM/LH,=DL0MFH/LGT,=DL0MFH/LH,=DL0MFK/LGT,=DL0MFK/LH,=DL0MFN/LH,=DL0MHR/LH,=DL0NH/LH, + =DL0PAS/LH,=DL0PBS/LH,=DL0PJ/LH,=DL0RSH/LH,=DL0RUG/LGT,=DL0RUG/LH,=DL0RWE/LH,=DL0SH/LH,=DL0SY/LH, + =DL0TO/LH,=DL0UEM/LH,=DL0YLM/LH,=DL1BSN/LH,=DL1DUT/LH,=DL1ELU/LH,=DL1HZM/YL,=DL1SKK/LH,=DL2FCA/YL, + =DL2RPS/LH,=DL3ANK/LH,=DL3KWR/YL,=DL3KZA/LH,=DL3RNZ/LH,=DL4ABB/LH,=DL5CX/LH,=DL5KUA/LH,=DL5SE/LH, + =DL65DARC/LH,=DL6ABN/LH,=DL6AP/LH,=DL6KWN/LH,=DL7ANC/LH,=DL7BMG/LH,=DL7MFK/LH,=DL7UVO/LH, + =DL7VDX/LH,=DL8HK/YL,=DL8MTG/LH,=DL8TG/LV,=DL8UAA/FF,=DL9CU/LH,=DL9NEI/ND2N,=DL9OE/LH, =DL9SEP/P/LH,=DM2C/LH,=DM3B/LH,=DM3G/LH,=DM3KF/LH,=DM5C/LH,=DM5JBN/LH,=DN0AWG/LH,=DN4MB/LH, =DN8RLS/YL,=DO1EEW/YL,=DO1OMA/LH,=DO5MCL/LH,=DO5MCL/YL,=DO6KDS/LH,=DO6UVM/LH,=DO7DC/LH,=DO7RKL/LH, =DQ4M/LH,=DQ4M/LT,=DR100MF/LS,=DR3M/LH,=DR4W/FF,=DR4X/LH,=DR9Z/LH; @@ -651,8 +654,8 @@ Palestine: 20: 39: AS: 31.28: -34.27: -2.0: E4: E4; North Cook Islands: 32: 62: OC: -10.02: 161.08: 10.0: E5/n: =E51LYC,=E51QMA,=E51TUG, - =E51AMF,=E51M,=E51MAN,=E51MBX,=E51MKW,=E51MQT,=E51PT,=E51QQQ,=E51UFF,=E51WWB,=ZK1HCC,=ZK1MA, - =ZK1NCF,=ZK1NCI,=ZK1TTG, + =E51AMF,=E51AUZ,=E51GC,=E51M,=E51MAN,=E51MBX,=E51MKW,=E51MQT,=E51NPQ,=E51PT,=E51QQQ,=E51UFF, + =E51WWB,=ZK1HCC,=ZK1MA,=ZK1NCF,=ZK1NCI,=ZK1TTG, =E50W[63],=E51PDX[63],=E51PEN[63],=E51WL[63],=ZK1/AC4LN/N[63],=ZK1KDN[63],=ZK1NCP[63],=ZK1NDK[63], =ZK1NJC[63],=ZK1QMA[63],=ZK1TUG[63],=ZK1WL[63]; South Cook Islands: 32: 63: OC: -21.90: 157.93: 10.0: E5/s: @@ -689,9 +692,9 @@ Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6: AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,=EA1QE/6,=EA1YO/6,=EA2EZ/6,=EA2SG/6,=EA2TW/6,=EA3BT/6, =EA3CBH/6,=EA3ERT/6,=EA3HSD/6,=EA3HUX/6,=EA3HZX/6,=EA3HZX/P,=EA4LO/6,=EA5ADM/6,=EA5BB/6,=EA5BK/6, =EA5BTL/6,=EA5EOR/6,=EA5ER/6,=EA5EZ/6,=EA5FL/P,=EA5HCC/6,=EA5IIG/6,=EA5IKT/6,=EA5RKB/6, - =EA6/DJ7AO/LH,=EA6/G0SGB/LH,=EA6HP/J,=EA6URI/PAZ,=EA6URL/IF,=EA7DUT/6,=EA9CI/6,=EA9CP/6,=EB1BRH/6, - =EB2GKK/6,=EB3CW/6,=EC5AC/6,=EC5BME/6,=EC5EA/P,=EC5EC/6,=EC6TV/N,=EC7AT/6,=ED4SHF/6,=ED5ON/6, - =EH90IARU/6; + =EA6/DJ7AO/LH,=EA6/G0SGB/LH,=EA6HP/J,=EA6LU/P,=EA6URI/PAZ,=EA6URL/IF,=EA7DUT/6,=EA9CI/6,=EA9CP/6, + =EB1BRH/6,=EB2GKK/6,=EB3CW/6,=EC5AC/6,=EC5BME/6,=EC5EA/P,=EC5EC/6,=EC6TV/N,=EC7AT/6,=ED4SHF/6, + =ED5ON/6,=EH90IARU/6; Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8: AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8,=AN400L,=AN400U,=AO150ITU/8,=AO150U,=AO4AAA/8, =EA1AK/8,=EA1AP/8,=EA1EHW/8,=EA1YO/8,=EA3RKB/8,=EA4BQ/8,=EA4ESI/8,=EA4SV/8,=EA4WT/8,=EA4ZK/8, @@ -705,8 +708,8 @@ Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8: =EA2TW/8,=EA3FNZ/8,=EA5EZ/8, =AO3MWC/8,=EA2SG/8,=EA4BFH/8,=EA4DE/8,=EA5RKB/8,=EA8BFH/P; Ceuta & Melilla: 33: 37: AF: 35.90: 5.27: -1.0: EA9: - AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9,=EA7URM/9,=EA9CE/C,=EA9CE/D,=EA9CE/E,=EA9CE/F, - =EA9CE/G,=EA9CE/H,=EA9CE/I,=EA9URC/PAZ,=EC7DZZ/9,=ED3AFR/9,=ED9CE/D,=ED9CE/E,=ED9CE/F, + AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9,=EA4URE/9,=EA7URM/9,=EA9CE/C,=EA9CE/D,=EA9CE/E, + =EA9CE/F,=EA9CE/G,=EA9CE/H,=EA9CE/I,=EA9URC/PAZ,=EC7DZZ/9,=ED3AFR/9,=ED9CE/D,=ED9CE/E,=ED9CE/F, =EA3EGB/9,=EA5RKB/9,=EA7UV/P,=EA9CD/M,=EA9CD/P,=EB9PH/P,=EC5ALJ/9, =EA5DCL/9,=EA7JTF/9,=EA9PD/M,=EA9PD/P,=EC7DRS/9; Ireland: 14: 27: EU: 53.13: 8.02: 0.0: EI: @@ -721,8 +724,8 @@ Iran: 21: 40: AS: 32.00: -53.00: -3.5: EP: Moldova: 16: 29: EU: 47.00: -29.00: -2.0: ER: ER,=ER3AC/FF,=ER3CR/FF,=ER4LX/FF; Estonia: 15: 29: EU: 59.00: -25.00: -2.0: ES: - ES,=ES/RX3AMI/LH,=ES/SA5FYR/LH, - =ES0TI/LH; + ES,=ES/SA5FYR/LH, + =ES/RX3AMI/LH,=ES0TI/LH; Ethiopia: 37: 48: AF: 9.00: -39.00: -3.0: ET: 9E,9F,ET,=ET3AA/YOTA; Belarus: 16: 29: EU: 54.00: -28.00: -2.0: EU: @@ -777,7 +780,8 @@ Marquesas Islands: 31: 63: OC: -8.92: 140.07: 9.5: FO/m: St. Pierre & Miquelon: 05: 09: NA: 46.77: 56.20: 3.0: FP: FP,=TO200SPM,=TO2U,=TO5FP; Reunion Island: 39: 53: AF: -21.12: -55.48: -4.0: FR: - FR,=TO0FAR,=TO0R,=TO1PF,=TO1PF/P,=TO1TAAF,=TO2R,=TO2R/P,=TO2Z,=TO3R,=TO5M,=TO5R,=TO7CC,=TO90R; + FR,=TO0FAR,=TO0R,=TO19A,=TO1PF,=TO1PF/P,=TO1TAAF,=TO2R,=TO2R/P,=TO2Z,=TO3R,=TO5M,=TO5R,=TO7CC, + =TO90R; St. Martin: 08: 11: NA: 18.08: 63.03: 4.0: FS: FS,=TO1E,=TO2EME,=TO4X,=TO5D,=TO5SM,=TO5SM/P; Glorioso Islands: 39: 53: AF: -11.55: -47.28: -4.0: FT/g: @@ -808,10 +812,10 @@ England: 14: 27: EU: 52.77: 1.47: 0.0: G: =M6AIG/YL,=M6SUS/YL,=MQ6BWA/P; Isle of Man: 14: 27: EU: 54.20: 4.53: 0.0: GD: 2D,GD,GT,MD,MT,=2O0YLX,=2Q0YLX,=2R0IOM,=2V0IOM,=2V0YLX,=GB0AOA,=GB0BEA,=GB0IOM,=GB0MST,=GB100TT, - =GB19CIM,=GB1RT,=GB1SOI,=GB2IOM,=GB2MAD,=GB2RT,=GB2WB,=GB4COM,=GB4IOM,=GB4JDF,=GB4MGR,=GB4MNH, - =GB4SPT,=GB4WXM,=GB4WXM/P,=GB5LB,=GB5MOB,=GB5TD,=GD3JIU/2K,=GO0OUD,=GQ0OUD,=GR0AMD,=GR0HWA, - =GR0OUD,=GR6AFB,=GT3FLH/LGT,=GT3FLH/LT,=GT4IOM/LH,=GT8IOM/LH,=GV0OUD,=GV3YEO,=GV6AFB,=GV7HTG, - =MB100TT,=MO1CLV,=MQ1CLV,=MR0CCE,=MR3LJB,=MR3MLD,=MV3YLX; + =GB19CIM,=GB1MSG,=GB1RT,=GB1SOI,=GB2IOM,=GB2MAD,=GB2RT,=GB2WB,=GB4COM,=GB4IOM,=GB4JDF,=GB4MGR, + =GB4MNH,=GB4SPT,=GB4WXM,=GB4WXM/P,=GB5LB,=GB5MOB,=GB5TD,=GD3JIU/2K,=GO0OUD,=GQ0OUD,=GR0AMD, + =GR0HWA,=GR0OUD,=GR6AFB,=GT3FLH/LGT,=GT3FLH/LT,=GT4IOM/LH,=GT8IOM/LH,=GV0OUD,=GV3YEO,=GV6AFB, + =GV7HTG,=MB100TT,=MO1CLV,=MQ1CLV,=MR0CCE,=MR3LJB,=MR3MLD,=MV3YLX; Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI: 2I,GI,GN,MI,MN,=2O0BAD,=2O0HBO,=2O0HRV,=2O0MFB,=2O0TWA,=2O0VEP,=2O0VGW,=2O0VIM,=2O0WAI,=2O0ZXM, =2Q0BSA,=2Q0ETB,=2Q0HRV,=2Q0MFB,=2Q0NIE,=2Q0SXG,=2Q0TWA,=2Q0VEP,=2Q0VIM,=2Q0ZXM,=2R0IRZ,=2R0IRZ/P, @@ -819,30 +823,30 @@ Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI: =2R0WMN,=2V0CSB,=GB0ARM,=GB0AS,=GB0ATM,=GB0AVB,=GB0BIG,=GB0BMS,=GB0BPM,=GB0BTC,=GB0BVC,=GB0C, =GB0CAS,=GB0CBS,=GB0COA,=GB0CSC,=GB0DDF,=GB0EBG,=GB0EG,=GB0FMF,=GB0FMH,=GB0GDI,=GB0GLS,=GB0GPF, =GB0KKM,=GB0LNR,=GB0LSP,=GB0LVA,=GB0MAH,=GB0MAR,=GB0MFD,=GB0PAT,=GB0PSM,=GB0REL,=GB0RSL,=GB0SBG, - =GB0SPD,=GB0TCH,=GB0TGN,=GB0USR,=GB0VC,=GB0WOA,=GB100BOS,=GB100RAF,=GB100RNR,=GB106TBC,=GB150WCB, - =GB16SW,=GB1918EKN,=GB19CGI,=GB19CNI,=GB1AFP,=GB1BPM,=GB1DDG,=GB1IMD,=GB1RM,=GB1ROC,=GB1SPD, - =GB1SRI,=GB1UAS,=GB1WWC,=GB2AD,=GB2AD/P,=GB2AS,=GB2BCW,=GB2BDS,=GB2BOA,=GB2CA,=GB2CRU,=GB2DCI, - =GB2DMR,=GB2DPC,=GB2IL,=GB2LL,=GB2LOL,=GB2MAC,=GB2MRI,=GB2PP,=GB2PSW,=GB2REL,=GB2SDD,=GB2SPD, - =GB2SPR,=GB2STI,=GB2STP,=GB2SW,=GB2UAS,=GB3NGI,=GB4CSC,=GB4CTL,=GB4ONI,=GB4PS,=GB4SOS,=GB4SPD, - =GB4UAS,=GB50AAD,=GB50CSC,=GB5BIG,=GB5BL,=GB5BL/LH,=GB5DPR,=GB5OMU,=GB5SPD,=GB6EPC,=GB6VCB, - =GB8BKY,=GB8BRM,=GB8DS,=GB8EGT,=GB8GLM,=GB8ROC,=GB8SPD,=GB90RSGB/82,=GB90SOM,=GB9RAF,=GB9SPD, - =GN0LIX/LH,=GN4GTY/LH,=GO0AQD,=GO0BJH,=GO0DUP,=GO3KVD,=GO3MMF,=GO3SG,=GO4DOH,=GO4GID,=GO4GUH, - =GO4LKG,=GO4NKB,=GO4ONL,=GO4OYM,=GO4SRQ,=GO4SZW,=GO6MTL,=GO7AXB,=GO7KMC,=GO8YYM,=GQ0AQD,=GQ0BJG, - =GQ0NCA,=GQ0RQK,=GQ0TJV,=GQ0UVD,=GQ1CET,=GQ3KVD,=GQ3MMF,=GQ3SG,=GQ3UZJ,=GQ3XRQ,=GQ4DOH,=GQ4GID, - =GQ4GUH,=GQ4JTF,=GQ4LKG,=GQ4LXL,=GQ4NKB,=GQ4ONL,=GQ4OYM,=GQ4SZW,=GQ6JPO,=GQ6MTL,=GQ7AXB,=GQ7JYK, - =GQ7KMC,=GQ8RQI,=GQ8YYM,=GR0BJH,=GR0BRO,=GR0DVU,=GR0RQK,=GR0RWO,=GR0UVD,=GR1CET,=GR3GTR,=GR3KDR, - =GR3SG,=GR3WEM,=GR4AAM,=GR4DHW,=GR4DOH,=GR4FUE,=GR4FUM,=GR4GID,=GR4GOS,=GR4GUH,=GR4KQU,=GR4LXL, - =GR4NKB,=GR6JPO,=GR7AXB,=GR7KMC,=GR8RKC,=GR8RQI,=GR8YYM,=GV1BZT,=GV3KVD,=GV3SG,=GV4FUE,=GV4GUH, - =GV4JTF,=GV4LXL,=GV4SRQ,=GV4WVN,=GV7AXB,=GV7THH,=MI5AFK/2K,=MN0NID/LH,=MO0ALS,=MO0BDZ,=MO0CBH, - =MO0IOU,=MO0IRZ,=MO0JFC,=MO0JFC/P,=MO0JML,=MO0JST,=MO0KYE,=MO0LPO,=MO0MOD,=MO0MOD/P,=MO0MSR, - =MO0MVP,=MO0RRE,=MO0RUC,=MO0RYL,=MO0TGO,=MO0VAX,=MO0ZXZ,=MO3RLA,=MO6AOX,=MO6NIR,=MO6TUM,=MO6WAG, - =MO6WDB,=MO6YDR,=MQ0ALS,=MQ0BDZ,=MQ0BPB,=MQ0GGB,=MQ0IRZ,=MQ0JFC,=MQ0JST,=MQ0KAM,=MQ0KYE,=MQ0MOD, - =MQ0MSR,=MQ0MVP,=MQ0RMD,=MQ0RRE,=MQ0RUC,=MQ0RYL,=MQ0TGO,=MQ0VAX,=MQ0ZXZ,=MQ3GHW,=MQ3RLA,=MQ3STV, - =MQ5AFK,=MQ6AOX,=MQ6BJG,=MQ6GDN,=MQ6WAG,=MQ6WDB,=MQ6WGM,=MR0GDO,=MR0GGB,=MR0JFC,=MR0KQU,=MR0LPO, - =MR0MOD,=MR0MSR,=MR0MVP,=MR0RUC,=MR0SAI,=MR0SMK,=MR0TFK,=MR0TLG,=MR0TMW,=MR0VAX,=MR0WWB,=MR1CCU, - =MR3RLA,=MR3TFF,=MR3WHM,=MR5AMO,=MR6CCU,=MR6CWC,=MR6GDN,=MR6MME,=MR6MRJ,=MR6OKS,=MR6OLA,=MR6PUX, - =MR6WAG,=MR6XGZ,=MV0ALS,=MV0GGB,=MV0IOU,=MV0JFC,=MV0JLC,=MV0MOD,=MV0MSR,=MV0MVP,=MV0TGO,=MV0VAX, - =MV0WGM,=MV0ZAO,=MV1VOX,=MV6DTE,=MV6GTY,=MV6NIR,=MV6TLG; + =GB0SPD,=GB0TCH,=GB0TGN,=GB0USR,=GB0VC,=GB0WOA,=GB100BOS,=GB100RNR,=GB106TBC,=GB150WCB,=GB16SW, + =GB1918EKN,=GB19CGI,=GB19CNI,=GB1AFP,=GB1BPM,=GB1DDG,=GB1IMD,=GB1RM,=GB1ROC,=GB1SPD,=GB1SRI, + =GB1UAS,=GB1WWC,=GB2AD,=GB2AD/P,=GB2AS,=GB2BCW,=GB2BDS,=GB2BOA,=GB2CA,=GB2CRU,=GB2DCI,=GB2DMR, + =GB2DPC,=GB2IL,=GB2LL,=GB2LOL,=GB2MAC,=GB2MRI,=GB2PP,=GB2PSW,=GB2REL,=GB2SDD,=GB2SPD,=GB2SPR, + =GB2STI,=GB2STP,=GB2SW,=GB2UAS,=GB3NGI,=GB4CSC,=GB4CTL,=GB4ONI,=GB4PS,=GB4SOS,=GB4SPD,=GB4UAS, + =GB50AAD,=GB50CSC,=GB5BIG,=GB5BL,=GB5BL/LH,=GB5DPR,=GB5OMU,=GB5SPD,=GB6EPC,=GB6VCB,=GB8BKY, + =GB8BRM,=GB8DS,=GB8EGT,=GB8GLM,=GB8ROC,=GB8SPD,=GB90RSGB/82,=GB90SOM,=GB9RAF,=GB9SPD,=GN0LIX/LH, + =GN4GTY/LH,=GO0AQD,=GO0BJH,=GO0DUP,=GO3KVD,=GO3MMF,=GO3SG,=GO4DOH,=GO4GID,=GO4GUH,=GO4LKG,=GO4NKB, + =GO4ONL,=GO4OYM,=GO4SRQ,=GO4SZW,=GO6MTL,=GO7AXB,=GO7KMC,=GO8YYM,=GQ0AQD,=GQ0BJG,=GQ0NCA,=GQ0RQK, + =GQ0TJV,=GQ0UVD,=GQ1CET,=GQ3KVD,=GQ3MMF,=GQ3SG,=GQ3UZJ,=GQ3XRQ,=GQ4DOH,=GQ4GID,=GQ4GUH,=GQ4JTF, + =GQ4LKG,=GQ4LXL,=GQ4NKB,=GQ4ONL,=GQ4OYM,=GQ4SZW,=GQ6JPO,=GQ6MTL,=GQ7AXB,=GQ7JYK,=GQ7KMC,=GQ8RQI, + =GQ8YYM,=GR0BJH,=GR0BRO,=GR0DVU,=GR0RQK,=GR0RWO,=GR0UVD,=GR1CET,=GR3GTR,=GR3KDR,=GR3SG,=GR3WEM, + =GR4AAM,=GR4DHW,=GR4DOH,=GR4FUE,=GR4FUM,=GR4GID,=GR4GOS,=GR4GUH,=GR4KQU,=GR4LXL,=GR4NKB,=GR6JPO, + =GR7AXB,=GR7KMC,=GR8RKC,=GR8RQI,=GR8YYM,=GV1BZT,=GV3KVD,=GV3SG,=GV4FUE,=GV4GUH,=GV4JTF,=GV4LXL, + =GV4SRQ,=GV4WVN,=GV7AXB,=GV7THH,=MI5AFK/2K,=MN0NID/LH,=MO0ALS,=MO0BDZ,=MO0CBH,=MO0IOU,=MO0IRZ, + =MO0JFC,=MO0JFC/P,=MO0JML,=MO0JST,=MO0KYE,=MO0LPO,=MO0MOD,=MO0MOD/P,=MO0MSR,=MO0MVP,=MO0RRE, + =MO0RUC,=MO0RYL,=MO0TGO,=MO0VAX,=MO0ZXZ,=MO3RLA,=MO6AOX,=MO6NIR,=MO6TUM,=MO6WAG,=MO6WDB,=MO6YDR, + =MQ0ALS,=MQ0BDZ,=MQ0BPB,=MQ0GGB,=MQ0IRZ,=MQ0JFC,=MQ0JST,=MQ0KAM,=MQ0KYE,=MQ0MOD,=MQ0MSR,=MQ0MVP, + =MQ0RMD,=MQ0RRE,=MQ0RUC,=MQ0RYL,=MQ0TGO,=MQ0VAX,=MQ0ZXZ,=MQ3GHW,=MQ3RLA,=MQ3STV,=MQ5AFK,=MQ6AOX, + =MQ6BJG,=MQ6GDN,=MQ6WAG,=MQ6WDB,=MQ6WGM,=MR0GDO,=MR0GGB,=MR0JFC,=MR0KQU,=MR0LPO,=MR0MOD,=MR0MSR, + =MR0MVP,=MR0RUC,=MR0SAI,=MR0SMK,=MR0TFK,=MR0TLG,=MR0TMW,=MR0VAX,=MR0WWB,=MR1CCU,=MR3RLA,=MR3TFF, + =MR3WHM,=MR5AMO,=MR6CCU,=MR6CWC,=MR6GDN,=MR6MME,=MR6MRJ,=MR6OKS,=MR6OLA,=MR6PUX,=MR6WAG,=MR6XGZ, + =MV0ALS,=MV0GGB,=MV0IOU,=MV0JFC,=MV0JLC,=MV0MOD,=MV0MSR,=MV0MVP,=MV0TGO,=MV0VAX,=MV0WGM,=MV0ZAO, + =MV1VOX,=MV6DTE,=MV6GTY,=MV6NIR,=MV6TLG; Jersey: 14: 27: EU: 49.22: 2.18: 0.0: GJ: 2J,GH,GJ,MH,MJ,=2R0ODX,=GB0JSA,=GB19CJ,=GB2BYL,=GB2JSA,=GB50JSA,=GB5OJR,=GB8LMI,=GJ3DVC/L, =GJ6WRI/LH,=GJ8PVL/LH,=GO8PVL,=GQ8PVL,=GR6TMM,=MO0ASP,=MQ0ASP,=MR0ASP,=MR0RZD,=MV0ASP; @@ -874,12 +878,12 @@ Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: =GB0SK,=GB0SKG,=GB0SKY,=GB0SRC,=GB0SSB,=GB0TH,=GB0THL,=GB0TNL,=GB0TTS,=GB0WRH,=GB100MAS,=GB100MUC, =GB100ZET,=GB10SP,=GB150NRL,=GB18FIFA,=GB19CGM,=GB19CS,=GB1AJ,=GB1ASC,=GB1ASH,=GB1BD,=GB1BOL, =GB1CFL,=GB1DHL,=GB1FB,=GB1FRS,=GB1FS,=GB1FVS,=GB1FVT,=GB1GEO,=GB1HRS,=GB1KGG,=GB1KLD,=GB1LAY, - =GB1LGG,=GB1LL,=GB1MAY,=GB1MSG,=GB1NHL,=GB1OL,=GB1OL/LH,=GB1PC,=GB1RB,=GB1RHU,=GB1SLH,=GB1TAY, - =GB1WLG,=GB250RB,=GB2AES,=GB2AGG,=GB2AL,=GB2AST,=GB2ATC,=GB2AYR,=GB2BAJ,=GB2BHM,=GB2BHS,=GB2BMJ, - =GB2BOL,=GB2CAS,=GB2CHC,=GB2CM,=GB2CMA,=GB2CVL,=GB2DAS,=GB2DHS,=GB2DL,=GB2DRC,=GB2DT,=GB2DTM, - =GB2ELH,=GB2ELH/LH,=GB2EPC,=GB2FBM,=GB2FSM,=GB2FSW,=GB2GEO,=GB2GKR,=GB2GNL,=GB2GNL/LH,=GB2GTM, - =GB2HLB,=GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT,=GB2JCM,=GB2KDR,=GB2KGB, - =GB2KW,=GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB,=GB2LHI,=GB2LK,=GB2LK/LH, + =GB1LGG,=GB1LL,=GB1MAY,=GB1NHL,=GB1OL,=GB1OL/LH,=GB1PC,=GB1RB,=GB1RHU,=GB1SLH,=GB1TAY,=GB1WLG, + =GB250RB,=GB2AES,=GB2AGG,=GB2AL,=GB2AST,=GB2ATC,=GB2AYR,=GB2BAJ,=GB2BHM,=GB2BHS,=GB2BMJ,=GB2BOL, + =GB2CAS,=GB2CHC,=GB2CM,=GB2CMA,=GB2CVL,=GB2DAS,=GB2DHS,=GB2DL,=GB2DRC,=GB2DT,=GB2DTM,=GB2ELH, + =GB2ELH/LH,=GB2EPC,=GB2FBM,=GB2FSM,=GB2FSW,=GB2GEO,=GB2GKR,=GB2GNL,=GB2GNL/LH,=GB2GTM,=GB2HLB, + =GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT,=GB2JCM,=GB2KDR,=GB2KGB,=GB2KW, + =GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB,=GB2LHI,=GB2LK,=GB2LK/LH, =GB2LMG,=GB2LP,=GB2LS,=GB2LS/LH,=GB2LSS,=GB2LT,=GB2LT/LH,=GB2LXX,=GB2M,=GB2MAS,=GB2MBB,=GB2MDG, =GB2MN,=GB2MOF,=GB2MSL,=GB2MUC,=GB2MUL,=GB2NBC,=GB2NEF,=GB2NL,=GB2OL,=GB2OWM,=GB2PBF,=GB2PG, =GB2QM,=GB2RB,=GB2RDR,=GB2RRL,=GB2RWW,=GB2SAA,=GB2SAM,=GB2SAS,=GB2SB,=GB2SBG,=GB2SHL/LH,=GB2SKG, @@ -1052,10 +1056,10 @@ Saudi Arabia: 21: 39: AS: 24.20: -43.83: -3.0: HZ: =HZ1SK/ND,=HZ1TL/ND,=HZ1TT/ND,=HZ1XB/ND,=HZ1ZH/ND; Italy: 15: 28: EU: 42.82: -12.58: -1.0: I: I,=II0PN/MM(40),=II1RT/N,=IO9HQ,=IP1T/LH, - =4U0WFP,=4U4F,=4U5F,=4U6F,=4U7F,=4U7FOC,=4U80FOC,=4U8F,=4U8FOC,=IK0ATK/N,=IK0CNA/LH,=IK0JFS/N, - =IK0XFD/N,=IQ0AP/J,=IQ0CV/LH,=IQ0FM/LH,=IQ0FR/LH,=IQ0GV/AAW,=IR0BP/J,=IU0FSC/LH,=IW0HP/N, - =IW9GSH/0,=IZ0BXZ/N,=IZ0DBA/N,=IZ0EGC/N,=IZ0FVD/N,=IZ0HTW/PS,=IZ0HTW/SP,=IZ0IAT/LH,=IZ0IJC/FF, - =IZ0IJC/N, + =4U0WFP,=4U4F,=4U5F,=4U6F,=4U7F,=4U7FOC,=4U80FOC,=4U8F,=4U8FOC,=II0IDR/NAVY,=IK0ATK/N,=IK0CNA/LH, + =IK0JFS/N,=IK0XFD/N,=IQ0AP/J,=IQ0CV/LH,=IQ0FM/LH,=IQ0FR/LH,=IQ0GV/AAW,=IR0BP/J,=IU0FSC/LH, + =IW0HP/N,=IW9GSH/0,=IZ0BXZ/N,=IZ0DBA/N,=IZ0EGC/N,=IZ0FVD/N,=IZ0HTW/PS,=IZ0HTW/SP,=IZ0IAT/LH, + =IZ0IJC/FF,=IZ0IJC/N, =I1MQ/N,=I1ULJ/N,=I1XSG/N,=I1YRL/GRA,=II1PV/LH,=IK1RED/N,=IK1VDN/N,=IQ1L/LH,=IQ1NM/REX,=IQ1SP/N, =IY1SP/ASB,=IY1SP/MTN,=IZ0IJC/BSM,=IZ1CLA/N,=IZ1FCF/N,=IZ1POA/N,=IZ1RGI/ECO,=IZ5GST/1/LH, =I2AZ/CA,=I2AZ/N,=I2CZQ/N,=IK2CZQ/N,=IK2FIQ/N,=IK2MKM/EXPO,=IK2SOE/CA,=IK2SOE/N,=IQ2LB/EXPO, @@ -1069,8 +1073,8 @@ Italy: 15: 28: EU: 42.82: -12.58: -1.0: I: =IQ6PS/LH,=IQ6SB/LGH,=IQ6SB/LGT,=IQ6SB/LH,=IQ6VP/J,=IZ6ASI/LH,=IZ6ASI/N,=IZ6CDI/O,=IZ6RWD/O, =IZ6TGS/LH,=IZ6TGS/N, =4U13FEB,=4U1GSC,=4U20B,=4U24OCT,=4U29MAY,=4U73B,=I7PXV/LH,=I7PXV/P/LH,=I7XUW/MI/224,=II7IAOI/N, - =II7PT/C,=II7PT/D,=II7PT/E,=II7PT/F,=II7PT/G,=II7PT/H,=II7PT/L,=IK7JWX/LH,=IQ7ML/J,=IQ7ML/LH, - =IQ7QK/LH,=IU7SCT/J,=IZ2DPX/7/LH,=IZ7DKA/YL,=IZ7KDX/LH,=IZ7LDC/LH, + =II7PT/C,=II7PT/D,=II7PT/E,=II7PT/F,=II7PT/G,=II7PT/H,=II7PT/L,=II8ICN/NAVY,=IK7JWX/LH,=IQ7ML/J, + =IQ7ML/LH,=IQ7QK/LH,=IU7SCT/J,=IZ2DPX/7/LH,=IZ7DKA/YL,=IZ7KDX/LH,=IZ7LDC/LH, =IK2RLS/8/LH,=IK8TEO/N,=IQ8OM/N,=IQ8PC/BWL,=IQ8XS/CEU,=IW8FFG/J,=IZ8AJQ/LGT,=IZ8AJQ/LH, =IZ8DBJ/LGT,=IZ8DBJ/LH,=IZ8FMU/KR,=IZ8IZK/YL,=IZ8JPV/N,=IZ8QNX/N, =IA5/IW3ILP/L, @@ -1085,7 +1089,7 @@ Sardinia: 15: 28: EU: 40.15: -9.27: -1.0: IS: =IQ0AI/P,=IQ0AK,=IQ0AK/P,=IQ0AL,=IQ0AL/P,=IQ0AM,=IQ0AM/P,=IQ0EH,=IQ0EH/P,=IQ0HO,=IQ0ID,=IQ0ID/P, =IQ0NU,=IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0QP/LH,=IQ0QP/P,=IQ0QP/WW,=IQ0SS,=IQ0SS/P, =IQ0US,=IQ0UT,=IQ0XP,=IR0EO,=IR0FOC,=IR0IDP,=IR0IDP/1,=IR0IDP/2,=IR0IDP/3,=IR0LVC,=IR0MDC, - =IS0/4Z5KJ/LH,=IS0ICE/N,=IS0IGV/N,=IS0PGF/N,=IS0SDX/N,=IW0HRI,=IY0GA; + =IS0/4Z5KJ/LH,=IS0ICE/N,=IS0IGV/N,=IS0PGF/N,=IS0SDX/N,=IW0HRI,=IY0GA,=IY0NV; Sicily: 15: 28: EU: 37.50: -14.00: -1.0: *IT9: IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=IQ1QQ/9,=IT9CHU/J,=IT9CKA/CA,=IT9CLY/JZK, =IT9DSA/CA,=IT9DTU/N,=IT9GDS/WLK,=IT9HBS/LH,=IT9JZK/WLK,=IT9KKE/JZK,=IT9MRM/N,=IT9MRZ/LH, @@ -1141,13 +1145,13 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: WQ0(4)[7],WR0(4)[7],WS0(4)[7],WT0(4)[7],WU0(4)[7],WV0(4)[7],WW0(4)[7],WX0(4)[7],WY0(4)[7], WZ0(4)[7],=AH2BW(4)[7],=AH2BY(4)[7],=AH6ES/0(4)[7],=AH6FY(4)[7],=AH6MD(4)[7],=AH6N(4)[7], =AH6N/0(4)[7],=AH6O(4)[7],=AH6OS(4)[7],=AH6RS(4)[7],=AL0G(4)[7],=AL3E(4)[7],=AL6E(4)[7], - =AL7BX(4)[7],=AL7EK(4)[7],=AL7FU(4)[7],=AL7GQ(4)[7],=AL7LL(4)[7],=AL7NY(4)[7],=AL7O/0(4)[7], - =AL7OC(4)[7],=AL7QQ(4)[7],=AL7QQ/P(4)[7],=AL9DB(4)[7],=KH0EX(4)[7],=KH2CZ(4)[7],=KH2JK(4)[7], - =KH2OP(4)[7],=KH2OP/0(4)[7],=KH2SL(4)[7],=KH6DM(4)[7],=KH6GN(4)[7],=KH6HNL(4)[7],=KH6HTV/0(4)[7], - =KH6JEM(4)[7],=KH6JFH(4)[7],=KH6NM(4)[7],=KH6NR(4)[7],=KH6RON(4)[7],=KH6SB(4)[7],=KH6TL(4)[7], - =KH6UC(4)[7],=KH6VHF(4)[7],=KH6VO(4)[7],=KH7AL/M(4)[7],=KH7AL/P(4)[7],=KH7BU(4)[7],=KH7GF(4)[7], - =KH7HA(4)[7],=KH7HY(4)[7],=KH7QI(4)[7],=KH7QJ(4)[7],=KH7QT(4)[7],=KH8CW(4)[7],=KL0DW(4)[7], - =KL0EQ(4)[7],=KL0FOX(4)[7],=KL0GP(4)[7],=KL0GQ(4)[7],=KL0MW(4)[7],=KL0UP(4)[7],=KL0WIZ(4)[7], + =AL7BX(4)[7],=AL7EK(4)[7],=AL7FU(4)[7],=AL7GQ(4)[7],=AL7NY(4)[7],=AL7O/0(4)[7],=AL7OC(4)[7], + =AL7QQ(4)[7],=AL7QQ/P(4)[7],=AL9DB(4)[7],=KH0EX(4)[7],=KH2CZ(4)[7],=KH2JK(4)[7],=KH2OP(4)[7], + =KH2OP/0(4)[7],=KH2SL(4)[7],=KH6DM(4)[7],=KH6GN(4)[7],=KH6HNL(4)[7],=KH6HTV/0(4)[7],=KH6JEM(4)[7], + =KH6JFH(4)[7],=KH6NM(4)[7],=KH6NR(4)[7],=KH6RON(4)[7],=KH6SB(4)[7],=KH6TL(4)[7],=KH6UC(4)[7], + =KH6VHF(4)[7],=KH6VO(4)[7],=KH7AL/M(4)[7],=KH7AL/P(4)[7],=KH7BU(4)[7],=KH7GF(4)[7],=KH7HA(4)[7], + =KH7HY(4)[7],=KH7QI(4)[7],=KH7QJ(4)[7],=KH7QT(4)[7],=KH8CW(4)[7],=KL0DW(4)[7],=KL0EQ(4)[7], + =KL0FOX(4)[7],=KL0GP(4)[7],=KL0GQ(4)[7],=KL0MW(4)[7],=KL0SV(4)[7],=KL0UP(4)[7],=KL0WIZ(4)[7], =KL1HT(4)[7],=KL1IF(4)[7],=KL1IF/M(4)[7],=KL1J(4)[7],=KL1LD(4)[7],=KL1PV(4)[7],=KL1TU(4)[7], =KL1V/M(4)[7],=KL1VN(4)[7],=KL2A/0(4)[7],=KL2FU(4)[7],=KL2GR(4)[7],=KL2QO(4)[7],=KL2SX(4)[7], =KL3LY(4)[7],=KL3MA(4)[7],=KL3MB(4)[7],=KL3MC(4)[7],=KL3QS(4)[7],=KL3SM(4)[7],=KL3VN(4)[7], @@ -1166,90 +1170,93 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =WL7BT(4)[7],=WL7CEG(4)[7],=WL7CLI(4)[7],=WL7CPW(4)[7],=WL7CQF(4)[7],=WL7CRT(4)[7],=WL7CY(4)[7], =WL7JB(4)[7],=WL7LZ(4)[7],=WL7LZ/M(4)[7],=WL7RV(4)[7],=WL7YM(4)[7],=WP2B/0(4)[7],=WP3QH(4)[7], =WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4HRK(4)[7],=WP4LC(4)[7],=WP4NPV(4)[7], - =AH2V(5)[8],=AH2W(5)[8],=AH6BV(5)[8],=AL0A(5)[8],=AL1O(5)[8],=AL4V(5)[8],=AL6I(5)[8],=AL6L(5)[8], - =AL6M(5)[8],=AL7EL(5)[8],=AL7LV(5)[8],=AL7QS(5)[8],=AL8E(5)[8],=KH2EH(5)[8],=KH6GR(5)[8], + =AH2V(5)[8],=AH2W(5)[8],=AH6BV(5)[8],=AL0A(5)[8],=AL1O(5)[8],=AL4V(5)[8],=AL6L(5)[8],=AL6M(5)[8], + =AL7EL(5)[8],=AL7LV(5)[8],=AL7QS(5)[8],=AL8E(5)[8],=KH2AB(5)[8],=KH2EH(5)[8],=KH6GR(5)[8], =KH6HZ(5)[8],=KH6IKI(5)[8],=KH6JKQ(5)[8],=KH6JUK(5)[8],=KH6RF(5)[8],=KH6RF/1(5)[8],=KH6RF/M(5)[8], =KH7CD(5)[8],=KH7CD/1(5)[8],=KH8AC(5)[8],=KH8AC/1(5)[8],=KL1OC(5)[8],=KL1T(5)[8],=KL1WD(5)[8], - =KL2A/1(5)[8],=KL2DM(5)[8],=KL2GA(5)[8],=KL2IC(5)[8],=KL2KL(5)[8],=KL7CE/1(5)[8],=KL7IXX(5)[8], - =KL7JHM(5)[8],=KL7JJN(5)[8],=KL7JR/1(5)[8],=KL7JT(5)[8],=KL7LK(5)[8],=KL7USI/1(5)[8],=KL8DX(5)[8], - =KP4ANG(5)[8],=KP4BLS(5)[8],=KP4BPR(5)[8],=KP4DGF(5)[8],=KP4EC/1(5)[8],=KP4G(5)[8],=KP4GVT(5)[8], - =KP4MR(5)[8],=KP4NPL(5)[8],=KP4NW(5)[8],=KP4R(5)[8],=KP4RCD(5)[8],=NH0H(5)[8],=NH6IH(5)[8], - =NH6XW(5)[8],=NH6ZB(5)[8],=NL7FJ(5)[8],=NL7MO(5)[8],=NL7NJ(5)[8],=NL7OI(5)[8],=NL7OT(5)[8], - =NL9H(5)[8],=NP2FZ(5)[8],=NP2FZ/1(5)[8],=NP2GG(5)[8],=NP2PN(5)[8],=NP3IV(5)[8],=NP3LN(5)[8], - =NP4AO(5)[8],=NP4AZ(5)[8],=NP4ER(5)[8],=VE1BES/M(5)[8],=VE3CMB/M(5)[8],=VE4CCN/M(5)[8], - =WH0EWX(5)[8],=WH2B(5)[8],=WH6CT(5)[8],=WH6DSN(5)[8],=WH6EI(5)[8],=WH6FBH(5)[8],=WH6MY(5)[8], - =WH6SW(5)[8],=WH6SW/1(5)[8],=WH7TP(5)[8],=WL1B(5)[8],=WL7B(5)[8],=WL7CC(5)[8],=WL7CUP(5)[8], - =WL7CVD(5)[8],=WL7WO(5)[8],=WL7WO/1(5)[8],=WL7Z/1(5)[8],=WP2MG(5)[8],=WP3NN(5)[8],=WP3NZ(5)[8], - =WP3QV(5)[8],=WP3QV/1(5)[8],=WP3WV(5)[8],=WP4AKE(5)[8],=WP4AZJ(5)[8],=WP4BC(5)[8],=WP4BF(5)[8], - =WP4CJH(5)[8],=WP4JF(5)[8],=WP4KQ(5)[8],=WP4MKJ(5)[8],=WP4MMV(5)[8],=WP4MOC(5)[8],=WP4NKW(5)[8], - =WP4NUV(5)[8],=WP4NYY(5)[8],=WP4OIG(5)[8],=WP4OJK(5)[8], + =KL2A/1(5)[8],=KL2DM(5)[8],=KL2GA(5)[8],=KL2IC(5)[8],=KL2KL(5)[8],=KL7CE/1(5)[8],=KL7IOP(5)[8], + =KL7IXX(5)[8],=KL7JHM(5)[8],=KL7JJN(5)[8],=KL7JR/1(5)[8],=KL7JT(5)[8],=KL7LK(5)[8], + =KL7USI/1(5)[8],=KL8DX(5)[8],=KP4ANG(5)[8],=KP4BLS(5)[8],=KP4BPR(5)[8],=KP4DGF(5)[8], + =KP4EC/1(5)[8],=KP4G(5)[8],=KP4GVT(5)[8],=KP4MR(5)[8],=KP4NPL(5)[8],=KP4NW(5)[8],=KP4R(5)[8], + =KP4RCD(5)[8],=NH0H(5)[8],=NH6IH(5)[8],=NH6XW(5)[8],=NH6ZB(5)[8],=NL7FJ(5)[8],=NL7MO(5)[8], + =NL7NJ(5)[8],=NL7OI(5)[8],=NL7OT(5)[8],=NL9H(5)[8],=NP2FZ(5)[8],=NP2FZ/1(5)[8],=NP2GG(5)[8], + =NP2PN(5)[8],=NP3IV(5)[8],=NP3LN(5)[8],=NP4AO(5)[8],=NP4AZ(5)[8],=NP4ER(5)[8],=VE1BES/M(5)[8], + =VE3CMB/M(5)[8],=VE4CCN/M(5)[8],=WH0EWX(5)[8],=WH2B(5)[8],=WH6CT(5)[8],=WH6DSN(5)[8],=WH6EI(5)[8], + =WH6FBH(5)[8],=WH6MY(5)[8],=WH6SW(5)[8],=WH6SW/1(5)[8],=WH7TP(5)[8],=WL1B(5)[8],=WL7B(5)[8], + =WL7CC(5)[8],=WL7CUP(5)[8],=WL7CVD(5)[8],=WL7WO(5)[8],=WL7WO/1(5)[8],=WL7Z/1(5)[8],=WP2MG(5)[8], + =WP3NN(5)[8],=WP3QV(5)[8],=WP3QV/1(5)[8],=WP3WV(5)[8],=WP4AKE(5)[8],=WP4AZJ(5)[8],=WP4BC(5)[8], + =WP4BF(5)[8],=WP4CJH(5)[8],=WP4JF(5)[8],=WP4KQ(5)[8],=WP4MKJ(5)[8],=WP4MMV(5)[8],=WP4MOC(5)[8], + =WP4NKW(5)[8],=WP4NUV(5)[8],=WP4NYY(5)[8],=WP4OIG(5)[8],=WP4OJK(5)[8], =AH0BR(5)[8],=AH2AL(5)[8],=AH2O(5)[8],=AH6K(5)[8],=AL0Q(5)[8],=AL0Y(5)[8],=AL2O(5)[8], =AL7RG(5)[8],=KH2CW(5)[8],=KH2P(5)[8],=KH2R(5)[8],=KH4AG(5)[8],=KH6ALN(5)[8],=KH6HO(5)[8], =KH7GA(5)[8],=KH7JO(5)[8],=KH7JO/2(5)[8],=KH7MX(5)[8],=KH7NE(5)[8],=KH8ZK(5)[8],=KL0WV(5)[8], - =KL1A/2(5)[8],=KL2A/2(5)[8],=KL2NP(5)[8],=KL3DY(5)[8],=KL3ET(5)[8],=KL3ZC(5)[8],=KL4T(5)[8], - =KL7DL(5)[8],=KL7GB(5)[8],=KL7JCQ(5)[8],=KL7NL/2(5)[8],=KL7TJZ(5)[8],=KL7USI/2(5)[8],=KL7WA(5)[8], - =KL9ER(5)[8],=KP2NP(5)[8],=KP3AK(5)[8],=KP3LM(5)[8],=KP3S(5)[8],=KP3Y(5)[8],=KP4AK(5)[8], - =KP4C(5)[8],=KP4CML(5)[8],=KP4GEG(5)[8],=KP4HR(5)[8],=KP4I(5)[8],=KP4JDR(5)[8],=KP4JMP(5)[8], - =NH2DC(5)[8],=NL7CC(5)[8],=NP2AQ(5)[8],=NP2GI(5)[8],=NP3D(5)[8],=NP3E(5)[8],=NP3EU(5)[8], - =NP3I(5)[8],=NP3KH(5)[8],=NP3KP(5)[8],=NP4IR(5)[8],=NP4IT(5)[8],=NP4JQ(5)[8],=WH0W(5)[8], + =KL1A/2(5)[8],=KL2A/2(5)[8],=KL2NP(5)[8],=KL3ET(5)[8],=KL3ZC(5)[8],=KL4T(5)[8],=KL7DL(5)[8], + =KL7GB(5)[8],=KL7JCQ(5)[8],=KL7NL/2(5)[8],=KL7TJZ(5)[8],=KL7USI/2(5)[8],=KL7WA(5)[8],=KL9ER(5)[8], + =KP2NP(5)[8],=KP3AK(5)[8],=KP3LM(5)[8],=KP3Y(5)[8],=KP4AK(5)[8],=KP4CML(5)[8],=KP4GEG(5)[8], + =KP4HR(5)[8],=KP4I(5)[8],=KP4JDR(5)[8],=KP4JMP(5)[8],=NH2DC(5)[8],=NH7NA(5)[8],=NH7TN(5)[8], + =NL7CC(5)[8],=NP2AQ(5)[8],=NP2GI(5)[8],=NP3D(5)[8],=NP3E(5)[8],=NP3EU(5)[8],=NP3I(5)[8], + =NP3KH(5)[8],=NP3KP(5)[8],=NP4H(5)[8],=NP4IR(5)[8],=NP4IT(5)[8],=NP4JQ(5)[8],=WH0W(5)[8], =WH2C(5)[8],=WH6DLD(5)[8],=WH6DNT(5)[8],=WH6UO(5)[8],=WL2NAS(5)[8],=WL7OG(5)[8],=WP2AAO(5)[8], =WP3MD(5)[8],=WP3VU(5)[8],=WP3WZ(5)[8],=WP4AR(5)[8],=WP4BMU(5)[8],=WP4BNI(5)[8],=WP4BZ(5)[8], =WP4CB(5)[8],=WP4DME(5)[8],=WP4DWH(5)[8],=WP4EHY(5)[8],=WP4EYW(5)[8],=WP4HLY(5)[8],=WP4HXS(5)[8], - =WP4LYI(5)[8],=WP4MQN(5)[8],=WP4MRB(5)[8],=WP4MUJ(5)[8],=WP4MYM(5)[8],=WP4MZO(5)[8],=WP4NBS(5)[8], - =WP4OCO(5)[8],=WP4OPY(5)[8],=WP4PZB(5)[8],=WP4R(5)[8],=XL3TUV/M(5)[8],=XM3CMB/M(5)[8], + =WP4KXX(5)[8],=WP4LYI(5)[8],=WP4MQN(5)[8],=WP4MRB(5)[8],=WP4MUJ(5)[8],=WP4MYM(5)[8],=WP4MZO(5)[8], + =WP4NBS(5)[8],=WP4OCO(5)[8],=WP4OPY(5)[8],=WP4PZB(5)[8],=WP4R(5)[8],=XL3TUV/M(5)[8], + =XM3CMB/M(5)[8], =4U1WB(5)[8],=AH6AX(5)[8],=AH6FF/3(5)[8],=AH6R(5)[8],=AH6Z(5)[8],=AH7J(5)[8],=AH8P(5)[8], =AL1B(5)[8],=AL1B/M(5)[8],=AL7AB(5)[8],=AL7NN(5)[8],=AL7NN/3(5)[8],=AL7RS(5)[8],=KH2GM(5)[8], =KH2JX(5)[8],=KH2SX(5)[8],=KH6CUJ(5)[8],=KH6ILR/3(5)[8],=KH6JGA(5)[8],=KH6LDO(5)[8],=KH8CN(5)[8], - =KL1KM(5)[8],=KL2A(5)[8],=KL2A/3(5)[8],=KL2BV(5)[8],=KL2XF(5)[8],=KL3JC(5)[8],=KL7FD(5)[8], - =KL7GLK/3(5)[8],=KL7HR/3(5)[8],=KL7JO(5)[8],=KL7OF/3(5)[8],=KL7OQ(5)[8],=KL9A/3(5)[8],=KP3M(5)[8], - =KP4CAM(5)[8],=KP4FCF(5)[8],=KP4GB/3(5)[8],=KP4IP(5)[8],=KP4JB(5)[8],=KP4N(5)[8],=KP4N/3(5)[8], - =KP4PRI(5)[8],=KP4UV(5)[8],=KP4WR(5)[8],=KP4XO(5)[8],=KP4XX(5)[8],=NH2CW(5)[8],=NH6BD(5)[8], - =NH6BK(5)[8],=NH7C(5)[8],=NH7CC(5)[8],=NH7YK(5)[8],=NL7CK(5)[8],=NL7PJ(5)[8],=NL7V/3(5)[8], - =NL7XM(5)[8],=NL7XM/B(5)[8],=NP2EP(5)[8],=NP2G(5)[8],=NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8], - =NP3YN(5)[8],=NP4RH(5)[8],=NP4YZ(5)[8],=WH6ADS(5)[8],=WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8], - =WH6CTO(5)[8],=WH6DOA(5)[8],=WH6ECO(5)[8],=WH6EEL(5)[8],=WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8], - =WH6OB(5)[8],=WH7F(5)[8],=WH7USA(5)[8],=WL7AF(5)[8],=WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8], - =WP3CC(5)[8],=WP3EC(5)[8],=WP3FK(5)[8],=WP4DA(5)[8],=WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8], - =WP4HSZ(5)[8],=WP4KDN(5)[8],=WP4KKX(5)[8],=WP4LEM(5)[8],=WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8], - =WP4MYN(5)[8],=WP4OSQ(5)[8],=WP4PPH(5)[8],=WP4PQN(5)[8],=WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8], - =WP4PYN(5)[8],=WP4PYT(5)[8],=WP4PYU(5)[8],=WP4PYV(5)[8],=WP4PYZ(5)[8],=WP4PZA(5)[8], - =AH0BV(5)[8],=AH0BZ(5)[8],=AH2AJ(5)[8],=AH2AM(5)[8],=AH2DF(5)[8],=AH2EB(5)[8],=AH2X(5)[8], - =AH3B(5)[8],=AH6AL(5)[8],=AH6AT(5)[8],=AH6AU(5)[8],=AH6BJ(5)[8],=AH6EZ/4(5)[8],=AH6FX(5)[8], - =AH6FX/4(5)[8],=AH6IC(5)[8],=AH6IJ(5)[8],=AH6IW(5)[8],=AH6JN/4(5)[8],=AH6JN/M(5)[8],=AH6KT(5)[8], - =AH6KT/4(5)[8],=AH6LS(5)[8],=AH6OB(5)[8],=AH6TI(5)[8],=AH7I/4(5)[8],=AH7MI(5)[8],=AH8B(5)[8], - =AH8M(5)[8],=AH8M/M(5)[8],=AH8T(5)[8],=AL0I(5)[8],=AL1A(5)[8],=AL3G(5)[8],=AL3M(5)[8],=AL4T(5)[8], - =AL4T/4(5)[8],=AL4U(5)[8],=AL4X(5)[8],=AL5A(5)[8],=AL7AL(5)[8],=AL7AM(5)[8],=AL7BA(5)[8], - =AL7GF(5)[8],=AL7GK(5)[8],=AL7HG(5)[8],=AL7HW(5)[8],=AL7HW/4(5)[8],=AL7IS(5)[8],=AL7KT(5)[8], - =AL7LH(5)[8],=AL7NL(5)[8],=AL7NM(5)[8],=AL7NS(5)[8],=AL7NS/140(5)[8],=AL7PL(5)[8],=AL7QI(5)[8], - =AL7RE(5)[8],=AL7RL(5)[8],=G8ERJ(5)[8],=GO4AZM(5)[8],=GQ4AZM(5)[8],=GR4AZM(5)[8],=KH0CW(5)[8], - =KH0NI(5)[8],=KH0ZZ(5)[8],=KH2BX(5)[8],=KH2D(5)[8],=KH2D/4(5)[8],=KH2GUM/P(5)[8],=KH2HB(5)[8], - =KH2KD(5)[8],=KH2N(5)[8],=KH2NC(5)[8],=KH2PM(5)[8],=KH2RL(5)[8],=KH2TI(5)[8],=KH2UV(5)[8], - =KH2VM(5)[8],=KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8],=KH6CG/4(5)[8],=KH6CT(5)[8], - =KH6ED(5)[8],=KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8],=KH6ILR(5)[8],=KH6ILR/4(5)[8], - =KH6ITI(5)[8],=KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JUA(5)[8],=KH6M(5)[8],=KH6M/4(5)[8], - =KH6M/M(5)[8],=KH6MT(5)[8],=KH6MT/4(5)[8],=KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8], - =KH6PU(5)[8],=KH6RP(5)[8],=KH6TY(5)[8],=KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8], - =KH7DY(5)[8],=KH7FC(5)[8],=KH7GZ(5)[8],=KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8], - =KH7XS/4(5)[8],=KH7XT(5)[8],=KH7ZC(5)[8],=KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8], - =KL0KC(5)[8],=KL0KE/4(5)[8],=KL0L(5)[8],=KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8], - =KL0TY(5)[8],=KL0VU(5)[8],=KL0WF(5)[8],=KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8], - =KL1PA(5)[8],=KL1SS(5)[8],=KL2AK(5)[8],=KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8], - =KL2HV(5)[8],=KL2MQ(5)[8],=KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8], - =KL3KB(5)[8],=KL3KG(5)[8],=KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8], - =KL4DD(5)[8],=KL4H(5)[8],=KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8], - =KL7DA/4(5)[8],=KL7FO(5)[8],=KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8], - =KL7HQW(5)[8],=KL7HX(5)[8],=KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8], - =KL7JR(5)[8],=KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8],=KL7NT(5)[8], - =KL7P/4(5)[8],=KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8],=KL9A/1(5)[8], - =KP2AF(5)[8],=KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8],=KP2L/4(5)[8], - =KP2N(5)[8],=KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8],=KP3BL(5)[8], - =KP3BP(5)[8],=KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8],=KP4AOD/4(5)[8], - =KP4BEC(5)[8],=KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8],=KP4CPP(5)[8], - =KP4CSJ(5)[8],=KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8],=KP4DPQ(5)[8], - =KP4DQS(5)[8],=KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8],=KP4EOR/4(5)[8], - =KP4ERT(5)[8],=KP4ESC(5)[8],=KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8],=KP4FJE(5)[8],=KP4FLP(5)[8], - =KP4FOF(5)[8],=KP4HE(5)[8],=KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8],=KP4IRI(5)[8],=KP4IT(5)[8], - =KP4JC(5)[8],=KP4JCC(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8],=KP4KD(5)[8],=KP4KD/4(5)[8],=KP4LEU(5)[8], + =KL1HA(5)[8],=KL1KM(5)[8],=KL2A(5)[8],=KL2A/3(5)[8],=KL2BV(5)[8],=KL2XF(5)[8],=KL3JC(5)[8], + =KL7FD(5)[8],=KL7GLK/3(5)[8],=KL7HR/3(5)[8],=KL7JO(5)[8],=KL7OF/3(5)[8],=KL7OQ(5)[8], + =KL9A/3(5)[8],=KP3M(5)[8],=KP4CAM(5)[8],=KP4FCF(5)[8],=KP4GB/3(5)[8],=KP4IP(5)[8],=KP4JB(5)[8], + =KP4N(5)[8],=KP4N/3(5)[8],=KP4PRI(5)[8],=KP4UV(5)[8],=KP4WR(5)[8],=KP4XO(5)[8],=KP4XX(5)[8], + =KP4YH(5)[8],=NH2CW(5)[8],=NH6BD(5)[8],=NH6BK(5)[8],=NH7C(5)[8],=NH7CC(5)[8],=NH7YK(5)[8], + =NL7CK(5)[8],=NL7PJ(5)[8],=NL7V/3(5)[8],=NL7XM(5)[8],=NL7XM/B(5)[8],=NP2EP(5)[8],=NP2G(5)[8], + =NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8],=NP3YN(5)[8],=NP4RH(5)[8],=NP4YZ(5)[8],=WH6ADS(5)[8], + =WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8],=WH6CTO(5)[8],=WH6DOA(5)[8],=WH6ECO(5)[8],=WH6EEL(5)[8], + =WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8],=WH6OB(5)[8],=WH7F(5)[8],=WH7USA(5)[8],=WL7AF(5)[8], + =WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8],=WP3EC(5)[8],=WP3FK(5)[8],=WP4DA(5)[8], + =WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HSZ(5)[8],=WP4KDN(5)[8],=WP4KKX(5)[8],=WP4LEM(5)[8], + =WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8],=WP4MYN(5)[8],=WP4OSQ(5)[8],=WP4PPH(5)[8],=WP4PQN(5)[8], + =WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8],=WP4PYN(5)[8],=WP4PYT(5)[8],=WP4PYU(5)[8],=WP4PYV(5)[8], + =WP4PYZ(5)[8],=WP4PZA(5)[8], + =AH0BV(5)[8],=AH0BZ(5)[8],=AH0G(5)[8],=AH2AJ(5)[8],=AH2AM(5)[8],=AH2AV/4(5)[8],=AH2DF(5)[8], + =AH2EB(5)[8],=AH2X(5)[8],=AH3B(5)[8],=AH6AL(5)[8],=AH6AT(5)[8],=AH6AU(5)[8],=AH6BJ(5)[8], + =AH6C(5)[8],=AH6EZ/4(5)[8],=AH6FX(5)[8],=AH6FX/4(5)[8],=AH6IC(5)[8],=AH6IJ(5)[8],=AH6IW(5)[8], + =AH6JH(5)[8],=AH6JN/4(5)[8],=AH6JN/M(5)[8],=AH6KS(5)[8],=AH6KT(5)[8],=AH6KT/4(5)[8],=AH6LS(5)[8], + =AH6OB(5)[8],=AH6TI(5)[8],=AH7I/4(5)[8],=AH7MI(5)[8],=AH8B(5)[8],=AH8M(5)[8],=AH8M/M(5)[8], + =AH8T(5)[8],=AL0I(5)[8],=AL1A(5)[8],=AL3G(5)[8],=AL3M(5)[8],=AL4T(5)[8],=AL4T/4(5)[8],=AL4U(5)[8], + =AL4X(5)[8],=AL5A(5)[8],=AL7AL(5)[8],=AL7AM(5)[8],=AL7BA(5)[8],=AL7GF(5)[8],=AL7GK(5)[8], + =AL7HG(5)[8],=AL7HW(5)[8],=AL7HW/4(5)[8],=AL7IS(5)[8],=AL7KT(5)[8],=AL7LH(5)[8],=AL7NL(5)[8], + =AL7NM(5)[8],=AL7NS(5)[8],=AL7NS/140(5)[8],=AL7PL(5)[8],=AL7QI(5)[8],=AL7RE(5)[8],=AL7RL(5)[8], + =G8ERJ(5)[8],=GO4AZM(5)[8],=GQ4AZM(5)[8],=GR4AZM(5)[8],=KH0CW(5)[8],=KH0HR(5)[8],=KH0NI(5)[8], + =KH0ZZ(5)[8],=KH2BX(5)[8],=KH2D(5)[8],=KH2D/4(5)[8],=KH2GUM/P(5)[8],=KH2HB(5)[8],=KH2KD(5)[8], + =KH2N(5)[8],=KH2NC(5)[8],=KH2PM(5)[8],=KH2RL(5)[8],=KH2TI(5)[8],=KH2UV(5)[8],=KH2VM(5)[8], + =KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8],=KH6CG/4(5)[8],=KH6CT(5)[8],=KH6ED(5)[8], + =KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8],=KH6ILR(5)[8],=KH6ILR/4(5)[8],=KH6ITI(5)[8], + =KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JUA(5)[8],=KH6M(5)[8],=KH6M/4(5)[8],=KH6M/M(5)[8], + =KH6MT(5)[8],=KH6MT/4(5)[8],=KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8],=KH6PU(5)[8], + =KH6RP(5)[8],=KH6TY(5)[8],=KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8],=KH7DY(5)[8], + =KH7FC(5)[8],=KH7GZ(5)[8],=KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8],=KH7XS/4(5)[8], + =KH7XT(5)[8],=KH7ZC(5)[8],=KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8],=KL0KC(5)[8], + =KL0KE/4(5)[8],=KL0L(5)[8],=KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8],=KL0TY(5)[8], + =KL0VU(5)[8],=KL0WF(5)[8],=KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8],=KL1PA(5)[8], + =KL1SS(5)[8],=KL2AK(5)[8],=KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8],=KL2HV(5)[8], + =KL2MQ(5)[8],=KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8],=KL3KB(5)[8], + =KL3KG(5)[8],=KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8],=KL4DD(5)[8], + =KL4H(5)[8],=KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8],=KL7DA/4(5)[8], + =KL7FO(5)[8],=KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8],=KL7HQW(5)[8], + =KL7HX(5)[8],=KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8],=KL7JR(5)[8], + =KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8],=KL7NT(5)[8],=KL7P/4(5)[8], + =KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8],=KL9A/1(5)[8],=KP2AF(5)[8], + =KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8],=KP2L/4(5)[8],=KP2N(5)[8], + =KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8],=KP3BL(5)[8],=KP3BP(5)[8], + =KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8],=KP4AOD/4(5)[8],=KP4BEC(5)[8], + =KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8],=KP4CPP(5)[8],=KP4CSJ(5)[8], + =KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8],=KP4DPQ(5)[8],=KP4DQS(5)[8], + =KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8],=KP4EOR/4(5)[8],=KP4ERT(5)[8], + =KP4ESC(5)[8],=KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8],=KP4FJE(5)[8],=KP4FLP(5)[8],=KP4FOF(5)[8], + =KP4HE(5)[8],=KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8],=KP4IRI(5)[8],=KP4IT(5)[8],=KP4JC(5)[8], + =KP4JCC(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8],=KP4KD(5)[8],=KP4KD/4(5)[8],=KP4KE/4(5)[8],=KP4LEU(5)[8], =KP4LF(5)[8],=KP4LUV(5)[8],=KP4LX(5)[8],=KP4MA(5)[8],=KP4MPR(5)[8],=KP4MSP(5)[8],=KP4NI(5)[8], =KP4OO(5)[8],=KP4PC(5)[8],=KP4PF(5)[8],=KP4PMD(5)[8],=KP4Q(5)[8],=KP4QT(5)[8],=KP4QT/4(5)[8], =KP4REY(5)[8],=KP4RGT(5)[8],=KP4ROP(5)[8],=KP4RRC(5)[8],=KP4RT(5)[8],=KP4RZ(5)[8],=KP4SU(5)[8], @@ -1266,40 +1273,40 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =NP2GW(5)[8],=NP2HQ(5)[8],=NP2HS(5)[8],=NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8],=NP2IJ(5)[8], =NP2IS(5)[8],=NP2IW(5)[8],=NP2IX(5)[8],=NP2JA(5)[8],=NP2JS(5)[8],=NP2LC(5)[8],=NP2MM(5)[8], =NP2MN(5)[8],=NP2MP(5)[8],=NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8],=NP2OL(5)[8],=NP2OO(5)[8], - =NP2PA(5)[8],=NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8],=NP3CC(5)[8], - =NP3CI(5)[8],=NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8],=NP3HG(5)[8], - =NP3HN(5)[8],=NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8],=NP3KM(5)[8], - =NP3MM(5)[8],=NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8],=NP3ST(5)[8], - =NP3TM(5)[8],=NP3UM(5)[8],=NP3VJ(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8],=NP4CK(5)[8], - =NP4CV(5)[8],=NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8],=NP4JU(5)[8], - =NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8],=NP4SY(5)[8],=NP4WT(5)[8], - =NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8],=WH6A(5)[8],=WH6ACF(5)[8],=WH6AJS(5)[8], - =WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8],=WH6CMT(5)[8],=WH6CNC(5)[8],=WH6CTC(5)[8], - =WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8],=WH6DMJ(5)[8],=WH6DNF(5)[8],=WH6DOL(5)[8],=WH6DUJ(5)[8], - =WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8],=WH6EKW(5)[8],=WH6ELG(5)[8],=WH6ELM(5)[8],=WH6ETE(5)[8], - =WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8],=WH6HA(5)[8],=WH6IF(5)[8],=WH6IZ(5)[8],=WH6J(5)[8], - =WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8],=WH6LE/M(5)[8],=WH6LE/P(5)[8],=WH6NE(5)[8],=WH6WX(5)[8], - =WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8],=WH6ZF(5)[8],=WH7GD(5)[8],=WH7HX(5)[8],=WH7NI(5)[8], - =WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8],=WH7YV(5)[8],=WH7ZM(5)[8],=WH9AAF(5)[8],=WL7AUL(5)[8], - =WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8],=WL7CIB(5)[8],=WL7CKJ(5)[8],=WL7COL(5)[8],=WL7CQT(5)[8], - =WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8],=WL7SR(5)[8],=WL7UN(5)[8],=WL7WN(5)[8],=WL7YX(5)[8], - =WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8],=WP2AIG(5)[8],=WP2BB(5)[8],=WP2C(5)[8],=WP2L(5)[8], - =WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8],=WP3BC(5)[8],=WP3JQ(5)[8],=WP3JU(5)[8],=WP3K(5)[8], - =WP3LE(5)[8],=WP3MB(5)[8],=WP3ME(5)[8],=WP3NIS(5)[8],=WP3O(5)[8],=WP3TQ(5)[8],=WP3ZA(5)[8], - =WP3ZP(5)[8],=WP4AIE(5)[8],=WP4AIL(5)[8],=WP4AIZ(5)[8],=WP4ALH(5)[8],=WP4AQK(5)[8],=WP4B(5)[8], - =WP4BFP(5)[8],=WP4BGM(5)[8],=WP4BIN(5)[8],=WP4BJS(5)[8],=WP4BK(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8], - =WP4CKW(5)[8],=WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8],=WP4DCB(5)[8],=WP4DFK(5)[8],=WP4DNE(5)[8], - =WP4DPX(5)[8],=WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8],=WP4FRK(5)[8],=WP4FS(5)[8],=WP4GAK(5)[8], - =WP4GFH(5)[8],=WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8],=WP4HNN(5)[8],=WP4HOX(5)[8],=WP4IF(5)[8], - =WP4IJ(5)[8],=WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8],=WP4JT(5)[8],=WP4KCJ(5)[8],=WP4KDH(5)[8], - =WP4KFP(5)[8],=WP4KGI(5)[8],=WP4KI(5)[8],=WP4KJV(5)[8],=WP4KSK(5)[8],=WP4KTD(5)[8],=WP4LBK(5)[8], - =WP4LDG(5)[8],=WP4LDL(5)[8],=WP4LDP(5)[8],=WP4LHA(5)[8],=WP4MAE(5)[8],=WP4MD(5)[8],=WP4MO(5)[8], - =WP4MQF(5)[8],=WP4MWE(5)[8],=WP4MXE(5)[8],=WP4MYG(5)[8],=WP4MYK(5)[8],=WP4NAI(5)[8],=WP4NAQ(5)[8], - =WP4NBF(5)[8],=WP4NBG(5)[8],=WP4NFU(5)[8],=WP4NKU(5)[8],=WP4NLQ(5)[8],=WP4NQA(5)[8],=WP4NVL(5)[8], - =WP4NWW(5)[8],=WP4O/4(5)[8],=WP4O/M(5)[8],=WP4ODR(5)[8],=WP4OFA(5)[8],=WP4OLM(5)[8],=WP4OMG(5)[8], - =WP4OMV(5)[8],=WP4ONR(5)[8],=WP4OOI(5)[8],=WP4OPD(5)[8],=WP4OPF(5)[8],=WP4OPG(5)[8],=WP4OTP(5)[8], - =WP4P(5)[8],=WP4PR(5)[8],=WP4PUV(5)[8],=WP4PWV(5)[8],=WP4PXG(5)[8],=WP4QHU(5)[8],=WP4SW(5)[8], - =WP4TD(5)[8],=WP4TX(5)[8],=WP4UM(5)[8], + =NP2OR(5)[8],=NP2PA(5)[8],=NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8], + =NP3CC(5)[8],=NP3CI(5)[8],=NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8], + =NP3HG(5)[8],=NP3HN(5)[8],=NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8], + =NP3KM(5)[8],=NP3MM(5)[8],=NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8], + =NP3ST(5)[8],=NP3TM(5)[8],=NP3UM(5)[8],=NP3VJ(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8], + =NP4CK(5)[8],=NP4CV(5)[8],=NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8], + =NP4JL(5)[8],=NP4JU(5)[8],=NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8], + =NP4SY(5)[8],=NP4TR(5)[8],=NP4WT(5)[8],=NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8], + =WH6A(5)[8],=WH6ACF(5)[8],=WH6AJS(5)[8],=WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8], + =WH6CMT(5)[8],=WH6CNC(5)[8],=WH6CTC(5)[8],=WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8],=WH6DMJ(5)[8], + =WH6DNF(5)[8],=WH6DOL(5)[8],=WH6DUJ(5)[8],=WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8],=WH6EKW(5)[8], + =WH6ELG(5)[8],=WH6ELM(5)[8],=WH6ETE(5)[8],=WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8],=WH6HA(5)[8], + =WH6IF(5)[8],=WH6IZ(5)[8],=WH6J(5)[8],=WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8],=WH6LE/M(5)[8], + =WH6LE/P(5)[8],=WH6NE(5)[8],=WH6WX(5)[8],=WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8],=WH6ZF(5)[8], + =WH7GD(5)[8],=WH7HX(5)[8],=WH7NI(5)[8],=WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8],=WH7YV(5)[8], + =WH7ZM(5)[8],=WH9AAF(5)[8],=WL7AUL(5)[8],=WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8],=WL7CIB(5)[8], + =WL7CKJ(5)[8],=WL7COL(5)[8],=WL7CQT(5)[8],=WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8],=WL7SR(5)[8], + =WL7UN(5)[8],=WL7WN(5)[8],=WL7YX(5)[8],=WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8],=WP2AIG(5)[8], + =WP2BB(5)[8],=WP2C(5)[8],=WP2L(5)[8],=WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8],=WP3BC(5)[8], + =WP3JQ(5)[8],=WP3JU(5)[8],=WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8],=WP3ME(5)[8],=WP3NIS(5)[8], + =WP3O(5)[8],=WP3TQ(5)[8],=WP3ZA(5)[8],=WP3ZP(5)[8],=WP4AIE(5)[8],=WP4AIL(5)[8],=WP4AIZ(5)[8], + =WP4ALH(5)[8],=WP4AQK(5)[8],=WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8],=WP4BIN(5)[8],=WP4BJS(5)[8], + =WP4BK(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8],=WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8], + =WP4DCB(5)[8],=WP4DFK(5)[8],=WP4DNE(5)[8],=WP4DPX(5)[8],=WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8], + =WP4FRK(5)[8],=WP4FS(5)[8],=WP4GAK(5)[8],=WP4GFH(5)[8],=WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8], + =WP4HNN(5)[8],=WP4HOX(5)[8],=WP4IF(5)[8],=WP4IJ(5)[8],=WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8], + =WP4JT(5)[8],=WP4KCJ(5)[8],=WP4KDH(5)[8],=WP4KFP(5)[8],=WP4KGI(5)[8],=WP4KI(5)[8],=WP4KJV(5)[8], + =WP4KSK(5)[8],=WP4KTD(5)[8],=WP4LBK(5)[8],=WP4LDG(5)[8],=WP4LDL(5)[8],=WP4LDP(5)[8],=WP4LHA(5)[8], + =WP4MAE(5)[8],=WP4MD(5)[8],=WP4MO(5)[8],=WP4MQF(5)[8],=WP4MWE(5)[8],=WP4MXE(5)[8],=WP4MYG(5)[8], + =WP4MYK(5)[8],=WP4NAI(5)[8],=WP4NAQ(5)[8],=WP4NBF(5)[8],=WP4NBG(5)[8],=WP4NFU(5)[8],=WP4NKU(5)[8], + =WP4NLQ(5)[8],=WP4NQA(5)[8],=WP4NVL(5)[8],=WP4NWW(5)[8],=WP4O/4(5)[8],=WP4O/M(5)[8],=WP4ODR(5)[8], + =WP4OFA(5)[8],=WP4OHJ(5)[8],=WP4OLM(5)[8],=WP4OMG(5)[8],=WP4OMV(5)[8],=WP4ONR(5)[8],=WP4OOI(5)[8], + =WP4OPD(5)[8],=WP4OPF(5)[8],=WP4OPG(5)[8],=WP4OTP(5)[8],=WP4P(5)[8],=WP4PR(5)[8],=WP4PUV(5)[8], + =WP4PWV(5)[8],=WP4PXG(5)[8],=WP4QHU(5)[8],=WP4SW(5)[8],=WP4TD(5)[8],=WP4TX(5)[8],=WP4UM(5)[8], AA5(4)[7],AB5(4)[7],AC5(4)[7],AD5(4)[7],AE5(4)[7],AF5(4)[7],AG5(4)[7],AI5(4)[7],AJ5(4)[7], AK5(4)[7],K5(4)[7],KA5(4)[7],KB5(4)[7],KC5(4)[7],KD5(4)[7],KE5(4)[7],KF5(4)[7],KG5(4)[7], KI5(4)[7],KJ5(4)[7],KK5(4)[7],KM5(4)[7],KN5(4)[7],KO5(4)[7],KQ5(4)[7],KR5(4)[7],KS5(4)[7], @@ -1315,15 +1322,15 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AL7CJ(4)[7],=AL7CQ(4)[7],=AL7DF(4)[7],=AL7DR(4)[7],=AL7GY(4)[7],=AL7HH(4)[7],=AL7HU(4)[7], =AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7],=AL7L/5(4)[7],=AL7PB(4)[7],=AL7RD(4)[7], =AL7RI(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7],=KH0CU(4)[7],=KH0DW(4)[7],=KH2AI(4)[7],=KH2BH(4)[7], - =KH2BI(4)[7],=KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7],=KH2XO(4)[7],=KH2YO(4)[7], - =KH6ABA(4)[7],=KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7],=KH6ITY/M(4)[7], - =KH6JIQ(4)[7],=KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LX(4)[7],=KH6MB/5(4)[7], - =KH6SP/5(4)[7],=KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7],=KH7IC(4)[7],=KH7JE(4)[7], - =KH7QL(4)[7],=KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7],=KL0HU(4)[7],=KL0PG(4)[7], - =KL1DA(4)[7],=KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7],=KL1WG(4)[7],=KL1WO(4)[7], - =KL1XK(4)[7],=KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7],=KL2CD(4)[7],=KL2HC(4)[7], - =KL2HN(4)[7],=KL2MI(4)[7],=KL2NN(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7],=KL2VA(4)[7], - =KL3DB(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7],=KL3KI(4)[7],=KL3TB(4)[7], + =KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7],=KH2XO(4)[7],=KH2YO(4)[7],=KH6ABA(4)[7], + =KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7],=KH6ITY/M(4)[7],=KH6JIQ(4)[7], + =KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LX(4)[7],=KH6MB/5(4)[7],=KH6SP/5(4)[7], + =KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7],=KH7IC(4)[7],=KH7JE(4)[7],=KH7QL(4)[7], + =KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7],=KL0HU(4)[7],=KL0PG(4)[7],=KL1DA(4)[7], + =KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7],=KL1WG(4)[7],=KL1WO(4)[7],=KL1XK(4)[7], + =KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7],=KL2CD(4)[7],=KL2HC(4)[7],=KL2HN(4)[7], + =KL2MI(4)[7],=KL2NN(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7],=KL2VA(4)[7],=KL3DB(4)[7], + =KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7],=KL3KI(4)[7],=KL3TB(4)[7], =KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7],=KL7AH(4)[7],=KL7AU(4)[7],=KL7AX(4)[7],=KL7BCD(4)[7], =KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7],=KL7BZL(4)[7],=KL7CD(4)[7],=KL7DB(4)[7],=KL7EBE(4)[7], =KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7],=KL7F(4)[7],=KL7FB(4)[7],=KL7FHX(4)[7],=KL7FLY(4)[7], @@ -1333,24 +1340,25 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KL7PZ(4)[7],=KL7QC(4)[7],=KL7SG(4)[7],=KL7TN/5(4)[7],=KL7UHF(4)[7],=KL7USI/5(4)[7],=KL7XP(4)[7], =KL7XS(4)[7],=KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7],=KP4DJT(4)[7],=KP4FF(4)[7],=KP4FFW(4)[7], =KP4GMC(4)[7],=KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7],=KP4YP(4)[7],=NH0V/5(4)[7],=NH2LA(4)[7], - =NH6AZ(4)[7],=NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7],=NH6L(4)[7],=NH6VB(4)[7],=NH6WL(4)[7], - =NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7],=NH7PZ(4)[7],=NH7RO(4)[7],=NH7RO/5(4)[7],=NH7TR(4)[7], - =NH7VA(4)[7],=NL5J(4)[7],=NL7AX(4)[7],=NL7C(4)[7],=NL7CO(4)[7],=NL7CO/5(4)[7],=NL7CO/M(4)[7], - =NL7DC(4)[7],=NL7HB(4)[7],=NL7IE(4)[7],=NL7JH(4)[7],=NL7JI(4)[7],=NL7K/5(4)[7],=NL7KB(4)[7], - =NL7NP(4)[7],=NL7PD(4)[7],=NL7RQ(4)[7],=NL7RQ/5(4)[7],=NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7], - =NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7],=NP3CV(4)[7],=NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7], - =NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7],=NP4NQ(4)[7],=NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7], - =WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7],=WH6CUL(4)[7], - =WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7],=WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7],=WH6EXQ(4)[7], - =WH6FAD(4)[7],=WH6FGM(4)[7],=WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH6ZR(4)[7],=WH7DC(4)[7],=WH7DW(4)[7], - =WH7OK(4)[7],=WH7R(4)[7],=WH7YQ(4)[7],=WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7], - =WL7AWC(4)[7],=WL7BBV(4)[7],=WL7BKF(4)[7],=WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7], - =WL7CQE(4)[7],=WL7CTP(4)[7],=WL7CTQ(4)[7],=WL7D(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7],=WL7K/5(4)[7], - =WL7ME(4)[7],=WL7MQ/5(4)[7],=WL7OP(4)[7],=WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7],=WL7XI(4)[7], - =WL7XR(4)[7],=WP2AHG(4)[7],=WP2WP(4)[7],=WP3AL(4)[7],=WP4A(4)[7],=WP4APJ(4)[7],=WP4BAB(4)[7], - =WP4BAT(4)[7],=WP4CJY(4)[7],=WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7],=WP4KTF(4)[7],=WP4KUW(4)[7], - =WP4LKA(4)[7],=WP4MJP(4)[7],=WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7],=WP4NAK(4)[7],=WP4NEP(4)[7], - =WP4NQL(4)[7],=WP4OUE(4)[7],=WP4RON(4)[7], + =NH2LP(4)[7],=NH6AZ(4)[7],=NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7],=NH6L(4)[7],=NH6VB(4)[7], + =NH6VJ(4)[7],=NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7],=NH7PZ(4)[7],=NH7RO(4)[7], + =NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7],=NL7AX(4)[7],=NL7C(4)[7],=NL7CO(4)[7], + =NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7],=NL7IE(4)[7],=NL7JH(4)[7],=NL7JI(4)[7], + =NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7],=NL7PD(4)[7],=NL7RQ(4)[7],=NL7RQ/5(4)[7], + =NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7],=NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7],=NP3CV(4)[7], + =NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7],=NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7],=NP4NQ(4)[7], + =NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7],=WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7], + =WH6BYJ(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7],=WH6CUL(4)[7],=WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7], + =WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7],=WH6EXQ(4)[7],=WH6FAD(4)[7],=WH6FGM(4)[7], + =WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH6ZR(4)[7],=WH7DC(4)[7],=WH7DW(4)[7],=WH7OK(4)[7],=WH7R(4)[7], + =WH7YQ(4)[7],=WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7],=WL7AWC(4)[7],=WL7BBV(4)[7], + =WL7BKF(4)[7],=WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7],=WL7CQE(4)[7],=WL7CTP(4)[7], + =WL7CTQ(4)[7],=WL7D(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7],=WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7], + =WL7OP(4)[7],=WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7],=WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7], + =WP2WP(4)[7],=WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7],=WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7], + =WP4CJY(4)[7],=WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7],=WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7], + =WP4MJP(4)[7],=WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7],=WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7], + =WP4OUE(4)[7],=WP4RON(4)[7], AA6(3)[6],AB6(3)[6],AC6(3)[6],AD6(3)[6],AE6(3)[6],AF6(3)[6],AG6(3)[6],AI6(3)[6],AJ6(3)[6], AK6(3)[6],K6(3)[6],KA6(3)[6],KB6(3)[6],KC6(3)[6],KD6(3)[6],KE6(3)[6],KF6(3)[6],KG6(3)[6], KI6(3)[6],KJ6(3)[6],KK6(3)[6],KM6(3)[6],KN6(3)[6],KO6(3)[6],KQ6(3)[6],KR6(3)[6],KS6(3)[6], @@ -1360,53 +1368,53 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: NW6(3)[6],NX6(3)[6],NY6(3)[6],NZ6(3)[6],W6(3)[6],WA6(3)[6],WB6(3)[6],WC6(3)[6],WD6(3)[6], WE6(3)[6],WF6(3)[6],WG6(3)[6],WI6(3)[6],WJ6(3)[6],WK6(3)[6],WM6(3)[6],WN6(3)[6],WO6(3)[6], WQ6(3)[6],WR6(3)[6],WS6(3)[6],WT6(3)[6],WU6(3)[6],WV6(3)[6],WW6(3)[6],WX6(3)[6],WY6(3)[6], - WZ6(3)[6],=AH0CS(3)[6],=AH0FM(3)[6],=AH0U(3)[6],=AH0U/6(3)[6],=AH2AP(3)[6],=AH2DY(3)[6], - =AH6BS(3)[6],=AH6CY(3)[6],=AH6CY/P(3)[6],=AH6EI(3)[6],=AH6HE(3)[6],=AH6KG(3)[6],=AH6ML(3)[6], - =AH6NL(3)[6],=AH6NP(3)[6],=AH6PD(3)[6],=AH6RI(3)[6],=AH6S(3)[6],=AH6SU(3)[6],=AH6TX(3)[6], - =AH6UN(3)[6],=AH7A(3)[6],=AH7D(3)[6],=AH7F(3)[6],=AH8C(3)[6],=AL3A(3)[6],=AL5ET(3)[6],=AL6A(3)[6], - =AL7DQ(3)[6],=AL7EM(3)[6],=AL7EP(3)[6],=AL7EW(3)[6],=AL7FN(3)[6],=AL7GS(3)[6],=AL7HO/6(3)[6], - =AL7L/6(3)[6],=KH0BR(3)[6],=KH0BU(3)[6],=KH0CA(3)[6],=KH0CG(3)[6],=KH0DH(3)[6],=KH0DJ(3)[6], - =KH0HQ(3)[6],=KH0JJ(3)[6],=KH0UM(3)[6],=KH0V(3)[6],=KH2BD(3)[6],=KH2BR(3)[6],=KH2BR/6(3)[6], - =KH2C(3)[6],=KH2EE(3)[6],=KH2FI(3)[6],=KH2FI/6(3)[6],=KH2H(3)[6],=KH2IW(3)[6],=KH2LU(3)[6], - =KH2LW(3)[6],=KH2LZ(3)[6],=KH2OJ(3)[6],=KH2QE(3)[6],=KH2QL(3)[6],=KH2QY(3)[6],=KH2TJ(3)[6], - =KH2TJ/6(3)[6],=KH2XW(3)[6],=KH2YJ(3)[6],=KH2Z(3)[6],=KH2ZM(3)[6],=KH4AB(3)[6],=KH6AS(3)[6], - =KH6BMD(3)[6],=KH6BRY(3)[6],=KH6COL(3)[6],=KH6DDW(3)[6],=KH6DX/M(3)[6],=KH6DX/M6(3)[6], - =KH6DZ(3)[6],=KH6EHF(3)[6],=KH6FH(3)[6],=KH6FL(3)[6],=KH6FOX(3)[6],=KH6FQR(3)[6],=KH6FQY(3)[6], - =KH6GBQ(3)[6],=KH6GC(3)[6],=KH6GJV(3)[6],=KH6GJV/6(3)[6],=KH6GK(3)[6],=KH6GKR(3)[6],=KH6HJE(3)[6], - =KH6HOU(3)[6],=KH6IKH(3)[6],=KH6IKL(3)[6],=KH6IP(3)[6],=KH6IPJ(3)[6],=KH6JCT(3)[6],=KH6JGD(3)[6], - =KH6JJN(3)[6],=KH6JJN/P(3)[6],=KH6JN(3)[6],=KH6JRB(3)[6],=KH6JRC(3)[6],=KH6JS(3)[6],=KH6JUZ(3)[6], - =KH6JVS(3)[6],=KH6JWG(3)[6],=KH6KT(3)[6],=KH6LO(3)[6],=KH6MV(3)[6],=KH6N(3)[6],=KH6NG(3)[6], - =KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6],=KH6TO(3)[6],=KH6UQ(3)[6],=KH6USA(3)[6], - =KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6],=KH6WZ(3)[6],=KH7CD/6(3)[6],=KH7CO(3)[6], - =KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6],=KH7JR(3)[6],=KH7NS(3)[6],=KH7QU(3)[6], - =KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6],=KH7XX/6(3)[6],=KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6], - =KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6],=KL0AF(3)[6],=KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6], - =KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6],=KL3YH(3)[6],=KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6], - =KL4QW(3)[6],=KL7AK(3)[6],=KL7CE/6(3)[6],=KL7CM(3)[6],=KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6], - =KL7DJ(3)[6],=KL7EAE(3)[6],=KL7EAL(3)[6],=KL7HQR(3)[6],=KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6], - =KL7IDY/6(3)[6],=KL7ISN(3)[6],=KL7JBE(3)[6],=KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6], - =KL7MF/6(3)[6],=KL7MF/M(3)[6],=KL7OO(3)[6],=KL7RT(3)[6],=KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6], - =KL7VU/6(3)[6],=KP2BK(3)[6],=KP3BN(3)[6],=KP3YL(3)[6],=KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6], - =KP4ENM(3)[6],=KP4ERR(3)[6],=KP4FBT(3)[6],=KP4MD(3)[6],=KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6], - =NH2AR(3)[6],=NH2BD(3)[6],=NH2BV(3)[6],=NH2CM(3)[6],=NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6], - =NH2S(3)[6],=NH6AC(3)[6],=NH6AE(3)[6],=NH6FV(3)[6],=NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6], - =NH6WR(3)[6],=NH7AG(3)[6],=NH7EM(3)[6],=NH7FW(3)[6],=NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6], - =NH7PM(3)[6],=NH7QV(3)[6],=NH7RT(3)[6],=NH7ST(3)[6],=NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6], - =NH7ZE(3)[6],=NL7GE(3)[6],=NL7IB(3)[6],=NL7OP(3)[6],=NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6], - =NP4AI/6(3)[6],=NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6],=NP4XE(3)[6],=WH0AAZ(3)[6],=WH0M(3)[6], - =WH2ABS(3)[6],=WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6],=WH6ANA(3)[6],=WH6ASW/M(3)[6], - =WH6BYT(3)[6],=WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6],=WH6CPT(3)[6],=WH6CRE(3)[6], - =WH6CSG(3)[6],=WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6],=WH6CWS(3)[6],=WH6CZF(3)[6], - =WH6CZH(3)[6],=WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6],=WH6DVX(3)[6],=WH6DYA(3)[6], - =WH6DZV(3)[6],=WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6],=WH6EKB(3)[6],=WH6ENG(3)[6], - =WH6EUH(3)[6],=WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6OI(3)[6],=WH6PX(3)[6],=WH6QA(3)[6], - =WH6RF(3)[6],=WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6],=WH6VN(3)[6],=WH6XI(3)[6], - =WH6XX(3)[6],=WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6],=WH7IN(3)[6],=WH7IV(3)[6], - =WH7IZ(3)[6],=WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6],=WH7RU(3)[6],=WH7TT(3)[6], - =WH7VM(3)[6],=WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6],=WL7ACO(3)[6],=WL7BA(3)[6], - =WL7BGF(3)[6],=WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6],=WL7EKK(3)[6],=WL7RA(3)[6], - =WL7SE(3)[6],=WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6],=WP2N(3)[6],=WP4CUJ(3)[6], - =WP4CW(3)[6],=WP4KSU(3)[6],=WP4MVE(3)[6], + WZ6(3)[6],=AH0CS(3)[6],=AH0U(3)[6],=AH0U/6(3)[6],=AH2AP(3)[6],=AH2DY(3)[6],=AH6BS(3)[6], + =AH6CY(3)[6],=AH6CY/P(3)[6],=AH6EI(3)[6],=AH6HE(3)[6],=AH6KG(3)[6],=AH6ML(3)[6],=AH6NL(3)[6], + =AH6NP(3)[6],=AH6PD(3)[6],=AH6RI(3)[6],=AH6S(3)[6],=AH6SU(3)[6],=AH6TX(3)[6],=AH6UN(3)[6], + =AH7A(3)[6],=AH7D(3)[6],=AH7F(3)[6],=AH8C(3)[6],=AL3A(3)[6],=AL5ET(3)[6],=AL6A(3)[6],=AL7DQ(3)[6], + =AL7EM(3)[6],=AL7EP(3)[6],=AL7EW(3)[6],=AL7FN(3)[6],=AL7GS(3)[6],=AL7HO/6(3)[6],=AL7L/6(3)[6], + =AL7PS(3)[6],=KH0BR(3)[6],=KH0BU(3)[6],=KH0CA(3)[6],=KH0CG(3)[6],=KH0DH(3)[6],=KH0DJ(3)[6], + =KH0HQ(3)[6],=KH0JJ(3)[6],=KH0V(3)[6],=KH0XD(3)[6],=KH2BD(3)[6],=KH2BI(3)[6],=KH2BR(3)[6], + =KH2BR/6(3)[6],=KH2C(3)[6],=KH2EE(3)[6],=KH2FI(3)[6],=KH2FI/6(3)[6],=KH2H(3)[6],=KH2IW(3)[6], + =KH2LU(3)[6],=KH2LW(3)[6],=KH2LZ(3)[6],=KH2OJ(3)[6],=KH2QE(3)[6],=KH2QL(3)[6],=KH2QY(3)[6], + =KH2TJ(3)[6],=KH2TJ/6(3)[6],=KH2XW(3)[6],=KH2YJ(3)[6],=KH2Z(3)[6],=KH2ZM(3)[6],=KH4AB(3)[6], + =KH6ARA(3)[6],=KH6AS(3)[6],=KH6BMD(3)[6],=KH6BRY(3)[6],=KH6COL(3)[6],=KH6DDW(3)[6],=KH6DX/M(3)[6], + =KH6DX/M6(3)[6],=KH6DZ(3)[6],=KH6EHF(3)[6],=KH6FH(3)[6],=KH6FL(3)[6],=KH6FOX(3)[6],=KH6FQR(3)[6], + =KH6FQY(3)[6],=KH6GBQ(3)[6],=KH6GC(3)[6],=KH6GJV(3)[6],=KH6GJV/6(3)[6],=KH6GK(3)[6],=KH6GKR(3)[6], + =KH6HJE(3)[6],=KH6HOU(3)[6],=KH6IKH(3)[6],=KH6IKL(3)[6],=KH6IP(3)[6],=KH6IPJ(3)[6],=KH6JCT(3)[6], + =KH6JGD(3)[6],=KH6JJN(3)[6],=KH6JJN/P(3)[6],=KH6JN(3)[6],=KH6JRB(3)[6],=KH6JRC(3)[6],=KH6JS(3)[6], + =KH6JUZ(3)[6],=KH6JVS(3)[6],=KH6JWG(3)[6],=KH6KT(3)[6],=KH6LO(3)[6],=KH6MV(3)[6],=KH6N(3)[6], + =KH6NG(3)[6],=KH6O(3)[6],=KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6],=KH6TO(3)[6], + =KH6UQ(3)[6],=KH6USA(3)[6],=KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6],=KH6WZ(3)[6], + =KH7CD/6(3)[6],=KH7CO(3)[6],=KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6],=KH7JR(3)[6], + =KH7NS(3)[6],=KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6],=KH7XX/6(3)[6], + =KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6],=KL0AF(3)[6], + =KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6],=KL3YH(3)[6], + =KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6],=KL7AK(3)[6],=KL7CE/6(3)[6],=KL7CM(3)[6], + =KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6],=KL7DJ(3)[6],=KL7EAE(3)[6],=KL7EAL(3)[6],=KL7HQR(3)[6], + =KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6],=KL7IDY/6(3)[6],=KL7ISN(3)[6],=KL7JBE(3)[6], + =KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6],=KL7MF/6(3)[6],=KL7MF/M(3)[6],=KL7OO(3)[6],=KL7RT(3)[6], + =KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6],=KL7VU/6(3)[6],=KP2BK(3)[6],=KP3BN(3)[6],=KP3YL(3)[6], + =KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6],=KP4ENM(3)[6],=KP4ERR(3)[6],=KP4FBT(3)[6],=KP4MD(3)[6], + =KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6],=NH2AR(3)[6],=NH2BD(3)[6],=NH2BV(3)[6],=NH2CM(3)[6], + =NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6],=NH2S(3)[6],=NH6AC(3)[6],=NH6AE(3)[6],=NH6FV(3)[6], + =NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6],=NH6WR(3)[6],=NH7AG(3)[6],=NH7EM(3)[6],=NH7FW(3)[6], + =NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6],=NH7QV(3)[6],=NH7RT(3)[6],=NH7ST(3)[6], + =NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6],=NL7GE(3)[6],=NL7IB(3)[6],=NL7OP(3)[6], + =NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6],=NP4AI/6(3)[6],=NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6], + =NP4XE(3)[6],=WH0AAZ(3)[6],=WH0M(3)[6],=WH2ABS(3)[6],=WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6], + =WH6ANA(3)[6],=WH6ASW/M(3)[6],=WH6BYT(3)[6],=WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6], + =WH6CPT(3)[6],=WH6CRE(3)[6],=WH6CSG(3)[6],=WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6], + =WH6CWS(3)[6],=WH6CZF(3)[6],=WH6CZH(3)[6],=WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6], + =WH6DVX(3)[6],=WH6DYA(3)[6],=WH6DZV(3)[6],=WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6], + =WH6EKB(3)[6],=WH6ENG(3)[6],=WH6EUH(3)[6],=WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6OI(3)[6], + =WH6PX(3)[6],=WH6QA(3)[6],=WH6RF(3)[6],=WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6], + =WH6VN(3)[6],=WH6XI(3)[6],=WH6XX(3)[6],=WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6], + =WH7IN(3)[6],=WH7IV(3)[6],=WH7IZ(3)[6],=WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6], + =WH7RU(3)[6],=WH7TT(3)[6],=WH7VM(3)[6],=WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6], + =WL7ACO(3)[6],=WL7BA(3)[6],=WL7BGF(3)[6],=WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6], + =WL7EKK(3)[6],=WL7RA(3)[6],=WL7SE(3)[6],=WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6], + =WP2N(3)[6],=WP4CUJ(3)[6],=WP4CW(3)[6],=WP4KSU(3)[6],=WP4MVE(3)[6], AA7(3)[6],AB7(3)[6],AC7(3)[6],AD7(3)[6],AE7(3)[6],AF7(3)[6],AG7(3)[6],AI7(3)[6],AJ7(3)[6], AK7(3)[6],K7(3)[6],KA7(3)[6],KB7(3)[6],KC7(3)[6],KD7(3)[6],KE7(3)[6],KF7(3)[6],KG7(3)[6], KI7(3)[6],KJ7(3)[6],KK7(3)[6],KM7(3)[6],KN7(3)[6],KO7(3)[6],KQ7(3)[6],KR7(3)[6],KS7(3)[6], @@ -1420,98 +1428,100 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AH2DP(3)[6],=AH2DS(3)[6],=AH2S(3)[6],=AH6B/7(3)[6],=AH6D(3)[6],=AH6ET(3)[6],=AH6EZ(3)[6], =AH6EZ/7(3)[6],=AH6FC/7(3)[6],=AH6GA(3)[6],=AH6HK(3)[6],=AH6HS(3)[6],=AH6HX(3)[6],=AH6I(3)[6], =AH6IP(3)[6],=AH6LE(3)[6],=AH6LE/7(3)[6],=AH6NJ(3)[6],=AH6NR(3)[6],=AH6OD(3)[6],=AH6PJ(3)[6], - =AH6QW(3)[6],=AH6RI/7(3)[6],=AH6SV(3)[6],=AH6VM(3)[6],=AH6VP(3)[6],=AH6Y(3)[6],=AH7MP(3)[6], - =AH8AC(3)[6],=AH8DX(3)[6],=AH8K(3)[6],=AH9A(3)[6],=AH9AC(3)[6],=AH9C(3)[6],=AL0AA(3)[6], - =AL0F(3)[6],=AL0FT(3)[6],=AL0H(3)[6],=AL0X(3)[6],=AL1N(3)[6],=AL1P(3)[6],=AL1VE(3)[6], - =AL1VE/R(3)[6],=AL2B(3)[6],=AL2N(3)[6],=AL3L(3)[6],=AL4Q/7(3)[6],=AL5B(3)[6],=AL5W(3)[6], - =AL7A(3)[6],=AL7AA(3)[6],=AL7AN(3)[6],=AL7AW(3)[6],=AL7BN(3)[6],=AL7BQ(3)[6],=AL7CC(3)[6], - =AL7CG(3)[6],=AL7CM/7(3)[6],=AL7CR(3)[6],=AL7CS(3)[6],=AL7D(3)[6],=AL7D/7(3)[6],=AL7D/P(3)[6], - =AL7D/R(3)[6],=AL7DD(3)[6],=AL7DU(3)[6],=AL7EI(3)[6],=AL7FA(3)[6],=AL7FB(3)[6],=AL7HS(3)[6], - =AL7HY(3)[6],=AL7IG(3)[6],=AL7IT(3)[6],=AL7JF(3)[6],=AL7JJ(3)[6],=AL7JS(3)[6],=AL7JW(3)[6], - =AL7JY(3)[6],=AL7KE(3)[6],=AL7KF(3)[6],=AL7KG(3)[6],=AL7KK(3)[6],=AL7KL(3)[6],=AL7KV(3)[6], - =AL7L/7(3)[6],=AL7MH(3)[6],=AL7MQ(3)[6],=AL7ND(3)[6],=AL7NK(3)[6],=AL7NZ(3)[6],=AL7OK(3)[6], - =AL7OW(3)[6],=AL7PR(3)[6],=AL7PV(3)[6],=AL7QL(3)[6],=AL7R(3)[6],=AL7R/7(3)[6],=AL7RF(3)[6], - =AL7RF/7(3)[6],=AL7RM(3)[6],=AL7RR(3)[6],=AL7W(3)[6],=G4KHG/M(3)[6],=KH0AS(3)[6],=KH0H(3)[6], - =KH0K(3)[6],=KH0SH(3)[6],=KH0TL(3)[6],=KH0X(3)[6],=KH2CH(3)[6],=KH2G(3)[6],=KH2GG(3)[6], - =KH2JA(3)[6],=KH2QH(3)[6],=KH2RK(3)[6],=KH2SK(3)[6],=KH2SR(3)[6],=KH2TJ/7(3)[6],=KH2TJ/P(3)[6], - =KH2XP(3)[6],=KH2YL(3)[6],=KH3AD(3)[6],=KH6AB(3)[6],=KH6AHQ(3)[6],=KH6BXZ(3)[6],=KH6CN(3)[6], - =KH6CN/7(3)[6],=KH6COY(3)[6],=KH6CQG(3)[6],=KH6CQH(3)[6],=KH6CQH/7(3)[6],=KH6DB(3)[6], - =KH6DE(3)[6],=KH6DOT(3)[6],=KH6DUT(3)[6],=KH6EE(3)[6],=KH6EE/7(3)[6],=KH6FKA/7(3)[6],=KH6GB(3)[6], - =KH6GDN(3)[6],=KH6HU(3)[6],=KH6HWK(3)[6],=KH6IA(3)[6],=KH6ICQ(3)[6],=KH6IKC(3)[6],=KH6IMN(3)[6], - =KH6IQX(3)[6],=KH6ITY(3)[6],=KH6JFL(3)[6],=KH6JIM/7(3)[6],=KH6JJS(3)[6],=KH6JPJ(3)[6], - =KH6JPO(3)[6],=KH6JRW(3)[6],=KH6JT(3)[6],=KH6JUQ(3)[6],=KH6KS(3)[6],=KH6KW(3)[6],=KH6LEM(3)[6], - =KH6ME(3)[6],=KH6MF(3)[6],=KH6NA(3)[6],=KH6NO/7(3)[6],=KH6NO/M(3)[6],=KH6NU(3)[6],=KH6OV(3)[6], - =KH6PG(3)[6],=KH6PR(3)[6],=KH6QAI(3)[6],=KH6QAI/7(3)[6],=KH6QAJ(3)[6],=KH6RW(3)[6],=KH6RY(3)[6], - =KH6SAT(3)[6],=KH6SS(3)[6],=KH6TG(3)[6],=KH6TX(3)[6],=KH6VM(3)[6],=KH6VM/7(3)[6],=KH6VT(3)[6], - =KH6WX(3)[6],=KH6XG(3)[6],=KH6XS(3)[6],=KH6XT(3)[6],=KH6YL(3)[6],=KH7AL(3)[6],=KH7AR(3)[6], - =KH7CB(3)[6],=KH7CM(3)[6],=KH7CZ(3)[6],=KH7FJ(3)[6],=KH7FR(3)[6],=KH7HH(3)[6],=KH7HWK(3)[6], - =KH7IP(3)[6],=KH7LE(3)[6],=KH7ME(3)[6],=KH7MR(3)[6],=KH7NP(3)[6],=KH7R(3)[6],=KH7SQ(3)[6], + =AH6PW(3)[6],=AH6QW(3)[6],=AH6RI/7(3)[6],=AH6SV(3)[6],=AH6VM(3)[6],=AH6VP(3)[6],=AH6Y(3)[6], + =AH7MP(3)[6],=AH8AC(3)[6],=AH8DX(3)[6],=AH8K(3)[6],=AH9A(3)[6],=AH9AC(3)[6],=AH9C(3)[6], + =AL0AA(3)[6],=AL0F(3)[6],=AL0FT(3)[6],=AL0H(3)[6],=AL0X(3)[6],=AL1N(3)[6],=AL1P(3)[6], + =AL1VE(3)[6],=AL1VE/R(3)[6],=AL2B(3)[6],=AL2N(3)[6],=AL3L(3)[6],=AL4Q/7(3)[6],=AL5B(3)[6], + =AL5W(3)[6],=AL7A(3)[6],=AL7AA(3)[6],=AL7AN(3)[6],=AL7AW(3)[6],=AL7BN(3)[6],=AL7BQ(3)[6], + =AL7CC(3)[6],=AL7CG(3)[6],=AL7CM(3)[6],=AL7CM/7(3)[6],=AL7CR(3)[6],=AL7CS(3)[6],=AL7D(3)[6], + =AL7D/7(3)[6],=AL7D/P(3)[6],=AL7D/R(3)[6],=AL7DD(3)[6],=AL7DU(3)[6],=AL7EI(3)[6],=AL7EJ(3)[6], + =AL7FA(3)[6],=AL7FB(3)[6],=AL7HS(3)[6],=AL7HY(3)[6],=AL7IG(3)[6],=AL7IT(3)[6],=AL7JF(3)[6], + =AL7JJ(3)[6],=AL7JS(3)[6],=AL7JW(3)[6],=AL7JY(3)[6],=AL7KE(3)[6],=AL7KF(3)[6],=AL7KG(3)[6], + =AL7KK(3)[6],=AL7KL(3)[6],=AL7KV(3)[6],=AL7L/7(3)[6],=AL7LL(3)[6],=AL7MH(3)[6],=AL7MQ(3)[6], + =AL7ND(3)[6],=AL7NK(3)[6],=AL7NZ(3)[6],=AL7OK(3)[6],=AL7OW(3)[6],=AL7PR(3)[6],=AL7PV(3)[6], + =AL7QL(3)[6],=AL7R(3)[6],=AL7R/7(3)[6],=AL7RF(3)[6],=AL7RF/7(3)[6],=AL7RM(3)[6],=AL7RR(3)[6], + =AL7W(3)[6],=G4KHG/M(3)[6],=KH0AS(3)[6],=KH0H(3)[6],=KH0K(3)[6],=KH0SH(3)[6],=KH0TL(3)[6], + =KH0X(3)[6],=KH2CH(3)[6],=KH2G(3)[6],=KH2GG(3)[6],=KH2JA(3)[6],=KH2QH(3)[6],=KH2RK(3)[6], + =KH2SK(3)[6],=KH2SR(3)[6],=KH2TJ/7(3)[6],=KH2TJ/P(3)[6],=KH2XP(3)[6],=KH2YL(3)[6],=KH3AD(3)[6], + =KH6AB(3)[6],=KH6AHQ(3)[6],=KH6BXZ(3)[6],=KH6CN(3)[6],=KH6CN/7(3)[6],=KH6COY(3)[6],=KH6CQG(3)[6], + =KH6CQH(3)[6],=KH6CQH/7(3)[6],=KH6DB(3)[6],=KH6DE(3)[6],=KH6DOT(3)[6],=KH6DUT(3)[6],=KH6EE(3)[6], + =KH6EE/7(3)[6],=KH6FKA/7(3)[6],=KH6FU(3)[6],=KH6GB(3)[6],=KH6GDN(3)[6],=KH6HU(3)[6],=KH6HWK(3)[6], + =KH6IA(3)[6],=KH6ICQ(3)[6],=KH6IKC(3)[6],=KH6IMN(3)[6],=KH6IQX(3)[6],=KH6ITY(3)[6],=KH6JFL(3)[6], + =KH6JIM/7(3)[6],=KH6JJS(3)[6],=KH6JPJ(3)[6],=KH6JPO(3)[6],=KH6JRW(3)[6],=KH6JT(3)[6], + =KH6JUQ(3)[6],=KH6KS(3)[6],=KH6KW(3)[6],=KH6LEM(3)[6],=KH6ME(3)[6],=KH6MF(3)[6],=KH6NA(3)[6], + =KH6NO/7(3)[6],=KH6NO/M(3)[6],=KH6NU(3)[6],=KH6OV(3)[6],=KH6PG(3)[6],=KH6PR(3)[6],=KH6QAI(3)[6], + =KH6QAI/7(3)[6],=KH6QAJ(3)[6],=KH6RW(3)[6],=KH6RY(3)[6],=KH6SAT(3)[6],=KH6SS(3)[6],=KH6TG(3)[6], + =KH6TX(3)[6],=KH6VM(3)[6],=KH6VM/7(3)[6],=KH6VT(3)[6],=KH6WX(3)[6],=KH6XG(3)[6],=KH6XS(3)[6], + =KH6XT(3)[6],=KH6YL(3)[6],=KH7AL(3)[6],=KH7AR(3)[6],=KH7AX(3)[6],=KH7CB(3)[6],=KH7CM(3)[6], + =KH7CZ(3)[6],=KH7FJ(3)[6],=KH7FR(3)[6],=KH7HH(3)[6],=KH7HWK(3)[6],=KH7IP(3)[6],=KH7LE(3)[6], + =KH7ME(3)[6],=KH7MR(3)[6],=KH7NP(3)[6],=KH7R(3)[6],=KH7RD(3)[6],=KH7RT(3)[6],=KH7SQ(3)[6], =KH7SR(3)[6],=KH7WW(3)[6],=KH7WW/7(3)[6],=KH7X/7(3)[6],=KH7YD(3)[6],=KH7YD/7(3)[6],=KH8AB(3)[6], =KH8AH(3)[6],=KH8AZ(3)[6],=KH8BG(3)[6],=KH8D(3)[6],=KH8E(3)[6],=KH8K(3)[6],=KH9AA(3)[6], =KL0AI(3)[6],=KL0AN(3)[6],=KL0AP(3)[6],=KL0CA(3)[6],=KL0CM(3)[6],=KL0CW(3)[6],=KL0DF(3)[6], =KL0DG(3)[6],=KL0DR(3)[6],=KL0DT(3)[6],=KL0IR(3)[6],=KL0IS(3)[6],=KL0IW(3)[6],=KL0IX(3)[6], - =KL0MO(3)[6],=KL0NM(3)[6],=KL0PP(3)[6],=KL0QD(3)[6],=KL0RA(3)[6],=KL0SZ(3)[6],=KL0TR(3)[6], - =KL0TU(3)[6],=KL1AA(3)[6],=KL1AE(3)[6],=KL1DO(3)[6],=KL1DW(3)[6],=KL1ED(3)[6],=KL1JF(3)[6], - =KL1K(3)[6],=KL1LE(3)[6],=KL1LZ(3)[6],=KL1MF(3)[6],=KL1OH(3)[6],=KL1QL(3)[6],=KL1RH(3)[6], - =KL1RV(3)[6],=KL1SF/7(3)[6],=KL1SO(3)[6],=KL1U(3)[6],=KL1UA(3)[6],=KL1UM(3)[6],=KL1XI(3)[6], - =KL1YO(3)[6],=KL1YY/7(3)[6],=KL1ZG(3)[6],=KL1ZP(3)[6],=KL1ZR(3)[6],=KL2A/7(3)[6],=KL2BG(3)[6], - =KL2BO(3)[6],=KL2BW(3)[6],=KL2BY(3)[6],=KL2BZ(3)[6],=KL2FD(3)[6],=KL2FL(3)[6],=KL2JY(3)[6], - =KL2K(3)[6],=KL2KY(3)[6],=KL2LA(3)[6],=KL2LN(3)[6],=KL2LT(3)[6],=KL2MP(3)[6],=KL2NJ(3)[6], - =KL2NU(3)[6],=KL2NW(3)[6],=KL2OH(3)[6],=KL2OJ(3)[6],=KL2P(3)[6],=KL2QE(3)[6],=KL2VK(3)[6], - =KL2YH(3)[6],=KL3EZ(3)[6],=KL3FE(3)[6],=KL3IC(3)[6],=KL3IO(3)[6],=KL3IW(3)[6],=KL3MZ(3)[6], - =KL3NE(3)[6],=KL3NO(3)[6],=KL3OQ(3)[6],=KL3PD(3)[6],=KL3TW(3)[6],=KL3VJ(3)[6],=KL3XS(3)[6], - =KL4BS(3)[6],=KL4RKH(3)[6],=KL4YFD(3)[6],=KL7AB(3)[6],=KL7AD(3)[6],=KL7AW(3)[6],=KL7BD(3)[6], - =KL7BDC(3)[6],=KL7BH(3)[6],=KL7BR(3)[6],=KL7BS(3)[6],=KL7BT(3)[6],=KL7BUR(3)[6],=KL7BXP(3)[6], - =KL7C(3)[6],=KL7CPO(3)[6],=KL7CT(3)[6],=KL7DC(3)[6],=KL7DF(3)[6],=KL7DI(3)[6],=KL7DK(3)[6], - =KL7DLG(3)[6],=KL7EF(3)[6],=KL7EFL(3)[6],=KL7EH(3)[6],=KL7EIN(3)[6],=KL7EU(3)[6],=KL7FDQ(3)[6], - =KL7FDQ/7(3)[6],=KL7FOZ(3)[6],=KL7FRQ(3)[6],=KL7FS(3)[6],=KL7GA(3)[6],=KL7GCS(3)[6],=KL7GKY(3)[6], - =KL7GRF(3)[6],=KL7GT(3)[6],=KL7HB(3)[6],=KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6],=KL7HI(3)[6], - =KL7HJR(3)[6],=KL7HLF(3)[6],=KL7HM(3)[6],=KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6],=KL7IAL(3)[6], - =KL7IBT(3)[6],=KL7IDY(3)[6],=KL7IEI(3)[6],=KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6],=KL7IIK(3)[6], - =KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6],=KL7IPV(3)[6],=KL7ISE(3)[6],=KL7IUX(3)[6], - =KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6],=KL7JBB(3)[6],=KL7JDQ(3)[6],=KL7JES(3)[6], - =KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6],=KL7KG/7(3)[6],=KL7LG(3)[6],=KL7LX(3)[6], - =KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6],=KL7MZ(3)[6],=KL7NA(3)[6],=KL7NP(3)[6],=KL7NP/7(3)[6], - =KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6],=KL7OR(3)[6],=KL7OR/7(3)[6],=KL7OS(3)[6],=KL7OY(3)[6], - =KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6],=KL7QK/140(3)[6],=KL7QK/7(3)[6],=KL7QR(3)[6], - =KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6],=KL7RM(3)[6],=KL7RS(3)[6],=KL7S(3)[6], - =KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6],=KL7UP(3)[6],=KL7UT(3)[6],=KL7VK(3)[6], - =KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6],=KL7WM(3)[6],=KL7WN(3)[6],=KL7WP(3)[6], - =KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6],=KL7YY/M(3)[6],=KL7ZH(3)[6],=KL7ZW(3)[6], - =KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6],=KP2CB(3)[6],=KP2CT(3)[6],=KP2X(3)[6], - =KP2Y(3)[6],=KP4BBN(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6],=KP4UZ(3)[6],=KP4X(3)[6],=NH0F(3)[6], - =NH0K(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6],=NH6B(3)[6],=NH6BF(3)[6],=NH6CI(3)[6], - =NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6],=NH6HE(3)[6],=NH6HZ(3)[6],=NH6LM(3)[6], - =NH6NS(3)[6],=NH6U(3)[6],=NH6XP(3)[6],=NH6Z(3)[6],=NH6ZA(3)[6],=NH6ZE(3)[6],=NH7FZ(3)[6], - =NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6],=NH7N(3)[6],=NH7ND(3)[6],=NH7NJ/7(3)[6],=NH7OC(3)[6], - =NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6],=NH7SH(3)[6],=NH7TG(3)[6],=NH7VZ(3)[6],=NH7W(3)[6], - =NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6],=NH7YI(3)[6],=NL7AH(3)[6],=NL7AR(3)[6],=NL7AZ(3)[6], - =NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6],=NL7DH(3)[6],=NL7DY(3)[6],=NL7EO(3)[6],=NL7FQ(3)[6], - =NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6],=NL7GW(3)[6],=NL7HH(3)[6],=NL7HK(3)[6],=NL7HQ(3)[6], - =NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6],=NL7JN(3)[6],=NL7KV(3)[6],=NL7LI(3)[6],=NL7MS(3)[6], - =NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6],=NL7PN(3)[6],=NL7QI(3)[6],=NL7RL(3)[6],=NL7TK(3)[6], - =NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6],=NL7WJ(3)[6],=NL7XX(3)[6],=NL7ZM(3)[6],=NL7ZN(3)[6], - =NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6],=NP3PH(3)[6],=NP4AI/M(3)[6],=NP4ES(3)[6],=NP4FP(3)[6], - =NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6],=VA2GLB/P(3)[6],=WH0AAM(3)[6],=WH0J(3)[6],=WH2ACV(3)[6], - =WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6],=WH6B(3)[6],=WH6BDR(3)[6],=WH6BLM(3)[6],=WH6BPU(3)[6], - =WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6],=WH6CUS(3)[6],=WH6CWD(3)[6],=WH6CXB(3)[6],=WH6CXE(3)[6], - =WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6],=WH6DAY(3)[6],=WH6DJO(3)[6],=WH6DKC(3)[6],=WH6DLQ(3)[6], - =WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6],=WH6EEC(3)[6],=WH6EEG(3)[6],=WH6EGM(3)[6],=WH6EHW(3)[6], - =WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6],=WH6ETO(3)[6],=WH6EWE(3)[6],=WH6FCT(3)[6],=WH6FEU(3)[6], - =WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6],=WH6OY(3)[6],=WH6QV(3)[6],=WH6SD(3)[6],=WH6SR(3)[6], - =WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6],=WH6YT(3)[6],=WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6], - =WH7DB(3)[6],=WH7DE(3)[6],=WH7G(3)[6],=WH7GC(3)[6],=WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6], - =WH7NS(3)[6],=WH7P(3)[6],=WH7RG(3)[6],=WH7TC(3)[6],=WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6], - =WH7XP(3)[6],=WL7AAW(3)[6],=WL7AL(3)[6],=WL7AP(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BHR(3)[6], - =WL7BLM(3)[6],=WL7BM(3)[6],=WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6],=WL7BVN(3)[6], - =WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6],=WL7CPE(3)[6],=WL7CPI(3)[6],=WL7CQX(3)[6], - =WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6],=WL7CTE(3)[6],=WL7DD(3)[6],=WL7FA(3)[6], - =WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6],=WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6],=WL7IS(3)[6], - =WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6],=WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6],=WL7OA(3)[6], - =WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6],=WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6],=WL7SO(3)[6], - =WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6],=WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6],=WL7WU(3)[6], - =WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6],=WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6],=WP4BZG(3)[6], - =WP4DYP(3)[6],=WP4NBP(3)[6], + =KL0LF(3)[6],=KL0MO(3)[6],=KL0NM(3)[6],=KL0NP(3)[6],=KL0PP(3)[6],=KL0QD(3)[6],=KL0RA(3)[6], + =KL0SZ(3)[6],=KL0TR(3)[6],=KL0TU(3)[6],=KL1AA(3)[6],=KL1AE(3)[6],=KL1DO(3)[6],=KL1DW(3)[6], + =KL1ED(3)[6],=KL1JF(3)[6],=KL1K(3)[6],=KL1LE(3)[6],=KL1LZ(3)[6],=KL1MF(3)[6],=KL1OH(3)[6], + =KL1QL(3)[6],=KL1RH(3)[6],=KL1RV(3)[6],=KL1SF/7(3)[6],=KL1SO(3)[6],=KL1U(3)[6],=KL1UA(3)[6], + =KL1UM(3)[6],=KL1XI(3)[6],=KL1YO(3)[6],=KL1YY/7(3)[6],=KL1ZP(3)[6],=KL1ZR(3)[6],=KL2A/7(3)[6], + =KL2BG(3)[6],=KL2BO(3)[6],=KL2BW(3)[6],=KL2BY(3)[6],=KL2BZ(3)[6],=KL2FD(3)[6],=KL2FL(3)[6], + =KL2JY(3)[6],=KL2K(3)[6],=KL2KY(3)[6],=KL2LA(3)[6],=KL2LN(3)[6],=KL2LT(3)[6],=KL2MP(3)[6], + =KL2NJ(3)[6],=KL2NU(3)[6],=KL2NW(3)[6],=KL2OH(3)[6],=KL2OJ(3)[6],=KL2P(3)[6],=KL2QE(3)[6], + =KL2VK(3)[6],=KL2YH(3)[6],=KL3EZ(3)[6],=KL3FE(3)[6],=KL3IC(3)[6],=KL3IO(3)[6],=KL3IW(3)[6], + =KL3MZ(3)[6],=KL3NE(3)[6],=KL3NO(3)[6],=KL3OQ(3)[6],=KL3PD(3)[6],=KL3TW(3)[6],=KL3TY(3)[6], + =KL3VJ(3)[6],=KL3XS(3)[6],=KL4BS(3)[6],=KL4E(3)[6],=KL4RKH(3)[6],=KL4YFD(3)[6],=KL7AB(3)[6], + =KL7AD(3)[6],=KL7AW(3)[6],=KL7BD(3)[6],=KL7BDC(3)[6],=KL7BH(3)[6],=KL7BR(3)[6],=KL7BS(3)[6], + =KL7BT(3)[6],=KL7BUR(3)[6],=KL7BXP(3)[6],=KL7C(3)[6],=KL7CPO(3)[6],=KL7CT(3)[6],=KL7CY(3)[6], + =KL7DC(3)[6],=KL7DF(3)[6],=KL7DI(3)[6],=KL7DK(3)[6],=KL7DLG(3)[6],=KL7EF(3)[6],=KL7EFL(3)[6], + =KL7EH(3)[6],=KL7EIN(3)[6],=KL7EU(3)[6],=KL7FDQ(3)[6],=KL7FDQ/7(3)[6],=KL7FOZ(3)[6],=KL7FRQ(3)[6], + =KL7FS(3)[6],=KL7GA(3)[6],=KL7GCS(3)[6],=KL7GKY(3)[6],=KL7GRF(3)[6],=KL7GT(3)[6],=KL7HB(3)[6], + =KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6],=KL7HI(3)[6],=KL7HJR(3)[6],=KL7HLF(3)[6],=KL7HM(3)[6], + =KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6],=KL7IAL(3)[6],=KL7IBT(3)[6],=KL7IDY(3)[6],=KL7IEI(3)[6], + =KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6],=KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6], + =KL7IPV(3)[6],=KL7ISE(3)[6],=KL7IUX(3)[6],=KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6], + =KL7JBB(3)[6],=KL7JDQ(3)[6],=KL7JES(3)[6],=KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6], + =KL7KG/7(3)[6],=KL7LG(3)[6],=KL7LI(3)[6],=KL7LX(3)[6],=KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6], + =KL7MZ(3)[6],=KL7NA(3)[6],=KL7NP(3)[6],=KL7NP/7(3)[6],=KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6], + =KL7OR(3)[6],=KL7OR/7(3)[6],=KL7OS(3)[6],=KL7OY(3)[6],=KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6], + =KL7QK/140(3)[6],=KL7QK/7(3)[6],=KL7QR(3)[6],=KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6], + =KL7RM(3)[6],=KL7RS(3)[6],=KL7S(3)[6],=KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6], + =KL7UP(3)[6],=KL7UT(3)[6],=KL7VK(3)[6],=KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6], + =KL7WM(3)[6],=KL7WN(3)[6],=KL7WP(3)[6],=KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6], + =KL7YY/M(3)[6],=KL7ZH(3)[6],=KL7ZW(3)[6],=KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6], + =KP2CB(3)[6],=KP2CT(3)[6],=KP2X(3)[6],=KP2Y(3)[6],=KP4BBN(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6], + =KP4UZ(3)[6],=KP4X(3)[6],=NH0F(3)[6],=NH0K(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6], + =NH6B(3)[6],=NH6BF(3)[6],=NH6CI(3)[6],=NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6], + =NH6HE(3)[6],=NH6HZ(3)[6],=NH6LM(3)[6],=NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6], + =NH6Z(3)[6],=NH6ZA(3)[6],=NH6ZE(3)[6],=NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6], + =NH7N(3)[6],=NH7ND(3)[6],=NH7NJ/7(3)[6],=NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6], + =NH7SH(3)[6],=NH7TG(3)[6],=NH7VZ(3)[6],=NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6], + =NH7YI(3)[6],=NL7AH(3)[6],=NL7AR(3)[6],=NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6], + =NL7DH(3)[6],=NL7DY(3)[6],=NL7EO(3)[6],=NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6], + =NL7GW(3)[6],=NL7HH(3)[6],=NL7HK(3)[6],=NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6], + =NL7JN(3)[6],=NL7KV(3)[6],=NL7LI(3)[6],=NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6], + =NL7PN(3)[6],=NL7QI(3)[6],=NL7RL(3)[6],=NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6], + =NL7WJ(3)[6],=NL7XX(3)[6],=NL7ZM(3)[6],=NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6], + =NP3PH(3)[6],=NP4AI/M(3)[6],=NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6], + =VA2GLB/P(3)[6],=WH0AAM(3)[6],=WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6], + =WH6B(3)[6],=WH6BDR(3)[6],=WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6], + =WH6CUS(3)[6],=WH6CWD(3)[6],=WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6], + =WH6DAY(3)[6],=WH6DJO(3)[6],=WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6], + =WH6EEC(3)[6],=WH6EEG(3)[6],=WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6], + =WH6ETO(3)[6],=WH6EWE(3)[6],=WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6], + =WH6OY(3)[6],=WH6QV(3)[6],=WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6], + =WH6YT(3)[6],=WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6],=WH7G(3)[6], + =WH7GC(3)[6],=WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6],=WH7RG(3)[6], + =WH7TC(3)[6],=WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6],=WL7AAW(3)[6],=WL7AL(3)[6], + =WL7AP(3)[6],=WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6],=WL7BHR(3)[6],=WL7BLM(3)[6], + =WL7BM(3)[6],=WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6],=WL7BUI(3)[6],=WL7BVN(3)[6], + =WL7BVS(3)[6],=WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6],=WL7CPE(3)[6],=WL7CPI(3)[6], + =WL7CQX(3)[6],=WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6],=WL7CTE(3)[6],=WL7DD(3)[6], + =WL7FA(3)[6],=WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6],=WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6], + =WL7IS(3)[6],=WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6],=WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6], + =WL7OA(3)[6],=WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6],=WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6], + =WL7SO(3)[6],=WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6],=WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6], + =WL7WU(3)[6],=WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6],=WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6], + =WP2ADG(3)[6],=WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], AA8(4)[8],AB8(4)[8],AC8(4)[8],AD8(4)[8],AE8(4)[8],AF8(4)[8],AG8(4)[8],AI8(4)[8],AJ8(4)[8], AK8(4)[8],K8(4)[8],KA8(4)[8],KB8(4)[8],KC8(4)[8],KD8(4)[8],KE8(4)[8],KF8(4)[8],KG8(4)[8], KI8(4)[8],KJ8(4)[8],KK8(4)[8],KM8(4)[8],KN8(4)[8],KO8(4)[8],KQ8(4)[8],KR8(4)[8],KS8(4)[8], @@ -1525,13 +1535,13 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AL7AH(4)[8],=AL7BA/8(4)[8],=AL7GI(4)[8],=AL7GI/8(4)[8],=AL7J/8(4)[8],=AL7OP(4)[8],=KH2AP(4)[8], =KH6BZF/8(4)[8],=KH6DHK(4)[8],=KH6IK(4)[8],=KH6ILT(4)[8],=KH6SM(4)[8],=KH7DK(4)[8],=KH7SP(4)[8], =KL0DN(4)[8],=KL0NR(4)[8],=KL0PD(4)[8],=KL0PE(4)[8],=KL2NI(4)[8],=KL2PS(4)[8],=KL2YU(4)[8], - =KL3HQ(4)[8],=KL5A(4)[8],=KL7DS(4)[8],=KL7FHI(4)[8],=KL7FHK(4)[8],=KL7GF(4)[8],=KL7IKR(4)[8], - =KL7OG(4)[8],=KL7RF(4)[8],=KL7RF/8(4)[8],=KL7SW(4)[8],=KL8X(4)[8],=KL9A/8(4)[8],=KP2RF(4)[8], - =KP4AKB(4)[8],=KP4AMZ(4)[8],=KP4AQI(4)[8],=KP4E(4)[8],=KP4MAS(4)[8],=KP4VZ(4)[8],=KP4ZD(4)[8], - =NH6CN(4)[8],=NH6CN/8(4)[8],=NL7CF(4)[8],=NL7FK(4)[8],=NP2AK(4)[8],=NP2F(4)[8],=NP3NA(4)[8], - =VE3ACW/M(4)[8],=WH2U(4)[8],=WH6CYR(4)[8],=WH6E(4)[8],=WH6E/8(4)[8],=WH6EBA(4)[8],=WH6EJD(4)[8], - =WH6TB(4)[8],=WL7AM(4)[8],=WL7BKR(4)[8],=WL7CMV(4)[8],=WL7OS(4)[8],=WL7OT(4)[8],=WP3KU(4)[8], - =WP3S(4)[8],=WP4HJF(4)[8],=WP4NAE(4)[8],=WP4NYQ(4)[8],=WP4PLR(4)[8], + =KL3HQ(4)[8],=KL4PQ(4)[8],=KL5A(4)[8],=KL7DS(4)[8],=KL7FHI(4)[8],=KL7FHK(4)[8],=KL7GF(4)[8], + =KL7IKR(4)[8],=KL7OG(4)[8],=KL7RF(4)[8],=KL7RF/8(4)[8],=KL7SW(4)[8],=KL8X(4)[8],=KL9A/8(4)[8], + =KP2RF(4)[8],=KP4AKB(4)[8],=KP4AMZ(4)[8],=KP4AQI(4)[8],=KP4E(4)[8],=KP4MAS(4)[8],=KP4VZ(4)[8], + =KP4ZD(4)[8],=NH6CN(4)[8],=NH6CN/8(4)[8],=NL7CF(4)[8],=NL7FK(4)[8],=NP2AK(4)[8],=NP2F(4)[8], + =NP3NA(4)[8],=VE3ACW/M(4)[8],=WH2U(4)[8],=WH6CYR(4)[8],=WH6E(4)[8],=WH6E/8(4)[8],=WH6EBA(4)[8], + =WH6EJD(4)[8],=WH6TB(4)[8],=WL7AM(4)[8],=WL7BKR(4)[8],=WL7CMV(4)[8],=WL7OS(4)[8],=WL7OT(4)[8], + =WP3KU(4)[8],=WP3S(4)[8],=WP4HJF(4)[8],=WP4MWB(4)[8],=WP4NAE(4)[8],=WP4NYQ(4)[8],=WP4PLR(4)[8], AA9(4)[8],AB9(4)[8],AC9(4)[8],AD9(4)[8],AE9(4)[8],AF9(4)[8],AG9(4)[8],AI9(4)[8],AJ9(4)[8], AK9(4)[8],K9(4)[8],KA9(4)[8],KB9(4)[8],KC9(4)[8],KD9(4)[8],KE9(4)[8],KF9(4)[8],KG9(4)[8], KI9(4)[8],KJ9(4)[8],KK9(4)[8],KM9(4)[8],KN9(4)[8],KO9(4)[8],KQ9(4)[8],KR9(4)[8],KS9(4)[8], @@ -1542,54 +1552,55 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: WE9(4)[8],WF9(4)[8],WG9(4)[8],WI9(4)[8],WJ9(4)[8],WK9(4)[8],WM9(4)[8],WN9(4)[8],WO9(4)[8], WQ9(4)[8],WR9(4)[8],WS9(4)[8],WT9(4)[8],WU9(4)[8],WV9(4)[8],WW9(4)[8],WX9(4)[8],WY9(4)[8], WZ9(4)[8],=AH0AJ(4)[8],=AH6DA(4)[8],=AH6EZ/9(4)[8],=AH6OM(4)[8],=AL1CE(4)[8],=AL7AK(4)[8], - =AL7AK/9(4)[8],=AL7BT(4)[8],=AL7CV(4)[8],=AL7DS(4)[8],=AL7II/9(4)[8],=AL7OL(4)[8],=KH0BE(4)[8], - =KH6JNY(4)[8],=KH6KI(4)[8],=KH6UX(4)[8],=KH7DR(4)[8],=KH7EI(4)[8],=KL0LB(4)[8],=KL0NY(4)[8], - =KL1NO(4)[8],=KL1QN(4)[8],=KL2A/9(4)[8],=KL2KP(4)[8],=KL2NQ(4)[8],=KL2YD(4)[8],=KL2ZL(4)[8], - =KL4CX(4)[8],=KL7AL(4)[8],=KL7AL/9(4)[8],=KL7BGR(4)[8],=KL7CE(4)[8],=KL7CE/9(4)[8],=KL7IBV(4)[8], - =KL7IPS(4)[8],=KL7IVK(4)[8],=KL7JAB(4)[8],=KL7MU(4)[8],=KP3JOS(4)[8],=KP3VA/M(4)[8],=KP4CI(4)[8], - =KP4GE(4)[8],=KP4SL(4)[8],=KP4WG(4)[8],=NH2W(4)[8],=NH2W/9(4)[8],=NH6R(4)[8],=NH7TK(4)[8], - =NL7CM(4)[8],=NL7KD(4)[8],=NL7NK(4)[8],=NL7QC(4)[8],=NL7QC/9(4)[8],=NL7RC(4)[8],=NL7UH(4)[8], - =NL7YI(4)[8],=NP2AV(4)[8],=NP2GM(4)[8],=NP2L/9(4)[8],=NP2MU(4)[8],=NP3QC(4)[8],=NP4JS(4)[8], - =NP4ZI(4)[8],=WH0AI(4)[8],=WH2T(4)[8],=WH6FBA(4)[8],=WH6SB(4)[8],=WL7AHP(4)[8],=WL7AIT(4)[8], - =WL7CTA(4)[8],=WL7FJ(4)[8],=WL7JAN(4)[8],=WL7NP(4)[8],=WL7UU(4)[8],=WP2B(4)[8],=WP4JSP(4)[8], - =WP4KGF(4)[8],=WP4LKY(4)[8],=WP4LSQ(4)[8],=WP4MQX(4)[8],=WP4MSD(4)[8],=WP4MTN(4)[8],=WP4MVQ(4)[8], - =WP4MYL(4)[8],=WP4OCZ(4)[8], + =AL7AK/9(4)[8],=AL7BT(4)[8],=AL7CV(4)[8],=AL7DS(4)[8],=AL7II/9(4)[8],=AL7OL(4)[8],=AL7PM(4)[8], + =KH0BE(4)[8],=KH6JNY(4)[8],=KH6KI(4)[8],=KH6UX(4)[8],=KH7DR(4)[8],=KH7EI(4)[8],=KL0LB(4)[8], + =KL0NY(4)[8],=KL1NO(4)[8],=KL1QN(4)[8],=KL2A/9(4)[8],=KL2KP(4)[8],=KL2NQ(4)[8],=KL2YD(4)[8], + =KL2ZL(4)[8],=KL4CX(4)[8],=KL7AL(4)[8],=KL7AL/9(4)[8],=KL7BGR(4)[8],=KL7CE(4)[8],=KL7CE/9(4)[8], + =KL7IBV(4)[8],=KL7IPS(4)[8],=KL7IVK(4)[8],=KL7JAB(4)[8],=KL7MU(4)[8],=KL7TD(4)[8],=KP3JOS(4)[8], + =KP3VA/M(4)[8],=KP4CI(4)[8],=KP4GE/9(4)[8],=KP4SL(4)[8],=KP4WG(4)[8],=NH2W(4)[8],=NH2W/9(4)[8], + =NH6R(4)[8],=NH7TK(4)[8],=NL7CM(4)[8],=NL7KD(4)[8],=NL7NK(4)[8],=NL7QC(4)[8],=NL7QC/9(4)[8], + =NL7RC(4)[8],=NL7UH(4)[8],=NL7YI(4)[8],=NP2AV(4)[8],=NP2GM(4)[8],=NP2L/9(4)[8],=NP2MU(4)[8], + =NP3QC(4)[8],=NP4ZI(4)[8],=WH0AI(4)[8],=WH2T(4)[8],=WH6FBA(4)[8],=WH6SB(4)[8],=WL7AHP(4)[8], + =WL7AIT(4)[8],=WL7BEV(4)[8],=WL7CTA(4)[8],=WL7FJ(4)[8],=WL7JAN(4)[8],=WL7NP(4)[8],=WL7UU(4)[8], + =WP2B(4)[8],=WP4JSP(4)[8],=WP4KGF(4)[8],=WP4LKY(4)[8],=WP4LSQ(4)[8],=WP4MQX(4)[8],=WP4MSD(4)[8], + =WP4MTN(4)[8],=WP4MVQ(4)[8],=WP4MYL(4)[8],=WP4OCZ(4)[8], =AH2BG(4)[8],=AH6ES(4)[8],=AH6FF(4)[8],=AH6HR(4)[8],=AH6HR/4(4)[8],=AH6KB(4)[8],=AL0P(4)[8], =AL2C(4)[8],=AL2F(4)[8],=AL2F/4(4)[8],=AL4B(4)[8],=AL7CX(4)[8],=AL7EU(4)[8],=AL7KN(4)[8], =AL7MR(4)[8],=AL7QO(4)[8],=KH0UN(4)[8],=KH2AR(4)[8],=KH2AR/4(4)[8],=KH2DN(4)[8],=KH4AF(4)[8], - =KH6EO(4)[8],=KH6JQW(4)[8],=KH6OE(4)[8],=KH6RD(4)[8],=KH6RD/4(4)[8],=KH6SKY(4)[8],=KH6SKY/4(4)[8], - =KH7JM(4)[8],=KH7UB(4)[8],=KL0AH(4)[8],=KL0BX(4)[8],=KL0CP(4)[8],=KL0ET(4)[8],=KL0ET/M(4)[8], - =KL0EY(4)[8],=KL0FF(4)[8],=KL0GI(4)[8],=KL0LN(4)[8],=KL0PM(4)[8],=KL0VH(4)[8],=KL1DN(4)[8], - =KL1IG(4)[8],=KL1LV(4)[8],=KL1SE(4)[8],=KL1SE/4(4)[8],=KL1ZA(4)[8],=KL2GB(4)[8],=KL2HK(4)[8], - =KL2LK(4)[8],=KL2LU(4)[8],=KL2MU(4)[8],=KL2UC(4)[8],=KL3AA(4)[8],=KL3PG(4)[8],=KL4KA(4)[8], + =KH6EO(4)[8],=KH6JQW(4)[8],=KH6KM(4)[8],=KH6OE(4)[8],=KH6RD(4)[8],=KH6RD/4(4)[8],=KH6SKY(4)[8], + =KH6SKY/4(4)[8],=KH7JM(4)[8],=KH7UB(4)[8],=KL0AH(4)[8],=KL0BX(4)[8],=KL0CP(4)[8],=KL0ET(4)[8], + =KL0ET/M(4)[8],=KL0EY(4)[8],=KL0FF(4)[8],=KL0GI(4)[8],=KL0LN(4)[8],=KL0PM(4)[8],=KL0VH(4)[8], + =KL1DN(4)[8],=KL1IG(4)[8],=KL1LV(4)[8],=KL1SE(4)[8],=KL1SE/4(4)[8],=KL1ZA(4)[8],=KL2GB(4)[8], + =KL2HK(4)[8],=KL2LK(4)[8],=KL2LU(4)[8],=KL2MU(4)[8],=KL2UC(4)[8],=KL3PG(4)[8],=KL4KA(4)[8], =KL7DT/4(4)[8],=KL7FO/P(4)[8],=KL7GN/M(4)[8],=KL7IUQ(4)[8],=KL7JKC(4)[8],=KL7LT(4)[8], =KL7WW(4)[8],=KL7YN(4)[8],=KL7YT(4)[8],=KL9MEK(4)[8],=KP3RC(4)[8],=KP4TOM(4)[8],=NH2E(4)[8], - =NH6T/4(4)[8],=NH7FK(4)[8],=NH7FL(4)[8],=NH7H(4)[8],=NL7OE(4)[8],=NL7YU(4)[8],=NP4AC(4)[8], - =NP4AC/4(4)[8],=WH6AUL(4)[8],=WH6BPL(4)[8],=WH6BPL/4(4)[8],=WH6DM(4)[8],=WH6EOG(4)[8], - =WH6FEJ(4)[8],=WH6LAK(4)[8],=WL4B(4)[8],=WL7BHI(4)[8],=WL7BHJ(4)[8],=WL7CQH(4)[8],=WL7CQK(4)[8], - =WL7IP(4)[8],=WL7PC(4)[8],=WL7SF(4)[8],=WL7TD(4)[8],=WL7XZ(4)[8],=WP4CNA(4)[8], + =NH6T/4(4)[8],=NH7FK(4)[8],=NH7FL(4)[8],=NH7H(4)[8],=NL7OE(4)[8],=NL7YU(4)[8],=NP3FB(4)[8], + =NP4AC(4)[8],=NP4AC/4(4)[8],=WH6AUL(4)[8],=WH6BPL(4)[8],=WH6BPL/4(4)[8],=WH6DM(4)[8], + =WH6EOG(4)[8],=WH6FEJ(4)[8],=WH6LAK(4)[8],=WL4B(4)[8],=WL7BHI(4)[8],=WL7BHJ(4)[8],=WL7CQH(4)[8], + =WL7CQK(4)[8],=WL7IP(4)[8],=WL7PC(4)[8],=WL7SF(4)[8],=WL7TD(4)[8],=WL7XZ(4)[8],=WP4CNA(4)[8], =AL7AU(4)[7],=AL7NI(4)[7],=AL7RT(4)[7],=AL7RT/7(4)[7],=KH2BR/7(4)[7],=KH6JVF(4)[7],=KH6OZ(4)[7], =KH7SS(4)[7],=KL0NT(4)[7],=KL0NV(4)[7],=KL0RN(4)[7],=KL1HE(4)[7],=KL1MW(4)[7],=KL1TV(4)[7], =KL2NZ(4)[7],=KL7AR(4)[7],=KL7HF(4)[7],=KL7JGS(4)[7],=KL7JGS/M(4)[7],=KL7JM(4)[7],=KL7LH(4)[7], - =KL7MVX(4)[7],=KL7YY/7(4)[7],=KL9A(4)[7],=KL9A/7(4)[7],=NH0E(4)[7],=NH6HW(4)[7],=WH2M(4)[7], - =WH6COM(4)[7],=WH6ETU(4)[7],=WH6EVP(4)[7],=WL7A(4)[7],=WL7DP(4)[7],=WL7HP/7(4)[7],=WL7I(4)[7], + =KL7MVX(4)[7],=KL7YY/7(4)[7],=KL9A(4)[7],=KL9A/7(4)[7],=NH0E(4)[7],=NH6HW(4)[7],=NL7IH(4)[7], + =NL7MW(4)[7],=WH2M(4)[7],=WH6COM(4)[7],=WH6ETU(4)[7],=WH6EVP(4)[7],=WL7A(4)[7],=WL7DP(4)[7], + =WL7HP/7(4)[7],=WL7I(4)[7], =AL7LU(5)[8],=KL7JFR(5)[8],=WL7HC(5)[8],=WP4GR(5)[8]; Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: KG4,=KG44WW,=KG4AC,=KG4AS,=KG4AW,=KG4AY,=KG4BP,=KG4DY,=KG4EM,=KG4EU,=KG4HF,=KG4HH,=KG4LA,=KG4LB, =KG4SC,=KG4SS,=KG4WH,=KG4WV,=KG4XP,=KG4ZK,=W1AW/KG4; Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: - AH0,KH0,NH0,WH0,=AB2QH,=AB9HF,=AB9OQ,=AD5KT,=AD6YP,=AE6OG,=AF4IN,=AF4KH,=AF6EO,=AH2U,=AJ6K,=AK1JA, - =KB5UAB,=KB9LQG,=KC5SPG,=KC7SDC,=KC9GQX,=KD7GJX,=KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O, - =KH2VL,=KL7QOL,=KW2X,=N0J,=N2AIR,=N3QD,=N6EAX,=N7NVX,=N8CS,=NA1M,=NH2B,=NH2FG,=NU2A,=W1FPU,=W3FM, - =W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; + AH0,KH0,NH0,WH0,=AB2HV,=AB2QH,=AB9HF,=AB9OQ,=AC8CP,=AD5KT,=AD6YP,=AE6OG,=AF4IN,=AF4KH,=AF6EO, + =AH2U,=AJ6K,=AK1JA,=K8KH,=K8RN,=KB5UAB,=KB9LQG,=KC2WIK,=KC5SPG,=KC7SDC,=KC9GQX,=KD7GJX,=KG2QH, + =KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O,=KH2VL,=KL7QOL,=KW2X,=N0J,=N3QD,=N6EAX,=N7NVX,=N8CS, + =NA1M,=NH2B,=NH2FG,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; Baker & Howland Islands: 31: 61: OC: 0.00: 176.00: 12.0: KH1: AH1,KH1,NH1,WH1; Guam: 27: 64: OC: 13.37: -144.70: -10.0: KH2: - AH2,KH2,NH2,WH2,=AB2AB,=AC0FG,=AE6QZ,=AH0AX,=AH0F,=AH0S,=AI6ID,=K1IWD,=K2QGC,=K5GUA,=K5GUM,=KA0RU, - =KA6BEG,=KB7OVT,=KB7PQU,=KC2OOX,=KD7IRV,=KE4YSP,=KE6ATM,=KE7GMC,=KE7IPG,=KF4UFC,=KF5ULC,=KF7BMU, - =KG4BKW,=KG6AGT,=KG6ARL,=KG6DX,=KG6FJG,=KG6JDX,=KG6JKR,=KG6JKT,=KG6TEZ,=KG6TWZ,=KH0C,=KH0DX, - =KH0ES,=KH0TF,=KH6KK,=KI4KKH,=KI4KKI,=KI7SSW,=KJ6KCJ,=KK6GVF,=KK7AV,=KM4NVB,=N2MI,=NH0A,=NH0B, - =NH7TL,=NH7WC,=NP3EZ,=W5LFA,=W6KV,=W7GVC,=W9MRE,=WA3KNB,=WB7AXZ,=WD6DGS,=WH0AC; + AH2,KH2,NH2,WH2,=AB2AB,=AB8EW,=AC0FG,=AE6QZ,=AH0AX,=AH0F,=AH0FM,=AH0S,=AI6ID,=K1IWD,=K2QGC,=K5GUA, + =K5GUM,=KA0RU,=KA6BEG,=KB7OVT,=KB7PQU,=KC2OOX,=KD7IRV,=KE4YSP,=KE6ATM,=KE7GMC,=KE7IPG,=KF4UFC, + =KF5ULC,=KF7BMU,=KG4BKW,=KG6AGT,=KG6ARL,=KG6DX,=KG6FJG,=KG6JDX,=KG6JKR,=KG6JKT,=KG6TEZ,=KG6TWZ, + =KH0C,=KH0DX,=KH0ES,=KH0TF,=KH0UM,=KH6KK,=KI4KKH,=KI4KKI,=KI7SSW,=KJ6KCJ,=KK6GVF,=KK7AV,=KM4NVB, + =N2MI,=NH0A,=NH0B,=NH7TL,=NH7WC,=NP3EZ,=W5LFA,=W6KV,=W7GVC,=W9MRE,=WA3KNB,=WB7AXZ,=WD6DGS,=WH0AC; Johnston Island: 31: 61: OC: 16.72: 169.53: 10.0: KH3: AH3,KH3,NH3,WH3,=KJ6BZ; Midway Island: 31: 61: OC: 28.20: 177.37: 11.0: KH4: @@ -1601,45 +1612,46 @@ Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: =AC7N,=AC9PT,=AE3TT,=AE5AB,=AE5LR,=AG4FH,=AH0A,=AH0AG,=AH2CN,=AJ0M,=AJ8HT,=AK0P,=AK2J,=AL3U, =AL7RQ,=K0BAD,=K0LAS,=K0LIH,=K0LUC,=K0OUS,=K1ENT,=K1HZM,=K1OWL,=K1RJ,=K1VAN,=K2FFT,=K2GT,=K3NW, =K3QHP,=K3UNS,=K4EVR,=K4RAC,=K4UAI,=K4UHL,=K4XS,=K4XSS,=K4XV,=K5HQM,=K5ZAI,=K5ZYO,=K6AMA,=K6APP, - =K6ATF,=K6CEE,=K6DCH,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ASH,=K7FAR,=K7FR,=K7NRJ, - =K7QAS,=K8EUT,=K9AGI,=K9FD,=K9UBS,=KA0FOR,=KA0VHP,=KA1ICJ,=KA1YJ,=KA2IXG,=KA2WXU,=KA3HIZ,=KA3TUA, - =KA4INK,=KA6QOD,=KA7APU,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR,=KB0PXK,=KB0ZKZ,=KB1EUJ,=KB1GC, - =KB1PCX,=KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV,=KB4NGN,=KB5NNY,=KB5OWT,=KB6CNU,=KB6EGA, - =KB6PKF,=KB7AKH,=KB7DDX,=KB7EA,=KB7G,=KB7JB,=KB7MEU,=KB7QKJ,=KB7UQH,=KB7UVR,=KB7WUP,=KB8SKX, - =KC0WQU,=KC0YIH,=KC0ZER,=KC1DBY,=KC2GSU,=KC2HL,=KC2MIU,=KC2PGW,=KC2SRW,=KC2YL,=KC2ZSG,=KC2ZSH, - =KC2ZSI,=KC3GZT,=KC4HHS,=KC5GAX,=KC6HOX,=KC6QQI,=KC6RYQ,=KC6SHT,=KC6SWR,=KC6YIO,=KC7ASJ,=KC7AXX, - =KC7DUT,=KC7EJC,=KC7HNC,=KC7KAT,=KC7KAW,=KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG,=KC7USA, - =KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI,=KC8EJ,=KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ,=KD0QLR, - =KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ,=KD4GW,=KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX,=KD5TBQ, - =KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX,=KD6LRA,=KD6VTU,=KD7HTG,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ,=KD7UV, - =KD7UZG,=KD7WJM,=KD8GVO,=KE0TU,=KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM,=KE5UZN, - =KE6AXN,=KE6AXP,=KE6AYZ,=KE6CQE,=KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ,=KE7FJA, - =KE7FSK,=KE7HEW,=KE7IZS,=KE7JTX,=KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7RCT,=KE7UAJ,=KE7UV, - =KE7UW,=KF4DWA,=KF4FQR,=KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ,=KF5MXM,=KF5MXP, - =KF6BS,=KF6FDG,=KF6IVV,=KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD,=KF6RLP,=KF6YZR, - =KF6ZAL,=KF7GNP,=KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC,=KG4SGV,=KG6DV, - =KG6EFD,=KG6HRX,=KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI,=KG6SDD,=KG6TFI, - =KG6WZD,=KG7AYU,=KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE,=KH2YI,=KH3AE, - =KH3AE/M,=KH3AF,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI6CRL,=KI6DVJ,=KI6EFY,=KI6FTE,=KI6HBZ,=KI6JEC, - =KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV,=KI7EZG,=KI7FJW,=KI7FJX,=KI7FUT, - =KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW,=KJ6LAX,=KJ6LBI,=KJ6NZH,=KJ6QQT, - =KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX,=KK6PGA,=KK6QAI,=KK6VJN,=KK6ZQ, - =KK6ZZE,=KK7WR,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM,=KN6BE,=KN6ZU,=KN8AQR,=KO6KW, - =KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0PJV,=N0RMC,=N0ZSJ,=N1CBF,=N1CFD,=N1CNQ, - =N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ,=N3DJT,=N3FUR,=N3GWR,=N3HQW,=N3RWD, - =N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW,=N6GOZ,=N6IKX,=N6KB,=N6NCT,=N6PJQ, - =N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX,=N9CRQ,=N9GFL,=N9SBL,=NB6R,=NE7SO, - =NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II,=NH2IJ,=NH2IO,=NH2JO,=NH2KF,=NH2KH, - =NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F,=W0UNX,=W1BMB,=W2UNS,=W3ZRT,=W4YQS, - =W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ,=W6NBK,=W6ROM,=W6SHH,=W6UNX,=W7EHP, - =W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=W9IS,=WA0FUR,=WA0NHD,=WA2AUI,=WA3ZEM, - =WA6ECX,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE,=WA7ZK,=WA8JQP,=WB0RUA,=WB0TZQ, - =WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PJT,=WB6SAA,=WB8NCD,=WB9SMM,=WC6B, - =WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K,=WJ8A,=WU0H,=WV0Z,=WV6K,=WX7G; + =K6ATF,=K6CEE,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ASH,=K7FAR,=K7FR,=K7NRJ,=K7QAS, + =K8EUT,=K9AGI,=K9FD,=K9UBS,=KA0FOR,=KA0VHP,=KA1ICJ,=KA1YJ,=KA2IXG,=KA2WXU,=KA3HIZ,=KA3TUA,=KA4INK, + =KA6QOD,=KA7APU,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR,=KB0PXK,=KB0ZKZ,=KB1EUJ,=KB1GC,=KB1PCX, + =KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV,=KB4NGN,=KB5NNY,=KB5OWT,=KB6CNU,=KB6EGA,=KB6INB, + =KB6PKF,=KB7AKH,=KB7DDX,=KB7EA,=KB7G,=KB7JB,=KB7MEU,=KB7QKJ,=KB7UQH,=KB7UVR,=KB7WDC,=KB7WUP, + =KB8SKX,=KC0WQU,=KC0YIH,=KC0ZER,=KC1DBY,=KC2GSU,=KC2HL,=KC2MIU,=KC2PGW,=KC2SRW,=KC2YL,=KC2ZSG, + =KC2ZSH,=KC2ZSI,=KC3GZT,=KC4HHS,=KC5GAX,=KC6HOX,=KC6QQI,=KC6RYQ,=KC6SHT,=KC6SWR,=KC6YIO,=KC7ASJ, + =KC7AXX,=KC7DUT,=KC7EJC,=KC7HNC,=KC7KAT,=KC7KAW,=KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG, + =KC7USA,=KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI,=KC8EJ,=KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ, + =KD0QLR,=KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ,=KD4GW,=KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX, + =KD5TBQ,=KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX,=KD6LRA,=KD6VTU,=KD7HTG,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ, + =KD7UV,=KD7UZG,=KD7WJM,=KD8GVO,=KE0TU,=KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM, + =KE5UZN,=KE6AXN,=KE6AXP,=KE6AYZ,=KE6CQE,=KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ, + =KE7FJA,=KE7FSK,=KE7HEW,=KE7IZS,=KE7JTX,=KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT, + =KE7UAJ,=KE7UV,=KE7UW,=KF4DWA,=KF4FQR,=KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ, + =KF5MXM,=KF5MXP,=KF6BS,=KF6FDG,=KF6IVV,=KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD, + =KF6RLP,=KF6YZR,=KF6ZAL,=KF7GNP,=KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC, + =KG4SGV,=KG6DV,=KG6EFD,=KG6HRX,=KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI, + =KG6SDD,=KG6TFI,=KG6WZD,=KG7AYU,=KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE, + =KH2YI,=KH3AE,=KH3AE/M,=KH3AF,=KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ, + =KI6EFY,=KI6FTE,=KI6HBZ,=KI6JEC,=KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV, + =KI7EZG,=KI7FJW,=KI7FJX,=KI7FUT,=KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW, + =KJ6LAX,=KJ6LBI,=KJ6NZH,=KJ6QQT,=KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX, + =KK6PGA,=KK6QAI,=KK6VJN,=KK6ZQ,=KK6ZZE,=KK7WR,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM, + =KN6BE,=KN6ZU,=KN8AQR,=KO6KW,=KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0PJV,=N0RMC, + =N0ZSJ,=N1CBF,=N1CFD,=N1CNQ,=N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ,=N3DJT, + =N3FUR,=N3GWR,=N3HQW,=N3RWD,=N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW,=N6GOZ, + =N6IKX,=N6KB,=N6NCT,=N6PJQ,=N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX,=N9CRQ, + =N9GFL,=N9SBL,=NB6R,=NE7SO,=NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II,=NH2IJ, + =NH2IO,=NH2JO,=NH2KF,=NH2KH,=NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F,=W0UNX, + =W1BMB,=W2UNS,=W3ZRT,=W4YQS,=W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ,=W6NBK, + =W6ROM,=W6SHH,=W6UNX,=W7EHP,=W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=WA0FUR,=WA0NHD, + =WA2AUI,=WA3ZEM,=WA6ECX,=WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE,=WA7ZK, + =WA8JQP,=WB0RUA,=WB0TZQ,=WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PIO,=WB6PJT, + =WB6SAA,=WB8NCD,=WB9SMM,=WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K,=WU0H, + =WV0Z,=WV6K,=WX7G; Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K: AH7K,KH7K,NH7K,WH7K; American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8: - AH8,KH8,NH8,WH8,=AB9OH,=AF7MN,=KD8TFY,=KM4YJH,=KS6EL,=KS6FS,=W3HG,=WH6BAR,=WL7BMP; + AH8,KH8,NH8,WH8,=AB9OH,=AF7MN,=KD8TFY,=KH0WF,=KM4YJH,=KS6EL,=KS6FS,=W3HG,=WH6BAR,=WL7BMP; Swains Island: 32: 62: OC: -11.05: 171.25: 11.0: KH8/s: =KH6BK/KH8,=KH8/WH7S,=KH8S/K3UY,=KH8S/NA6M,=KH8SI,=NH8S; Wake Island: 31: 65: OC: 19.28: -166.63: -12.0: KH9: @@ -1649,44 +1661,45 @@ Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: =AD0FQ,=AD0ZL,=AD3BJ,=AD6GC,=AD7MF,=AD7VV,=AE1DJ,=AE4QH,=AE5CP,=AE5EX,=AE5FN,=AE5IR,=AE7ES,=AE7KS, =AE7SB,=AF7FV,=AG5LN,=AG5OF,=AH0AH,=AH0H,=AJ4ZI,=K0AZZ,=K0BHC,=K1BZD,=K1MAT,=K2ICW,=K2NPS,=K3JMI, =K4ETC,=K4HOE,=K4RND,=K4WPK,=K5DOW,=K5HL,=K5RD,=K5RSO,=K5RZW,=K5TDN,=K5UBS,=K6ANE,=K6GKW,=K7EJM, - =K7GRW,=K7LOP,=K7MVX,=K7OCL,=K7RDR,=K7UNX,=K7ZOA,=K8IEL,=K8OUA,=K9DUG,=K9WUV,=KA0SIM,=KA0YPV, - =KA1NCN,=KA2TJZ,=KA2ZSD,=KA6UGT,=KA7ETQ,=KA7HOX,=KA7JOR,=KA7TMU,=KA7TOM,=KA7UKN,=KA7VCR,=KA7YEY, - =KA9GYQ,=KB0APK,=KB0LOW,=KB0TSU,=KB0UGE,=KB0UVK,=KB1CRT,=KB1FCX,=KB1KLH,=KB1PHP,=KB1QCD,=KB1QCE, - =KB1SYV,=KB1WQL,=KB2JWV,=KB2ZME,=KB3CYB,=KB3JFK,=KB3NCR,=KB4DX,=KB5DNT,=KB5HEV,=KB5UWU,=KB6DKJ, - =KB7AMA,=KB7BNG,=KB7DEL,=KB7FXJ,=KB7IBI,=KB7JA,=KB7LJZ,=KB7LON,=KB7PHT,=KB7QLB,=KB7RXZ,=KB7SIQ, - =KB7UBH,=KB7VFZ,=KB7YEC,=KB7ZVZ,=KB8QKR,=KB8SBG,=KB8TEW,=KB8VYJ,=KB9MWG,=KB9RWE,=KB9RWJ,=KB9YGR, - =KC0ATI,=KC0CWG,=KC0CYR,=KC0EF,=KC0GHH,=KC0NSV,=KC0OKQ,=KC0PSZ,=KC0TK,=KC0TZL,=KC0UYK,=KC0VDN, - =KC0WSG,=KC0YSW,=KC1DL,=KC2BYX,=KC2GVS,=KC2HRV,=KC2KMU,=KC2OJP,=KC2PCV,=KC2PIO,=KC3DBK,=KC4MXQ, - =KC4MXR,=KC5BNN,=KC5CHO,=KC5DJA,=KC5KIG,=KC5LKF,=KC5LKG,=KC5QPJ,=KC5THY,=KC5YIB,=KC5YOX,=KC5ZAA, - =KC6RJW,=KC7BUL,=KC7COW,=KC7ENM,=KC7FWK,=KC7GSO,=KC7HJM,=KC7HPF,=KC7IKE,=KC7IKF,=KC7INC,=KC7MIJ, - =KC7MPY,=KC7MRO,=KC7OQZ,=KC7PLJ,=KC7PLQ,=KC7RCP,=KC7TYT,=KC7UZY,=KC7WOA,=KC7YZR,=KC8BKP,=KC8GKK, - =KC8NMN,=KC8NOY,=KC8WWS,=KC8YIV,=KC9CMY,=KC9HIK,=KC9VLD,=KD0CLU,=KD0CZC,=KD0DHU,=KD0FJG,=KD0JJB, - =KD0NSG,=KD0VAK,=KD0VAL,=KD0VGF,=KD0ZOD,=KD2CTE,=KD2GKT,=KD4EYW,=KD4MEY,=KD4QJL,=KD5DWV,=KD5GAL, - =KD5QPD,=KD5RVD,=KD5WCF,=KD5WEV,=KD6DLB,=KD6RVY,=KD6YKS,=KD7APU,=KD7AWK,=KD7BBX,=KD7BGP,=KD7DIG, - =KD7DUQ,=KD7FGL,=KD7FUL,=KD7GFG,=KD7HXF,=KD7KRK,=KD7MGO,=KD7QAR,=KD7SIX,=KD7TWB,=KD7UAG,=KD7VOI, - =KD7VXE,=KD7ZTJ,=KD8BVD,=KD8DDY,=KD8GEL,=KD8GMS,=KD8JOU,=KD8LNA,=KD8WMX,=KD9TK,=KE0DYM,=KE0KKI, - =KE4DGR,=KE4MQD,=KE4YEI,=KE4YLG,=KE5CVD,=KE5CVT,=KE5DQV,=KE5FOC,=KE5GEB,=KE5HHR,=KE5JHS,=KE5JTB, - =KE5NLG,=KE5QDI,=KE5QDJ,=KE5QDK,=KE5VPO,=KE5ZRK,=KE5ZUM,=KE6DLM,=KE6DUJ,=KE6DXH,=KE6IPM,=KE6SYD, - =KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL,=KE7EOP,=KE7EPZ,=KE7FNC,=KE7FXM,=KE7GOE,=KE7HMJ,=KE7KAT,=KE7KYU, - =KE7TRX,=KE8RO,=KF4JET,=KF4PLR,=KF4TBD,=KF4YFD,=KF5FJQ,=KF5HFB,=KF5HJC,=KF5NDT,=KF5NHR,=KF5YYK, - =KF6AWG,=KF6AXS,=KF6BMF,=KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO,=KF6ILC,=KF6IOT,=KF6LGK,=KF6MFK,=KF6QOJ, - =KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7LEX,=KF7LUA,=KF7PCJ,=KF7PFT,=KF7PSS,=KF7PUQ,=KF7UFY, - =KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P,=KG4TJS,=KG4WNZ,=KG5EQN,=KG5GDF,=KG5GTD,=KG5JQC,=KG5MIB, - =KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL,=KG7CUR,=KG7DVI,=KG7GJL,=KG7JVJ,=KG7OQC,=KG7SEQ,=KG7TGE,=KH0NF, - =KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA,=KI4COG,=KI4ERC,=KI4GAG,=KI4GCF,=KI4GDI,=KI4NGY,=KI4NVI, - =KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW,=KI7COR,=KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ,=KJ4PSV,=KJ4WDI, - =KJ4ZWI,=KJ6KRG,=KJ6ZSX,=KJ7IR,=KK4AMV,=KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG,=KK4WWH,=KK4WWI,=KK6IUY, - =KK6PGV,=KK7I,=KK7IV,=KK7STL,=KL7D/M,=KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX,=KM4NIC,=KM4OE,=KM4PJH, - =KM4TJI,=KN8IVE,=KR4WV,=KV3X,=KW1W,=KY7J,=KZ6HJC,=N0GDT,=N0GDU,=N0GLI,=N0HJT,=N0HZF,=N0LHN,=N0SN, - =N0SUB,=N0WXJ,=N0XKY,=N0XS,=N0ZKV,=N1HUT,=N1KDQ,=N1KTI,=N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH,=N2SHO, - =N2TJY,=N2YZW,=N3QEH,=N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV,=N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV,=N6CZU, - =N6JM,=N7BUO,=N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX,=N7MGT,=N7MTG,=N7PHB,=N7QAN,=N7TBU,=N7UTV,=N7UWT, - =N7XNM,=N7YKY,=N7YQS,=N7ZYS,=N8DDY,=N8EX,=N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD,=NA7WM,=NC4OI,=NE7EK, - =NE9V,=NH2GZ,=NH7UO,=NJ7H,=NN4NN,=NP4FU,=NW4G,=NW7F,=W0FJN,=W0RWS,=W0UZJ,=W1LYD,=W1RSC,=W1ZKA, - =W2DLS,=W2KRZ,=W3JPN,=W4AUL,=W4BMR,=W4LS,=W4RSB,=W5JKT,=W6DDP,=W6GTE,=W6ROW,=W7APM,=W7DDG,=W7EIK, - =W7JMR,=W7NUT,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT,=W8MDD,=W8PVZ,=W8TCX,=W9ITU,=W9JMC,=WA0JS, - =WA1FVJ,=WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX,=WA7YXF,=WB0CMZ,=WB1GZL,=WB1ILS,=WB6COP, - =WB7QWM,=WB7TYK,=WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK,=WJ8M,=WP4IYI,=WT5T,=WX1NCC; + =K7GRW,=K7LOP,=K7MVX,=K7OCL,=K7RDR,=K7SGA,=K7UNX,=K7ZOA,=K8IEL,=K8OUA,=K9DUG,=K9WUV,=KA0SIM, + =KA0YPV,=KA1NCN,=KA2TJZ,=KA2ZSD,=KA6UGT,=KA7ETQ,=KA7HOX,=KA7JOR,=KA7TMU,=KA7TOM,=KA7UKN,=KA7VCR, + =KA7YEY,=KA9GYQ,=KB0APK,=KB0LOW,=KB0TSU,=KB0UGE,=KB0UVK,=KB1CRT,=KB1FCX,=KB1KLH,=KB1PHP,=KB1QCD, + =KB1QCE,=KB1SYV,=KB1WQL,=KB2JWV,=KB2ZME,=KB3CYB,=KB3JFK,=KB3NCR,=KB4DX,=KB5DNT,=KB5HEV,=KB5UWU, + =KB6DKJ,=KB7AMA,=KB7BNG,=KB7DEL,=KB7FXJ,=KB7IBI,=KB7JA,=KB7LJZ,=KB7LON,=KB7PHT,=KB7QLB,=KB7RXZ, + =KB7SIQ,=KB7UBH,=KB7VFZ,=KB7YEC,=KB7ZVZ,=KB8QKR,=KB8SBG,=KB8TEW,=KB8VYJ,=KB9MWG,=KB9RWE,=KB9RWJ, + =KB9YGR,=KC0ATI,=KC0CWG,=KC0CYR,=KC0EF,=KC0GHH,=KC0NSV,=KC0OKQ,=KC0PSZ,=KC0TK,=KC0TZL,=KC0UYK, + =KC0VDN,=KC0WSG,=KC0YSW,=KC1DL,=KC2BYX,=KC2GVS,=KC2HRV,=KC2KMU,=KC2OJP,=KC2PCV,=KC2PIO,=KC3DBK, + =KC4MXQ,=KC4MXR,=KC5BNN,=KC5CHO,=KC5DJA,=KC5KIG,=KC5LKF,=KC5LKG,=KC5QPJ,=KC5THY,=KC5YIB,=KC5YOX, + =KC5ZAA,=KC6RJW,=KC7BUL,=KC7COW,=KC7ENM,=KC7FWK,=KC7GSO,=KC7HJM,=KC7HPF,=KC7IKE,=KC7IKF,=KC7INC, + =KC7MIJ,=KC7MPY,=KC7MRO,=KC7OQZ,=KC7PLJ,=KC7PLQ,=KC7RCP,=KC7TYT,=KC7UZY,=KC7WOA,=KC7YZR,=KC8BKP, + =KC8GKK,=KC8NMN,=KC8NOY,=KC8WWS,=KC8YIV,=KC9CMY,=KC9HIK,=KC9VLD,=KD0CLU,=KD0CZC,=KD0DHU,=KD0FJG, + =KD0JJB,=KD0NSG,=KD0VAK,=KD0VAL,=KD0VGF,=KD0ZOD,=KD2CTE,=KD2GKT,=KD4EYW,=KD4MEY,=KD4QJL,=KD5DNA, + =KD5DWV,=KD5GAL,=KD5QPD,=KD5RVD,=KD5WCF,=KD5WEV,=KD6DLB,=KD6RVY,=KD6YKS,=KD7APU,=KD7AWK,=KD7BBX, + =KD7BGP,=KD7DIG,=KD7DUQ,=KD7FGL,=KD7FUL,=KD7GFG,=KD7HXF,=KD7KRK,=KD7MGO,=KD7QAR,=KD7SIX,=KD7TWB, + =KD7UAG,=KD7VOI,=KD7VXE,=KD7ZTJ,=KD8BVD,=KD8DDY,=KD8GEL,=KD8GMS,=KD8JOU,=KD8LNA,=KD8WMX,=KD9TK, + =KE0DYM,=KE0KKI,=KE4DGR,=KE4MQD,=KE4YEI,=KE4YLG,=KE5CVD,=KE5CVT,=KE5DQV,=KE5FOC,=KE5GEB,=KE5HHR, + =KE5JHS,=KE5JTB,=KE5NLG,=KE5QDI,=KE5QDJ,=KE5QDK,=KE5VPO,=KE5ZRK,=KE5ZUM,=KE6DLM,=KE6DUJ,=KE6DXH, + =KE6IPM,=KE6SYD,=KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL,=KE7EOP,=KE7EPZ,=KE7FNC,=KE7FXM,=KE7GOE,=KE7HMJ, + =KE7KYU,=KE7TRX,=KE8RO,=KF4JET,=KF4PLR,=KF4TBD,=KF4YFD,=KF5CVM,=KF5FJQ,=KF5HFB,=KF5HJC,=KF5NDT, + =KF5NHR,=KF5YYK,=KF6AWG,=KF6AXS,=KF6BMF,=KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO,=KF6ILC,=KF6IOT,=KF6LGK, + =KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7GKY,=KF7LEX,=KF7LUA,=KF7PCJ,=KF7PFT, + =KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P,=KG4TJS,=KG4WNZ,=KG5EQN,=KG5GDF, + =KG5GTD,=KG5JQC,=KG5MIB,=KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL,=KG7CUR,=KG7DVI,=KG7GJL,=KG7JVJ,=KG7OQC, + =KG7SEQ,=KG7TGE,=KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA,=KI4COG,=KI4ERC,=KI4GAG,=KI4GCF,=KI4GDI, + =KI4NGY,=KI4NVI,=KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW,=KI7COR,=KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ, + =KJ4PSV,=KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6KRG,=KJ6ZSX,=KJ7IR,=KK4AMV,=KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG, + =KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I,=KK7IV,=KK7STL,=KL7D/M,=KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX, + =KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KN8IVE,=KR4WV,=KV3X,=KW1W,=KY7J,=KZ6HJC,=N0GDT,=N0GDU,=N0GLI, + =N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN,=N0SUB,=N0WXJ,=N0XKY,=N0XS,=N0ZKV,=N1HUT,=N1KDQ,=N1KTI, + =N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH,=N2SHO,=N2TJY,=N2YZW,=N3QEH,=N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV, + =N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV,=N6CZU,=N6JM,=N7BUO,=N7DBN,=N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX, + =N7MGT,=N7MTG,=N7PHB,=N7QAN,=N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY,=N7YQS,=N7ZYS,=N8DDY,=N8EX,=N8JKB, + =N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD,=NA7WM,=NC4OI,=NE7EK,=NH2GZ,=NH7UO,=NJ7H,=NN4NN,=NP4FU,=NW4G, + =NW7F,=W0EZM,=W0FJN,=W0RWS,=W0UZJ,=W1LYD,=W1RSC,=W1ZKA,=W2DLS,=W2KRZ,=W3JPN,=W4AUL,=W4BMR,=W4LS, + =W4RSB,=W5JKT,=W6DDP,=W6GTE,=W6ROW,=W7APM,=W7DDG,=W7EIK,=W7JMR,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT, + =W8MDD,=W8PVZ,=W8TCX,=W9ITU,=W9JMC,=WA0JS,=WA1FVJ,=WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX, + =WA7YXF,=WB0CMZ,=WB1GZL,=WB1ILS,=WB6COP,=WB7TYK,=WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK, + =WJ8M,=WP4IYI,=WT5T,=WX1NCC; Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: KP1,NP1,WP1; US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: @@ -1696,21 +1709,22 @@ US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: =KV4IH,=KV4JC,=KV4KW,=N1TKK,=N1VKI,=W0AIH/KV4,=W0YNY,=W2AZK,=W2KW/KV4,=W3K/KD2CLB,=W4LIS,=WA4HLB, =WB2KQW,=WB4WFU,=WD8AHQ,=WI7C; Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: - KP3,KP4,NP3,NP4,WP3,WP4,=AA2ZN,=AB2DR,=AF4OU,=AF5IZ,=AG4CD,=AI4EZ,=K1NDN,=K4C/LH,=K4PFH,=K5YJR, - =K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA7URH,=KA9UTY,=KB0AQB,=KB0TEP,=KB1IJU,=KB1KDP,=KB1RUQ, - =KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX,=KB2NMT,=KB2NYN,=KB2OIF,=KB2OMN, - =KB2OPM,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK,=KB3BTN,=KB3LUV,=KB3SBO,=KB8ZVP,=KB9OWX, - =KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO,=KC1JLY,=KC2BZZ,=KC2CTM,=KC2EMM, - =KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC3GEO,=KC5DKT,=KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV, - =KD5PKH,=KD9GIZ,=KE0AYJ,=KE0GFK,=KE0SH,=KE1MA,=KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG, - =KF4KPO,=KF4ZDB,=KF6OGJ,=KG4IRC,=KG4IVO,=KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB, - =KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ,=KK4DCX,=KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW, - =KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD,=KN4IDV,=KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT, - =KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT,=KP3RE/LH,=KP3RE/LT,=KP4ES/L, - =KP4ES/LGT,=KP4ES/LH,=KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH,=N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU, - =N1SCD,=N1SZM,=N1VCW,=N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM,=N3VIJ,=N3YUB,=N3ZII,=N4JZD,=N4LER, - =N4UK,=N6NVD,=N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR,=W3YW,=W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF, - =WB7ADC,=WB7VVV,=WD4LOL,=WP4L/TP,=WR8Z; + KP3,KP4,NP3,NP4,WP3,WP4,=AA0WX,=AA2ZN,=AB2DR,=AF4OU,=AF5IZ,=AG4CD,=AI4EZ,=K1NDN,=K4C/LH,=K4PFH, + =K5YJR,=K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA3ZGQ,=KA7URH,=KA9UTY,=KB0AQB,=KB0TEP,=KB1IJU, + =KB1KDP,=KB1RUQ,=KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX,=KB2NMT,=KB2NYN, + =KB2OIF,=KB2OMN,=KB2OPM,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK,=KB3BTN,=KB3LUV,=KB3SBO, + =KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO,=KC1JLY,=KC2BZZ, + =KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC2VCR,=KC3GEO,=KC5DKT,=KC8BFN, + =KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KE0AYJ,=KE0GFK,=KE0SH,=KE1MA,=KE3WW, + =KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO,=KF4ZDB,=KF6OGJ,=KG4GYO,=KG4IRC,=KG4IVO, + =KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB,=KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ,=KK4DCX, + =KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW,=KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD,=KN4IDV, + =KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT,=KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ,=KN4REC, + =KN4SKZ,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT,=KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT,=KP4ES/LH, + =KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH,=N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD,=N1SZM,=N1VCW, + =N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM,=N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER,=N4UK,=N6NVD, + =N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR,=W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF,=WB7ADC,=WB7VVV, + =WD4LOL,=WP4L/TP,=WR8Z; Desecheo Island: 08: 11: NA: 18.08: 67.88: 4.0: KP5: KP5,NP5,WP5; Norway: 14: 18: EU: 61.00: -9.00: -1.0: LA: @@ -1736,25 +1750,25 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LU1EST/D,=LU1EUU/D,=LU1EXU/D,=LU1EY/D,=LU1HBD/D,=LU1HLH/D,=LU1KCQ/D,=LU1UAG/D,=LU1VDF/D, =LU1VOF/D,=LU1XWC/E,=LU1XZ/D,=LU1YY/D,=LU2AAS/D,=LU2AEZ/D,=LU2AFE/D,=LU2AGQ/D,=LU2AHB/D,=LU2ALE/D, =LU2AMM/D,=LU2AVG/D,=LU2AVW/D,=LU2BN/D,=LU2BOE/D,=LU2BPM/D,=LU2CDE/D,=LU2CDO/D,=LU2CHP/D,=LU2CM/D, - =LU2DAR/D,=LU2DB/D,=LU2DG/D,=LU2DHM/D,=LU2DJC/D,=LU2DJL/D,=LU2DKN/D,=LU2DPW/D,=LU2DRT/D,=LU2DT/D, - =LU2DT/D/LH,=LU2DT/LGT,=LU2DT/LH,=LU2DVF/D,=LU2ED/D,=LU2EDC/D,=LU2EE/D,=LU2EE/E,=LU2EGA/D, - =LU2EGI/D,=LU2EGP/D,=LU2EHA/D,=LU2EIT/D,=LU2EJL/D,=LU2EK/D,=LU2ELT/D,=LU2EMQ/D,=LU2ENG/D, - =LU2ENH/D,=LU2ERC/D,=LU2FGD/D,=LU2FNH/D,=LU2HOD/D,=LU2JFC/D,=LU2VDV/D,=LU2YF/D,=LU3AAL/D, - =LU3ADC/D,=LU3AJL/D,=LU3AOI/D,=LU3ARE/D,=LU3ARM/D,=LU3AYE/D,=LU3CA/D,=LU3CM/D,=LU3CRA/D,=LU3CT/D, - =LU3DAT/D,=LU3DAT/E,=LU3DC/D,=LU3DEY/D,=LU3DFD/D,=LU3DH/D,=LU3DHF/D,=LU3DJI/D,=LU3DK/D,=LU3DLF/D, - =LU3DMZ/D,=LU3DO/D,=LU3DOC/D,=LU3DP/D,=LU3DPH/D,=LU3DQJ/D,=LU3DR/D,=LU3DRP/D,=LU3DXG/D,=LU3DXI/D, - =LU3DY/D,=LU3DYN/D,=LU3DZO/D,=LU3EBS/D,=LU3ED/D,=LU3EDU/D,=LU3EFL/D,=LU3EJ/L,=LU3EJD/D,=LU3ELR/D, - =LU3EMB/D,=LU3EOU/D,=LU3EP/D,=LU3ERU/D,=LU3ES/D,=LU3ESY/D,=LU3EZA/D,=LU3FCI/D,=LU3HKA/D,=LU4AA/D, - =LU4AAO/D,=LU4AAO/E,=LU4ACA/D,=LU4AJC/D,=LU4BAN/D,=LU4BR/D,=LU4CMF/D,=LU4DBL/D,=LU4DBP/D, - =LU4DBT/D,=LU4DBV/D,=LU4DCE/D,=LU4DCY/D,=LU4DGC/D,=LU4DHA/D,=LU4DHC/D,=LU4DHE/D,=LU4DIS/D, - =LU4DK/D,=LU4DLJ/D,=LU4DLL/D,=LU4DLN/D,=LU4DMI/D,=LU4DPB/D,=LU4DQ/D,=LU4DRC/D,=LU4DRH/D,=LU4DRH/E, - =LU4DVD/D,=LU4EAE/D,=LU4EET/D,=LU4EGP/D,=LU4EHP/D,=LU4EJ/D,=LU4EL/D,=LU4ELE/D,=LU4EOU/D,=LU4ERS/D, - =LU4ESP/D,=LU4ETD/D,=LU4ETN/D,=LU4EV/D,=LU4HSA/D,=LU4HTD/D,=LU4MA/D,=LU4UWZ/D,=LU4UZW/D,=LU4VEN/D, - =LU4VSD/D,=LU4WAP/D,=LU5AHN/D,=LU5ALS/D,=LU5AM/D,=LU5ANL/D,=LU5AQV/D,=LU5ARS/D,=LU5ASA/D, - =LU5AVD/D,=LU5BDS/D,=LU5BE/D,=LU5BTL/D,=LU5CBA/D,=LU5CRE/D,=LU5DA/D,=LU5DA/E,=LU5DAS/D,=LU5DCO/D, - =LU5DDH/D,=LU5DEM/D,=LU5DF/D,=LU5DFR/D,=LU5DFT/D,=LU5DGG/D,=LU5DGR/D,=LU5DHE/D,=LU5DIT/D, - =LU5DJE/D,=LU5DKE/D,=LU5DLH/D,=LU5DLT/D,=LU5DLZ/D,=LU5DMI/D,=LU5DMP/D,=LU5DMR/D,=LU5DQ/D, - =LU5DRV/D,=LU5DSH/D,=LU5DSM/D,=LU5DT/D,=LU5DTB/D,=LU5DTF/D,=LU5DUC/D,=LU5DVB/D,=LU5DWS/D, + =LU2CRV/D,=LU2DAR/D,=LU2DB/D,=LU2DG/D,=LU2DHM/D,=LU2DJC/D,=LU2DJL/D,=LU2DKN/D,=LU2DPW/D,=LU2DRT/D, + =LU2DT/D,=LU2DT/D/LH,=LU2DT/LGT,=LU2DT/LH,=LU2DVF/D,=LU2ED/D,=LU2EDC/D,=LU2EE/D,=LU2EE/E, + =LU2EGA/D,=LU2EGI/D,=LU2EGP/D,=LU2EHA/D,=LU2EIT/D,=LU2EJL/D,=LU2EK/D,=LU2ELT/D,=LU2EMQ/D, + =LU2ENG/D,=LU2ENH/D,=LU2ERC/D,=LU2FGD/D,=LU2FNH/D,=LU2HOD/D,=LU2JFC/D,=LU2VDV/D,=LU2YF/D, + =LU3AAL/D,=LU3ADC/D,=LU3AJL/D,=LU3AOI/D,=LU3ARE/D,=LU3ARM/D,=LU3AYE/D,=LU3CA/D,=LU3CM/D,=LU3CRA/D, + =LU3CT/D,=LU3DAT/D,=LU3DAT/E,=LU3DC/D,=LU3DEY/D,=LU3DFD/D,=LU3DH/D,=LU3DHF/D,=LU3DJI/D,=LU3DK/D, + =LU3DLF/D,=LU3DMZ/D,=LU3DO/D,=LU3DOC/D,=LU3DP/D,=LU3DPH/D,=LU3DQJ/D,=LU3DR/D,=LU3DRP/D,=LU3DRP/E, + =LU3DXG/D,=LU3DXI/D,=LU3DY/D,=LU3DYN/D,=LU3DZO/D,=LU3EBS/D,=LU3ED/D,=LU3EDU/D,=LU3EFL/D,=LU3EJ/L, + =LU3EJD/D,=LU3ELR/D,=LU3EMB/D,=LU3EOU/D,=LU3EP/D,=LU3ERU/D,=LU3ES/D,=LU3ESY/D,=LU3EZA/D,=LU3FCI/D, + =LU3HKA/D,=LU4AA/D,=LU4AAO/D,=LU4AAO/E,=LU4ACA/D,=LU4AJC/D,=LU4BAN/D,=LU4BR/D,=LU4CMF/D,=LU4DBL/D, + =LU4DBP/D,=LU4DBT/D,=LU4DBV/D,=LU4DCE/D,=LU4DCY/D,=LU4DGC/D,=LU4DHA/D,=LU4DHC/D,=LU4DHE/D, + =LU4DIS/D,=LU4DK/D,=LU4DLJ/D,=LU4DLL/D,=LU4DLN/D,=LU4DMI/D,=LU4DPB/D,=LU4DQ/D,=LU4DRC/D,=LU4DRH/D, + =LU4DRH/E,=LU4DVD/D,=LU4EAE/D,=LU4EET/D,=LU4EGP/D,=LU4EHP/D,=LU4EJ/D,=LU4EL/D,=LU4ELE/D,=LU4EOU/D, + =LU4ERS/D,=LU4ESP/D,=LU4ETD/D,=LU4ETN/D,=LU4EV/D,=LU4HSA/D,=LU4HTD/D,=LU4MA/D,=LU4UWZ/D,=LU4UZW/D, + =LU4VEN/D,=LU4VSD/D,=LU4WAP/D,=LU5AHN/D,=LU5ALS/D,=LU5AM/D,=LU5ANL/D,=LU5AQV/D,=LU5ARS/D, + =LU5ASA/D,=LU5AVD/D,=LU5BDS/D,=LU5BE/D,=LU5BTL/D,=LU5CBA/D,=LU5CRE/D,=LU5DA/D,=LU5DA/E,=LU5DAS/D, + =LU5DCO/D,=LU5DDH/D,=LU5DEM/D,=LU5DF/D,=LU5DFR/D,=LU5DFT/D,=LU5DGG/D,=LU5DGR/D,=LU5DHE/D, + =LU5DIT/D,=LU5DJE/D,=LU5DKE/D,=LU5DLH/D,=LU5DLT/D,=LU5DLZ/D,=LU5DMI/D,=LU5DMP/D,=LU5DMR/D, + =LU5DQ/D,=LU5DRV/D,=LU5DSH/D,=LU5DSM/D,=LU5DT/D,=LU5DTB/D,=LU5DTF/D,=LU5DUC/D,=LU5DVB/D,=LU5DWS/D, =LU5DYT/D,=LU5EAO/D,=LU5EC/D,=LU5ED/D,=LU5EDS/D,=LU5EFG/D,=LU5EH/D,=LU5EHC/D,=LU5EJL/D,=LU5EM/D, =LU5EP/D,=LU5EW/D,=LU5FZ/D,=LU5FZ/E,=LU5JAH/D,=LU5JIB/D,=LU5OD/D,=LU5VAS/D,=LU5VAT/D,=LU5XP/D, =LU6AER/D,=LU6CN/D,=LU6DAX/D,=LU6DBL/D,=LU6DC/D,=LU6DCT/D,=LU6DDC/D,=LU6DG/D,=LU6DIE/D,=LU6DIO/D, @@ -1925,12 +1939,12 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LU1XP/XP[16],=LU1XPD/XP[16],=LU1XY/X[16],=LU1YY/XA[16],=LU1ZA/XA[16],=LU2CRM/XA[16], =LU2CRM/XB[16],=LU2WA/XA[16],=LU2XBI/XA[16],=LU2XBI/XB[16],=LU2XWL/XP[16],=LU2XX/X[16], =LU2XX/XA[16],=LU2XX/XP[16],=LU3DVN/X[16],=LU3DVN/XP[16],=LU3XEI/X[16],=LU3XEI/XA[16], - =LU3XEM/X[16],=LU3XUC/XP[16],=LU3XUJ/XP[16],=LU3XYL/XP[16],=LU4DBT/XA[16],=LU4XFN/XA[16], - =LU4XPE/XP[16],=LU5BE/XA[16],=LU5BE/XC[16],=LU5DF/X[16],=LU5EMB/X[16],=LU5HJC/X[16], - =LU5HJC/XP[16],=LU5HJK/XP[16],=LU5XC/X[16],=LU5XP/X[16],=LU5XWA/XP[16],=LU6EE/XA[16], - =LU6XAH/X[16],=LU7DSY/XA[16],=LU7EUI/XP[16],=LU7XDY/X[16],=LU7XDY/XA[16],=LU7XSC/XP[16], - =LU8DLD/XA[16],=LU8DRA/XA[16],=LU8EOT/X[16],=LU8XC/X[16],=LU8XUU/XP[16],=LU8XW/X[16], - =LU8XW/XP[16],=LU9DPD/XA[16],=LU9HUP/X[16],=LW3DKO/XA[16],=LW3ET/XP[16], + =LU3XEM/X[16],=LU3XUC/XP[16],=LU3XUJ/XP[16],=LU3XYL/XP[16],=LU4DBT/XA[16],=LU4XAP/XA[16], + =LU4XFN/XA[16],=LU4XPE/XP[16],=LU5BE/XA[16],=LU5BE/XC[16],=LU5DF/X[16],=LU5EMB/X[16], + =LU5HJC/X[16],=LU5HJC/XP[16],=LU5HJK/XP[16],=LU5XC/X[16],=LU5XP/X[16],=LU5XWA/XP[16], + =LU6EE/XA[16],=LU6XAH/X[16],=LU7DSY/XA[16],=LU7EUI/XP[16],=LU7XDY/X[16],=LU7XDY/XA[16], + =LU7XSC/XP[16],=LU8DLD/XA[16],=LU8DRA/XA[16],=LU8EOT/X[16],=LU8XC/X[16],=LU8XUU/XP[16], + =LU8XW/X[16],=LU8XW/XP[16],=LU9DPD/XA[16],=LU9HUP/X[16],=LW3DKO/XA[16],=LW3ET/XP[16], AY0Y[16],AY1Y[16],AY2Y[16],AY3Y[16],AY4Y[16],AY5Y[16],AY6Y[16],AY7Y[16],AY8Y[16],AY9Y[16], AZ0Y[16],AZ1Y[16],AZ2Y[16],AZ3Y[16],AZ4Y[16],AZ5Y[16],AZ6Y[16],AZ7Y[16],AZ8Y[16],AZ9Y[16], L20Y[16],L21Y[16],L22Y[16],L23Y[16],L24Y[16],L25Y[16],L26Y[16],L27Y[16],L28Y[16],L29Y[16], @@ -1951,12 +1965,12 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: LV0Y[16],LV1Y[16],LV2Y[16],LV3Y[16],LV4Y[16],LV5Y[16],LV6Y[16],LV7Y[16],LV8Y[16],LV9Y[16], LW0Y[16],LW1Y[16],LW2Y[16],LW3Y[16],LW4Y[16],LW5Y[16],LW6Y[16],LW7Y[16],LW8Y[16],LW9Y[16], =LU1DZ/Y[16],=LU1YDC/Y[16],=LU1YY/Y[16],=LU2VA/Y[16],=LU2VDQ/Y[16],=LU2XAN/Y[16],=LU2YMG/Y[16], - =LU3XAP/XA[16],=LU3YEP/Y[16],=LU4AA/Y[16],=LU4DRC/Y[16],=LU4XAP/XA[16],=LU4XEG/XA[16], - =LU4YAB/Y[16],=LU4YAD/Y[16],=LU4YAL/Y[16],=LU5HLR/Y[16],=LU5YF/Y[16],=LU6VEO/Y[16],=LU6VM/Y[16], - =LU6YAB/Y[16],=LU6YBK/Y[16],=LU6YSG/Y[16],=LU7XBX/XA[16],=LU7YCL/Y[16],=LU7YG/Y[16],=LU7YP/Y[16], - =LU8DQ/Y[16],=LU8DRA/Y[16],=LU8EOT/Y[16],=LU8IEZ/Y[16],=LU8VCC/Y[16],=LU8XBC/XA[16], - =LU8XBS/XA[16],=LU8YAH/Y[16],=LU8YD/Y[16],=LU8YE/Y[16],=LU8YMP/Y[16],=LU8YSF/Y[16],=LU9BSA/Y[16], - =LU9ESD/Y[16],=LU9XCC/XA[16],=LW1EXU/Y[16],=LW2DX/Y[16],=LW7DLY/Y[16],=LW7DQQ/Y[16],=LW9DCF/Y[16]; + =LU3XAP/XA[16],=LU3YEP/Y[16],=LU4AA/Y[16],=LU4DRC/Y[16],=LU4XEG/XA[16],=LU4YAB/Y[16], + =LU4YAD/Y[16],=LU4YAL/Y[16],=LU5HLR/Y[16],=LU5YF/Y[16],=LU6VEO/Y[16],=LU6VM/Y[16],=LU6YAB/Y[16], + =LU6YBK/Y[16],=LU6YSG/Y[16],=LU7XBX/XA[16],=LU7YCL/Y[16],=LU7YG/Y[16],=LU7YP/Y[16],=LU8DQ/Y[16], + =LU8DRA/Y[16],=LU8EOT/Y[16],=LU8IEZ/Y[16],=LU8VCC/Y[16],=LU8XBC/XA[16],=LU8XBS/XA[16], + =LU8YAH/Y[16],=LU8YD/Y[16],=LU8YE/Y[16],=LU8YMP/Y[16],=LU8YSF/Y[16],=LU9BSA/Y[16],=LU9ESD/Y[16], + =LU9XCC/XA[16],=LW1EXU/Y[16],=LW2DX/Y[16],=LW7DLY/Y[16],=LW7DQQ/Y[16],=LW9DCF/Y[16]; Luxembourg: 14: 27: EU: 50.00: -6.00: -1.0: LX: LX,=LX9S/J; Lithuania: 15: 29: EU: 55.45: -23.63: -2.0: LY: @@ -1970,8 +1984,8 @@ Peru: 10: 12: SA: -10.00: 76.00: 5.0: OA: Lebanon: 20: 39: AS: 33.83: -35.83: -2.0: OD: OD,=OD5NJ/ID,=OD5QB/ID,=OD5RI/YOTA; Austria: 15: 28: EU: 47.33: -13.33: -1.0: OE: - OE,=4U0R,=4U10NPT,=4U18FIFA,=4U1A,=4U1VIC,=4U1WED,=4U1XMAS,=4U2U,=4U30VIC,=4U70VIC,=4Y1A,=C7A, - =OE2015XHQ/SC,=OE6XMF/U20, + OE,=4U0R,=4U10NPT,=4U18FIFA,=4U1A,=4U1VIC,=4U1WED,=4U1XMAS,=4U2U,=4U30VIC,=4U500M,=4U70VIC,=4Y1A, + =C7A,=OE2015XHQ/SC,=OE6XMF/U20, =OE3AIS/ANT, =OE3AGA/AAW,=OE3AIS/AAW,=OE3HM/AAW,=OE3KKA/AAW,=OE3KKA/ANT,=OE3KTA/ANT,=OE3MWS/Y2K,=OE3RPB/AAW, =OE3RPB/ANT,=OE3SGA/AAW,=OE3SGA/ANT,=OE3WWB/AAW,=OE3WWB/ANT,=OE4VIE/ANT, @@ -2088,10 +2102,10 @@ Brazil: 11: 15: SA: -10.00: 53.00: 3.0: PY: =PT9AA/SD, PV8[12],=PV8DX/SD[12],=PV8IG/SD[12], PW8[12],=PW8AA/SD[12], - =PY1AA/LH,=PY1AA/SD,=PY1CML/SD,=PY1DCS/SD,=PY1DCX/SD,=PY1WC/SD, + =PY1AA/LH,=PY1AA/SD,=PY1CML/SD,=PY1CRN/LH,=PY1DCS/SD,=PY1DCX/SD,=PY1WC/SD, =PU2AIL/YL,=PY2ASS/C,=PY2DS/Q,=PY2NDX/SD,=PY2TDP/SD,=ZX2T/SD,=ZY2CPC/SD, =PU3KIT/YL,=PY3AA/LH,=PY3AA/SD,=PY3COM/SD,=PY3CQ/LH,=PY3CRA/SD,=PY3MHZ/SD,=PY3MSS/YL,=PY3RCA/SD, - =PY3RT/SD,=PY3UGR/SD,=PY3UR/SD,=PY3UU/SD, + =PY3RT/SD,=PY3UGR/SD,=PY3UR/SD,=PY3UU/SD,=ZW3RS/LH, =PY4CEL/SD,=PY4CLK/SD,=PY4MAB/BNC,=PY4VL/SD,=PY4XX/SD,=ZW4CPC/SD, =PY5AA/SD, PY6[13],=ZY6BI/SD[13],=ZY6MP/SD[13], @@ -2156,7 +2170,8 @@ Greece: 20: 28: EU: 39.78: -21.78: -2.0: SV: J4,SV,SW,SX,SY,SZ,=J42004/DH1NA,=J42004/DH1PS,=J42004/HA3NU,=J42004/N3JWJ,=J42004/OE5ER,=SV54FF, =SX90IARU, =SV1/LY1DF/LGT,=SV1EOS/JOTA,=SV1EQU/J,=SV5FRI/1,=SV5FRQ/1,=SV9AWF/1,=SV9CUF/1,=SV9DRU/1,=SV9TJ/1, - =SV2CLJ/J,=SV2JAO/J,=SV2KBB/J,=SV2RNY/J,=SX100TSL/J,=SY2AEI/J,=SY2WT/LH,=SZ2TSL/J, + =SV2CLJ/J,=SV2JAO/J,=SV2KBB/J,=SV2RNY/J,=SV94MIKIS,=SV94THEO,=SX100TSL/J,=SX94MIKIS,=SX94THEO, + =SY2AEI/J,=SY2WT/LH,=SZ2TSL/J, =SV5CJK/3,=SV5FRK/3,=SV5FRP/3,=SV9ION/3, =SV9OFL/4, =SV9DJO/7,=SZ7KAM/LH, @@ -2234,18 +2249,19 @@ Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: R,U,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R7AB/P,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF, =R9AV/6,=R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, - =RA2FDX/3,=RA3CQ/9/M(17)[20],=RA80SP,=RA9JR/3,=RA9JX/3,=RA9P/4,=RA9RT/3,=RA9YA/6,=RC80SP,=RG0F/5, - =RG50P(17),=RG50P/9(17)[30],=RJ80SP,=RK80X(17)[19],=RK8O/4,=RL9AA/6,=RM80SP,=RM8A/4/M,=RM94AE, - =RN9M/4,=RN9OI/3,=RO80RO,=RP61XX(17)[19],=RP62X(17)[19],=RP63X(17)[19],=RP63XO(17)[19], - =RP64X(17)[19],=RP65FPP(17)[30],=RP8X(17)[30],=RQ80SP,=RU0ZW/6,=RU2FB/3,=RU2FB/3/P, - =RU4SS/9(17)[30],=RU4WA/9(17)[30],=RV9LM/3,=RV9XX/3,=RW0IM/1,=RW0QE/6,=RW2F/6,=RW9FF/3,=RW9W/3, - =RW9W/4,=RX2FS/3,=RX9TC/1,=RX9UL/1,=RZ9AWN/6,=UA0AK/3,=UA0FQ/6,=UA0KBG/3,=UA0KBG/6,=UA0KCX/3/P, - =UA0KT/4,=UA0QNE/3,=UA0QNU/3,=UA0QQJ/3,=UA0UV/6,=UA0XAK/3,=UA0XAK/6,=UA0ZL/6,=UA9CCO/6,=UA9CTT/3, - =UA9CTT/6,=UA9FFS/1/MM,=UE23DKA,=UE23DSA,=UE6MAC/9(17),=UE95AE,=UE95E,=UE95ME,=UE96ME,=UE99PS, - =R900BL,=R9J/1,=RA2FN/1,=RA9KU/1,=RA9KU/1/M,=RA9MC/1,=RA9SGI/1,=RK9XWV/1,=RL1O,=RM80DZ,=RN85AM, - =RN85KN,=RT9T/1,=RU2FB/1,=RU9YT/1,=RU9YT/1/P,=RV1CC/M,=RW1AI/ANT,=RW8W/1,=RW9QA/1,=RX3AMI/1/LH, - =UA1ADQ/ANT,=UA1BJ/ANT,=UA1JJ/ANT,=UA2FFX/1,=UA9B/1,=UA9KG/1,=UA9KGH/1,=UA9KK/1,=UA9UDX/1, - =UB9YUW/1,=UE21A,=UE21B,=UE21M,=UE22A,=UE25AC,=UE25AQ,=UE2AT/1, + =RA2FDX/3,=RA3CQ/9/M(17)[20],=RA80SP,=RA9JR/3,=RA9JX/3,=RA9P/4,=RA9RT/3,=RA9UUY/6,=RA9YA/6, + =RC80SP,=RG0F/5,=RG50P(17),=RG50P/9(17)[30],=RJ80SP,=RK80X(17)[19],=RK8O/4,=RL9AA/6,=RM80SP, + =RM8A/4/M,=RM94AE,=RN9M/4,=RN9OI/3,=RO80RO,=RP61XX(17)[19],=RP62X(17)[19],=RP63X(17)[19], + =RP63XO(17)[19],=RP64X(17)[19],=RP65FPP(17)[30],=RP8X(17)[30],=RQ80SP,=RU0ZW/6,=RU2FB/3, + =RU2FB/3/P,=RU4SS/9(17)[30],=RU4WA/9(17)[30],=RV9LM/3,=RV9XX/3,=RW0IM/1,=RW0QE/6,=RW2F/6,=RW9FF/3, + =RW9W/3,=RW9W/4,=RX2FS/3,=RX9TC/1,=RX9UL/1,=RZ9AWN/6,=UA0AK/3,=UA0FQ/6,=UA0KBG/3,=UA0KBG/6, + =UA0KCX/3/P,=UA0KT/4,=UA0QNE/3,=UA0QNU/3,=UA0QQJ/3,=UA0UV/6,=UA0XAK/3,=UA0XAK/6,=UA0ZL/6, + =UA9CCO/6,=UA9CTT/3,=UA9CTT/6,=UA9FFS/1/MM,=UE23DKA,=UE6MAC/9(17),=UE95AE,=UE95E,=UE95ME,=UE96ME, + =UE99PS, + =R900BL,=R9J/1,=RA2FN/1,=RA9KU/1,=RA9KU/1/M,=RA9MC/1,=RA9SGI/1,=RK9XWV/1,=RL1O,=RM0L/1,=RM80DZ, + =RN85AM,=RN85KN,=RT9T/1,=RU2FB/1,=RU9YT/1,=RU9YT/1/P,=RV1CC/M,=RW1AI/ANT,=RW8W/1,=RW9QA/1, + =RX3AMI/1/LH,=UA1ADQ/ANT,=UA1BJ/ANT,=UA1JJ/ANT,=UA2FFX/1,=UA9B/1,=UA9KG/1,=UA9KGH/1,=UA9KK/1, + =UA9UDX/1,=UB9YUW/1,=UE21A,=UE21B,=UE21M,=UE22A,=UE25AC,=UE25AQ,=UE2AT/1, =R0XAC/1,=R900DM,=R90LPU,=R9JNO/1,=RA0FU/1,=RA9FNV/1,=RU9MU/1,=RV0CA/1,=RV2FW/1,=RV9JD/1,=RX9TN/1, =UA0BDS/1,=UA0SIK/1,=UA1CDA/LH,=UA1CIO/LH,=UA9MQR/1,=UB5O/1, R1N[19],RA1N[19],RC1N[19],RD1N[19],RE1N[19],RF1N[19],RG1N[19],RJ1N[19],RK1N[19],RL1N[19],RM1N[19], @@ -2280,7 +2296,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R85QMR,=R85WDW,=R8B,=R8FF/3,=R90DNF,=R99FSB,=RA0BY/3,=RA80KEDR,=RA9KV/3,=RA9SB/3,=RA9XY/3, =RK3DSW/ANT,=RK3DWA/3/N,=RN9MD/3,=RT80KEDR,=RU0LM/3,=RU2FA/3,=RU3HD/ANT,=RV0AO/3,=RV9LM/3/P, =RW0IM/3,=RW3DU/N,=RW9UEW/3,=RX9SN/3,=RZ9SZ/3,=RZ9W/3,=UA0JAD/3,=UA0KCL/3,=UA0ZAZ/3,=UA9AJ/3/M, - =UA9DD/3,=UA9HSI/3,=UA9ONJ/3,=UA9XGD/3,=UA9XMC/3,=UE25FO,=UE95GA,=UE96WS, + =UA9DD/3,=UA9HSI/3,=UA9ONJ/3,=UA9XGD/3,=UA9XMC/3,=UE23DSA,=UE25FO,=UE95GA,=UE96WS, =R80ORL,=UA0QGM/3,=UE80O,=UE80OL, =R0CAF/3,=R3GO/FF,=RM0L/3,=RN3GL/FF,=RN3GW/FF,=RT5G/P/FF,=RW0IW/3,=UA3GM/ANT,=UE90FL, =RA9KT/3,=RZ9SZ/3/M,=UA0FHC/3,=UF2F/3/M, @@ -2301,14 +2317,14 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R110A/P,=R80PVB, =RA9XF/3,=RC80KEDR,=RD0L/3,=RK0BWW/3,=RN80KEDR,=RW9XC/3/M,=RX3XX/N,=UA0KBA/3/P,=UA9SIV/3, =UE0ZOO/3, - =R85WTA,=R8FF/3/P,=R98KPM,=R99KPM,=RA3YV/ANT,=RK0UT/3,=RW0LX/3,=UA3YH/ANT,=UA9KZ/3,=UB8JAF/3, - =UE91L,=UE95K,=UE95RA, + =R100WWS,=R85WTA,=R8FF/3/P,=R98KPM,=R99KPM,=RA3YV/ANT,=RK0UT/3,=RW0LX/3,=UA3YH/ANT,=UA9KZ/3, + =UB8JAF/3,=UE91L,=UE95K,=UE95RA, =R3ZK/FF,=RA3ZZ/ANT,=RA9AK/3,=RA9KD/3,=RU3ZK/FF,=RW0BG/3,=UA0QBC/3, =RA07DR,=RA9ODR/4/M,=RC4AF/FF,=RN4ACA/FF,=RU9CK/6/M,=UA4ASE/FF,=UA4ATL/FF,=UA8WAA/6,=UA9FGR/4, =UE00S,=UE00S/P,=UE09VG,=UE80RWW, =R4CDX/FF,=R8FF/4,=R8FR/4/M,=RA9KO/4,=RL96WS,=RL97WS,=RU80KEDR,=RU80KEDR/P,=RU9SO/4/M,=RV4CC/FF, =RV9CX/4/M,=RW0UZ/4,=RW9AW/4/M,=RZ0SB/4,=UA0KAT/4,=UA8WAA/4,=UA9AGR/4/M,=UA9JPX/4,=UA9OC/4, - =UE95MS,=UE95WS,=UE98WS,=UE99PW, + =UE23DZO,=UE95MS,=UE95WS,=UE98WS,=UE99PW, =R9CMA/4,=R9JBN/4, R4H[30],R4I[30],RA4H[30],RA4I[30],RC4H[30],RC4I[30],RD4H[30],RD4I[30],RE4H[30],RE4I[30],RF4H[30], RF4I[30],RG4H[30],RG4I[30],RJ4H[30],RJ4I[30],RK4H[30],RK4I[30],RL4H[30],RL4I[30],RM4H[30], @@ -2344,10 +2360,10 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R01DTV,=R01DTV/7,=R0IT/6,=R80TV,=R8XW/6,=R9JO/6,=R9KD/6,=R9OM/6,=R9WGM/6/M,=RA0APW/6,=RA0FW/6, =RA0LIF/6,=RA0LLW/6,=RA0QR/6,=RA9ODR/6,=RA9ODR/6/M,=RA9SAS/6,=RA9UWD/6,=RA9WW/6,=RD9CX/6, =RD9CX/6/P,=RK6AH/LH,=RK9JA/6,=RN0CF/6,=RN0JT/6,=RQ0C/6,=RT9K/6,=RT9K/6/P,=RT9K/6/QRP,=RU2FB/6, - =RU9MX/6,=RU9QRP/6/M,=RU9QRP/6/P,=RV9FQ/6,=RW0LIF/6,=RW0LIF/6/LH,=RW6AWW/LH,=RW9JZ/6,=RW9WA/6, - =RX6AA/ANT,=RX6AAP/ANT,=RX9TX/6,=RZ9HG/6,=RZ9HT/6,=RZ9UF/6,=RZ9UZV/6,=UA0AGE/6,=UA0IT/6,=UA0JL/6, - =UA0LQQ/6/P,=UA0SEP/6,=UA2FT/6,=UA6ADC/N,=UA9COO/6,=UA9JON/6,=UA9JPX/6,=UA9KB/6,=UA9KJ/6,=UA9KW/6, - =UA9MQR/6,=UA9UAX/6,=UA9VR/6,=UA9XC/6,=UA9XCI/6,=UB5O/M,=UE9WDA/6,=UE9WFF/6, + =RU9MX/6,=RU9QRP/6/M,=RU9QRP/6/P,=RU9SO/6,=RV9FQ/6,=RW0LIF/6,=RW0LIF/6/LH,=RW6AWW/LH,=RW9JZ/6, + =RW9WA/6,=RX6AA/ANT,=RX6AAP/ANT,=RX9TX/6,=RZ9HG/6,=RZ9HT/6,=RZ9UF/6,=RZ9UZV/6,=UA0AGE/6,=UA0IT/6, + =UA0JL/6,=UA0LQQ/6/P,=UA0SEP/6,=UA2FT/6,=UA6ADC/N,=UA9COO/6,=UA9JON/6,=UA9JPX/6,=UA9KB/6,=UA9KJ/6, + =UA9KW/6,=UA9MQR/6,=UA9UAX/6,=UA9VR/6,=UA9XC/6,=UA9XCI/6,=UE9WDA/6,=UE9WFF/6,=UF0W/6, =RA6EE/FF,=RN7G/FF,=UA0LEC/6,=UA9KAS/6,=UA9KAS/6/P, =R9XV/6,=RA0ZG/6,=RA9CHS/6,=RA9CHS/7,=RK7G/FF,=RM8A/6/M,=RT9K/7,=RU9CK/7,=RU9ZA/7,=RZ7G/FF, =RZ9ON/6,=UA0ZDA/6,=UA0ZS/6,=UA6HBO/N,=UA6HBO/ST30,=UA6IC/6/FF,=UA9CE/6,=UA9UAX/7/M,=UE80HS, @@ -2359,7 +2375,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R8FF/6,=R9DA/6,=RU9CK/6/P,=RV9CX/6/P,=UA9CES/6,=UA9FGR/6,=UA9WQK/6, =RU9CK/7/M,=RU9CK/7/P,=RV9CX/7/P,=UA9JFN/6/M, =RT9K/7/P,=RZ7G/6/FF, - =R01DTV/6,=RV9AB/6, + =R01DTV/6,=RV9AB/6,=UB5O/M, =R9MJ/6,=R9OM/5/P,=R9XT/6,=RA9KD/6,=RN9N/6,=RT9T/6,=RT9T/6/M,=RU2FB/5,=RU9WW/5/M,=RW9AW/5, =UA0LLM/5,=UA8WAA/5,=UA9CDC/6,=UA9UAX/5,=UE2KR,=UE98PW, =R8AEU/6,=R9MJ/6/M,=RN9N/6/M,=UB8ADI/5,=UB8ADI/6,=UE2SE, @@ -2381,14 +2397,14 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: UE8G(17)[30],UE9F(17)[30],UE9G(17)[30],UF8F(17)[30],UF8G(17)[30],UF9F(17)[30],UF9G(17)[30], UG8F(17)[30],UG8G(17)[30],UG9F(17)[30],UG9G(17)[30],UH8F(17)[30],UH8G(17)[30],UH9F(17)[30], UH9G(17)[30],UI8F(17)[30],UI8G(17)[30],UI9F(17)[30],UI9G(17)[30],=R120RP(17)[30],=R155PM(17)[30], - =R18PER(17)[30],=R2011UFO(17)[30],=R2011UFO/M(17)[30],=R2011UFO/P(17)[30],=R2014WOG(17)[30], - =R20PRM(17)[30],=R2AG/9(17)[30],=R34CZF(17)[30],=R6DAB/9(17)[30],=R8CZ/4(17)[30], - =R8CZ/4/M(17)[30],=R8CZ/M(17)[30],=R95FR(17)[30],=R9CZ/4(17)[30],=R9CZ/4/M(17)[30], - =R9KC/4/M(17)[30],=R9KC/8/M(17)[30],=RA27FM(17)[30],=RA9XAI/4(17)[30],=RC20FM(17)[30], - =RD4M/9(17)[30],=RG50P/M(17)[30],=RP70PK(17)[30],=RP9FKU(17)[30],=RP9FTK(17)[30],=RU27FQ(17)[30], - =RU27FW(17)[30],=RU4W/9(17)[30],=RV22PM(17)[30],=RX9TX/9(17)[30],=RZ16FM(17)[30],=RZ9WM/9(17)[30], - =UA1ZQO/9(17)[30],=UA4NF/4/M(17)[30],=UA4WA/9(17)[30],=UA9CGL/4/M(17)[30],=UA9CUA/4/M(17)[30], - =UA9UAX/4(17)[30],=UE16SA(17)[30],=UE55PM(17)[30], + =R160PM(17)[30],=R18PER(17)[30],=R2011UFO(17)[30],=R2011UFO/M(17)[30],=R2011UFO/P(17)[30], + =R2014WOG(17)[30],=R20PRM(17)[30],=R2AG/9(17)[30],=R34CZF(17)[30],=R6DAB/9(17)[30], + =R8CZ/4(17)[30],=R8CZ/4/M(17)[30],=R8CZ/M(17)[30],=R95FR(17)[30],=R9CZ/4(17)[30], + =R9CZ/4/M(17)[30],=R9KC/4/M(17)[30],=R9KC/8/M(17)[30],=RA27FM(17)[30],=RA9XAI/4(17)[30], + =RC20FM(17)[30],=RD4M/9(17)[30],=RG50P/M(17)[30],=RP70PK(17)[30],=RP9FKU(17)[30],=RP9FTK(17)[30], + =RU27FQ(17)[30],=RU27FW(17)[30],=RU4W/9(17)[30],=RV22PM(17)[30],=RX9TX/9(17)[30],=RZ16FM(17)[30], + =RZ9WM/9(17)[30],=UA1ZQO/9(17)[30],=UA4NF/4/M(17)[30],=UA4WA/9(17)[30],=UA9CGL/4/M(17)[30], + =UA9CUA/4/M(17)[30],=UA9UAX/4(17)[30],=UE16SA(17)[30],=UE55PM(17)[30], =RW3TN/9(17)[30],=UE10SK(17)[30], R8X(17)[20],R9X(17)[20],RA8X(17)[20],RA9X(17)[20],RC8X(17)[20],RC9X(17)[20],RD8X(17)[20], RD9X(17)[20],RE8X(17)[20],RE9X(17)[20],RF8X(17)[20],RF9X(17)[20],RG8X(17)[20],RG9X(17)[20], @@ -2419,12 +2435,12 @@ Kaliningrad: 15: 29: EU: 54.72: -20.52: -3.0: UA2: RZ2F,RZ2K,U2F,U2K,UA2,UB2,UC2,UD2,UE2,UF2,UG2,UH2,UI2,=R01DTV/2,=R10RLHA/2,=R10RTRS/2,=R1255F, =R1336FO,=R14CWC/2,=R15CWC/2,=R15CWC/2/QRP,=R18SRB,=R1NW/2,=R1QAP/2,=R2/DK2AI,=R2/DL1YMK, =R2/N6TCZ,=R2/R6AF,=R2/UA6LV,=R2/UR0MC,=R21GGGR,=R22GGGR,=R22GGR,=R25ARCK/2,=R2MWO,=R310A/2, - =R3SRR/2,=R3XA/2,=R5K/2,=R5QA/2,=R60A,=R680FBO,=R6AF/2,=R7LV/2,=R900BL/2,=RA/DL6KV,=RA/EU1FY/P, - =RA2FDX/FF,=RA2FN/RP,=RA2FO/N,=RA3ATX/2,=RA3XM/2,=RA4LW/2,=RC18KA,=RD22FU,=RD3FG/2,=RJ22DX, - =RK3QS/2,=RM9I/2,=RM9IX/2,=RN3GM/2,=RP2F,=RP2K,=RP70KB,=RP70KG,=RP70MW,=RP70WB,=RT9T/2,=RU3FS/2, - =RU5A/2,=RV3FF/2,=RV3MA/2,=RV3UK/2,=RV9WZ/2,=RW9QA/2,=RY1AAA/2,=RZ3FA/2,=RZ6HB/2,=UA0SIK/2, - =UA1AAE/2,=UA1AFT/2,=UA2DC/RP,=UA2FM/MM(13),=UA3DJG/2,=UA4RC/2,=UA4WHX/2,=UA9UAX/2,=UB5O/2, - =UB5O/2/M,=UB9KAA/2,=UE08F,=UE1RLH/2,=UE3QRP/2,=UE6MAC/2,=UF1M/2; + =R3SRR/2,=R3XA/2,=R5K/2,=R5QA/2,=R60A,=R680FBO,=R6AF/2,=R777AN,=R7LV/2,=R900BL/2,=RA/DL6KV, + =RA/EU1FY/P,=RA2FDX/FF,=RA2FN/RP,=RA2FO/N,=RA3ATX/2,=RA3XM/2,=RA4LW/2,=RC18KA,=RD22FU,=RD3FG/2, + =RJ22DX,=RK3QS/2,=RM9I/2,=RM9IX/2,=RN3GM/2,=RP2F,=RP2K,=RP70KB,=RP70KG,=RP70MW,=RP70WB,=RT9T/2, + =RU3FS/2,=RU5A/2,=RV3FF/2,=RV3MA/2,=RV3UK/2,=RV9WZ/2,=RW9QA/2,=RY1AAA/2,=RZ3FA/2,=RZ6HB/2, + =UA0SIK/2,=UA1AAE/2,=UA1AFT/2,=UA2DC/RP,=UA2FM/MM(13),=UA3DJG/2,=UA4RC/2,=UA4WHX/2,=UA9UAX/2, + =UB5O/2,=UB5O/2/M,=UB9KAA/2,=UE08F,=UE1RLH/2,=UE3QRP/2,=UE6MAC/2,=UF1M/2; Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: R0(19)[33],R8,R9,RA0(19)[33],RA8,RA9,RC0(19)[33],RC8,RC9,RD0(19)[33],RD8,RD9,RE0(19)[33],RE8,RE9, RF0(19)[33],RF8,RF9,RG0(19)[33],RG8,RG9,RI0(19)[33],RI8,RI9,RJ0(19)[33],RJ8,RJ9,RK0(19)[33],RK8, @@ -2447,17 +2463,17 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RV3BA/9,=RV9WB/9/M,=RV9WMZ/9/P,=RV9WMZ/P,=RX3RC/9,=RX9WN/9/M,=RZ0OO/9,=RZ6DR/9/M,=RZ9OO/9/M, =UA0MF/9,=UA3AKO/8,=UA4RC/9,=UA6A/9,=UA6CW/9,=UA6YGY/8,=UA6YGY/9,=UA8WAA/9,=UA8WAA/9/P,=UA8WAA/M, =UA9CGL/9/M,=UA9SG/9,=UA9TO/9/M,=UA9WMN/9/P,=UB5O/8,=UE45AWT,=UE70AAA,=UE9WDA/9, - =R01DTV/8,=R14CWC/8,=R14CWC/9,=R150DMP,=R155AP,=R15CWC/8,=R15CWC/8/QRP,=R16SVK,=R170GS/8,=R2015BP, - =R2015R,=R2016DR,=R20EKB,=R22SKJ,=R27EKB,=R30ZF,=R35CZF,=R375I,=R44YETI/8,=R4WAB/9/P,=R55EPC, - =R55EPC/P,=R6UAE/9,=R70NIK,=R7LZ/8,=R8FF/8,=R9GM/8,=R9GM/8/M,=RA/DL6XK,=RA/US5ETV,=RA0BA/8, - =RA0BA/9,=RA27AA,=RA27EK,=RA36GS,=RA36ZF,=RA4YW/9,=RA4YW/9/M,=RA9FW/9,=RA9WU/9,=RC18EK,=RD0B/8, - =RK9AD/9/M,=RK9DR/N,=RM0B/9,=RM19NY,=RN16CW,=RN3QBG/9,=RP68DT,=RP68RG,=RP68TG,=RP68TK,=RP69GR, - =RP70DT,=RP70G,=RP70GB,=RP70GR,=RP70MA,=RP70SA,=RP70UH,=RP71DT,=RP71GA,=RP71GA/M,=RP71GB,=RP71GR, - =RP71LT,=RP71MO,=RP71SA,=RP72DT,=RP72FI,=RP72GB,=RP72GR,=RP72IM,=RP72KB,=RP72SA,=RP73DT,=RP73GB, - =RP73GR,=RP73IM,=RP73SA,=RT4C/8,=RT4W/9,=RT73BR,=RT73EB,=RT73FL,=RT73HE,=RT73KB,=RT73SK,=RU22CR, - =RU5D/8,=RU5D/9,=RV6LGY/9,=RV6LGY/9/M,=RV6LGY/9/P,=RV6MD/9,=RW4NX/9,=RW9C[20],=RX0SD/9,=RX3Q/9, - =RX9UL/9,=RY9C/P,=RZ37ZF,=RZ38ZF,=RZ39ZF,=UA0BA/8,=UA3FQ/8,=UA3IHJ/8,=UA4WHX/9,=UA8WAA/8,=UA9MW/9, - =UA9UAX/8,=UA9UAX/8/M,=UE16SR,=UE25F,=UE40CZF,=UE4NFF/9,=UE56S,=UE64RWA,=UE70SL,=UE75DT, + =R01DTV/8,=R14CWC/8,=R14CWC/9,=R150DMP,=R155AP,=R15CWC/8,=R15CWC/8/QRP,=R160DMP,=R16SVK,=R170GS/8, + =R2015BP,=R2015R,=R2016DR,=R20EKB,=R22SKJ,=R27EKB,=R30ZF,=R35CZF,=R375I,=R44YETI/8,=R4WAB/9/P, + =R55EPC,=R55EPC/P,=R6UAE/9,=R70NIK,=R7LZ/8,=R8FF/8,=R9GM/8,=R9GM/8/M,=RA/DL6XK,=RA/US5ETV, + =RA0BA/8,=RA0BA/9,=RA27AA,=RA27EK,=RA36GS,=RA36ZF,=RA4YW/9,=RA4YW/9/M,=RA9FW/9,=RA9WU/9,=RC18EK, + =RD0B/8,=RK9AD/9/M,=RK9DR/N,=RM0B/9,=RM19NY,=RN16CW,=RN3QBG/9,=RP68DT,=RP68RG,=RP68TG,=RP68TK, + =RP69GR,=RP70DT,=RP70G,=RP70GB,=RP70GR,=RP70MA,=RP70SA,=RP70UH,=RP71DT,=RP71GA,=RP71GA/M,=RP71GB, + =RP71GR,=RP71LT,=RP71MO,=RP71SA,=RP72DT,=RP72FI,=RP72GB,=RP72GR,=RP72IM,=RP72KB,=RP72SA,=RP73DT, + =RP73GB,=RP73GR,=RP73IM,=RP73SA,=RT4C/8,=RT4W/9,=RT73BR,=RT73EB,=RT73FL,=RT73HE,=RT73KB,=RT73SK, + =RU22CR,=RU5D/8,=RU5D/9,=RV6LGY/9,=RV6LGY/9/M,=RV6LGY/9/P,=RV6MD/9,=RW4NX/9,=RW9C[20],=RX0SD/9, + =RX3Q/9,=RX9UL/9,=RY9C/P,=RZ37ZF,=RZ38ZF,=RZ39ZF,=UA0BA/8,=UA3FQ/8,=UA3IHJ/8,=UA4WHX/9,=UA8WAA/8, + =UA9MW/9,=UA9UAX/8,=UA9UAX/8/M,=UE16SR,=UE25F,=UE40CZF,=UE4NFF/9,=UE56S,=UE64RWA,=UE70SL,=UE75DT, R8H(18)[31],R8I(18)[31],R9H(18)[31],R9I(18)[31],RA8H(18)[31],RA8I(18)[31],RA9H(18)[31], RA9I(18)[31],RC8H(18)[31],RC8I(18)[31],RC9H(18)[31],RC9I(18)[31],RD8H(18)[31],RD8I(18)[31], RD9H(18)[31],RD9I(18)[31],RE8H(18)[31],RE8I(18)[31],RE9H(18)[31],RE9I(18)[31],RF8H(18)[31], @@ -2551,10 +2567,10 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RU27OZ(18)[31],=RU6LA/9(18)[31],=RV0CJ/9(18)[31],=RW1AC/9(18)[31],=RW9MD/9/M(18)[31], =RZ9MXM/9(18)[31],=UA0KDR/9(18)[31],=UA0ZAY/9(18)[31],=UA6WFO/9(18)[31],=UA9MA/9(18)[31], =UA9MA/9/M(18)[31],=UA9MRA/9(18)[31],=UE80NSO(18)[31], - =R110RP,=R120RDP,=R120RZ,=R120TM,=R150RP,=R155RP,=R18URU,=RA22QF,=RC20QA,=RC20QC,=RC20QF,=RM20CC, - =RM9RZ/A,=RM9RZ/P,=RP65R,=RP67KE,=RP67R,=RP68KE,=RP68R,=RP69KE,=RP69R,=RP70KE,=RP70R,=RP71R, - =RP72KE,=RP72R,=RT73CW,=RT73JH,=RV3MN/9,=RW22QA,=RW22QA/8,=RW22QC,=RW22QC/8,=RW4NW/9,=RY22RZ, - =RZ9WM/9/M,=UE4WFF/9,=UE4WFF/9/P,=UE70KRM/8/M, + =R110RP,=R120RDP,=R120RZ,=R120TM,=R150RP,=R155RP,=R160RP,=R18URU,=RA22QF,=RC20QA,=RC20QC,=RC20QF, + =RM20CC,=RM9RZ/A,=RM9RZ/P,=RP65R,=RP67KE,=RP67R,=RP68KE,=RP68R,=RP69KE,=RP69R,=RP70KE,=RP70R, + =RP71R,=RP72KE,=RP72R,=RT73CW,=RT73JH,=RV3MN/9,=RW22QA,=RW22QA/8,=RW22QC,=RW22QC/8,=RW4NW/9, + =RY22RZ,=RZ9WM/9/M,=UE4WFF/9,=UE4WFF/9/P,=UE70KRM/8/M, R8S(16),R8T(16),R9S(16),R9T(16),RA8S(16),RA8T(16),RA9S(16),RA9T(16),RC8S(16),RC8T(16),RC9S(16), RC9T(16),RD8S(16),RD8T(16),RD9S(16),RD9T(16),RE8S(16),RE8T(16),RE9S(16),RE9T(16),RF8S(16), RF8T(16),RF9S(16),RF9T(16),RG8S(16),RG8T(16),RG9S(16),RG9T(16),RJ8S(16),RJ8T(16),RJ9S(16), @@ -2600,13 +2616,13 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RP69KM(18)[31],=RP70KM(18)[31],=RP70NM(18)[31],=RP70UK(18)[31],=RP70ZF(18)[31],=RP71KM(18)[31], =RP72KM(18)[31],=RP72NM(18)[31],=RP73KM(18)[31],=RP73NZ(18)[31],=RP73ZF(18)[31],=RT22UA(18)[31], =RT77VV(18)[31],=RW4CG/9(18)[31],=RZ5D/9(18)[31],=UA9JFE/9/P(18)[31],=UE3ATV/9(18)[31], - R8W(16),R9W(16),RA8W(16),RA9W(16),RC8W(16),RC9W(16),RD8W(16),RD9W(16),RE8W(16),RE9W(16),RF8W(16), - RF9W(16),RG8W(16),RG9W(16),RJ8W(16),RJ9W(16),RK8W(16),RK9W(16),RL8W(16),RL9W(16),RM8W(16), - RM9W(16),RN8W(16),RN9W(16),RO8W(16),RO9W(16),RQ8W(16),RQ9W(16),RT8W(16),RT9W(16),RU8W(16), - RU9W(16),RV8W(16),RV9W(16),RW8W(16),RW9W(16),RX8W(16),RX9W(16),RY8W(16),RY9W(16),RZ8W(16), - RZ9W(16),U8W(16),U9W(16),UA8W(16),UA9W(16),UB8W(16),UB9W(16),UC8W(16),UC9W(16),UD8W(16),UD9W(16), - UE8W(16),UE9W(16),UF8W(16),UF9W(16),UG8W(16),UG9W(16),UH8W(16),UH9W(16),UI8W(16),UI9W(16), - =R100W(16),=R100WW(16),=R10RTRS/9(16),=R18KDR/4(16),=R2013CG(16),=R2015AS(16),=R2015DS(16), + R100W(16),R8W(16),R9W(16),RA8W(16),RA9W(16),RC8W(16),RC9W(16),RD8W(16),RD9W(16),RE8W(16),RE9W(16), + RF8W(16),RF9W(16),RG8W(16),RG9W(16),RJ8W(16),RJ9W(16),RK8W(16),RK9W(16),RL8W(16),RL9W(16), + RM8W(16),RM9W(16),RN8W(16),RN9W(16),RO8W(16),RO9W(16),RQ8W(16),RQ9W(16),RT8W(16),RT9W(16), + RU8W(16),RU9W(16),RV8W(16),RV9W(16),RW8W(16),RW9W(16),RX8W(16),RX9W(16),RY8W(16),RY9W(16), + RZ8W(16),RZ9W(16),U8W(16),U9W(16),UA8W(16),UA9W(16),UB8W(16),UB9W(16),UC8W(16),UC9W(16),UD8W(16), + UD9W(16),UE8W(16),UE9W(16),UF8W(16),UF9W(16),UG8W(16),UG9W(16),UH8W(16),UH9W(16),UI8W(16), + UI9W(16),=R100W(16),=R10RTRS/9(16),=R18KDR/4(16),=R2013CG(16),=R2015AS(16),=R2015DS(16), =R2015KM(16),=R2017F/P(16),=R20BIS(16),=R20UFA(16),=R25ARCK/4(16),=R25MSB(16),=R25WPW(16), =R27UFA(16),=R3XX/9(16),=R44WFF(16),=R7378TM(16),=R8JAJ/4(16),=R8JAJ/9(16),=R90WGM(16), =R90WJV(16),=R90WOB(16),=R90WXK(16),=R9LY/4(16),=RA0R/4(16),=RA1ZPC/9(16),=RA3AUU/9(16), @@ -2667,7 +2683,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =R44YETI/9(18)[32],=R50CQM(18)[32],=R63RRC(18)[32],=R7LZ/9(18)[32],=RA/UR5HVR(18)[32], =RA0/UR5HVR(18)[32],=RA1AMW/0(18)[32],=RA3AUU/0(18)[32],=RA3BB/0(18)[32],=RA3DA/0(18)[32], =RA3DA/9(18)[32],=RA4CQ/0(18)[32],=RA4CSX/0(18)[32],=RA4RU/0(18)[32],=RA9UT/0(18)[32], - =RAEM(18)[32],=RD110RAEM(18)[32],=RI0BV/0(18)[32],=RK3DZJ/9(18)[32],=RK56GC(18)[32], + =RAEM(18)[32],=RD110RAEM(18)[32],=RI0B(18)[32],=RI0BV/0(18)[32],=RK3DZJ/9(18)[32],=RK56GC(18)[32], =RK6BBM/9(18)[32],=RK80KEDR(18)[32],=RL5G/9(18)[32],=RM0A(18)[32],=RM2D/9(18)[32], =RM9RZ/0(18)[32],=RN0A(18)[32],=RN110RAEM(18)[32],=RN110RAEM/P(18)[32],=RP70KV(18)[32], =RP70RS(18)[32],=RP73KT(18)[32],=RT22SA(18)[32],=RT9K/9(18)[32],=RU19NY(18)[32],=RU3FF/0(18)[32], @@ -2677,8 +2693,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =UA0WG/0(18)[32],=UA0WW/0(18)[32],=UA0WW/M(18)[32],=UA0WY/0(18)[32],=UA3ADN/0(18)[32], =UA4LU/0(18)[32],=UA4PT/0(18)[32],=UA6BTN/0(18)[32],=UA9UAX/9(18)[32],=UA9WDK/0(18)[32], =UB1AJQ/0(18)[32],=UE1WFF/0(18)[32], - =R100D(18)[22],=R100DI(18)[22],=R3CA/9(18)[22],=RA3XR/0(18)[22],=RA9LI/0(18)[22],=RI0B(18)[22], - =RI0BDI(18)[22],=RS0B(18)[22],=RS0B/P(18)[22],=RV3EFH/0(18)[22],=RW1AI/9(18)[22],=RW3GW/0(18)[22], + =R100D(18)[22],=R100DI(18)[22],=R3CA/9(18)[22],=RA3XR/0(18)[22],=RA9LI/0(18)[22],=RI0BDI(18)[22], + =RS0B(18)[22],=RS0B/P(18)[22],=RV3EFH/0(18)[22],=RW1AI/9(18)[22],=RW3GW/0(18)[22], =RX6LMQ/0(18)[22],=RZ9DX/0(18)[22],=RZ9DX/0/A(18)[22],=RZ9DX/0/P(18)[22],=RZ9DX/9(18)[22], =RZ9DX/9/P(18)[22],=RZ9OO/0(18)[22],=UA1ADQ/0(18)[22],=UA3HY/0(18)[22],=UA3YH/0(18)[22], =UA4RX/0(18)[22],=UA9FL/0(18)[22],=UE0BFF(18)[22],=UE44POL(18)[22],=UE44POL/P(18)[22], @@ -2743,15 +2759,16 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: UF0N(19)[34],UG0L(19)[34],UG0M(19)[34],UG0N(19)[34],UH0L(19)[34],UH0M(19)[34],UH0N(19)[34], UI0L(19)[34],UI0M(19)[34],UI0N(19)[34],=R0HQ(19)[34],=R150L(19)[34],=R17CWH(19)[34], =R20RRC/0(19)[34],=R3BY/0(19)[34],=R3HD/0(19)[34],=R66IOTA(19)[34],=R70LWA(19)[34], - =R8CW/0(19)[34],=R8XW/0(19)[34],=R9XT/0(19)[34],=RA/IK7YTT(19)[34],=RC/N6TCZ(19)[34], - =RD3BN/0(19)[34],=RL5G/0/P(19)[34],=RM0M(19)[34],=RM5M/0(19)[34],=RN1NS/0(19)[34],=RP0L(19)[34], - =RP0LPK(19)[34],=RP60P(19)[34],=RP66V(19)[34],=RP67SD(19)[34],=RP67V(19)[34],=RP68SD(19)[34], - =RP68V(19)[34],=RP69SD(19)[34],=RP69V(19)[34],=RP70DG(19)[34],=RP70SD(19)[34],=RP70V(19)[34], - =RP71DG(19)[34],=RP71SD(19)[34],=RP71V(19)[34],=RP72DG(19)[34],=RP72SD(19)[34],=RP72V(19)[34], - =RP73DG(19)[34],=RP73SD(19)[34],=RP73V(19)[34],=RU3BY/0(19)[34],=RU5D/0(19)[34],=RV1AW/0(19)[34], - =RV3DSA/0(19)[34],=RW22GO(19)[34],=RW3LG/0(19)[34],=RX15RX(19)[34],=UA0SDX/0(19)[34], - =UA0SIK/0(19)[34],=UA3AHA/0(19)[34],=UA4SBZ/0(19)[34],=UA6MF/0(19)[34],=UA7R/0(19)[34], - =UB0LAP/P(19)[34],=UC0LAF/P(19)[34],=UE1RFF/0(19)[34],=UE70MA(19)[34],=UE75L(19)[34], + =R8CW/0(19)[34],=R8XW/0(19)[34],=R9XT/0(19)[34],=RA/IK7YTT(19)[34],=RA/OK1DWF(19)[34], + =RC/N6TCZ(19)[34],=RD3BN/0(19)[34],=RL5G/0/P(19)[34],=RM0M(19)[34],=RM5M/0(19)[34], + =RN1NS/0(19)[34],=RP0L(19)[34],=RP0LPK(19)[34],=RP60P(19)[34],=RP66V(19)[34],=RP67SD(19)[34], + =RP67V(19)[34],=RP68SD(19)[34],=RP68V(19)[34],=RP69SD(19)[34],=RP69V(19)[34],=RP70DG(19)[34], + =RP70SD(19)[34],=RP70V(19)[34],=RP71DG(19)[34],=RP71SD(19)[34],=RP71V(19)[34],=RP72DG(19)[34], + =RP72SD(19)[34],=RP72V(19)[34],=RP73DG(19)[34],=RP73SD(19)[34],=RP73V(19)[34],=RU3BY/0(19)[34], + =RU5D/0(19)[34],=RV1AW/0(19)[34],=RV3DSA/0(19)[34],=RW22GO(19)[34],=RW3LG/0(19)[34], + =RX15RX(19)[34],=UA0SDX/0(19)[34],=UA0SIK/0(19)[34],=UA3AHA/0(19)[34],=UA4SBZ/0(19)[34], + =UA6MF/0(19)[34],=UA7R/0(19)[34],=UB0LAP/P(19)[34],=UC0LAF/P(19)[34],=UE1RFF/0(19)[34], + =UE70MA(19)[34],=UE75L(19)[34], R0O(18)[32],RA0O(18)[32],RC0O(18)[32],RD0O(18)[32],RE0O(18)[32],RF0O(18)[32],RG0O(18)[32], RJ0O(18)[32],RK0O(18)[32],RL0O(18)[32],RM0O(18)[32],RN0O(18)[32],RO0O(18)[32],RQ0O(18)[32], RT0O(18)[32],RU0O(18)[32],RV0O(18)[32],RW0O(18)[32],RX0O(18)[32],RY0O(18)[32],RZ0O(18)[32], @@ -2840,8 +2857,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =R7AB/9(18)[32],=RA/UR5WT(18)[32],=RA77VV(18)[32],=RB110RAEM(18)[32],=RK0AXC/0(18)[32], =RK0AXC/0/M(18)[32],=RK6YYA/0(18)[32],=RK6YYA/0/M(18)[32],=RN4CU/0(18)[32],=RN4CU/0/P(18)[32], =RN9A/0(18)[32],=RP0UWZ(18)[32],=RP0UZF(18)[32],=RW0UM/0(18)[32],=RZ19NY(18)[32], - =UA3AKO/0/M(18)[32],=UE15UWC(18)[32],=UE23DZO(18)[32],=UE70UVV(18)[32],=UE70UWW(18)[32], - =UE75VV(18)[32]; + =UA3AKO/0/M(18)[32],=UE15UWC(18)[32],=UE70UVV(18)[32],=UE70UWW(18)[32],=UE75VV(18)[32]; Uzbekistan: 17: 30: AS: 41.40: -63.97: -5.0: UK: UJ,UK,UL,UM,=U8AG,=U8AH,=U8AI,=UK/DF3DS/Z; Kazakhstan: 17: 30: AS: 48.17: -65.18: -5.0: UN: @@ -2898,7 +2914,7 @@ Marshall Islands: 31: 65: OC: 9.08: -167.33: -12.0: V7: Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8: V8; Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: - CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190212, + CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190319, =CF7AAW/1,=CK7IG/1,=VA3QSL/1,=VA3WR/1,=VE1REC/LH,=VE1REC/M/LH,=VE3RSA/1,=VE7IG/1, CF2[4],CG2[4],CJ2[4],CK2[4],VA2[4],VB2[4],VC2[4],VE2[4],VG2[4],VX2[4],XL2[4],XM2[4],=4Y1CAO[4], =CY2ZT/2[4],=VA3ELE/2[4],=VA3MPM/2[4],=VA7AQ/P[4],=VE2/G3ZAY/P[4],=VE2/M0BLF/P[4],=VE2FK[9], @@ -2940,16 +2956,17 @@ Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: =VE2DXY(2)[4],=VE2EKA(2)[4],=VE2EW(2)[4],=VE2FDJ/2(2)[4],=VE2GHZ/2(2)[4],=VE2HRI(2)[4], =VE2IDX(2)[4],=VE2III(2)[4],=VE2IM(2)[4],=VE2KK(2)[4],=VE2NN(2)[4],=VE2OTT(2)[4],=VE2PR(2)[4], =VE2PRG(2)[4],=VE2QIP/2(2)[4],=VE2WDX(2)[4],=VE2XAA/2(2)[4],=VE2XB/2(2)[4],=VE2Z(2)[4], - =VE3AXC/2(2)[4],=VE3CWU/2(2)[4],=VE3EXY/VE2(2)[4],=VE3EY/2(2)[4],=VE3FDX/2(2)[4],=VE3JM/2(2)[4], - =VE3NE/2(2)[4],=VE3NWA/2(2)[4],=VE3RHJ/2(2)[4],=VE3ZF/2(2)[4],=VE7ACN/2(2)[4],=VE7ACN/VE2(2)[4], - =VE7MID/VE2(2)[4],=VE8DX/2(2)[4],=W0SD/VE2(2)[4],=W2NTJ/VE2(2)[4],=W4TMO/VE2(2)[4], - =W5GED/VE2(2)[4],=WB8YTZ/VE2(2)[4],=XM3NE/2(2)[4], + =VE3AXC/2(2)[4],=VE3CWU/2(2)[4],=VE3EY/2(2)[4],=VE3FDX/2(2)[4],=VE3JM/2(2)[4],=VE3NE/2(2)[4], + =VE3NWA/2(2)[4],=VE3RHJ/2(2)[4],=VE3ZF/2(2)[4],=VE7ACN/VE2(2)[4],=VE7MID/VE2(2)[4],=VE8DX/2(2)[4], + =W0SD/VE2(2)[4],=W2NTJ/VE2(2)[4],=W4TMO/VE2(2)[4],=W5GED/VE2(2)[4],=WB8YTZ/VE2(2)[4], + =XM3NE/2(2)[4], =K8JJ/VY0(4)[4],=K9AJ/VY0(4)[4],=KD6WW/VY0(4)[4],=VY0A(4)[4],=VY0V(4)[4]; Australia: 30: 59: OC: -23.70: -132.33: -10.0: VK: AX,VH,VI,VJ,VK,VL,VM,VN,VZ,=VK9MAV, + =VK6MB/1, =AX2000/IMD,=AX2000/LH,=VI90IARU,=VK6AV/2,=VK6AXB/2,=VK6DXI/2,=VK6MB/2,=VK6YB/2,=VK6ZOA/2, =VK8GMT/2,=VK9LX/2, - =AX8AA,=VK3DK/LH,=VK6FMON/3,=VK6JON/3,=VK6NX/3,=VK6SX/3,=VK9LA/3,=VK9ZLH/3, + =AX8AA,=VK3DK/LH,=VK6FMON/3,=VK6JON/3,=VK6MB/3,=VK6NX/3,=VK6SX/3,=VK9LA/3,=VK9ZLH/3, AX4[55],VH4[55],VI4[55],VJ4[55],VK4[55],VL4[55],VM4[55],VN4[55],VZ4[55],=VK100WIA[55], =VK4MM/LH[55],=VK4WIA/HQ[55],=VK5MAV/9[55],=VK6AV/4[55],=VK6CN/4[55],=VK6DW/4[55],=VK6DXI/4[55], =VK6JON/4[55],=VK6KM/4[55],=VK6LC/4[55],=VK6NAI/4[55],=VK6ZN/4[55],=VK8FUNN/4[55],=VK8GM/4[55], @@ -3009,7 +3026,7 @@ Ducie Island: 32: 63: OC: -24.70: 124.80: 8.0: VP6/d: Falkland Islands: 13: 16: SA: -51.63: 58.72: 4.0: VP8: VP8; South Georgia Island: 13: 73: SA: -54.48: 37.08: 2.0: VP8/g: - =VP8CA,=VP8CKB,=VP8DIF,=VP8DKX,=VP8DOZ,=VP8DXU,=VP8GEO,=VP8GI,=VP8SGB,=VP8SGI,=VP8SGK; + =VP8CA,=VP8CKB,=VP8DIF,=VP8DKX,=VP8DOZ,=VP8GEO,=VP8GI,=VP8SGB,=VP8SGI,=VP8SGK; South Shetland Islands: 13: 73: SA: -62.08: 58.67: 4.0: VP8/h: CE9,XR9,=BY/R1ANF,=CA8WCI/9,=CV0A,=D88S,=DP1ANF,=DT8A,=EA/FT5YK,=EA/FT5YK/P,=EA1CYK/P,=EA1CYK/VP8, =EA4FZR,=EA4FZR/P,=ED3RKL,=HC/FT5YK,=HF0/R1ANF,=HF0APAS,=HF0ARC,=HF0POL,=HF0POL/LH,=HF0QF,=HL0KSJ, @@ -3092,7 +3109,7 @@ Aves Island: 08: 11: NA: 15.67: 63.60: 4.0: YV0: 4M0,YV0,YW0,YX0,YY0; Zimbabwe: 38: 53: AF: -18.00: -31.00: -2.0: Z2: Z2,=Z21KD/L,=Z27JAM/J; -Macedonia: 15: 28: EU: 41.60: -21.65: -1.0: Z3: +North Macedonia: 15: 28: EU: 41.60: -21.65: -1.0: Z3: Z3; Republic of Kosovo: 15: 28: EU: 42.67: -21.17: -1.0: Z6: Z6; From 92a4d343dea138fcb16b8749eb85d84f50772b16 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 22 Mar 2019 22:37:41 +0000 Subject: [PATCH 151/367] Prep for v2.1.0-rc1 release --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 4a5c860cd..1ed47ac75 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From d0c6c28796f18982d54ac93c00f1d2e399be49ac Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 22 Mar 2019 23:14:30 +0000 Subject: [PATCH 152/367] Bump RC number for v2.1.0 --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 1ed47ac75..779d7a887 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From 0d42ad5b3e8c5bf273f835896c714e34012500f2 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 23 Mar 2019 01:21:42 +0000 Subject: [PATCH 153/367] Revert RC number and fix CMake build script --- CMakeLists.txt | 1 - Versions.cmake | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ccb2f6d5c..3394bae74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -558,7 +558,6 @@ set (wsjt_FSRCS lib/sync64.f90 lib/sync65.f90 lib/ft4/getcandidates4.f90 - lib/fsk4hf/getcandidates2.f90 lib/ft4/syncft4.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 diff --git a/Versions.cmake b/Versions.cmake index 779d7a887..1ed47ac75 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From 40e710d7f82174acc998ead604dfa6d6b38d214a Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 23 Mar 2019 01:24:10 +0000 Subject: [PATCH 154/367] Bump release candidate number --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 1ed47ac75..779d7a887 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From 303ff7da5f634d431bfbdca9063b66076f930939 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 25 Mar 2019 18:02:50 +0000 Subject: [PATCH 155/367] Improved CMake script for 64-bit builds on MS Windows --- CMakeLists.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3394bae74..99dc533a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,7 +181,11 @@ attach a debugger which will then receive the console output inside its console. set (PROJECT_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") if (NOT PROJECT_ARCHITECTURE) # This is supposed to happen already on Windows - set (PROJECT_ARCHITECTURE "$ENV{PROCESSOR_ARCHITECTURE}") + if (CMAKE_SIZEOF_VOID_P MATCHES 8) + set (PROJECT_ARCHITECTURE "x64") + else () + set (PROJECT_ARCHITECTURE "$ENV{PROCESSOR_ARCHITECTURE}") + endif () endif (NOT PROJECT_ARCHITECTURE) message (STATUS "******************************************************") message (STATUS "Building for for: ${CMAKE_SYSTEM_NAME}-${PROJECT_ARCHITECTURE}") @@ -808,7 +812,7 @@ if (WIN32) endif (NOT AXSERVER) string (REPLACE "\"" "" AXSERVER ${AXSERVER}) file (TO_CMAKE_PATH ${AXSERVER} AXSERVERSRCS) -endif (WIN32) +endif () # @@ -1632,6 +1636,7 @@ if (NOT is_debug_build) install ( DIRECTORY ${QT_PLUGINS_DIR}/platforms + ${QT_PLUGINS_DIR}/styles ${QT_PLUGINS_DIR}/accessible ${QT_PLUGINS_DIR}/audio ${QT_PLUGINS_DIR}/imageformats From 43c38de8846a19aab9fd8e07d4e77353eb3a0a75 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 26 Mar 2019 14:00:32 -0400 Subject: [PATCH 156/367] Minor tweaks for FT4 debugging and possible tuning. --- lib/ft4/ft4_decode.f90 | 8 +++----- lib/ft4/ft4d.f90 | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 63cc6753e..4e4959b37 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -265,7 +265,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & ip=maxloc(s4(:,k+99)) if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 enddo - nsync=is1+is2+is3+is4 !Number of hard sync errors, 0-16 + nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 if(smax .lt. 0.7 .or. nsync .lt. 8) cycle do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols @@ -460,17 +460,15 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & fname=data_dir(1:l1+1)//'all_ft4.txt' open(24,file=trim(fname),status='unknown',position='append') write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & - nharderror,nsync_qual,ipass,niterations,iaptype + nharderror,nsync_qual,ipass,niterations,iaptype,nsync if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & tsig,nint(freq),message,nharderror,nsync_qual,ipass, & niterations,iaptype -1002 format(a17,i4,f5.1,i5,' Rx ',a37,5i5) +1002 format(a17,i4,f5.1,i5,' Rx ',a37,6i4) close(24) linex(ndecodes)=line if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate - exit - endif enddo !Sequence estimation enddo !Candidate list diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index f8e6dab71..13ed8d2cc 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -57,10 +57,10 @@ program ft4d j2=index(infile,'.wav') open(10,file=infile,status='old',access='stream') read(10) ihdr - npts=ihdr(11)/2 + npts=min(ihdr(11)/2,180000) read(10) iwave(1:npts) close(10) - cdatetime=infile(1:13)//'.000' + cdatetime=infile(j2-13:j2)//'000' istep=3456 nsteps=(npts-52800)/istep + 1 From a605ff4050c56402dfe3841b953c3aa04d1dcd0a Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Wed, 27 Mar 2019 20:55:15 -0500 Subject: [PATCH 157/367] For now, limit noise level estimation to [300,2500] Hz. --- lib/ft4/getcandidates4.f90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 9b5200845..a86be94aa 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -48,9 +48,12 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & if(nfa.lt.1) nfa=1 nfb=fb/df if(nfb.gt.nint(5000.0/df)) nfb=nint(5000.0/df) - np=nfb-nfa+1 + n300=300/df + n2500=2500/df +! np=nfb-nfa+1 + np=n2500-n300+1 indx=0 - call indexx(savsm(nfa:nfb),np,indx) + call indexx(savsm(n300:n2500),np,indx) xn=savsm(nfa+indx(nint(0.3*np))) savsm=savsm/xn From 580fce83207f02ce469f2d1c919cd58df713d780 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 09:21:01 -0400 Subject: [PATCH 158/367] Allow oddball file names for input to ft4d. --- lib/ft4/ft4d.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index 13ed8d2cc..7cb1cac01 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -54,14 +54,14 @@ program ft4d do ifile=iarg,nargs call getarg(ifile,infile) - j2=index(infile,'.wav') open(10,file=infile,status='old',access='stream') read(10) ihdr npts=min(ihdr(11)/2,180000) read(10) iwave(1:npts) close(10) - cdatetime=infile(j2-13:j2)//'000' - + cdatetime=infile + j2=index(infile,'.wav') + if(j2.ge.14) cdatetime=infile(j2-13:j2)//'000' istep=3456 nsteps=(npts-52800)/istep + 1 do n=1,nsteps From cfb36395e02819fa2a9db2e1b97815d700fbcd25 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 09:22:29 -0400 Subject: [PATCH 159/367] Add some better usage examples for ft4sim. --- lib/ft4/ft4sim.f90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 0a9a1dcbc..1481840c8 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -25,9 +25,8 @@ program ft4sim nargs=iargc() if(nargs.ne.7) then print*,'Usage: ft4sim "message" f0 DT fdop del nfiles snr' - print*,'Examples: ft4sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 10 -15' - print*,' ft4sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 10 -15' - print*,' ft4sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 1 -10' + print*,'Examples: ft4sim "CQ W9XYZ EN37" 1500 0.0 0.1 1.0 10 -15' + print*,' ft4sim "K1ABC W9XYZ R 539 WI" 1500 0.0 0.1 1.0 10 -15' go to 999 endif call getarg(1,msg37) !Message to be transmitted From e571349c69203c3bbbe26a4b236f0c1889bd1358 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 09:30:26 -0400 Subject: [PATCH 160/367] In FT4 mode, let the Tx# buttons start a transmission. --- widgets/mainwindow.cpp | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b318d2528..06d3f8c40 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4206,7 +4206,11 @@ void MainWindow::on_txb1_clicked() m_ntx=1; m_QSOProgress = REPLYING; ui->txrb1->setChecked(true); - if (m_transmitting) m_restart=true; + if(m_mode=="FT4") { + ft4_tx(1); + } else { + if(m_transmitting) m_restart=true; + } } else { on_txb2_clicked (); @@ -4227,7 +4231,11 @@ void MainWindow::on_txb2_clicked() m_ntx=2; m_QSOProgress = REPORT; ui->txrb2->setChecked(true); - if (m_transmitting) m_restart=true; + if(m_mode=="FT4") { + ft4_tx(2); + } else { + if(m_transmitting) m_restart=true; + } } void MainWindow::on_txb3_clicked() @@ -4235,7 +4243,11 @@ void MainWindow::on_txb3_clicked() m_ntx=3; m_QSOProgress = ROGER_REPORT; ui->txrb3->setChecked(true); - if (m_transmitting) m_restart=true; + if(m_mode=="FT4") { + ft4_tx(3); + } else { + if(m_transmitting) m_restart=true; + } } void MainWindow::on_txb4_clicked() @@ -4243,7 +4255,11 @@ void MainWindow::on_txb4_clicked() m_ntx=4; m_QSOProgress = ROGERS; ui->txrb4->setChecked(true); - if (m_transmitting) m_restart=true; + if(m_mode=="FT4") { + ft4_tx(4); + } else { + if(m_transmitting) m_restart=true; + } } void MainWindow::on_txb4_doubleClicked() @@ -4261,7 +4277,11 @@ void MainWindow::on_txb5_clicked() m_ntx=5; m_QSOProgress = SIGNOFF; ui->txrb5->setChecked(true); - if (m_transmitting) m_restart=true; + if(m_mode=="FT4") { + ft4_tx(5); + } else { + if(m_transmitting) m_restart=true; + } } void MainWindow::on_txb5_doubleClicked() @@ -4275,11 +4295,16 @@ void MainWindow::on_txb6_clicked() m_QSOProgress = CALLING; set_dateTimeQSO(-1); ui->txrb6->setChecked(true); - if (m_transmitting) m_restart=true; + if(m_mode=="FT4") { + ft4_tx(6); + } else { + if(m_transmitting) m_restart=true; + } } void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) { +//Confusing: come here after double-click on left text window, not right window. if(m_mode=="FT4" and m_inQSOwith!="") return; set_dateTimeQSO(-1); // reset our QSO start time m_decodedText2=true; @@ -5149,6 +5174,7 @@ void MainWindow::clearDX () m_rptRcvd.clear (); m_qsoStart.clear (); m_qsoStop.clear (); + m_inQSOwith.clear(); genStdMsgs (QString {}); if (ui->tabWidget->currentIndex() == 1) { ui->genMsg->setText(ui->tx6->text()); From 1da4809e1b87742e1ac013846c157ffc8105afd9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 09:41:38 -0400 Subject: [PATCH 161/367] Do not disable double-clicking when m_inQSOwith is populated. (Correct???) --- widgets/mainwindow.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 06d3f8c40..b542edbe8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4305,7 +4305,6 @@ void MainWindow::on_txb6_clicked() void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) { //Confusing: come here after double-click on left text window, not right window. - if(m_mode=="FT4" and m_inQSOwith!="") return; set_dateTimeQSO(-1); // reset our QSO start time m_decodedText2=true; doubleClickOnCall(modifiers); @@ -4314,7 +4313,6 @@ void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers) { - if(m_mode=="FT4" and m_inQSOwith!="") return; QTextCursor cursor; if(m_mode=="ISCAT") { MessageBox::information_message (this, From e4ebddcf133a816316c2e9b51ce74a24ee186154 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 10:41:56 -0400 Subject: [PATCH 162/367] When Tx1 entry is disabled, Tx1 button should also be disabled. --- widgets/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b542edbe8..a741d901e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3892,10 +3892,12 @@ void MainWindow::guiUpdate() SpecOp::RTTY==m_config.special_op_id()) ) { //We're in a contest-like mode other than EU_VHF: start QSO with Tx2. ui->tx1->setEnabled(false); + ui->txb1->setEnabled(false); } if(!ui->tx1->isEnabled() and SpecOp::EU_VHF==m_config.special_op_id()) { //We're in EU_VHF mode: start QSO with Tx1. ui->tx1->setEnabled(true); + ui->txb1->setEnabled(true); } } From 23c54540e7fd3fff3ae77d750025a011792c9b88 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 28 Mar 2019 10:59:20 -0500 Subject: [PATCH 163/367] Increase maximum wav file length to 20s. --- lib/ft4/ft4d.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index f8e6dab71..c8dae7bda 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -11,7 +11,7 @@ program ft4d character*4 cqstr real*8 fMHz integer ihdr(11) - integer*2 iwave(180000) !15*12000 + integer*2 iwave(240000) !20*12000 fs=12000.0/NDOWN !Sample rate dt=1/fs !Sample interval after downsample (s) From fe8aa87401ed4711375783648bab681cef925c2c Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 28 Mar 2019 11:13:26 -0500 Subject: [PATCH 164/367] Add some sanity checks to getcandidates4.f90 --- lib/ft4/getcandidates4.f90 | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index a86be94aa..df5e240e6 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -27,7 +27,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! Compute symbol spectra, stepping by NSTEP steps. savg=0. tstep=NSTEP/12000.0 - df=12000.0/NFFT1 !5.86 Hz + df=12000.0/NFFT1 fac=1.0/300.0 do j=1,NHSYM ia=(j-1)*NSTEP + 1 @@ -55,17 +55,28 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & indx=0 call indexx(savsm(n300:n2500),np,indx) xn=savsm(nfa+indx(nint(0.3*np))) - savsm=savsm/xn - ncand=0 + if(xn.le.1.e-8) return + savsm=savsm/xn +! call ft4_baseline(savg,nfa,nfb,sbase) +! savsm=savsm/sbase + f_offset = -1.5*12000/512 do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. savsm(i).ge.syncmin) then - del=0.5*(savsm(i-1)-savsm(i+1))/(savsm(i-1)-2*savsm(i)+savsm(i+1)) + den=savsm(i-1)-2*savsm(i)+savsm(i+1) + if(den.ne.0.0) then + del=0.5*(savsm(i-1)-savsm(i+1))/den + else + del=0.0 + endif fpeak=(i+del)*df+f_offset speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del ncand=ncand+1 - if(ncand.gt.maxcand) exit + if(ncand.gt.maxcand) then + ncand=maxcand + exit + endif candidate(1,ncand)=fpeak candidate(2,ncand)=-99.99 candidate(3,ncand)=speak From 54cd97f918bcd8faf78d3809c46a474a904967bd Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 13:07:37 -0400 Subject: [PATCH 165/367] Protect against bad inferred candidate frequencies f0 in FT4 mode. --- lib/ft4/ft4_decode.f90 | 1 + lib/ft4/getcandidates4.f90 | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index 4e4959b37..bd6d9a5d0 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -182,6 +182,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & ndecodes=0 do icand=1,ncand f0=candidate(1,icand) + if(f0.le.max(fa,10.0) .or. f0.ge.min(fb,4990.0)) cycle snr=candidate(3,icand)-1.0 if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle call clockit('ft4_down',0) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index a86be94aa..9ce4d8e70 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -61,14 +61,15 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & f_offset = -1.5*12000/512 do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. savsm(i).ge.syncmin) then - del=0.5*(savsm(i-1)-savsm(i+1))/(savsm(i-1)-2*savsm(i)+savsm(i+1)) +! del=0.5*(savsm(i-1)-savsm(i+1))/(savsm(i-1)-2*savsm(i)+savsm(i+1)) + del=0. fpeak=(i+del)*df+f_offset speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del ncand=ncand+1 - if(ncand.gt.maxcand) exit candidate(1,ncand)=fpeak candidate(2,ncand)=-99.99 candidate(3,ncand)=speak + if(ncand.eq.maxcand) exit endif enddo From e3d4a1c3a66db9d5c15b65e4a81196ae11044671 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 28 Mar 2019 13:08:43 -0400 Subject: [PATCH 166/367] FT4: double-click on a yellow Tx mesage causes re-sending that message. --- widgets/mainwindow.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a741d901e..d194c99a1 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4373,6 +4373,21 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ui->TxFreqSpinBox->setValue(frequency); //Set Tx freq } } + if(m_mode=="FT4") { + int i0=message.string().indexOf(" + "); + QString t=message.string().trimmed().mid(i0+4,-1); + int n=0; + if(t==ui->tx1->text()) n=1; + if(t==ui->tx2->text()) n=2; + if(t==ui->tx3->text()) n=3; + if(t==ui->tx4->text()) n=4; + if(t==ui->tx5->currentText()) n=5; + if(t==ui->tx6->text()) n=6; + if(n>0) { + if(ctrl) ui->TxFreqSpinBox->setValue(frequency); + ft4_tx(n); + } + } return; } From 5e1637a5db2dd9bf6792d43f05594b896b918446 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 28 Mar 2019 14:01:30 -0500 Subject: [PATCH 167/367] Fix a bug and remove a redundant sanity check. --- lib/ft4/ft4_decode.f90 | 2 +- lib/ft4/getcandidates4.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index bd6d9a5d0..cfbfc6b39 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -184,7 +184,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & f0=candidate(1,icand) if(f0.le.max(fa,10.0) .or. f0.ge.min(fb,4990.0)) cycle snr=candidate(3,icand)-1.0 - if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle + call clockit('ft4_down',0) call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol call clockit('ft4_down',1) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 23da3d394..bf62abfa7 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -54,7 +54,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & np=n2500-n300+1 indx=0 call indexx(savsm(n300:n2500),np,indx) - xn=savsm(nfa+indx(nint(0.3*np))) + xn=savsm(n300+indx(nint(0.3*np))) ncand=0 if(xn.le.1.e-8) return savsm=savsm/xn From 73efc09392c749cbae0ab1526a5df99e5af83f3b Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 28 Mar 2019 14:34:03 -0500 Subject: [PATCH 168/367] Speed up sync. --- lib/ft4/ft4_decode.f90 | 24 ++++++++++++---------- lib/ft4/sync4d.f90 | 46 +++++++++++++----------------------------- 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index cfbfc6b39..bd28b8899 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -19,7 +19,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & complex cd2(0:NMAX/NDOWN-1) !Complex waveform complex cb(0:NMAX/NDOWN-1) complex cd(0:NN*NSS-1) !Complex waveform - complex ctwk(4*NSS),ctwk2(4*NSS) + complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) complex csymb(NSS) complex cs(0:3,NN) real s4(0:3,NN) @@ -63,7 +63,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ save fs,dt,tt,txt,twopi,h,one,first,linex,apbits,nappasses,naptypes, & - mycall0,hiscall0,msg0,cqstr0 + mycall0,hiscall0,msg0,cqstr0,ctwk2 call clockit('ft4_deco',0) hhmmss=cdatetime0(8:13) @@ -82,6 +82,15 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & enddo enddo + do idf=-16,16 + a=0. + a(1)=real(idf) + ctwk=1. + call clockit('twkfreq1',0) + call twkfreq1(ctwk,2*NSS,fs/2.0,a,ctwk2(:,idf)) + call clockit('twkfreq1',1) + enddo + mrrr=2*mod(mrrr+rvec(59:77),2)-1 m73=2*mod(m73+rvec(59:77),2)-1 mrr73=2*mod(mrr73+rvec(59:77),2)-1 @@ -182,9 +191,8 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & ndecodes=0 do icand=1,ncand f0=candidate(1,icand) - if(f0.le.max(fa,10.0) .or. f0.ge.min(fb,4990.0)) cycle snr=candidate(3,icand)-1.0 - + if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle call clockit('ft4_down',0) call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol call clockit('ft4_down',1) @@ -212,16 +220,10 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & smax=-99. idfbest=0 do idf=idfmin,idfmax,idfstp - a=0. - a(1)=real(idf) - ctwk=1. - call clockit('twkfreq1',0) - call twkfreq1(ctwk,4*NSS,fs,a,ctwk2) - call clockit('twkfreq1',1) call clockit('sync4d ',0) do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2,1,sync,sync2) !Find sync power + call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power if(sync.gt.smax) then smax=sync ibest=istart diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index 4d8ba2df2..bda7ed4a2 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -1,13 +1,13 @@ -subroutine sync4d(cd0,i0,ctwk,itwk,sync,sync2) +subroutine sync4d(cd0,i0,ctwk,itwk,sync) ! Compute sync power for a complex, downsampled FT4 signal. include 'ft4_params.f90' parameter(NP=NMAX/NDOWN,NSS=NSPS/NDOWN) complex cd0(0:NP-1) - complex csynca(4*NSS),csyncb(4*NSS),csyncc(4*NSS),csyncd(4*NSS) - complex csync2(4*NSS) - complex ctwk(4*NSS) + complex csynca(2*NSS),csyncb(2*NSS),csyncc(2*NSS),csyncd(2*NSS) + complex csync2(2*NSS) + complex ctwk(2*NSS) complex z1,z2,z3,z4 complex zz1,zz2,zz3,zz4 logical first @@ -29,11 +29,11 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync,sync2) phic=0.0 phid=0.0 do i=0,3 - dphia=twopi*icos4a(i)/real(NSS) - dphib=twopi*icos4b(i)/real(NSS) - dphic=twopi*icos4c(i)/real(NSS) - dphid=twopi*icos4d(i)/real(NSS) - do j=1,NSS + dphia=2*twopi*icos4a(i)/real(NSS) + dphib=2*twopi*icos4b(i)/real(NSS) + dphic=2*twopi*icos4c(i)/real(NSS) + dphid=2*twopi*icos4d(i)/real(NSS) + do j=1,NSS/2 csynca(k)=cmplx(cos(phia),sin(phia)) csyncb(k)=cmplx(cos(phib),sin(phib)) csyncc(k)=cmplx(cos(phic),sin(phic)) @@ -46,7 +46,7 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync,sync2) enddo enddo first=.false. - fac=1.0/(4.0*NSS) + fac=1.0/(2.0*NSS) endif i1=i0 !four Costas arrays @@ -60,36 +60,18 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync,sync2) z4=0. if(itwk.eq.1) csync2=ctwk*csynca !Tweak the frequency - if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+4*NSS-1)*conjg(csync2)) + if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+4*NSS-1:2)*conjg(csync2)) if(itwk.eq.1) csync2=ctwk*csyncb !Tweak the frequency - if(i2.ge.0 .and. i2+4*NSS-1.le.NP-1) z2=sum(cd0(i2:i2+4*NSS-1)*conjg(csync2)) + if(i2.ge.0 .and. i2+4*NSS-1.le.NP-1) z2=sum(cd0(i2:i2+4*NSS-1:2)*conjg(csync2)) if(itwk.eq.1) csync2=ctwk*csyncc !Tweak the frequency - if(i3.ge.0 .and. i3+4*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+4*NSS-1)*conjg(csync2)) + if(i3.ge.0 .and. i3+4*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+4*NSS-1:2)*conjg(csync2)) if(itwk.eq.1) csync2=ctwk*csyncd !Tweak the frequency - if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) z4=sum(cd0(i4:i4+4*NSS-1)*conjg(csync2)) + if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) z4=sum(cd0(i4:i4+4*NSS-1:2)*conjg(csync2)) sync = p(z1) + p(z2) + p(z3) + p(z4) -sync2=0.0 -!do i=1,4 -! i1=i0+(i-1)*33*NSS -! if(i.eq.1) csync2=ctwk*csynca -! if(i.eq.2) csync2=ctwk*csyncb -! if(i.eq.3) csync2=ctwk*csyncc -! if(i.eq.4) csync2=ctwk*csyncd -! z1=sum(cd0(i1 :i1+ NSS-1)*conjg(csync2( 1: NSS))) -! z2=sum(cd0(i1+ NSS:i1+2*NSS-1)*conjg(csync2( NSS+1:2*NSS))) -! z3=sum(cd0(i1+2*NSS:i1+3*NSS-1)*conjg(csync2(2*NSS+1:3*NSS))) -! z4=sum(cd0(i1+3*NSS:i1+4*NSS-1)*conjg(csync2(3*NSS+1:4*NSS))) -! sync2=sync2 + abs(z1)**2+abs(z2)**2+abs(z3)**2+abs(z4)**2+& -! 2*abs(z1*conjg(z2)+z2*conjg(z3)+z3*conjg(z4)) + & -! 2*abs(z1*conjg(z3)+z2*conjg(z4)) + & -! 2*abs(z1*conjg(z4)) -!enddo -!sync2=sync2*(fac**2) - return end subroutine sync4d From 9e75b5c2b5d9827e14ef0d92470e56455edcec7f Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 29 Mar 2019 02:54:30 +0000 Subject: [PATCH 169/367] Log buttons --- widgets/logqso.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- widgets/logqso.h | 3 +++ widgets/logqso.ui | 44 ++------------------------------------------ 3 files changed, 48 insertions(+), 44 deletions(-) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index acbb340bc..eae82aacc 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -1,9 +1,12 @@ #include "logqso.h" +#include +#include #include #include #include #include +#include #include "logbook/logbook.h" #include "MessageBox.hpp" @@ -15,17 +18,40 @@ #include "ui_logqso.h" #include "moc_logqso.cpp" +namespace +{ + using dist_type = std::uniform_int_distribution; + std::random_device rd; + std::mt19937 twister (rd ()); + dist_type int_distribution; +} + LogQSO::LogQSO(QString const& programTitle, QSettings * settings , Configuration const * config, QWidget *parent) : QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint} , ui(new Ui::LogQSO) + , ok_ {new QPushButton {"OK", this}} + , cancel_ {new QPushButton {"Cancel", this}} , m_settings (settings) , m_config {config} { ui->setupUi(this); setWindowTitle(programTitle + " - Log QSO"); - loadSettings (); ui->grid->setValidator (new MaidenheadLocatorValidator {this}); + + ok_->setAutoDefault (false); + ok_->setFocusPolicy (Qt::ClickFocus); + cancel_->setAutoDefault (false); + ui->button_layout->addStretch (); + ui->button_layout->addWidget (ok_); + ui->button_layout->addStretch (); + ui->button_layout->addWidget (cancel_); + ui->button_layout->addStretch (); + + loadSettings (); + + connect (ok_, &QAbstractButton::clicked, [this] (bool) {accept ();}); + connect (cancel_, &QAbstractButton::clicked, [this] (bool) {reject ();}); } LogQSO::~LogQSO () @@ -113,7 +139,22 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString } else { - show(); + // randomize accessible name of buttons + ok_->setAccessibleName (QString::number (int_distribution (twister))); + cancel_->setAccessibleName (QString::number (int_distribution (twister))); + // random sibling order of buttons + if (int_distribution (twister, dist_type::param_type {0, 1})) ok_->stackUnder (cancel_); else cancel_->stackUnder (ok_); + // random shuffle of layout items + for (int item = ui->button_layout->count () - 1; item > 0; --item) + { + auto other_item = int_distribution (twister, dist_type::param_type {0, item}); + if (item != other_item) + { + ui->button_layout->insertItem (other_item, ui->button_layout->takeAt (item)); + ui->button_layout->insertItem (item, ui->button_layout->takeAt (other_item + 1)); + } + } + show (); } } diff --git a/widgets/logqso.h b/widgets/logqso.h index 82a75b7bd..5cbb2044d 100644 --- a/widgets/logqso.h +++ b/widgets/logqso.h @@ -18,6 +18,7 @@ class QSettings; class Configuration; class QByteArray; class CabrilloLog; +class QPushButton; class LogQSO : public QDialog { @@ -52,6 +53,8 @@ private: void storeSettings () const; QScopedPointer ui; + QPushButton * ok_; + QPushButton * cancel_; QSettings * m_settings; Configuration const * m_config; QString m_txPower; diff --git a/widgets/logqso.ui b/widgets/logqso.ui index a03a3028a..7d249677d 100644 --- a/widgets/logqso.ui +++ b/widgets/logqso.ui @@ -461,14 +461,7 @@ - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + @@ -488,38 +481,5 @@ cbComments - - - buttonBox - accepted() - LogQSO - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - LogQSO - reject() - - - 316 - 260 - - - 286 - 274 - - - - + From 68308e23aa69a621fa2a0a4065e1c767ab9e8fad Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 29 Mar 2019 15:30:50 -0500 Subject: [PATCH 170/367] FT8: Tx waveform will now change (after a short delay) if Tx message is changed after a transmission has started. --- widgets/mainwindow.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d194c99a1..eef7695d2 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3700,6 +3700,15 @@ void MainWindow::guiUpdate() char ft8msgbits[77]; genft8_(message, &i3, &n3, msgsent, const_cast (ft8msgbits), const_cast (itone), 37, 37); + int nsym=79; + int nsps=4*1920; + float fsample=48000.0; + float f0=ui->TxFreqSpinBox->value() - m_XIT; + int icmplx=0; + int nwave=nsym*nsps; + gen_ft8wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, + foxcom_.wave,&icmplx,&nwave); + if(SpecOp::FOX == m_config.special_op_id()) { //Fox must generate the full Tx waveform, not just an itone[] array. QString fm = QString::fromStdString(message).trimmed(); @@ -6936,15 +6945,6 @@ void MainWindow::transmit (double snr) if (m_modeTx == "FT8") { // toneSpacing=12000.0/1920.0; toneSpacing=-3; - int nsym=79; - int nsps=4*1920; - float fsample=48000.0; - float f0=ui->TxFreqSpinBox->value() - m_XIT; - int icmplx=0; - int nwave=nsym*nsps; - gen_ft8wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, - foxcom_.wave,&icmplx,&nwave); - if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0; if(m_config.x4ToneSpacing()) toneSpacing=4*12000.0/1920.0; if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1; From 68f82c95de615c861c53dbe6b7b3bd5c031a1b68 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 30 Mar 2019 15:55:05 -0500 Subject: [PATCH 171/367] FT4: Only do the big FFT once for each candidate. Duh. --- lib/ft4/ft4_decode.f90 | 8 +++++--- lib/ft4/ft4_downsample.f90 | 16 +++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4_decode.f90 index bd28b8899..83287e1e9 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4_decode.f90 @@ -46,7 +46,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & logical nohiscall,unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits - logical first + logical first, dobigfft data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ @@ -189,12 +189,14 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & call clockit('getcand4',1) ndecodes=0 + dobigfft=.true. do icand=1,ncand f0=candidate(1,icand) snr=candidate(3,icand)-1.0 if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle call clockit('ft4_down',0) - call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol + call ft4_downsample(iwave,dobigfft,f0,cd2) !Downsample from 512 to 32 Sa/Symbol + if(dobigfft) dobigfft=.false. call clockit('ft4_down',1) sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) @@ -238,7 +240,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle call clockit('ft4down ',0) - call ft4_downsample(iwave,f0,cb) !Final downsample with corrected f0 + call ft4_downsample(iwave,dobigfft,f0,cb) !Final downsample with corrected f0 call clockit('ft4down ',1) sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index ca5991346..8fb7c5d1d 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -1,4 +1,4 @@ -subroutine ft4_downsample(iwave,f0,c) +subroutine ft4_downsample(iwave,newdata,f0,c) ! Input: i*2 data in iwave() at sample rate 12000 Hz ! Output: Complex data in c(), sampled at 1200 Hz @@ -11,9 +11,9 @@ subroutine ft4_downsample(iwave,f0,c) complex cx(0:NMAX/2) real x(NMAX), window(0:NFFT2-1) equivalence (x,cx) - logical first + logical first, newdata data first/.true./ - save first,window + save first,window,x df=12000.0/NMAX baud=12000.0/NSPS @@ -32,14 +32,16 @@ subroutine ft4_downsample(iwave,f0,c) first=.false. endif - x=iwave - call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + if(newdata) then + x=iwave + call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain + endif i0=nint(f0/df) c1=0. c1(0)=cx(i0) do i=1,NFFT2/2 - if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) - if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) + if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) + if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) enddo c1=c1*window/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain From c7ec9b192785032fd06935cf74cb457c712351d6 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 30 Mar 2019 16:40:24 -0500 Subject: [PATCH 172/367] Fix indenting. No functional changes. --- lib/ft4/ft4_downsample.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index 8fb7c5d1d..ff0595629 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -40,8 +40,8 @@ subroutine ft4_downsample(iwave,newdata,f0,c) c1=0. c1(0)=cx(i0) do i=1,NFFT2/2 - if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) - if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) + if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) + if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) enddo c1=c1*window/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain From 699793704816d9aeb7fa7c2dbd3523cdae8f188c Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 1 Apr 2019 11:01:39 +0100 Subject: [PATCH 173/367] UDP message client accepts any sender id on incoming datagrams This is a defect repair as it was intended that the message id is the sender identification but the erroneous implementation enforced it to be the receiver identification as sent with previous outgoing messages. --- MessageClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MessageClient.cpp b/MessageClient.cpp index 873ba1fd4..5bf23294b 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -152,7 +152,7 @@ void MessageClient::impl::parse_message (QByteArray const& msg) // message format is described in NetworkMessage.hpp // NetworkMessage::Reader in {msg}; - if (OK == check_status (in) && id_ == in.id ()) // OK and for us + if (OK == check_status (in)) { if (schema_ < in.schema ()) // one time record of server's // negotiated schema From 90afae422b070f28be285d1e5d6008ec24e75d96 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 1 Apr 2019 11:01:39 +0100 Subject: [PATCH 174/367] UDP message client accepts any sender id on incoming datagrams This is a defect repair as it was intended that the message id is the sender identification but the erroneous implementation enforced it to be the receiver identification as sent with previous outgoing messages. --- MessageClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MessageClient.cpp b/MessageClient.cpp index 873ba1fd4..5bf23294b 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -152,7 +152,7 @@ void MessageClient::impl::parse_message (QByteArray const& msg) // message format is described in NetworkMessage.hpp // NetworkMessage::Reader in {msg}; - if (OK == check_status (in) && id_ == in.id ()) // OK and for us + if (OK == check_status (in)) { if (schema_ < in.schema ()) // one time record of server's // negotiated schema From e0d4c94cc1856ee3b0c845efe81488636c6e6ad2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 1 Apr 2019 14:23:10 -0400 Subject: [PATCH 175/367] Some very basic functionality for time-synchronized FT4. --- CMakeLists.txt | 3 +- lib/decoder.f90 | 59 +++++++++++++- lib/ft4/{ft4_decode.f90 => ft4b.f90} | 4 +- lib/ft4/ft4d.f90 | 2 +- widgets/mainwindow.cpp | 110 +++++++++++++-------------- widgets/mainwindow.h | 4 +- 6 files changed, 118 insertions(+), 64 deletions(-) rename lib/ft4/{ft4_decode.f90 => ft4b.f90} (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99dc533a1..5d39c437d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -360,6 +360,7 @@ set (wsjt_FSRCS lib/jt65_decode.f90 lib/jt65_mod.f90 lib/ft8_decode.f90 + lib/ft4_decode.f90 lib/jt9_decode.f90 lib/options.f90 lib/packjt.f90 @@ -517,9 +518,9 @@ set (wsjt_FSRCS lib/msk144sim.f90 lib/mskrtd.f90 lib/nuttal_window.f90 + lib/ft4/ft4b.f90 lib/ft4/ft4sim.f90 lib/ft4/ft4sim_mult.f90 - lib/ft4/ft4_decode.f90 lib/ft4/ft4_downsample.f90 lib/77bit/my_hash.f90 lib/wsprd/osdwspr.f90 diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 218a6cbf7..ded53e3b8 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -7,6 +7,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) use jt65_decode use jt9_decode use ft8_decode + use ft4_decode include 'jt9com.f90' include 'timer_common.inc' @@ -27,6 +28,10 @@ subroutine multimode_decoder(ss,id2,params,nfsample) integer :: decoded end type counting_ft8_decoder + type, extends(ft4_decoder) :: counting_ft4_decoder + integer :: decoded + end type counting_ft4_decoder + real ss(184,NSMAX) logical baddata,newdat65,newdat9,single_decode,bVHF,bad0,newdat,ex integer*2 id2(NTMAX*12000) @@ -40,6 +45,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) type(counting_jt65_decoder) :: my_jt65 type(counting_jt9_decoder) :: my_jt9 type(counting_ft8_decoder) :: my_ft8 + type(counting_ft4_decoder) :: my_ft4 !cast C character arrays to Fortran character strings datetime=transfer(params%datetime, datetime) @@ -53,6 +59,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) my_jt65%decoded = 0 my_jt9%decoded = 0 my_ft8%decoded = 0 + my_ft4%decoded = 0 single_decode=iand(params%nexp_decode,32).ne.0 bVHF=iand(params%nexp_decode,64).ne.0 @@ -142,6 +149,15 @@ subroutine multimode_decoder(ss,id2,params,nfsample) go to 800 endif + if(params%nmode.eq.-4) then + call timer('decft4 ',0) + call my_ft4%decode(ft4_decoded,id2,params%nQSOProgress,params%nfqso, & + params%nutc,params%nfa,params%nfb,params%ndepth,ncontest, & + mycall,hiscall) + call timer('decft4 ',1) + go to 800 + endif + rms=sqrt(dot_product(float(id2(300000:310000)), & float(id2(300000:310000)))/10000.0) if(rms.lt.2.0) go to 800 @@ -258,7 +274,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) !$omp end parallel sections ! JT65 is not yet producing info for nsynced, ndecoded. -800 ndecoded = my_jt4%decoded + my_jt65%decoded + my_jt9%decoded + my_ft8%decoded +800 ndecoded = my_jt4%decoded + my_jt65%decoded + my_jt9%decoded + & + my_ft8%decoded + my_ft4%decoded write(*,1010) nsynced,ndecoded 1010 format('',2i4) call flush(6) @@ -561,4 +578,44 @@ contains return end subroutine ft8_decoded + subroutine ft4_decoded (this,sync,snr,dt,freq,decoded,nap,qual) + use ft4_decode + implicit none + + class(ft4_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + character c1*12,c2*12,g2*4,w*4 + integer i0,i1,i2,i3,i4,i5,n30,nwrap + integer, intent(in) :: nap + real, intent(in) :: qual + character*2 annot + character*37 decoded0 + + decoded0=decoded + + annot=' ' + if(ncontest.eq.0 .and. nap.ne.0) then + write(annot,'(a1,i1)') 'a',nap + if(qual.lt.0.17) decoded0(37:37)='?' + endif + + write(*,1001) params%nutc,snr,dt,nint(freq),decoded0,annot +1001 format(i6.6,i4,f5.1,i5,' ~ ',1x,a37,1x,a2) + write(13,1002) params%nutc,nint(sync),snr,dt,freq,0,decoded0 +1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FT8') + + call flush(6) + call flush(13) + + select type(this) + type is (counting_ft4_decoder) + this%decoded = this%decoded + 1 + end select + + return + end subroutine ft4_decoded end subroutine multimode_decoder diff --git a/lib/ft4/ft4_decode.f90 b/lib/ft4/ft4b.f90 similarity index 99% rename from lib/ft4/ft4_decode.f90 rename to lib/ft4/ft4b.f90 index 83287e1e9..d425277ef 100644 --- a/lib/ft4/ft4_decode.f90 +++ b/lib/ft4/ft4b.f90 @@ -1,4 +1,4 @@ -subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & +subroutine ft4b(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & iwave,ndecodes,mycall,hiscall,cqstr,line,data_dir) use packjt77 @@ -486,4 +486,4 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & line=linex(idecode) return -end subroutine ft4_decode + end subroutine ft4b diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 index fa7c8045a..a63e3e0a6 100644 --- a/lib/ft4/ft4d.f90 +++ b/lib/ft4/ft4d.f90 @@ -67,7 +67,7 @@ program ft4d do n=1,nsteps i0=(n-1)*istep + 1 tbuf=(i0-1)/12000.0 - call ft4_decode(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & + call ft4b(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & nfqso,iwave(i0),ndecodes,mycall,hiscall,cqstr,line,data_dir) do idecode=1,ndecodes call get_ft4msg(idecode,line) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index eef7695d2..c237806bb 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -169,11 +169,6 @@ extern "C" { void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); - void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nQSOProgress, - int* nContest, int* nfqso, short int id[], int* ndecodes, char* mycall, - char* hiscall, char* cqstr, char* line, char* ddir, int len1, - int len2, int len3, int len4, int len5, int len6); - void get_ft4msg_(int* idecode, char* line, int len); } @@ -749,11 +744,11 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_guiTimer.start(100); //### Don't change the 100 ms! ### - FT4_TxTimer.setSingleShot(true); - connect(&FT4_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); +// FT4_TxTimer.setSingleShot(true); +// connect(&FT4_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); - FT4_WriteTxTimer.setSingleShot(true); - connect(&FT4_WriteTxTimer, &QTimer::timeout, this, &MainWindow::FT4_writeTx); +// FT4_WriteTxTimer.setSingleShot(true); +// connect(&FT4_WriteTxTimer, &QTimer::timeout, this, &MainWindow::FT4_writeTx); ptt0Timer.setSingleShot(true); connect(&ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2); @@ -986,10 +981,12 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, splashTimer.setSingleShot (true); splashTimer.start (20 * 1000); +/* if(QCoreApplication::applicationVersion().contains("-devel") or QCoreApplication::applicationVersion().contains("-rc")) { QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); } +*/ if(!ui->cbMenus->isChecked()) { ui->cbMenus->setChecked(true); @@ -1333,7 +1330,9 @@ void MainWindow::fixStop() m_hsymStop=((int(m_TRperiod/0.288))/8)*8; } else if (m_mode=="FT8") { m_hsymStop=50; - } + } else if (m_mode=="FT4") { + m_hsymStop=17; +} } //-------------------------------------------------------------- dataSink() @@ -1381,8 +1380,9 @@ void MainWindow::dataSink(qint64 frames) if(m_monitoring || m_diskData) { m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); } - if(m_mode=="FT4") ft4_rx(k); - if(m_mode=="MSK144" or m_mode=="FT4") return; +// if(m_mode=="FT4") ft4_rx(k); +// if(m_mode=="MSK144" or m_mode=="FT4") return; + if(m_mode=="MSK144") return; fixStop(); if (m_mode == "FreqCal" @@ -1462,7 +1462,7 @@ void MainWindow::dataSink(qint64 frames) if(!m_diskData) { //Always save; may delete later - if(m_mode=="FT8") { + if(m_mode=="FT8" or m_mode=="FT4") { int n=now.time().second() % m_TRperiod; if(n<(m_TRperiod/2)) n=n+m_TRperiod; auto const& period_start=now.addSecs(-n); @@ -1914,14 +1914,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) break; case Qt::Key_F1: if(bAltF1F5) { - if(m_mode=="FT4") { - if(e->modifiers() & Qt::ControlModifier) { - ft4_tx(1); - } else { - ft4_tx(6); - } - return; - } auto_tx_mode(true); on_txb6_clicked(); return; @@ -1931,10 +1923,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F2: if(bAltF1F5) { - if(m_mode=="FT4") { - ft4_tx(2); - return; - } auto_tx_mode(true); on_txb2_clicked(); return; @@ -1944,10 +1932,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F3: if(bAltF1F5) { - if(m_mode=="FT4") { - ft4_tx(3); - return; - } auto_tx_mode(true); on_txb3_clicked(); return; @@ -1957,10 +1941,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F4: if(bAltF1F5) { - if(m_mode=="FT4") { - ft4_tx(4); - return; - } auto_tx_mode(true); on_txb4_clicked(); return; @@ -1971,10 +1951,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } case Qt::Key_F5: if(bAltF1F5) { - if(m_mode=="FT4") { - ft4_tx(5); - return; - } auto_tx_mode(true); on_txb5_clicked(); return; @@ -2842,7 +2818,7 @@ void MainWindow::decode() //decode() m_msec0=QDateTime::currentMSecsSinceEpoch(); if(!m_dataAvailable or m_TRperiod==0) return; ui->DecodeButton->setChecked (true); - if(!dec_data.params.nagain && m_diskData && !m_bFastMode && m_mode!="FT8") { + if(!dec_data.params.nagain && m_diskData && !m_bFastMode && m_mode!="FT8" && m_mode!="FT4") { dec_data.params.nutc=dec_data.params.nutc/100; } if(dec_data.params.nagain==0 && dec_data.params.newdat==1 && (!m_diskData)) { @@ -2852,7 +2828,7 @@ void MainWindow::decode() //decode() imin=imin % 60; if(m_TRperiod>=60) imin=imin - (imin % (m_TRperiod/60)); dec_data.params.nutc=100*ihr + imin; - if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9 or m_mode=="FT8") { + if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9 or m_mode=="FT8" or m_mode=="FT4") { QDateTime t=QDateTime::currentDateTimeUtc().addSecs(2-m_TRperiod); ihr=t.toString("hh").toInt(); imin=t.toString("mm").toInt(); @@ -2902,7 +2878,8 @@ void MainWindow::decode() //decode() if(m_modeTx=="JT65") dec_data.params.ntxmode=65; dec_data.params.nmode=9; if(m_mode=="JT65") dec_data.params.nmode=65; - if(m_mode=="JT65") dec_data.params.ljt65apon = ui->actionEnable_AP_JT65->isVisible () && ui->actionEnable_AP_JT65->isChecked (); + if(m_mode=="JT65") dec_data.params.ljt65apon = ui->actionEnable_AP_JT65->isVisible () && + ui->actionEnable_AP_JT65->isChecked (); if(m_mode=="QRA64") dec_data.params.nmode=164; if(m_mode=="QRA64") dec_data.params.ntxmode=164; if(m_mode=="JT9+JT65") dec_data.params.nmode=9+65; // = 74 @@ -2911,8 +2888,10 @@ void MainWindow::decode() //decode() dec_data.params.ntxmode=4; } if(m_mode=="FT8") dec_data.params.nmode=8; - if(m_mode=="FT8") dec_data.params.lft8apon = ui->actionEnable_AP_FT8->isVisible () && ui->actionEnable_AP_FT8->isChecked (); + if(m_mode=="FT8") dec_data.params.lft8apon = ui->actionEnable_AP_FT8->isVisible () && + ui->actionEnable_AP_FT8->isChecked (); if(m_mode=="FT8") dec_data.params.napwid=50; + if(m_mode=="FT4") dec_data.params.nmode=-4; dec_data.params.ntrperiod=m_TRperiod; dec_data.params.nsubmode=m_nSubMode; if(m_mode=="QRA64") dec_data.params.nsubmode=100 + m_nSubMode; @@ -3417,6 +3396,7 @@ void MainWindow::guiUpdate() if(m_TRperiod==0) m_TRperiod=60; txDuration=0.0; + if(m_modeTx=="FT4") txDuration=0.25 + 103*512/12000.0; // FT4 if(m_modeTx=="FT8") txDuration=1.0 + 79*1920/12000.0; // FT8 if(m_modeTx=="JT4") txDuration=1.0 + 207.0*2520/11025.0; // JT4 if(m_modeTx=="JT9") txDuration=1.0 + 85.0*m_nsps/12000.0; // JT9 @@ -3588,7 +3568,8 @@ void MainWindow::guiUpdate() Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT m_tx_when_ready = true; } - if(!m_bTxTime and !m_tune and m_mode!="FT4") m_btxok=false; //Time to stop transmitting +// if(!m_bTxTime and !m_tune and m_mode!="FT4") m_btxok=false; //Time to stop transmitting + if(!m_bTxTime and !m_tune) m_btxok=false; //Time to stop transmitting } if(m_mode.startsWith ("WSPR") and @@ -3677,7 +3658,7 @@ void MainWindow::guiUpdate() 22, 22); // if(m_modeTx=="WSPR-LF") genwspr_fsk8_(message, msgsent, const_cast (itone), // 22, 22); - if(m_modeTx=="MSK144" or m_modeTx=="FT8") { + if(m_modeTx=="MSK144" or m_modeTx=="FT8" or m_modeTx=="FT4") { char MyCall[6]; char MyGrid[6]; strncpy(MyCall, (m_config.my_callsign()+" ").toLatin1(),6); @@ -3722,6 +3703,18 @@ void MainWindow::guiUpdate() } } } + if(m_modeTx=="FT4") { + qDebug () << "AA FT4 Tx"; + int ichk=0; + genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); + int nsym=103; + int nsps=4*512; + float fsample=48000.0; + float f0=ui->TxFreqSpinBox->value() - m_XIT; + int nwave=(nsym+2)*nsps; + gen_ft4wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,&nwave); + } + if(SpecOp::EU_VHF==m_config.special_op_id()) { if(m_ntx==2) m_xSent=ui->tx2->text().right(13); if(m_ntx==3) m_xSent=ui->tx3->text().right(13); @@ -3739,7 +3732,7 @@ void MainWindow::guiUpdate() } } - if(m_mode!="FT4") m_currentMessage = QString::fromLatin1(msgsent); + m_currentMessage = QString::fromLatin1(msgsent); m_bCallingCQ = CALLING == m_QSOProgress || m_currentMessage.contains (QRegularExpression {"^(CQ|QRZ) "}); if(m_mode=="FT8" or m_mode=="FT4") { @@ -3784,7 +3777,7 @@ void MainWindow::guiUpdate() if((m_config.prompt_to_log() or m_config.autoLog()) && !m_tune) logQSOTimer.start(0); } - bool b=(m_mode=="FT8") and ui->cbAutoSeq->isChecked(); + bool b=(m_mode=="FT8" or m_mode=="FT4") and ui->cbAutoSeq->isChecked(); if(is_73 and (m_config.disable_TX_on_73() or b)) { m_nextCall=""; //### Temporary: disable use of "TU;" messages; if(m_nextCall!="") { @@ -3857,14 +3850,14 @@ void MainWindow::guiUpdate() m_msgSent0 = current_message; } - if(m_mode!="FT4") { +// if(m_mode!="FT4") { if(!m_tune) write_all("Tx",m_currentMessage); if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, ui->TxFreqSpinBox->value(),m_bFastMode); } - } +// } switch (m_ntx) { @@ -3928,12 +3921,14 @@ void MainWindow::guiUpdate() if(tHound >= 120 and m_ntx==1) auto_tx_mode(false); } - progressBar.setVisible(!(m_mode=="FT4")); +// progressBar.setVisible(!(m_mode=="FT4")); + progressBar.setVisible(true); if(m_auto and m_mode=="Echo" and m_bEchoTxOK) { progressBar.setMaximum(6); progressBar.setValue(int(m_s6)); } - if(m_mode!="Echo" and m_mode!="FT4") { +// if(m_mode!="Echo" and m_mode!="FT4") { + if(m_mode!="Echo") { if(m_monitoring or m_transmitting) { progressBar.setMaximum(m_TRperiod); int isec=int(fmod(tsec,m_TRperiod)); @@ -5647,7 +5642,7 @@ void MainWindow::on_actionFT4_triggered() { m_mode="FT4"; m_modeTx="FT4"; - m_TRperiod=2147483647; + m_TRperiod=6; bool bVHF=m_config.enable_VHF_features(); m_bFast9=false; m_bFastMode=false; @@ -5656,7 +5651,7 @@ void MainWindow::on_actionFT4_triggered() m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=50; + m_hsymStop=17; setup_status_bar (bVHF); m_toneSpacing=12000.0/512.0; ui->actionFT4->setChecked(true); @@ -6959,8 +6954,8 @@ void MainWindow::transmit (double snr) toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform. Q_EMIT sendMessage (NUM_FT4_SYMBOLS, 512.0, ui->TxFreqSpinBox->value() - m_XIT, - toneSpacing, m_soundOutput, m_config.audio_output_channel (), - true, false, snr, 2); + toneSpacing, m_soundOutput, m_config.audio_output_channel(), + true, false, snr, m_TRperiod); } if (m_modeTx == "QRA64") { @@ -8772,8 +8767,9 @@ void MainWindow::ft4_rx(int k) if(m_config.RTTY_Exchange()!="SCC") strncpy(cqstr,"RU",2); if(m_config.RTTY_Exchange()=="SCC") strncpy(cqstr,"SCC",3); } - ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], - &cqstr[0],&line[0],&ddir[0],17,12,12,4,61,512); + +// ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], +// &cqstr[0],&line[0],&ddir[0],17,12,12,4,61,512); line[60]=0; for (int idecode=1; idecode<=ndecodes; idecode++) { get_ft4msg_(&idecode,&line[0],61); @@ -8862,11 +8858,11 @@ void MainWindow::ft4_tx(int ntx) m_tx_when_ready = true; qint64 ms=QDateTime::currentMSecsSinceEpoch(); m_modulator->set_ms0(ms); - FT4_TxTimer.start(4600); //Slightly more than FT4 transmission length +// FT4_TxTimer.start(4600); //Slightly more than FT4 transmission length if (g_iptt == 1 && m_iptt0 == 0) { auto const& current_message = QString::fromLatin1 (msgsent); - FT4_WriteTxTimer.start(100); //Why is a delay necessary to ensure Tx after Rx in all.txt? +// FT4_WriteTxTimer.start(100); //Why is a delay necessary to ensure Tx after Rx in all.txt? if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, ui->TxFreqSpinBox->value(),m_bFastMode); diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 8be317596..79285522c 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -583,8 +583,8 @@ private: QTimer minuteTimer; QTimer splashTimer; QTimer p1Timer; - QTimer FT4_TxTimer; - QTimer FT4_WriteTxTimer; +// QTimer FT4_TxTimer; +// QTimer FT4_WriteTxTimer; QString m_path; QString m_baseCall; From 888b5fee289f2727b16c154b2f1bdcd431648276 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 1 Apr 2019 14:40:16 -0400 Subject: [PATCH 176/367] Make "Tx 1st/Even" visible in FT4 mode. --- widgets/mainwindow.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index c237806bb..ae580e19c 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3704,7 +3704,6 @@ void MainWindow::guiUpdate() } } if(m_modeTx=="FT4") { - qDebug () << "AA FT4 Tx"; int ichk=0; genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); int nsym=103; @@ -5669,7 +5668,7 @@ void MainWindow::on_actionFT4_triggered() ui->label_7->setText("Rx Frequency"); ui->label_6->setText("Band Activity"); ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); - displayWidgets(nWidgets("011010000100111000010000100110001")); + displayWidgets(nWidgets("111010000100111000010000100110001")); ui->txrb2->setEnabled(true); ui->txrb4->setEnabled(true); ui->txrb5->setEnabled(true); From fd239d9c072ca3028bcf75c0803054b29cec2739 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 2 Apr 2019 11:39:28 -0400 Subject: [PATCH 177/367] Clean up some timing issues with time-synchronized FT4. --- Modulator.cpp | 31 +++++++++++++++---------------- widgets/mainwindow.cpp | 26 ++++++++++++-------------- widgets/mainwindow.h | 2 +- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/Modulator.cpp b/Modulator.cpp index 8811d16a3..725de9e42 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -92,11 +92,9 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } - if((symbolsLength==103 or symbolsLength==105) and framesPerSymbol==512 + if(symbolsLength==105 and framesPerSymbol==512 and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) { //### FT4 parameters - delay_ms=100; - mstr=5000; m_ic=0; m_silentFrames=0; } @@ -159,6 +157,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) qint16 * end (samples + numFrames * (bytesPerFrame () / sizeof (qint16))); qint64 framesGenerated (0); +// if(m_ic==0) qDebug() << "Modulator::readData" << 0.001*(QDateTime::currentMSecsSinceEpoch() % (1000*m_TRperiod)); + switch (m_state) { case Synchronizing: @@ -180,8 +180,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) case Active: { unsigned int isym=0; -// qDebug() << "Mod A" << m_toneSpacing << m_frequency << m_nsps -// << m_ic << m_symbolsLength << icw[0]; + if(!m_tuning) isym=m_ic/(4.0*m_nsps); // Actual fsample=48000 bool slowCwId=((isym >= m_symbolsLength) && (icw[0] > 0)) && (!m_bFastMode); if(m_TRperiod==3) slowCwId=false; @@ -192,6 +191,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) if(m_bFastMode and (icw[0]>0) and (tsec>(m_TRperiod-5.0))) fastCwId=true; if(!m_bFastMode) m_nspd=2560; // 22.5 WPM +// qDebug() << "Mod A" << m_ic << isym << tsec; + if(slowCwId or fastCwId) { // Transmit CW ID? m_dphi = m_twoPi*m_frequency/m_frameRate; if(m_bFastMode and !bCwId) { @@ -263,10 +264,10 @@ qint64 Modulator::readData (char * data, qint64 maxSize) } qint16 sample; + for (unsigned i = 0; i < numFrames && m_ic <= i1; ++i) { isym=0; - if(!m_tuning and m_TRperiod!=3) isym=m_ic / (4.0 * m_nsps); //Actual - //fsample=48000 + if(!m_tuning and m_TRperiod!=3) isym=m_ic/(4.0*m_nsps); //Actual fsample=48000 if(m_bFastMode) isym=isym%m_symbolsLength; if (isym != m_isym0 || m_frequency != m_frequency0) { if(itone[0]>=100) { @@ -278,8 +279,6 @@ qint64 Modulator::readData (char * data, qint64 maxSize) m_toneFrequency0=m_frequency + itone[isym]*m_toneSpacing; } } -// qDebug() << "Mod B" << m_bFastMode << m_ic << numFrames << isym << itone[isym] -// << m_toneFrequency0 << m_nsps; m_dphi = m_twoPi * m_toneFrequency0 / m_frameRate; m_isym0 = isym; m_frequency0 = m_frequency; //??? @@ -302,10 +301,10 @@ qint64 Modulator::readData (char * data, qint64 maxSize) sample=qRound(m_amp*qSin(m_phi)); //Here's where we transmit from a precomputed wave[] array: - if(!m_tuning and (m_toneSpacing < 0)) sample=qRound(m_amp*foxcom_.wave[m_ic]); -// if(m_ic < 10) qDebug() << "Mod Tx" << m_ic << m_amp -// << foxcom_.wave[m_ic] << sample -// << m_toneSpacing; + if(!m_tuning and (m_toneSpacing < 0)) { + m_amp=32767.0; + sample=qRound(m_amp*foxcom_.wave[m_ic]); + } samples = load(postProcessSample(sample), samples); ++framesGenerated; @@ -322,9 +321,9 @@ qint64 Modulator::readData (char * data, qint64 maxSize) } m_frequency0 = m_frequency; - // done for this chunk - continue on next call -// qint64 ms1=QDateTime::currentMSecsSinceEpoch() - m_ms0; -// if(m_ic>=4*144*160) qDebug() << "Modulator finished" << m_ic << 0.001*ms1; +// done for this chunk - continue on next call + +// qDebug() << "Mod B" << m_ic << i1 << 0.001*(QDateTime::currentMSecsSinceEpoch() % (1000*m_TRperiod)); while (samples != end) // pad block with silence { diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index ae580e19c..9d0585ebd 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1331,7 +1331,7 @@ void MainWindow::fixStop() } else if (m_mode=="FT8") { m_hsymStop=50; } else if (m_mode=="FT4") { - m_hsymStop=17; + m_hsymStop=18; } } @@ -1340,8 +1340,7 @@ void MainWindow::dataSink(qint64 frames) { static float s[NSMAX]; char line[80]; - - int k (frames); + int k(frames); QString fname {QDir::toNativeSeparators(m_config.writeable_data_dir ().absoluteFilePath ("refspec.dat"))}; QByteArray bafname = fname.toLatin1(); const char *c_fname = bafname.data(); @@ -3396,7 +3395,7 @@ void MainWindow::guiUpdate() if(m_TRperiod==0) m_TRperiod=60; txDuration=0.0; - if(m_modeTx=="FT4") txDuration=0.25 + 103*512/12000.0; // FT4 + if(m_modeTx=="FT4") txDuration=0.35 + 105*512/12000.0; // FT4 if(m_modeTx=="FT8") txDuration=1.0 + 79*1920/12000.0; // FT8 if(m_modeTx=="JT4") txDuration=1.0 + 207.0*2520/11025.0; // JT4 if(m_modeTx=="JT9") txDuration=1.0 + 85.0*m_nsps/12000.0; // JT9 @@ -5650,7 +5649,7 @@ void MainWindow::on_actionFT4_triggered() m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=17; + m_hsymStop=18; setup_status_bar (bVHF); m_toneSpacing=12000.0/512.0; ui->actionFT4->setChecked(true); @@ -6787,18 +6786,17 @@ void MainWindow::setFreq4(int rxFreq, int txFreq) void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const& s) { - // qDebug () << "MainWindow::handle_transceiver_update:" << s; Transceiver::TransceiverState old_state {m_rigState}; //transmitDisplay (s.ptt ()); - if (s.ptt () && !m_rigState.ptt ()) // safe to start audio - // (caveat - DX Lab Suite Commander) - { - if (m_tx_when_ready && g_iptt) // waiting to Tx and still needed - { - ptt1Timer.start(1000 * m_config.txDelay ()); //Start-of-transmission sequencer delay - } - m_tx_when_ready = false; + if (s.ptt () && !m_rigState.ptt ()) { // safe to start audio + // (caveat - DX Lab Suite Commander) + if (m_tx_when_ready && g_iptt) { // waiting to Tx and still needed + int ms_delay=1000*m_config.txDelay(); + if(m_mode=="FT4") ms_delay=20; + ptt1Timer.start(ms_delay); //Start-of-transmission sequencer delay } + m_tx_when_ready = false; + } m_rigState = s; auto old_freqNominal = m_freqNominal; if (!old_freqNominal) diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 79285522c..174642d8e 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -46,7 +46,7 @@ #define NUM_MSK144_SYMBOLS 144 //s8 + d48 + s8 + d80 #define NUM_QRA64_SYMBOLS 84 //63 data + 21 sync #define NUM_FT8_SYMBOLS 79 -#define NUM_FT4_SYMBOLS 103 +#define NUM_FT4_SYMBOLS 105 #define NUM_CW_SYMBOLS 250 #define TX_SAMPLE_RATE 48000 #define N_WIDGETS 33 From d1c5bbecfe8a741f5f063eb17060aabff6326528 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 2 Apr 2019 12:21:03 -0400 Subject: [PATCH 178/367] Add the new ft4_decode file. --- lib/ft4_decode.f90 | 478 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 478 insertions(+) create mode 100644 lib/ft4_decode.f90 diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 new file mode 100644 index 000000000..b3a81c3d4 --- /dev/null +++ b/lib/ft4_decode.f90 @@ -0,0 +1,478 @@ +module ft4_decode + + type :: ft4_decoder + procedure(ft4_decode_callback), pointer :: callback + contains + procedure :: decode + end type ft4_decoder + + abstract interface + subroutine ft4_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) + import ft4_decoder + implicit none + class(ft4_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + end subroutine ft4_decode_callback + end interface + +contains + + subroutine decode(this,callback,iwave,nQSOProgress,nfqso, & + nutc,nfa,nfb,ndepth,ncontest,mycall,hiscall) + use timer_module, only: timer + use packjt77 + include 'ft4/ft4_params.f90' + class(ft4_decoder), intent(inout) :: this + procedure(ft4_decode_callback) :: callback + parameter (NSS=NSPS/NDOWN) + + character message*37,msgsent*37,msg0*37 + character c77*77 + character*37 decodes(100) + character*512 data_dir,fname + character*17 cdatetime0 + character*12 mycall,hiscall + character*12 mycall0,hiscall0 + character*6 hhmmss + character*4 cqstr,cqstr0 + + complex cd2(0:NMAX/NDOWN-1) !Complex waveform + complex cb(0:NMAX/NDOWN-1) + complex cd(0:NN*NSS-1) !Complex waveform + complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) + complex csymb(NSS) + complex cs(0:3,NN) + real s4(0:3,NN) + + real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) + real a(5) + real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) + real s2(0:255) + real candidate(3,100) + real savg(NH1),sbase(NH1) + + integer apbits(2*ND) + integer apmy_ru(28),aphis_fd(28) + integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) + integer*2 iwave(NMAX) !Raw received data + integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) + integer*1 hbits(2*NN) + integer graymap(0:3) + integer ip(1) + integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 + integer naptypes(0:5,4) ! nQSOProgress, decoding pass + integer mcq(29) + integer mrrr(19),m73(19),mrr73(19) + + logical nohiscall,unpk77_success + logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits + logical first, dobigfft + + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ + data graymap/0,1,3,2/ + data msg0/' '/ + data first/.true./ + data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ + data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ + data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ + data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ + data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ + save fs,dt,tt,txt,twopi,h,one,first,apbits,nappasses,naptypes, & + mycall0,hiscall0,msg0,cqstr0,ctwk2 + + this%callback => callback + + hhmmss=cdatetime0(8:13) + + if(first) then + fs=12000.0/NDOWN !Sample rate after downsampling + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + txt=NZ*dt !Transmission length (s) without ramp up/down + twopi=8.0*atan(1.0) + h=1.0 + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo + enddo + + do idf=-16,16 + a=0. + a(1)=real(idf) + ctwk=1. + call twkfreq1(ctwk,2*NSS,fs/2.0,a,ctwk2(:,idf)) + enddo + + mrrr=2*mod(mrrr+rvec(59:77),2)-1 + m73=2*mod(m73+rvec(59:77),2)-1 + mrr73=2*mod(mrr73+rvec(59:77),2)-1 + nappasses(0)=2 + nappasses(1)=2 + nappasses(2)=2 + nappasses(3)=2 + nappasses(4)=2 + nappasses(5)=3 + +! iaptype +!------------------------ +! 1 CQ ??? ??? (29 ap bits) +! 2 MyCall ??? ??? (29 ap bits) +! 3 MyCall DxCall ??? (58 ap bits) +! 4 MyCall DxCall RRR (77 ap bits) +! 5 MyCall DxCall 73 (77 ap bits) +! 6 MyCall DxCall RR73 (77 ap bits) +!******** + naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) + naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 + naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 + naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 + naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 + naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 + + mycall0='' + hiscall0='' + cqstr0='' + first=.false. + endif + + if(cqstr.ne.cqstr0) then + i0=index(cqstr,' ') + if(i0.le.1) then + message='CQ A1AA AA01' + else + message='CQ '//cqstr(1:i0-1)//' A1AA AA01' + endif + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,1,msgsent,unpk77_success) + read(c77,'(29i1)') mcq + mcq=2*mod(mcq+rvec(1:29),2)-1 + cqstr0=cqstr + endif + + l1=index(mycall,char(0)) + if(l1.ne.0) mycall(l1:)=" " + l1=index(hiscall,char(0)) + if(l1.ne.0) hiscall(l1:)=" " + if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then + apbits=0 + apbits(1)=99 + apbits(30)=99 + apmy_ru=0 + aphis_fd=0 + + if(len(trim(mycall)) .lt. 3) go to 10 + + nohiscall=.false. + hiscall0=hiscall + if(len(trim(hiscall0)).lt.3) then + hiscall0=mycall ! use mycall for dummy hiscall - mycall won't be hashed. + nohiscall=.true. + endif + message=trim(mycall)//' '//trim(hiscall0)//' RR73' + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,1,msgsent,unpk77_success) + if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 + read(c77,'(77i1)') message77 + apmy_ru=2*mod(message77(1:28)+rvec(2:29),2)-1 + aphis_fd=2*mod(message77(30:57)+rvec(29:56),2)-1 + message77=mod(message77+rvec,2) + call encode174_91(message77,cw) + apbits=2*cw-1 + if(nohiscall) apbits(30)=99 + +10 continue + mycall0=mycall + hiscall0=hiscall + endif + candidate=0.0 + ncand=0 + syncmin=1.2 + maxcand=100 + + fa=nfa + fb=nfb + call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & + ncand,sbase) + + ndecodes=0 + dobigfft=.true. + do icand=1,ncand + f0=candidate(1,icand) + snr=candidate(3,icand)-1.0 + call ft4_downsample(iwave,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym + if(dobigfft) dobigfft=.false. + sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) + if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) +! Sample rate is now 12000/16 = 750 samples/second + do isync=1,2 + if(isync.eq.1) then + idfmin=-12 + idfmax=12 + idfstp=3 + ibmin=0 +! ibmax=216 !Max DT = 216/750 = 0.288 s + ibmax=432 + ibstp=4 + else + idfmin=idfbest-4 + idfmax=idfbest+4 + idfstp=1 + ibmin=max(0,ibest-5) + ibmax=min(ibest+5,NMAX/NDOWN-1) + ibstp=1 + endif + ibest=-1 + smax=-99. + idfbest=0 + do idf=idfmin,idfmax,idfstp + do istart=ibmin,ibmax,ibstp + call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power + if(sync.gt.smax) then + smax=sync + ibest=istart + idfbest=idf + endif + enddo + enddo + enddo + f0=f0+real(idfbest) + if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle +! write(*,3002) smax,ibest/750.0,f0 +!3002 format('b',3f8.2) + call ft4_downsample(iwave,dobigfft,f0,cb) !Final downsample with corrected f0 + sum2=sum(abs(cb)**2)/(real(NSS)*NN) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) + cd=cb(ibest:ibest+NN*NSS-1) + do k=1,NN + i1=(k-1)*NSS + csymb=cd(i1:i1+NSS-1) + call four2a(csymb,NSS,1,-1,1) + cs(0:3,k)=csymb(1:4) + s4(0:3,k)=abs(csymb(1:4)) + enddo + +! Sync quality check + is1=0 + is2=0 + is3=0 + is4=0 + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+33)) + if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+66)) + if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 + ip=maxloc(s4(:,k+99)) + if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 + enddo + nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 + if(smax .lt. 0.7 .or. nsync .lt. 8) cycle + + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,NN-nsym+1,nsym !87+16=103 symbols. + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib.gt.2*NN) cycle + if(nsym.eq.1) then + bmeta(ipt+ib)=bm + elseif(nsym.eq.2) then + bmetb(ipt+ib)=bm + elseif(nsym.eq.4) then + bmetc(ipt+ib)=bm + endif + enddo + enddo + enddo + + bmetb(205:206)=bmeta(205:206) + bmetc(201:204)=bmetb(201:204) + bmetc(205:206)=bmeta(205:206) + + call normalizebmet(bmeta,2*NN) + call normalizebmet(bmetb,2*NN) + call normalizebmet(bmetc,2*NN) + + hbits=0 + where(bmeta.ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) + ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) + ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) + nsync_qual=ns1+ns2+ns3+ns4 + if(nsync_qual.lt. 20) cycle + + scalefac=2.83 + llra( 1: 58)=bmeta( 9: 66) + llra( 59:116)=bmeta( 75:132) + llra(117:174)=bmeta(141:198) + llra=scalefac*llra + llrb( 1: 58)=bmetb( 9: 66) + llrb( 59:116)=bmetb( 75:132) + llrb(117:174)=bmetb(141:198) + llrb=scalefac*llrb + llrc( 1: 58)=bmetc( 9: 66) + llrc( 59:116)=bmetc( 75:132) + llrc(117:174)=bmetc(141:198) + llrc=scalefac*llrc + + apmag=maxval(abs(llra))*1.1 + npasses=3+nappasses(nQSOProgress) + if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound + do ipass=1,npasses + if(ipass.eq.1) llr=llra + if(ipass.eq.2) llr=llrb + if(ipass.eq.3) llr=llrc + if(ipass.le.3) then + apmask=0 + iaptype=0 + endif + + if(ipass .gt. 3) then + llrd=llrc + iaptype=naptypes(nQSOProgress,ipass-3) + +! ncontest=0 : NONE +! 1 : NA_VHF +! 2 : EU_VHF +! 3 : FIELD DAY +! 4 : RTTY +! 5 : FOX +! 6 : HOUND +! +! Conditions that cause us to bail out of AP decoding + napwid=50 + if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f0-nfqso).gt.napwid) ) cycle + if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall + if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall + + if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC + apmask=0 + apmask(1:29)=1 + llrd(1:29)=apmag*mcq(1:29) + endif + + if(iaptype.eq.2) then ! MyCall,???,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1) then + apmask(1:29)=1 + llrd(1:29)=apmag*apbits(1:29) + else if(ncontest.eq.2) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.3) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.4) then + apmask(2:29)=1 + llrd(2:29)=apmag*apmy_ru(1:28) + endif + endif + + if(iaptype.eq.3) then ! MyCall,DxCall,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then + apmask(1:58)=1 + llrd(1:58)=apmag*apbits(1:58) + else if(ncontest.eq.3) then ! Field Day + apmask(1:56)=1 + llrd(1:28)=apmag*apbits(1:28) + llrd(29:56)=apmag*aphis_fd(1:28) + else if(ncontest.eq.4) then ! RTTY RU + apmask(2:57)=1 + llrd(2:29)=apmag*apmy_ru(1:28) + llrd(30:57)=apmag*apbits(30:57) + endif + endif + + if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then + apmask=0 + if(ncontest.le.4) then + apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 + if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) + endif + endif + + llr=llrd + endif + max_iterations=40 + message77=0 + call bpdecode174_91(llr,apmask,max_iterations,message77, & + cw,nharderror,niterations) + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + message77=mod(message77+rvec,2) ! remove rvec scrambling + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(ibest.le.10 .and. message.eq.msg0) idupe=1 !Already decoded + if(idupe.eq.1) exit + ndecodes=ndecodes+1 + decodes(ndecodes)=message + if(snr.gt.0.0) then + xsnr=10*log10(snr)-14.0 + else + xsnr=-20.0 + endif + nsnr=nint(max(-20.0,xsnr)) + xdt=ibest/750.0 - 0.45 + call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) + if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate + exit + endif + enddo !Sequence estimation + enddo !Candidate list + + return + end subroutine decode + +end module ft4_decode From d579e5973e7d5060846cf76f71873db71565f160 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 2 Apr 2019 13:04:40 -0400 Subject: [PATCH 179/367] Correct the size of saved FT4 .wav files. --- widgets/mainwindow.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 9d0585ebd..82b2f908c 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1471,11 +1471,13 @@ void MainWindow::dataSink(qint64 frames) m_fnameWE=m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmm")); } m_fileToSave.clear (); + int samples=m_TRperiod*12000; + if(m_mode=="FT4") samples=18*3456; // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], m_TRperiod*12000, m_config.my_callsign(), + this, m_fnameWE, &dec_data.d2[0], samples, m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); if (m_mode=="WSPR") { QString c2name_string {m_fnameWE + ".c2"}; From 181e5c7b9dcac5df5576fdeae82615026ea825d0 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 2 Apr 2019 13:16:06 -0400 Subject: [PATCH 180/367] Remove unused code left over from asynchronous FT4 mode. --- widgets/mainwindow.cpp | 266 ++--------------------------------------- widgets/mainwindow.h | 6 - 2 files changed, 12 insertions(+), 260 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 82b2f908c..3d9901dd4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -743,13 +743,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, connect(&m_guiTimer, &QTimer::timeout, this, &MainWindow::guiUpdate); m_guiTimer.start(100); //### Don't change the 100 ms! ### - -// FT4_TxTimer.setSingleShot(true); -// connect(&FT4_TxTimer, &QTimer::timeout, this, &MainWindow::stopTx); - -// FT4_WriteTxTimer.setSingleShot(true); -// connect(&FT4_WriteTxTimer, &QTimer::timeout, this, &MainWindow::FT4_writeTx); - ptt0Timer.setSingleShot(true); connect(&ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2); @@ -4212,11 +4205,7 @@ void MainWindow::on_txb1_clicked() m_ntx=1; m_QSOProgress = REPLYING; ui->txrb1->setChecked(true); - if(m_mode=="FT4") { - ft4_tx(1); - } else { - if(m_transmitting) m_restart=true; - } + if(m_transmitting) m_restart=true; } else { on_txb2_clicked (); @@ -4237,11 +4226,7 @@ void MainWindow::on_txb2_clicked() m_ntx=2; m_QSOProgress = REPORT; ui->txrb2->setChecked(true); - if(m_mode=="FT4") { - ft4_tx(2); - } else { - if(m_transmitting) m_restart=true; - } + if(m_transmitting) m_restart=true; } void MainWindow::on_txb3_clicked() @@ -4249,11 +4234,7 @@ void MainWindow::on_txb3_clicked() m_ntx=3; m_QSOProgress = ROGER_REPORT; ui->txrb3->setChecked(true); - if(m_mode=="FT4") { - ft4_tx(3); - } else { - if(m_transmitting) m_restart=true; - } + if(m_transmitting) m_restart=true; } void MainWindow::on_txb4_clicked() @@ -4261,11 +4242,7 @@ void MainWindow::on_txb4_clicked() m_ntx=4; m_QSOProgress = ROGERS; ui->txrb4->setChecked(true); - if(m_mode=="FT4") { - ft4_tx(4); - } else { - if(m_transmitting) m_restart=true; - } + if(m_transmitting) m_restart=true; } void MainWindow::on_txb4_doubleClicked() @@ -4283,11 +4260,7 @@ void MainWindow::on_txb5_clicked() m_ntx=5; m_QSOProgress = SIGNOFF; ui->txrb5->setChecked(true); - if(m_mode=="FT4") { - ft4_tx(5); - } else { - if(m_transmitting) m_restart=true; - } + if(m_transmitting) m_restart=true; } void MainWindow::on_txb5_doubleClicked() @@ -4301,11 +4274,7 @@ void MainWindow::on_txb6_clicked() m_QSOProgress = CALLING; set_dateTimeQSO(-1); ui->txrb6->setChecked(true); - if(m_mode=="FT4") { - ft4_tx(6); - } else { - if(m_transmitting) m_restart=true; - } + if(m_transmitting) m_restart=true; } void MainWindow::doubleClickOnCall2(Qt::KeyboardModifiers modifiers) @@ -4377,6 +4346,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ui->TxFreqSpinBox->setValue(frequency); //Set Tx freq } } + /* if(m_mode=="FT4") { int i0=message.string().indexOf(" + "); QString t=message.string().trimmed().mid(i0+4,-1); @@ -4392,6 +4362,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ft4_tx(n); } } + */ return; } @@ -4842,6 +4813,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie && !m_bDoubleClicked && m_mode!="FT4") { return; } + /* if(m_mode=="FT4" and ui->cbAutoSeq->isChecked()) { if((m_ntx==4 or m_ntx==5) and !m_diskData) { save_FT4(); @@ -4852,6 +4824,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ft4_tx(m_ntx); } } + */ if(m_config.quick_call()) auto_tx_mode(true); m_bDoubleClicked=false; } @@ -8671,7 +8644,8 @@ void MainWindow::write_all(QString txRx, QString message) t.sprintf("%5d",ui->TxFreqSpinBox->value()); if(txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); - if(m_mode!="FT4") time = time.addSecs(-(time.time().second() % m_TRperiod)); +// if(m_mode!="FT4") time = time.addSecs(-(time.time().second() % m_TRperiod)); + time = time.addSecs(-(time.time().second() % m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); if(m_diskData) { line=m_fileDateTime + t + txRx + " " + m_mode.leftJustified(6,' ') + msg; @@ -8694,222 +8668,6 @@ void MainWindow::write_all(QString txRx, QString message) } } -void MainWindow::ft4_rx(int k) -{ - static int nhsec0=-1; - static bool wrapped=false; - short id[60000]; - const int istep=3456; - const int k_enough=55296; //4.608 s - - if(knhsec) nhsec0=-1; - if(nhsec==nhsec0) return; - if(k=NRING) { - j=j-NRING; - wrapped=true; - } - } - if(j>60000) wrapped=false; - if(m_saveAll and ((k-m_kin0)/12000.0 > 15.0) and !m_diskData) save_FT4(); - - if(k>=NRING) { - if(m_saveAll and !m_diskData) save_FT4(); - //Wrap the ring buffer pointer - k=k-NRING; - dec_data.params.kin=k; - } - - QByteArray ba; - if(m_diskData) { - ba=(m_fileDateTime + ".000").toLatin1(); - } else { - auto time = QDateTime::currentDateTimeUtc (); - ba=time.toString("yyMMdd_hhmmss.sss").toLatin1(); - } - char* cdatetime=ba.data(); - - strncpy(dec_data.params.mycall, (m_config.my_callsign()+" ").toLatin1(),12); - char mycall[13]; - strncpy(mycall,m_config.my_callsign().toLatin1(),12); - char hiscall[13]; - strncpy(hiscall,m_hisCall.toLatin1(),12); - - char line[61]; - int nfqso=1500; - int ndecodes=0; - int nfa=m_wideGraph->nStartFreq(); - int nfb=m_wideGraph->Fmax(); - int nQSOProgress = static_cast ( m_QSOProgress ); - int nContest = static_cast (m_config.special_op_id()); - QString dataDir; - dataDir = m_config.writeable_data_dir ().absolutePath (); - char ddir[512]; - strncpy(ddir,dataDir.toLatin1(), sizeof (ddir) - 1); - char cqstr[4]; - strncpy(cqstr," ",4); - if(SpecOp::NA_VHF == m_config.special_op_id()) strncpy(cqstr,"TEST",4); - if(SpecOp::EU_VHF == m_config.special_op_id()) strncpy(cqstr,"TEST",4); - if(SpecOp::FIELD_DAY == m_config.special_op_id()) strncpy(cqstr,"FD",2); - if(SpecOp::RTTY == m_config.special_op_id()) { - if(m_config.RTTY_Exchange()!="SCC") strncpy(cqstr,"RU",2); - if(m_config.RTTY_Exchange()=="SCC") strncpy(cqstr,"SCC",3); - } - -// ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nQSOProgress,&nContest,&nfqso,id,&ndecodes,&mycall[0],&hiscall[0], -// &cqstr[0],&line[0],&ddir[0],17,12,12,4,61,512); - line[60]=0; - for (int idecode=1; idecode<=ndecodes; idecode++) { - get_ft4msg_(&idecode,&line[0],61); - line[60]=0; - QString sline{QString::fromLatin1(line)}; - DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; - ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, - m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); - -//Right (Rx Frequency) window -// int audioFreq=decodedtext.frequencyOffset(); - auto const& parts = decodedtext.string().remove("<").remove(">") - .split (' ', QString::SkipEmptyParts); - if(parts.size() > 6) { - int iFirstCall=5; - if(parts[5]=="TU;") iFirstCall=6; - auto for_us = parts[iFirstCall].contains(m_baseCall); - if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[iFirstCall]) for_us=false; - if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked()) { - m_bDoubleClicked=true; - m_bAutoReply = true; - ui->cbFirst->setStyleSheet(""); - } - if(for_us) { - ui->decodedTextBrowser2->displayDecodedText(decodedtext,m_baseCall, - m_mode,m_config.DXCC(),m_logBook,m_currentBand,m_config.ppfx()); - if(decodedtext.string().trimmed().contains(m_inQSOwith)) processMessage(decodedtext); - m_QSOText = decodedtext.string().trimmed (); - } - if(for_us and parts[iFirstCall+2]=="RR73") m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc(); - write_all("Rx",decodedtext.string().trimmed()); - } - } - nhsec0=nhsec; - if(m_diskData and (k > (dec_data.params.kin-istep))) m_startAnother=m_loopall; - if(m_bNoMoreFiles) { - MessageBox::information_message(this, tr("Just one more file to open.")); - m_bNoMoreFiles=false; - } -} - -void MainWindow::ft4_tx(int ntx) -{ - if(g_iptt!=0) return; //Already transmitting? - static char message[38]; - static char msgsent[38]; - QByteArray ba; - m_ntx=ntx; - setTxMsg(m_ntx); - if(m_ntx == 1) ba=ui->tx1->text().toLocal8Bit(); - if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit(); - if(m_ntx == 3) ba=ui->tx3->text().toLocal8Bit(); - if(m_ntx == 4) ba=ui->tx4->text().toLocal8Bit(); - if(m_ntx == 5) ba=ui->tx5->currentText().toLocal8Bit(); - if(m_ntx == 6) ba=ui->tx6->text().toLocal8Bit(); - QString msg = QString::fromLatin1(ba.data()); - if(m_ntx==2 or m_ntx==3) m_inQSOwith=m_hisCall; - if(msg.trimmed().length()==0) return; //Don't transmit a blank message, or ... - if(m_diskData) return; //... in response to a decode from disk - ba2msg(ba,message); - int ichk=0; - genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); - msgsent[37]=0; - m_currentMessage = QString::fromLatin1(msgsent).trimmed(); - tx_status_label.setStyleSheet("QLabel{background-color: #ffff33}"); - tx_status_label.setText("TX: " + m_currentMessage); - if(m_ntx==2 or m_ntx==3) { - QStringList t=ui->tx2->text().split(' ', QString::SkipEmptyParts); - int n=t.size(); - m_xSent=t.at(n-2) + " " + t.at(n-1); - } - auto_tx_mode(true); //Enable Tx - icw[0]=0; - g_iptt = 1; - setRig (); - setXIT (ui->TxFreqSpinBox->value ()); - - int nsym=103; - int nsps=4*512; - float fsample=48000.0; - float f0=ui->TxFreqSpinBox->value() - m_XIT; - int nwave=(nsym+2)*nsps; - gen_ft4wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,&nwave); - if(m_ntx==3) m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); - Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT - m_tx_when_ready = true; - qint64 ms=QDateTime::currentMSecsSinceEpoch(); - m_modulator->set_ms0(ms); -// FT4_TxTimer.start(4600); //Slightly more than FT4 transmission length - - if (g_iptt == 1 && m_iptt0 == 0) { - auto const& current_message = QString::fromLatin1 (msgsent); -// FT4_WriteTxTimer.start(100); //Why is a delay necessary to ensure Tx after Rx in all.txt? - if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id()) { - ui->decodedTextBrowser2->displayTransmittedText(current_message, m_modeTx, - ui->TxFreqSpinBox->value(),m_bFastMode); - } - - switch (m_ntx) - { - case 1: m_QSOProgress = REPLYING; break; - case 2: m_QSOProgress = REPORT; break; - case 3: m_QSOProgress = ROGER_REPORT; break; - case 4: m_QSOProgress = ROGERS; break; - case 5: m_QSOProgress = SIGNOFF; break; - case 6: m_QSOProgress = CALLING; break; - default: break; // determined elsewhere - } - m_transmitting = true; - transmitDisplay (true); - statusUpdate (); - } - m_dateTimeQSOOn=QDateTime::currentDateTimeUtc(); - if(!m_btxok && m_btxok0 && g_iptt==1) stopTx(); - if(m_saveAll and !m_diskData) save_FT4(); -} - -void MainWindow::FT4_writeTx() -{ - write_all("Tx",m_currentMessage); -} - -void MainWindow::save_FT4() -{ - double tsec=(dec_data.params.kin - m_kin0)/12000.0; - if(tsec<4.4) return; //Saved data must be at least 4.4 seconds long. - auto time = QDateTime::currentDateTimeUtc (); - QString t=time.toString("yyMMdd_hhmmss"); - m_fnameWE=m_config.save_directory().absoluteFilePath(t); - -// The following is potential a threading hazard - not a good -// idea to pass pointer to be processed in another thread - int nsamples=dec_data.params.kin - m_kin0 + 1; - m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[m_kin0], nsamples, m_config.my_callsign(), - m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, - m_hisGrid))); - - m_kin0=dec_data.params.kin; -} - void MainWindow::chkFT4() { if(m_mode!="FT4") return; diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 174642d8e..6bce17978 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -312,8 +312,6 @@ private slots: void on_comboBoxHoundSort_activated (int index); void not_GA_warning_message (); void checkMSK144ContestType(); - void ft4_rx(int k); - void ft4_tx(int ntx); int setTxMsg(int n); bool stdCall(QString const& w); @@ -583,8 +581,6 @@ private: QTimer minuteTimer; QTimer splashTimer; QTimer p1Timer; -// QTimer FT4_TxTimer; -// QTimer FT4_WriteTxTimer; QString m_path; QString m_baseCall; @@ -764,8 +760,6 @@ private: void foxTxSequencer(); void foxGenWaveform(int i,QString fm); void writeFoxQSO (QString const& msg); - void FT4_writeTx(); - void save_FT4(); }; extern int killbyname(const char* progName); From c8dae294255e9fa922ca17ed46318cf32139e7c6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 2 Apr 2019 13:27:55 -0400 Subject: [PATCH 181/367] Synchronized FT4 auto-sequencing now works. --- widgets/mainwindow.cpp | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 3d9901dd4..78c9693c7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3110,7 +3110,7 @@ void MainWindow::readFromStdout() //readFromStdout //Right (Rx Frequency) window bool bDisplayRight=bAvgMsg; int audioFreq=decodedtext.frequencyOffset(); - if(m_mode=="FT8") { + if(m_mode=="FT8" or m_mode=="FT4") { auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); if (parts.size () > 6) { @@ -4346,23 +4346,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ui->TxFreqSpinBox->setValue(frequency); //Set Tx freq } } - /* - if(m_mode=="FT4") { - int i0=message.string().indexOf(" + "); - QString t=message.string().trimmed().mid(i0+4,-1); - int n=0; - if(t==ui->tx1->text()) n=1; - if(t==ui->tx2->text()) n=2; - if(t==ui->tx3->text()) n=3; - if(t==ui->tx4->text()) n=4; - if(t==ui->tx5->currentText()) n=5; - if(t==ui->tx6->text()) n=6; - if(n>0) { - if(ctrl) ui->TxFreqSpinBox->setValue(frequency); - ft4_tx(n); - } - } - */ return; } @@ -4813,18 +4796,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie && !m_bDoubleClicked && m_mode!="FT4") { return; } - /* - if(m_mode=="FT4" and ui->cbAutoSeq->isChecked()) { - if((m_ntx==4 or m_ntx==5) and !m_diskData) { - save_FT4(); - logQSOTimer.start(0); // Log the QSO - } - if((m_ntx==3 and ui->cbFirst->isChecked()) or m_ntx==4 or m_bDoubleClicked) { - QThread::msleep(600); //Wait a bit. ### Is this a good idea??? ### - ft4_tx(m_ntx); - } - } - */ if(m_config.quick_call()) auto_tx_mode(true); m_bDoubleClicked=false; } @@ -8644,7 +8615,6 @@ void MainWindow::write_all(QString txRx, QString message) t.sprintf("%5d",ui->TxFreqSpinBox->value()); if(txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); -// if(m_mode!="FT4") time = time.addSecs(-(time.time().second() % m_TRperiod)); time = time.addSecs(-(time.time().second() % m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); if(m_diskData) { From 013c06b6ca6777b3993500b5cb9fab9490de726d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 09:25:32 -0400 Subject: [PATCH 182/367] Fix a probmel with decoding FT4 from .wav files. --- lib/ft4/ft4sim.f90 | 27 ++++++++++++++------------- lib/ft4_decode.f90 | 6 ++---- widgets/mainwindow.cpp | 3 ++- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 1481840c8..baf15fcb1 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -6,18 +6,19 @@ program ft4sim use packjt77 include 'ft4_params.f90' !Set various constants parameter (NWAVE=NN*NSPS) + parameter (NZZ=18*3456) !62208 type(hdr) h !Header for .wav file character arg*12,fname*17 character msg37*37,msgsent37*37 character c77*77 - complex c0(0:NMAX-1) - complex c(0:NMAX-1) - real wave(NMAX) - real dphi(0:NMAX-1) + complex c0(0:NZZ-1) + complex c(0:NZZ-1) + real wave(NZZ) + real dphi(0:NZZ-1) real pulse(3*NSPS) integer itone(NN) integer*1 msgbits(77) - integer*2 iwave(NMAX) !Generated full-length waveform + integer*2 iwave(NZZ) !Generated full-length waveform integer icos4(4) data icos4/0,1,3,2/ @@ -100,7 +101,8 @@ program ft4sim phi=0.0 c0=0.0 dphi=dphi+twopi*f0*dt - do j=0,NMAX-1 +! do j=0,NMAX-1 !### ??? ### + do j=0,(NN+2)*NSPS-1 c0(j)=cmplx(cos(phi),sin(phi)) phi=mod(phi+dphi(j),twopi) enddo @@ -109,13 +111,13 @@ program ft4sim c0((NN+1)*NSPS:(NN+2)*NSPS-1)=c0((NN+1)*NSPS:(NN+2)*NSPS-1)*(1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS) ))/2.0 c0((NN+2)*NSPS:)=0. - k=nint((xdt+0.14)/dt) + k=nint((xdt+0.35)/dt) c0=cshift(c0,-k) ia=k do ifile=1,nfiles c=c0 - if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c,NMAX,NWAVE,fs,delay,fspread) + if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c,NZZ,NWAVE,fs,delay,fspread) c=sig*c ib=k @@ -124,7 +126,7 @@ program ft4sim nslots=1 if(snrdb.lt.90) then - do i=1,NMAX !Add gaussian noise at specified SNR + do i=1,NZZ !Add gaussian noise at specified SNR xnoise=gran() wave(i)=wave(i) + xnoise enddo @@ -140,15 +142,14 @@ program ft4sim endif if(any(abs(wave).gt.32767.0)) print*,"Warning - data will be clipped." iwave=nint(wave) - h=default_header(12000,NMAX+2208) + h=default_header(12000,NZZ) write(fname,1102) ifile 1102 format('000000_',i6.6,'.wav') open(10,file=fname,status='unknown',access='stream') write(10) h,iwave !Save to *.wav file - iwave(1:2208)=0 - write(10) iwave(1:2208) !Add 0.5 s of zeroes close(10) write(*,1110) ifile,xdt,f0,snrdb,fname 1110 format(i4,f7.2,f8.2,f7.1,2x,a17) - enddo + enddo + 999 end program ft4sim diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index b3a81c3d4..e370b8996 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -90,11 +90,9 @@ contains 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ save fs,dt,tt,txt,twopi,h,one,first,apbits,nappasses,naptypes, & mycall0,hiscall0,msg0,cqstr0,ctwk2 - - this%callback => callback + this%callback => callback hhmmss=cdatetime0(8:13) - if(first) then fs=12000.0/NDOWN !Sample rate after downsampling dt=1/fs !Sample interval after downsample (s) @@ -471,7 +469,7 @@ contains endif enddo !Sequence estimation enddo !Candidate list - + return end subroutine decode diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 78c9693c7..c21968906 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2690,7 +2690,8 @@ void MainWindow::diskDat() //diskDat() float bw=m_config.RxBandwidth(); if(db > 0.0) degrade_snr_(dec_data.d2,&dec_data.params.kin,&db,&bw); for(int n=1; n<=m_hsymStop; n++) { // Do the waterfall spectra - k=(n+1)*kstep; +// k=(n+1)*kstep; //### Why was this (n+1) ??? ### + k=n*kstep; if(k > dec_data.params.kin) break; dec_data.params.npts8=k/8; dataSink(k); From 6ea9f4990dba2d1080a4b4ab9dd43b03caeb590e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 10:13:50 -0400 Subject: [PATCH 183/367] Several tweaks to FT4 simulation and decoding procedures. Now -0.5 < DT < 0.5 --- lib/decoder.f90 | 2 +- lib/ft4/ft4sim.f90 | 7 ++----- lib/ft4_decode.f90 | 17 ++++++++--------- widgets/mainwindow.cpp | 2 +- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index ded53e3b8..37ca5b1bd 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -149,7 +149,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) go to 800 endif - if(params%nmode.eq.-4) then + if(params%nmode.eq.5) then call timer('decft4 ',0) call my_ft4%decode(ft4_decoded,id2,params%nQSOProgress,params%nfqso, & params%nutc,params%nfa,params%nfb,params%ndepth,ncontest, & diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index baf15fcb1..6b5d01599 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -111,18 +111,15 @@ program ft4sim c0((NN+1)*NSPS:(NN+2)*NSPS-1)=c0((NN+1)*NSPS:(NN+2)*NSPS-1)*(1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS) ))/2.0 c0((NN+2)*NSPS:)=0. - k=nint((xdt+0.35)/dt) + k=nint((xdt+0.5)/dt) c0=cshift(c0,-k) - ia=k do ifile=1,nfiles c=c0 if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c,NZZ,NWAVE,fs,delay,fspread) c=sig*c - - ib=k wave=real(c) - peak=maxval(abs(wave(ia:ib))) + peak=maxval(abs(wave)) nslots=1 if(snrdb.lt.90) then diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index e370b8996..effa11bf9 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -31,7 +31,7 @@ contains class(ft4_decoder), intent(inout) :: this procedure(ft4_decode_callback) :: callback parameter (NSS=NSPS/NDOWN) - + parameter (NZZ=18*3456) character message*37,msgsent*37,msg0*37 character c77*77 character*37 decodes(100) @@ -42,8 +42,8 @@ contains character*6 hhmmss character*4 cqstr,cqstr0 - complex cd2(0:NMAX/NDOWN-1) !Complex waveform - complex cb(0:NMAX/NDOWN-1) + complex cd2(0:NZZ/NDOWN-1) !Complex waveform + complex cb(0:NZZ/NDOWN-1+NN*NSS) complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) complex csymb(NSS) @@ -60,7 +60,7 @@ contains integer apbits(2*ND) integer apmy_ru(28),aphis_fd(28) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) - integer*2 iwave(NMAX) !Raw received data + integer*2 iwave(NZZ) !Raw received data integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) integer*1 hbits(2*NN) integer graymap(0:3) @@ -216,7 +216,7 @@ contains snr=candidate(3,icand)-1.0 call ft4_downsample(iwave,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym if(dobigfft) dobigfft=.false. - sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) + sum2=sum(cd2*conjg(cd2))/(real(NZZ)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! Sample rate is now 12000/16 = 750 samples/second do isync=1,2 @@ -225,15 +225,14 @@ contains idfmax=12 idfstp=3 ibmin=0 -! ibmax=216 !Max DT = 216/750 = 0.288 s - ibmax=432 + ibmax=800 ibstp=4 else idfmin=idfbest-4 idfmax=idfbest+4 idfstp=1 ibmin=max(0,ibest-5) - ibmax=min(ibest+5,NMAX/NDOWN-1) + ibmax=min(ibest+5,NZZ/NDOWN-1) ibstp=1 endif ibest=-1 @@ -462,7 +461,7 @@ contains xsnr=-20.0 endif nsnr=nint(max(-20.0,xsnr)) - xdt=ibest/750.0 - 0.45 + xdt=ibest/750.0 - 0.5 call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate exit diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index c21968906..2ab4342f9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2886,7 +2886,7 @@ void MainWindow::decode() //decode() if(m_mode=="FT8") dec_data.params.lft8apon = ui->actionEnable_AP_FT8->isVisible () && ui->actionEnable_AP_FT8->isChecked (); if(m_mode=="FT8") dec_data.params.napwid=50; - if(m_mode=="FT4") dec_data.params.nmode=-4; + if(m_mode=="FT4") dec_data.params.nmode=5; dec_data.params.ntrperiod=m_TRperiod; dec_data.params.nsubmode=m_nSubMode; if(m_mode=="QRA64") dec_data.params.nsubmode=100 + m_nSubMode; From 50d4120c0cc73a61440b6ec1dbdc508547a754e3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 10:26:47 -0400 Subject: [PATCH 184/367] Add timer calls to FT4 decoder. --- lib/ft4_decode.f90 | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index effa11bf9..500cdd081 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -206,15 +206,19 @@ contains fa=nfa fb=nfb + call timer('getcand4',0) call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand,sbase) + call timer('getcand4',1) ndecodes=0 dobigfft=.true. do icand=1,ncand f0=candidate(1,icand) snr=candidate(3,icand)-1.0 + call timer('ft4_down',0) call ft4_downsample(iwave,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym + call timer('ft4_down',1) if(dobigfft) dobigfft=.false. sum2=sum(cd2*conjg(cd2))/(real(NZZ)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) @@ -238,6 +242,7 @@ contains ibest=-1 smax=-99. idfbest=0 + call timer('sync4d ',0) do idf=idfmin,idfmax,idfstp do istart=ibmin,ibmax,ibstp call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power @@ -248,15 +253,19 @@ contains endif enddo enddo + call timer('sync4d ',1) enddo f0=f0+real(idfbest) if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle ! write(*,3002) smax,ibest/750.0,f0 !3002 format('b',3f8.2) - call ft4_downsample(iwave,dobigfft,f0,cb) !Final downsample with corrected f0 + call timer('ft4down ',0) + call ft4_downsample(iwave,dobigfft,f0,cb) !Final downsample, corrected f0 + call timer('ft4down ',1) sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) cd=cb(ibest:ibest+NN*NSS-1) + call timer('four2a ',0) do k=1,NN i1=(k-1)*NSS csymb=cd(i1:i1+NSS-1) @@ -264,6 +273,7 @@ contains cs(0:3,k)=csymb(1:4) s4(0:3,k)=abs(csymb(1:4)) enddo + call timer('four2a ',1) ! Sync quality check is1=0 @@ -440,8 +450,10 @@ contains endif max_iterations=40 message77=0 + call timer('bpdec174',0) call bpdecode174_91(llr,apmask,max_iterations,message77, & cw,nharderror,niterations) + call timer('bpdec174',1) if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then message77=mod(message77+rvec,2) ! remove rvec scrambling From f24d45cb174117065a47bd635bc10de8912ee790 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 11:13:47 -0400 Subject: [PATCH 185/367] Fix a flaw in FT4 auto-sequencing. --- widgets/mainwindow.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2ab4342f9..1898a9d70 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3051,7 +3051,7 @@ void MainWindow::readFromStdout() //readFromStdout } return; } else { - if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64" or m_mode=="FT8") { + if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") { int n=line_read.indexOf("f"); if(n<0) n=line_read.indexOf("d"); if(n>0) { @@ -3114,7 +3114,7 @@ void MainWindow::readFromStdout() //readFromStdout if(m_mode=="FT8" or m_mode=="FT4") { auto const& parts = decodedtext.string().remove("<").remove(">") .split (' ', QString::SkipEmptyParts); - if (parts.size () > 6) { + if (parts.size() > 6) { auto for_us = parts[5].contains (m_baseCall) || ("DE" == parts[5] && qAbs (ui->RxFreqSpinBox->value () - audioFreq) <= 10); if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[5]) for_us=false; @@ -3192,7 +3192,7 @@ void MainWindow::readFromStdout() //readFromStdout //### I think this is where we are preventing Hounds from spotting Fox ### if(m_mode!="FT8" or (SpecOp::HOUND != m_config.special_op_id())) { - if(m_mode=="FT8" or m_mode=="QRA64" or m_mode=="JT4" or m_mode=="JT65" or m_mode=="JT9") { + if(m_mode=="FT8" or m_mode=="FT4" or m_mode=="QRA64" or m_mode=="JT4" or m_mode=="JT65" or m_mode=="JT9") { auto_sequence (decodedtext, 25, 50); } From 9fe179d396e4e5a55f29207b65f8b1c05e60e86a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 11:48:57 -0400 Subject: [PATCH 186/367] Fix ft8sim_mult to generate synchronous FT4 signals. --- lib/ft4/ft4sim_mult.f90 | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index bc696e814..30831522e 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -6,7 +6,7 @@ program ft4sim_mult use packjt77 include 'ft4_params.f90' !FT4 protocol constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=15*12000) !Length of .wav file, 180,000 i*2 samples + parameter (NZZ=18*3456) !Length of .wav file, 62208 i*2 samples type(hdr) h !Header for .wav file character arg*12,fname*17,cjunk*4 character msg37*37,msgsent37*37,c77*77 @@ -26,20 +26,19 @@ program ft4sim_mult go to 999 endif call getarg(1,arg) - read(arg,*) nsigs !Number of signals + read(arg,*) nsigs !Number of signals call getarg(2,arg) - read(arg,*) nfiles !Number of files + read(arg,*) nfiles !Number of files twopi=8.0*atan(1.0) - fs=12000.0 !Sample rate (Hz) - dt=1.0/fs !Sample interval (s) - hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) - tt=NSPS*dt !Duration of unsmoothed symbols (s) - baud=1.0/tt !Keying rate (baud) - txt=NZ*dt !Transmission length (s) without ramp up/down + fs=12000.0 !Sample rate (Hz) + dt=1.0/fs !Sample interval (s) + hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) + tt=NSPS*dt !Duration of unsmoothed symbols (s) + baud=1.0/tt !Keying rate (baud) + txt=NZ*dt !Transmission length (s) without ramp up/down bandwidth_ratio=2500.0/(fs/2.0) txt=NN*NSPS/12000.0 - xdtmax=10.0 - 0.086 open(10,file='messages.txt',status='old',err=998) do ifile=1,nfiles @@ -57,7 +56,7 @@ program ft4sim_mult if(isnr.lt.-16) isnr=-16 f0=ifreq*93.75/50.0 call random_number(r) - xdt=r*xdtmax + xdt=r-0.5 ! Source-encode, then get itone() i3=-1 n3=-1 From 5aba83b9df741acbc7f0863f4f39cffa9c04fbe5 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 11:49:39 -0400 Subject: [PATCH 187/367] Fix another minor FT4 flaw. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 1898a9d70..4f8d12394 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3031,7 +3031,7 @@ void MainWindow::readFromStdout() //readFromStdout // truncate before line ending chars line_read = line_read.left (p - line_read.constData ()); } - if(m_mode!="FT8") { + if(m_mode!="FT8" and m_mode!="FT4") { //Pad 22-char msg to at least 37 chars line_read = line_read.left(43) + " " + line_read.mid(43); } From b3f62276e752003429fbdb273f07cf7c4015a251 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 12:45:38 -0400 Subject: [PATCH 188/367] Fix the DT values generated in ft4sim_mult. --- lib/ft4/ft4sim_mult.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 30831522e..065b2a76b 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -6,7 +6,7 @@ program ft4sim_mult use packjt77 include 'ft4_params.f90' !FT4 protocol constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=18*3456) !Length of .wav file, 62208 i*2 samples + parameter (NZZ=65760) !Length of .wav file (4.48+1.0)*12000 type(hdr) h !Header for .wav file character arg*12,fname*17,cjunk*4 character msg37*37,msgsent37*37,c77*77 @@ -65,7 +65,7 @@ program ft4sim_mult nwave0=(NN+2)*NSPS call gen_ft4wave(itone,NN,NSPS,12000.0,f0,wave0,nwave0) - k0=nint(xdt/dt) + k0=nint((xdt+0.5)/dt) if(k0.lt.1) k0=1 tmp(:k0-1)=0.0 tmp(k0:k0+nwave0-1)=wave0 From e49e80ffb798444f45bba3c5f9800fbd9cb271c6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 13:15:23 -0400 Subject: [PATCH 189/367] Enable the "TU; ..." message in FT4 mode. --- widgets/mainwindow.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 4f8d12394..0b4b20b7b 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4537,6 +4537,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } else { // no grid on end of msg QString r=message_words.at (3); if(m_QSOProgress >= ROGER_REPORT && (r=="RRR" || r.toInt()==73 || "RR73" == r)) { + if(m_mode=="FT4" and r=="RR73") m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc(); if(ui->tabWidget->currentIndex()==1) { gen_msg = 5; if (ui->rbGenMsg->isChecked ()) m_ntx=7; @@ -4979,7 +4980,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) QDateTime now=QDateTime::currentDateTimeUtc(); int sinceTx3 = m_dateTimeSentTx3.secsTo(now); int sinceRR73 = m_dateTimeRcvdRR73.secsTo(now); - if(m_bDoubleClicked and (qAbs(sinceTx3-12) <= 3) and (sinceRR73 < 5)) { +// qDebug() << "aa" << m_bDoubleClicked << sinceTx3 << sinceRR73; + if(m_bDoubleClicked and (sinceTx3 < 15) and (sinceRR73 < 3)) { t="TU; " + ui->tx3->text(); ui->tx3->setText(t); } @@ -6894,7 +6896,7 @@ void MainWindow::transmit (double snr) } if (m_modeTx == "FT4") { -// toneSpacing=12000.0/512.0; //Generate Tx waveform from itone[] array + m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform. Q_EMIT sendMessage (NUM_FT4_SYMBOLS, 512.0, ui->TxFreqSpinBox->value() - m_XIT, From a545b83bc3ef717cd94d732e15861fcd7cd62217 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 3 Apr 2019 15:40:33 -0400 Subject: [PATCH 190/367] Command-line argument for decoding FT4 files. --- lib/jt9.f90 | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index ff548b46e..7b3b0181e 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -23,7 +23,7 @@ program jt9 integer :: arglen,stat,offset,remain,mode=0,flow=200,fsplit=2700, & fhigh=4000,nrxfreq=1500,ntrperiod=1,ndepth=1,nexp_decode=0 logical :: read_files = .true., tx9 = .false., display_help = .false. - type (option) :: long_options(25) = [ & + type (option) :: long_options(26) = [ & option ('help', .false., 'h', 'Display this help message', ''), & option ('shmem',.true.,'s','Use shared memory for sample data','KEY'), & option ('tr-period', .true., 'p', 'Tx/Rx period, default MINUTES=1', & @@ -48,10 +48,11 @@ program jt9 option ('fft-threads', .true., 'm', & 'Number of threads to process large FFTs, default THREADS=1', & 'THREADS'), & - option ('jt65', .false., '6', 'JT65 mode', ''), & - option ('jt9', .false., '9', 'JT9 mode', ''), & - option ('ft8', .false., '8', 'FT8 mode', ''), & option ('jt4', .false., '4', 'JT4 mode', ''), & + option ('ft4', .false., '5', 'FT4 mode', ''), & + option ('jt65', .false.,'6', 'JT65 mode', ''), & + option ('ft8', .false., '8', 'FT8 mode', ''), & + option ('jt9', .false., '9', 'JT9 mode', ''), & option ('qra64', .false., 'q', 'QRA64 mode', ''), & option ('sub-mode', .true., 'b', 'Sub mode, default SUBMODE=A', 'A'), & option ('depth', .true., 'd', & @@ -76,7 +77,7 @@ program jt9 nsubmode = 0 do - call getopt('hs:e:a:b:r:m:p:d:f:w:t:9864qTL:S:H:c:G:x:g:X:', & + call getopt('hs:e:a:b:r:m:p:d:f:w:t:98654qTL:S:H:c:G:x:g:X:', & long_options,c,optarg,arglen,stat,offset,remain,.true.) if (stat .ne. 0) then exit @@ -113,6 +114,8 @@ program jt9 mode = 164 case ('4') mode = 4 + case ('5') + mode = 5 case ('6') if (mode.lt.65) mode = mode + 65 case ('9') From dac988d4caf844f5c3ffc855c65208aec4aa502f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 4 Apr 2019 10:00:41 -0400 Subject: [PATCH 191/367] New sample file for synchronized FT4. --- samples/FT4/190106_000112.wav | Bin 0 -> 131564 bytes samples/FT4/190106_000115.wav | Bin 360044 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 samples/FT4/190106_000112.wav delete mode 100644 samples/FT4/190106_000115.wav diff --git a/samples/FT4/190106_000112.wav b/samples/FT4/190106_000112.wav new file mode 100644 index 0000000000000000000000000000000000000000..2c6e0a9d49a912b80878257a3a16d0577749f30f GIT binary patch literal 131564 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%0DZXk>CWQLI&1lzy=CE9hR1!&#int8)fU|>6Zm-27 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 aY$L@cEe0f>N7kKb(y8Iop8K7IU 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 literal 0 HcmV?d00001 diff --git a/samples/FT4/190106_000115.wav b/samples/FT4/190106_000115.wav deleted file mode 100644 index cf23159f884b7d4a7719ea4179fef3465c8c66b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360044 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 From ed80b9c7e4c6b5b14a05d636c72c92b8117dd520 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 4 Apr 2019 12:47:10 -0400 Subject: [PATCH 192/367] Remove "TU; " from a double-clicked message before processing it. --- widgets/mainwindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0b4b20b7b..47bc4a2cf 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4314,7 +4314,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers) } return; } - DecodedText message {cursor.block().text()}; + DecodedText message {cursor.block().text().trimmed().remove("TU; ")}; m_bDoubleClicked = true; processMessage (message, modifiers); } @@ -4325,7 +4325,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie auto shift = modifiers.testFlag (Qt::ShiftModifier); auto ctrl = modifiers.testFlag (Qt::ControlModifier); // auto alt = modifiers.testFlag (Qt::AltModifier); - // basic mode sanity checks auto const& parts = message.string ().split (' ', QString::SkipEmptyParts); if (parts.size () < 5) return; @@ -4545,7 +4544,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } else { m_bTUmsg=false; m_nextCall=""; //### Temporary: disable use of "TU;" message - if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") { // We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message logQSOTimer.start(0); From 7f61c7a07b5a53cb14c179e3a61f4b8c566acaf6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 4 Apr 2019 16:20:07 -0400 Subject: [PATCH 193/367] Reactivate the not-GA timneout message, for -rc3. --- widgets/mainwindow.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 47bc4a2cf..22b95f68e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -974,12 +974,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, splashTimer.setSingleShot (true); splashTimer.start (20 * 1000); -/* if(QCoreApplication::applicationVersion().contains("-devel") or QCoreApplication::applicationVersion().contains("-rc")) { QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); } -*/ if(!ui->cbMenus->isChecked()) { ui->cbMenus->setChecked(true); From 8280d8ec96cabe5ac70e2daa8a2d180810e6c7e8 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 5 Apr 2019 11:10:50 +0100 Subject: [PATCH 194/367] Prep for a release candidate --- Versions.cmake | 2 +- samples/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Versions.cmake b/Versions.cmake index 779d7a887..f3eec78ee 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 3) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index cab1609cb..6be6a6df2 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,5 +1,5 @@ set (SAMPLE_FILES - FT4/190106_000115.wav + FT4/190106_000112.wav FT8/181201_180245.wav ISCAT/ISCAT-A/VK7MO_110401_235515.wav ISCAT/ISCAT-B/K0AWU_100714_115000.wav From 6b575d002921a6e826f3997cb6b72beedec759a1 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 5 Apr 2019 11:38:45 +0100 Subject: [PATCH 195/367] Latest AD1C cty.dat - BIG.CTY 27 March 2019 version --- cty.dat | 85 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/cty.dat b/cty.dat index 1f533072f..8da4e07fe 100644 --- a/cty.dat +++ b/cty.dat @@ -32,7 +32,7 @@ Vietnam: 26: 49: AS: 15.80: -107.90: -7.0: 3W: Guinea: 35: 46: AF: 11.00: 10.68: 0.0: 3X: 3X; Bouvet: 38: 67: AF: -54.42: -3.38: -1.0: 3Y/b: - =3Y/ZS6GCM,=3Y0C,=3Y0E; + =3Y/ZS6GCM,=3Y0C,=3Y0E,=3Y0I; Peter 1 Island: 12: 72: SA: -68.77: 90.58: 4.0: 3Y/p: =3Y0X; Azerbaijan: 21: 29: AS: 40.45: -47.37: -4.0: 4J: @@ -588,7 +588,7 @@ Cuba: 08: 11: NA: 21.50: 80.00: 5.0: CM: Morocco: 33: 37: AF: 32.00: 5.00: 0.0: CN: 5C,5D,5E,5F,5G,CN; Bolivia: 10: 12: SA: -17.00: 65.00: 4.0: CP: - CP,=VERSION, + CP, CP2[14], CP3[14], CP4[14], @@ -676,7 +676,8 @@ Spain: 14: 37: EU: 40.37: 4.88: -1.0: EA: =AO08CIK/H,=AO08CVV/Z,=AO08CXK/H,=AO08CYL/H,=AO08DI/Z,=AO08EIE/Z,=AO08HV/Z,=AO08ICA/Z,=AO08ID/Z, =AO08KJ/Z,=AO08KV/Z,=AO08OK/H,=AO08PB/Z,=AO08RKO/H,=AO08VK/Z,=AO2016DSS/LH,=EA2/ON7RU/LH, =EA2CRX/LH,=EA2EZ/P,=EA2SPS/LH,=EA2URI/O,=EA6SK/2,=EA9CP/2,=EG90IARU/2, - =EA3ESZ/Z,=EA3EVR/R,=EA3HSD/P,=EA3LD/D,=EA3RCV/PAZ,=EA8TL/3,=EA9CI/3,=EA9CP/3,=EG90IARU/3, + =EA3ESZ/Z,=EA3EVR/R,=EA3HSD/P,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3, + =EG90IARU/3, =EA4AAQ/O,=EA4RCH/CIE,=EA6AFU/4,=EA6RC/4,=EA8BFH/4,=EA8BY/4,=EA9CI/4,=EA9CP/4,=EG8AOP/4, =EG90IARU/4, =EA5ADM/P,=EA5CC/P,=EA5EQ/N,=EA5EZ/P,=EA5FL/LH,=EA5GVT/AVW,=EA5HCC/P,=EA5IKT/P,=EA5KB/LH,=EA5ND/D, @@ -2245,7 +2246,7 @@ Cote d'Ivoire: 35: 46: AF: 7.58: 5.80: 0.0: TU: Benin: 35: 46: AF: 9.87: -2.25: -1.0: TY: TY; Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: - TZ; + TZ,=VERSION; European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: R,U,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R7AB/P,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF, =R9AV/6,=R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, @@ -2262,8 +2263,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =RN85AM,=RN85KN,=RT9T/1,=RU2FB/1,=RU9YT/1,=RU9YT/1/P,=RV1CC/M,=RW1AI/ANT,=RW8W/1,=RW9QA/1, =RX3AMI/1/LH,=UA1ADQ/ANT,=UA1BJ/ANT,=UA1JJ/ANT,=UA2FFX/1,=UA9B/1,=UA9KG/1,=UA9KGH/1,=UA9KK/1, =UA9UDX/1,=UB9YUW/1,=UE21A,=UE21B,=UE21M,=UE22A,=UE25AC,=UE25AQ,=UE2AT/1, - =R0XAC/1,=R900DM,=R90LPU,=R9JNO/1,=RA0FU/1,=RA9FNV/1,=RU9MU/1,=RV0CA/1,=RV2FW/1,=RV9JD/1,=RX9TN/1, - =UA0BDS/1,=UA0SIK/1,=UA1CDA/LH,=UA1CIO/LH,=UA9MQR/1,=UB5O/1, + =R0XAC/1,=R900DM,=R90LPU,=R9JNO/1,=RA0FU/1,=RA9FNV/1,=RN9N/1,=RU9MU/1,=RV0CA/1,=RV2FW/1,=RV9JD/1, + =RX9TN/1,=UA0BDS/1,=UA0SIK/1,=UA1CDA/LH,=UA1CIO/LH,=UA9MQR/1,=UB5O/1, R1N[19],RA1N[19],RC1N[19],RD1N[19],RE1N[19],RF1N[19],RG1N[19],RJ1N[19],RK1N[19],RL1N[19],RM1N[19], RN1N[19],RO1N[19],RQ1N[19],RT1N[19],RU1N[19],RV1N[19],RW1N[19],RX1N[19],RY1N[19],RZ1N[19],U1N[19], UA1N[19],UB1N[19],UC1N[19],UD1N[19],UE1N[19],UF1N[19],UG1N[19],UH1N[19],UI1N[19],=R01DTV/1[19], @@ -2317,8 +2318,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R110A/P,=R80PVB, =RA9XF/3,=RC80KEDR,=RD0L/3,=RK0BWW/3,=RN80KEDR,=RW9XC/3/M,=RX3XX/N,=UA0KBA/3/P,=UA9SIV/3, =UE0ZOO/3, - =R100WWS,=R85WTA,=R8FF/3/P,=R98KPM,=R99KPM,=RA3YV/ANT,=RK0UT/3,=RW0LX/3,=UA3YH/ANT,=UA9KZ/3, - =UB8JAF/3,=UE91L,=UE95K,=UE95RA, + =R85WTA,=R8FF/3/P,=R98KPM,=R99KPM,=RA3YV/ANT,=RK0UT/3,=RW0LX/3,=UA3YH/ANT,=UA9KZ/3,=UB8JAF/3, + =UE91L,=UE95K,=UE95RA, =R3ZK/FF,=RA3ZZ/ANT,=RA9AK/3,=RA9KD/3,=RU3ZK/FF,=RW0BG/3,=UA0QBC/3, =RA07DR,=RA9ODR/4/M,=RC4AF/FF,=RN4ACA/FF,=RU9CK/6/M,=UA4ASE/FF,=UA4ATL/FF,=UA8WAA/6,=UA9FGR/4, =UE00S,=UE00S/P,=UE09VG,=UE80RWW, @@ -2503,15 +2504,15 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: RU9J[20],RV8J[20],RV9J[20],RW8J[20],RW9J[20],RX8J[20],RX9J[20],RY8J[20],RY9J[20],RZ8J[20], RZ9J[20],U8J[20],U9J[20],UA8J[20],UA9J[20],UB8J[20],UB9J[20],UC8J[20],UC9J[20],UD8J[20],UD9J[20], UE8J[20],UE9J[20],UF8J[20],UF9J[20],UG8J[20],UG9J[20],UH8J[20],UH9J[20],UI8J[20],UI9J[20], - =R120RJ[20],=R123JDR[20],=R15UGRA[20],=R16UGRA[20],=R18KSA[20],=R25ARCK/8[20],=R2AEA/9[20], - =R4YAC/9[20],=R8JAJ/M[20],=RA/UR8IF[20],=RA/UT2LA[20],=RA1QBH/9[20],=RA3ARS/9[20],=RA3ARS/9/M[20], - =RA3QQI/8[20],=RA4FCJ/9[20],=RA4HRM/9[20],=RA9WN/9[20],=RD4HM/9[20],=RJ9J[20],=RK4PA/9[20], - =RK6ANP/9[20],=RK6YM/8[20],=RK6YM/9[20],=RP67GS[20],=RP68GS[20],=RP68J[20],=RP68LK[20], - =RP69GS[20],=RP69SF[20],=RP70GS[20],=RP70LF[20],=RP70SF[20],=RP70SU[20],=RP70YF[20],=RP71GS[20], - =RP71LF[20],=RP71SF[20],=RP72DS[20],=RP72GS[20],=RP72SF[20],=RP72YF[20],=RP73GS[20],=RP73SF[20], - =RQ0C/8[20],=RU6YD/9[20],=RV6YM/9[20],=RW4HOH/9[20],=RW4LX/9[20],=RW6AHV/9[20],=RW9WX/9[20], - =RX3BP/9[20],=RX3BP/9/MM[20],=RZ5D/8[20],=RZ9WF/8[20],=RZ9WF/9[20],=UA3ZAF/9[20],=UA6WIO/9[20], - =UA9JFN/M[20], + =R11UND[20],=R120RJ[20],=R123JDR[20],=R15UGRA[20],=R16UGRA[20],=R18KSA[20],=R25ARCK/8[20], + =R2AEA/9[20],=R4YAC/9[20],=R8JAJ/M[20],=RA/UR8IF[20],=RA/UT2LA[20],=RA1QBH/9[20],=RA3ARS/9[20], + =RA3ARS/9/M[20],=RA3QQI/8[20],=RA4FCJ/9[20],=RA4HRM/9[20],=RA9WN/9[20],=RD4HM/9[20],=RJ9J[20], + =RK4PA/9[20],=RK6ANP/9[20],=RK6YM/8[20],=RK6YM/9[20],=RP67GS[20],=RP68GS[20],=RP68J[20], + =RP68LK[20],=RP69GS[20],=RP69SF[20],=RP70GS[20],=RP70LF[20],=RP70SF[20],=RP70SU[20],=RP70YF[20], + =RP71GS[20],=RP71LF[20],=RP71SF[20],=RP72DS[20],=RP72GS[20],=RP72SF[20],=RP72YF[20],=RP73GS[20], + =RP73SF[20],=RQ0C/8[20],=RU6YD/9[20],=RV6YM/9[20],=RW4HOH/9[20],=RW4LX/9[20],=RW6AHV/9[20], + =RW9WX/9[20],=RX3BP/9[20],=RX3BP/9/MM[20],=RZ5D/8[20],=RZ9WF/8[20],=RZ9WF/9[20],=UA3ZAF/9[20], + =UA6WIO/9[20],=UA9JFN/M[20], R8K[20],R9K[20],RA8K[20],RA9K[20],RC8K[20],RC9K[20],RD8K[20],RD9K[20],RE8K[20],RE9K[20],RF8K[20], RF9K[20],RG8K[20],RG9K[20],RI9K[20],RJ8K[20],RJ9K[20],RK8K[20],RK9K[20],RL8K[20],RL9K[20], RM8K[20],RM9K[20],RN8K[20],RN9K[20],RO8K[20],RO9K[20],RQ8K[20],RQ9K[20],RT8K[20],RT9K[20], @@ -2616,30 +2617,30 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RP69KM(18)[31],=RP70KM(18)[31],=RP70NM(18)[31],=RP70UK(18)[31],=RP70ZF(18)[31],=RP71KM(18)[31], =RP72KM(18)[31],=RP72NM(18)[31],=RP73KM(18)[31],=RP73NZ(18)[31],=RP73ZF(18)[31],=RT22UA(18)[31], =RT77VV(18)[31],=RW4CG/9(18)[31],=RZ5D/9(18)[31],=UA9JFE/9/P(18)[31],=UE3ATV/9(18)[31], - R100W(16),R8W(16),R9W(16),RA8W(16),RA9W(16),RC8W(16),RC9W(16),RD8W(16),RD9W(16),RE8W(16),RE9W(16), - RF8W(16),RF9W(16),RG8W(16),RG9W(16),RJ8W(16),RJ9W(16),RK8W(16),RK9W(16),RL8W(16),RL9W(16), - RM8W(16),RM9W(16),RN8W(16),RN9W(16),RO8W(16),RO9W(16),RQ8W(16),RQ9W(16),RT8W(16),RT9W(16), - RU8W(16),RU9W(16),RV8W(16),RV9W(16),RW8W(16),RW9W(16),RX8W(16),RX9W(16),RY8W(16),RY9W(16), - RZ8W(16),RZ9W(16),U8W(16),U9W(16),UA8W(16),UA9W(16),UB8W(16),UB9W(16),UC8W(16),UC9W(16),UD8W(16), - UD9W(16),UE8W(16),UE9W(16),UF8W(16),UF9W(16),UG8W(16),UG9W(16),UH8W(16),UH9W(16),UI8W(16), - UI9W(16),=R100W(16),=R10RTRS/9(16),=R18KDR/4(16),=R2013CG(16),=R2015AS(16),=R2015DS(16), - =R2015KM(16),=R2017F/P(16),=R20BIS(16),=R20UFA(16),=R25ARCK/4(16),=R25MSB(16),=R25WPW(16), - =R27UFA(16),=R3XX/9(16),=R44WFF(16),=R7378TM(16),=R8JAJ/4(16),=R8JAJ/9(16),=R90WGM(16), - =R90WJV(16),=R90WOB(16),=R90WXK(16),=R9LY/4(16),=RA0R/4(16),=RA1ZPC/9(16),=RA3AUU/9(16), - =RA4POX/9(16),=RA9KDX/8/M(16),=RF9W(16),=RG5A/8(16),=RK3PWJ/9(16),=RK6YYA/9/M(16),=RK9KWI/9(16), - =RK9KWI/9/P(16),=RL3DX/9(16),=RM90WF(16),=RM9RZ/9/P(16),=RN9WWW/9/M(16),=RN9WWW/P(16),=RO17CW(16), - =RP67GI(16),=RP67MG(16),=RP67NG(16),=RP67RK(16),=RP67SW(16),=RP67UF(16),=RP68GM(16),=RP68NK(16), - =RP68UF(16),=RP69GI(16),=RP69PW(16),=RP69UF(16),=RP70GI(16),=RP70GM(16),=RP70LS(16),=RP70NK(16), - =RP70UF(16),=RP70ZO(16),=RP71GI(16),=RP71GM(16),=RP71UF(16),=RP72AR(16),=RP72GI(16),=RP72GM(16), - =RP72UF(16),=RP72WU(16),=RP73AR(16),=RP73GI(16),=RP73UF(16),=RP73WU(16),=RT22WF(16),=RT2F/4(16), - =RT2F/4/M(16),=RT2F/9/M(16),=RT73EA(16),=RT73EL(16),=RT8A/4(16),=RT9W(16),=RT9W/P(16), - =RU110RAEM(16),=RU20WC(16),=RU22WZ(16),=RU27WB(16),=RU27WF(16),=RU27WN(16),=RU27WO(16), - =RU3HD/9/P(16),=RU90WZ(16),=RU9KC/4/M(16),=RU9SO/4(16),=RU9SO/4/P(16),=RV22WB(16),=RV2FZ/9(16), - =RV90WB(16),=RV9CHB/4(16),=RW3SN/9(16),=RW3XX/9(16),=RW4WA/9/P(16),=RW90WC(16),=RW9FWR/9/M(16), - =RW9JZ/4(16),=RW9JZ/9(16),=RX22WN(16),=RZ16WF(16),=RZ90W(16),=RZ90WU(16),=UA0AZA/9(16), - =UA1AAE/9(16),=UA1ZPC/9(16),=UA4LU/9/P(16),=UA4PIE/9(16),=UA4PIE/9/M(16),=UA4PIE/9/P(16), - =UA4PJM/9(16),=UA4PJM/9/M(16),=UA4PJM/9/P(16),=UA4PXR/9/M(16),=UA9KAA/4(16),=UA9KAA/9(16), - =UB5O/4/M(16),=UE10RFF/4(16),=UE90W(16), + R8W(16),R9W(16),RA8W(16),RA9W(16),RC8W(16),RC9W(16),RD8W(16),RD9W(16),RE8W(16),RE9W(16),RF8W(16), + RF9W(16),RG8W(16),RG9W(16),RJ8W(16),RJ9W(16),RK8W(16),RK9W(16),RL8W(16),RL9W(16),RM8W(16), + RM9W(16),RN8W(16),RN9W(16),RO8W(16),RO9W(16),RQ8W(16),RQ9W(16),RT8W(16),RT9W(16),RU8W(16), + RU9W(16),RV8W(16),RV9W(16),RW8W(16),RW9W(16),RX8W(16),RX9W(16),RY8W(16),RY9W(16),RZ8W(16), + RZ9W(16),U8W(16),U9W(16),UA8W(16),UA9W(16),UB8W(16),UB9W(16),UC8W(16),UC9W(16),UD8W(16),UD9W(16), + UE8W(16),UE9W(16),UF8W(16),UF9W(16),UG8W(16),UG9W(16),UH8W(16),UH9W(16),UI8W(16),UI9W(16), + =R100W(16),=R10RTRS/9(16),=R18KDR/4(16),=R2013CG(16),=R2015AS(16),=R2015DS(16),=R2015KM(16), + =R2017F/P(16),=R20BIS(16),=R20UFA(16),=R25ARCK/4(16),=R25MSB(16),=R25WPW(16),=R27UFA(16), + =R3XX/9(16),=R44WFF(16),=R7378TM(16),=R8JAJ/4(16),=R8JAJ/9(16),=R90WGM(16),=R90WJV(16), + =R90WOB(16),=R90WXK(16),=R9LY/4(16),=RA0R/4(16),=RA1ZPC/9(16),=RA3AUU/9(16),=RA4POX/9(16), + =RA9KDX/8/M(16),=RF9W(16),=RG5A/8(16),=RK3PWJ/9(16),=RK6YYA/9/M(16),=RK9KWI/9(16),=RK9KWI/9/P(16), + =RL3DX/9(16),=RM90WF(16),=RM9RZ/9/P(16),=RN9WWW/9/M(16),=RN9WWW/P(16),=RO17CW(16),=RP67GI(16), + =RP67MG(16),=RP67NG(16),=RP67RK(16),=RP67SW(16),=RP67UF(16),=RP68GM(16),=RP68NK(16),=RP68UF(16), + =RP69GI(16),=RP69PW(16),=RP69UF(16),=RP70GI(16),=RP70GM(16),=RP70LS(16),=RP70NK(16),=RP70UF(16), + =RP70ZO(16),=RP71GI(16),=RP71GM(16),=RP71UF(16),=RP72AR(16),=RP72GI(16),=RP72GM(16),=RP72UF(16), + =RP72WU(16),=RP73AR(16),=RP73GI(16),=RP73UF(16),=RP73WU(16),=RT22WF(16),=RT2F/4(16),=RT2F/4/M(16), + =RT2F/9/M(16),=RT73EA(16),=RT73EL(16),=RT8A/4(16),=RT9W(16),=RT9W/P(16),=RU110RAEM(16), + =RU20WC(16),=RU22WZ(16),=RU27WB(16),=RU27WF(16),=RU27WN(16),=RU27WO(16),=RU3HD/9/P(16), + =RU90WZ(16),=RU9KC/4/M(16),=RU9SO/4(16),=RU9SO/4/P(16),=RV22WB(16),=RV2FZ/9(16),=RV90WB(16), + =RV9CHB/4(16),=RW3SN/9(16),=RW3XX/9(16),=RW4WA/9/P(16),=RW90WC(16),=RW9FWR/9/M(16),=RW9JZ/4(16), + =RW9JZ/9(16),=RX22WN(16),=RZ16WF(16),=RZ90W(16),=RZ90WU(16),=UA0AZA/9(16),=UA1AAE/9(16), + =UA1ZPC/9(16),=UA4LU/9/P(16),=UA4PIE/9(16),=UA4PIE/9/M(16),=UA4PIE/9/P(16),=UA4PJM/9(16), + =UA4PJM/9/M(16),=UA4PJM/9/P(16),=UA4PXR/9/M(16),=UA9KAA/4(16),=UA9KAA/9(16),=UB5O/4/M(16), + =UE10RFF/4(16),=UE90W(16), R8Y(18)[31],R9Y(18)[31],RA8Y(18)[31],RA9Y(18)[31],RC8Y(18)[31],RC9Y(18)[31],RD8Y(18)[31], RD9Y(18)[31],RE8Y(18)[31],RE9Y(18)[31],RF8Y(18)[31],RF9Y(18)[31],RG8Y(18)[31],RG9Y(18)[31], RJ8Y(18)[31],RJ9Y(18)[31],RK8Y(18)[31],RK9Y(18)[31],RL8Y(18)[31],RL9Y(18)[31],RM8Y(18)[31], @@ -2914,7 +2915,7 @@ Marshall Islands: 31: 65: OC: 9.08: -167.33: -12.0: V7: Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8: V8; Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: - CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190319, + CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190327, =CF7AAW/1,=CK7IG/1,=VA3QSL/1,=VA3WR/1,=VE1REC/LH,=VE1REC/M/LH,=VE3RSA/1,=VE7IG/1, CF2[4],CG2[4],CJ2[4],CK2[4],VA2[4],VB2[4],VC2[4],VE2[4],VG2[4],VX2[4],XL2[4],XM2[4],=4Y1CAO[4], =CY2ZT/2[4],=VA3ELE/2[4],=VA3MPM/2[4],=VA7AQ/P[4],=VE2/G3ZAY/P[4],=VE2/M0BLF/P[4],=VE2FK[9], From 964c1487940f8830c29877291f0ae0f4928d1c7f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sun, 7 Apr 2019 13:36:29 -0400 Subject: [PATCH 196/367] Fix the UTC displayed at left of waterfall in FT4 mode. --- widgets/plotter.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 60f0892c3..38e5027a9 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -241,7 +241,6 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) QString t; qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; int n=(ms/1000) % m_TRperiod; - if(m_mode=="FT4") n=0; QDateTime t1=QDateTime::currentDateTimeUtc().addSecs(-n); if(m_TRperiod < 60 or m_mode=="FT4") { t=t1.toString("hh:mm:ss") + " " + m_rxBand; From ec97d0410e641f475da8729807fa0f25adf9d492 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sun, 7 Apr 2019 21:08:38 -0400 Subject: [PATCH 197/367] Possibly temporary: add a "Call Best" button for S+P use in FT4 mode. --- widgets/mainwindow.cpp | 2 ++ widgets/mainwindow.ui | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 22b95f68e..beec545a3 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -979,6 +979,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); } + ui->pbCallBest->setVisible(m_mode=="FT4"); if(!ui->cbMenus->isChecked()) { ui->cbMenus->setChecked(true); ui->cbMenus->setChecked(false); @@ -5574,6 +5575,7 @@ void MainWindow::displayWidgets(qint64 n) if(i==32) ui->cbCQonly->setVisible(b); j=j>>1; } + ui->pbCallBest->setVisible(m_mode=="FT4"); b=SpecOp::EU_VHF==m_config.special_op_id() or (SpecOp::RTTY==m_config.special_op_id() and (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="SCC")); ui->sbSerialNumber->setVisible(b); diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index a779cb413..8ae8d17ca 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -1338,6 +1338,13 @@ QPushButton[state="ok"] { + + + + Call Best + + + From b6032277d08a782b96cf1ef9e86e5486f93da787 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 8 Apr 2019 12:36:05 -0400 Subject: [PATCH 198/367] The "Best S+P" button is now functional. Needs testing! --- models/models.pri | 6 ++++-- widgets/displaytext.cpp | 3 +++ widgets/displaytext.h | 2 ++ widgets/mainwindow.cpp | 40 ++++++++++++++++++++++++++++++++++------ widgets/mainwindow.h | 3 +++ widgets/mainwindow.ui | 4 ++-- 6 files changed, 48 insertions(+), 10 deletions(-) diff --git a/models/models.pri b/models/models.pri index e0c69e81e..5b3d038bb 100644 --- a/models/models.pri +++ b/models/models.pri @@ -5,7 +5,8 @@ SOURCES += \ models/Modes.cpp \ models/IARURegions.cpp \ models/FoxLog.cpp \ - models/CabrilloLog.cpp + models/CabrilloLog.cpp \ + models/DecodeHighlightingModel.cpp HEADERS += \ models/Bands.hpp \ @@ -15,4 +16,5 @@ HEADERS += \ models/IARURegions.hpp \ models/FoxLog.hpp \ models/CabrilloLog.hpp \ - models/FontOverrideModel.hpp + models/FontOverrideModel.hpp \ + models/DecodeHighlightingModel.hpp diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index eca4dd4f5..c0bcd4129 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -374,6 +374,7 @@ QString DisplayText::appendWorkedB4 (QString message, QString call, QString cons appendage += countryName; } } + m_CQPriority=DecodeHighlightingModel::highlight_name(top_highlight); // use a nbsp to save the start of appended text so we can find // it again later, align appended data at a fixed column if @@ -423,6 +424,7 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; if(!dxGrid.contains(grid_regexp)) dxGrid=""; message = message.left (message.indexOf (QChar::Nbsp)); // strip appended info + m_CQPriority=""; if (CQcall) { if (displayDXCCEntity) @@ -447,6 +449,7 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con set_colours (m_config, &bg, &fg, types); } } + appendText (message.trimmed (), bg, fg, decodedText.call (), dxCall); } diff --git a/widgets/displaytext.h b/widgets/displaytext.h index cd3426af9..7f308bef8 100644 --- a/widgets/displaytext.h +++ b/widgets/displaytext.h @@ -35,6 +35,7 @@ public: void displayQSY(QString text); void displayFoxToBeCalled(QString t, QColor bg = QColor {}, QColor fg = QColor {}); void new_period (); + QString CQPriority(){return m_CQPriority;}; Q_SIGNAL void selectCallsign (Qt::KeyboardModifiers); Q_SIGNAL void erased (); @@ -51,6 +52,7 @@ private: Configuration const * m_config; bool m_bPrincipalPrefix; + QString m_CQPriority; QString appendWorkedB4(QString message, QString callsign , QString const& grid, QColor * bg, QColor * fg , LogBook const& logBook, QString const& currentBand diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index beec545a3..c6c2f082e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -979,7 +979,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, QTimer::singleShot (0, this, SLOT (not_GA_warning_message ())); } - ui->pbCallBest->setVisible(m_mode=="FT4"); + ui->pbBestSP->setVisible(m_mode=="FT4"); if(!ui->cbMenus->isChecked()) { ui->cbMenus->setChecked(true); ui->cbMenus->setChecked(false); @@ -2885,7 +2885,10 @@ void MainWindow::decode() //decode() if(m_mode=="FT8") dec_data.params.lft8apon = ui->actionEnable_AP_FT8->isVisible () && ui->actionEnable_AP_FT8->isChecked (); if(m_mode=="FT8") dec_data.params.napwid=50; - if(m_mode=="FT4") dec_data.params.nmode=5; + if(m_mode=="FT4") { + dec_data.params.nmode=5; + m_BestCQpriority=""; + } dec_data.params.ntrperiod=m_TRperiod; dec_data.params.nsubmode=m_nSubMode; if(m_mode=="QRA64") dec_data.params.nsubmode=100 + m_nSubMode; @@ -3104,6 +3107,17 @@ void MainWindow::readFromStdout() //readFromStdout ui->decodedTextBrowser->displayDecodedText(decodedtext0,m_baseCall,m_mode,m_config.DXCC(), m_logBook,m_currentBand,m_config.ppfx(), (ui->cbCQonly->isVisible() and ui->cbCQonly->isChecked())); + if(m_bBestSPArmed and m_mode=="FT4") { + QString messagePriority=ui->decodedTextBrowser->CQPriority(); + if(messagePriority!="") { + if(messagePriority=="New Call on Band" + and m_BestCQpriority!="New Call on Band" + and m_BestCQpriority!="New Multiplier") { + m_BestCQpriority="New Call on Band"; + processMessage(decodedtext0); + } + } + } } } @@ -3135,9 +3149,10 @@ void MainWindow::readFromStdout() //readFromStdout if (bDisplayRight) { // This msg is within 10 hertz of our tuned frequency, or a JT4 or JT65 avg, // or contains MyCall - ui->decodedTextBrowser2->displayDecodedText(decodedtext0,m_baseCall,m_mode,m_config.DXCC(), - m_logBook,m_currentBand,m_config.ppfx()); - + if(!m_bBestSPArmed or m_mode!="FT4") { + ui->decodedTextBrowser2->displayDecodedText(decodedtext0,m_baseCall,m_mode,m_config.DXCC(), + m_logBook,m_currentBand,m_config.ppfx()); + } if(m_mode!="JT4") { bool b65=decodedtext.isJT65(); if(b65 and m_modeTx!="JT65") on_pbTxMode_clicked(); @@ -3614,6 +3629,13 @@ void MainWindow::guiUpdate() m_ntx=1; ui->txrb1->setChecked(true); } + + if(m_mode=="FT4" and m_bBestSPArmed) { + m_BestCQpriority=""; + m_bBestSPArmed=false; + ui->pbBestSP->setStyleSheet (""); + } + if(m_ntx == 1) ba=ui->tx1->text().toLocal8Bit(); if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit(); if(m_ntx == 3) ba=ui->tx3->text().toLocal8Bit(); @@ -5575,7 +5597,7 @@ void MainWindow::displayWidgets(qint64 n) if(i==32) ui->cbCQonly->setVisible(b); j=j>>1; } - ui->pbCallBest->setVisible(m_mode=="FT4"); + ui->pbBestSP->setVisible(m_mode=="FT4"); b=SpecOp::EU_VHF==m_config.special_op_id() or (SpecOp::RTTY==m_config.special_op_id() and (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="SCC")); ui->sbSerialNumber->setVisible(b); @@ -8671,3 +8693,9 @@ void MainWindow::chkFT4() on_contest_log_action_triggered(); } } + +void MainWindow::on_pbBestSP_clicked() +{ + ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); + m_bBestSPArmed=true; +} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 6bce17978..13720e092 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -312,6 +312,7 @@ private slots: void on_comboBoxHoundSort_activated (int index); void not_GA_warning_message (); void checkMSK144ContestType(); + void on_pbBestSP_clicked(); int setTxMsg(int n); bool stdCall(QString const& w); @@ -520,6 +521,7 @@ private: bool m_bCheckedContest; bool m_bWarnedSplit=false; bool m_bTUmsg; + bool m_bBestSPArmed=false; enum { @@ -615,6 +617,7 @@ private: QString m_nextGrid; QString m_fileDateTime; QString m_inQSOwith; + QString m_BestCQpriority; QSet m_pfx; QSet m_sfx; diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index 8ae8d17ca..bb5fe2ffa 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -1339,9 +1339,9 @@ QPushButton[state="ok"] { - + - Call Best + Best S+P From 6e1d5ea1d82619bf923e0a8537aa7495449d1ccb Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 8 Apr 2019 12:52:23 -0400 Subject: [PATCH 199/367] BestSP calls New DXCC as well as New Call on Band. --- widgets/mainwindow.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index c6c2f082e..a1fccb23d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3116,6 +3116,12 @@ void MainWindow::readFromStdout() //readFromStdout m_BestCQpriority="New Call on Band"; processMessage(decodedtext0); } + if(messagePriority=="New DXCC" + and m_BestCQpriority!="New DXCC" + and m_BestCQpriority!="New Multiplier") { + m_BestCQpriority="New DXCC"; + processMessage(decodedtext0); + } } } } From 20bed3832320099ae74ff7fe58fc034f75c21628 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 8 Apr 2019 13:18:30 -0400 Subject: [PATCH 200/367] Best S+P activates only when not transmitting. --- widgets/mainwindow.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a1fccb23d..5dd5ed60e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8702,6 +8702,8 @@ void MainWindow::chkFT4() void MainWindow::on_pbBestSP_clicked() { - ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); - m_bBestSPArmed=true; + if(!m_transmitting) { + ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); + m_bBestSPArmed=true; + } } From 2b42650a73ec1e4d82c68c68941aefba7a440b7e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 9 Apr 2019 08:48:13 -0400 Subject: [PATCH 201/367] Make the "Best S+P" button red when activated. --- widgets/mainwindow.cpp | 13 ++++--------- widgets/mainwindow.ui | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 5dd5ed60e..fdefd8edb 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1997,11 +1997,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) on_stopTxButton_clicked(); abortQSO(); return; - case Qt::Key_X: - if(e->modifiers() & Qt::AltModifier) { -// foxTest(); - return; - } case Qt::Key_E: if((e->modifiers() & Qt::ShiftModifier) and SpecOp::FOX > m_config.special_op_id()) { ui->txFirstCheckBox->setChecked(false); @@ -8702,8 +8697,8 @@ void MainWindow::chkFT4() void MainWindow::on_pbBestSP_clicked() { - if(!m_transmitting) { - ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); - m_bBestSPArmed=true; - } + m_bBestSPArmed = !m_bBestSPArmed; + ui->pbBestSP->setChecked(m_bBestSPArmed); +// if(m_bBestSPArmed and !m_transmitting) ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); +// if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); } diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index bb5fe2ffa..8b7980742 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -1340,9 +1340,23 @@ QPushButton[state="ok"] { + + QPushButton:checked { + background-color: red; + border-style: outset; + border-width: 1px; + border-radius: 5px; + border-color: black; + min-width: 5em; + padding: 3px; +} + Best S+P + + true + From b74b1d6ea3e8f0ee0a237cf5aacc029b4b4949f9 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 9 Apr 2019 22:50:32 +0100 Subject: [PATCH 202/367] RC4 --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index f3eec78ee..8f0591243 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 3) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 4) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From 2633f6fb6dce9decfea38385aac72e73eead431a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 9 Apr 2019 20:12:48 -0400 Subject: [PATCH 203/367] Make the label red, not the whole button. --- widgets/mainwindow.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index fdefd8edb..a9c45e1b5 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8698,7 +8698,8 @@ void MainWindow::chkFT4() void MainWindow::on_pbBestSP_clicked() { m_bBestSPArmed = !m_bBestSPArmed; - ui->pbBestSP->setChecked(m_bBestSPArmed); -// if(m_bBestSPArmed and !m_transmitting) ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); -// if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); +// ui->pbBestSP->setChecked(m_bBestSPArmed); + qDebug() << "aa" << m_bBestSPArmed; + if(m_bBestSPArmed and !m_transmitting) ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); + if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); } From 56c1aacbc2ca8d959eb9a7697cd6cfcbcaf9ebde Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 9 Apr 2019 22:03:59 -0400 Subject: [PATCH 204/367] Remove a diagnostic qDebug(). --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a9c45e1b5..e9c0fa031 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8699,7 +8699,7 @@ void MainWindow::on_pbBestSP_clicked() { m_bBestSPArmed = !m_bBestSPArmed; // ui->pbBestSP->setChecked(m_bBestSPArmed); - qDebug() << "aa" << m_bBestSPArmed; +// qDebug() << "aa" << m_bBestSPArmed; if(m_bBestSPArmed and !m_transmitting) ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); } From cd8ea16f4076b9adb6d95f04b122a1b20323696a Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 12 Apr 2019 17:11:26 -0500 Subject: [PATCH 205/367] FT8: Use GFSK waveform with BT=4.0 as reference for subtraction, for now. May want to change to BT=2.0 before v2.1 release? --- lib/ft8/ft8sim_gfsk.f90 | 3 ++- lib/ft8/gen_ft8wave.f90 | 13 ++++++------- lib/ft8/subtractft8.f90 | 12 +++++++++--- widgets/mainwindow.cpp | 5 +++-- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/ft8/ft8sim_gfsk.f90 b/lib/ft8/ft8sim_gfsk.f90 index aba046cef..4cca67e48 100644 --- a/lib/ft8/ft8sim_gfsk.f90 +++ b/lib/ft8/ft8sim_gfsk.f90 @@ -57,6 +57,7 @@ program ft8sim_gfsk baud=1.0/tt !Keying rate (baud) bw=8*baud !Occupied bandwidth (Hz) txt=NZ*dt !Transmission length (s) + bt=2.0 bandwidth_ratio=2500.0/(fs/2.0) sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) if(snrdb.gt.90.0) sig=1.0 @@ -67,7 +68,7 @@ program ft8sim_gfsk n3=-1 call pack77(msg37,i3,n3,c77) call genft8(msg37,i3,n3,msgsent37,msgbits,itone) - call gen_ft8wave(itone,NN,NSPS,fs,f0,cwave,xjunk,1,NWAVE) !Generate complex cwave + call gen_ft8wave(itone,NN,NSPS,bt,fs,f0,cwave,xjunk,1,NWAVE) !Generate complex cwave write(*,*) write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3 diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index d4b58a426..9dc25812c 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -1,4 +1,4 @@ -subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) +subroutine gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) ! ! generate ft8 waveform using Gaussian-filtered frequency pulses. ! @@ -9,21 +9,20 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) real pulse(23040) real dphi(0:(nsym+2)*nsps-1) integer itone(nsym) - logical first - data first/.true./ - save pulse,first,twopi,dt,hmod + data first/.true./,ibt0/0/ + save pulse,twopi,dt,hmod,ibt0 - if(first) then + ibt=nint(10*bt) + if(ibt0.ne.ibt) then twopi=8.0*atan(1.0) dt=1.0/fsample hmod=1.0 - bt=2.0 ! Compute the frequency-smoothing pulse do i=1,3*nsps tt=(i-1.5*nsps)/real(nsps) pulse(i)=gfsk_pulse(bt,tt) enddo - first=.false. + ibt0=nint(10*bt) endif ! Compute the smoothed frequency waveform. diff --git a/lib/ft8/subtractft8.f90 b/lib/ft8/subtractft8.f90 index 1031cf2b7..200139a2b 100644 --- a/lib/ft8/subtractft8.f90 +++ b/lib/ft8/subtractft8.f90 @@ -11,16 +11,22 @@ subroutine subtractft8(dd,itone,f0,dt) parameter (NMAX=15*12000,NFRAME=1920*79) parameter (NFFT=NMAX,NFILT=1400) - real*4 dd(NMAX), window(-NFILT/2:NFILT/2) + real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk complex cref,camp,cfilt,cw integer itone(79) logical first data first/.true./ - common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX) + common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX),xjunk(NFRAME) save first nstart=dt*12000+1 - call genft8refsig(itone,cref,f0) +! call genft8refsig(itone,cref,f0) + nsym=79 + nsps=1920 + fs=12000.0 + icmplx=1 + bt=4.0 ! Temporary compromise? + call gen_ft8wave(itone,nsym,nsps,bt,fs,f0,cref,xjunk,icmplx,NFRAME) camp=0. do i=1,nframe id=nstart-1+i diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index e9c0fa031..8aec20d19 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -102,7 +102,7 @@ extern "C" { void genft4_(char* msg, int* ichk, char* msgsent, int itone[], fortran_charlen_t, fortran_charlen_t); - void gen_ft8wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, + void gen_ft8wave_(int itone[], int* nsym, int* nsps, float* bt, float* fsample, float* f0, float xjunk[], float wave[], int* icmplx, int* nwave); void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, @@ -3701,10 +3701,11 @@ void MainWindow::guiUpdate() int nsym=79; int nsps=4*1920; float fsample=48000.0; + float bt=2.0; float f0=ui->TxFreqSpinBox->value() - m_XIT; int icmplx=0; int nwave=nsym*nsps; - gen_ft8wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, + gen_ft8wave_(const_cast(itone),&nsym,&nsps,&bt,&fsample,&f0,foxcom_.wave, foxcom_.wave,&icmplx,&nwave); if(SpecOp::FOX == m_config.special_op_id()) { From f296e37630036c7a52dc02e31363f278b2f4d305 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 12 Apr 2019 18:54:33 -0500 Subject: [PATCH 206/367] Fix a bug that didn't show up when I compiled on the Mac. --- lib/ft8/gen_ft8wave.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 9dc25812c..550011301 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -9,7 +9,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) real pulse(23040) real dphi(0:(nsym+2)*nsps-1) integer itone(nsym) - data first/.true./,ibt0/0/ + data ibt0/0/ save pulse,twopi,dt,hmod,ibt0 ibt=nint(10*bt) From b43d91240d6d367142043d2390ba4d551512888b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 15 Apr 2019 16:26:41 -0400 Subject: [PATCH 207/367] New end-of-QSO sequencing logic (possibly temporary) for CQing FT4 station. When RR73 is received we log the QSO, turn "Call 1st" OFF, and call CQ again. Also, allow Alt+C and F6 (the latter only if altenrate F1-F6 bindings are active) to toggle "Call 1st" ON/OFF. --- Configuration.ui | 12 +++++------ shortcuts.txt | 2 +- widgets/mainwindow.cpp | 49 ++++++++++++++++++++++++++---------------- widgets/mainwindow.ui | 3 --- 4 files changed, 37 insertions(+), 29 deletions(-) diff --git a/Configuration.ui b/Configuration.ui index a8f36797c..a576304c7 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -457,7 +457,7 @@ quiet period when decoding is done. - Alternate F1-F5 bindings + Alternate F1-F6 bindings @@ -3078,13 +3078,13 @@ Right click for insert and delete options. - + + + - - - - + + diff --git a/shortcuts.txt b/shortcuts.txt index e50278d0f..24460a82b 100644 --- a/shortcuts.txt +++ b/shortcuts.txt @@ -8,7 +8,7 @@ F4 Clear DX Call, DX Grid, Tx messages 1-4 (Alt: transmit Tx4) Alt+F4 Exit program F5 Display special mouse commands (Alt: transmit Tx5) - F6 Open next file in directory + F6 Open next file in directory (Alt: toggle Call 11t) Shift+F6 Decode all remaining files in directrory F7 Display Message Averaging window F11 Move Rx frequency down 1 Hz diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 8aec20d19..bfa82cca4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -994,9 +994,9 @@ void MainWindow::not_GA_warning_message () "

" "This is a pre-release version of WSJT-X 2.1.0 made " "available for testing purposes. It will become nonfunctional " - "after May 1, 2019."); + "after June 1, 2019."); QDateTime now=QDateTime::currentDateTime(); - QDateTime timeout=QDateTime(QDate(2019,5,1)); + QDateTime timeout=QDateTime(QDate(2019,6,1)); if(now.daysTo(timeout) < 0) Q_EMIT finished(); } @@ -1892,9 +1892,15 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } int n; - bool bAltF1F5=m_config.alternate_bindings(); + bool bAltF1F6=m_config.alternate_bindings(); switch(e->key()) { + case Qt::Key_C: + if(m_mode=="FT4" && e->modifiers() & Qt::AltModifier) { + bool b=ui->cbFirst->isChecked(); + ui->cbFirst->setChecked(!b); + } + return; case Qt::Key_D: if(m_mode != "WSPR" && e->modifiers() & Qt::ShiftModifier) { if(!m_decoderBusy) { @@ -1906,7 +1912,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } break; case Qt::Key_F1: - if(bAltF1F5) { + if(bAltF1F6) { auto_tx_mode(true); on_txb6_clicked(); return; @@ -1915,7 +1921,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) return; } case Qt::Key_F2: - if(bAltF1F5) { + if(bAltF1F6) { auto_tx_mode(true); on_txb2_clicked(); return; @@ -1924,7 +1930,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) return; } case Qt::Key_F3: - if(bAltF1F5) { + if(bAltF1F6) { auto_tx_mode(true); on_txb3_clicked(); return; @@ -1933,7 +1939,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) return; } case Qt::Key_F4: - if(bAltF1F5) { + if(bAltF1F6) { auto_tx_mode(true); on_txb4_clicked(); return; @@ -1943,7 +1949,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) return; } case Qt::Key_F5: - if(bAltF1F5) { + if(bAltF1F6) { auto_tx_mode(true); on_txb5_clicked(); return; @@ -1952,8 +1958,16 @@ void MainWindow::keyPressEvent (QKeyEvent * e) return; } case Qt::Key_F6: - if(e->modifiers() & Qt::ShiftModifier) { - on_actionDecode_remaining_files_in_directory_triggered(); + if(bAltF1F6) { + bool b=ui->cbFirst->isChecked(); + ui->cbFirst->setChecked(!b); + return; + } else { + if(e->modifiers() & Qt::ShiftModifier) { + on_actionDecode_remaining_files_in_directory_triggered(); + } else { + on_actionOpen_triggered(); + } return; } on_actionOpen_next_in_directory_triggered(); @@ -4576,11 +4590,11 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ui->tx3->setText(t); m_bTUmsg=true; } else { -// if(SpecOp::RTTY == m_config.special_op_id()) { - if(false) { + if(SpecOp::RTTY == m_config.special_op_id()) { logQSOTimer.start(0); m_ntx=6; ui->txrb6->setChecked(true); + ui->cbFirst->setChecked(false); } else { m_ntx=5; ui->txrb5->setChecked(true); @@ -5001,7 +5015,6 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) QDateTime now=QDateTime::currentDateTimeUtc(); int sinceTx3 = m_dateTimeSentTx3.secsTo(now); int sinceRR73 = m_dateTimeRcvdRR73.secsTo(now); -// qDebug() << "aa" << m_bDoubleClicked << sinceTx3 << sinceRR73; if(m_bDoubleClicked and (sinceTx3 < 15) and (sinceRR73 < 3)) { t="TU; " + ui->tx3->text(); ui->tx3->setText(t); @@ -5150,10 +5163,9 @@ void MainWindow::TxAgain() void MainWindow::clearDX () { set_dateTimeQSO (-1); - if (m_QSOProgress != CALLING) - { - auto_tx_mode (false); - } + if (m_QSOProgress != CALLING) { + auto_tx_mode (false); + } ui->dxCallEntry->clear (); ui->dxGridEntry->clear (); m_lastCallsign.clear (); @@ -5525,7 +5537,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, } } - if (m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX (); + if(m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX (); m_dateTimeQSOOn = QDateTime {}; auto special_op = m_config.special_op_id (); if (SpecOp::NONE < special_op && special_op < SpecOp::FOX && @@ -8700,7 +8712,6 @@ void MainWindow::on_pbBestSP_clicked() { m_bBestSPArmed = !m_bBestSPArmed; // ui->pbBestSP->setChecked(m_bBestSPArmed); -// qDebug() << "aa" << m_bBestSPArmed; if(m_bBestSPArmed and !m_transmitting) ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); } diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index 8b7980742..0942dc750 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -2813,9 +2813,6 @@ list. The list can be maintained in Settings (F2). Open next in directory - - F6 - From 5826aefedc1cb7fa3251bcf5634a66fa7379935b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 16 Apr 2019 13:21:45 -0400 Subject: [PATCH 208/367] Let "Best S+P" status time out after 2 minutes. Update the keyboard shortcuts.txt file. --- shortcuts.txt | 4 +++- widgets/mainwindow.cpp | 12 ++++++++---- widgets/mainwindow.h | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/shortcuts.txt b/shortcuts.txt index 24460a82b..4356664c0 100644 --- a/shortcuts.txt +++ b/shortcuts.txt @@ -8,7 +8,7 @@ F4 Clear DX Call, DX Grid, Tx messages 1-4 (Alt: transmit Tx4) Alt+F4 Exit program F5 Display special mouse commands (Alt: transmit Tx5) - F6 Open next file in directory (Alt: toggle Call 11t) + F6 Open next file in directory (Alt: toggle "Call 1st") Shift+F6 Decode all remaining files in directrory F7 Display Message Averaging window F11 Move Rx frequency down 1 Hz @@ -21,6 +21,8 @@ Ctrl+Shift+F12 Move dial frequency up 2000 Hz Alt+1-6 Set now transmission to this number on Tab 1 Ctl+1-6 Set next transmission to this number on Tab 1 + Alt+B Toggle "Best S+P" status + Alt+C Toggle "Call 1st" checkbox Alt+D Decode again at QSO frequency Shift+D Full decode (both windows) Ctrl+E Turn on TX even/1st diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index bfa82cca4..3c790f043 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1895,6 +1895,11 @@ void MainWindow::keyPressEvent (QKeyEvent * e) bool bAltF1F6=m_config.alternate_bindings(); switch(e->key()) { + case Qt::Key_B: + if(m_mode=="FT4" && e->modifiers() & Qt::AltModifier) { + on_pbBestSP_clicked(); + } + return; case Qt::Key_C: if(m_mode=="FT4" && e->modifiers() & Qt::AltModifier) { bool b=ui->cbFirst->isChecked(); @@ -4024,9 +4029,8 @@ void MainWindow::guiUpdate() QString utc = t.date().toString("yyyy MMM dd") + "\n " + t.time().toString() + " "; ui->labUTC->setText(utc); - if(!m_monitoring and !m_diskData) { - ui->signal_meter_widget->setValue(0,0); - } + if(m_bBestSPArmed and (m_dateTimeBestSP.secsTo(t) >= 120)) on_pbBestSP_clicked(); //BestSP timeout + if(!m_monitoring and !m_diskData) ui->signal_meter_widget->setValue(0,0); m_sec0=nsec; displayDialFrequency (); } @@ -8711,7 +8715,7 @@ void MainWindow::chkFT4() void MainWindow::on_pbBestSP_clicked() { m_bBestSPArmed = !m_bBestSPArmed; -// ui->pbBestSP->setChecked(m_bBestSPArmed); if(m_bBestSPArmed and !m_transmitting) ui->pbBestSP->setStyleSheet ("QPushButton{color:red}"); if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); + if(m_bBestSPArmed) m_dateTimeBestSP=QDateTime::currentDateTimeUtc(); } diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 13720e092..eada752bc 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -653,6 +653,7 @@ private: QDateTime m_dateTimeLastTX; QDateTime m_dateTimeSentTx3; QDateTime m_dateTimeRcvdRR73; + QDateTime m_dateTimeBestSP; QSharedMemory *mem_jt9; QString m_QSOText; From 81907e841abdf119a4ce4144e8ffe135d65c2c8d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 17 Apr 2019 01:29:16 +0100 Subject: [PATCH 209/367] Update macOS Info.plist to include mic privacy request string for latest SDK on 10.14 --- Darwin/Info.plist.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Darwin/Info.plist.in b/Darwin/Info.plist.in index 830975da5..d2e943fe5 100644 --- a/Darwin/Info.plist.in +++ b/Darwin/Info.plist.in @@ -38,5 +38,7 @@ True NSRequiresAquaSystemAppearance + NSMicrophoneUsageDescription + This app requires microphone access to receive signals. From 655e0029fd503320186c3c51671266cfc91bf5e3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 17 Apr 2019 14:03:27 -0400 Subject: [PATCH 210/367] Define the expected file length for FT4 data. --- lib/jt9.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 7b3b0181e..aff2844ef 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -224,7 +224,7 @@ program jt9 endif shared_data%id2=0 !??? Why is this necessary ??? - + if(mode.eq.5) npts=62208 do iblk=1,npts/kstep k=iblk*kstep if(mode.eq.8 .and. k.gt.179712) exit From f7b0e24e708ae0f60bf7141024ede1fd3fb15b36 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 17 Apr 2019 14:53:20 -0400 Subject: [PATCH 211/367] Correct a flaw in recently modified actions for key F6. --- widgets/mainwindow.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 3c790f043..5d59abb6a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1966,16 +1966,13 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(bAltF1F6) { bool b=ui->cbFirst->isChecked(); ui->cbFirst->setChecked(!b); - return; } else { if(e->modifiers() & Qt::ShiftModifier) { on_actionDecode_remaining_files_in_directory_triggered(); } else { - on_actionOpen_triggered(); + on_actionOpen_next_in_directory_triggered(); } - return; } - on_actionOpen_next_in_directory_triggered(); return; case Qt::Key_F11: if((e->modifiers() & Qt::ControlModifier) and (e->modifiers() & Qt::ShiftModifier)) { From be724611429037e6e8ef7f53e7030de5bdd29f24 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 18 Apr 2019 14:15:24 -0500 Subject: [PATCH 212/367] FT4: Some groundwork for subtraction. --- CMakeLists.txt | 1 + lib/ft4/ft4sim_mult.f90 | 4 ++- lib/ft4/gen_ft4wave.f90 | 28 ++++++++++++----- lib/ft4/subtractft4.f90 | 66 +++++++++++++++++++++++++++++++++++++++++ lib/ft8/gen_ft8wave.f90 | 1 + widgets/mainwindow.cpp | 6 ++-- 6 files changed, 96 insertions(+), 10 deletions(-) create mode 100644 lib/ft4/subtractft4.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d39c437d..3fbb879dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -555,6 +555,7 @@ set (wsjt_FSRCS lib/stdmsg.f90 lib/subtract65.f90 lib/ft8/subtractft8.f90 + lib/ft4/subtractft4.f90 lib/sun.f90 lib/symspec.f90 lib/symspec2.f90 diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 065b2a76b..5acfaccef 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -10,6 +10,7 @@ program ft4sim_mult type(hdr) h !Header for .wav file character arg*12,fname*17,cjunk*4 character msg37*37,msgsent37*37,c77*77 + complex cwave0((NN+2)*NSPS) real wave0((NN+2)*NSPS) real wave(NZZ) real tmp(NZZ) @@ -63,7 +64,8 @@ program ft4sim_mult call pack77(msg37,i3,n3,c77) call genft4(msg37,0,msgsent37,itone) nwave0=(NN+2)*NSPS - call gen_ft4wave(itone,NN,NSPS,12000.0,f0,wave0,nwave0) + icmplx=0 + call gen_ft4wave(itone,NN,NSPS,12000.0,f0,cwave0,wave0,icmplx,nwave0) k0=nint((xdt+0.5)/dt) if(k0.lt.1) k0=1 diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 index 305310e68..aa4174645 100644 --- a/lib/ft4/gen_ft4wave.f90 +++ b/lib/ft4/gen_ft4wave.f90 @@ -1,6 +1,7 @@ -subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,wave,nwave) +subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) real wave(nwave) + complex cwave(nwave) real pulse(6144) !512*4*3 real dphi(0:240000-1) integer itone(nsym) @@ -34,19 +35,32 @@ subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,wave,nwave) phi=0.0 dphi = dphi + twopi*f0*dt !Shift frequency up by f0 wave=0. + cwave=0. k=0 do j=0,nwave-1 k=k+1 - wave(k)=sin(phi) + if(icmplx.eq.0) then + wave(k)=sin(phi) + else + cwave(k)=cmplx(cos(phi),sin(phi)) + endif phi=mod(phi+dphi(j),twopi) enddo ! Compute the ramp-up and ramp-down symbols - wave(1:nsps)=wave(1:nsps) * & - (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 - k1=(nsym+1)*nsps+1 - wave(k1:k1+nsps-1)=wave(k1:k1+nsps-1) * & - (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + if(icmplx.eq.0) then + wave(1:nsps)=wave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + wave(k1:k1+nsps-1)=wave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + else + cwave(1:nsps)=cwave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + endif return end subroutine gen_ft4wave diff --git a/lib/ft4/subtractft4.f90 b/lib/ft4/subtractft4.f90 new file mode 100644 index 000000000..16e3b9e7f --- /dev/null +++ b/lib/ft4/subtractft4.f90 @@ -0,0 +1,66 @@ +subroutine subtractft4(dd,itone,f0,dt) + +! Subtract an ft4 signal +! +! Measured signal : dd(t) = a(t)cos(2*pi*f0*t+theta(t)) +! Reference signal : cref(t) = exp( j*(2*pi*f0*t+phi(t)) ) +! Complex amp : cfilt(t) = LPF[ dd(t)*CONJG(cref(t)) ] +! Subtract : dd(t) = dd(t) - 2*REAL{cref*cfilt} + + use timer_module, only: timer + + parameter (NMAX=6*12000,NFRAME=(103+2)*79) + parameter (NFFT=NMAX,NFILT=1400) + real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk + complex cref,camp,cfilt,cw + integer itone(79) + logical first + data first/.true./ + common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX),xjunk(NFRAME) + save first + + nstart=dt*12000+1 + nsym=79 + nsps=1920 + fs=12000.0 + icmplx=1 + bt=1.0 ! Temporary compromise? + call gen_ft4wave(itone,nsym,nsps,fs,f0,cref,xjunk,icmplx,NFRAME) + camp=0. + do i=1,nframe + id=nstart-1+i + if(id.ge.1.and.id.le.NMAX) camp(i)=dd(id)*conjg(cref(i)) + enddo + + if(first) then +! Create and normalize the filter + pi=4.0*atan(1.0) + fac=1.0/float(nfft) + sum=0.0 + do j=-NFILT/2,NFILT/2 + window(j)=cos(pi*j/NFILT)**2 + sum=sum+window(j) + enddo + cw=0. + cw(1:NFILT+1)=window/sum + cw=cshift(cw,NFILT/2+1) + call four2a(cw,nfft,1,-1,1) + cw=cw*fac + first=.false. + endif + + cfilt=0.0 + cfilt(1:nframe)=camp(1:nframe) + call four2a(cfilt,nfft,1,-1,1) + cfilt(1:nfft)=cfilt(1:nfft)*cw(1:nfft) + call four2a(cfilt,nfft,1,1,1) + +! Subtract the reconstructed signal + do i=1,nframe + j=nstart+i-1 + if(j.ge.1 .and. j.le.NMAX) dd(j)=dd(j)-2*REAL(cfilt(i)*cref(i)) + enddo + + return +end subroutine subtractft4 + diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 550011301..37f3b0cbe 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -42,6 +42,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) phi=0.0 dphi = dphi + twopi*f0*dt !Shift frequency up by f0 wave=0. + cwave=0. k=0 do j=nsps,nsps+nwave-1 !Don't include dummy symbols k=k+1 diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 5d59abb6a..a78b12a7f 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -106,7 +106,7 @@ extern "C" { float xjunk[], float wave[], int* icmplx, int* nwave); void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, - float wave[], int* nwave); + float xjunk[], float wave[], int* icmplx, int* nwave); void gen4_(char* msg, int* ichk, char* msgsent, int itone[], int* itext, fortran_charlen_t, fortran_charlen_t); @@ -3745,7 +3745,9 @@ void MainWindow::guiUpdate() float fsample=48000.0; float f0=ui->TxFreqSpinBox->value() - m_XIT; int nwave=(nsym+2)*nsps; - gen_ft4wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,&nwave); + int icmplx=0; + gen_ft4wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, + foxcom_.wave,&icmplx,&nwave); } if(SpecOp::EU_VHF==m_config.special_op_id()) { From e8d17a98989739641ab95008ce1ed6cd9f14bdc5 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 18 Apr 2019 14:16:39 -0500 Subject: [PATCH 213/367] FT4: Subtraction is basically working. --- lib/ft4/ft4_downsample.f90 | 8 +- lib/ft4/ft4_params.f90 | 2 +- lib/ft4/ft4sim.f90 | 2 +- lib/ft4/ft4sim_mult.f90 | 3 +- lib/ft4/genft4.f90 | 14 +- lib/ft4/getcandidates4.f90 | 6 +- lib/ft4/subtractft4.f90 | 13 +- lib/ft4_decode.f90 | 867 +++++++++++++++++++------------------ lib/ft8/ft8b.f90 | 2 +- lib/ft8/genft8.f90 | 2 +- widgets/mainwindow.cpp | 6 +- 11 files changed, 472 insertions(+), 453 deletions(-) diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index ff0595629..819b10fbc 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -1,11 +1,11 @@ -subroutine ft4_downsample(iwave,newdata,f0,c) +subroutine ft4_downsample(dd,newdata,f0,c) -! Input: i*2 data in iwave() at sample rate 12000 Hz +! Input: real data in dd() at sample rate 12000 Hz ! Output: Complex data in c(), sampled at 1200 Hz include 'ft4_params.f90' parameter (NFFT2=NMAX/16) - integer*2 iwave(NMAX) + real dd(NMAX) complex c(0:NMAX/NDOWN-1) complex c1(0:NFFT2-1) complex cx(0:NMAX/2) @@ -33,7 +33,7 @@ subroutine ft4_downsample(iwave,newdata,f0,c) endif if(newdata) then - x=iwave + x=dd call four2a(x,NMAX,1,-1,0) !r2c FFT to freq domain endif i0=nint(f0/df) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 02d9de655..46630cc25 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -9,7 +9,7 @@ parameter (NN2=NS+ND+2) !Total channel symbols (105) parameter (NSPS=512) !Samples per symbol at 12000 S/s parameter (NZ=NSPS*NN) !Sync and Data samples (52736) parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) -parameter (NMAX=5*12000) !Samples in iwave (60,000) +parameter (NMAX=18*3456) !Samples in iwave parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS) !Coarse time-sync step size parameter (NHSYM=(NMAX-NFFT1)/NSTEP) !Number of symbol spectra (1/4-sym steps) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 6b5d01599..94ab8218f 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -63,7 +63,7 @@ program ft4sim n3=-1 call pack77(msg37,i3,n3,c77) read(c77,'(77i1)') msgbits - call genft4(msg37,0,msgsent37,itone) + call genft4(msg37,0,msgsent37,msgbits,itone) write(*,*) write(*,'(a9,a37,3x,a7,i1,a1,i1)') 'Message: ',msgsent37,'i3.n3: ',i3,'.',n3 write(*,1000) f0,xdt,txt,snrdb diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 5acfaccef..313093289 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -15,6 +15,7 @@ program ft4sim_mult real wave(NZZ) real tmp(NZZ) integer itone(NN) + integer*1 msgbits(77) integer*2 iwave(NZZ) !Generated full-length waveform integer icos4(4) data icos4/0,1,3,2/ @@ -62,7 +63,7 @@ program ft4sim_mult i3=-1 n3=-1 call pack77(msg37,i3,n3,c77) - call genft4(msg37,0,msgsent37,itone) + call genft4(msg37,0,msgsent37,msgbits,itone) nwave0=(NN+2)*NSPS icmplx=0 call gen_ft4wave(itone,NN,NSPS,12000.0,f0,cwave0,wave0,icmplx,nwave0) diff --git a/lib/ft4/genft4.f90 b/lib/ft4/genft4.f90 index 3c6b8ead1..f57ca59aa 100644 --- a/lib/ft4/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -1,4 +1,4 @@ -subroutine genft4(msg0,ichk,msgsent,i4tone) +subroutine genft4(msg0,ichk,msgsent,msgbits,i4tone) ! Encode an FT4 message ! Input: @@ -52,8 +52,16 @@ subroutine genft4(msg0,ichk,msgsent,i4tone) call unpack77(c77,0,msgsent,unpk77_success) !Unpack to get msgsent if(ichk.eq.1) go to 999 - read(c77,"(77i1)") msgbits - msgbits=mod(msgbits+rvec,2) + read(c77,'(77i1)',err=1) msgbits + if(unpk77_success) go to 2 +1 msgbits=0 + itone=0 + msgsent='*** bad message *** ' + go to 999 + +entry get_ft4_tones_from_77bits(msgbits,i4tone) + +2 msgbits=mod(msgbits+rvec,2) call encode174_91(msgbits,codeword) ! Grayscale mapping: diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index bf62abfa7..5d42ca740 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -1,4 +1,4 @@ -subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & +subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ncand,sbase) include 'ft4_params.f90' @@ -9,7 +9,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & real window(NFFT1) complex cx(0:NH1) real candidate(3,maxcand) - integer*2 id(NMAX) + real dd(NMAX) integer indx(NH1) integer ipk(1) equivalence (x,cx) @@ -33,7 +33,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ia=(j-1)*NSTEP + 1 ib=ia+NFFT1-1 if(ib.gt.NMAX) exit - x=fac*id(ia:ib)*window + x=fac*dd(ia:ib)*window call four2a(x,NFFT1,1,-1,0) !r2c FFT do i=1,NH1 s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 diff --git a/lib/ft4/subtractft4.f90 b/lib/ft4/subtractft4.f90 index 16e3b9e7f..cb9f2626a 100644 --- a/lib/ft4/subtractft4.f90 +++ b/lib/ft4/subtractft4.f90 @@ -9,22 +9,23 @@ subroutine subtractft4(dd,itone,f0,dt) use timer_module, only: timer - parameter (NMAX=6*12000,NFRAME=(103+2)*79) + parameter (NMAX=18*3456,NFRAME=(103+2)*512) parameter (NFFT=NMAX,NFILT=1400) +! parameter (NFFT=NMAX,NFILT=400) real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk complex cref,camp,cfilt,cw - integer itone(79) + integer itone(103) logical first data first/.true./ common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX),xjunk(NFRAME) save first - nstart=dt*12000+1 - nsym=79 - nsps=1920 + nstart=dt*12000+1-512 + nsym=103 + nsps=512 fs=12000.0 icmplx=1 - bt=1.0 ! Temporary compromise? + bt=1.0 call gen_ft4wave(itone,nsym,nsps,fs,f0,cref,xjunk,icmplx,NFRAME) camp=0. do i=1,nframe diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 500cdd081..491782a91 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -1,128 +1,130 @@ module ft4_decode - - type :: ft4_decoder - procedure(ft4_decode_callback), pointer :: callback - contains - procedure :: decode - end type ft4_decoder - abstract interface - subroutine ft4_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) - import ft4_decoder - implicit none - class(ft4_decoder), intent(inout) :: this - real, intent(in) :: sync - integer, intent(in) :: snr - real, intent(in) :: dt - real, intent(in) :: freq - character(len=37), intent(in) :: decoded - integer, intent(in) :: nap - real, intent(in) :: qual - end subroutine ft4_decode_callback - end interface + type :: ft4_decoder + procedure(ft4_decode_callback), pointer :: callback + contains + procedure :: decode + end type ft4_decoder + + abstract interface + subroutine ft4_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) + import ft4_decoder + implicit none + class(ft4_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + end subroutine ft4_decode_callback + end interface contains - subroutine decode(this,callback,iwave,nQSOProgress,nfqso, & - nutc,nfa,nfb,ndepth,ncontest,mycall,hiscall) - use timer_module, only: timer - use packjt77 - include 'ft4/ft4_params.f90' - class(ft4_decoder), intent(inout) :: this - procedure(ft4_decode_callback) :: callback - parameter (NSS=NSPS/NDOWN) - parameter (NZZ=18*3456) - character message*37,msgsent*37,msg0*37 - character c77*77 - character*37 decodes(100) - character*512 data_dir,fname - character*17 cdatetime0 - character*12 mycall,hiscall - character*12 mycall0,hiscall0 - character*6 hhmmss - character*4 cqstr,cqstr0 + subroutine decode(this,callback,iwave,nQSOProgress,nfqso, & + nutc,nfa,nfb,ndepth,ncontest,mycall,hiscall) + use timer_module, only: timer + use packjt77 + include 'ft4/ft4_params.f90' + class(ft4_decoder), intent(inout) :: this + procedure(ft4_decode_callback) :: callback + parameter (NSS=NSPS/NDOWN) + parameter (NZZ=18*3456) + character message*37,msgsent*37,msg0*37 + character c77*77 + character*37 decodes(100) + character*512 data_dir,fname + character*17 cdatetime0 + character*12 mycall,hiscall + character*12 mycall0,hiscall0 + character*6 hhmmss + character*4 cqstr,cqstr0 - complex cd2(0:NZZ/NDOWN-1) !Complex waveform - complex cb(0:NZZ/NDOWN-1+NN*NSS) - complex cd(0:NN*NSS-1) !Complex waveform - complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) - complex csymb(NSS) - complex cs(0:3,NN) - real s4(0:3,NN) + complex cd2(0:NZZ/NDOWN-1) !Complex waveform + complex cb(0:NZZ/NDOWN-1+NN*NSS) + complex cd(0:NN*NSS-1) !Complex waveform + complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) + complex csymb(NSS) + complex cs(0:3,NN) + real s4(0:3,NN) - real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) - real a(5) - real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) - real s2(0:255) - real candidate(3,100) - real savg(NH1),sbase(NH1) + real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) + real a(5) + real dd(NZZ) + real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) + real s2(0:255) + real candidate(3,100) + real savg(NH1),sbase(NH1) - integer apbits(2*ND) - integer apmy_ru(28),aphis_fd(28) - integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) - integer*2 iwave(NZZ) !Raw received data - integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) - integer*1 hbits(2*NN) - integer graymap(0:3) - integer ip(1) - integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 - integer naptypes(0:5,4) ! nQSOProgress, decoding pass - integer mcq(29) - integer mrrr(19),m73(19),mrr73(19) + integer apbits(2*ND) + integer apmy_ru(28),aphis_fd(28) + integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) + integer*2 iwave(NZZ) !Raw received data + integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) + integer*1 hbits(2*NN) + integer graymap(0:3) + integer i4tone(103) + integer ip(1) + integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 + integer naptypes(0:5,4) ! nQSOProgress, decoding pass + integer mcq(29) + integer mrrr(19),m73(19),mrr73(19) - logical nohiscall,unpk77_success - logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits - logical first, dobigfft + logical nohiscall,unpk77_success + logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits + logical first, dobigfft - data icos4a/0,1,3,2/ - data icos4b/1,0,2,3/ - data icos4c/2,3,1,0/ - data icos4d/3,2,0,1/ - data graymap/0,1,3,2/ - data msg0/' '/ - data first/.true./ - data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ - data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ - data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ - data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ - data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & - 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & - 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ - save fs,dt,tt,txt,twopi,h,one,first,apbits,nappasses,naptypes, & - mycall0,hiscall0,msg0,cqstr0,ctwk2 + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ + data graymap/0,1,3,2/ + data msg0/' '/ + data first/.true./ + data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ + data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ + data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ + data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ + data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ + save fs,dt,tt,txt,twopi,h,one,first,apbits,nappasses,naptypes, & + mycall0,hiscall0,msg0,cqstr0,ctwk2 - this%callback => callback - hhmmss=cdatetime0(8:13) - if(first) then - fs=12000.0/NDOWN !Sample rate after downsampling - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - txt=NZ*dt !Transmission length (s) without ramp up/down - twopi=8.0*atan(1.0) - h=1.0 - one=.false. - do i=0,255 - do j=0,7 - if(iand(i,2**j).ne.0) one(i,j)=.true. + this%callback => callback + hhmmss=cdatetime0(8:13) + if(first) then + fs=12000.0/NDOWN !Sample rate after downsampling + dt=1/fs !Sample interval after downsample (s) + tt=NSPS*dt !Duration of "itone" symbols (s) + txt=NZ*dt !Transmission length (s) without ramp up/down + twopi=8.0*atan(1.0) + h=1.0 + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo enddo - enddo - do idf=-16,16 - a=0. - a(1)=real(idf) - ctwk=1. - call twkfreq1(ctwk,2*NSS,fs/2.0,a,ctwk2(:,idf)) - enddo + do idf=-16,16 + a=0. + a(1)=real(idf) + ctwk=1. + call twkfreq1(ctwk,2*NSS,fs/2.0,a,ctwk2(:,idf)) + enddo - mrrr=2*mod(mrrr+rvec(59:77),2)-1 - m73=2*mod(m73+rvec(59:77),2)-1 - mrr73=2*mod(mrr73+rvec(59:77),2)-1 - nappasses(0)=2 - nappasses(1)=2 - nappasses(2)=2 - nappasses(3)=2 - nappasses(4)=2 - nappasses(5)=3 + mrrr=2*mod(mrrr+rvec(59:77),2)-1 + m73=2*mod(m73+rvec(59:77),2)-1 + mrr73=2*mod(mrr73+rvec(59:77),2)-1 + nappasses(0)=2 + nappasses(1)=2 + nappasses(2)=2 + nappasses(3)=2 + nappasses(4)=2 + nappasses(5)=3 ! iaptype !------------------------ @@ -133,257 +135,257 @@ contains ! 5 MyCall DxCall 73 (77 ap bits) ! 6 MyCall DxCall RR73 (77 ap bits) !******** - naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) - naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 - naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 - naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 - naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 - naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 + naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) + naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 + naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 + naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 + naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 + naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 - mycall0='' - hiscall0='' - cqstr0='' - first=.false. - endif - - if(cqstr.ne.cqstr0) then - i0=index(cqstr,' ') - if(i0.le.1) then - message='CQ A1AA AA01' - else - message='CQ '//cqstr(1:i0-1)//' A1AA AA01' + mycall0='' + hiscall0='' + cqstr0='' + first=.false. endif - i3=-1 - n3=-1 - call pack77(message,i3,n3,c77) - call unpack77(c77,1,msgsent,unpk77_success) - read(c77,'(29i1)') mcq - mcq=2*mod(mcq+rvec(1:29),2)-1 - cqstr0=cqstr - endif - l1=index(mycall,char(0)) - if(l1.ne.0) mycall(l1:)=" " - l1=index(hiscall,char(0)) - if(l1.ne.0) hiscall(l1:)=" " - if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then - apbits=0 - apbits(1)=99 - apbits(30)=99 - apmy_ru=0 - aphis_fd=0 - - if(len(trim(mycall)) .lt. 3) go to 10 - - nohiscall=.false. - hiscall0=hiscall - if(len(trim(hiscall0)).lt.3) then - hiscall0=mycall ! use mycall for dummy hiscall - mycall won't be hashed. - nohiscall=.true. - endif - message=trim(mycall)//' '//trim(hiscall0)//' RR73' - i3=-1 - n3=-1 - call pack77(message,i3,n3,c77) - call unpack77(c77,1,msgsent,unpk77_success) - if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 - read(c77,'(77i1)') message77 - apmy_ru=2*mod(message77(1:28)+rvec(2:29),2)-1 - aphis_fd=2*mod(message77(30:57)+rvec(29:56),2)-1 - message77=mod(message77+rvec,2) - call encode174_91(message77,cw) - apbits=2*cw-1 - if(nohiscall) apbits(30)=99 - -10 continue - mycall0=mycall - hiscall0=hiscall - endif - candidate=0.0 - ncand=0 - syncmin=1.2 - maxcand=100 - - fa=nfa - fb=nfb - call timer('getcand4',0) - call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & - ncand,sbase) - call timer('getcand4',1) - - ndecodes=0 - dobigfft=.true. - do icand=1,ncand - f0=candidate(1,icand) - snr=candidate(3,icand)-1.0 - call timer('ft4_down',0) - call ft4_downsample(iwave,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym - call timer('ft4_down',1) - if(dobigfft) dobigfft=.false. - sum2=sum(cd2*conjg(cd2))/(real(NZZ)/real(NDOWN)) - if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) -! Sample rate is now 12000/16 = 750 samples/second - do isync=1,2 - if(isync.eq.1) then - idfmin=-12 - idfmax=12 - idfstp=3 - ibmin=0 - ibmax=800 - ibstp=4 + if(cqstr.ne.cqstr0) then + i0=index(cqstr,' ') + if(i0.le.1) then + message='CQ A1AA AA01' else - idfmin=idfbest-4 - idfmax=idfbest+4 - idfstp=1 - ibmin=max(0,ibest-5) - ibmax=min(ibest+5,NZZ/NDOWN-1) - ibstp=1 + message='CQ '//cqstr(1:i0-1)//' A1AA AA01' endif - ibest=-1 - smax=-99. - idfbest=0 - call timer('sync4d ',0) - do idf=idfmin,idfmax,idfstp - do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power - if(sync.gt.smax) then - smax=sync - ibest=istart - idfbest=idf + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,1,msgsent,unpk77_success) + read(c77,'(29i1)') mcq + mcq=2*mod(mcq+rvec(1:29),2)-1 + cqstr0=cqstr + endif + + l1=index(mycall,char(0)) + if(l1.ne.0) mycall(l1:)=" " + l1=index(hiscall,char(0)) + if(l1.ne.0) hiscall(l1:)=" " + if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then + apbits=0 + apbits(1)=99 + apbits(30)=99 + apmy_ru=0 + aphis_fd=0 + + if(len(trim(mycall)) .lt. 3) go to 10 + + nohiscall=.false. + hiscall0=hiscall + if(len(trim(hiscall0)).lt.3) then + hiscall0=mycall ! use mycall for dummy hiscall - mycall won't be hashed. + nohiscall=.true. + endif + message=trim(mycall)//' '//trim(hiscall0)//' RR73' + i3=-1 + n3=-1 + call pack77(message,i3,n3,c77) + call unpack77(c77,1,msgsent,unpk77_success) + if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 + read(c77,'(77i1)') message77 + apmy_ru=2*mod(message77(1:28)+rvec(2:29),2)-1 + aphis_fd=2*mod(message77(30:57)+rvec(29:56),2)-1 + message77=mod(message77+rvec,2) + call encode174_91(message77,cw) + apbits=2*cw-1 + if(nohiscall) apbits(30)=99 + +10 continue + mycall0=mycall + hiscall0=hiscall + endif + syncmin=1.2 + maxcand=100 + ndecodes=0 + decodes=' ' + fa=nfa + fb=nfb + dd=iwave + + do isp = 1,2 + candidate=0.0 + ncand=0 + call timer('getcand4',0) + call getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & + ncand,sbase) + call timer('getcand4',1) + dobigfft=.true. + do icand=1,ncand + f0=candidate(1,icand) + snr=candidate(3,icand)-1.0 + call timer('ft4_down',0) + call ft4_downsample(dd,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym + call timer('ft4_down',1) + if(dobigfft) dobigfft=.false. + sum2=sum(cd2*conjg(cd2))/(real(NZZ)/real(NDOWN)) + if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) +! Sample rate is now 12000/16 = 750 samples/second + do isync=1,2 + if(isync.eq.1) then + idfmin=-12 + idfmax=12 + idfstp=3 + ibmin=0 + ibmax=800 + ibstp=4 + else + idfmin=idfbest-4 + idfmax=idfbest+4 + idfstp=1 + ibmin=max(0,ibest-5) + ibmax=min(ibest+5,NZZ/NDOWN-1) + ibstp=1 endif + ibest=-1 + smax=-99. + idfbest=0 + call timer('sync4d ',0) + do idf=idfmin,idfmax,idfstp + do istart=ibmin,ibmax,ibstp + call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power + if(sync.gt.smax) then + smax=sync + ibest=istart + idfbest=idf + endif + enddo + enddo + call timer('sync4d ',1) enddo - enddo - call timer('sync4d ',1) - enddo - f0=f0+real(idfbest) - if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle -! write(*,3002) smax,ibest/750.0,f0 -!3002 format('b',3f8.2) - call timer('ft4down ',0) - call ft4_downsample(iwave,dobigfft,f0,cb) !Final downsample, corrected f0 - call timer('ft4down ',1) - sum2=sum(abs(cb)**2)/(real(NSS)*NN) - if(sum2.gt.0.0) cb=cb/sqrt(sum2) - cd=cb(ibest:ibest+NN*NSS-1) - call timer('four2a ',0) - do k=1,NN - i1=(k-1)*NSS - csymb=cd(i1:i1+NSS-1) - call four2a(csymb,NSS,1,-1,1) - cs(0:3,k)=csymb(1:4) - s4(0:3,k)=abs(csymb(1:4)) - enddo - call timer('four2a ',1) + f0=f0+real(idfbest) + if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle + call timer('ft4down ',0) + call ft4_downsample(dd,dobigfft,f0,cb) !Final downsample, corrected f0 + call timer('ft4down ',1) + sum2=sum(abs(cb)**2)/(real(NSS)*NN) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) + cd=cb(ibest:ibest+NN*NSS-1) + call timer('four2a ',0) + do k=1,NN + i1=(k-1)*NSS + csymb=cd(i1:i1+NSS-1) + call four2a(csymb,NSS,1,-1,1) + cs(0:3,k)=csymb(1:4) + s4(0:3,k)=abs(csymb(1:4)) + enddo + call timer('four2a ',1) ! Sync quality check - is1=0 - is2=0 - is3=0 - is4=0 - do k=1,4 - ip=maxloc(s4(:,k)) - if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 - ip=maxloc(s4(:,k+33)) - if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 - ip=maxloc(s4(:,k+66)) - if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 - ip=maxloc(s4(:,k+99)) - if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 - enddo - nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 - if(smax .lt. 0.7 .or. nsync .lt. 8) cycle - - do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols - if(nseq.eq.1) nsym=1 - if(nseq.eq.2) nsym=2 - if(nseq.eq.3) nsym=4 - nt=2**(2*nsym) - do ks=1,NN-nsym+1,nsym !87+16=103 symbols. - amax=-1.0 - do i=0,nt-1 - i1=i/64 - i2=iand(i,63)/16 - i3=iand(i,15)/4 - i4=iand(i,3) - if(nsym.eq.1) then - s2(i)=abs(cs(graymap(i4),ks)) - elseif(nsym.eq.2) then - s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) - elseif(nsym.eq.4) then - s2(i)=abs(cs(graymap(i1),ks ) + & - cs(graymap(i2),ks+1) + & - cs(graymap(i3),ks+2) + & - cs(graymap(i4),ks+3) & - ) - else - print*,"Error - nsym must be 1, 2, or 4." - endif + is1=0 + is2=0 + is3=0 + is4=0 + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+33)) + if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+66)) + if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 + ip=maxloc(s4(:,k+99)) + if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 enddo - ipt=1+(ks-1)*2 - if(nsym.eq.1) ibmax=1 - if(nsym.eq.2) ibmax=3 - if(nsym.eq.4) ibmax=7 - do ib=0,ibmax - bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & - maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) - if(ipt+ib.gt.2*NN) cycle - if(nsym.eq.1) then - bmeta(ipt+ib)=bm - elseif(nsym.eq.2) then - bmetb(ipt+ib)=bm - elseif(nsym.eq.4) then - bmetc(ipt+ib)=bm - endif + nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 + if(smax .lt. 0.7 .or. nsync .lt. 8) cycle + + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,NN-nsym+1,nsym !87+16=103 symbols. + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib.gt.2*NN) cycle + if(nsym.eq.1) then + bmeta(ipt+ib)=bm + elseif(nsym.eq.2) then + bmetb(ipt+ib)=bm + elseif(nsym.eq.4) then + bmetc(ipt+ib)=bm + endif + enddo + enddo enddo - enddo - enddo - bmetb(205:206)=bmeta(205:206) - bmetc(201:204)=bmetb(201:204) - bmetc(205:206)=bmeta(205:206) + bmetb(205:206)=bmeta(205:206) + bmetc(201:204)=bmetb(201:204) + bmetc(205:206)=bmeta(205:206) - call normalizebmet(bmeta,2*NN) - call normalizebmet(bmetb,2*NN) - call normalizebmet(bmetc,2*NN) + call normalizebmet(bmeta,2*NN) + call normalizebmet(bmetb,2*NN) + call normalizebmet(bmetc,2*NN) - hbits=0 - where(bmeta.ge.0) hbits=1 - ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) - ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) - ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) - nsync_qual=ns1+ns2+ns3+ns4 - if(nsync_qual.lt. 20) cycle + hbits=0 + where(bmeta.ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) + ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) + ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) + nsync_qual=ns1+ns2+ns3+ns4 + if(nsync_qual.lt. 20) cycle - scalefac=2.83 - llra( 1: 58)=bmeta( 9: 66) - llra( 59:116)=bmeta( 75:132) - llra(117:174)=bmeta(141:198) - llra=scalefac*llra - llrb( 1: 58)=bmetb( 9: 66) - llrb( 59:116)=bmetb( 75:132) - llrb(117:174)=bmetb(141:198) - llrb=scalefac*llrb - llrc( 1: 58)=bmetc( 9: 66) - llrc( 59:116)=bmetc( 75:132) - llrc(117:174)=bmetc(141:198) - llrc=scalefac*llrc + scalefac=2.83 + llra( 1: 58)=bmeta( 9: 66) + llra( 59:116)=bmeta( 75:132) + llra(117:174)=bmeta(141:198) + llra=scalefac*llra + llrb( 1: 58)=bmetb( 9: 66) + llrb( 59:116)=bmetb( 75:132) + llrb(117:174)=bmetb(141:198) + llrb=scalefac*llrb + llrc( 1: 58)=bmetc( 9: 66) + llrc( 59:116)=bmetc( 75:132) + llrc(117:174)=bmetc(141:198) + llrc=scalefac*llrc - apmag=maxval(abs(llra))*1.1 - npasses=3+nappasses(nQSOProgress) - if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound - do ipass=1,npasses - if(ipass.eq.1) llr=llra - if(ipass.eq.2) llr=llrb - if(ipass.eq.3) llr=llrc - if(ipass.le.3) then - apmask=0 - iaptype=0 - endif + apmag=maxval(abs(llra))*1.1 + npasses=3+nappasses(nQSOProgress) + if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound + do ipass=1,npasses + if(ipass.eq.1) llr=llra + if(ipass.eq.2) llr=llrb + if(ipass.eq.3) llr=llrc + if(ipass.le.3) then + apmask=0 + iaptype=0 + endif - if(ipass .gt. 3) then - llrd=llrc - iaptype=naptypes(nQSOProgress,ipass-3) + if(ipass .gt. 3) then + llrd=llrc + iaptype=naptypes(nQSOProgress,ipass-3) ! ncontest=0 : NONE ! 1 : NA_VHF @@ -394,94 +396,99 @@ contains ! 6 : HOUND ! ! Conditions that cause us to bail out of AP decoding - napwid=50 - if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f0-nfqso).gt.napwid) ) cycle - if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall - if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall + napwid=50 + if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f0-nfqso).gt.napwid) ) cycle + if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall + if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall - if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC - apmask=0 - apmask(1:29)=1 - llrd(1:29)=apmag*mcq(1:29) - endif + if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC + apmask=0 + apmask(1:29)=1 + llrd(1:29)=apmag*mcq(1:29) + endif - if(iaptype.eq.2) then ! MyCall,???,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1) then - apmask(1:29)=1 - llrd(1:29)=apmag*apbits(1:29) - else if(ncontest.eq.2) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.3) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.4) then - apmask(2:29)=1 - llrd(2:29)=apmag*apmy_ru(1:28) + if(iaptype.eq.2) then ! MyCall,???,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1) then + apmask(1:29)=1 + llrd(1:29)=apmag*apbits(1:29) + else if(ncontest.eq.2) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.3) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.4) then + apmask(2:29)=1 + llrd(2:29)=apmag*apmy_ru(1:28) + endif + endif + + if(iaptype.eq.3) then ! MyCall,DxCall,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then + apmask(1:58)=1 + llrd(1:58)=apmag*apbits(1:58) + else if(ncontest.eq.3) then ! Field Day + apmask(1:56)=1 + llrd(1:28)=apmag*apbits(1:28) + llrd(29:56)=apmag*aphis_fd(1:28) + else if(ncontest.eq.4) then ! RTTY RU + apmask(2:57)=1 + llrd(2:29)=apmag*apmy_ru(1:28) + llrd(30:57)=apmag*apbits(30:57) + endif + endif + + if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then + apmask=0 + if(ncontest.le.4) then + apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 + if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) + endif + endif + + llr=llrd endif - endif - - if(iaptype.eq.3) then ! MyCall,DxCall,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then - apmask(1:58)=1 - llrd(1:58)=apmag*apbits(1:58) - else if(ncontest.eq.3) then ! Field Day - apmask(1:56)=1 - llrd(1:28)=apmag*apbits(1:28) - llrd(29:56)=apmag*aphis_fd(1:28) - else if(ncontest.eq.4) then ! RTTY RU - apmask(2:57)=1 - llrd(2:29)=apmag*apmy_ru(1:28) - llrd(30:57)=apmag*apbits(30:57) + max_iterations=40 + message77=0 + call timer('bpdec174',0) + call bpdecode174_91(llr,apmask,max_iterations,message77, & + cw,nharderror,niterations) + call timer('bpdec174',1) + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + message77=mod(message77+rvec,2) ! remove rvec scrambling + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + if(unpk77_success) then + call get_ft4_tones_from_77bits(message77,i4tone) + dt=real(ibest)/750.0 + call subtractft4(dd,i4tone,f0,dt) + endif + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(ibest.le.10 .and. message.eq.msg0) idupe=1 !Already decoded + if(idupe.eq.1) exit + ndecodes=ndecodes+1 + decodes(ndecodes)=message + if(snr.gt.0.0) then + xsnr=10*log10(snr)-14.0 + else + xsnr=-20.0 + endif + nsnr=nint(max(-20.0,xsnr)) + xdt=ibest/750.0 - 0.5 + call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) + if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate + exit endif - endif - - if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then - apmask=0 - if(ncontest.le.4) then - apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 - if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) - endif - endif - - llr=llrd - endif - max_iterations=40 - message77=0 - call timer('bpdec174',0) - call bpdecode174_91(llr,apmask,max_iterations,message77, & - cw,nharderror,niterations) - call timer('bpdec174',1) - if(sum(message77).eq.0) cycle - if( nharderror.ge.0 ) then - message77=mod(message77+rvec,2) ! remove rvec scrambling - write(c77,'(77i1)') message77(1:77) - call unpack77(c77,1,message,unpk77_success) - idupe=0 - do i=1,ndecodes - if(decodes(i).eq.message) idupe=1 - enddo - if(ibest.le.10 .and. message.eq.msg0) idupe=1 !Already decoded - if(idupe.eq.1) exit - ndecodes=ndecodes+1 - decodes(ndecodes)=message - if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.0 - else - xsnr=-20.0 - endif - nsnr=nint(max(-20.0,xsnr)) - xdt=ibest/750.0 - 0.5 - call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) - if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate - exit - endif - enddo !Sequence estimation - enddo !Candidate list - - return - end subroutine decode + enddo !Sequence estimation + enddo !Candidate list + enddo !Subtraction loop + return + end subroutine decode end module ft4_decode diff --git a/lib/ft8/ft8b.f90 b/lib/ft8/ft8b.f90 index 6fbb03685..0376311f2 100644 --- a/lib/ft8/ft8b.f90 +++ b/lib/ft8/ft8b.f90 @@ -396,7 +396,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & cycle endif nbadcrc=0 ! If we get this far: valid codeword, valid (i3,n3), nonquirky message. - call get_tones_from_77bits(message77,itone) + call get_ft8_tones_from_77bits(message77,itone) if(lsubtract) call subtractft8(dd0,itone,f1,xdt) xsig=0.0 xnoi=0.0 diff --git a/lib/ft8/genft8.f90 b/lib/ft8/genft8.f90 index 41ff546c3..a03c3e587 100644 --- a/lib/ft8/genft8.f90 +++ b/lib/ft8/genft8.f90 @@ -25,7 +25,7 @@ subroutine genft8(msg,i3,n3,msgsent,msgbits,itone) msgsent='*** bad message *** ' go to 900 -entry get_tones_from_77bits(msgbits,itone) +entry get_ft8_tones_from_77bits(msgbits,itone) 2 call encode174_91(msgbits,codeword) !Encode the test message diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a78b12a7f..d50520946 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -99,7 +99,7 @@ extern "C" { void genft8_(char* msg, int* i3, int* n3, char* msgsent, char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t); - void genft4_(char* msg, int* ichk, char* msgsent, int itone[], + void genft4_(char* msg, int* ichk, char* msgsent, char ft4msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t); void gen_ft8wave_(int itone[], int* nsym, int* nsps, float* bt, float* fsample, float* f0, @@ -3739,7 +3739,9 @@ void MainWindow::guiUpdate() } if(m_modeTx=="FT4") { int ichk=0; - genft4_(message, &ichk, msgsent, const_cast(itone), 37, 37); + char ft4msgbits[77]; + genft4_(message, &ichk, msgsent, const_cast (ft4msgbits), + const_cast(itone), 37, 37); int nsym=103; int nsps=4*512; float fsample=48000.0; From 274633875768c3e31f797c363574109533eb41fc Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 18 Apr 2019 17:19:56 -0500 Subject: [PATCH 214/367] Measure time spent in subtract4.f90. --- lib/ft4/subtractft4.f90 | 1 - lib/ft4_decode.f90 | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ft4/subtractft4.f90 b/lib/ft4/subtractft4.f90 index cb9f2626a..83470d7ea 100644 --- a/lib/ft4/subtractft4.f90 +++ b/lib/ft4/subtractft4.f90 @@ -11,7 +11,6 @@ subroutine subtractft4(dd,itone,f0,dt) parameter (NMAX=18*3456,NFRAME=(103+2)*512) parameter (NFFT=NMAX,NFILT=1400) -! parameter (NFFT=NMAX,NFILT=400) real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk complex cref,camp,cfilt,cw integer itone(103) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 491782a91..b505762e4 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -464,7 +464,9 @@ contains if(unpk77_success) then call get_ft4_tones_from_77bits(message77,i4tone) dt=real(ibest)/750.0 + call timer('subtract',0) call subtractft4(dd,i4tone,f0,dt) + call timer('subtract',1) endif idupe=0 do i=1,ndecodes From 8d8c4f43db1a5bfe7bc810291022584e681a75ca Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 19 Apr 2019 08:58:56 -0400 Subject: [PATCH 215/367] Change label "ARRL RTTY Roundup" to "RTTY Roundup messages". --- Configuration.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration.ui b/Configuration.ui index a576304c7..c92774d9f 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2556,7 +2556,7 @@ Right click for insert and delete options. <html><head/><body><p>ARRL RTTY Roundup and similar contests. Exchange is US state, Canadian province, or &quot;DX&quot;.</p></body></html> - ARRL RTTY Roundup + RTTY Roundup rules special_op_activity_button_group From e1f054d8bfc714745803345a31bb72b291d652f0 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 19 Apr 2019 15:32:00 -0400 Subject: [PATCH 216/367] Use a slightly more generic label "RTTY Roundup messages". --- Configuration.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration.ui b/Configuration.ui index c92774d9f..36a96d66f 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2556,7 +2556,7 @@ Right click for insert and delete options. <html><head/><body><p>ARRL RTTY Roundup and similar contests. Exchange is US state, Canadian province, or &quot;DX&quot;.</p></body></html> - RTTY Roundup rules + RTTY Roundup messages special_op_activity_button_group From 5814887770c5ef008e645383920fe271721e3114 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 19 Apr 2019 14:38:54 -0500 Subject: [PATCH 217/367] FT4: Wire up Fast/Normal/Deep. --- lib/ft4_decode.f90 | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index b505762e4..b217dbb23 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -32,7 +32,7 @@ contains procedure(ft4_decode_callback) :: callback parameter (NSS=NSPS/NDOWN) parameter (NZZ=18*3456) - character message*37,msgsent*37,msg0*37 + character message*37,msgsent*37 character c77*77 character*37 decodes(100) character*512 data_dir,fname @@ -75,13 +75,13 @@ contains logical nohiscall,unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first, dobigfft + logical dosubtract data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ data icos4c/2,3,1,0/ data icos4d/3,2,0,1/ data graymap/0,1,3,2/ - data msg0/' '/ data first/.true./ data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ @@ -91,7 +91,7 @@ contains 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ save fs,dt,tt,txt,twopi,h,one,first,apbits,nappasses,naptypes, & - mycall0,hiscall0,msg0,cqstr0,ctwk2 + mycall0,hiscall0,cqstr0,ctwk2 this%callback => callback hhmmss=cdatetime0(8:13) @@ -201,7 +201,6 @@ contains mycall0=mycall hiscall0=hiscall endif - syncmin=1.2 maxcand=100 ndecodes=0 decodes=' ' @@ -209,7 +208,21 @@ contains fb=nfb dd=iwave - do isp = 1,2 +! ndepth=3: 2 passes, subtract on each pass +! ndepth=2: 1 pass, no subtraction +! ndepth=1: 1 pass, no subtraction, fewer candidates + + max_iterations=40 + syncmin=1.2 + dosubtract=.true. + nsp=2 + if(ndepth.lt.3) then + nsp=1 + dosubtract=.false. + endif + if(ndepth.eq.1) syncmin=2.0 + + do isp = 1,nsp candidate=0.0 ncand=0 call timer('getcand4',0) @@ -373,6 +386,7 @@ contains apmag=maxval(abs(llra))*1.1 npasses=3+nappasses(nQSOProgress) + if(ndepth.eq.1) npasses=3 if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound do ipass=1,npasses if(ipass.eq.1) llr=llra @@ -384,7 +398,7 @@ contains endif if(ipass .gt. 3) then - llrd=llrc + llrd=llra iaptype=naptypes(nQSOProgress,ipass-3) ! ncontest=0 : NONE @@ -450,7 +464,6 @@ contains llr=llrd endif - max_iterations=40 message77=0 call timer('bpdec174',0) call bpdecode174_91(llr,apmask,max_iterations,message77, & @@ -461,7 +474,7 @@ contains message77=mod(message77+rvec,2) ! remove rvec scrambling write(c77,'(77i1)') message77(1:77) call unpack77(c77,1,message,unpk77_success) - if(unpk77_success) then + if(unpk77_success.and.dosubtract) then call get_ft4_tones_from_77bits(message77,i4tone) dt=real(ibest)/750.0 call timer('subtract',0) @@ -472,7 +485,6 @@ contains do i=1,ndecodes if(decodes(i).eq.message) idupe=1 enddo - if(ibest.le.10 .and. message.eq.msg0) idupe=1 !Already decoded if(idupe.eq.1) exit ndecodes=ndecodes+1 decodes(ndecodes)=message @@ -484,7 +496,6 @@ contains nsnr=nint(max(-20.0,xsnr)) xdt=ibest/750.0 - 0.5 call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) - if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate exit endif enddo !Sequence estimation From 5b3a15ce0b6f966e98c7c407a7df872c0f9b020c Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 19 Apr 2019 15:41:24 -0400 Subject: [PATCH 218/367] Insert new, tentative, default dial frequencies for FT4. --- models/FrequencyList.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/models/FrequencyList.cpp b/models/FrequencyList.cpp index d080f76cf..2e0cdb45e 100644 --- a/models/FrequencyList.cpp +++ b/models/FrequencyList.cpp @@ -60,48 +60,52 @@ namespace {3570000, Modes::JT65, IARURegions::ALL}, // JA compatible {3572000, Modes::JT9, IARURegions::ALL}, - {3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65 - // is out of DM allocation - {3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker - // and lock out + {3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65 is out of DM allocation + {3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker and lock out + {3595000, Modes::FT4, IARURegions::ALL}, {7038600, Modes::WSPR, IARURegions::ALL}, {7074000, Modes::FT8, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL}, - {7078000, Modes::FT4, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL}, + {7090000, Modes::FT4, IARURegions::ALL}, {10136000, Modes::FT8, IARURegions::ALL}, {10138000, Modes::JT65, IARURegions::ALL}, {10138700, Modes::WSPR, IARURegions::ALL}, {10140000, Modes::JT9, IARURegions::ALL}, - + {10140000, Modes::FT4, IARURegions::ALL}, + {14095600, Modes::WSPR, IARURegions::ALL}, {14074000, Modes::FT8, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL}, - {14078000, Modes::FT4, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL}, + {14140000, Modes::FT4, IARURegions::ALL}, {18100000, Modes::FT8, IARURegions::ALL}, {18102000, Modes::JT65, IARURegions::ALL}, {18104000, Modes::JT9, IARURegions::ALL}, + {18104000, Modes::FT4, IARURegions::ALL}, {18104600, Modes::WSPR, IARURegions::ALL}, {21074000, Modes::FT8, IARURegions::ALL}, {21076000, Modes::JT65, IARURegions::ALL}, {21078000, Modes::JT9, IARURegions::ALL}, {21094600, Modes::WSPR, IARURegions::ALL}, - + {21140000, Modes::FT4, IARURegions::ALL}, + {24915000, Modes::FT8, IARURegions::ALL}, {24917000, Modes::JT65, IARURegions::ALL}, {24919000, Modes::JT9, IARURegions::ALL}, + {24919000, Modes::FT4, IARURegions::ALL}, {24924600, Modes::WSPR, IARURegions::ALL}, {28074000, Modes::FT8, IARURegions::ALL}, {28076000, Modes::JT65, IARURegions::ALL}, {28078000, Modes::JT9, IARURegions::ALL}, {28124600, Modes::WSPR, IARURegions::ALL}, - + {28180000, Modes::FT4, IARURegions::ALL}, + {50200000, Modes::Echo, IARURegions::ALL}, {50276000, Modes::JT65, IARURegions::R2}, {50276000, Modes::JT65, IARURegions::R3}, @@ -113,6 +117,7 @@ namespace {50310000, Modes::JT65, IARURegions::ALL}, {50312000, Modes::JT9, IARURegions::ALL}, {50313000, Modes::FT8, IARURegions::ALL}, + {50318000, Modes::FT4, IARURegions::ALL}, {50323000, Modes::FT8, IARURegions::ALL}, {70100000, Modes::FT8, IARURegions::R1}, @@ -123,6 +128,7 @@ namespace {144120000, Modes::JT65, IARURegions::ALL}, {144120000, Modes::Echo, IARURegions::ALL}, + {144170000, Modes::FT4, IARURegions::ALL}, {144174000, Modes::FT8, IARURegions::ALL}, {144360000, Modes::MSK144, IARURegions::R1}, {144150000, Modes::MSK144, IARURegions::R2}, From f78a9ec7dffe5a3aada1a3b7f3c4023af385faf9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 19 Apr 2019 15:42:37 -0400 Subject: [PATCH 219/367] Insert June 7 timeout date. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d50520946..13910ca53 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -994,9 +994,9 @@ void MainWindow::not_GA_warning_message () "

" "This is a pre-release version of WSJT-X 2.1.0 made " "available for testing purposes. It will become nonfunctional " - "after June 1, 2019."); + "after June 7, 2019."); QDateTime now=QDateTime::currentDateTime(); - QDateTime timeout=QDateTime(QDate(2019,6,1)); + QDateTime timeout=QDateTime(QDate(2019,6,7)); if(now.daysTo(timeout) < 0) Q_EMIT finished(); } From 25d07fd57445d06f177caa1f0d3de5e27d53d3c2 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 19 Apr 2019 15:14:08 -0500 Subject: [PATCH 220/367] FT4: Hide AP Enable menu pick --- AP is always enabled, for now. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d50520946..067b3f4e6 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5655,7 +5655,7 @@ void MainWindow::on_actionFT4_triggered() ui->label_7->setText("Rx Frequency"); ui->label_6->setText("Band Activity"); ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); - displayWidgets(nWidgets("111010000100111000010000100110001")); + displayWidgets(nWidgets("111010000100111000010000000110001")); ui->txrb2->setEnabled(true); ui->txrb4->setEnabled(true); ui->txrb5->setEnabled(true); From cf2219173a1a1d77e039212581978e9168daa084 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 20 Apr 2019 01:14:23 +0100 Subject: [PATCH 221/367] Squash a SEGV --- lib/ft8/gen_ft8wave.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 37f3b0cbe..10edc994e 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -42,7 +42,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) phi=0.0 dphi = dphi + twopi*f0*dt !Shift frequency up by f0 wave=0. - cwave=0. + if (icmplx .ne. 0) cwave=0. ! avoid writing to memory we may not have access to k=0 do j=nsps,nsps+nwave-1 !Don't include dummy symbols k=k+1 From 561af7f411bfaf3973dd9ddb6565d8c0db23943c Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 20 Apr 2019 09:37:36 -0500 Subject: [PATCH 222/367] Avoid zeroing cwave when it is not going to be used. --- lib/ft4/gen_ft4wave.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 index aa4174645..410e83401 100644 --- a/lib/ft4/gen_ft4wave.f90 +++ b/lib/ft4/gen_ft4wave.f90 @@ -35,7 +35,7 @@ subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) phi=0.0 dphi = dphi + twopi*f0*dt !Shift frequency up by f0 wave=0. - cwave=0. + if(icmplx.eq.1) cwave=0. k=0 do j=0,nwave-1 k=k+1 From eaf567747c7e0395df3ef67935b17516cfecb24b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 22 Apr 2019 09:42:28 -0400 Subject: [PATCH 223/367] Fix the "Tx2 for Tx3" bug when using RTTY RU messages. Needs further testing! --- widgets/mainwindow.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 132aa6cb1..cab69d38d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4533,7 +4533,8 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie if(message_words.size () > 3 // enough fields for a normal message && (message_words.at(1).contains(m_baseCall) || "DE" == message_words.at(1)) // && (message_words.at(2).contains(qso_partner_base_call) or bEU_VHF_w2)) { - && (message_words.at(2).contains(qso_partner_base_call) or m_bDoubleClicked or bEU_VHF_w2)) { + && (message_words.at(2).contains(qso_partner_base_call) or m_bDoubleClicked + or bEU_VHF_w2 or (m_QSOProgress==CALLING))) { if(message_words.at(3).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) { if(SpecOp::NA_VHF==m_config.special_op_id()){ @@ -4660,7 +4661,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } m_QSOProgress = SIGNOFF; } - else if (!(m_bAutoReply && m_QSOProgress > CALLING)) { + else if (!(m_bAutoReply && (m_QSOProgress > CALLING))) { if ((message_words.size () > 4 && message_words.at (1).contains (m_baseCall) && message_words.at (4) == "OOO")) { // EME short code report or MSK144/FT8 contest mode reply, send back Tx3 From dc627cb48c9017fbb5a823c539104959529abfe7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 23 Apr 2019 14:16:55 -0400 Subject: [PATCH 224/367] Enable QSO types other than RTTY RU in FT4 mode. --- widgets/mainwindow.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index cab69d38d..7da40dfcb 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4433,7 +4433,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie return; } - // only allow automatic mode changes between JT9 and JT65, and when not transmitting if (!m_transmitting and m_mode == "JT9+JT65") { if (message.isJT9()) @@ -4529,7 +4528,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie // ### Should be in RTTY contest mode ??? ### MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?")); } - if(message_words.size () > 3 // enough fields for a normal message && (message_words.at(1).contains(m_baseCall) || "DE" == message_words.at(1)) // && (message_words.at(2).contains(qso_partner_base_call) or bEU_VHF_w2)) { @@ -8684,18 +8682,10 @@ void MainWindow::write_all(QString txRx, QString message) void MainWindow::chkFT4() { if(m_mode!="FT4") return; - if(m_config.special_op_id()==SpecOp::RTTY or m_config.special_op_id()==SpecOp::NA_VHF) { - ui->cbAutoSeq->setEnabled(true); - ui->cbFirst->setEnabled(true); - ui->labDXped->setVisible(true); - } else { - ui->cbAutoSeq->setChecked(false); - ui->cbAutoSeq->setEnabled(false); - ui->cbFirst->setChecked(false); - ui->cbFirst->setEnabled(false); - ui->cbFirst->setVisible(false); - ui->labDXped->setVisible(false); - } + ui->cbAutoSeq->setEnabled(true); + ui->cbFirst->setVisible(true); + ui->cbFirst->setEnabled(true); + ui->labDXped->setVisible(m_config.special_op_id()!=SpecOp::NONE); ui->cbFirst->setVisible(ui->cbAutoSeq->isChecked()); if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) { From f308d5246ec890c78abb4bed01edec19adfc0944 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 23 Apr 2019 20:20:45 -0400 Subject: [PATCH 225/367] Make the contest serial number spinner visible, where it should be. --- widgets/mainwindow.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7da40dfcb..67f9132d4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1751,6 +1751,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog bool b = vhf && (m_mode=="JT4" or m_mode=="JT65" or m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="MSK144" or m_mode=="QRA64"); if(b) VHF_features_enabled(b); + if(m_mode=="FT4") on_actionFT8_triggered(); if(m_mode=="FT8") on_actionFT8_triggered(); if(m_mode=="JT4") on_actionJT4_triggered(); if(m_mode=="JT9") on_actionJT9_triggered(); @@ -5616,8 +5617,13 @@ void MainWindow::displayWidgets(qint64 n) j=j>>1; } ui->pbBestSP->setVisible(m_mode=="FT4"); + b=false; + if(m_mode=="FT4" or m_mode=="FT8") { b=SpecOp::EU_VHF==m_config.special_op_id() or (SpecOp::RTTY==m_config.special_op_id() and - (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="SCC")); + (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="#" or + m_config.RTTY_Exchange()=="SCC")); + } + if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_config.special_op_id() ui->sbSerialNumber->setVisible(b); m_lastCallsign.clear (); // ensures Tx5 is updated for new modes genStdMsgs (m_rpt, true); From a19d82e3621fd8ded9c43bc6c8a8d780692ddbd7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 24 Apr 2019 09:30:02 -0400 Subject: [PATCH 226/367] Fix a typo. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 67f9132d4..cc20c9ce4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5623,7 +5623,7 @@ void MainWindow::displayWidgets(qint64 n) (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="#" or m_config.RTTY_Exchange()=="SCC")); } - if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_config.special_op_id() + if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_config.special_op_id(); ui->sbSerialNumber->setVisible(b); m_lastCallsign.clear (); // ensures Tx5 is updated for new modes genStdMsgs (m_rpt, true); From 50eb2914af474cfde6f5b5532616615c867fa956 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 26 Apr 2019 16:44:09 -0500 Subject: [PATCH 227/367] Change FT4 mode symbol to plus (+). --- lib/decoder.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 37ca5b1bd..8ca7e3161 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -604,9 +604,9 @@ contains endif write(*,1001) params%nutc,snr,dt,nint(freq),decoded0,annot -1001 format(i6.6,i4,f5.1,i5,' ~ ',1x,a37,1x,a2) +1001 format(i6.6,i4,f5.1,i5,' + ',1x,a37,1x,a2) write(13,1002) params%nutc,nint(sync),snr,dt,freq,0,decoded0 -1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FT8') +1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FT4') call flush(6) call flush(13) From dc66304a654e5503ca6a902e29fe1739baac1795 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 26 Apr 2019 20:06:32 -0500 Subject: [PATCH 228/367] Improve ALL.TXT formatting for JT9/JT65. Thank you to Sandro, IW3RAB, for submitting this fix. --- widgets/mainwindow.cpp | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index cc20c9ce4..bbd84463b 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8656,24 +8656,44 @@ void MainWindow::write_all(QString txRx, QString message) { QString line; QString t; - QString msg=message.mid(6,-1); + QString msg; + QString mode_string; + + if (message[4]==' ') { + msg=message.mid(4,-1); + } else { + msg=message.mid(6,-1); + } + + if (message[19]=='#') { + mode_string="JT65 "; + } else if (message[19]=='@') { + mode_string="JT9 "; + } else { + mode_string=m_mode.leftJustified(6,' '); + } + msg=msg.mid(0,15) + msg.mid(18,-1); t.sprintf("%5d",ui->TxFreqSpinBox->value()); - if(txRx=="Tx") msg=" 0 0.0" + t + " " + message; + if (txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); time = time.addSecs(-(time.time().second() % m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); - if(m_diskData) { - line=m_fileDateTime + t + txRx + " " + m_mode.leftJustified(6,' ') + msg; + if (m_diskData) { + if (m_fileDateTime.size()==11) { + line=m_fileDateTime + " " + t + txRx + " " + mode_string + msg; + } else { + line=m_fileDateTime + t + txRx + " " + mode_string + msg; + } } else { - line=time.toString("yyMMdd_hhmmss") + t + txRx + " " + m_mode.leftJustified(6,' ') + msg; + line=time.toString("yyMMdd_hhmmss") + t + txRx + " " + mode_string + msg; } QString file_name="ALL.TXT"; - if(m_mode=="WSPR") file_name="ALL_WSPR.TXT"; + if (m_mode=="WSPR") file_name="ALL_WSPR.TXT"; QFile f{m_config.writeable_data_dir().absoluteFilePath(file_name)}; - if(f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) { + if (f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) { QTextStream out(&f); out << line << endl; f.close(); From 3b8b871a7c18cf5ced8f5a28c4c10da012ea9523 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 27 Apr 2019 16:38:19 -0500 Subject: [PATCH 229/367] Disable AP for mycall if more than 5 minutes since last Tx. Used to be 10 minutes. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index bbd84463b..b96240cba 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2811,7 +2811,7 @@ void MainWindow::decode() //decode() QDateTime now = QDateTime::currentDateTimeUtc (); if( m_dateTimeLastTX.isValid () ) { qint64 isecs_since_tx = m_dateTimeLastTX.secsTo(now); - dec_data.params.lapcqonly= (isecs_since_tx > 600); + dec_data.params.lapcqonly= (isecs_since_tx > 300); // QTextStream(stdout) << "last tx " << isecs_since_tx << endl; } else { m_dateTimeLastTX = now.addSecs(-900); From c5a591f30c102b72c931138c10c2b0d54492772c Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 28 Apr 2019 22:06:52 +0100 Subject: [PATCH 230/367] Bump release candidate number --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 8f0591243..59af33460 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 4) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 5) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From a28402c52737855c734c230b4fe9cbb64c5821e5 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 28 Apr 2019 22:20:24 +0100 Subject: [PATCH 231/367] Avoid a crash when Rx samples arrive before wide graph plotter is ready --- widgets/plotter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 38e5027a9..98c1af168 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -123,6 +123,7 @@ void CPlotter::paintEvent(QPaintEvent *) // paint void CPlotter::draw(float swide[], bool bScroll, bool bRed) { + if (!m_TRperiod) return; // not ready to plot yet int j,j0; static int ktop=0; float y,y2,ymin; From 3b6ece8bc6333279f9910023df5c9a22c664c340 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 29 Apr 2019 03:08:59 +0100 Subject: [PATCH 232/367] Add some band plan annotation with some proposed FT4 working frequency suggestions --- models/FrequencyList.cpp | 172 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 167 insertions(+), 5 deletions(-) diff --git a/models/FrequencyList.cpp b/models/FrequencyList.cpp index 2e0cdb45e..eddc6e1f7 100644 --- a/models/FrequencyList.cpp +++ b/models/FrequencyList.cpp @@ -57,31 +57,193 @@ namespace {1838000, Modes::JT65, IARURegions::ALL}, // squeezed allocations {1839000, Modes::JT9, IARURegions::ALL}, {1840000, Modes::FT8, IARURegions::ALL}, - + + // Band plans (all USB dial unless stated otherwise) + // + // R1: 3570 - 3580 DM NB(<200Hz) + // 3580 - 3600 DM NB(<500Hz) with 3590 - 3600 ACDS + // + // 3577.75 OLIVIA, Contestia, etc. + // 3580 PSK31 + // 3583.25 OLIVIA, Contestia, etc. + // + // R2: 3570 - 3580 DM NB(<200Hz) + // 3580 - 3600 DM NB(<500Hz) with 3590 - 3600 ACDS + // + // 3577.75 OLIVIA, Contestia, etc. + // 3580 PSK31 + // 3583.25 OLIVIA, Contestia, etc. + // 3590 RTTY DX + // 3596 W1AW DM QST + // + // R3: 3535 - 3580 DM NB(<2000Hz) + // + // 3520 - 3575 DM NB(<2000Hz) JA 3535 - 3575 shared with all modes + // + // 3522 OLIVIA, Contestia, etc. + // 3535 JA LSB EMCOMM + // 3580 PSK31 + // 3600 LSB EMCOMM + // {3570000, Modes::JT65, IARURegions::ALL}, // JA compatible {3572000, Modes::JT9, IARURegions::ALL}, {3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65 is out of DM allocation {3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker and lock out - {3595000, Modes::FT4, IARURegions::ALL}, - + {3595000, Modes::FT4, IARURegions::ALL}, // G4WJS: band + // planners prefer + // below 3590 but JA + // must be below 3575, + // how about 3586 with + // an R3 alternative + // of 3568. + + // Band plans (all USB dial unless stated otherwise) + // + // R1: 7040 - 7050 DM NB(<500Hz) with 7047 - 7050 ACDS + // 7050 - 7060 DM WB(<2700Hz) with 7050 - 7053 ACDS + // + // 7040 PSK31 + // 7043.25 OLIVIA, Contestia, etc. (main QRQ) + // 7070 PSK31 + // 7073.25 OLIVIA, Contestia, etc. (main QRQ) + // 7090 LSB QRP CoA + // + // R2: 7040 - 7050 DM NB(<500Hz) with 7047 - 7050 ACDS + // 7050 - 7053 DM WB(<2700Hz) ACDS shared with all modes + // + // 7040 RTTY DX + // 7043.25 OLIVIA, Contestia, etc. (main QRQ) + // 7070 PSK31 (also LSB EMCOMM) + // 7073.25 OLIVIA, Contestia, etc. (main QRQ) + // 7080 - 7125 RTTY/Data + // 7090 LSB QRP CoA + // + // R3: 7030 - 7060 DM NB(<2000Hz) with 7040 - 7060 NB DX all shared with phone + // + // 7030 - 7100 DM WB(<3000Hz) JA 7045 - 7100 shared with all modes + // + // 7026.25 OLIVIA, Contestia, etc. (main QRQ) + // 7035 PSK31 + // 7050 JA LSB EMCOMM + // 7090 LSB QRP CoA + // 7110 LSB EMCOMM + // {7038600, Modes::WSPR, IARURegions::ALL}, {7074000, Modes::FT8, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL}, - {7090000, Modes::FT4, IARURegions::ALL}, + {7090000, Modes::FT4, IARURegions::ALL}, // G4WJS: band planners + // prefer below 7050, + // how about 7047 all + // regions although + // clashes with JA + // EMCOMM. + // Band plans (all USB dial unless stated otherwise) + // + // R1: 10130 - 10150 DM NB(<500Hz) with 10120 - 10140 shared with phone in southern Africa + // + // 10139.25 OLIVIA, Contestia, etc. + // 10142 PSK31 + // 10142.25 OLIVIA, Contestia, etc. + // 10143.25 OLIVIA, Contestia, etc. (main QRQ) + // + // R2: 10130 - 10140 DM NB(<500Hz) shared with ACDS + // 10140 - 10150 DM WB(<2700Hz) + // + // 10130 - 10140 RTTY + // 10139.25 OLIVIA, Contestia, etc. + // 10140 - 10150 Packet + // 10142 PSK31 + // 10142.25 OLIVIA, Contestia, etc. + // 10143.25 OLIVIA, Contestia, etc. (main QRQ) + // + // R3: 10130 - 10150 DM NB(<2000Hz) + // + // 10139.25 OLIVIA, Contestia, etc. + // 10142 PSK31 + // 10142.25 OLIVIA, Contestia, etc. + // 10143.25 OLIVIA, Contestia, etc. (main QRQ) + // {10136000, Modes::FT8, IARURegions::ALL}, {10138000, Modes::JT65, IARURegions::ALL}, {10138700, Modes::WSPR, IARURegions::ALL}, {10140000, Modes::JT9, IARURegions::ALL}, {10140000, Modes::FT4, IARURegions::ALL}, + // Band plans (all USB dial unless stated otherwise) + // + // R1: 14070 - 14099 DM NB(<500Hz) with 14089 - 14099 ACDS + // 14101 - 14112 DM NB(<2700Hz) ACDS + // + // 14070 PSK31 + // 14074.4 OLIVIA, Contestia, etc. + // 14075.4 OLIVIA, Contestia, etc. (main QRG) + // 14078.4 OLIVIA, Contestia, etc. + // 14100 NCDXF beacons + // 14105.5 OLIVIA 1000 + // 14106.5 OLIVIA 1000 (main QRG) + // + // R2: 14070 - 14099 DM NB(<500Hz) with 14089 - 14099 ACDS + // 14101 - 14112 DM NB(<2700Hz) ACDS + // + // 14070 - 14095 RTTY + // 14070 PSK31 + // 14074.4 OLIVIA, Contestia, etc. + // 14075.4 OLIVIA, Contestia, etc. (main QRG) + // 14078.4 OLIVIA, Contestia, etc. + // 14095 - 14099.5 Packet + // 14100 NCDXF beacons + // 14100.5 - 14112 Packet + // 14105.5 OLIVIA 1000 + // 14106.5 OLIVIA 1000 (main QRG) + // + // R3: 14070 - 14112 DM NB(<2000Hz) with ±500Hz IBP guard band at 14100 + // + // 14070 PSK31 + // 14074.4 OLIVIA, Contestia, etc. + // 14075.4 OLIVIA, Contestia, etc. (main QRG) + // 14078.4 OLIVIA, Contestia, etc. + // 14100 NCDXF beacons + // 14105.5 OLIVIA 1000 + // 14106.5 OLIVIA 1000 (main QRG) + // {14095600, Modes::WSPR, IARURegions::ALL}, {14074000, Modes::FT8, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL}, - {14140000, Modes::FT4, IARURegions::ALL}, + {14140000, Modes::FT4, IARURegions::ALL}, // G4WJS: band + // planners prefer + // below 14099, how + // about 14080. + // Band plans (all USB dial unless stated otherwise) + // + // R1: 18095 - 18109 DM NB(<500Hz) with 18105 - 18109 ACDS + // 18111 - 18120 DM NB(<2700Hz) ACDS + // + // 18100 PSK31 + // 18103.4 OLIVIA, Contestia, etc. (main QRG) + // 18104.4 OLIVIA, Contestia, etc. + // 18110 NCDXF beacons + // + // R2: 18095 - 18109 DM NB(<500Hz) with 18105 - 18109 ACDS + // 18111 - 18120 DM NB(<2700Hz) ACDS + // + // 18100 - 18105 RTTY + // 18100 PSK31 + // 18103.4 OLIVIA, Contestia, etc. (main QRG) + // 18104.4 OLIVIA, Contestia, etc. + // 18105 - 18110 Packet + // 18110 NCDXF beacons + // + // R3: 18095 - 18120 DM NB(<2000Hz) with ±500Hz IBP guard band at 18110 + // + // 18100 PSK31 + // 18103.4 OLIVIA, Contestia, etc. (main QRG) + // 18104.4 OLIVIA, Contestia, etc. + // 18110 NCDXF beacons + // {18100000, Modes::FT8, IARURegions::ALL}, {18102000, Modes::JT65, IARURegions::ALL}, {18104000, Modes::JT9, IARURegions::ALL}, From e6c3cb33cfd761265f4a93330760b03cb68f37a5 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 29 Apr 2019 16:23:58 +0100 Subject: [PATCH 233/367] Second iteration of proposed FT4 working frequencies --- models/FrequencyList.cpp | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/models/FrequencyList.cpp b/models/FrequencyList.cpp index eddc6e1f7..b135a512a 100644 --- a/models/FrequencyList.cpp +++ b/models/FrequencyList.cpp @@ -89,13 +89,8 @@ namespace {3572000, Modes::JT9, IARURegions::ALL}, {3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65 is out of DM allocation {3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker and lock out - {3595000, Modes::FT4, IARURegions::ALL}, // G4WJS: band - // planners prefer - // below 3590 but JA - // must be below 3575, - // how about 3586 with - // an R3 alternative - // of 3568. + {3575000, Modes::FT4, IARURegions::ALL}, // provisional + {3568000, Modes::FT4, IARURegions::R3}, // provisional // Band plans (all USB dial unless stated otherwise) // @@ -132,12 +127,7 @@ namespace {7074000, Modes::FT8, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL}, - {7090000, Modes::FT4, IARURegions::ALL}, // G4WJS: band planners - // prefer below 7050, - // how about 7047 all - // regions although - // clashes with JA - // EMCOMM. + {7047000, Modes::FT4, IARURegions::ALL}, // provisional // Band plans (all USB dial unless stated otherwise) // @@ -169,7 +159,7 @@ namespace {10138000, Modes::JT65, IARURegions::ALL}, {10138700, Modes::WSPR, IARURegions::ALL}, {10140000, Modes::JT9, IARURegions::ALL}, - {10140000, Modes::FT4, IARURegions::ALL}, + {10140000, Modes::FT4, IARURegions::ALL}, // provisional // Band plans (all USB dial unless stated otherwise) // @@ -212,10 +202,7 @@ namespace {14074000, Modes::FT8, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL}, - {14140000, Modes::FT4, IARURegions::ALL}, // G4WJS: band - // planners prefer - // below 14099, how - // about 14080. + {14080000, Modes::FT4, IARURegions::ALL}, // provisional // Band plans (all USB dial unless stated otherwise) // @@ -247,7 +234,7 @@ namespace {18100000, Modes::FT8, IARURegions::ALL}, {18102000, Modes::JT65, IARURegions::ALL}, {18104000, Modes::JT9, IARURegions::ALL}, - {18104000, Modes::FT4, IARURegions::ALL}, + {18104000, Modes::FT4, IARURegions::ALL}, // provisional {18104600, Modes::WSPR, IARURegions::ALL}, {21074000, Modes::FT8, IARURegions::ALL}, @@ -259,7 +246,7 @@ namespace {24915000, Modes::FT8, IARURegions::ALL}, {24917000, Modes::JT65, IARURegions::ALL}, {24919000, Modes::JT9, IARURegions::ALL}, - {24919000, Modes::FT4, IARURegions::ALL}, + {24919000, Modes::FT4, IARURegions::ALL}, // provisional {24924600, Modes::WSPR, IARURegions::ALL}, {28074000, Modes::FT8, IARURegions::ALL}, @@ -279,7 +266,7 @@ namespace {50310000, Modes::JT65, IARURegions::ALL}, {50312000, Modes::JT9, IARURegions::ALL}, {50313000, Modes::FT8, IARURegions::ALL}, - {50318000, Modes::FT4, IARURegions::ALL}, + {50318000, Modes::FT4, IARURegions::ALL}, // provisional {50323000, Modes::FT8, IARURegions::ALL}, {70100000, Modes::FT8, IARURegions::R1}, From ce1c4f08ad59e945a439f044d78d92bf7d2f7c72 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 29 Apr 2019 16:25:43 +0100 Subject: [PATCH 234/367] Updated CTY.DAT - Big CTY.DAT dated 16th April 2019 --- cty.dat | 854 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 430 insertions(+), 424 deletions(-) diff --git a/cty.dat b/cty.dat index 8da4e07fe..3e12eaf9a 100644 --- a/cty.dat +++ b/cty.dat @@ -32,7 +32,7 @@ Vietnam: 26: 49: AS: 15.80: -107.90: -7.0: 3W: Guinea: 35: 46: AF: 11.00: 10.68: 0.0: 3X: 3X; Bouvet: 38: 67: AF: -54.42: -3.38: -1.0: 3Y/b: - =3Y/ZS6GCM,=3Y0C,=3Y0E,=3Y0I; + =3Y/ZS6GCM,=3Y0C,=3Y0E; Peter 1 Island: 12: 72: SA: -68.77: 90.58: 4.0: 3Y/p: =3Y0X; Azerbaijan: 21: 29: AS: 40.45: -47.37: -4.0: 4J: @@ -119,11 +119,11 @@ West Malaysia: 28: 54: AS: 3.95: -102.23: -8.0: 9M2: =9W6MAN/2; East Malaysia: 28: 54: OC: 2.68: -113.32: -8.0: 9M6: 9M6,9M8,9W6,9W8,=9M1CSQ,=9M1CSS,=9M2/G3TMA/6,=9M2/PG5M/6,=9M2/R6AF/6,=9M2GCN/6,=9M2MDX/6, - =9M4ARD/6,=9M4CBP,=9M4CCB,=9M4CHQ,=9M4CJN,=9M4CMY,=9M4CPB,=9M4CRB,=9M4CRP,=9M4CSR,=9M4CWS,=9M4GCW, - =9M4JSE,=9M4LHM,=9M4LHS,=9M4LTW,=9M4RSA,=9M4SAB,=9M4SEB,=9M4SHQ,=9M4SJE,=9M4SJO,=9M4SJQ,=9M4SJS, - =9M4SJSA,=9M4SJSB,=9M4SJSD,=9M4SJSL,=9M4SJSP,=9M4SJST,=9M4SJSW,=9M4SJX,=9M4SMO,=9M4SMS,=9M4SMY, - =9M4STA,=9M4SWK,=9M50IARU/6,=9M50IARU/8,=9M50MQ,=9M50MS,=9M51GW,=9M51SB,=9M53QA,=9M57MS,=9M57MW, - =9M58MS,=9M58MW,=9M59MS,=9M59MW,=9M9/7M2VPR,=9M9/CCL,=9W2RCR/6,=9W2VVH/6; + =9M4ARD/6,=9M4CBP,=9M4CCB,=9M4CHQ,=9M4CJN,=9M4CKT,=9M4CMY,=9M4CPB,=9M4CRB,=9M4CRP,=9M4CSR,=9M4CWS, + =9M4GCW,=9M4JSE,=9M4LHM,=9M4LHS,=9M4LTW,=9M4RSA,=9M4SAB,=9M4SEB,=9M4SHQ,=9M4SJE,=9M4SJO,=9M4SJQ, + =9M4SJS,=9M4SJSA,=9M4SJSB,=9M4SJSD,=9M4SJSL,=9M4SJSP,=9M4SJST,=9M4SJSW,=9M4SJX,=9M4SMO,=9M4SMS, + =9M4SMY,=9M4STA,=9M4SWK,=9M50IARU/6,=9M50IARU/8,=9M50MQ,=9M50MS,=9M51GW,=9M51SB,=9M53QA,=9M57MS, + =9M57MW,=9M58MS,=9M58MW,=9M59MS,=9M59MW,=9M9/7M2VPR,=9M9/CCL,=9W2RCR/6,=9W2VVH/6; Nepal: 22: 42: AS: 27.70: -85.33: -5.75: 9N: 9N; Dem. Rep. of the Congo: 36: 52: AF: -3.12: -23.03: -1.0: 9Q: @@ -486,7 +486,7 @@ Nauru: 31: 65: OC: -0.52: -166.92: -12.0: C2: Andorra: 14: 27: EU: 42.58: -1.62: -1.0: C3: C3; The Gambia: 35: 46: AF: 13.40: 16.38: 0.0: C5: - C5,=C56W/BI; + C5,=C56W/BI,=VERSION; Bahamas: 08: 11: NA: 24.25: 76.00: 5.0: C6: C6,=WK2G/C6A/LH; Mozambique: 37: 53: AF: -18.25: -35.00: -2.0: C9: @@ -654,8 +654,8 @@ Palestine: 20: 39: AS: 31.28: -34.27: -2.0: E4: E4; North Cook Islands: 32: 62: OC: -10.02: 161.08: 10.0: E5/n: =E51LYC,=E51QMA,=E51TUG, - =E51AMF,=E51AUZ,=E51GC,=E51M,=E51MAN,=E51MBX,=E51MKW,=E51MQT,=E51NPQ,=E51PT,=E51QQQ,=E51UFF, - =E51WWB,=ZK1HCC,=ZK1MA,=ZK1NCF,=ZK1NCI,=ZK1TTG, + =E51AMF,=E51GC,=E51M,=E51MAN,=E51MBX,=E51MKW,=E51MQT,=E51PT,=E51QQQ,=E51UFF,=E51WWB,=ZK1HCC, + =ZK1MA,=ZK1NCF,=ZK1NCI,=ZK1TTG, =E50W[63],=E51PDX[63],=E51PEN[63],=E51WL[63],=ZK1/AC4LN/N[63],=ZK1KDN[63],=ZK1NCP[63],=ZK1NDK[63], =ZK1NJC[63],=ZK1QMA[63],=ZK1TUG[63],=ZK1WL[63]; South Cook Islands: 32: 63: OC: -21.90: 157.93: 10.0: E5/s: @@ -670,14 +670,13 @@ Spain: 14: 37: EU: 40.37: 4.88: -1.0: EA: =AM1TDH/LH,=EA1APV/LH,=EA1BEY/Y,=EA1EEY/L,=EA1EEY/LGT,=EA1EEY/LH,=EA1EK/ZAP,=EA1FGS/LH,=EA1HLW/YL, =EA1RCG/CPV,=EA1RCG/SEU,=EA1RCG/YOA,=EA1RCI/CA,=EA1RCI/CR,=EA1RCI/CVG,=EA1RCI/ESM,=EA1RCI/IA, =EA1RCI/ICA,=EA1RCI/JBN,=EA1RCI/PAZ,=EA1RCI/PCV,=EA1RCI/RSM,=EA1RCI/YOA,=EA1URL/CVL,=EA1URO/D, - =EA5AER/P,=EA6QB/1,=EA8BFH/1,=EA8CZT/1,=EA8FC/1,=EA8RV/P,=EA9CD/1,=EA9CI/1,=EA9CP/1,=EA9PD/1, - =EB1DH/LH,=ED1IRM/LH,=EG1ILW/LH,=EG1LWC/LH,=EG1LWI/LH,=EG1LWN/LH,=EG1TDH/LH,=EG90IARU/1, + =EA3HSD/P,=EA5AER/P,=EA6QB/1,=EA8BFH/1,=EA8CZT/1,=EA8FC/1,=EA8RV/P,=EA9CD/1,=EA9CI/1,=EA9CP/1, + =EA9PD/1,=EB1DH/LH,=ED1IRM/LH,=EG1ILW/LH,=EG1LWC/LH,=EG1LWI/LH,=EG1LWN/LH,=EG1TDH/LH,=EG90IARU/1, =AM08ATU/H,=AM08CAZ/H,=AM08CYQ/H,=AM08EIE/Z,=AM08FAC/H,=AN08ADE/H,=AO08BQH/Z,=AO08BTM/Z, =AO08CIK/H,=AO08CVV/Z,=AO08CXK/H,=AO08CYL/H,=AO08DI/Z,=AO08EIE/Z,=AO08HV/Z,=AO08ICA/Z,=AO08ID/Z, =AO08KJ/Z,=AO08KV/Z,=AO08OK/H,=AO08PB/Z,=AO08RKO/H,=AO08VK/Z,=AO2016DSS/LH,=EA2/ON7RU/LH, =EA2CRX/LH,=EA2EZ/P,=EA2SPS/LH,=EA2URI/O,=EA6SK/2,=EA9CP/2,=EG90IARU/2, - =EA3ESZ/Z,=EA3EVR/R,=EA3HSD/P,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3, - =EG90IARU/3, + =EA3ESZ/Z,=EA3EVR/R,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3,=EG90IARU/3, =EA4AAQ/O,=EA4RCH/CIE,=EA6AFU/4,=EA6RC/4,=EA8BFH/4,=EA8BY/4,=EA9CI/4,=EA9CP/4,=EG8AOP/4, =EG90IARU/4, =EA5ADM/P,=EA5CC/P,=EA5EQ/N,=EA5EZ/P,=EA5FL/LH,=EA5GVT/AVW,=EA5HCC/P,=EA5IKT/P,=EA5KB/LH,=EA5ND/D, @@ -690,27 +689,29 @@ Spain: 14: 37: EU: 40.37: 4.88: -1.0: EA: =EA9CP/7,=EA9FN/7,=EA9HU,=EA9HU/7,=EA9JS/7,=EA9LZ/7,=EA9PD/7,=EA9QD/7,=EA9UL/7,=EA9UV/7,=EB9PH/7, =EC7DZZ/LH,=EG90IARU/7; Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6: - AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,=EA1QE/6,=EA1YO/6,=EA2EZ/6,=EA2SG/6,=EA2TW/6,=EA3BT/6, - =EA3CBH/6,=EA3ERT/6,=EA3HSD/6,=EA3HUX/6,=EA3HZX/6,=EA3HZX/P,=EA4LO/6,=EA5ADM/6,=EA5BB/6,=EA5BK/6, - =EA5BTL/6,=EA5EOR/6,=EA5ER/6,=EA5EZ/6,=EA5FL/P,=EA5HCC/6,=EA5IIG/6,=EA5IKT/6,=EA5RKB/6, - =EA6/DJ7AO/LH,=EA6/G0SGB/LH,=EA6HP/J,=EA6LU/P,=EA6URI/PAZ,=EA6URL/IF,=EA7DUT/6,=EA9CI/6,=EA9CP/6, - =EB1BRH/6,=EB2GKK/6,=EB3CW/6,=EC5AC/6,=EC5BME/6,=EC5EA/P,=EC5EC/6,=EC6TV/N,=EC7AT/6,=ED4SHF/6, - =ED5ON/6,=EH90IARU/6; + AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,=AM70URE/6,=EA1QE/6,=EA1YO/6,=EA2EZ/6,=EA2SG/6, + =EA2TW/6,=EA3BT/6,=EA3CBH/6,=EA3ERT/6,=EA3HSD/6,=EA3HUX/6,=EA3HZX/6,=EA3HZX/P,=EA4LO/6,=EA5ADM/6, + =EA5BB/6,=EA5BK/6,=EA5BTL/6,=EA5EOR/6,=EA5ER/6,=EA5EZ/6,=EA5FL/P,=EA5HCC/6,=EA5IIG/6,=EA5IKT/6, + =EA5RKB/6,=EA6/DJ7AO/LH,=EA6/G0SGB/LH,=EA6HP/J,=EA6LU/P,=EA6URI/PAZ,=EA6URL/IF,=EA7DUT/6,=EA9CI/6, + =EA9CP/6,=EB1BRH/6,=EB2GKK/6,=EB3CW/6,=EC5AC/6,=EC5BME/6,=EC5EA/P,=EC5EC/6,=EC6TV/N,=EC7AT/6, + =ED4SHF/6,=ED5ON/6,=EH90IARU/6; Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8: - AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8,=AN400L,=AN400U,=AO150ITU/8,=AO150U,=AO4AAA/8, - =EA1AK/8,=EA1AP/8,=EA1EHW/8,=EA1YO/8,=EA3RKB/8,=EA4BQ/8,=EA4ESI/8,=EA4SV/8,=EA4WT/8,=EA4ZK/8, - =EA5BK/8,=EA5HCC/8,=EA5RKL/8,=EA7JR/8,=EA8/DJ5AA/LH,=EA8AKG/F,=EA8AKG/G,=EA8DO/LP,=EA8EE/L, - =EA8TH/LP,=EA8URE/YOTA,=EA8URL/LH,=EA8URL/P/SBI,=EA9CI/8,=EA9CP/8,=EB2EMH/8,=EC1KR/8,=EC8AFM/LH, - =ED4R/8,=ED5RKL/8,=ED8BTM/C,=ED8BTM/E,=ED8BTM/J,=ED8BTM/L,=ED8BTM/S,=ED8GSA/J,=ED8LIB/C,=ED8LIB/D, - =ED8LIB/E,=ED8LIB/F,=ED8LIB/G,=ED8LIB/H,=ED8LIB/I,=ED8LIB/J,=ED8LIB/K,=ED8LIB/N,=ED8LIB/O, - =ED8LIB/Q,=ED8LPA/L,=ED8MCC/LH,=ED8OTA/D,=ED8OTA/H,=ED8PDC/E,=ED8PDC/K,=ED8PDC/LP,=ED8PDC/O, - =EF8LIB/N,=EG8LIB/C,=EG8LIB/D,=EG8LIB/E,=EG8LIB/F,=EG8LIB/G,=EG8LIB/H,=EG8LIB/I,=EG8LIB/L, - =EG8LIB/M,=EG8LIB/N,=EG8LIB/O,=EG8LIB/P,=EG8LIB/Q,=EG8LP/YL,=EH8FLH/LH,=EH90IARU/8, + AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8,=AM70URE/8,=AN400L,=AN400U,=AO150ITU/8,=AO150U, + =AO4AAA/8,=EA1AK/8,=EA1AP/8,=EA1EHW/8,=EA1YO/8,=EA3RKB/8,=EA4BQ/8,=EA4ESI/8,=EA4SV/8,=EA4WT/8, + =EA4ZK/8,=EA5BK/8,=EA5HCC/8,=EA5RKL/8,=EA7JR/8,=EA8/DJ5AA/LH,=EA8AKG/F,=EA8AKG/G,=EA8DO/LP, + =EA8EE/L,=EA8TH/LP,=EA8URE/YOTA,=EA8URL/LH,=EA8URL/P/SBI,=EA9CI/8,=EA9CP/8,=EB2EMH/8,=EC1KR/8, + =EC8AFM/LH,=ED4R/8,=ED5RKL/8,=ED8BTM/C,=ED8BTM/E,=ED8BTM/J,=ED8BTM/L,=ED8BTM/S,=ED8GSA/J, + =ED8LIB/C,=ED8LIB/D,=ED8LIB/E,=ED8LIB/F,=ED8LIB/G,=ED8LIB/H,=ED8LIB/I,=ED8LIB/J,=ED8LIB/K, + =ED8LIB/N,=ED8LIB/O,=ED8LIB/Q,=ED8LPA/L,=ED8MCC/LH,=ED8OTA/D,=ED8OTA/H,=ED8PDC/E,=ED8PDC/K, + =ED8PDC/LP,=ED8PDC/O,=EF8LIB/N,=EG8LIB/C,=EG8LIB/D,=EG8LIB/E,=EG8LIB/F,=EG8LIB/G,=EG8LIB/H, + =EG8LIB/I,=EG8LIB/L,=EG8LIB/M,=EG8LIB/N,=EG8LIB/O,=EG8LIB/P,=EG8LIB/Q,=EG8LP/YL,=EH8FLH/LH, + =EH90IARU/8, =EA2TW/8,=EA3FNZ/8,=EA5EZ/8, =AO3MWC/8,=EA2SG/8,=EA4BFH/8,=EA4DE/8,=EA5RKB/8,=EA8BFH/P; Ceuta & Melilla: 33: 37: AF: 35.90: 5.27: -1.0: EA9: - AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9,=EA4URE/9,=EA7URM/9,=EA9CE/C,=EA9CE/D,=EA9CE/E, - =EA9CE/F,=EA9CE/G,=EA9CE/H,=EA9CE/I,=EA9URC/PAZ,=EC7DZZ/9,=ED3AFR/9,=ED9CE/D,=ED9CE/E,=ED9CE/F, + AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9,=AM70URE/9,=EA4URE/9,=EA7URM/9,=EA9CE/C,=EA9CE/D, + =EA9CE/E,=EA9CE/F,=EA9CE/G,=EA9CE/H,=EA9CE/I,=EA9URC/PAZ,=EC7DZZ/9,=ED3AFR/9,=ED9CE/D,=ED9CE/E, + =ED9CE/F, =EA3EGB/9,=EA5RKB/9,=EA7UV/P,=EA9CD/M,=EA9CD/P,=EB9PH/P,=EC5ALJ/9, =EA5DCL/9,=EA7JTF/9,=EA9PD/M,=EA9PD/P,=EC7DRS/9; Ireland: 14: 27: EU: 53.13: 8.02: 0.0: EI: @@ -871,20 +872,20 @@ Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: =2Q0YCG,=2Q1MIC,=2Q1SJB,=2R0BOO,=2R0BSE,=2R0BXN,=2R0BZB,=2R0DES,=2R0DXR,=2R0FYG,=2R0GLI,=2R0HJS, =2R0IMP,=2R0IOB,=2R0ISM,=2R0JVR,=2R0KAU,=2R0KAU/P,=2R0NCM,=2R0OXX,=2R0YCG,=2R0ZPS,=2R1MIC,=2R1SJB, =2V0GUL,=2V0IVG,=2V0JCH,=2V0KAU,=2V0TAX,=2V1HFE,=2V1MIC,=2V1SJB,=G0FBJ,=GA6NX/LH,=GB0AYR,=GB0BAJ, - =GB0BCG,=GB0BCK,=GB0BD,=GB0BDC,=GB0BL,=GB0BNA,=GB0BNC,=GB0BOL,=GB0BSS,=GB0BWT,=GB0CCF,=GB0CHL, - =GB0CLH,=GB0CML,=GB0CNL,=GB0CWF,=GB0CWS,=GB0DBS,=GB0DHL,=GB0DPK,=GB0EPC,=GB0FFS,=GB0FSG,=GB0GDS, - =GB0GDS/J,=GB0GGR,=GB0GRN,=GB0HHW,=GB0HLD,=GB0JOG,=GB0KEY,=GB0KGS,=GB0KKS,=GB0KLT,=GB0LCS,=GB0LCW, - =GB0LTM,=GB0MLH,=GB0MLM,=GB0MOG,=GB0MOL,=GB0MSL,=GB0MUL,=GB0NGG,=GB0NHL,=GB0NHL/LH,=GB0NRL, - =GB0OYT,=GB0PLS,=GB0POS,=GB0PPE,=GB0PSW,=GB0RGC,=GB0SAA,=GB0SBC,=GB0SCD,=GB0SFM,=GB0SHP,=GB0SI, - =GB0SK,=GB0SKG,=GB0SKY,=GB0SRC,=GB0SSB,=GB0TH,=GB0THL,=GB0TNL,=GB0TTS,=GB0WRH,=GB100MAS,=GB100MUC, - =GB100ZET,=GB10SP,=GB150NRL,=GB18FIFA,=GB19CGM,=GB19CS,=GB1AJ,=GB1ASC,=GB1ASH,=GB1BD,=GB1BOL, - =GB1CFL,=GB1DHL,=GB1FB,=GB1FRS,=GB1FS,=GB1FVS,=GB1FVT,=GB1GEO,=GB1HRS,=GB1KGG,=GB1KLD,=GB1LAY, - =GB1LGG,=GB1LL,=GB1MAY,=GB1NHL,=GB1OL,=GB1OL/LH,=GB1PC,=GB1RB,=GB1RHU,=GB1SLH,=GB1TAY,=GB1WLG, - =GB250RB,=GB2AES,=GB2AGG,=GB2AL,=GB2AST,=GB2ATC,=GB2AYR,=GB2BAJ,=GB2BHM,=GB2BHS,=GB2BMJ,=GB2BOL, - =GB2CAS,=GB2CHC,=GB2CM,=GB2CMA,=GB2CVL,=GB2DAS,=GB2DHS,=GB2DL,=GB2DRC,=GB2DT,=GB2DTM,=GB2ELH, - =GB2ELH/LH,=GB2EPC,=GB2FBM,=GB2FSM,=GB2FSW,=GB2GEO,=GB2GKR,=GB2GNL,=GB2GNL/LH,=GB2GTM,=GB2HLB, - =GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT,=GB2JCM,=GB2KDR,=GB2KGB,=GB2KW, - =GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB,=GB2LHI,=GB2LK,=GB2LK/LH, + =GB0BCG,=GB0BCK,=GB0BD,=GB0BDC,=GB0BL,=GB0BNA,=GB0BNC,=GB0BOC,=GB0BOL,=GB0BSS,=GB0BWT,=GB0CCF, + =GB0CHL,=GB0CLH,=GB0CML,=GB0CNL,=GB0CWF,=GB0CWS,=GB0DBS,=GB0DHL,=GB0DPK,=GB0EPC,=GB0FFS,=GB0FSG, + =GB0GDS,=GB0GDS/J,=GB0GGR,=GB0GRN,=GB0HHW,=GB0HLD,=GB0JOG,=GB0KEY,=GB0KGS,=GB0KKS,=GB0KLT,=GB0LCS, + =GB0LCW,=GB0LTM,=GB0MLH,=GB0MLM,=GB0MOG,=GB0MOL,=GB0MSL,=GB0MUL,=GB0NGG,=GB0NHL,=GB0NHL/LH, + =GB0NRL,=GB0OYT,=GB0PLS,=GB0POS,=GB0PPE,=GB0PSW,=GB0RGC,=GB0SAA,=GB0SBC,=GB0SCD,=GB0SFM,=GB0SHP, + =GB0SI,=GB0SK,=GB0SKG,=GB0SKY,=GB0SRC,=GB0SSB,=GB0TH,=GB0THL,=GB0TNL,=GB0TTS,=GB0WRH,=GB100MAS, + =GB100MUC,=GB100ZET,=GB10SP,=GB150NRL,=GB18FIFA,=GB19CGM,=GB19CS,=GB1AJ,=GB1ASC,=GB1ASH,=GB1BD, + =GB1BOL,=GB1CFL,=GB1DHL,=GB1FB,=GB1FRS,=GB1FS,=GB1FVS,=GB1FVT,=GB1GEO,=GB1HRS,=GB1KGG,=GB1KLD, + =GB1LAY,=GB1LGG,=GB1LL,=GB1MAY,=GB1NHL,=GB1OL,=GB1OL/LH,=GB1PC,=GB1RB,=GB1RHU,=GB1SLH,=GB1TAY, + =GB1WLG,=GB250RB,=GB2AES,=GB2AGG,=GB2AL,=GB2AST,=GB2ATC,=GB2AYR,=GB2BAJ,=GB2BHM,=GB2BHS,=GB2BMJ, + =GB2BOL,=GB2CAS,=GB2CHC,=GB2CM,=GB2CMA,=GB2CVL,=GB2DAS,=GB2DHS,=GB2DL,=GB2DRC,=GB2DT,=GB2DTM, + =GB2ELH,=GB2ELH/LH,=GB2EPC,=GB2FBM,=GB2FSM,=GB2FSW,=GB2GEO,=GB2GKR,=GB2GNL,=GB2GNL/LH,=GB2GTM, + =GB2HLB,=GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT,=GB2JCM,=GB2KDR,=GB2KGB, + =GB2KW,=GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB,=GB2LHI,=GB2LK,=GB2LK/LH, =GB2LMG,=GB2LP,=GB2LS,=GB2LS/LH,=GB2LSS,=GB2LT,=GB2LT/LH,=GB2LXX,=GB2M,=GB2MAS,=GB2MBB,=GB2MDG, =GB2MN,=GB2MOF,=GB2MSL,=GB2MUC,=GB2MUL,=GB2NBC,=GB2NEF,=GB2NL,=GB2OL,=GB2OWM,=GB2PBF,=GB2PG, =GB2QM,=GB2RB,=GB2RDR,=GB2RRL,=GB2RWW,=GB2SAA,=GB2SAM,=GB2SAS,=GB2SB,=GB2SBG,=GB2SHL/LH,=GB2SKG, @@ -1170,7 +1171,7 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =WH9AAH(4)[7],=WL0JF(4)[7],=WL1ON(4)[7],=WL7AEC(4)[7],=WL7AJA(4)[7],=WL7ANY(4)[7],=WL7ATK(4)[7], =WL7BT(4)[7],=WL7CEG(4)[7],=WL7CLI(4)[7],=WL7CPW(4)[7],=WL7CQF(4)[7],=WL7CRT(4)[7],=WL7CY(4)[7], =WL7JB(4)[7],=WL7LZ(4)[7],=WL7LZ/M(4)[7],=WL7RV(4)[7],=WL7YM(4)[7],=WP2B/0(4)[7],=WP3QH(4)[7], - =WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4HRK(4)[7],=WP4LC(4)[7],=WP4NPV(4)[7], + =WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4LC(4)[7],=WP4NPV(4)[7], =AH2V(5)[8],=AH2W(5)[8],=AH6BV(5)[8],=AL0A(5)[8],=AL1O(5)[8],=AL4V(5)[8],=AL6L(5)[8],=AL6M(5)[8], =AL7EL(5)[8],=AL7LV(5)[8],=AL7QS(5)[8],=AL8E(5)[8],=KH2AB(5)[8],=KH2EH(5)[8],=KH6GR(5)[8], =KH6HZ(5)[8],=KH6IKI(5)[8],=KH6JKQ(5)[8],=KH6JUK(5)[8],=KH6RF(5)[8],=KH6RF/1(5)[8],=KH6RF/M(5)[8], @@ -1179,15 +1180,16 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KL7IXX(5)[8],=KL7JHM(5)[8],=KL7JJN(5)[8],=KL7JR/1(5)[8],=KL7JT(5)[8],=KL7LK(5)[8], =KL7USI/1(5)[8],=KL8DX(5)[8],=KP4ANG(5)[8],=KP4BLS(5)[8],=KP4BPR(5)[8],=KP4DGF(5)[8], =KP4EC/1(5)[8],=KP4G(5)[8],=KP4GVT(5)[8],=KP4MR(5)[8],=KP4NPL(5)[8],=KP4NW(5)[8],=KP4R(5)[8], - =KP4RCD(5)[8],=NH0H(5)[8],=NH6IH(5)[8],=NH6XW(5)[8],=NH6ZB(5)[8],=NL7FJ(5)[8],=NL7MO(5)[8], - =NL7NJ(5)[8],=NL7OI(5)[8],=NL7OT(5)[8],=NL9H(5)[8],=NP2FZ(5)[8],=NP2FZ/1(5)[8],=NP2GG(5)[8], - =NP2PN(5)[8],=NP3IV(5)[8],=NP3LN(5)[8],=NP4AO(5)[8],=NP4AZ(5)[8],=NP4ER(5)[8],=VE1BES/M(5)[8], - =VE3CMB/M(5)[8],=VE4CCN/M(5)[8],=WH0EWX(5)[8],=WH2B(5)[8],=WH6CT(5)[8],=WH6DSN(5)[8],=WH6EI(5)[8], - =WH6FBH(5)[8],=WH6MY(5)[8],=WH6SW(5)[8],=WH6SW/1(5)[8],=WH7TP(5)[8],=WL1B(5)[8],=WL7B(5)[8], - =WL7CC(5)[8],=WL7CUP(5)[8],=WL7CVD(5)[8],=WL7WO(5)[8],=WL7WO/1(5)[8],=WL7Z/1(5)[8],=WP2MG(5)[8], - =WP3NN(5)[8],=WP3QV(5)[8],=WP3QV/1(5)[8],=WP3WV(5)[8],=WP4AKE(5)[8],=WP4AZJ(5)[8],=WP4BC(5)[8], - =WP4BF(5)[8],=WP4CJH(5)[8],=WP4JF(5)[8],=WP4KQ(5)[8],=WP4MKJ(5)[8],=WP4MMV(5)[8],=WP4MOC(5)[8], - =WP4NKW(5)[8],=WP4NUV(5)[8],=WP4NYY(5)[8],=WP4OIG(5)[8],=WP4OJK(5)[8], + =KP4RCD(5)[8],=KP4ZEM(5)[8],=NH0H(5)[8],=NH6IH(5)[8],=NH6XW(5)[8],=NH6ZB(5)[8],=NL7AK(5)[8], + =NL7FJ(5)[8],=NL7MO(5)[8],=NL7NJ(5)[8],=NL7OI(5)[8],=NL7OT(5)[8],=NL9H(5)[8],=NP2FZ(5)[8], + =NP2FZ/1(5)[8],=NP2GG(5)[8],=NP2PN(5)[8],=NP3IV(5)[8],=NP3LN(5)[8],=NP4AO(5)[8],=NP4AZ(5)[8], + =NP4ER(5)[8],=VE1BES/M(5)[8],=VE3CMB/M(5)[8],=VE4CCN/M(5)[8],=WH0EWX(5)[8],=WH2B(5)[8], + =WH6CT(5)[8],=WH6DSN(5)[8],=WH6EI(5)[8],=WH6FBH(5)[8],=WH6MY(5)[8],=WH6SW(5)[8],=WH6SW/1(5)[8], + =WH7TP(5)[8],=WL1B(5)[8],=WL7B(5)[8],=WL7CC(5)[8],=WL7CUP(5)[8],=WL7CVD(5)[8],=WL7WO(5)[8], + =WL7WO/1(5)[8],=WL7Z/1(5)[8],=WP2MG(5)[8],=WP3NN(5)[8],=WP3QV(5)[8],=WP3QV/1(5)[8],=WP3WV(5)[8], + =WP4AKE(5)[8],=WP4AZJ(5)[8],=WP4BC(5)[8],=WP4BF(5)[8],=WP4CJH(5)[8],=WP4JF(5)[8],=WP4KQ(5)[8], + =WP4MKJ(5)[8],=WP4MMV(5)[8],=WP4MOC(5)[8],=WP4NKW(5)[8],=WP4NUV(5)[8],=WP4NYY(5)[8],=WP4OIG(5)[8], + =WP4OJK(5)[8], =AH0BR(5)[8],=AH2AL(5)[8],=AH2O(5)[8],=AH6K(5)[8],=AL0Q(5)[8],=AL0Y(5)[8],=AL2O(5)[8], =AL7RG(5)[8],=KH2CW(5)[8],=KH2P(5)[8],=KH2R(5)[8],=KH4AG(5)[8],=KH6ALN(5)[8],=KH6HO(5)[8], =KH7GA(5)[8],=KH7JO(5)[8],=KH7JO/2(5)[8],=KH7MX(5)[8],=KH7NE(5)[8],=KH8ZK(5)[8],=KL0WV(5)[8], @@ -1201,7 +1203,7 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =WP3MD(5)[8],=WP3VU(5)[8],=WP3WZ(5)[8],=WP4AR(5)[8],=WP4BMU(5)[8],=WP4BNI(5)[8],=WP4BZ(5)[8], =WP4CB(5)[8],=WP4DME(5)[8],=WP4DWH(5)[8],=WP4EHY(5)[8],=WP4EYW(5)[8],=WP4HLY(5)[8],=WP4HXS(5)[8], =WP4KXX(5)[8],=WP4LYI(5)[8],=WP4MQN(5)[8],=WP4MRB(5)[8],=WP4MUJ(5)[8],=WP4MYM(5)[8],=WP4MZO(5)[8], - =WP4NBS(5)[8],=WP4OCO(5)[8],=WP4OPY(5)[8],=WP4PZB(5)[8],=WP4R(5)[8],=XL3TUV/M(5)[8], + =WP4NBS(5)[8],=WP4NZF(5)[8],=WP4OCO(5)[8],=WP4OPY(5)[8],=WP4PZB(5)[8],=WP4R(5)[8],=XL3TUV/M(5)[8], =XM3CMB/M(5)[8], =4U1WB(5)[8],=AH6AX(5)[8],=AH6FF/3(5)[8],=AH6R(5)[8],=AH6Z(5)[8],=AH7J(5)[8],=AH8P(5)[8], =AL1B(5)[8],=AL1B/M(5)[8],=AL7AB(5)[8],=AL7NN(5)[8],=AL7NN/3(5)[8],=AL7RS(5)[8],=KH2GM(5)[8], @@ -1210,16 +1212,16 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KL7FD(5)[8],=KL7GLK/3(5)[8],=KL7HR/3(5)[8],=KL7JO(5)[8],=KL7OF/3(5)[8],=KL7OQ(5)[8], =KL9A/3(5)[8],=KP3M(5)[8],=KP4CAM(5)[8],=KP4FCF(5)[8],=KP4GB/3(5)[8],=KP4IP(5)[8],=KP4JB(5)[8], =KP4N(5)[8],=KP4N/3(5)[8],=KP4PRI(5)[8],=KP4UV(5)[8],=KP4WR(5)[8],=KP4XO(5)[8],=KP4XX(5)[8], - =KP4YH(5)[8],=NH2CW(5)[8],=NH6BD(5)[8],=NH6BK(5)[8],=NH7C(5)[8],=NH7CC(5)[8],=NH7YK(5)[8], - =NL7CK(5)[8],=NL7PJ(5)[8],=NL7V/3(5)[8],=NL7XM(5)[8],=NL7XM/B(5)[8],=NP2EP(5)[8],=NP2G(5)[8], - =NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8],=NP3YN(5)[8],=NP4RH(5)[8],=NP4YZ(5)[8],=WH6ADS(5)[8], - =WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8],=WH6CTO(5)[8],=WH6DOA(5)[8],=WH6ECO(5)[8],=WH6EEL(5)[8], - =WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8],=WH6OB(5)[8],=WH7F(5)[8],=WH7USA(5)[8],=WL7AF(5)[8], - =WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8],=WP3EC(5)[8],=WP3FK(5)[8],=WP4DA(5)[8], - =WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HSZ(5)[8],=WP4KDN(5)[8],=WP4KKX(5)[8],=WP4LEM(5)[8], - =WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8],=WP4MYN(5)[8],=WP4OSQ(5)[8],=WP4PPH(5)[8],=WP4PQN(5)[8], - =WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8],=WP4PYN(5)[8],=WP4PYT(5)[8],=WP4PYU(5)[8],=WP4PYV(5)[8], - =WP4PYZ(5)[8],=WP4PZA(5)[8], + =KP4YH(5)[8],=NH2CW(5)[8],=NH2LA(5)[8],=NH6BD(5)[8],=NH6BK(5)[8],=NH7C(5)[8],=NH7CC(5)[8], + =NH7YK(5)[8],=NL7CK(5)[8],=NL7PJ(5)[8],=NL7V/3(5)[8],=NL7XM(5)[8],=NL7XM/B(5)[8],=NP2EP(5)[8], + =NP2G(5)[8],=NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8],=NP3YN(5)[8],=NP4RH(5)[8],=NP4YZ(5)[8], + =WH6ADS(5)[8],=WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8],=WH6CTO(5)[8],=WH6DOA(5)[8],=WH6ECO(5)[8], + =WH6EEL(5)[8],=WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8],=WH6OB(5)[8],=WH7F(5)[8],=WH7USA(5)[8], + =WL7AF(5)[8],=WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8],=WP3EC(5)[8],=WP3FK(5)[8], + =WP4DA(5)[8],=WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HRK(5)[8],=WP4HSZ(5)[8],=WP4KDN(5)[8], + =WP4KKX(5)[8],=WP4LEM(5)[8],=WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8],=WP4MYN(5)[8],=WP4OSQ(5)[8], + =WP4PPH(5)[8],=WP4PQN(5)[8],=WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8],=WP4PYN(5)[8],=WP4PYT(5)[8], + =WP4PYU(5)[8],=WP4PYV(5)[8],=WP4PYZ(5)[8],=WP4PZA(5)[8], =AH0BV(5)[8],=AH0BZ(5)[8],=AH0G(5)[8],=AH2AJ(5)[8],=AH2AM(5)[8],=AH2AV/4(5)[8],=AH2DF(5)[8], =AH2EB(5)[8],=AH2X(5)[8],=AH3B(5)[8],=AH6AL(5)[8],=AH6AT(5)[8],=AH6AU(5)[8],=AH6BJ(5)[8], =AH6C(5)[8],=AH6EZ/4(5)[8],=AH6FX(5)[8],=AH6FX/4(5)[8],=AH6IC(5)[8],=AH6IJ(5)[8],=AH6IW(5)[8], @@ -1234,69 +1236,70 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KH2N(5)[8],=KH2NC(5)[8],=KH2PM(5)[8],=KH2RL(5)[8],=KH2TI(5)[8],=KH2UV(5)[8],=KH2VM(5)[8], =KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8],=KH6CG/4(5)[8],=KH6CT(5)[8],=KH6ED(5)[8], =KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8],=KH6ILR(5)[8],=KH6ILR/4(5)[8],=KH6ITI(5)[8], - =KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JUA(5)[8],=KH6M(5)[8],=KH6M/4(5)[8],=KH6M/M(5)[8], - =KH6MT(5)[8],=KH6MT/4(5)[8],=KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8],=KH6PU(5)[8], - =KH6RP(5)[8],=KH6TY(5)[8],=KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8],=KH7DY(5)[8], - =KH7FC(5)[8],=KH7GZ(5)[8],=KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8],=KH7XS/4(5)[8], - =KH7XT(5)[8],=KH7ZC(5)[8],=KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8],=KL0KC(5)[8], - =KL0KE/4(5)[8],=KL0L(5)[8],=KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8],=KL0TY(5)[8], - =KL0VU(5)[8],=KL0WF(5)[8],=KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8],=KL1PA(5)[8], - =KL1SS(5)[8],=KL2AK(5)[8],=KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8],=KL2HV(5)[8], - =KL2MQ(5)[8],=KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8],=KL3KB(5)[8], - =KL3KG(5)[8],=KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8],=KL4DD(5)[8], - =KL4H(5)[8],=KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8],=KL7DA/4(5)[8], - =KL7FO(5)[8],=KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8],=KL7HQW(5)[8], - =KL7HX(5)[8],=KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8],=KL7JR(5)[8], - =KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8],=KL7NT(5)[8],=KL7P/4(5)[8], - =KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8],=KL9A/1(5)[8],=KP2AF(5)[8], - =KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8],=KP2L/4(5)[8],=KP2N(5)[8], - =KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8],=KP3BL(5)[8],=KP3BP(5)[8], - =KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8],=KP4AOD/4(5)[8],=KP4BEC(5)[8], - =KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8],=KP4CPP(5)[8],=KP4CSJ(5)[8], - =KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8],=KP4DPQ(5)[8],=KP4DQS(5)[8], - =KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8],=KP4EOR/4(5)[8],=KP4ERT(5)[8], - =KP4ESC(5)[8],=KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8],=KP4FJE(5)[8],=KP4FLP(5)[8],=KP4FOF(5)[8], - =KP4HE(5)[8],=KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8],=KP4IRI(5)[8],=KP4IT(5)[8],=KP4JC(5)[8], - =KP4JCC(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8],=KP4KD(5)[8],=KP4KD/4(5)[8],=KP4KE/4(5)[8],=KP4LEU(5)[8], - =KP4LF(5)[8],=KP4LUV(5)[8],=KP4LX(5)[8],=KP4MA(5)[8],=KP4MPR(5)[8],=KP4MSP(5)[8],=KP4NI(5)[8], - =KP4OO(5)[8],=KP4PC(5)[8],=KP4PF(5)[8],=KP4PMD(5)[8],=KP4Q(5)[8],=KP4QT(5)[8],=KP4QT/4(5)[8], - =KP4REY(5)[8],=KP4RGT(5)[8],=KP4ROP(5)[8],=KP4RRC(5)[8],=KP4RT(5)[8],=KP4RZ(5)[8],=KP4SU(5)[8], - =KP4TL(5)[8],=KP4TR(5)[8],=KP4UFO(5)[8],=KP4USA(5)[8],=KP4WK(5)[8],=KP4WW(5)[8],=KP4WY(5)[8], - =KP4XP(5)[8],=KP4Y(5)[8],=KP4YLV(5)[8],=KP4ZV(5)[8],=KP4ZX(5)[8],=NH2A(5)[8],=NH2BQ(5)[8], - =NH2DB(5)[8],=NH2F(5)[8],=NH6AU(5)[8],=NH6BD/4(5)[8],=NH6E(5)[8],=NH6GE(5)[8],=NH6GR(5)[8], - =NH6HX(5)[8],=NH6HX/4(5)[8],=NH6JX(5)[8],=NH6KI(5)[8],=NH6QR(5)[8],=NH6SR(5)[8],=NH6T(5)[8], - =NH6TL(5)[8],=NH7AA(5)[8],=NH7AQ(5)[8],=NH7AR(5)[8],=NH7FG(5)[8],=NH7OI(5)[8],=NH7T/4(5)[8], - =NH7UN(5)[8],=NH7XN(5)[8],=NL5L(5)[8],=NL7AJ(5)[8],=NL7AU(5)[8],=NL7AU/4(5)[8],=NL7BV(5)[8], - =NL7KX(5)[8],=NL7LO(5)[8],=NL7LR(5)[8],=NL7LY(5)[8],=NL7MD(5)[8],=NL7MR(5)[8],=NL7OB(5)[8], - =NL7OS(5)[8],=NL7P(5)[8],=NL7PV(5)[8],=NL7U(5)[8],=NL7VV(5)[8],=NL7VX(5)[8],=NL7VX/4(5)[8], - =NL7VX/M(5)[8],=NL7YZ(5)[8],=NP2B(5)[8],=NP2B/4(5)[8],=NP2BB(5)[8],=NP2BW(5)[8],=NP2C(5)[8], - =NP2C/4(5)[8],=NP2CB(5)[8],=NP2D(5)[8],=NP2DJ(5)[8],=NP2EI(5)[8],=NP2FT(5)[8],=NP2GN(5)[8], - =NP2GW(5)[8],=NP2HQ(5)[8],=NP2HS(5)[8],=NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8],=NP2IJ(5)[8], - =NP2IS(5)[8],=NP2IW(5)[8],=NP2IX(5)[8],=NP2JA(5)[8],=NP2JS(5)[8],=NP2LC(5)[8],=NP2MM(5)[8], - =NP2MN(5)[8],=NP2MP(5)[8],=NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8],=NP2OL(5)[8],=NP2OO(5)[8], - =NP2OR(5)[8],=NP2PA(5)[8],=NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8], - =NP3CC(5)[8],=NP3CI(5)[8],=NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8], - =NP3HG(5)[8],=NP3HN(5)[8],=NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8], - =NP3KM(5)[8],=NP3MM(5)[8],=NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8], - =NP3ST(5)[8],=NP3TM(5)[8],=NP3UM(5)[8],=NP3VJ(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8], - =NP4CK(5)[8],=NP4CV(5)[8],=NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8], - =NP4JL(5)[8],=NP4JU(5)[8],=NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8], - =NP4SY(5)[8],=NP4TR(5)[8],=NP4WT(5)[8],=NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8], - =WH6A(5)[8],=WH6ACF(5)[8],=WH6AJS(5)[8],=WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8], - =WH6CMT(5)[8],=WH6CNC(5)[8],=WH6CTC(5)[8],=WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8],=WH6DMJ(5)[8], - =WH6DNF(5)[8],=WH6DOL(5)[8],=WH6DUJ(5)[8],=WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8],=WH6EKW(5)[8], - =WH6ELG(5)[8],=WH6ELM(5)[8],=WH6ETE(5)[8],=WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8],=WH6HA(5)[8], - =WH6IF(5)[8],=WH6IZ(5)[8],=WH6J(5)[8],=WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8],=WH6LE/M(5)[8], - =WH6LE/P(5)[8],=WH6NE(5)[8],=WH6WX(5)[8],=WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8],=WH6ZF(5)[8], - =WH7GD(5)[8],=WH7HX(5)[8],=WH7NI(5)[8],=WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8],=WH7YV(5)[8], - =WH7ZM(5)[8],=WH9AAF(5)[8],=WL7AUL(5)[8],=WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8],=WL7CIB(5)[8], - =WL7CKJ(5)[8],=WL7COL(5)[8],=WL7CQT(5)[8],=WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8],=WL7SR(5)[8], - =WL7UN(5)[8],=WL7WN(5)[8],=WL7YX(5)[8],=WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8],=WP2AIG(5)[8], - =WP2BB(5)[8],=WP2C(5)[8],=WP2L(5)[8],=WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8],=WP3BC(5)[8], - =WP3JQ(5)[8],=WP3JU(5)[8],=WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8],=WP3ME(5)[8],=WP3NIS(5)[8], - =WP3O(5)[8],=WP3TQ(5)[8],=WP3ZA(5)[8],=WP3ZP(5)[8],=WP4AIE(5)[8],=WP4AIL(5)[8],=WP4AIZ(5)[8], - =WP4ALH(5)[8],=WP4AQK(5)[8],=WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8],=WP4BIN(5)[8],=WP4BJS(5)[8], - =WP4BK(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8],=WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8], + =KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JNW(5)[8],=KH6JUA(5)[8],=KH6M(5)[8],=KH6M/4(5)[8], + =KH6M/M(5)[8],=KH6MT(5)[8],=KH6MT/4(5)[8],=KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8], + =KH6PU(5)[8],=KH6RP(5)[8],=KH6TY(5)[8],=KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8], + =KH7DY(5)[8],=KH7FC(5)[8],=KH7GZ(5)[8],=KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8], + =KH7XS/4(5)[8],=KH7XT(5)[8],=KH7ZC(5)[8],=KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8], + =KL0KC(5)[8],=KL0KE/4(5)[8],=KL0L(5)[8],=KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8], + =KL0TY(5)[8],=KL0VU(5)[8],=KL0WF(5)[8],=KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8], + =KL1PA(5)[8],=KL1SS(5)[8],=KL2AK(5)[8],=KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8], + =KL2HV(5)[8],=KL2MQ(5)[8],=KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8], + =KL3KB(5)[8],=KL3KG(5)[8],=KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8], + =KL4DD(5)[8],=KL4H(5)[8],=KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8], + =KL7DA/4(5)[8],=KL7FO(5)[8],=KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8], + =KL7HQW(5)[8],=KL7HX(5)[8],=KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8], + =KL7JDS(5)[8],=KL7JR(5)[8],=KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8], + =KL7NT(5)[8],=KL7P/4(5)[8],=KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8], + =KL9A/1(5)[8],=KP2AF(5)[8],=KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8], + =KP2L/4(5)[8],=KP2N(5)[8],=KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8], + =KP3BL(5)[8],=KP3BP(5)[8],=KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8], + =KP4AOD/4(5)[8],=KP4BEC(5)[8],=KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8], + =KP4CPP(5)[8],=KP4CSJ(5)[8],=KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8], + =KP4DPQ(5)[8],=KP4DQS(5)[8],=KP4EDL(5)[8],=KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8], + =KP4EOR/4(5)[8],=KP4ERT(5)[8],=KP4ESC(5)[8],=KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8], + =KP4FJE(5)[8],=KP4FLP(5)[8],=KP4FOF(5)[8],=KP4HE(5)[8],=KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8], + =KP4IRI(5)[8],=KP4IT(5)[8],=KP4JC(5)[8],=KP4JCC(5)[8],=KP4JOS(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8], + =KP4KD(5)[8],=KP4KD/4(5)[8],=KP4KE/4(5)[8],=KP4LEU(5)[8],=KP4LF(5)[8],=KP4LUV(5)[8],=KP4LX(5)[8], + =KP4MA(5)[8],=KP4MPR(5)[8],=KP4MSP(5)[8],=KP4NI(5)[8],=KP4OO(5)[8],=KP4PC(5)[8],=KP4PF(5)[8], + =KP4PMD(5)[8],=KP4Q(5)[8],=KP4QT(5)[8],=KP4QT/4(5)[8],=KP4REY(5)[8],=KP4RGT(5)[8],=KP4ROP(5)[8], + =KP4RRC(5)[8],=KP4RT(5)[8],=KP4RZ(5)[8],=KP4SU(5)[8],=KP4TL(5)[8],=KP4TR(5)[8],=KP4UFO(5)[8], + =KP4USA(5)[8],=KP4WK(5)[8],=KP4WW(5)[8],=KP4WY(5)[8],=KP4XP(5)[8],=KP4Y(5)[8],=KP4YLV(5)[8], + =KP4ZV(5)[8],=KP4ZX(5)[8],=NH2A(5)[8],=NH2BQ(5)[8],=NH2DB(5)[8],=NH2F(5)[8],=NH6AU(5)[8], + =NH6BD/4(5)[8],=NH6E(5)[8],=NH6GE(5)[8],=NH6GR(5)[8],=NH6HX(5)[8],=NH6HX/4(5)[8],=NH6JX(5)[8], + =NH6KI(5)[8],=NH6QR(5)[8],=NH6SR(5)[8],=NH6T(5)[8],=NH6TL(5)[8],=NH7AA(5)[8],=NH7AQ(5)[8], + =NH7AR(5)[8],=NH7FG(5)[8],=NH7OI(5)[8],=NH7T/4(5)[8],=NH7UN(5)[8],=NH7XN(5)[8],=NL5L(5)[8], + =NL7AJ(5)[8],=NL7AU(5)[8],=NL7AU/4(5)[8],=NL7BV(5)[8],=NL7KX(5)[8],=NL7LO(5)[8],=NL7LR(5)[8], + =NL7LY(5)[8],=NL7MD(5)[8],=NL7MR(5)[8],=NL7OB(5)[8],=NL7OS(5)[8],=NL7P(5)[8],=NL7PV(5)[8], + =NL7U(5)[8],=NL7VV(5)[8],=NL7VX(5)[8],=NL7VX/4(5)[8],=NL7VX/M(5)[8],=NL7YZ(5)[8],=NP2B(5)[8], + =NP2B/4(5)[8],=NP2BB(5)[8],=NP2BW(5)[8],=NP2C(5)[8],=NP2C/4(5)[8],=NP2CB(5)[8],=NP2D(5)[8], + =NP2DJ(5)[8],=NP2EI(5)[8],=NP2FT(5)[8],=NP2GN(5)[8],=NP2GW(5)[8],=NP2HQ(5)[8],=NP2HS(5)[8], + =NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8],=NP2IJ(5)[8],=NP2IS(5)[8],=NP2IW(5)[8],=NP2IX(5)[8], + =NP2JA(5)[8],=NP2JS(5)[8],=NP2L(5)[8],=NP2LC(5)[8],=NP2MM(5)[8],=NP2MN(5)[8],=NP2MP(5)[8], + =NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8],=NP2OL(5)[8],=NP2OO(5)[8],=NP2OR(5)[8],=NP2PA(5)[8], + =NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8],=NP3CC(5)[8],=NP3CI(5)[8], + =NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8],=NP3HG(5)[8],=NP3HN(5)[8], + =NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8],=NP3KM(5)[8],=NP3MM(5)[8], + =NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8],=NP3ST(5)[8],=NP3TM(5)[8], + =NP3UM(5)[8],=NP3VJ(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8],=NP4CK(5)[8],=NP4CV(5)[8], + =NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8],=NP4JL(5)[8],=NP4JU(5)[8], + =NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8],=NP4SY(5)[8],=NP4TR(5)[8], + =NP4WT(5)[8],=NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8],=WH6A(5)[8],=WH6ACF(5)[8], + =WH6AJS(5)[8],=WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8],=WH6CEF(5)[8],=WH6CMT(5)[8], + =WH6CNC(5)[8],=WH6CTC(5)[8],=WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8],=WH6DMJ(5)[8],=WH6DNF(5)[8], + =WH6DOL(5)[8],=WH6DUJ(5)[8],=WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8],=WH6EKW(5)[8],=WH6ELG(5)[8], + =WH6ELM(5)[8],=WH6ETE(5)[8],=WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8],=WH6HA(5)[8],=WH6IF(5)[8], + =WH6IZ(5)[8],=WH6J(5)[8],=WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8],=WH6LE/M(5)[8],=WH6LE/P(5)[8], + =WH6NE(5)[8],=WH6WX(5)[8],=WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8],=WH6ZF(5)[8],=WH7GD(5)[8], + =WH7HX(5)[8],=WH7NI(5)[8],=WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8],=WH7YV(5)[8],=WH7ZM(5)[8], + =WH9AAF(5)[8],=WL7AUL(5)[8],=WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8],=WL7CIB(5)[8],=WL7CKJ(5)[8], + =WL7COL(5)[8],=WL7CQT(5)[8],=WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8],=WL7SR(5)[8],=WL7UN(5)[8], + =WL7WN(5)[8],=WL7YX(5)[8],=WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8],=WP2AIG(5)[8],=WP2BB(5)[8], + =WP2C(5)[8],=WP2L(5)[8],=WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8],=WP3BC(5)[8],=WP3JQ(5)[8], + =WP3JU(5)[8],=WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8],=WP3ME(5)[8],=WP3NIS(5)[8],=WP3O(5)[8], + =WP3TQ(5)[8],=WP3ZA(5)[8],=WP3ZP(5)[8],=WP4AIE(5)[8],=WP4AIL(5)[8],=WP4AIZ(5)[8],=WP4ALH(5)[8], + =WP4AQK(5)[8],=WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8],=WP4BIN(5)[8],=WP4BJS(5)[8],=WP4BK(5)[8], + =WP4BOC(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8],=WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8], =WP4DCB(5)[8],=WP4DFK(5)[8],=WP4DNE(5)[8],=WP4DPX(5)[8],=WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8], =WP4FRK(5)[8],=WP4FS(5)[8],=WP4GAK(5)[8],=WP4GFH(5)[8],=WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8], =WP4HNN(5)[8],=WP4HOX(5)[8],=WP4IF(5)[8],=WP4IJ(5)[8],=WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8], @@ -1319,47 +1322,47 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: WQ5(4)[7],WR5(4)[7],WS5(4)[7],WT5(4)[7],WU5(4)[7],WV5(4)[7],WW5(4)[7],WX5(4)[7],WY5(4)[7], WZ5(4)[7],=AH2AQ(4)[7],=AH2AQ/5(4)[7],=AH2DG(4)[7],=AH2EH(4)[7],=AH2H(4)[7],=AH2T(4)[7], =AH6AF(4)[7],=AH6DZ(4)[7],=AH6FV(4)[7],=AH6HT(4)[7],=AH6OU(4)[7],=AH6RB(4)[7],=AH6TD(4)[7], - =AH6UD(4)[7],=AH8O(4)[7],=AH9B(4)[7],=AL2K(4)[7],=AL2S(4)[7],=AL4F(4)[7],=AL5J(4)[7],=AL7C(4)[7], - =AL7CJ(4)[7],=AL7CQ(4)[7],=AL7DF(4)[7],=AL7DR(4)[7],=AL7GY(4)[7],=AL7HH(4)[7],=AL7HU(4)[7], - =AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7],=AL7L/5(4)[7],=AL7PB(4)[7],=AL7RD(4)[7], - =AL7RI(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7],=KH0CU(4)[7],=KH0DW(4)[7],=KH2AI(4)[7],=KH2BH(4)[7], - =KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7],=KH2XO(4)[7],=KH2YO(4)[7],=KH6ABA(4)[7], - =KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7],=KH6ITY/M(4)[7],=KH6JIQ(4)[7], - =KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LX(4)[7],=KH6MB/5(4)[7],=KH6SP/5(4)[7], - =KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7],=KH7IC(4)[7],=KH7JE(4)[7],=KH7QL(4)[7], - =KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7],=KL0HU(4)[7],=KL0PG(4)[7],=KL1DA(4)[7], - =KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7],=KL1WG(4)[7],=KL1WO(4)[7],=KL1XK(4)[7], - =KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7],=KL2CD(4)[7],=KL2HC(4)[7],=KL2HN(4)[7], - =KL2MI(4)[7],=KL2NN(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7],=KL2VA(4)[7],=KL3DB(4)[7], - =KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7],=KL3KI(4)[7],=KL3TB(4)[7], - =KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7],=KL7AH(4)[7],=KL7AU(4)[7],=KL7AX(4)[7],=KL7BCD(4)[7], - =KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7],=KL7BZL(4)[7],=KL7CD(4)[7],=KL7DB(4)[7],=KL7EBE(4)[7], - =KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7],=KL7F(4)[7],=KL7FB(4)[7],=KL7FHX(4)[7],=KL7FLY(4)[7], - =KL7FQR(4)[7],=KL7GNW(4)[7],=KL7HH(4)[7],=KL7IDM(4)[7],=KL7IK(4)[7],=KL7ITF(4)[7],=KL7IWU(4)[7], - =KL7IZW(4)[7],=KL7JAR(4)[7],=KL7JEX(4)[7],=KL7JIU(4)[7],=KL7JR/5(4)[7],=KL7JW(4)[7],=KL7LJ(4)[7], - =KL7LY(4)[7],=KL7MA(4)[7],=KL7ME(4)[7],=KL7ML(4)[7],=KL7NE(4)[7],=KL7NI(4)[7],=KL7OI(4)[7], - =KL7PZ(4)[7],=KL7QC(4)[7],=KL7SG(4)[7],=KL7TN/5(4)[7],=KL7UHF(4)[7],=KL7USI/5(4)[7],=KL7XP(4)[7], - =KL7XS(4)[7],=KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7],=KP4DJT(4)[7],=KP4FF(4)[7],=KP4FFW(4)[7], - =KP4GMC(4)[7],=KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7],=KP4YP(4)[7],=NH0V/5(4)[7],=NH2LA(4)[7], + =AH6UD(4)[7],=AH8O(4)[7],=AH9B(4)[7],=AL1F(4)[7],=AL2K(4)[7],=AL2S(4)[7],=AL4F(4)[7],=AL5J(4)[7], + =AL7C(4)[7],=AL7CJ(4)[7],=AL7CQ(4)[7],=AL7DF(4)[7],=AL7DR(4)[7],=AL7GY(4)[7],=AL7HH(4)[7], + =AL7HU(4)[7],=AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7],=AL7L/5(4)[7],=AL7PB(4)[7], + =AL7RD(4)[7],=AL7RI(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7],=KH0CU(4)[7],=KH0DW(4)[7],=KH2AI(4)[7], + =KH2BH(4)[7],=KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7],=KH2XO(4)[7],=KH2YO(4)[7], + =KH6ABA(4)[7],=KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7],=KH6ITY/M(4)[7], + =KH6JIQ(4)[7],=KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LL(4)[7],=KH6LX(4)[7],=KH6MB/5(4)[7], + =KH6SP/5(4)[7],=KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7],=KH7IC(4)[7],=KH7JE(4)[7], + =KH7QL(4)[7],=KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7],=KL0HU(4)[7],=KL0PG(4)[7], + =KL1DA(4)[7],=KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7],=KL1WG(4)[7],=KL1WO(4)[7], + =KL1XK(4)[7],=KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7],=KL2CD(4)[7],=KL2HC(4)[7], + =KL2HN(4)[7],=KL2MI(4)[7],=KL2NN(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7],=KL2VA(4)[7], + =KL3DB(4)[7],=KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7],=KL3KI(4)[7], + =KL3TB(4)[7],=KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7],=KL7AH(4)[7],=KL7AU(4)[7],=KL7AX(4)[7], + =KL7BCD(4)[7],=KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7],=KL7BZL(4)[7],=KL7CD(4)[7],=KL7DB(4)[7], + =KL7EBE(4)[7],=KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7],=KL7F(4)[7],=KL7FB(4)[7],=KL7FHX(4)[7], + =KL7FLY(4)[7],=KL7FQR(4)[7],=KL7GNW(4)[7],=KL7HH(4)[7],=KL7IDM(4)[7],=KL7IK(4)[7],=KL7ITF(4)[7], + =KL7IWU(4)[7],=KL7IZW(4)[7],=KL7JAR(4)[7],=KL7JEX(4)[7],=KL7JIU(4)[7],=KL7JR/5(4)[7],=KL7JW(4)[7], + =KL7LJ(4)[7],=KL7LY(4)[7],=KL7MA(4)[7],=KL7ME(4)[7],=KL7ML(4)[7],=KL7NE(4)[7],=KL7NI(4)[7], + =KL7OI(4)[7],=KL7PZ(4)[7],=KL7QC(4)[7],=KL7SG(4)[7],=KL7TN/5(4)[7],=KL7UHF(4)[7],=KL7USI/5(4)[7], + =KL7XP(4)[7],=KL7XS(4)[7],=KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7],=KP4DJT(4)[7],=KP4FF(4)[7], + =KP4FFW(4)[7],=KP4GMC(4)[7],=KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7],=KP4YP(4)[7],=NH0V/5(4)[7], =NH2LP(4)[7],=NH6AZ(4)[7],=NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7],=NH6L(4)[7],=NH6VB(4)[7], - =NH6VJ(4)[7],=NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7],=NH7PZ(4)[7],=NH7RO(4)[7], - =NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7],=NL7AX(4)[7],=NL7C(4)[7],=NL7CO(4)[7], - =NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7],=NL7IE(4)[7],=NL7JH(4)[7],=NL7JI(4)[7], - =NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7],=NL7PD(4)[7],=NL7RQ(4)[7],=NL7RQ/5(4)[7], - =NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7],=NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7],=NP3CV(4)[7], - =NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7],=NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7],=NP4NQ(4)[7], - =NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7],=WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7], + =NH6VJ(4)[7],=NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7],=NH7PZ(4)[7],=NH7R(4)[7], + =NH7RO(4)[7],=NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7],=NL7AX(4)[7],=NL7C(4)[7], + =NL7CO(4)[7],=NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7],=NL7IE(4)[7],=NL7JH(4)[7], + =NL7JI(4)[7],=NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7],=NL7PD(4)[7],=NL7RQ(4)[7], + =NL7RQ/5(4)[7],=NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7],=NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7], + =NP3CV(4)[7],=NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7],=NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7], + =NP4NQ(4)[7],=NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7],=WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7], =WH6BYJ(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7],=WH6CUL(4)[7],=WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7], =WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7],=WH6EXQ(4)[7],=WH6FAD(4)[7],=WH6FGM(4)[7], - =WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH6ZR(4)[7],=WH7DC(4)[7],=WH7DW(4)[7],=WH7OK(4)[7],=WH7R(4)[7], - =WH7YQ(4)[7],=WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7],=WL7AWC(4)[7],=WL7BBV(4)[7], - =WL7BKF(4)[7],=WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7],=WL7CQE(4)[7],=WL7CTP(4)[7], - =WL7CTQ(4)[7],=WL7D(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7],=WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7], - =WL7OP(4)[7],=WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7],=WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7], - =WP2WP(4)[7],=WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7],=WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7], - =WP4CJY(4)[7],=WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7],=WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7], - =WP4MJP(4)[7],=WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7],=WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7], - =WP4OUE(4)[7],=WP4RON(4)[7], + =WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH7DC(4)[7],=WH7DW(4)[7],=WH7OK(4)[7],=WH7R(4)[7],=WH7YQ(4)[7], + =WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7],=WL7AWC(4)[7],=WL7BBV(4)[7],=WL7BKF(4)[7], + =WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7],=WL7CQE(4)[7],=WL7CTP(4)[7],=WL7CTQ(4)[7], + =WL7D(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7],=WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7],=WL7OP(4)[7], + =WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7],=WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7],=WP2WP(4)[7], + =WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7],=WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7],=WP4CJY(4)[7], + =WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7],=WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7],=WP4MJP(4)[7], + =WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7],=WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7],=WP4OUE(4)[7], + =WP4RON(4)[7], AA6(3)[6],AB6(3)[6],AC6(3)[6],AD6(3)[6],AE6(3)[6],AF6(3)[6],AG6(3)[6],AI6(3)[6],AJ6(3)[6], AK6(3)[6],K6(3)[6],KA6(3)[6],KB6(3)[6],KC6(3)[6],KD6(3)[6],KE6(3)[6],KF6(3)[6],KG6(3)[6], KI6(3)[6],KJ6(3)[6],KK6(3)[6],KM6(3)[6],KN6(3)[6],KO6(3)[6],KQ6(3)[6],KR6(3)[6],KS6(3)[6], @@ -1383,39 +1386,40 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KH6DX/M6(3)[6],=KH6DZ(3)[6],=KH6EHF(3)[6],=KH6FH(3)[6],=KH6FL(3)[6],=KH6FOX(3)[6],=KH6FQR(3)[6], =KH6FQY(3)[6],=KH6GBQ(3)[6],=KH6GC(3)[6],=KH6GJV(3)[6],=KH6GJV/6(3)[6],=KH6GK(3)[6],=KH6GKR(3)[6], =KH6HJE(3)[6],=KH6HOU(3)[6],=KH6IKH(3)[6],=KH6IKL(3)[6],=KH6IP(3)[6],=KH6IPJ(3)[6],=KH6JCT(3)[6], - =KH6JGD(3)[6],=KH6JJN(3)[6],=KH6JJN/P(3)[6],=KH6JN(3)[6],=KH6JRB(3)[6],=KH6JRC(3)[6],=KH6JS(3)[6], - =KH6JUZ(3)[6],=KH6JVS(3)[6],=KH6JWG(3)[6],=KH6KT(3)[6],=KH6LO(3)[6],=KH6MV(3)[6],=KH6N(3)[6], - =KH6NG(3)[6],=KH6O(3)[6],=KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6],=KH6TO(3)[6], - =KH6UQ(3)[6],=KH6USA(3)[6],=KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6],=KH6WZ(3)[6], - =KH7CD/6(3)[6],=KH7CO(3)[6],=KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6],=KH7JR(3)[6], - =KH7NS(3)[6],=KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6],=KH7XX/6(3)[6], - =KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6],=KL0AF(3)[6], - =KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6],=KL3YH(3)[6], - =KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6],=KL7AK(3)[6],=KL7CE/6(3)[6],=KL7CM(3)[6], - =KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6],=KL7DJ(3)[6],=KL7EAE(3)[6],=KL7EAL(3)[6],=KL7HQR(3)[6], - =KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6],=KL7IDY/6(3)[6],=KL7ISN(3)[6],=KL7JBE(3)[6], - =KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6],=KL7MF/6(3)[6],=KL7MF/M(3)[6],=KL7OO(3)[6],=KL7RT(3)[6], - =KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6],=KL7VU/6(3)[6],=KP2BK(3)[6],=KP3BN(3)[6],=KP3YL(3)[6], - =KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6],=KP4ENM(3)[6],=KP4ERR(3)[6],=KP4FBT(3)[6],=KP4MD(3)[6], - =KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6],=NH2AR(3)[6],=NH2BD(3)[6],=NH2BV(3)[6],=NH2CM(3)[6], - =NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6],=NH2S(3)[6],=NH6AC(3)[6],=NH6AE(3)[6],=NH6FV(3)[6], - =NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6],=NH6WR(3)[6],=NH7AG(3)[6],=NH7EM(3)[6],=NH7FW(3)[6], - =NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6],=NH7QV(3)[6],=NH7RT(3)[6],=NH7ST(3)[6], - =NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6],=NL7GE(3)[6],=NL7IB(3)[6],=NL7OP(3)[6], - =NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6],=NP4AI/6(3)[6],=NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6], - =NP4XE(3)[6],=WH0AAZ(3)[6],=WH0M(3)[6],=WH2ABS(3)[6],=WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6], - =WH6ANA(3)[6],=WH6ASW/M(3)[6],=WH6BYT(3)[6],=WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6], - =WH6CPT(3)[6],=WH6CRE(3)[6],=WH6CSG(3)[6],=WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6], - =WH6CWS(3)[6],=WH6CZF(3)[6],=WH6CZH(3)[6],=WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6], - =WH6DVX(3)[6],=WH6DYA(3)[6],=WH6DZV(3)[6],=WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6], - =WH6EKB(3)[6],=WH6ENG(3)[6],=WH6EUH(3)[6],=WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6OI(3)[6], - =WH6PX(3)[6],=WH6QA(3)[6],=WH6RF(3)[6],=WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6], - =WH6VN(3)[6],=WH6XI(3)[6],=WH6XX(3)[6],=WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6], - =WH7IN(3)[6],=WH7IV(3)[6],=WH7IZ(3)[6],=WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6], - =WH7RU(3)[6],=WH7TT(3)[6],=WH7VM(3)[6],=WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6], - =WL7ACO(3)[6],=WL7BA(3)[6],=WL7BGF(3)[6],=WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6], - =WL7EKK(3)[6],=WL7RA(3)[6],=WL7SE(3)[6],=WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6], - =WP2N(3)[6],=WP4CUJ(3)[6],=WP4CW(3)[6],=WP4KSU(3)[6],=WP4MVE(3)[6], + =KH6JGD(3)[6],=KH6JJN(3)[6],=KH6JJN/P(3)[6],=KH6JN(3)[6],=KH6JR(3)[6],=KH6JRB(3)[6],=KH6JRC(3)[6], + =KH6JS(3)[6],=KH6JUZ(3)[6],=KH6JVS(3)[6],=KH6JWG(3)[6],=KH6KT(3)[6],=KH6LO(3)[6],=KH6MV(3)[6], + =KH6N(3)[6],=KH6NG(3)[6],=KH6O(3)[6],=KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6], + =KH6TO(3)[6],=KH6UQ(3)[6],=KH6USA(3)[6],=KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6], + =KH6WZ(3)[6],=KH7CD/6(3)[6],=KH7CO(3)[6],=KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6], + =KH7JR(3)[6],=KH7NS(3)[6],=KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6], + =KH7XX/6(3)[6],=KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6], + =KL0AF(3)[6],=KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6], + =KL3YH(3)[6],=KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6],=KL4UZ(3)[6],=KL7AK(3)[6], + =KL7CE/6(3)[6],=KL7CM(3)[6],=KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6],=KL7DJ(3)[6],=KL7EAE(3)[6], + =KL7EAL(3)[6],=KL7HQR(3)[6],=KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6],=KL7IDY/6(3)[6], + =KL7ISN(3)[6],=KL7JBE(3)[6],=KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6],=KL7MF/6(3)[6],=KL7MF/M(3)[6], + =KL7OO(3)[6],=KL7RT(3)[6],=KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6],=KL7VU/6(3)[6],=KP2BK(3)[6], + =KP3BN(3)[6],=KP3YL(3)[6],=KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6],=KP4ENM(3)[6],=KP4ERR(3)[6], + =KP4FBT(3)[6],=KP4MD(3)[6],=KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6],=NH2AR(3)[6],=NH2BD(3)[6], + =NH2BV(3)[6],=NH2CM(3)[6],=NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6],=NH2S(3)[6],=NH6AC(3)[6], + =NH6AE(3)[6],=NH6FV(3)[6],=NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6],=NH6WR(3)[6],=NH7AG(3)[6], + =NH7EM(3)[6],=NH7FW(3)[6],=NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6],=NH7QV(3)[6], + =NH7RT(3)[6],=NH7ST(3)[6],=NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6],=NL7GE(3)[6], + =NL7IB(3)[6],=NL7OP(3)[6],=NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6],=NP4AB(3)[6],=NP4AI/6(3)[6], + =NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6],=NP4XE(3)[6],=WH0AAZ(3)[6],=WH0M(3)[6],=WH2ABS(3)[6], + =WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6],=WH6ANA(3)[6],=WH6ASW/M(3)[6],=WH6BYT(3)[6], + =WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6],=WH6CPT(3)[6],=WH6CRE(3)[6],=WH6CSG(3)[6], + =WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6],=WH6CWS(3)[6],=WH6CZF(3)[6],=WH6CZH(3)[6], + =WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6],=WH6DVX(3)[6],=WH6DYA(3)[6],=WH6DZV(3)[6], + =WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6],=WH6EKB(3)[6],=WH6ENG(3)[6],=WH6EUH(3)[6], + =WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6OI(3)[6],=WH6PX(3)[6],=WH6QA(3)[6],=WH6RF(3)[6], + =WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6],=WH6VN(3)[6],=WH6XI(3)[6],=WH6XX(3)[6], + =WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6],=WH7IN(3)[6],=WH7IV(3)[6],=WH7IZ(3)[6], + =WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6],=WH7RU(3)[6],=WH7TT(3)[6],=WH7VM(3)[6], + =WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6],=WL7ACO(3)[6],=WL7BA(3)[6],=WL7BGF(3)[6], + =WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6],=WL7EKK(3)[6],=WL7RA(3)[6],=WL7SE(3)[6], + =WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6],=WP2N(3)[6],=WP4CUJ(3)[6],=WP4CW(3)[6], + =WP4KSU(3)[6],=WP4MVE(3)[6],=WP4OBB(3)[6], AA7(3)[6],AB7(3)[6],AC7(3)[6],AD7(3)[6],AE7(3)[6],AF7(3)[6],AG7(3)[6],AI7(3)[6],AJ7(3)[6], AK7(3)[6],K7(3)[6],KA7(3)[6],KB7(3)[6],KC7(3)[6],KD7(3)[6],KE7(3)[6],KF7(3)[6],KG7(3)[6], KI7(3)[6],KJ7(3)[6],KK7(3)[6],KM7(3)[6],KN7(3)[6],KO7(3)[6],KQ7(3)[6],KR7(3)[6],KS7(3)[6], @@ -1438,91 +1442,92 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AL7D/7(3)[6],=AL7D/P(3)[6],=AL7D/R(3)[6],=AL7DD(3)[6],=AL7DU(3)[6],=AL7EI(3)[6],=AL7EJ(3)[6], =AL7FA(3)[6],=AL7FB(3)[6],=AL7HS(3)[6],=AL7HY(3)[6],=AL7IG(3)[6],=AL7IT(3)[6],=AL7JF(3)[6], =AL7JJ(3)[6],=AL7JS(3)[6],=AL7JW(3)[6],=AL7JY(3)[6],=AL7KE(3)[6],=AL7KF(3)[6],=AL7KG(3)[6], - =AL7KK(3)[6],=AL7KL(3)[6],=AL7KV(3)[6],=AL7L/7(3)[6],=AL7LL(3)[6],=AL7MH(3)[6],=AL7MQ(3)[6], - =AL7ND(3)[6],=AL7NK(3)[6],=AL7NZ(3)[6],=AL7OK(3)[6],=AL7OW(3)[6],=AL7PR(3)[6],=AL7PV(3)[6], - =AL7QL(3)[6],=AL7R(3)[6],=AL7R/7(3)[6],=AL7RF(3)[6],=AL7RF/7(3)[6],=AL7RM(3)[6],=AL7RR(3)[6], - =AL7W(3)[6],=G4KHG/M(3)[6],=KH0AS(3)[6],=KH0H(3)[6],=KH0K(3)[6],=KH0SH(3)[6],=KH0TL(3)[6], - =KH0X(3)[6],=KH2CH(3)[6],=KH2G(3)[6],=KH2GG(3)[6],=KH2JA(3)[6],=KH2QH(3)[6],=KH2RK(3)[6], - =KH2SK(3)[6],=KH2SR(3)[6],=KH2TJ/7(3)[6],=KH2TJ/P(3)[6],=KH2XP(3)[6],=KH2YL(3)[6],=KH3AD(3)[6], - =KH6AB(3)[6],=KH6AHQ(3)[6],=KH6BXZ(3)[6],=KH6CN(3)[6],=KH6CN/7(3)[6],=KH6COY(3)[6],=KH6CQG(3)[6], - =KH6CQH(3)[6],=KH6CQH/7(3)[6],=KH6DB(3)[6],=KH6DE(3)[6],=KH6DOT(3)[6],=KH6DUT(3)[6],=KH6EE(3)[6], - =KH6EE/7(3)[6],=KH6FKA/7(3)[6],=KH6FU(3)[6],=KH6GB(3)[6],=KH6GDN(3)[6],=KH6HU(3)[6],=KH6HWK(3)[6], - =KH6IA(3)[6],=KH6ICQ(3)[6],=KH6IKC(3)[6],=KH6IMN(3)[6],=KH6IQX(3)[6],=KH6ITY(3)[6],=KH6JFL(3)[6], - =KH6JIM/7(3)[6],=KH6JJS(3)[6],=KH6JPJ(3)[6],=KH6JPO(3)[6],=KH6JRW(3)[6],=KH6JT(3)[6], - =KH6JUQ(3)[6],=KH6KS(3)[6],=KH6KW(3)[6],=KH6LEM(3)[6],=KH6ME(3)[6],=KH6MF(3)[6],=KH6NA(3)[6], - =KH6NO/7(3)[6],=KH6NO/M(3)[6],=KH6NU(3)[6],=KH6OV(3)[6],=KH6PG(3)[6],=KH6PR(3)[6],=KH6QAI(3)[6], - =KH6QAI/7(3)[6],=KH6QAJ(3)[6],=KH6RW(3)[6],=KH6RY(3)[6],=KH6SAT(3)[6],=KH6SS(3)[6],=KH6TG(3)[6], - =KH6TX(3)[6],=KH6VM(3)[6],=KH6VM/7(3)[6],=KH6VT(3)[6],=KH6WX(3)[6],=KH6XG(3)[6],=KH6XS(3)[6], - =KH6XT(3)[6],=KH6YL(3)[6],=KH7AL(3)[6],=KH7AR(3)[6],=KH7AX(3)[6],=KH7CB(3)[6],=KH7CM(3)[6], - =KH7CZ(3)[6],=KH7FJ(3)[6],=KH7FR(3)[6],=KH7HH(3)[6],=KH7HWK(3)[6],=KH7IP(3)[6],=KH7LE(3)[6], - =KH7ME(3)[6],=KH7MR(3)[6],=KH7NP(3)[6],=KH7R(3)[6],=KH7RD(3)[6],=KH7RT(3)[6],=KH7SQ(3)[6], - =KH7SR(3)[6],=KH7WW(3)[6],=KH7WW/7(3)[6],=KH7X/7(3)[6],=KH7YD(3)[6],=KH7YD/7(3)[6],=KH8AB(3)[6], - =KH8AH(3)[6],=KH8AZ(3)[6],=KH8BG(3)[6],=KH8D(3)[6],=KH8E(3)[6],=KH8K(3)[6],=KH9AA(3)[6], - =KL0AI(3)[6],=KL0AN(3)[6],=KL0AP(3)[6],=KL0CA(3)[6],=KL0CM(3)[6],=KL0CW(3)[6],=KL0DF(3)[6], - =KL0DG(3)[6],=KL0DR(3)[6],=KL0DT(3)[6],=KL0IR(3)[6],=KL0IS(3)[6],=KL0IW(3)[6],=KL0IX(3)[6], - =KL0LF(3)[6],=KL0MO(3)[6],=KL0NM(3)[6],=KL0NP(3)[6],=KL0PP(3)[6],=KL0QD(3)[6],=KL0RA(3)[6], - =KL0SZ(3)[6],=KL0TR(3)[6],=KL0TU(3)[6],=KL1AA(3)[6],=KL1AE(3)[6],=KL1DO(3)[6],=KL1DW(3)[6], - =KL1ED(3)[6],=KL1JF(3)[6],=KL1K(3)[6],=KL1LE(3)[6],=KL1LZ(3)[6],=KL1MF(3)[6],=KL1OH(3)[6], - =KL1QL(3)[6],=KL1RH(3)[6],=KL1RV(3)[6],=KL1SF/7(3)[6],=KL1SO(3)[6],=KL1U(3)[6],=KL1UA(3)[6], - =KL1UM(3)[6],=KL1XI(3)[6],=KL1YO(3)[6],=KL1YY/7(3)[6],=KL1ZP(3)[6],=KL1ZR(3)[6],=KL2A/7(3)[6], - =KL2BG(3)[6],=KL2BO(3)[6],=KL2BW(3)[6],=KL2BY(3)[6],=KL2BZ(3)[6],=KL2FD(3)[6],=KL2FL(3)[6], - =KL2JY(3)[6],=KL2K(3)[6],=KL2KY(3)[6],=KL2LA(3)[6],=KL2LN(3)[6],=KL2LT(3)[6],=KL2MP(3)[6], - =KL2NJ(3)[6],=KL2NU(3)[6],=KL2NW(3)[6],=KL2OH(3)[6],=KL2OJ(3)[6],=KL2P(3)[6],=KL2QE(3)[6], - =KL2VK(3)[6],=KL2YH(3)[6],=KL3EZ(3)[6],=KL3FE(3)[6],=KL3IC(3)[6],=KL3IO(3)[6],=KL3IW(3)[6], - =KL3MZ(3)[6],=KL3NE(3)[6],=KL3NO(3)[6],=KL3OQ(3)[6],=KL3PD(3)[6],=KL3TW(3)[6],=KL3TY(3)[6], - =KL3VJ(3)[6],=KL3XS(3)[6],=KL4BS(3)[6],=KL4E(3)[6],=KL4RKH(3)[6],=KL4YFD(3)[6],=KL7AB(3)[6], - =KL7AD(3)[6],=KL7AW(3)[6],=KL7BD(3)[6],=KL7BDC(3)[6],=KL7BH(3)[6],=KL7BR(3)[6],=KL7BS(3)[6], - =KL7BT(3)[6],=KL7BUR(3)[6],=KL7BXP(3)[6],=KL7C(3)[6],=KL7CPO(3)[6],=KL7CT(3)[6],=KL7CY(3)[6], - =KL7DC(3)[6],=KL7DF(3)[6],=KL7DI(3)[6],=KL7DK(3)[6],=KL7DLG(3)[6],=KL7EF(3)[6],=KL7EFL(3)[6], - =KL7EH(3)[6],=KL7EIN(3)[6],=KL7EU(3)[6],=KL7FDQ(3)[6],=KL7FDQ/7(3)[6],=KL7FOZ(3)[6],=KL7FRQ(3)[6], - =KL7FS(3)[6],=KL7GA(3)[6],=KL7GCS(3)[6],=KL7GKY(3)[6],=KL7GRF(3)[6],=KL7GT(3)[6],=KL7HB(3)[6], - =KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6],=KL7HI(3)[6],=KL7HJR(3)[6],=KL7HLF(3)[6],=KL7HM(3)[6], - =KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6],=KL7IAL(3)[6],=KL7IBT(3)[6],=KL7IDY(3)[6],=KL7IEI(3)[6], - =KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6],=KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6], - =KL7IPV(3)[6],=KL7ISE(3)[6],=KL7IUX(3)[6],=KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6], - =KL7JBB(3)[6],=KL7JDQ(3)[6],=KL7JES(3)[6],=KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6], - =KL7KG/7(3)[6],=KL7LG(3)[6],=KL7LI(3)[6],=KL7LX(3)[6],=KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6], - =KL7MZ(3)[6],=KL7NA(3)[6],=KL7NP(3)[6],=KL7NP/7(3)[6],=KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6], - =KL7OR(3)[6],=KL7OR/7(3)[6],=KL7OS(3)[6],=KL7OY(3)[6],=KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6], - =KL7QK/140(3)[6],=KL7QK/7(3)[6],=KL7QR(3)[6],=KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6], - =KL7RM(3)[6],=KL7RS(3)[6],=KL7S(3)[6],=KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6], - =KL7UP(3)[6],=KL7UT(3)[6],=KL7VK(3)[6],=KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6], - =KL7WM(3)[6],=KL7WN(3)[6],=KL7WP(3)[6],=KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6], - =KL7YY/M(3)[6],=KL7ZH(3)[6],=KL7ZW(3)[6],=KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6], - =KP2CB(3)[6],=KP2CT(3)[6],=KP2X(3)[6],=KP2Y(3)[6],=KP4BBN(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6], - =KP4UZ(3)[6],=KP4X(3)[6],=NH0F(3)[6],=NH0K(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6], - =NH6B(3)[6],=NH6BF(3)[6],=NH6CI(3)[6],=NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6], - =NH6HE(3)[6],=NH6HZ(3)[6],=NH6LM(3)[6],=NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6], - =NH6Z(3)[6],=NH6ZA(3)[6],=NH6ZE(3)[6],=NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6], - =NH7N(3)[6],=NH7ND(3)[6],=NH7NJ/7(3)[6],=NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6], - =NH7SH(3)[6],=NH7TG(3)[6],=NH7VZ(3)[6],=NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6], - =NH7YI(3)[6],=NL7AH(3)[6],=NL7AR(3)[6],=NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6], - =NL7DH(3)[6],=NL7DY(3)[6],=NL7EO(3)[6],=NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6], - =NL7GW(3)[6],=NL7HH(3)[6],=NL7HK(3)[6],=NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6], - =NL7JN(3)[6],=NL7KV(3)[6],=NL7LI(3)[6],=NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6], - =NL7PN(3)[6],=NL7QI(3)[6],=NL7RL(3)[6],=NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6], - =NL7WJ(3)[6],=NL7XX(3)[6],=NL7ZM(3)[6],=NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6], - =NP3PH(3)[6],=NP4AI/M(3)[6],=NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6], - =VA2GLB/P(3)[6],=WH0AAM(3)[6],=WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6], - =WH6B(3)[6],=WH6BDR(3)[6],=WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6], - =WH6CUS(3)[6],=WH6CWD(3)[6],=WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6], - =WH6DAY(3)[6],=WH6DJO(3)[6],=WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6], - =WH6EEC(3)[6],=WH6EEG(3)[6],=WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6], - =WH6ETO(3)[6],=WH6EWE(3)[6],=WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6], - =WH6OY(3)[6],=WH6QV(3)[6],=WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6], - =WH6YT(3)[6],=WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6],=WH7G(3)[6], - =WH7GC(3)[6],=WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6],=WH7RG(3)[6], - =WH7TC(3)[6],=WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6],=WL7AAW(3)[6],=WL7AL(3)[6], - =WL7AP(3)[6],=WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6],=WL7BHR(3)[6],=WL7BLM(3)[6], - =WL7BM(3)[6],=WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6],=WL7BUI(3)[6],=WL7BVN(3)[6], - =WL7BVS(3)[6],=WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6],=WL7CPE(3)[6],=WL7CPI(3)[6], - =WL7CQX(3)[6],=WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6],=WL7CTE(3)[6],=WL7DD(3)[6], - =WL7FA(3)[6],=WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6],=WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6], - =WL7IS(3)[6],=WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6],=WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6], - =WL7OA(3)[6],=WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6],=WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6], - =WL7SO(3)[6],=WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6],=WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6], - =WL7WU(3)[6],=WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6],=WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6], - =WP2ADG(3)[6],=WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], + =AL7KK(3)[6],=AL7KL(3)[6],=AL7KV(3)[6],=AL7L/7(3)[6],=AL7LI(3)[6],=AL7LL(3)[6],=AL7MH(3)[6], + =AL7MQ(3)[6],=AL7ND(3)[6],=AL7NK(3)[6],=AL7NZ(3)[6],=AL7OK(3)[6],=AL7OW(3)[6],=AL7PR(3)[6], + =AL7PV(3)[6],=AL7QL(3)[6],=AL7R(3)[6],=AL7R/7(3)[6],=AL7RF(3)[6],=AL7RF/7(3)[6],=AL7RM(3)[6], + =AL7RR(3)[6],=AL7W(3)[6],=G4KHG/M(3)[6],=KH0AS(3)[6],=KH0H(3)[6],=KH0K(3)[6],=KH0SH(3)[6], + =KH0TL(3)[6],=KH0X(3)[6],=KH2CH(3)[6],=KH2G(3)[6],=KH2GG(3)[6],=KH2JA(3)[6],=KH2QH(3)[6], + =KH2RK(3)[6],=KH2SK(3)[6],=KH2SR(3)[6],=KH2TJ/7(3)[6],=KH2TJ/P(3)[6],=KH2XP(3)[6],=KH2YL(3)[6], + =KH3AD(3)[6],=KH6AB(3)[6],=KH6AHQ(3)[6],=KH6BXZ(3)[6],=KH6CN(3)[6],=KH6CN/7(3)[6],=KH6COY(3)[6], + =KH6CQG(3)[6],=KH6CQH(3)[6],=KH6CQH/7(3)[6],=KH6DB(3)[6],=KH6DE(3)[6],=KH6DOT(3)[6],=KH6DUT(3)[6], + =KH6EE(3)[6],=KH6EE/7(3)[6],=KH6FKA/7(3)[6],=KH6FU(3)[6],=KH6GB(3)[6],=KH6GDN(3)[6],=KH6HU(3)[6], + =KH6HWK(3)[6],=KH6IA(3)[6],=KH6ICQ(3)[6],=KH6IKC(3)[6],=KH6IMN(3)[6],=KH6IQX(3)[6],=KH6ITY(3)[6], + =KH6JFL(3)[6],=KH6JIM/7(3)[6],=KH6JJS(3)[6],=KH6JPJ(3)[6],=KH6JPO(3)[6],=KH6JRW(3)[6], + =KH6JT(3)[6],=KH6JUQ(3)[6],=KH6KS(3)[6],=KH6KW(3)[6],=KH6LEM(3)[6],=KH6ME(3)[6],=KH6MF(3)[6], + =KH6NA(3)[6],=KH6NO/7(3)[6],=KH6NO/M(3)[6],=KH6NU(3)[6],=KH6OV(3)[6],=KH6PG(3)[6],=KH6PR(3)[6], + =KH6QAI(3)[6],=KH6QAI/7(3)[6],=KH6QAJ(3)[6],=KH6RW(3)[6],=KH6RY(3)[6],=KH6SAT(3)[6],=KH6SS(3)[6], + =KH6TG(3)[6],=KH6TX(3)[6],=KH6VM(3)[6],=KH6VM/7(3)[6],=KH6VT(3)[6],=KH6WX(3)[6],=KH6XG(3)[6], + =KH6XS(3)[6],=KH6XT(3)[6],=KH6YL(3)[6],=KH7AL(3)[6],=KH7AR(3)[6],=KH7AX(3)[6],=KH7CB(3)[6], + =KH7CM(3)[6],=KH7CZ(3)[6],=KH7FJ(3)[6],=KH7FR(3)[6],=KH7HH(3)[6],=KH7HWK(3)[6],=KH7IP(3)[6], + =KH7LE(3)[6],=KH7ME(3)[6],=KH7MR(3)[6],=KH7NP(3)[6],=KH7R(3)[6],=KH7RD(3)[6],=KH7RT(3)[6], + =KH7SQ(3)[6],=KH7SR(3)[6],=KH7WW(3)[6],=KH7WW/7(3)[6],=KH7X/7(3)[6],=KH7YD(3)[6],=KH7YD/7(3)[6], + =KH8AB(3)[6],=KH8AH(3)[6],=KH8AZ(3)[6],=KH8BG(3)[6],=KH8D(3)[6],=KH8E(3)[6],=KH8K(3)[6], + =KH9AA(3)[6],=KL0AI(3)[6],=KL0AN(3)[6],=KL0AP(3)[6],=KL0CA(3)[6],=KL0CM(3)[6],=KL0CW(3)[6], + =KL0DF(3)[6],=KL0DG(3)[6],=KL0DR(3)[6],=KL0DT(3)[6],=KL0EU(3)[6],=KL0IR(3)[6],=KL0IS(3)[6], + =KL0IW(3)[6],=KL0IX(3)[6],=KL0LF(3)[6],=KL0MO(3)[6],=KL0NM(3)[6],=KL0NP(3)[6],=KL0PP(3)[6], + =KL0QD(3)[6],=KL0RA(3)[6],=KL0SZ(3)[6],=KL0TR(3)[6],=KL0TU(3)[6],=KL1AA(3)[6],=KL1AE(3)[6], + =KL1DO(3)[6],=KL1DW(3)[6],=KL1ED(3)[6],=KL1JF(3)[6],=KL1K(3)[6],=KL1LE(3)[6],=KL1LZ(3)[6], + =KL1MF(3)[6],=KL1OH(3)[6],=KL1QL(3)[6],=KL1RH(3)[6],=KL1RV(3)[6],=KL1SF/7(3)[6],=KL1SO(3)[6], + =KL1U(3)[6],=KL1UA(3)[6],=KL1UM(3)[6],=KL1XI(3)[6],=KL1YO(3)[6],=KL1YY/7(3)[6],=KL1ZN(3)[6], + =KL1ZP(3)[6],=KL1ZR(3)[6],=KL2A/7(3)[6],=KL2BG(3)[6],=KL2BO(3)[6],=KL2BW(3)[6],=KL2BY(3)[6], + =KL2BZ(3)[6],=KL2FD(3)[6],=KL2FL(3)[6],=KL2JY(3)[6],=KL2K(3)[6],=KL2KY(3)[6],=KL2LA(3)[6], + =KL2LN(3)[6],=KL2LT(3)[6],=KL2MA(3)[6],=KL2MP(3)[6],=KL2NJ(3)[6],=KL2NU(3)[6],=KL2NW(3)[6], + =KL2OH(3)[6],=KL2OJ(3)[6],=KL2P(3)[6],=KL2QE(3)[6],=KL2VK(3)[6],=KL2YH(3)[6],=KL3EZ(3)[6], + =KL3FE(3)[6],=KL3IC(3)[6],=KL3IO(3)[6],=KL3IW(3)[6],=KL3MZ(3)[6],=KL3NE(3)[6],=KL3NO(3)[6], + =KL3OQ(3)[6],=KL3PD(3)[6],=KL3TW(3)[6],=KL3TY(3)[6],=KL3VJ(3)[6],=KL3XS(3)[6],=KL4BS(3)[6], + =KL4E(3)[6],=KL4RKH(3)[6],=KL4YFD(3)[6],=KL7AB(3)[6],=KL7AD(3)[6],=KL7AW(3)[6],=KL7BD(3)[6], + =KL7BDC(3)[6],=KL7BH(3)[6],=KL7BR(3)[6],=KL7BS(3)[6],=KL7BT(3)[6],=KL7BUR(3)[6],=KL7BXP(3)[6], + =KL7C(3)[6],=KL7CPO(3)[6],=KL7CT(3)[6],=KL7CY(3)[6],=KL7DC(3)[6],=KL7DF(3)[6],=KL7DI(3)[6], + =KL7DK(3)[6],=KL7DLG(3)[6],=KL7EF(3)[6],=KL7EFL(3)[6],=KL7EH(3)[6],=KL7EIN(3)[6],=KL7EU(3)[6], + =KL7FDQ(3)[6],=KL7FDQ/7(3)[6],=KL7FOZ(3)[6],=KL7FRQ(3)[6],=KL7FS(3)[6],=KL7GA(3)[6],=KL7GCS(3)[6], + =KL7GKY(3)[6],=KL7GRF(3)[6],=KL7GT(3)[6],=KL7HB(3)[6],=KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6], + =KL7HI(3)[6],=KL7HJR(3)[6],=KL7HLF(3)[6],=KL7HM(3)[6],=KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6], + =KL7IAL(3)[6],=KL7IBT(3)[6],=KL7IDY(3)[6],=KL7IEI(3)[6],=KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6], + =KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6],=KL7IPV(3)[6],=KL7ISE(3)[6],=KL7IUX(3)[6], + =KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6],=KL7JBB(3)[6],=KL7JDQ(3)[6],=KL7JES(3)[6], + =KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6],=KL7KG/7(3)[6],=KL7LG(3)[6],=KL7LI(3)[6], + =KL7LX(3)[6],=KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6],=KL7MZ(3)[6],=KL7NA(3)[6],=KL7NP(3)[6], + =KL7NP/7(3)[6],=KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6],=KL7OR(3)[6],=KL7OR/7(3)[6],=KL7OS(3)[6], + =KL7OY(3)[6],=KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6],=KL7QK/140(3)[6],=KL7QK/7(3)[6],=KL7QR(3)[6], + =KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6],=KL7RM(3)[6],=KL7RS(3)[6],=KL7S(3)[6], + =KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6],=KL7UP(3)[6],=KL7UT(3)[6],=KL7VK(3)[6], + =KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6],=KL7WC(3)[6],=KL7WM(3)[6],=KL7WN(3)[6], + =KL7WP(3)[6],=KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6],=KL7YY/M(3)[6],=KL7ZH(3)[6], + =KL7ZW(3)[6],=KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6],=KP2CB(3)[6],=KP2CT(3)[6], + =KP2X(3)[6],=KP2Y(3)[6],=KP4BBN(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6],=KP4UZ(3)[6],=KP4X(3)[6], + =NH0F(3)[6],=NH0K(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6],=NH6B(3)[6],=NH6BF(3)[6], + =NH6CI(3)[6],=NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6],=NH6HE(3)[6],=NH6HZ(3)[6], + =NH6LM(3)[6],=NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6],=NH6Z(3)[6],=NH6ZA(3)[6], + =NH6ZE(3)[6],=NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6],=NH7N(3)[6],=NH7ND(3)[6], + =NH7NJ/7(3)[6],=NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6],=NH7SH(3)[6],=NH7TG(3)[6], + =NH7VZ(3)[6],=NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6],=NH7YI(3)[6],=NL7AH(3)[6], + =NL7AR(3)[6],=NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6],=NL7DH(3)[6],=NL7DY(3)[6], + =NL7EO(3)[6],=NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6],=NL7GW(3)[6],=NL7HH(3)[6], + =NL7HK(3)[6],=NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6],=NL7JN(3)[6],=NL7KV(3)[6], + =NL7LI(3)[6],=NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6],=NL7PN(3)[6],=NL7QI(3)[6], + =NL7RL(3)[6],=NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6],=NL7WJ(3)[6],=NL7XX(3)[6], + =NL7ZM(3)[6],=NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6],=NP3PH(3)[6],=NP4AI/M(3)[6], + =NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6],=VA2GLB/P(3)[6],=WH0AAM(3)[6], + =WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6],=WH6B(3)[6],=WH6BDR(3)[6], + =WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6],=WH6CUS(3)[6],=WH6CWD(3)[6], + =WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6],=WH6DAY(3)[6],=WH6DJO(3)[6], + =WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6],=WH6EEC(3)[6],=WH6EEG(3)[6], + =WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6],=WH6ETO(3)[6],=WH6EWE(3)[6], + =WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6],=WH6OY(3)[6],=WH6QV(3)[6], + =WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6],=WH6YT(3)[6],=WH6ZR(3)[6], + =WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6],=WH7G(3)[6],=WH7GC(3)[6], + =WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6],=WH7RG(3)[6],=WH7TC(3)[6], + =WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6],=WL7AAW(3)[6],=WL7AL(3)[6],=WL7AP(3)[6], + =WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6],=WL7BHR(3)[6],=WL7BLM(3)[6],=WL7BM(3)[6], + =WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6],=WL7BUI(3)[6],=WL7BVN(3)[6],=WL7BVS(3)[6], + =WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6],=WL7CPE(3)[6],=WL7CPI(3)[6],=WL7CQX(3)[6], + =WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6],=WL7CTE(3)[6],=WL7DD(3)[6],=WL7FA(3)[6], + =WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6],=WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6],=WL7IS(3)[6], + =WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6],=WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6],=WL7OA(3)[6], + =WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6],=WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6],=WL7SO(3)[6], + =WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6],=WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6],=WL7WU(3)[6], + =WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6],=WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6],=WP2ADG(3)[6], + =WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], AA8(4)[8],AB8(4)[8],AC8(4)[8],AD8(4)[8],AE8(4)[8],AF8(4)[8],AG8(4)[8],AI8(4)[8],AJ8(4)[8], AK8(4)[8],K8(4)[8],KA8(4)[8],KB8(4)[8],KC8(4)[8],KD8(4)[8],KE8(4)[8],KF8(4)[8],KG8(4)[8], KI8(4)[8],KJ8(4)[8],KK8(4)[8],KM8(4)[8],KN8(4)[8],KO8(4)[8],KQ8(4)[8],KR8(4)[8],KS8(4)[8], @@ -1554,17 +1559,17 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: WQ9(4)[8],WR9(4)[8],WS9(4)[8],WT9(4)[8],WU9(4)[8],WV9(4)[8],WW9(4)[8],WX9(4)[8],WY9(4)[8], WZ9(4)[8],=AH0AJ(4)[8],=AH6DA(4)[8],=AH6EZ/9(4)[8],=AH6OM(4)[8],=AL1CE(4)[8],=AL7AK(4)[8], =AL7AK/9(4)[8],=AL7BT(4)[8],=AL7CV(4)[8],=AL7DS(4)[8],=AL7II/9(4)[8],=AL7OL(4)[8],=AL7PM(4)[8], - =KH0BE(4)[8],=KH6JNY(4)[8],=KH6KI(4)[8],=KH6UX(4)[8],=KH7DR(4)[8],=KH7EI(4)[8],=KL0LB(4)[8], - =KL0NY(4)[8],=KL1NO(4)[8],=KL1QN(4)[8],=KL2A/9(4)[8],=KL2KP(4)[8],=KL2NQ(4)[8],=KL2YD(4)[8], - =KL2ZL(4)[8],=KL4CX(4)[8],=KL7AL(4)[8],=KL7AL/9(4)[8],=KL7BGR(4)[8],=KL7CE(4)[8],=KL7CE/9(4)[8], - =KL7IBV(4)[8],=KL7IPS(4)[8],=KL7IVK(4)[8],=KL7JAB(4)[8],=KL7MU(4)[8],=KL7TD(4)[8],=KP3JOS(4)[8], - =KP3VA/M(4)[8],=KP4CI(4)[8],=KP4GE/9(4)[8],=KP4SL(4)[8],=KP4WG(4)[8],=NH2W(4)[8],=NH2W/9(4)[8], - =NH6R(4)[8],=NH7TK(4)[8],=NL7CM(4)[8],=NL7KD(4)[8],=NL7NK(4)[8],=NL7QC(4)[8],=NL7QC/9(4)[8], - =NL7RC(4)[8],=NL7UH(4)[8],=NL7YI(4)[8],=NP2AV(4)[8],=NP2GM(4)[8],=NP2L/9(4)[8],=NP2MU(4)[8], - =NP3QC(4)[8],=NP4ZI(4)[8],=WH0AI(4)[8],=WH2T(4)[8],=WH6FBA(4)[8],=WH6SB(4)[8],=WL7AHP(4)[8], - =WL7AIT(4)[8],=WL7BEV(4)[8],=WL7CTA(4)[8],=WL7FJ(4)[8],=WL7JAN(4)[8],=WL7NP(4)[8],=WL7UU(4)[8], - =WP2B(4)[8],=WP4JSP(4)[8],=WP4KGF(4)[8],=WP4LKY(4)[8],=WP4LSQ(4)[8],=WP4MQX(4)[8],=WP4MSD(4)[8], - =WP4MTN(4)[8],=WP4MVQ(4)[8],=WP4MYL(4)[8],=WP4OCZ(4)[8], + =KH0BE(4)[8],=KH2RP(4)[8],=KH6JNY(4)[8],=KH6KI(4)[8],=KH6UX(4)[8],=KH7DR(4)[8],=KH7EI(4)[8], + =KL0LB(4)[8],=KL0NY(4)[8],=KL1NO(4)[8],=KL1QN(4)[8],=KL2A/9(4)[8],=KL2KP(4)[8],=KL2NQ(4)[8], + =KL2YD(4)[8],=KL2ZL(4)[8],=KL4CX(4)[8],=KL7AL(4)[8],=KL7AL/9(4)[8],=KL7BGR(4)[8],=KL7CE(4)[8], + =KL7CE/9(4)[8],=KL7IBV(4)[8],=KL7IPS(4)[8],=KL7IVK(4)[8],=KL7JAB(4)[8],=KL7MU(4)[8],=KL7TD(4)[8], + =KP2XX(4)[8],=KP3JOS(4)[8],=KP3VA/M(4)[8],=KP4CI(4)[8],=KP4GE/9(4)[8],=KP4SL(4)[8],=KP4WG(4)[8], + =NH2W(4)[8],=NH2W/9(4)[8],=NH6R(4)[8],=NH7TK(4)[8],=NL7CM(4)[8],=NL7KD(4)[8],=NL7NK(4)[8], + =NL7QC(4)[8],=NL7QC/9(4)[8],=NL7RC(4)[8],=NL7UH(4)[8],=NL7YI(4)[8],=NP2AV(4)[8],=NP2GM(4)[8], + =NP2L/9(4)[8],=NP2MU(4)[8],=NP3QC(4)[8],=NP4ZI(4)[8],=WH0AI(4)[8],=WH2T(4)[8],=WH6FBA(4)[8], + =WH6SB(4)[8],=WL7AHP(4)[8],=WL7AIT(4)[8],=WL7BEV(4)[8],=WL7CTA(4)[8],=WL7FJ(4)[8],=WL7JAN(4)[8], + =WL7NP(4)[8],=WL7UU(4)[8],=WP2B(4)[8],=WP4JSP(4)[8],=WP4KGF(4)[8],=WP4LKY(4)[8],=WP4LSQ(4)[8], + =WP4MQX(4)[8],=WP4MSD(4)[8],=WP4MTN(4)[8],=WP4MVQ(4)[8],=WP4MYL(4)[8],=WP4OCZ(4)[8], =AH2BG(4)[8],=AH6ES(4)[8],=AH6FF(4)[8],=AH6HR(4)[8],=AH6HR/4(4)[8],=AH6KB(4)[8],=AL0P(4)[8], =AL2C(4)[8],=AL2F(4)[8],=AL2F/4(4)[8],=AL4B(4)[8],=AL7CX(4)[8],=AL7EU(4)[8],=AL7KN(4)[8], =AL7MR(4)[8],=AL7QO(4)[8],=KH0UN(4)[8],=KH2AR(4)[8],=KH2AR/4(4)[8],=KH2DN(4)[8],=KH4AF(4)[8], @@ -1591,15 +1596,15 @@ Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: =KG4SC,=KG4SS,=KG4WH,=KG4WV,=KG4XP,=KG4ZK,=W1AW/KG4; Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: AH0,KH0,NH0,WH0,=AB2HV,=AB2QH,=AB9HF,=AB9OQ,=AC8CP,=AD5KT,=AD6YP,=AE6OG,=AF4IN,=AF4KH,=AF6EO, - =AH2U,=AJ6K,=AK1JA,=K8KH,=K8RN,=KB5UAB,=KB9LQG,=KC2WIK,=KC5SPG,=KC7SDC,=KC9GQX,=KD7GJX,=KG2QH, - =KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O,=KH2VL,=KL7QOL,=KW2X,=N0J,=N3QD,=N6EAX,=N7NVX,=N8CS, - =NA1M,=NH2B,=NH2FG,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; + =AH2U,=AJ6K,=AK1JA,=K0FRI,=K8KH,=K8RN,=KB5UAB,=KB9LQG,=KC2WIK,=KC5SPG,=KC7SDC,=KC9GQX,=KD7GJX, + =KG2QH,=KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O,=KH2VL,=KL7QOL,=KW2X,=N0J,=N3QD,=N6EAX,=N7NVX, + =N8CS,=NA1M,=NH2B,=NH2FG,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; Baker & Howland Islands: 31: 61: OC: 0.00: 176.00: 12.0: KH1: AH1,KH1,NH1,WH1; Guam: 27: 64: OC: 13.37: -144.70: -10.0: KH2: AH2,KH2,NH2,WH2,=AB2AB,=AB8EW,=AC0FG,=AE6QZ,=AH0AX,=AH0F,=AH0FM,=AH0S,=AI6ID,=K1IWD,=K2QGC,=K5GUA, - =K5GUM,=KA0RU,=KA6BEG,=KB7OVT,=KB7PQU,=KC2OOX,=KD7IRV,=KE4YSP,=KE6ATM,=KE7GMC,=KE7IPG,=KF4UFC, - =KF5ULC,=KF7BMU,=KG4BKW,=KG6AGT,=KG6ARL,=KG6DX,=KG6FJG,=KG6JDX,=KG6JKR,=KG6JKT,=KG6TEZ,=KG6TWZ, + =K5GUM,=KA0RU,=KA6BEG,=KB5OXR,=KB7OVT,=KB7PQU,=KC2OOX,=KD7IRV,=KE4YSP,=KE6ATM,=KE7GMC,=KE7IPG, + =KF4UFC,=KF5ULC,=KF7BMU,=KG4BKW,=KG6AGT,=KG6ARL,=KG6DX,=KG6FJG,=KG6JDX,=KG6JKR,=KG6JKT,=KG6TWZ, =KH0C,=KH0DX,=KH0ES,=KH0TF,=KH0UM,=KH6KK,=KI4KKH,=KI4KKI,=KI7SSW,=KJ6KCJ,=KK6GVF,=KK7AV,=KM4NVB, =N2MI,=NH0A,=NH0B,=NH7TL,=NH7WC,=NP3EZ,=W5LFA,=W6KV,=W7GVC,=W9MRE,=WA3KNB,=WB7AXZ,=WD6DGS,=WH0AC; Johnston Island: 31: 61: OC: 16.72: 169.53: 10.0: KH3: @@ -1610,45 +1615,45 @@ Palmyra & Jarvis Islands: 31: 61: OC: 5.87: 162.07: 11.0: KH5: AH5,KH5,NH5,WH5; Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,=AA7LE,=AA8JA,=AB0JM,=AB3WS,=AB6AP,=AB8VQ,=AC4PJ,=AC4TJ,=AC7LR, - =AC7N,=AC9PT,=AE3TT,=AE5AB,=AE5LR,=AG4FH,=AH0A,=AH0AG,=AH2CN,=AJ0M,=AJ8HT,=AK0P,=AK2J,=AL3U, - =AL7RQ,=K0BAD,=K0LAS,=K0LIH,=K0LUC,=K0OUS,=K1ENT,=K1HZM,=K1OWL,=K1RJ,=K1VAN,=K2FFT,=K2GT,=K3NW, - =K3QHP,=K3UNS,=K4EVR,=K4RAC,=K4UAI,=K4UHL,=K4XS,=K4XSS,=K4XV,=K5HQM,=K5ZAI,=K5ZYO,=K6AMA,=K6APP, - =K6ATF,=K6CEE,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ASH,=K7FAR,=K7FR,=K7NRJ,=K7QAS, - =K8EUT,=K9AGI,=K9FD,=K9UBS,=KA0FOR,=KA0VHP,=KA1ICJ,=KA1YJ,=KA2IXG,=KA2WXU,=KA3HIZ,=KA3TUA,=KA4INK, - =KA6QOD,=KA7APU,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR,=KB0PXK,=KB0ZKZ,=KB1EUJ,=KB1GC,=KB1PCX, - =KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV,=KB4NGN,=KB5NNY,=KB5OWT,=KB6CNU,=KB6EGA,=KB6INB, - =KB6PKF,=KB7AKH,=KB7DDX,=KB7EA,=KB7G,=KB7JB,=KB7MEU,=KB7QKJ,=KB7UQH,=KB7UVR,=KB7WDC,=KB7WUP, - =KB8SKX,=KC0WQU,=KC0YIH,=KC0ZER,=KC1DBY,=KC2GSU,=KC2HL,=KC2MIU,=KC2PGW,=KC2SRW,=KC2YL,=KC2ZSG, - =KC2ZSH,=KC2ZSI,=KC3GZT,=KC4HHS,=KC5GAX,=KC6HOX,=KC6QQI,=KC6RYQ,=KC6SHT,=KC6SWR,=KC6YIO,=KC7ASJ, - =KC7AXX,=KC7DUT,=KC7EJC,=KC7HNC,=KC7KAT,=KC7KAW,=KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG, - =KC7USA,=KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI,=KC8EJ,=KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ, - =KD0QLR,=KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ,=KD4GW,=KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX, - =KD5TBQ,=KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX,=KD6LRA,=KD6VTU,=KD7HTG,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ, - =KD7UV,=KD7UZG,=KD7WJM,=KD8GVO,=KE0TU,=KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM, - =KE5UZN,=KE6AXN,=KE6AXP,=KE6AYZ,=KE6CQE,=KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ, - =KE7FJA,=KE7FSK,=KE7HEW,=KE7IZS,=KE7JTX,=KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT, - =KE7UAJ,=KE7UV,=KE7UW,=KF4DWA,=KF4FQR,=KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ, - =KF5MXM,=KF5MXP,=KF6BS,=KF6FDG,=KF6IVV,=KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD, - =KF6RLP,=KF6YZR,=KF6ZAL,=KF7GNP,=KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC, - =KG4SGV,=KG6DV,=KG6EFD,=KG6HRX,=KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI, - =KG6SDD,=KG6TFI,=KG6WZD,=KG7AYU,=KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE, - =KH2YI,=KH3AE,=KH3AE/M,=KH3AF,=KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ, - =KI6EFY,=KI6FTE,=KI6HBZ,=KI6JEC,=KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV, - =KI7EZG,=KI7FJW,=KI7FJX,=KI7FUT,=KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW, - =KJ6LAX,=KJ6LBI,=KJ6NZH,=KJ6QQT,=KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX, - =KK6PGA,=KK6QAI,=KK6VJN,=KK6ZQ,=KK6ZZE,=KK7WR,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM, - =KN6BE,=KN6ZU,=KN8AQR,=KO6KW,=KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0PJV,=N0RMC, - =N0ZSJ,=N1CBF,=N1CFD,=N1CNQ,=N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ,=N3DJT, - =N3FUR,=N3GWR,=N3HQW,=N3RWD,=N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW,=N6GOZ, - =N6IKX,=N6KB,=N6NCT,=N6PJQ,=N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX,=N9CRQ, - =N9GFL,=N9SBL,=NB6R,=NE7SO,=NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II,=NH2IJ, - =NH2IO,=NH2JO,=NH2KF,=NH2KH,=NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F,=W0UNX, - =W1BMB,=W2UNS,=W3ZRT,=W4YQS,=W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ,=W6NBK, - =W6ROM,=W6SHH,=W6UNX,=W7EHP,=W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=WA0FUR,=WA0NHD, - =WA2AUI,=WA3ZEM,=WA6ECX,=WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE,=WA7ZK, - =WA8JQP,=WB0RUA,=WB0TZQ,=WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PIO,=WB6PJT, - =WB6SAA,=WB8NCD,=WB9SMM,=WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K,=WU0H, - =WV0Z,=WV6K,=WX7G; + =AC7N,=AC9PT,=AE3TT,=AE5AB,=AE5LR,=AG4FH,=AH0A,=AH0AG,=AH2CN,=AJ0M,=AJ6JF,=AJ8HT,=AK0P,=AK2J, + =AL3U,=AL7RQ,=K0BAD,=K0LAS,=K0LIH,=K0LUC,=K0OUS,=K1ENT,=K1HZM,=K1OSP,=K1OWL,=K1RJ,=K1VAN,=K2FFT, + =K2GT,=K3NW,=K3QHP,=K3UNS,=K4EVR,=K4RAC,=K4UAI,=K4UHL,=K4XS,=K4XSS,=K4XV,=K5HQM,=K5UN,=K5ZAI, + =K5ZYO,=K6AMA,=K6APP,=K6ATF,=K6CEE,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ALH,=K7ASH, + =K7FAR,=K7FR,=K7NRJ,=K7QAS,=K8EUT,=K9AGI,=K9FD,=K9UBS,=KA0FOR,=KA0VHP,=KA1ICJ,=KA1YJ,=KA2IXG, + =KA2WXU,=KA3HIZ,=KA3TUA,=KA4INK,=KA6QOD,=KA7APU,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR,=KB0PXK, + =KB0ZKZ,=KB1EUJ,=KB1GC,=KB1PCX,=KB1UHL,=KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV,=KB4NGN, + =KB5HVJ,=KB5NNY,=KB5OWT,=KB6CNU,=KB6EGA,=KB6INB,=KB6PKF,=KB7AKH,=KB7DDX,=KB7EA,=KB7G,=KB7JB, + =KB7MEU,=KB7QKJ,=KB7UQH,=KB7UVR,=KB7WDC,=KB7WUP,=KB8SKX,=KC0WQU,=KC0YIH,=KC0ZER,=KC1DBY,=KC2GSU, + =KC2HL,=KC2MIU,=KC2PGW,=KC2SRW,=KC2YL,=KC2ZSG,=KC2ZSH,=KC2ZSI,=KC3GZT,=KC4HHS,=KC5GAX,=KC6HOX, + =KC6QQI,=KC6RYQ,=KC6SHT,=KC6SWR,=KC6YIO,=KC7ASJ,=KC7AXX,=KC7DUT,=KC7EJC,=KC7HNC,=KC7KAT,=KC7KAW, + =KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG,=KC7USA,=KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI,=KC8EJ, + =KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ,=KD0QLR,=KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ,=KD4GW, + =KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX,=KD5TBQ,=KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX,=KD6LRA, + =KD6VTU,=KD7GWM,=KD7HTG,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ,=KD7UV,=KD7UZG,=KD7WJM,=KD8GVO,=KE0TU, + =KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM,=KE5UZN,=KE6AXN,=KE6AXP,=KE6AYZ,=KE6CQE, + =KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ,=KE7FJA,=KE7FSK,=KE7HEW,=KE7IZS,=KE7JTX, + =KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT,=KE7UAJ,=KE7UV,=KE7UW,=KF4DWA,=KF4FQR, + =KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ,=KF5MXM,=KF5MXP,=KF6BS,=KF6FDG,=KF6IVV, + =KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD,=KF6RLP,=KF6YZR,=KF6ZAL,=KF6ZVS,=KF7GNP, + =KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC,=KG4SGV,=KG6DV,=KG6EFD,=KG6HRX, + =KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI,=KG6SDD,=KG6TFI,=KG6WZD,=KG7AYU, + =KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE,=KH2YI,=KH3AE,=KH3AE/M,=KH3AF, + =KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ,=KI6EFY,=KI6FTE,=KI6HBZ,=KI6JEC, + =KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV,=KI7EZG,=KI7FJW,=KI7FJX,=KI7FUT, + =KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW,=KJ6LAX,=KJ6LBI,=KJ6NZH,=KJ6QQT, + =KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX,=KK6PGA,=KK6QAI,=KK6VJN,=KK6ZQ, + =KK6ZZE,=KK7WR,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM,=KN6BE,=KN6ZU,=KN8AQR,=KO6KW, + =KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0PJV,=N0RMC,=N0ZSJ,=N1CBF,=N1CFD,=N1CNQ, + =N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ,=N3DJT,=N3FUR,=N3GWR,=N3HQW,=N3RWD, + =N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW,=N6GOZ,=N6IKX,=N6KB,=N6NCT,=N6PJQ, + =N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX,=N9CRQ,=N9GFL,=N9SBL,=NB6R,=NE7SO, + =NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II,=NH2IJ,=NH2IO,=NH2JO,=NH2KF,=NH2KH, + =NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F,=W0UNX,=W1BMB,=W2UNS,=W3ZRT,=W4YQS, + =W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ,=W6NBK,=W6ROM,=W6SHH,=W6UNX,=W7EHP, + =W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=WA0FUR,=WA0NHD,=WA2AUI,=WA3ZEM,=WA6ECX, + =WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE,=WA7ZK,=WA8JQP,=WB0RUA,=WB0TZQ, + =WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PIO,=WB6PJT,=WB6SAA,=WB8NCD,=WB9SMM, + =WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K,=WU0H,=WV0Z,=WV6K,=WX7G,=WY6F; Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K: AH7K,KH7K,NH7K,WH7K; American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8: @@ -1660,47 +1665,47 @@ Wake Island: 31: 65: OC: 19.28: -166.63: -12.0: KH9: Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: AL,KL,NL,WL,=AA0NN,=AA8FY,=AB0IC,=AB0WK,=AB5JB,=AB7YB,=AB7YO,=AB8XX,=AB9OM,=AC0CW,=AC9QX,=AD0DK, =AD0FQ,=AD0ZL,=AD3BJ,=AD6GC,=AD7MF,=AD7VV,=AE1DJ,=AE4QH,=AE5CP,=AE5EX,=AE5FN,=AE5IR,=AE7ES,=AE7KS, - =AE7SB,=AF7FV,=AG5LN,=AG5OF,=AH0AH,=AH0H,=AJ4ZI,=K0AZZ,=K0BHC,=K1BZD,=K1MAT,=K2ICW,=K2NPS,=K3JMI, - =K4ETC,=K4HOE,=K4RND,=K4WPK,=K5DOW,=K5HL,=K5RD,=K5RSO,=K5RZW,=K5TDN,=K5UBS,=K6ANE,=K6GKW,=K7EJM, - =K7GRW,=K7LOP,=K7MVX,=K7OCL,=K7RDR,=K7SGA,=K7UNX,=K7ZOA,=K8IEL,=K8OUA,=K9DUG,=K9WUV,=KA0SIM, - =KA0YPV,=KA1NCN,=KA2TJZ,=KA2ZSD,=KA6UGT,=KA7ETQ,=KA7HOX,=KA7JOR,=KA7TMU,=KA7TOM,=KA7UKN,=KA7VCR, - =KA7YEY,=KA9GYQ,=KB0APK,=KB0LOW,=KB0TSU,=KB0UGE,=KB0UVK,=KB1CRT,=KB1FCX,=KB1KLH,=KB1PHP,=KB1QCD, - =KB1QCE,=KB1SYV,=KB1WQL,=KB2JWV,=KB2ZME,=KB3CYB,=KB3JFK,=KB3NCR,=KB4DX,=KB5DNT,=KB5HEV,=KB5UWU, - =KB6DKJ,=KB7AMA,=KB7BNG,=KB7DEL,=KB7FXJ,=KB7IBI,=KB7JA,=KB7LJZ,=KB7LON,=KB7PHT,=KB7QLB,=KB7RXZ, - =KB7SIQ,=KB7UBH,=KB7VFZ,=KB7YEC,=KB7ZVZ,=KB8QKR,=KB8SBG,=KB8TEW,=KB8VYJ,=KB9MWG,=KB9RWE,=KB9RWJ, - =KB9YGR,=KC0ATI,=KC0CWG,=KC0CYR,=KC0EF,=KC0GHH,=KC0NSV,=KC0OKQ,=KC0PSZ,=KC0TK,=KC0TZL,=KC0UYK, - =KC0VDN,=KC0WSG,=KC0YSW,=KC1DL,=KC2BYX,=KC2GVS,=KC2HRV,=KC2KMU,=KC2OJP,=KC2PCV,=KC2PIO,=KC3DBK, - =KC4MXQ,=KC4MXR,=KC5BNN,=KC5CHO,=KC5DJA,=KC5KIG,=KC5LKF,=KC5LKG,=KC5QPJ,=KC5THY,=KC5YIB,=KC5YOX, - =KC5ZAA,=KC6RJW,=KC7BUL,=KC7COW,=KC7ENM,=KC7FWK,=KC7GSO,=KC7HJM,=KC7HPF,=KC7IKE,=KC7IKF,=KC7INC, - =KC7MIJ,=KC7MPY,=KC7MRO,=KC7OQZ,=KC7PLJ,=KC7PLQ,=KC7RCP,=KC7TYT,=KC7UZY,=KC7WOA,=KC7YZR,=KC8BKP, - =KC8GKK,=KC8NMN,=KC8NOY,=KC8WWS,=KC8YIV,=KC9CMY,=KC9HIK,=KC9VLD,=KD0CLU,=KD0CZC,=KD0DHU,=KD0FJG, - =KD0JJB,=KD0NSG,=KD0VAK,=KD0VAL,=KD0VGF,=KD0ZOD,=KD2CTE,=KD2GKT,=KD4EYW,=KD4MEY,=KD4QJL,=KD5DNA, - =KD5DWV,=KD5GAL,=KD5QPD,=KD5RVD,=KD5WCF,=KD5WEV,=KD6DLB,=KD6RVY,=KD6YKS,=KD7APU,=KD7AWK,=KD7BBX, - =KD7BGP,=KD7DIG,=KD7DUQ,=KD7FGL,=KD7FUL,=KD7GFG,=KD7HXF,=KD7KRK,=KD7MGO,=KD7QAR,=KD7SIX,=KD7TWB, - =KD7UAG,=KD7VOI,=KD7VXE,=KD7ZTJ,=KD8BVD,=KD8DDY,=KD8GEL,=KD8GMS,=KD8JOU,=KD8LNA,=KD8WMX,=KD9TK, - =KE0DYM,=KE0KKI,=KE4DGR,=KE4MQD,=KE4YEI,=KE4YLG,=KE5CVD,=KE5CVT,=KE5DQV,=KE5FOC,=KE5GEB,=KE5HHR, - =KE5JHS,=KE5JTB,=KE5NLG,=KE5QDI,=KE5QDJ,=KE5QDK,=KE5VPO,=KE5ZRK,=KE5ZUM,=KE6DLM,=KE6DUJ,=KE6DXH, - =KE6IPM,=KE6SYD,=KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL,=KE7EOP,=KE7EPZ,=KE7FNC,=KE7FXM,=KE7GOE,=KE7HMJ, - =KE7KYU,=KE7TRX,=KE8RO,=KF4JET,=KF4PLR,=KF4TBD,=KF4YFD,=KF5CVM,=KF5FJQ,=KF5HFB,=KF5HJC,=KF5NDT, - =KF5NHR,=KF5YYK,=KF6AWG,=KF6AXS,=KF6BMF,=KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO,=KF6ILC,=KF6IOT,=KF6LGK, - =KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7GKY,=KF7LEX,=KF7LUA,=KF7PCJ,=KF7PFT, - =KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P,=KG4TJS,=KG4WNZ,=KG5EQN,=KG5GDF, - =KG5GTD,=KG5JQC,=KG5MIB,=KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL,=KG7CUR,=KG7DVI,=KG7GJL,=KG7JVJ,=KG7OQC, - =KG7SEQ,=KG7TGE,=KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA,=KI4COG,=KI4ERC,=KI4GAG,=KI4GCF,=KI4GDI, - =KI4NGY,=KI4NVI,=KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW,=KI7COR,=KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ, - =KJ4PSV,=KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6KRG,=KJ6ZSX,=KJ7IR,=KK4AMV,=KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG, - =KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I,=KK7IV,=KK7STL,=KL7D/M,=KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX, - =KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KN8IVE,=KR4WV,=KV3X,=KW1W,=KY7J,=KZ6HJC,=N0GDT,=N0GDU,=N0GLI, - =N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN,=N0SUB,=N0WXJ,=N0XKY,=N0XS,=N0ZKV,=N1HUT,=N1KDQ,=N1KTI, - =N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH,=N2SHO,=N2TJY,=N2YZW,=N3QEH,=N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV, - =N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV,=N6CZU,=N6JM,=N7BUO,=N7DBN,=N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX, - =N7MGT,=N7MTG,=N7PHB,=N7QAN,=N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY,=N7YQS,=N7ZYS,=N8DDY,=N8EX,=N8JKB, - =N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD,=NA7WM,=NC4OI,=NE7EK,=NH2GZ,=NH7UO,=NJ7H,=NN4NN,=NP4FU,=NW4G, - =NW7F,=W0EZM,=W0FJN,=W0RWS,=W0UZJ,=W1LYD,=W1RSC,=W1ZKA,=W2DLS,=W2KRZ,=W3JPN,=W4AUL,=W4BMR,=W4LS, - =W4RSB,=W5JKT,=W6DDP,=W6GTE,=W6ROW,=W7APM,=W7DDG,=W7EIK,=W7JMR,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT, - =W8MDD,=W8PVZ,=W8TCX,=W9ITU,=W9JMC,=WA0JS,=WA1FVJ,=WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX, - =WA7YXF,=WB0CMZ,=WB1GZL,=WB1ILS,=WB6COP,=WB7TYK,=WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK, - =WJ8M,=WP4IYI,=WT5T,=WX1NCC; + =AE7SB,=AF7FV,=AG5LN,=AG5OF,=AH0AH,=AH0H,=AJ4ZI,=K0AZZ,=K0BHC,=K1BZD,=K1KAO,=K1MAT,=K2ICW,=K2NPS, + =K3JMI,=K4DRC,=K4ETC,=K4HOE,=K4RND,=K4WPK,=K5DOW,=K5HL,=K5RD,=K5RSO,=K5RZW,=K5TDN,=K5UBS,=K6ANE, + =K6GKW,=K7EJM,=K7GRW,=K7LOP,=K7MVX,=K7OCL,=K7RDR,=K7SGA,=K7UNX,=K7ZOA,=K8IEL,=K8OUA,=K9DUG,=K9WUV, + =KA0SIM,=KA0YPV,=KA1NCN,=KA2TJZ,=KA2ZSD,=KA6UGT,=KA7ETQ,=KA7HOX,=KA7JOR,=KA7TMU,=KA7TOM,=KA7UKN, + =KA7VCR,=KA7YEY,=KA9GYQ,=KB0APK,=KB0LOW,=KB0TSU,=KB0UGE,=KB0UVK,=KB1CRT,=KB1FCX,=KB1KLH,=KB1PHP, + =KB1QCD,=KB1QCE,=KB1SYV,=KB1WQL,=KB2JWV,=KB2ZME,=KB3CYB,=KB3JFK,=KB3NCR,=KB3VQE,=KB4DX,=KB5DNT, + =KB5HEV,=KB5UWU,=KB6DKJ,=KB7AMA,=KB7BNG,=KB7DEL,=KB7FXJ,=KB7IBI,=KB7JA,=KB7LJZ,=KB7LON,=KB7PHT, + =KB7QLB,=KB7RXZ,=KB7SIQ,=KB7UBH,=KB7VFZ,=KB7YEC,=KB7ZVZ,=KB8QKR,=KB8SBG,=KB8TEW,=KB8VYJ,=KB9MWG, + =KB9RWE,=KB9RWJ,=KB9YGR,=KC0ATI,=KC0CWG,=KC0CYR,=KC0EF,=KC0GHH,=KC0LLL,=KC0NSV,=KC0OKQ,=KC0PSZ, + =KC0TK,=KC0TZL,=KC0UYK,=KC0VDN,=KC0WSG,=KC0YSW,=KC1DL,=KC2BYX,=KC2GVS,=KC2HRV,=KC2KMU,=KC2OJP, + =KC2PCV,=KC2PIO,=KC3DBK,=KC4MXQ,=KC4MXR,=KC5BNN,=KC5CHO,=KC5DJA,=KC5KIG,=KC5LKF,=KC5LKG,=KC5QPJ, + =KC5THY,=KC5YIB,=KC5YOX,=KC5ZAA,=KC6RJW,=KC7BUL,=KC7COW,=KC7ENM,=KC7FWK,=KC7GSO,=KC7HJM,=KC7HPF, + =KC7IKE,=KC7IKF,=KC7INC,=KC7MIJ,=KC7MPY,=KC7MRO,=KC7OQZ,=KC7PLJ,=KC7PLQ,=KC7RCP,=KC7TYT,=KC7UZY, + =KC7WOA,=KC7YZR,=KC8GKK,=KC8NMN,=KC8NOY,=KC8WWS,=KC8YIV,=KC9CMY,=KC9HIK,=KC9VLD,=KD0CLU,=KD0CZC, + =KD0DHU,=KD0FJG,=KD0JJB,=KD0NSG,=KD0VAK,=KD0VAL,=KD0VGF,=KD0ZOD,=KD2CTE,=KD2GKT,=KD4EYW,=KD4MEY, + =KD4QJL,=KD5DNA,=KD5DWV,=KD5GAL,=KD5QPD,=KD5RVD,=KD5WCF,=KD5WEV,=KD5WYP,=KD6DLB,=KD6RVY,=KD6YKS, + =KD7APU,=KD7AWK,=KD7BBX,=KD7BGP,=KD7DIG,=KD7DUQ,=KD7FGL,=KD7FUL,=KD7GFG,=KD7HXF,=KD7KRK,=KD7MGO, + =KD7QAR,=KD7SIX,=KD7TWB,=KD7UAG,=KD7VOI,=KD7VXE,=KD7ZTJ,=KD8BVD,=KD8DDY,=KD8GEL,=KD8GMS,=KD8JOU, + =KD8LNA,=KD8WMX,=KD9TK,=KE0DYM,=KE0KKI,=KE4DGR,=KE4MQD,=KE4YEI,=KE4YLG,=KE5CVD,=KE5CVT,=KE5DQV, + =KE5FOC,=KE5GEB,=KE5HHR,=KE5JHS,=KE5JTB,=KE5NLG,=KE5QDI,=KE5QDJ,=KE5QDK,=KE5VPO,=KE5ZRK,=KE5ZUM, + =KE6DLM,=KE6DUJ,=KE6DXH,=KE6IPM,=KE6SYD,=KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL,=KE7EOP,=KE7EPZ,=KE7FNC, + =KE7FXM,=KE7GOE,=KE7HMJ,=KE7KYU,=KE7TRX,=KE8RO,=KF4JET,=KF4PLR,=KF4TBD,=KF4YFD,=KF5CVM,=KF5FJQ, + =KF5HFB,=KF5HJC,=KF5NDT,=KF5NHR,=KF5YYK,=KF6AWG,=KF6AXS,=KF6BMF,=KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO, + =KF6ILC,=KF6IOT,=KF6LGK,=KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7GKY,=KF7LEX, + =KF7LUA,=KF7PCJ,=KF7PFT,=KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P,=KG4TJS, + =KG4WNZ,=KG5EQN,=KG5GDF,=KG5GTD,=KG5JQC,=KG5MIB,=KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL,=KG7CUR,=KG7DVI, + =KG7GJL,=KG7JVJ,=KG7OQC,=KG7SEQ,=KG7TGE,=KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA,=KI4COG,=KI4ERC, + =KI4GAG,=KI4GCF,=KI4GDI,=KI4NGY,=KI4NVI,=KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW,=KI6YXZ,=KI7COR, + =KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ,=KJ4PSV,=KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6KRG,=KJ6ZSX,=KJ7IR,=KK4AMV, + =KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG,=KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I,=KK7IV,=KK7STL,=KL7D/M, + =KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX,=KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KN8IVE,=KR4WV,=KV3X,=KW1W,=KY7J, + =KZ6HJC,=N0GDT,=N0GDU,=N0GLI,=N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN,=N0SUB,=N0WXJ,=N0XKY,=N0XS, + =N0ZKV,=N1HEN,=N1HUT,=N1KDQ,=N1KTI,=N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH,=N2SHO,=N2TJY,=N2YZW,=N3QEH, + =N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV,=N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV,=N6CZU,=N6JM,=N7BUO,=N7DBN, + =N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX,=N7MGT,=N7MTG,=N7PHB,=N7QAN,=N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY, + =N7YQS,=N7ZYS,=N8DDY,=N8EX,=N8JKB,=N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD,=NA7WM,=NC4OI,=NE7EK,=NH2GZ, + =NH7UO,=NJ7H,=NM0H,=NN4NN,=NP4FU,=NW4G,=NW7F,=W0EZM,=W0FJN,=W0RWS,=W0UZJ,=W1LYD,=W1RSC,=W1ZKA, + =W2DLS,=W2KRZ,=W3JPN,=W4AUL,=W4BMR,=W4LS,=W4RSB,=W5JKT,=W6DDP,=W6GTE,=W6ROW,=W7APM,=W7DDG,=W7EIK, + =W7JMR,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT,=W8MDD,=W8PVZ,=W8TCX,=W9ITU,=W9JMC,=WA0JS,=WA1FVJ, + =WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX,=WA7YXF,=WB0CMZ,=WB1GZL,=WB1ILS,=WB6COP,=WB7TYK, + =WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK,=WJ8M,=WP4IYI,=WT5T,=WX1NCC; Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: KP1,NP1,WP1; US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: @@ -1714,18 +1719,18 @@ Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: =K5YJR,=K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA3ZGQ,=KA7URH,=KA9UTY,=KB0AQB,=KB0TEP,=KB1IJU, =KB1KDP,=KB1RUQ,=KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX,=KB2NMT,=KB2NYN, =KB2OIF,=KB2OMN,=KB2OPM,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK,=KB3BTN,=KB3LUV,=KB3SBO, - =KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO,=KC1JLY,=KC2BZZ, - =KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC2VCR,=KC3GEO,=KC5DKT,=KC8BFN, - =KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KE0AYJ,=KE0GFK,=KE0SH,=KE1MA,=KE3WW, - =KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO,=KF4ZDB,=KF6OGJ,=KG4GYO,=KG4IRC,=KG4IVO, - =KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB,=KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ,=KK4DCX, - =KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW,=KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD,=KN4IDV, - =KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT,=KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ,=KN4REC, - =KN4SKZ,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT,=KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT,=KP4ES/LH, - =KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH,=N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD,=N1SZM,=N1VCW, - =N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM,=N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER,=N4UK,=N6NVD, - =N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR,=W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF,=WB7ADC,=WB7VVV, - =WD4LOL,=WP4L/TP,=WR8Z; + =KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO,=KC1JLY,=KC1KZI, + =KC2BZZ,=KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC2VCR,=KC3GEO,=KC5DKT, + =KC8BFN,=KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KE0AYJ,=KE0GFK,=KE0SH,=KE1MA, + =KE3WW,=KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO,=KF4ZDB,=KF6OGJ,=KG4GYO,=KG4IRC, + =KG4IVO,=KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB,=KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ, + =KK4DCX,=KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW,=KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD, + =KN4IDV,=KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT,=KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ, + =KN4REC,=KN4SKZ,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT,=KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT, + =KP4ES/LH,=KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH,=N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD, + =N1SZM,=N1VCW,=N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM,=N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER, + =N4UK,=N6NVD,=N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR,=W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF, + =WB7ADC,=WB7VVV,=WD4LOL,=WP4L/TP,=WR8Z; Desecheo Island: 08: 11: NA: 18.08: 67.88: 4.0: KP5: KP5,NP5,WP5; Norway: 14: 18: EU: 61.00: -9.00: -1.0: LA: @@ -1799,7 +1804,7 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LW2DET/D,=LW2DJM/D,=LW2DNC/D,=LW2DOD/D,=LW2DOM/D,=LW2DSM/D,=LW2DX/E,=LW2DYA/D,=LW2ECK/D, =LW2ECM/D,=LW2EFS/D,=LW2EHD/D,=LW2ENB/D,=LW2EQS/D,=LW2EUA/D,=LW3DAB/D,=LW3DBM/D,=LW3DC/D, =LW3DED/D,=LW3DER/D,=LW3DFP/D,=LW3DG/D,=LW3DGC/D,=LW3DJC/D,=LW3DKC/D,=LW3DKC/E,=LW3DKO/D, - =LW3DKO/E,=LW3DN/D,=LW3DRW/D,=LW3DSR/D,=LW3DTD/D,=LW3EIH/D,=LW3EMP/D,=LW4DAF/D,=LW4DBE/D, + =LW3DKO/E,=LW3DN/D,=LW3DRW/D,=LW3DSR/D,=LW3DTD/D,=LW3EIH/D,=LW3EK/D,=LW3EMP/D,=LW4DAF/D,=LW4DBE/D, =LW4DBM/D,=LW4DCV/D,=LW4DKI/D,=LW4DOR/D,=LW4DRH/D,=LW4DRH/E,=LW4DRV/D,=LW4DTM/D,=LW4DTR/D, =LW4DWV/D,=LW4DXH/D,=LW4ECV/D,=LW4EIN/D,=LW4EM/D,=LW4EM/E,=LW4EM/LH,=LW4ERO/D,=LW4ESY/D,=LW4ETG/D, =LW4EZT/D,=LW4HCL/D,=LW5DAD/D,=LW5DD/D,=LW5DFR/D,=LW5DHG/D,=LW5DIE/D,=LW5DLY/D,=LW5DNN/D, @@ -1841,8 +1846,8 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LU7JMS/J,=LU7JR/J,=LU7JRM/J,=LU8JOP/J,=LU9JLV/J,=LU9JMG/J,=LU9JPR/J,=LU9YB/J,=LW2DRJ/J,=LW3EMP/J, =LU1KWC/K,=LU2KLC/K,=LU4KC/K,=LU5OM/K,=LU6KAQ/K,=LU7KHB/K,=LU7KT/K,=LU8KE/K,=LW1EVO/K,=LW3DFP/K, =LU1AAS/L,=LU1DZ/L,=LU1LAA/L,=LU1LT/L,=LU1LTL/L,=LU2LDB/L,=LU3AYE/L,=LU4AGC/L,=LU4EFC/L,=LU4LAD/L, - =LU4LBU/L,=LU4LMA/L,=LU5FZ/L,=LU5ILA/L,=LU5LAE/L,=LU5LBV/L,=LU6JRA/L,=LU8IEZ/L,=LU8LFV/L,=LU9JX/L, - =LU9LEW/L,=LU9LZY/L,=LU9LZZ/L,=LU9XPA/L,=LW3EMP/L,=LW8DTO/L, + =LU4LBU/L,=LU4LMA/L,=LU5FZ/L,=LU5ILA/L,=LU5LAE/L,=LU5LBV/L,=LU6JRA/L,=LU8IEZ/L,=LU8LFV/L, + =LU9GOY/L,=LU9JX/L,=LU9LEW/L,=LU9LZY/L,=LU9LZZ/L,=LU9XPA/L,=LW3EMP/L,=LW8DTO/L, =LU3PCJ/MA,=LW4DBE/MA, =LU2DSV/N,=LU3AAL/N,=LU5BE/N,=LU5FZ/N,=LU8EFF/N,=LW5DR/N, =LU1HZY/O,=LU1XS/O,=LU2HON/O,=LU3HL/O,=LU4AA/O,=LU5BOJ/O,=LU5OD/O,=LU6FEC/O,=LU6HWT/O,=LU8OAH/O, @@ -2246,19 +2251,18 @@ Cote d'Ivoire: 35: 46: AF: 7.58: 5.80: 0.0: TU: Benin: 35: 46: AF: 9.87: -2.25: -1.0: TY: TY; Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: - TZ,=VERSION; + TZ; European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: R,U,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R7AB/P,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF, =R9AV/6,=R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, - =RA2FDX/3,=RA3CQ/9/M(17)[20],=RA80SP,=RA9JR/3,=RA9JX/3,=RA9P/4,=RA9RT/3,=RA9UUY/6,=RA9YA/6, - =RC80SP,=RG0F/5,=RG50P(17),=RG50P/9(17)[30],=RJ80SP,=RK80X(17)[19],=RK8O/4,=RL9AA/6,=RM80SP, - =RM8A/4/M,=RM94AE,=RN9M/4,=RN9OI/3,=RO80RO,=RP61XX(17)[19],=RP62X(17)[19],=RP63X(17)[19], - =RP63XO(17)[19],=RP64X(17)[19],=RP65FPP(17)[30],=RP8X(17)[30],=RQ80SP,=RU0ZW/6,=RU2FB/3, - =RU2FB/3/P,=RU4SS/9(17)[30],=RU4WA/9(17)[30],=RV9LM/3,=RV9XX/3,=RW0IM/1,=RW0QE/6,=RW2F/6,=RW9FF/3, - =RW9W/3,=RW9W/4,=RX2FS/3,=RX9TC/1,=RX9UL/1,=RZ9AWN/6,=UA0AK/3,=UA0FQ/6,=UA0KBG/3,=UA0KBG/6, - =UA0KCX/3/P,=UA0KT/4,=UA0QNE/3,=UA0QNU/3,=UA0QQJ/3,=UA0UV/6,=UA0XAK/3,=UA0XAK/6,=UA0ZL/6, - =UA9CCO/6,=UA9CTT/3,=UA9CTT/6,=UA9FFS/1/MM,=UE23DKA,=UE6MAC/9(17),=UE95AE,=UE95E,=UE95ME,=UE96ME, - =UE99PS, + =RA3CQ/9/M(17)[20],=RA80SP,=RA9JR/3,=RA9JX/3,=RA9P/4,=RA9RT/3,=RA9UUY/6,=RA9YA/6,=RC80SP,=RG0F/5, + =RG50P(17),=RG50P/9(17)[30],=RJ80SP,=RK80X(17)[19],=RK8O/4,=RL9AA/6,=RM80SP,=RM8A/4/M,=RM94AE, + =RN9M/4,=RN9OI/3,=RO80RO,=RP61XX(17)[19],=RP62X(17)[19],=RP63X(17)[19],=RP63XO(17)[19], + =RP64X(17)[19],=RP65FPP(17)[30],=RP8X(17)[30],=RQ80SP,=RU0ZW/6,=RU2FB/3,=RU2FB/3/P, + =RU4SS/9(17)[30],=RU4WA/9(17)[30],=RV9LM/3,=RV9XX/3,=RW0IM/1,=RW0QE/6,=RW2F/6,=RW9FF/3,=RW9W/3, + =RW9W/4,=RX2FS/3,=RX9TC/1,=RX9UL/1,=RZ9AWN/6,=UA0AK/3,=UA0FQ/6,=UA0KBG/3,=UA0KBG/6,=UA0KCX/3/P, + =UA0KT/4,=UA0QNE/3,=UA0QNU/3,=UA0QQJ/3,=UA0UV/6,=UA0XAK/3,=UA0XAK/6,=UA0ZL/6,=UA9CCO/6,=UA9CTT/3, + =UA9CTT/6,=UA9FFS/1/MM,=UE23DKA,=UE6MAC/9(17),=UE95AE,=UE95E,=UE95ME,=UE96ME,=UE99PS, =R900BL,=R9J/1,=RA2FN/1,=RA9KU/1,=RA9KU/1/M,=RA9MC/1,=RA9SGI/1,=RK9XWV/1,=RL1O,=RM0L/1,=RM80DZ, =RN85AM,=RN85KN,=RT9T/1,=RU2FB/1,=RU9YT/1,=RU9YT/1/P,=RV1CC/M,=RW1AI/ANT,=RW8W/1,=RW9QA/1, =RX3AMI/1/LH,=UA1ADQ/ANT,=UA1BJ/ANT,=UA1JJ/ANT,=UA2FFX/1,=UA9B/1,=UA9KG/1,=UA9KGH/1,=UA9KK/1, @@ -2291,16 +2295,16 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: UA1Z[19],UB1Z[19],UC1Z[19],UD1Z[19],UE1Z[19],UF1Z[19],UG1Z[19],UH1Z[19],UI1Z[19],=R25RRA[19], =RA9CFH/1[19],=RA9CFH/1/P[19],=RK21Z[19],=RK3DZJ/1/LH[19],=RM9WN/1[19],=RP72MU[19],=RP73MU[19], =RP73ZP[19],=RU1ZC/ANT[19],=RW1ZQ/LH[19],=RY83HN[19],=UB1ZBD/N[19], - =R01DTV/3,=R85PAR,=R870B,=R870C,=R870K,=R870M,=R870O,=R9FM/3,=RA2AT,=RA9CO/3,=RA9USU/3,=RC85MP, - =RL3AB/FF,=RT2F/3/M,=RT9K/3,=RW0LF/3,=RX9UL/3,=RX9WN/3,=RZ9UA/3,=UA0KCX/3,=UA3AV/ANT,=UA8AA/3, - =UA8AA/5,=UA9KHD/3,=UA9MDU/3,=UA9MRX/3,=UA9QCP/3,=UA9UAX/3,=UE24SU, + =R01DTV/3,=R85PAR,=R870B,=R870C,=R870K,=R870M,=R870O,=R9FM/3,=RA2AT,=RA2FDX/3,=RA9CO/3,=RA9USU/3, + =RC85MP,=RL3AB/FF,=RT2F/3/M,=RT9K/3,=RW0LF/3,=RX9UL/3,=RX9WN/3,=RZ9UA/3,=UA0KCX/3,=UA3AV/ANT, + =UA8AA/3,=UA8AA/5,=UA9KHD/3,=UA9MDU/3,=UA9MRX/3,=UA9QCP/3,=UA9UAX/3,=UB5O/M,=UE24SU, =R85QMR,=R85WDW,=R8B,=R8FF/3,=R90DNF,=R99FSB,=RA0BY/3,=RA80KEDR,=RA9KV/3,=RA9SB/3,=RA9XY/3, =RK3DSW/ANT,=RK3DWA/3/N,=RN9MD/3,=RT80KEDR,=RU0LM/3,=RU2FA/3,=RU3HD/ANT,=RV0AO/3,=RV9LM/3/P, =RW0IM/3,=RW3DU/N,=RW9UEW/3,=RX9SN/3,=RZ9SZ/3,=RZ9W/3,=UA0JAD/3,=UA0KCL/3,=UA0ZAZ/3,=UA9AJ/3/M, =UA9DD/3,=UA9HSI/3,=UA9ONJ/3,=UA9XGD/3,=UA9XMC/3,=UE23DSA,=UE25FO,=UE95GA,=UE96WS, =R80ORL,=UA0QGM/3,=UE80O,=UE80OL, =R0CAF/3,=R3GO/FF,=RM0L/3,=RN3GL/FF,=RN3GW/FF,=RT5G/P/FF,=RW0IW/3,=UA3GM/ANT,=UE90FL, - =RA9KT/3,=RZ9SZ/3/M,=UA0FHC/3,=UF2F/3/M, + =R0WX/P,=RA9KT/3,=RZ9SZ/3/M,=UA0FHC/3,=UF2F/3/M, =R0IA/3,=R863LC,=R863LK,=R863LX,=R875R,=R9XZ/3,=RG80KEDR,=RL80KEDR,=RN0CF/3,=RU9QRP/3,=RZ90W/3, =UA9JFM/3,=UA9XZ/3,=UE80G,=UE80V,=UE80YG, =RK3MXT/FF,=RV9AZ/3,=UA0AD/3, @@ -2376,7 +2380,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R8FF/6,=R9DA/6,=RU9CK/6/P,=RV9CX/6/P,=UA9CES/6,=UA9FGR/6,=UA9WQK/6, =RU9CK/7/M,=RU9CK/7/P,=RV9CX/7/P,=UA9JFN/6/M, =RT9K/7/P,=RZ7G/6/FF, - =R01DTV/6,=RV9AB/6,=UB5O/M, + =R01DTV/6,=RV9AB/6, =R9MJ/6,=R9OM/5/P,=R9XT/6,=RA9KD/6,=RN9N/6,=RT9T/6,=RT9T/6/M,=RU2FB/5,=RU9WW/5/M,=RW9AW/5, =UA0LLM/5,=UA8WAA/5,=UA9CDC/6,=UA9UAX/5,=UE2KR,=UE98PW, =R8AEU/6,=R9MJ/6/M,=RN9N/6/M,=UB8ADI/5,=UB8ADI/6,=UE2SE, @@ -2402,10 +2406,10 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R2014WOG(17)[30],=R20PRM(17)[30],=R2AG/9(17)[30],=R34CZF(17)[30],=R6DAB/9(17)[30], =R8CZ/4(17)[30],=R8CZ/4/M(17)[30],=R8CZ/M(17)[30],=R95FR(17)[30],=R9CZ/4(17)[30], =R9CZ/4/M(17)[30],=R9KC/4/M(17)[30],=R9KC/8/M(17)[30],=RA27FM(17)[30],=RA9XAI/4(17)[30], - =RC20FM(17)[30],=RD4M/9(17)[30],=RG50P/M(17)[30],=RP70PK(17)[30],=RP9FKU(17)[30],=RP9FTK(17)[30], - =RU27FQ(17)[30],=RU27FW(17)[30],=RU4W/9(17)[30],=RV22PM(17)[30],=RX9TX/9(17)[30],=RZ16FM(17)[30], - =RZ9WM/9(17)[30],=UA1ZQO/9(17)[30],=UA4NF/4/M(17)[30],=UA4WA/9(17)[30],=UA9CGL/4/M(17)[30], - =UA9CUA/4/M(17)[30],=UA9UAX/4(17)[30],=UE16SA(17)[30],=UE55PM(17)[30], + =RC20FM(17)[30],=RD4M/9(17)[30],=RG50P/M(17)[30],=RN9N/4(17)[30],=RP70PK(17)[30],=RP9FKU(17)[30], + =RP9FTK(17)[30],=RU27FQ(17)[30],=RU27FW(17)[30],=RU4W/9(17)[30],=RV22PM(17)[30],=RX9TX/9(17)[30], + =RZ16FM(17)[30],=RZ9WM/9(17)[30],=UA1ZQO/9(17)[30],=UA4NF/4/M(17)[30],=UA4WA/9(17)[30], + =UA9CGL/4/M(17)[30],=UA9CUA/4/M(17)[30],=UA9UAX/4(17)[30],=UE16SA(17)[30],=UE55PM(17)[30], =RW3TN/9(17)[30],=UE10SK(17)[30], R8X(17)[20],R9X(17)[20],RA8X(17)[20],RA9X(17)[20],RC8X(17)[20],RC9X(17)[20],RD8X(17)[20], RD9X(17)[20],RE8X(17)[20],RE9X(17)[20],RF8X(17)[20],RF9X(17)[20],RG8X(17)[20],RG9X(17)[20], @@ -2455,7 +2459,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RA4AAJ/9(18),=RD17CW(19),=RD1AL/0(40)[75],=RD3ARX/0/P(19),=RI18POL(40)[75],=RJ17WG,=RL19WF, =RM17NY,=RM19WF(18),=RN17CW,=RO19WF(19),=RQ17CW(18),=RQ17WG,=RQ4D/9(18),=RU17NY(18),=RV3PZ/9, =RW1AI/0(19),=RW55YG,=RX17WG(19),=RX55YG(18),=RX80SP(18),=RY1AAB/0/M(19),=RY80SP(19),=RZ17NY(19), - =RZ6A/9,=RZ9YI/9,=UA0ZDA/MM(29),=UA3DND/8,=UA3TT/8,=UE18M,=UE18U(18),=UE18Z(19), + =RZ6A/9,=RZ9YI/9,=UA0ZDA/MM(29),=UA3DND/8,=UA3TT/8,=UD6AOP/0(19),=UE18M,=UE18U(18),=UE18Z(19), =R100RG,=R120RG,=R2014Y,=R2015TL,=R20UFO,=R22SKE,=R280A,=R280B,=R3HD/9,=R3RRC/8,=R55TV,=R6RA/9, =R70PW,=R70PW/P,=R9SRR,=RA1AIP/9/P,=RA1AR/9,=RA1QR/9,=RA3WJ/9,=RA3XBN/9,=RA3ZM/8,=RA4FSC/9, =RA4HGN/9,=RA9SC/9,=RA9WJV/8/P,=RC20AB,=RC20AC,=RD3BN/9,=RD4CAQ/9,=RG110RAEM,=RJ17CW,=RK9SZZ/9, @@ -2654,8 +2658,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RA/IK5MIC/M(18)[31],=RA0CCJ/9(18)[31],=RA50VT(18)[31],=RK1B/9(18)[31],=RP68BP(18)[31], =RP68TZ(18)[31],=RP70AF(18)[31],=RP70BP(18)[31],=RP70GA(18)[31],=RP71BP(18)[31],=RP72BP(18)[31], =RP73BP(18)[31],=RP9Y(18)[31],=RP9YAF(18)[31],=RP9YTZ(18)[31],=RT73GM(18)[31],=RW22WG(18)[31], - =RX6AY/9(18)[31],=UA0LLW/9(18)[31],=UA0ZDY/9(18)[31],=UA9MA/M(18)[31],=UA9UAX/9/P(18)[31], - =UE0ZOO/9(18)[31],=UE44R/9(18)[31],=UE80AL(18)[31], + =RX6AY/9(18)[31],=UA0LLW/9(18)[31],=UA0ZDY/9(18)[31],=UA9UAX/9/P(18)[31],=UE0ZOO/9(18)[31], + =UE44R/9(18)[31],=UE80AL(18)[31], R8Z(18)[31],R9Z(18)[31],RA8Z(18)[31],RA9Z(18)[31],RC8Z(18)[31],RC9Z(18)[31],RD8Z(18)[31], RD9Z(18)[31],RE8Z(18)[31],RE9Z(18)[31],RF8Z(18)[31],RF9Z(18)[31],RG8Z(18)[31],RG9Z(18)[31], RJ8Z(18)[31],RJ9Z(18)[31],RK8Z(18)[31],RK9Z(18)[31],RL8Z(18)[31],RL9Z(18)[31],RM8Z(18)[31], @@ -2665,7 +2669,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: U8Z(18)[31],U9Z(18)[31],UA8Z(18)[31],UA9Z(18)[31],UB8Z(18)[31],UB9Z(18)[31],UC8Z(18)[31], UC9Z(18)[31],UD8Z(18)[31],UD9Z(18)[31],UE8Z(18)[31],UE9Z(18)[31],UF8Z(18)[31],UF9Z(18)[31], UG8Z(18)[31],UG9Z(18)[31],UH8Z(18)[31],UH9Z(18)[31],UI8Z(18)[31],UI9Z(18)[31], - =RA/IK5MIC/P(18)[31],=RC9YA/9/M(18)[31],=RW9MD/9/P(18)[31],=UA0KBG/9/P(18)[31],=UA9MAC/9(18)[31], + =RA/IK5MIC/P(18)[31],=RC9YA/9/M(18)[31],=RW9MD/9/P(18)[31],=UA0KBG/9/P(18)[31],=UA9MA/M(18)[31], + =UA9MAC/9(18)[31], R0A(18)[32],R0B(18)[32],R0H(18)[32],RA0A(18)[32],RA0B(18)[32],RA0H(18)[32],RC0A(18)[32], RC0B(18)[32],RC0H(18)[32],RD0A(18)[32],RD0B(18)[32],RD0H(18)[32],RE0A(18)[32],RE0B(18)[32], RE0H(18)[32],RF0A(18)[32],RF0B(18)[32],RF0H(18)[32],RG0A(18)[32],RG0B(18)[32],RG0H(18)[32], @@ -2723,11 +2728,12 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: RZ0F(19)[34],U0E(19)[34],U0F(19)[34],UA0E(19)[34],UA0F(19)[34],UB0E(19)[34],UB0F(19)[34], UC0E(19)[34],UC0F(19)[34],UD0E(19)[34],UD0F(19)[34],UE0E(19)[34],UE0F(19)[34],UF0E(19)[34], UF0F(19)[34],UG0E(19)[34],UG0F(19)[34],UH0E(19)[34],UH0F(19)[34],UI0E(19)[34],UI0F(19)[34], - =R10RLHA/0(19)[34],=R7AA/0(19)[34],=R7LP/0(19)[34],=R7MR/0(19)[34],=RA/KE5JA(19)[34], - =RA/OG2K(19)[34],=RA0SS/0(19)[34],=RA1ALA/0(19)[34],=RA4HKM/0(19)[34],=RA4HKM/0/P(19)[34], - =RA6ABC/0(19)[34],=RM0F(19)[34],=RN0F(19)[34],=RN1CR/0(19)[34],=RS0F(19)[34],=RT6A/0(19)[34], - =RV1CC/0(19)[34],=RZ3DW/0(19)[34],=RZ4HD/0(19)[34],=RZ55YG(19)[34],=RZ9ODD/0(19)[34], - =RZ9OWE/0(19)[34],=UA1ANA/0(19)[34],=UA3EDP/0(19)[34],=UB40FSU(19)[34],=UE1AAA/0(19)[34], + =R10RLHA/0(19)[34],=R26RRC(19)[34],=R7AA/0(19)[34],=R7LP/0(19)[34],=R7MR/0(19)[34], + =RA/KE5JA(19)[34],=RA/OG2K(19)[34],=RA0SS/0(19)[34],=RA1ALA/0(19)[34],=RA4HKM/0(19)[34], + =RA4HKM/0/P(19)[34],=RA6ABC/0(19)[34],=RM0F(19)[34],=RN0F(19)[34],=RN1CR/0(19)[34],=RS0F(19)[34], + =RT6A/0(19)[34],=RV1CC/0(19)[34],=RZ3DW/0(19)[34],=RZ4HD/0(19)[34],=RZ55YG(19)[34], + =RZ9ODD/0(19)[34],=RZ9OWE/0(19)[34],=UA1ANA/0(19)[34],=UA3EDP/0(19)[34],=UB40FSU(19)[34], + =UE1AAA/0(19)[34], =RV9WP/0(18)[22],=U0H/UA0AGQ(18)[22], R0I(19)[24],RA0I(19)[24],RC0I(19)[24],RD0I(19)[24],RE0I(19)[24],RF0I(19)[24],RG0I(19)[24], RI0I(19)[24],RJ0I(19)[24],RK0I(19)[24],RL0I(19)[24],RM0I(19)[24],RN0I(19)[24],RO0I(19)[24], @@ -2915,7 +2921,7 @@ Marshall Islands: 31: 65: OC: 9.08: -167.33: -12.0: V7: Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8: V8; Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: - CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190327, + CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190416, =CF7AAW/1,=CK7IG/1,=VA3QSL/1,=VA3WR/1,=VE1REC/LH,=VE1REC/M/LH,=VE3RSA/1,=VE7IG/1, CF2[4],CG2[4],CJ2[4],CK2[4],VA2[4],VB2[4],VC2[4],VE2[4],VG2[4],VX2[4],XL2[4],XM2[4],=4Y1CAO[4], =CY2ZT/2[4],=VA3ELE/2[4],=VA3MPM/2[4],=VA7AQ/P[4],=VE2/G3ZAY/P[4],=VE2/M0BLF/P[4],=VE2FK[9], From 7de974a7ee2b237a86cea140c733815ecfa0a94f Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 29 Apr 2019 19:53:59 +0100 Subject: [PATCH 235/367] Fix settings acceptance jumping from FT8 to FT4 mode --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b96240cba..7cb7ed2be 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1751,7 +1751,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog bool b = vhf && (m_mode=="JT4" or m_mode=="JT65" or m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="MSK144" or m_mode=="QRA64"); if(b) VHF_features_enabled(b); - if(m_mode=="FT4") on_actionFT8_triggered(); + if(m_mode=="FT4") on_actionFT4_triggered(); if(m_mode=="FT8") on_actionFT8_triggered(); if(m_mode=="JT4") on_actionJT4_triggered(); if(m_mode=="JT9") on_actionJT9_triggered(); From a8a1d8d0a7701610061e2e3e98c543e198aae981 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 30 Apr 2019 04:47:30 +0100 Subject: [PATCH 236/367] Add background colour to Log QSO buttons as stronger visual cue --- widgets/logqso.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index eae82aacc..75ded8bca 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -41,6 +41,8 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings ok_->setAutoDefault (false); ok_->setFocusPolicy (Qt::ClickFocus); + ok_->setStyleSheet ("background-color: green"); + cancel_->setStyleSheet ("background-color: red"); cancel_->setAutoDefault (false); ui->button_layout->addStretch (); ui->button_layout->addWidget (ok_); From 00d15d019e3188bb7e6527fbae92ff66cceddcd4 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 30 Apr 2019 07:48:47 -0400 Subject: [PATCH 237/367] Tweak label on Advanced tab to include FT4. --- Configuration.ui | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Configuration.ui b/Configuration.ui index 36a96d66f..9701fb633 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2469,7 +2469,7 @@ Right click for insert and delete options. - Special operating activity: Generation of FT8 and MSK144 messages + Special operating activity: Generation of FT4, FT8, and MSK144 messages true @@ -3078,13 +3078,13 @@ Right click for insert and delete options. - - - - - + + + + + From 1347f523decb643e0104f7ad6a8f60fa5e7e0488 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 30 Apr 2019 09:17:34 -0400 Subject: [PATCH 238/367] Allow RRR message in Tx4, in FT4 mode, if not using contest-style messages. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7cb7ed2be..e27f6b881 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4219,7 +4219,7 @@ void MainWindow::on_txrb4_doubleClicked () auto const& my_callsign = m_config.my_callsign (); auto is_compound = my_callsign != m_baseCall; m_send_RR73 = !((is_compound && !shortList (my_callsign)) || m_send_RR73); - if(m_mode=="FT4") m_send_RR73=true; + if(m_mode=="FT4" and (m_config.special_op_id()==SpecOp::RTTY)) m_send_RR73=true; genStdMsgs (m_rpt); } From b2d6238b63975f47f0d77907d0d05e16a171d113 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 30 Apr 2019 09:38:20 -0400 Subject: [PATCH 239/367] Fix a bug that caused FT4 to do WSPR band-hopping. --- widgets/mainwindow.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index e27f6b881..28823dab8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4108,8 +4108,7 @@ void MainWindow::stopTx2() on_stopTxButton_clicked (); m_nTx73 = 0; } - if(((m_mode.startsWith("WSPR") and m_ntr==-1) or m_mode=="FT4") and - !m_tuneup) { + if((m_mode.startsWith("WSPR") and m_ntr==-1) and !m_tuneup) { m_wideGraph->setWSPRtransmitted(); WSPR_scheduling (); m_ntr=0; From 0a12b34ec5554b62370c1fdfdc6c0e7b10390cd2 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 30 Apr 2019 08:54:42 -0500 Subject: [PATCH 240/367] Avoid a potential out-of-bounds error. --- lib/ft4/ft4_downsample.f90 | 2 +- lib/ft4/getcandidates4.f90 | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index 819b10fbc..d3760a506 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -38,7 +38,7 @@ subroutine ft4_downsample(dd,newdata,f0,c) endif i0=nint(f0/df) c1=0. - c1(0)=cx(i0) + if(i0.ge.0 .and. i0.le.NMAX/2) c1(0)=cx(i0) do i=1,NFFT2/2 if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 5d42ca740..badbbcfb5 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -69,6 +69,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & del=0. if(den.ne.0.0) del=0.5*(savsm(i-1)-savsm(i+1))/den fpeak=(i+del)*df+f_offset + if(fpeak.lt.0.0 .or. fpeak.gt.4910.0) cycle speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del ncand=ncand+1 if(ncand.gt.maxcand) then From b29a6d14eae9de8a3f8a8996cf44b2dee3b98611 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 30 Apr 2019 15:13:26 +0100 Subject: [PATCH 241/367] Workaround for a crash on macOS when compiling with gfortran 8.3 --- lib/azdist.f90 | 11 +++-------- widgets/mainwindow.cpp | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/azdist.f90 b/lib/azdist.f90 index 2fd26c3d7..41a8fc5bc 100644 --- a/lib/azdist.f90 +++ b/lib/azdist.f90 @@ -1,7 +1,7 @@ -subroutine azdist(grid1,grid2,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) +subroutine azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) - character*(*) grid1,grid2 - character*6 MyGrid,HisGrid,mygrid0,hisgrid0 + character(len=*) :: MyGrid,HisGrid + character*6 mygrid0,hisgrid0 real*8 utch,utch0 logical HotABetter,IamEast real eltab(22),daztab(22) @@ -12,11 +12,6 @@ subroutine azdist(grid1,grid2,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) data mygrid0/" "/,hisgrid0/" "/,utch0/-999.d0/ save - MyGrid=grid1//' ' - HisGrid=grid2//' ' - if(ichar(MyGrid(5:5)).eq.0) MyGrid(5:6)=' ' - if(ichar(HisGrid(5:5)).eq.0) HisGrid(5:6)=' ' - if(MyGrid.eq.HisGrid) then naz=0 nel=0 diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7cb7ed2be..98768c4d2 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -7550,8 +7550,8 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout if(grid!="") { double utch=0.0; int nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter; - azdist_(const_cast (m_config.my_grid ().toLatin1().constData()), - const_cast (grid.toLatin1().constData()),&utch, + azdist_(const_cast ((m_config.my_grid () + " ").left (6).toLatin1 ().constData ()), + const_cast ((grid + " ").left (6).toLatin1 ().constData ()),&utch, &nAz,&nEl,&nDmiles,&nDkm,&nHotAz,&nHotABetter,6,6); QString t1; if(m_config.miles()) { From b9e194b74f68cca2d9061d3d4a4d19409c45204e Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 30 Apr 2019 15:33:01 +0100 Subject: [PATCH 242/367] Revert to colouring just the OK Log QSO button to help with colour-blindness accessibility --- widgets/logqso.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index 75ded8bca..b4b936d75 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -42,7 +42,6 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings ok_->setAutoDefault (false); ok_->setFocusPolicy (Qt::ClickFocus); ok_->setStyleSheet ("background-color: green"); - cancel_->setStyleSheet ("background-color: red"); cancel_->setAutoDefault (false); ui->button_layout->addStretch (); ui->button_layout->addWidget (ok_); From c7a388f740825eeca316d53eac1185425de0e63d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 30 Apr 2019 16:02:26 -0400 Subject: [PATCH 243/367] Send FT4 audio frequency to PSK Reporter. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 28823dab8..c4e71aea8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3341,7 +3341,7 @@ void MainWindow::pskPost (DecodedText const& decodedtext) QString grid; decodedtext.deCallAndGrid(/*out*/deCall,grid); int audioFrequency = decodedtext.frequencyOffset(); - if(m_mode=="FT8" or m_mode=="MSK144") { + if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT4") { audioFrequency=decodedtext.string().mid(16,4).toInt(); } int snr = decodedtext.snr(); From 7f523d37f982715bb94e10cbec5fec80b4866db5 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 30 Apr 2019 23:05:54 +0100 Subject: [PATCH 244/367] Bump RC number --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 59af33460..f07339063 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 5) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 6) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From b5f0cc7ea7830790c5226a82f128b783dec44a26 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 30 Apr 2019 20:02:42 -0500 Subject: [PATCH 245/367] Add a third decoding pass. --- lib/ft4_decode.f90 | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index b217dbb23..687a4ecc7 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -215,7 +215,7 @@ contains max_iterations=40 syncmin=1.2 dosubtract=.true. - nsp=2 + nsp=3 if(ndepth.lt.3) then nsp=1 dosubtract=.false. @@ -223,6 +223,14 @@ contains if(ndepth.eq.1) syncmin=2.0 do isp = 1,nsp + if(isp.eq.2) then + if(ndecodes.eq.0) exit + nd1=ndecodes + elseif(isp.eq.3) then + nd2=ndecodes-nd1 + if(nd2.eq.0) exit + endif + candidate=0.0 ncand=0 call timer('getcand4',0) @@ -495,6 +503,7 @@ contains endif nsnr=nint(max(-20.0,xsnr)) xdt=ibest/750.0 - 0.5 +!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit endif From fd3fb106d4bec8ccf6087224316eb2e305314504 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 1 May 2019 12:27:55 +0100 Subject: [PATCH 246/367] User Guide updates for 64-bit Windows --- doc/common/links.adoc | 1 + doc/user_guide/en/install-windows.adoc | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/common/links.adoc b/doc/common/links.adoc index 85fdb1064..e886f551f 100644 --- a/doc/common/links.adoc +++ b/doc/common/links.adoc @@ -92,6 +92,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes. :ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice] :win_openssl_packages: https://slproweb.com/products/Win32OpenSSL.html[Windows OpenSSL Packages] :win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2r.exe[Win32 OpenSSL Lite Package] +:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_0_2r.exe[Win64 OpenSSL Lite Package] :writelog: https://writelog.com/[Writelog] :wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group] :wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X] diff --git a/doc/user_guide/en/install-windows.adoc b/doc/user_guide/en/install-windows.adoc index e3f75858c..5b8e06834 100644 --- a/doc/user_guide/en/install-windows.adoc +++ b/doc/user_guide/en/install-windows.adoc @@ -29,26 +29,31 @@ TIP: Your computer may be configured so that this directory is [[OPENSSL]] -* image:LoTW_TLS_error.png[_WSJT-X_ LoTW download TLS error, role="right"] - From this version onward _WSJT-X_ requires the _OpenSSL_ libraries - to be installed. Suitable libraries may already be installed on your +* image:LoTW_TLS_error.png[_WSJT-X_ LoTW download TLS error, + role="right"] _WSJT-X_ requires the _OpenSSL_ libraries to be + installed. Suitable libraries may already be installed on your system, if they are not you will see this error shortly after startup. To fix this you need to install the _OpenSSL_ libraries. ** You can download a suitable _OpenSSL_ package for from - {win_openssl_packages}, you need the latest *Win32 v1.0.2 Lite* - version (Note it is the Win32 package even if you are using a - 64-bit Windows operating system) which at the time of writing was - {win32_openssl}. + {win_openssl_packages}, you need the latest *Windows v1.0.2 Lite* + version. For the 32-bit _WSJT-X_ build use the Win32 version of the + _OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the Win64 version + of the _OpenSSL_ libraries (Note it is OK to install both versions + on a 64-bit system) which at the time of writing were + {win32_openssl} and {win64_openssl} respectively. ** Install the package and accept the default options, including the - option to copy the _OpenSSL_ DLLs to the Windows system directory - (this is important). + + option to copy the _OpenSSL_ DLLs to the Windows system + directory. There is no obligation to donate to the _OpenSSL_ + project, un-check all the donation options if desired. + NOTE: If you still get the same network error after installing the _OpenSSL_ libraries then you also need to install the {msvcpp_redist} component. From the download page select - `vcredist_x86.exe` and run it to install. + `vcredist_x86.exe` for use with the 32-bit _WSJT-X_ build or + `vcredist_x64.exe` with the 64-bit build, then run it to + install. TIP: If you cannot install the _OpenSSL_ libraries or do not have an Internet connection on the computer used to run From 156f62d2fe55b349704c59a733e23234028d19db Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 2 May 2019 11:39:18 -0500 Subject: [PATCH 247/367] 1. Fix array bounds mismatch in subroutine call that was the likely cause of Fortran crashes, and 2. open up DT search range to +/- 0.77s --- lib/ft4_decode.f90 | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 687a4ecc7..dc08df1b3 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -30,8 +30,7 @@ contains include 'ft4/ft4_params.f90' class(ft4_decoder), intent(inout) :: this procedure(ft4_decode_callback) :: callback - parameter (NSS=NSPS/NDOWN) - parameter (NZZ=18*3456) + parameter (NSS=NSPS/NDOWN,NDMAX=NMAX/NDOWN) character message*37,msgsent*37 character c77*77 character*37 decodes(100) @@ -42,8 +41,8 @@ contains character*6 hhmmss character*4 cqstr,cqstr0 - complex cd2(0:NZZ/NDOWN-1) !Complex waveform - complex cb(0:NZZ/NDOWN-1+NN*NSS) + complex cd2(0:NDMAX-1) !Complex waveform + complex cb(0:NDMAX-1) complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) complex csymb(NSS) @@ -52,7 +51,7 @@ contains real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) real a(5) - real dd(NZZ) + real dd(NMAX) real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) real s2(0:255) real candidate(3,100) @@ -61,7 +60,7 @@ contains integer apbits(2*ND) integer apmy_ru(28),aphis_fd(28) integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) - integer*2 iwave(NZZ) !Raw received data + integer*2 iwave(NMAX) !Raw received data integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) integer*1 hbits(2*NN) integer graymap(0:3) @@ -245,7 +244,7 @@ contains call ft4_downsample(dd,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym call timer('ft4_down',1) if(dobigfft) dobigfft=.false. - sum2=sum(cd2*conjg(cd2))/(real(NZZ)/real(NDOWN)) + sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! Sample rate is now 12000/16 = 750 samples/second do isync=1,2 @@ -253,15 +252,15 @@ contains idfmin=-12 idfmax=12 idfstp=3 - ibmin=0 - ibmax=800 + ibmin=-200 + ibmax=950 ibstp=4 else idfmin=idfbest-4 idfmax=idfbest+4 idfstp=1 ibmin=max(0,ibest-5) - ibmax=min(ibest+5,NZZ/NDOWN-1) + ibmax=min(ibest+5,NDMAX-1) ibstp=1 endif ibest=-1 @@ -287,7 +286,14 @@ contains call timer('ft4down ',1) sum2=sum(abs(cb)**2)/(real(NSS)*NN) if(sum2.gt.0.0) cb=cb/sqrt(sum2) - cd=cb(ibest:ibest+NN*NSS-1) + cd=0. + if(ibest.ge.0) then + it=min(NDMAX-1,ibest+NN*NSS-1) + np=it-ibest+1 + cd(0:np-1)=cb(ibest:it) + else + cd(-ibest:ibest+NN*NSS-1)=cb(0:NN*NSS+2*ibest-1) + endif call timer('four2a ',0) do k=1,NN i1=(k-1)*NSS From 45a1841eec2512b518c49130ba16824a29376a8d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 2 May 2019 22:01:31 +0100 Subject: [PATCH 248/367] Fix another grid variable length to suit new azdist API --- lib/decoder.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 8ca7e3161..174b75115 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -133,8 +133,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) n30fox(j)=n m=n30max-n if(len(trim(g2fox(j))).eq.4) then - call azdist(mygrid,g2fox(j),0.d0,nAz,nEl,nDmiles,nDkm, & - nHotAz,nHotABetter) + call azdist(mygrid,g2fox(j)//' ',0.d0,nAz,nEl,nDmiles, & + nDkm,nHotAz,nHotABetter) else nDkm=9999 endif From b79cf0df99725d9a7ef680a915cfac614ce92acc Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 3 May 2019 10:21:50 +0100 Subject: [PATCH 249/367] Improvements to accessibiity Where tool tips are defined in rich text, equivalent pain test accessible descriptions have been added so that screen readers do not announce HTML tags. Refactored date time delegates to use a simpler default editor via a default item editor factory for QDateTime values, the editor is a standard QDateTimeEdit with a format that includes seconds and renders assuming the time is UTC. Modified the Cabrillo log and Fox log database table models to provide QDateTime items for the edit role of date time fields, and formated date time strings including seconds and assumed as UTC for the display role. --- MetaDataRegistry.cpp | 4 + .../DateTimeAsSecsSinceEpochDelegate.hpp | 67 --------- item_delegates/item_delegates.pri | 3 +- models/CabrilloLog.cpp | 17 +++ models/FoxLog.cpp | 17 +++ widgets/CabrilloLogWindow.cpp | 2 - widgets/CabrilloLogWindow.ui | 3 + widgets/FoxLogWindow.cpp | 2 - widgets/mainwindow.ui | 128 ++++++++++++++++-- widgets/widgets.pri | 3 +- 10 files changed, 162 insertions(+), 84 deletions(-) delete mode 100644 item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp diff --git a/MetaDataRegistry.cpp b/MetaDataRegistry.cpp index bf2aab5d4..6ce9a7f92 100644 --- a/MetaDataRegistry.cpp +++ b/MetaDataRegistry.cpp @@ -15,6 +15,7 @@ #include "models/IARURegions.hpp" #include "models/DecodeHighlightingModel.hpp" #include "widgets/FrequencyLineEdit.hpp" +#include "widgets/DateTimeEdit.hpp" QItemEditorFactory * item_editor_factory () { @@ -34,6 +35,9 @@ void register_types () item_editor_factory ()->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); //auto frequency_delta_type_id = qRegisterMetaType ("FrequencyDelta"); item_editor_factory ()->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); + auto factory = new QItemEditorFactory; + factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); + QItemEditorFactory::setDefaultFactory (factory); // Frequency list model qRegisterMetaTypeStreamOperators ("Item_v2"); diff --git a/item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp b/item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp deleted file mode 100644 index a666ed323..000000000 --- a/item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef DATE_TIME_AS_SECS_SINCE_EPOCH_DELEGATE_HPP_ -#define DATE_TIME_AS_SECS_SINCE_EPOCH_DELEGATE_HPP_ - -#include -#include -#include -#include -#include -#include -#include - -class DateTimeAsSecsSinceEpochDelegate final - : public QStyledItemDelegate -{ -public: - DateTimeAsSecsSinceEpochDelegate (QObject * parent = nullptr) - : QStyledItemDelegate {parent} - { - } - - static QVariant to_secs_since_epoch (QDateTime const& date_time) - { - return date_time.toMSecsSinceEpoch () / 1000ull; - } - - static QDateTime to_date_time (QModelIndex const& index, int role = Qt::DisplayRole) - { - return to_date_time (index.model ()->data (index, role)); - } - - static QDateTime to_date_time (QVariant const& value) - { - return QDateTime::fromMSecsSinceEpoch (value.toULongLong () * 1000ull, Qt::UTC); - } - - QString displayText (QVariant const& value, QLocale const& locale) const override - { - return locale.toString (to_date_time (value), locale.dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); - } - - QWidget * createEditor (QWidget * parent, QStyleOptionViewItem const& /*option*/, QModelIndex const& /*index*/) const override - { - std::unique_ptr editor {new QDateTimeEdit {parent}}; - editor->setDisplayFormat (parent->locale ().dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); - editor->setTimeSpec (Qt::UTC); // needed because it ignores time - // spec of the QDateTime that it is - // set from - return editor.release (); - } - - void setEditorData (QWidget * editor, QModelIndex const& index) const override - { - static_cast (editor)->setDateTime (to_date_time (index, Qt::EditRole)); - } - - void setModelData (QWidget * editor, QAbstractItemModel * model, QModelIndex const& index) const override - { - model->setData (index, to_secs_since_epoch (static_cast (editor)->dateTime ())); - } - - void updateEditorGeometry (QWidget * editor, QStyleOptionViewItem const& option, QModelIndex const& /*index*/) const override - { - editor->setGeometry (option.rect); - } -}; - -#endif diff --git a/item_delegates/item_delegates.pri b/item_delegates/item_delegates.pri index 153ad4271..026e1ca57 100644 --- a/item_delegates/item_delegates.pri +++ b/item_delegates/item_delegates.pri @@ -8,5 +8,4 @@ HEADERS += \ item_delegates/ForeignKeyDelegate.hpp \ item_delegates/FrequencyItemDelegate.hpp \ item_delegates/CallsignDelegate.hpp \ - item_delegates/MaidenheadLocatorDelegate.hpp \ - item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp + item_delegates/MaidenheadLocatorDelegate.hpp diff --git a/models/CabrilloLog.cpp b/models/CabrilloLog.cpp index 1fee9b148..6849cdd61 100644 --- a/models/CabrilloLog.cpp +++ b/models/CabrilloLog.cpp @@ -21,6 +21,23 @@ class CabrilloLog::impl final public: impl (Configuration const *); + QVariant data (QModelIndex const& index, int role) const + { + auto value = QSqlTableModel::data (index, role); + if (index.column () == fieldIndex ("when") + && (Qt::DisplayRole == role || Qt::EditRole == role)) + { + auto t = QDateTime::fromMSecsSinceEpoch (value.toULongLong () * 1000ull, Qt::UTC); + if (Qt::DisplayRole == role) + { + QLocale locale; + return locale.toString (t, locale.dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); + } + value = t; + } + return value; + } + QString cabrillo_frequency_string (Radio::Frequency frequency) const; Configuration const * configuration_; diff --git a/models/FoxLog.cpp b/models/FoxLog.cpp index 773a5308f..debb08afc 100644 --- a/models/FoxLog.cpp +++ b/models/FoxLog.cpp @@ -21,6 +21,23 @@ class FoxLog::impl final public: impl (Configuration const * configuration); + QVariant data (QModelIndex const& index, int role) const + { + auto value = QSqlTableModel::data (index, role); + if (index.column () == fieldIndex ("when") + && (Qt::DisplayRole == role || Qt::EditRole == role)) + { + auto t = QDateTime::fromMSecsSinceEpoch (value.toULongLong () * 1000ull, Qt::UTC); + if (Qt::DisplayRole == role) + { + QLocale locale; + return locale.toString (t, locale.dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); + } + value = t; + } + return value; + } + Configuration const * configuration_; QSqlQuery mutable dupe_query_; QSqlQuery mutable export_query_; diff --git a/widgets/CabrilloLogWindow.cpp b/widgets/CabrilloLogWindow.cpp index 44a52cc6b..2f7b44d4a 100644 --- a/widgets/CabrilloLogWindow.cpp +++ b/widgets/CabrilloLogWindow.cpp @@ -6,7 +6,6 @@ #include "Configuration.hpp" #include "models/Bands.hpp" #include "item_delegates/ForeignKeyDelegate.hpp" -#include "item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp" #include "item_delegates/CallsignDelegate.hpp" #include "pimpl_impl.hpp" @@ -64,7 +63,6 @@ CabrilloLogWindow::CabrilloLogWindow (QSettings * settings, Configuration const m_->format_model_.setSourceModel (m_->log_model_); m_->ui_.log_table_view->setModel (&m_->format_model_); set_log_view (m_->ui_.log_table_view); - m_->ui_.log_table_view->setItemDelegateForColumn (2, new DateTimeAsSecsSinceEpochDelegate {this}); m_->ui_.log_table_view->setItemDelegateForColumn (3, new CallsignDelegate {this}); m_->ui_.log_table_view->setItemDelegateForColumn (6, new ForeignKeyDelegate {configuration->bands (), 0, this}); auto h_header = m_->ui_.log_table_view->horizontalHeader (); diff --git a/widgets/CabrilloLogWindow.ui b/widgets/CabrilloLogWindow.ui index efefe5d3c..35b4d597d 100644 --- a/widgets/CabrilloLogWindow.ui +++ b/widgets/CabrilloLogWindow.ui @@ -19,6 +19,9 @@ <html><head/><body><p>Right-click here for available actions.</p></body></html> + + Right-click here for available actions. + true diff --git a/widgets/FoxLogWindow.cpp b/widgets/FoxLogWindow.cpp index 36f20b85b..9c29a30ad 100644 --- a/widgets/FoxLogWindow.cpp +++ b/widgets/FoxLogWindow.cpp @@ -13,7 +13,6 @@ #include "models/Bands.hpp" #include "models/FoxLog.hpp" #include "item_delegates/ForeignKeyDelegate.hpp" -#include "item_delegates/DateTimeAsSecsSinceEpochDelegate.hpp" #include "item_delegates/CallsignDelegate.hpp" #include "item_delegates/MaidenheadLocatorDelegate.hpp" #include "pimpl_impl.hpp" @@ -42,7 +41,6 @@ FoxLogWindow::FoxLogWindow (QSettings * settings, Configuration const * configur m_->ui_.setupUi (this); m_->ui_.log_table_view->setModel (m_->log_->model ()); set_log_view (m_->ui_.log_table_view); - m_->ui_.log_table_view->setItemDelegateForColumn (1, new DateTimeAsSecsSinceEpochDelegate {this}); m_->ui_.log_table_view->setItemDelegateForColumn (2, new CallsignDelegate {this}); m_->ui_.log_table_view->setItemDelegateForColumn (3, new MaidenheadLocatorDelegate {this}); m_->ui_.log_table_view->setItemDelegateForColumn (6, new ForeignKeyDelegate {configuration->bands (), 0, this}); diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index 0942dc750..75be401d0 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -340,7 +340,7 @@ - <html><head/><body><p>Enter this QSO in log</p></body></html> + Enter this QSO in log Log &QSO @@ -372,7 +372,7 @@ - <html><head/><body><p>Toggle monitoring On/Off</p></body></html> + Toggle monitoring On/Off QPushButton:checked { @@ -407,6 +407,9 @@ <html><head/><body><p>Erase right window. Double-click to erase both windows.</p></body></html> + + Erase right window. Double-click to erase both windows. + &Erase @@ -420,6 +423,9 @@ <html><head/><body><p>Clear the accumulating message average.</p></body></html> + + Clear the accumulating message average. + Clear Avg @@ -436,6 +442,9 @@ <html><head/><body><p>Decode most recent Rx period at QSO Frequency</p></body></html> + + Decode most recent Rx period at QSO Frequency + QPushButton:checked { background-color: cyan; @@ -466,6 +475,9 @@ <html><head/><body><p>Toggle Auto-Tx On/Off</p></body></html> + + Toggle Auto-Tx On/Off + QPushButton:checked { background-color: red; @@ -506,6 +518,9 @@ <html><head/><body><p>Toggle a pure Tx tone On/Off</p></body></html> + + Toggle a pure Tx tone On/Off + QPushButton:checked { background-color: red; @@ -590,6 +605,15 @@ QLabel[oob="true"] { <html><head/><body><p>30dB recommended when only noise present<br/>Green when good<br/>Red when clipping may occur<br/>Yellow when too low</p></body></html> + + Rx Signal + + + 30dB recommended when only noise present +Green when good +Red when clipping may occur +Yellow when too low + QFrame::Panel @@ -706,6 +730,9 @@ QLabel[oob="true"] { 2 + + dxCallEntry + @@ -795,6 +822,9 @@ QLabel[oob="true"] { 2 + + dxGridEntry + @@ -883,6 +913,9 @@ QLabel[oob="true"] { <html><head/><body><p>If orange or red there has been a rig control failure, click to reset and read the dial frequency. S implies split mode.</p></body></html> + + If orange or red there has been a rig control failure, click to reset and read the dial frequency. S implies split mode. + QPushButton { font-family: helvetica; @@ -947,6 +980,12 @@ QPushButton[state="ok"] { <html><head/><body><p>Select operating band or enter frequency in MHz or enter kHz increment followed by k.</p></body></html> + + Frequncy entry + + + Select operating band or enter frequency in MHz or enter kHz increment followed by k. + true @@ -1038,6 +1077,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to keep Tx frequency fixed when double-clicking on decoded text.</p></body></html> + + Check to keep Tx frequency fixed when double-clicking on decoded text. + Hold Tx Freq @@ -1155,6 +1197,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Synchronizing threshold. Lower numbers accept weaker sync signals.</p></body></html> + + Synchronizing threshold. Lower numbers accept weaker sync signals. + Qt::AlignCenter @@ -1179,6 +1224,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to use short-format messages.</p></body></html> + + Check to use short-format messages. + Sh @@ -1189,6 +1237,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to enable JT9 fast modes</p></body></html> + + Check to enable JT9 fast modes + Fast @@ -1199,6 +1250,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to enable automatic sequencing of Tx messages based on received messages.</p></body></html> + + Check to enable automatic sequencing of Tx messages based on received messages. + Auto Seq @@ -1209,6 +1263,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to call the first decoded responder to my CQ.</p></body></html> + + Check to call the first decoded responder to my CQ. + Call 1st @@ -1234,6 +1291,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.</p></body></html> + + Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences. + Tx even/1st @@ -1249,6 +1309,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Frequency to call CQ on in kHz above the current MHz</p></body></html> + + Frequency to call CQ on in kHz above the current MHz + Tx CQ @@ -1271,6 +1334,10 @@ QPushButton[state="ok"] { <html><head/><body><p>Check this to call CQ on the &quot;Tx CQ&quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.</p><p>Not available to nonstandard callsign holders.</p></body></html> + + Check this to call CQ on the "Tx CQ" frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on. +Not available to nonstandard callsign holders. + @@ -1290,6 +1357,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Submode determines tone spacing; A is narrowest.</p></body></html> + + Submode determines tone spacing; A is narrowest. + Qt::AlignCenter @@ -1333,6 +1403,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Check to monitor Sh messages.</p></body></html> + + Check to monitor Sh messages. + SWL @@ -1364,6 +1437,11 @@ QPushButton[state="ok"] { <html><head/><body><p>Check this to start recording calibration data.<br/>While measuring calibration correction is disabled.<br/>When not checked you can view the calibration results.</p></body></html> + + Check this to start recording calibration data. +While measuring calibration correction is disabled. +When not checked you can view the calibration results. + Measure @@ -1376,6 +1454,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB).</p></body></html> + + Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB). + Qt::AlignCenter @@ -1398,6 +1479,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Tx/Rx or Frequency calibration sequence length</p></body></html> + + Tx/Rx or Frequency calibration sequence length + Qt::AlignCenter @@ -1496,6 +1580,9 @@ QPushButton[state="ok"] { <html><head/><body><p>Double-click on another caller to queue that call for your next QSO.</p></body></html> + + Double-click on another caller to queue that call for your next QSO. + Next Call @@ -1551,6 +1638,10 @@ QPushButton[state="ok"] { <html><head/><body><p>Send this message in next Tx interval</p><p>Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders)</p></body></html> + + Send this message in next Tx interval +Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders) + margin-left: 10%; margin-right: 0% @@ -1586,6 +1677,10 @@ QPushButton[state="ok"] { <html><head/><body><p>Switch to this Tx message NOW</p><p>Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders)</p></body></html> + + Switch to this Tx message NOW +Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders) + Qt::LeftToRight @@ -1627,6 +1722,10 @@ QPushButton[state="ok"] { <html><head/><body><p>Send this message in next Tx interval</p><p>Double-click to reset to the standard 73 message</p></body></html> + + Send this message in next Tx interval +Double-click to reset to the standard 73 message + margin-left: 10%; margin-right: 0% @@ -1675,6 +1774,11 @@ QPushButton[state="ok"] { <html><head/><body><p>Send this message in next Tx interval</p><p>Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type 2 compound call holders)</p><p>RR73 messages should only be used when you are reasonably confident that no message repetitions will be required</p></body></html> + + Send this message in next Tx interval +Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type 2 compound call holders) +RR73 messages should only be used when you are reasonably confident that no message repetitions will be required + margin-left: 10%; margin-right: 0% @@ -1691,6 +1795,11 @@ QPushButton[state="ok"] { <html><head/><body><p>Switch to this Tx message NOW</p><p>Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type2 compound call holders)</p><p>RR73 messages should only be used when you are reasonably confident that no message repetitions will be required</p></body></html> + + Switch to this Tx message NOW +Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type2 compound call holders) +RR73 messages should only be used when you are reasonably confident that no message repetitions will be required + padding-left: 15%; padding-right: 15%; padding-top: 3%; padding-bottom: 3% @@ -1707,6 +1816,10 @@ QPushButton[state="ok"] { <html><head/><body><p>Switch to this Tx message NOW</p><p>Double-click to reset to the standard 73 message</p></body></html> + + Switch to this Tx message NOW +Double-click to reset to the standard 73 message + padding-left: 15%; padding-right: 15%; padding-top: 3%; padding-bottom: 3% @@ -2524,6 +2637,9 @@ list. The list can be maintained in Settings (F2). <html><head/><body><p>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> + + 6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. + Prefer type 1 messages @@ -3306,14 +3422,6 @@ list. The list can be maintained in Settings (F2). Fox log - - - Reset Fox log ... - - - <html><head/><body><p>Ths will erase the file FoxQSO.txt and delete the Fox log file which is used for dupe detection.</p></body></html> - - FT8 DXpedition Mode User Guide diff --git a/widgets/widgets.pri b/widgets/widgets.pri index 24ddd5a3c..eef0c7857 100644 --- a/widgets/widgets.pri +++ b/widgets/widgets.pri @@ -19,7 +19,8 @@ HEADERS += \ widgets/echoplot.h widgets/echograph.h widgets/fastgraph.h \ widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \ widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \ - widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp + widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \ + widgets/DateTimeEdit.hpp FORMS += \ widgets/mainwindow.ui widgets/about.ui \ From ab282fae78cf720a8a8d007e4f1ad62299014146 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 3 May 2019 09:01:18 -0500 Subject: [PATCH 250/367] Add bLowSidelobes argument to the call to symspec. It is initialized to FALSE. --- lib/jt9.f90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index aff2844ef..a0ffcda31 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -22,7 +22,8 @@ program jt9 !### ndepth was defined as 60001. Why??? integer :: arglen,stat,offset,remain,mode=0,flow=200,fsplit=2700, & fhigh=4000,nrxfreq=1500,ntrperiod=1,ndepth=1,nexp_decode=0 - logical :: read_files = .true., tx9 = .false., display_help = .false. + logical :: read_files = .true., tx9 = .false., display_help = .false., & + bLowSidelobes = .false. type (option) :: long_options(26) = [ & option ('help', .false., 'h', 'Display this help message', ''), & option ('shmem',.true.,'s','Use shared memory for sample data','KEY'), & @@ -242,7 +243,7 @@ program jt9 ingain=0 call timer('symspec ',0) nminw=1 - call symspec(shared_data,k,ntrperiod,nsps,ingain,nminw,pxdb, & + call symspec(shared_data,k,ntrperiod,nsps,ingain,bLowSidelobes,nminw,pxdb, & s,df3,ihsym,npts8,pxdbmax) call timer('symspec ',1) endif From 3611be8ba011392cf35f0bb29a49030e7b7adb59 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 3 May 2019 10:51:45 -0500 Subject: [PATCH 251/367] Try to avoid an array bounds error that has been reported by a user. Cause unknown. --- lib/ft8/sync8.f90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/ft8/sync8.f90 b/lib/ft8/sync8.f90 index 3924f1bad..219c6ebf1 100644 --- a/lib/ft8/sync8.f90 +++ b/lib/ft8/sync8.f90 @@ -89,7 +89,12 @@ subroutine sync8(dd,nfa,nfb,syncmin,nfqso,maxcand,s,candidate, & enddo iz=ib-ia+1 call indexx(red(ia:ib),iz,indx) - ibase=indx(nint(0.40*iz)) - 1 + ia + npctile=nint(0.40*iz) + if(npctile.lt.1) then ! something is wrong; bail out + ncand=0 + return; + endif + ibase=indx(npctile) - 1 + ia if(ibase.lt.1) ibase=1 if(ibase.gt.nh1) ibase=nh1 base=red(ibase) From bd07a6e7555c3f66c586962762d7805ad68e0dd7 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 4 May 2019 01:02:16 +0100 Subject: [PATCH 252/367] Add default QDateTime delegate editor --- widgets/DateTimeEdit.hpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 widgets/DateTimeEdit.hpp diff --git a/widgets/DateTimeEdit.hpp b/widgets/DateTimeEdit.hpp new file mode 100644 index 000000000..ad767a551 --- /dev/null +++ b/widgets/DateTimeEdit.hpp @@ -0,0 +1,23 @@ +#ifndef DATE_TIME_EDIT_HPP_ +#define DATE_TIME_EDIT_HPP_ + +#include + +class QWidget; + +// +// DateTimeEdit - format includes seconds +// +class DateTimeEdit final + : public QDateTimeEdit +{ +public: + explicit DateTimeEdit (QWidget * parent = nullptr) + : QDateTimeEdit {parent} + { + setDisplayFormat (locale ().dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); + setTimeSpec (Qt::UTC); + } +}; + +#endif From 0795651f0fe06d24b96e8d9d2c72647370331341 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 4 May 2019 08:05:28 -0500 Subject: [PATCH 253/367] FT4: Initialize mycall13 and dxcall13 for unpack77. --- lib/ft4_decode.f90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index dc08df1b3..fa53f57be 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -94,6 +94,9 @@ contains this%callback => callback hhmmss=cdatetime0(8:13) + dxcall13=hiscall + mycall13=mycall + if(first) then fs=12000.0/NDOWN !Sample rate after downsampling dt=1/fs !Sample interval after downsample (s) From 0d1b438b91f541de0a5d9cb8f836e142c262b07c Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 4 May 2019 09:33:53 -0500 Subject: [PATCH 254/367] FT4: Fix generation of Tx5 when one callsign is nonstandard. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 813b163ce..88fe0016e 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5065,7 +5065,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) msgtype(t, ui->tx4); t=t0 + "73"; - if((m_mode=="MSK144" and !m_bShMsgs) or m_mode=="FT8") { + if((m_mode=="MSK144" and !m_bShMsgs) or m_mode=="FT8" or m_mode=="FT4") { if(!bHisCall and bMyCall) t=hisCall + " <" + my_callsign + "> 73"; if(bHisCall and !bMyCall) t="<" + hisCall + "> " + my_callsign + " 73"; } @@ -5081,7 +5081,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) } } - if(m_mode=="FT8" or m_mode=="MSK144") return; + if(m_mode=="FT8" or m_mode=="FT4" or m_mode=="MSK144") return; if (is_compound) { if (is_type_one) { From 27a0182ab7a6643db95cf065ad741a1018e1fb0e Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 6 May 2019 22:24:51 +0100 Subject: [PATCH 255/367] Revert "Revert to colouring just the OK Log QSO button to help with colour-blindness accessibility" This reverts commit b9e194b74f68cca2d9061d3d4a4d19409c45204e. --- widgets/logqso.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index b4b936d75..75ded8bca 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -42,6 +42,7 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings ok_->setAutoDefault (false); ok_->setFocusPolicy (Qt::ClickFocus); ok_->setStyleSheet ("background-color: green"); + cancel_->setStyleSheet ("background-color: red"); cancel_->setAutoDefault (false); ui->button_layout->addStretch (); ui->button_layout->addWidget (ok_); From 1a914e980b9039d4671681f917f916a60cb569e6 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 6 May 2019 22:25:01 +0100 Subject: [PATCH 256/367] Revert "Add background colour to Log QSO buttons as stronger visual cue" This reverts commit a8a1d8d0a7701610061e2e3e98c543e198aae981. --- widgets/logqso.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index 75ded8bca..eae82aacc 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -41,8 +41,6 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings ok_->setAutoDefault (false); ok_->setFocusPolicy (Qt::ClickFocus); - ok_->setStyleSheet ("background-color: green"); - cancel_->setStyleSheet ("background-color: red"); cancel_->setAutoDefault (false); ui->button_layout->addStretch (); ui->button_layout->addWidget (ok_); From 1c3b5543845d6bb6b284315dfb235ad8ddb9a80c Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 6 May 2019 22:25:06 +0100 Subject: [PATCH 257/367] Revert "Log buttons" This reverts commit 9e75b5c2b5d9827e14ef0d92470e56455edcec7f. --- widgets/logqso.cpp | 45 ++------------------------------------------- widgets/logqso.h | 3 --- widgets/logqso.ui | 44 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 48 deletions(-) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index eae82aacc..acbb340bc 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -1,12 +1,9 @@ #include "logqso.h" -#include -#include #include #include #include #include -#include #include "logbook/logbook.h" #include "MessageBox.hpp" @@ -18,40 +15,17 @@ #include "ui_logqso.h" #include "moc_logqso.cpp" -namespace -{ - using dist_type = std::uniform_int_distribution; - std::random_device rd; - std::mt19937 twister (rd ()); - dist_type int_distribution; -} - LogQSO::LogQSO(QString const& programTitle, QSettings * settings , Configuration const * config, QWidget *parent) : QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint} , ui(new Ui::LogQSO) - , ok_ {new QPushButton {"OK", this}} - , cancel_ {new QPushButton {"Cancel", this}} , m_settings (settings) , m_config {config} { ui->setupUi(this); setWindowTitle(programTitle + " - Log QSO"); - ui->grid->setValidator (new MaidenheadLocatorValidator {this}); - - ok_->setAutoDefault (false); - ok_->setFocusPolicy (Qt::ClickFocus); - cancel_->setAutoDefault (false); - ui->button_layout->addStretch (); - ui->button_layout->addWidget (ok_); - ui->button_layout->addStretch (); - ui->button_layout->addWidget (cancel_); - ui->button_layout->addStretch (); - loadSettings (); - - connect (ok_, &QAbstractButton::clicked, [this] (bool) {accept ();}); - connect (cancel_, &QAbstractButton::clicked, [this] (bool) {reject ();}); + ui->grid->setValidator (new MaidenheadLocatorValidator {this}); } LogQSO::~LogQSO () @@ -139,22 +113,7 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString } else { - // randomize accessible name of buttons - ok_->setAccessibleName (QString::number (int_distribution (twister))); - cancel_->setAccessibleName (QString::number (int_distribution (twister))); - // random sibling order of buttons - if (int_distribution (twister, dist_type::param_type {0, 1})) ok_->stackUnder (cancel_); else cancel_->stackUnder (ok_); - // random shuffle of layout items - for (int item = ui->button_layout->count () - 1; item > 0; --item) - { - auto other_item = int_distribution (twister, dist_type::param_type {0, item}); - if (item != other_item) - { - ui->button_layout->insertItem (other_item, ui->button_layout->takeAt (item)); - ui->button_layout->insertItem (item, ui->button_layout->takeAt (other_item + 1)); - } - } - show (); + show(); } } diff --git a/widgets/logqso.h b/widgets/logqso.h index 5cbb2044d..82a75b7bd 100644 --- a/widgets/logqso.h +++ b/widgets/logqso.h @@ -18,7 +18,6 @@ class QSettings; class Configuration; class QByteArray; class CabrilloLog; -class QPushButton; class LogQSO : public QDialog { @@ -53,8 +52,6 @@ private: void storeSettings () const; QScopedPointer ui; - QPushButton * ok_; - QPushButton * cancel_; QSettings * m_settings; Configuration const * m_config; QString m_txPower; diff --git a/widgets/logqso.ui b/widgets/logqso.ui index 7d249677d..a03a3028a 100644 --- a/widgets/logqso.ui +++ b/widgets/logqso.ui @@ -461,7 +461,14 @@ - + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + @@ -481,5 +488,38 @@ cbComments - + + + buttonBox + accepted() + LogQSO + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + LogQSO + reject() + + + 316 + 260 + + + 286 + 274 + + + + From 0668c4fce05ecd4b30e34a1be97bcdb6122a13b7 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 8 May 2019 11:34:16 -0500 Subject: [PATCH 258/367] Improve sync at large DT. --- lib/ft4/gen_ft4wave.f90 | 2 +- lib/ft4/sync4d.f90 | 23 ++++++++++++++++++++--- lib/ft4_decode.f90 | 4 ++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 index 410e83401..c4cd2eafb 100644 --- a/lib/ft4/gen_ft4wave.f90 +++ b/lib/ft4/gen_ft4wave.f90 @@ -13,7 +13,7 @@ subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) twopi=8.0*atan(1.0) dt=1.0/fsample hmod=1.0 -! Compute the frequency-smoothing pulse +! Compute the smoothed frequency-deviation pulse do i=1,3*nsps tt=(i-1.5*nsps)/real(nsps) pulse(i)=gfsk_pulse(1.0,tt) diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index bda7ed4a2..28cb10b99 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -60,7 +60,16 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) z4=0. if(itwk.eq.1) csync2=ctwk*csynca !Tweak the frequency - if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+4*NSS-1:2)*conjg(csync2)) + if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) then + z1=sum(cd0(i1:i1+4*NSS-1:2)*conjg(csync2)) + elseif( i1.lt.0 ) then + npts=(i1+4*NSS-1)/2 + if(npts.le.8) then + z1=0. + else + z1=sum(cd0(0:i1+4*NSS-1:2)*conjg(csync2(2*NSS-npts:))) + endif + endif if(itwk.eq.1) csync2=ctwk*csyncb !Tweak the frequency if(i2.ge.0 .and. i2+4*NSS-1.le.NP-1) z2=sum(cd0(i2:i2+4*NSS-1:2)*conjg(csync2)) @@ -69,8 +78,16 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) if(i3.ge.0 .and. i3+4*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+4*NSS-1:2)*conjg(csync2)) if(itwk.eq.1) csync2=ctwk*csyncd !Tweak the frequency - if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) z4=sum(cd0(i4:i4+4*NSS-1:2)*conjg(csync2)) - + if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) then + z4=sum(cd0(i4:i4+4*NSS-1:2)*conjg(csync2)) + elseif( i4+4*NSS-1.gt.NP-1 ) then + npts=(NP-1-i4+1)/2 + if(npts.le.8) then + z4=0. + else + z4=sum(cd0(i4:i4+2*npts-1:2)*conjg(csync2(1:npts))) + endif + endif sync = p(z1) + p(z2) + p(z3) + p(z4) return diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index fa53f57be..aa27387ce 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -262,8 +262,8 @@ contains idfmin=idfbest-4 idfmax=idfbest+4 idfstp=1 - ibmin=max(0,ibest-5) - ibmax=min(ibest+5,NDMAX-1) + ibmin=ibest-5 + ibmax=ibest+5 ibstp=1 endif ibest=-1 From 3a3af42cc6fd0a7b56428afa8a49437e40b29379 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 10 May 2019 17:27:52 +0100 Subject: [PATCH 259/367] Tool to exercise QAudioInput The tool record_time_signal is designed to measure the performance of QAudioInput. The intended use is to record a short period of live audio from an on-air time signal of known good quaility, the basic required parameters are an audio input device, an output file name (.WAV), a start second in a minute, and a duration in seconds. So for example to record the time signal ticks and fast data at the top of the minute: $ record_time_signal -o wwv.wav -s 55 -d 15 will record 15s of audio at 48000Hz sample rate, stereo, from the default audio input device, starting at second 55. This will use a separate timer to stop the recording which is likely to leave the output file a little short due to buffer latency. The buffer size can be adjusted using the '-b ' option. The tool also supoorts a different mechanism to time the recording which uses the audio progress via a notify signal. This should ensure at least the requested duration is recorded The shorter the notify interval the closer teh final size shoould be to the requested duration. Use the '-d ' option to adjust the notify interval. $ record_time_signal -o wwv.wav -s 55 -d 15 -n 100 Non-default audio devices can be selected, use the '-I' option to list the available input devices with an index number that can be used to select the device using the 'R ' option. Other options are available, use '-h' for details. --- Audio/tools/record_time_signal.cpp | 231 +++++++++++++++++++++++++++++ CMakeLists.txt | 3 + 2 files changed, 234 insertions(+) create mode 100644 Audio/tools/record_time_signal.cpp diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp new file mode 100644 index 000000000..4958c5743 --- /dev/null +++ b/Audio/tools/record_time_signal.cpp @@ -0,0 +1,231 @@ +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "revision_utils.hpp" +#include "Audio/BWFFile.hpp" + +namespace +{ + QTextStream qtout {stdout}; +} + +class Recorder final + : public QObject +{ + Q_OBJECT; + +public: + Recorder (int start, int duration, QString const& output, QAudioDeviceInfo const& source_device, QAudioFormat const& format, int notify_interval, int buffer_size) + : source_ {source_device, format} + , notify_interval_ {notify_interval} + , output_ {format, output} + , duration_ {duration} + { + if (!output_.open (BWFFile::WriteOnly)) throw std::invalid_argument {QString {"cannot open output file \"%1\""}.arg (output).toStdString ()}; + + if (buffer_size) source_.setBufferSize (format.bytesForFrames (buffer_size)); + if (notify_interval_) + { + source_.setNotifyInterval (notify_interval); + connect (&source_, &QAudioInput::notify, this, &Recorder::notify); + } + + QTimer::singleShot (int ((((start - (QDateTime::currentMSecsSinceEpoch () / 1000) % 60) + 60) % 60) * 1000), Qt::PreciseTimer, this, &Recorder::start); + } + + Q_SIGNAL void done (); + +private: + Q_SLOT void start () + { + qtout << "started recording at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; + source_.start (&output_); + if (!notify_interval_) QTimer::singleShot (duration_ * 1000, Qt::PreciseTimer, this, &Recorder::stop); + qtout << QString {"buffer size used is: %1"}.arg (source_.bufferSize ()) << endl; + } + + Q_SLOT void notify () + { + auto length = source_.elapsedUSecs (); + qtout << QString {"%1 US recorded\r"}.arg (length) << flush; + if (length >= duration_ * 1000 * 1000) stop (); + } + + Q_SLOT void stop () + { + auto length = source_.elapsedUSecs (); + source_.stop (); + qtout << QString {"%1 uS recorded "}.arg (length) << '(' << source_.format ().framesForBytes (output_.size ()) << " frames recorded)\n"; + qtout << "stopped recording at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; + Q_EMIT done (); + } + + QAudioInput source_; + int notify_interval_; + BWFFile output_; + int duration_; +}; + +#include "record_time_signal.moc" + +int main(int argc, char *argv[]) +{ + QCoreApplication app {argc, argv}; + try + { + ::setlocale (LC_NUMERIC, "C"); // ensure number forms are in + // consistent format, do this + // after instantiating + // QApplication so that Qt has + // correct l18n + + // Override programs executable basename as application name. + app.setApplicationName ("WSJT-X Record Time Signal"); + app.setApplicationVersion (version ()); + + QCommandLineParser parser; + parser.setApplicationDescription ( + "\nTool to determine and experiment with QAudioInput latencies\n\n" + "\tUse the -I option to list available recording device numbers\n" + ); + auto help_option = parser.addHelpOption (); + auto version_option = parser.addVersionOption (); + + parser.addOptions ({ + {{"I", "list-audio-inputs"}, + app.translate ("main", "List the available audio input devices")}, + {{"s", "start-time"}, + app.translate ("main", "Record from seconds"), + app.translate ("main", "start-time")}, + {{"d", "duration"}, + app.translate ("main", "Recording seconds"), + app.translate ("main", "duration")}, + {{"o", "output"}, + app.translate ("main", "Save output as "), + app.translate ("main", "output-file")}, + {{"f", "force"}, + app.translate ("main", "Overwrite existing file")}, + {{"r", "sample-rate"}, + app.translate ("main", "Record at "), + app.translate ("main", "sample-rate")}, + {{"c", "num-channels"}, + app.translate ("main", "Record channels"), + app.translate ("main", "num")}, + {{"R", "recording-device-number"}, + app.translate ("main", "Record from "), + app.translate ("main", "device-number")}, + {{"n", "notify-interval"}, + app.translate ("main", "use notify signals every milliseconds, zero to use a timer"), + app.translate ("main", "interval")}, + {{"b", "buffer-size"}, + app.translate ("main", "audio buffer size "), + app.translate ("main", "frames")}, + }); + parser.process (app); + + auto input_devices = QAudioDeviceInfo::availableDevices (QAudio::AudioInput); + if (parser.isSet ("I")) + { + int n {0}; + for (auto const& device : input_devices) + { + qtout << ++n << " - [" << device.deviceName () << ']' << endl; + } + return 0; + } + + bool ok; + int start = parser.value ("s").toInt (&ok); + if (!ok) throw std::invalid_argument {"start time not a number"}; + int duration = parser.value ("d").toInt (&ok); + if (!ok) throw std::invalid_argument {"duration not a number"}; + int sample_rate {48000}; + if (parser.isSet ("r")) + { + sample_rate = parser.value ("r").toInt (&ok); + if (!ok) throw std::invalid_argument {"sample rate not a number"}; + } + int num_channels {2}; + if (parser.isSet ("c")) + { + num_channels = parser.value ("c").toInt (&ok); + if (!ok) throw std::invalid_argument {"channel count not a number"}; + } + int notify_interval {0}; + if (parser.isSet ("n")) + { + notify_interval = parser.value ("n").toInt (&ok); + if (!ok) throw std::invalid_argument {"notify interval not a number"}; + } + int buffer_size {0}; + if (parser.isSet ("b")) + { + buffer_size = parser.value ("b").toInt (&ok); + if (!ok) throw std::invalid_argument {"buffer size not a number"}; + } + int input_device {0}; + if (parser.isSet ("R")) + { + input_device = parser.value ("R").toInt (&ok); + if (!ok || 0 >= input_device || input_device > input_devices.size ()) + { + throw std::invalid_argument {"invalid recording device"}; + } + } + if (!parser.isSet ("o")) throw std::invalid_argument {"output file required"}; + QFileInfo ofi {parser.value ("o")}; + if (!ofi.suffix ().size () && ofi.fileName ()[ofi.fileName ().size () - 1] != QChar {'.'}) + { + ofi.setFile (ofi.filePath () + ".wav"); + } + if (!parser.isSet ("f") && ofi.isFile ()) + { + throw std::invalid_argument {"set the `-force' option to overwrite an existing output file"}; + } + + QAudioFormat audio_format; + audio_format.setSampleRate (sample_rate); + audio_format.setChannelCount (num_channels); + audio_format.setSampleSize (16); + audio_format.setSampleType (QAudioFormat::SignedInt); + audio_format.setCodec ("audio/pcm"); + + auto source = input_device ? input_devices[input_device] : QAudioDeviceInfo::defaultInputDevice (); + if (!source.isFormatSupported (audio_format)) + { + qtout << "warning, requested format not supported, using nearest" << endl; + audio_format = source.nearestFormat (audio_format); + } + + // run the application + Recorder record {start, duration, ofi.filePath (), source, audio_format, notify_interval, buffer_size}; + QObject::connect (&record, &Recorder::done, &app, &QCoreApplication::quit); + return app.exec(); + } + catch (std::exception const& e) + { + std::cerr << "Error: " << e.what () << '\n'; + } + catch (...) + { + std::cerr << "Unexpected fatal error\n"; + throw; // hoping the runtime might tell us more about the exception + } + return -1; +} diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fbb879dc..eb8ece5ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1289,6 +1289,9 @@ target_link_libraries (ft4sim_mult wsjt_fort wsjt_cxx) add_executable (ft4d lib/ft4/ft4d.f90 wsjtx.rc) target_link_libraries (ft4d wsjt_fort wsjt_cxx) +add_executable (record_time_signal Audio/tools/record_time_signal.cpp) +target_link_libraries (record_time_signal wsjt_cxx wsjt_qtmm wsjt_qt) + endif(WSJT_BUILD_UTILS) # build the main application From 994a490cddd036782fbf0c48905e4530ee5c9701 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 10 May 2019 13:58:01 -0400 Subject: [PATCH 260/367] Change output sound buffer to 200 ms (was 2000 ms). --- robots/go | 2 ++ robots/robo.f90 | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ soundout.cpp | 3 +++ 3 files changed, 53 insertions(+) create mode 100644 robots/go create mode 100644 robots/robo.f90 diff --git a/robots/go b/robots/go new file mode 100644 index 000000000..9a7c9f3dd --- /dev/null +++ b/robots/go @@ -0,0 +1,2 @@ +curl https://pskreporter.info/cgi-bin/robot.pl > robo.dat +robo | sort -nr -k2 diff --git a/robots/robo.f90 b/robots/robo.f90 new file mode 100644 index 000000000..69650a149 --- /dev/null +++ b/robots/robo.f90 @@ -0,0 +1,48 @@ +program robo + +! Examine spots from PSK Reporter for past week to identify probable robots + +! In a bash shell, from command line: +! $ curl https://pskreporter.info/cgi-bin/robot.pl > robo.dat +! $ robo | sort -nr -k2 + + parameter (NCHARS=20000) + parameter (NMAX=100) + + character*1 c + character*20000 blob + character*12 callsign(0:NMAX) + integer*1 ic1 + + open(10,file='robo.dat',status='old',access='stream') + callsign=' ' + + do ichar=1,NCHARS + read(10,end=10) ic1 + ic=ic1 + if(ic.lt.0) ic=ic+256 + c=char(ic) + blob(ichar:ichar)=c + enddo +10 continue + + do icall=1,NMAX + i1=index(blob,'":{"median_minutes":')-1 + do i=i1,i1-10,-1 + if(i1.lt.1) go to 20 + if(blob(i:i).eq.'"') exit + enddo + i0=i+1 + callsign(icall)=blob(i0:i1) + i2=index(blob,',')-1 + read(blob(i1+21:i2),*) median_minutes + i3=index(blob,'median_hours')+14 + i4=index(blob,'}')-1 + read(blob(i3:i4),*) median_hours + write(*,3001) median_minutes,median_hours,trim(callsign(icall)) +3001 format(2i5,2x,a) + blob=blob(i4+3:) + enddo + +20 continue +end program robo diff --git a/soundout.cpp b/soundout.cpp index b21675b3a..0264ad91e 100644 --- a/soundout.cpp +++ b/soundout.cpp @@ -9,11 +9,14 @@ #include "moc_soundout.cpp" +/* #if defined (WIN32) # define MS_BUFFERED 1000u #else # define MS_BUFFERED 2000u #endif +*/ +# define MS_BUFFERED 200u bool SoundOutput::audioError () const { From c227c8d143afda4c5ecc8755cfbe143d843794fe Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 10 May 2019 19:33:12 +0100 Subject: [PATCH 261/367] Export restriction --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index 93434826f..b1e1bbf70 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ .gitattributes export-ignore /samples export-ignore /lib/fsk4hf export-ignore +/lib/fsk4hf export-ignore +/robots export-ignore From 62f9b3275855a518e88b5cf1c97b52a69fe6ea85 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 10 May 2019 19:38:04 +0100 Subject: [PATCH 262/367] Added playback to record_time_signal tool The tool may be started with either '-o ' to record or with '-i ', where file-path is an existing .WAV file, to playback audio. Audio output devices may be listed with the '-O' option and selected by index number using the '-P ' option. No format conversions are done for playback by the tool so the output device must support the format of the input .WAV file. The playback duration is the duration of the input .WAV file. The tool '-s ' option is now optional, without it recording or playback starts immediately. So to playback a .WAV file: $ record_time_signal -i wwv.wav To play back the same file stating at second 55 in the minute: $ record_time_signal -i wwv.wav -s 55 Use the '-h' option for more help. --- Audio/tools/record_time_signal.cpp | 244 +++++++++++++++++++++++------ 1 file changed, 197 insertions(+), 47 deletions(-) diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp index 4958c5743..f63f8dbdc 100644 --- a/Audio/tools/record_time_signal.cpp +++ b/Audio/tools/record_time_signal.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -14,6 +15,7 @@ #include #include #include +#include #include #include @@ -25,63 +27,151 @@ namespace QTextStream qtout {stdout}; } -class Recorder final +class Record final : public QObject { Q_OBJECT; public: - Recorder (int start, int duration, QString const& output, QAudioDeviceInfo const& source_device, QAudioFormat const& format, int notify_interval, int buffer_size) - : source_ {source_device, format} + Record (int start, int duration, QAudioDeviceInfo const& source_device, BWFFile * output, int notify_interval, int buffer_size) + : source_ {source_device, output->format ()} , notify_interval_ {notify_interval} - , output_ {format, output} + , output_ {output} , duration_ {duration} { - if (!output_.open (BWFFile::WriteOnly)) throw std::invalid_argument {QString {"cannot open output file \"%1\""}.arg (output).toStdString ()}; - - if (buffer_size) source_.setBufferSize (format.bytesForFrames (buffer_size)); + if (buffer_size) source_.setBufferSize (output_->format ().bytesForFrames (buffer_size)); if (notify_interval_) { source_.setNotifyInterval (notify_interval); - connect (&source_, &QAudioInput::notify, this, &Recorder::notify); + connect (&source_, &QAudioInput::notify, this, &Record::notify); } - QTimer::singleShot (int ((((start - (QDateTime::currentMSecsSinceEpoch () / 1000) % 60) + 60) % 60) * 1000), Qt::PreciseTimer, this, &Recorder::start); + if (start == -1) + { + start_recording (); + } + else + { + QTimer::singleShot (int ((((start - (QDateTime::currentMSecsSinceEpoch () / 1000) % 60) + 60) % 60) * 1000), Qt::PreciseTimer, this, &Record::start_recording); + } } Q_SIGNAL void done (); private: - Q_SLOT void start () + Q_SLOT void start_recording () { qtout << "started recording at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; - source_.start (&output_); - if (!notify_interval_) QTimer::singleShot (duration_ * 1000, Qt::PreciseTimer, this, &Recorder::stop); + source_.start (output_); + if (!notify_interval_) QTimer::singleShot (duration_ * 1000, Qt::PreciseTimer, this, &Record::stop_recording); qtout << QString {"buffer size used is: %1"}.arg (source_.bufferSize ()) << endl; } Q_SLOT void notify () { auto length = source_.elapsedUSecs (); - qtout << QString {"%1 US recorded\r"}.arg (length) << flush; - if (length >= duration_ * 1000 * 1000) stop (); + qtout << QString {"%1 μs recorded\r"}.arg (length) << flush; + if (length >= duration_ * 1000 * 1000) stop_recording (); } - Q_SLOT void stop () + Q_SLOT void stop_recording () { auto length = source_.elapsedUSecs (); source_.stop (); - qtout << QString {"%1 uS recorded "}.arg (length) << '(' << source_.format ().framesForBytes (output_.size ()) << " frames recorded)\n"; + qtout << QString {"%1 μs recorded "}.arg (length) << '(' << source_.format ().framesForBytes (output_->size ()) << " frames recorded)\n"; qtout << "stopped recording at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; Q_EMIT done (); } QAudioInput source_; int notify_interval_; - BWFFile output_; + BWFFile * output_; int duration_; }; +class Playback final + : public QObject +{ + Q_OBJECT; + +public: + Playback (int start, BWFFile * input, QAudioDeviceInfo const& sink_device, int notify_interval, int buffer_size) + : input_ {input} + , sink_ {sink_device, input->format ()} + , notify_interval_ {notify_interval} + { + if (buffer_size) sink_.setBufferSize (input_->format ().bytesForFrames (buffer_size)); + if (notify_interval_) + { + sink_.setNotifyInterval (notify_interval); + connect (&sink_, &QAudioOutput::notify, this, &Playback::notify); + } + if (start == -1) + { + start_playback (); + + } + else + { + QTimer::singleShot (int ((((start - (QDateTime::currentMSecsSinceEpoch () / 1000) % 60) + 60) % 60) * 1000), Qt::PreciseTimer, this, &Playback::start_playback); + } + } + + Q_SIGNAL void done (); + +private: + Q_SLOT void start_playback () + { + qtout << "started playback at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; + sink_.start (input_); + qtout << QString {"buffer size used is: %1 (%2 frames)"}.arg (sink_.bufferSize ()).arg (sink_.format ().framesForBytes (sink_.bufferSize ())) << endl; + connect (&sink_, &QAudioOutput::stateChanged, this, &Playback::sink_state_changed); + } + + Q_SLOT void notify () + { + auto length = sink_.elapsedUSecs (); + qtout << QString {"%1 μs rendered\r"}.arg (length) << flush; + } + + Q_SLOT void sink_state_changed (QAudio::State state) + { + switch (state) + { + case QAudio::ActiveState: + qtout << "\naudio output state changed to active\n"; + break; + case QAudio::SuspendedState: + qtout << "\naudio output state changed to suspended\n"; + break; + case QAudio::StoppedState: + qtout << "\naudio output state changed to stopped\n"; + break; + case QAudio::IdleState: + stop_playback (); + break; +#if QT_VERSION >= QT_VERSION_CHECK (5, 10, 0) + case QAudio::InterruptedState: + qtout << "\naudio output state changed to interrupted\n"; + break; +#endif + } + } + + Q_SLOT void stop_playback () + { + auto length = sink_.elapsedUSecs (); + sink_.stop (); + qtout << QString {"%1 μs rendered "}.arg (length) << '(' << sink_.format ().framesForBytes (input_->size ()) << " frames rendered)\n"; + qtout << "stopped playback at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; + Q_EMIT done (); + } + + BWFFile * input_; + QAudioOutput sink_; + int notify_interval_; +}; + #include "record_time_signal.moc" int main(int argc, char *argv[]) @@ -110,8 +200,10 @@ int main(int argc, char *argv[]) parser.addOptions ({ {{"I", "list-audio-inputs"}, app.translate ("main", "List the available audio input devices")}, + {{"O", "list-audio-outputs"}, + app.translate ("main", "List the available audio output devices")}, {{"s", "start-time"}, - app.translate ("main", "Record from seconds"), + app.translate ("main", "Record from seconds, default start immediately"), app.translate ("main", "start-time")}, {{"d", "duration"}, app.translate ("main", "Recording seconds"), @@ -119,17 +211,23 @@ int main(int argc, char *argv[]) {{"o", "output"}, app.translate ("main", "Save output as "), app.translate ("main", "output-file")}, + {{"i", "input"}, + app.translate ("main", "Playback "), + app.translate ("main", "input-file")}, {{"f", "force"}, app.translate ("main", "Overwrite existing file")}, {{"r", "sample-rate"}, - app.translate ("main", "Record at "), + app.translate ("main", "Record at , default 48000 Hz"), app.translate ("main", "sample-rate")}, {{"c", "num-channels"}, - app.translate ("main", "Record channels"), + app.translate ("main", "Record channels, default 2"), app.translate ("main", "num")}, {{"R", "recording-device-number"}, app.translate ("main", "Record from "), app.translate ("main", "device-number")}, + {{"P", "playback-device-number"}, + app.translate ("main", "Playback to "), + app.translate ("main", "device-number")}, {{"n", "notify-interval"}, app.translate ("main", "use notify signals every milliseconds, zero to use a timer"), app.translate ("main", "interval")}, @@ -150,11 +248,24 @@ int main(int argc, char *argv[]) return 0; } + auto output_devices = QAudioDeviceInfo::availableDevices (QAudio::AudioOutput); + if (parser.isSet ("O")) + { + int n {0}; + for (auto const& device : output_devices) + { + qtout << ++n << " - [" << device.deviceName () << ']' << endl; + } + return 0; + } + bool ok; - int start = parser.value ("s").toInt (&ok); - if (!ok) throw std::invalid_argument {"start time not a number"}; - int duration = parser.value ("d").toInt (&ok); - if (!ok) throw std::invalid_argument {"duration not a number"}; + int start {-1}; + if (parser.isSet ("s")) + { + start = parser.value ("s").toInt (&ok); + if (!ok) throw std::invalid_argument {"start time not a number"}; + } int sample_rate {48000}; if (parser.isSet ("r")) { @@ -188,35 +299,74 @@ int main(int argc, char *argv[]) throw std::invalid_argument {"invalid recording device"}; } } - if (!parser.isSet ("o")) throw std::invalid_argument {"output file required"}; - QFileInfo ofi {parser.value ("o")}; - if (!ofi.suffix ().size () && ofi.fileName ()[ofi.fileName ().size () - 1] != QChar {'.'}) + int output_device {0}; + if (parser.isSet ("P")) { - ofi.setFile (ofi.filePath () + ".wav"); - } - if (!parser.isSet ("f") && ofi.isFile ()) - { - throw std::invalid_argument {"set the `-force' option to overwrite an existing output file"}; + output_device = parser.value ("P").toInt (&ok); + if (!ok || 0 >= output_device || output_device > output_devices.size ()) + { + throw std::invalid_argument {"invalid playback device"}; + } } + if (!(parser.isSet ("o") || parser.isSet ("i"))) throw std::invalid_argument {"file required"}; + if (parser.isSet ("o") && parser.isSet ("i")) throw std::invalid_argument {"specify either input or output"}; QAudioFormat audio_format; - audio_format.setSampleRate (sample_rate); - audio_format.setChannelCount (num_channels); - audio_format.setSampleSize (16); - audio_format.setSampleType (QAudioFormat::SignedInt); - audio_format.setCodec ("audio/pcm"); - - auto source = input_device ? input_devices[input_device] : QAudioDeviceInfo::defaultInputDevice (); - if (!source.isFormatSupported (audio_format)) + if (parser.isSet ("o")) // Record { - qtout << "warning, requested format not supported, using nearest" << endl; - audio_format = source.nearestFormat (audio_format); - } + int duration = parser.value ("d").toInt (&ok); + if (!ok) throw std::invalid_argument {"duration not a number"}; - // run the application - Recorder record {start, duration, ofi.filePath (), source, audio_format, notify_interval, buffer_size}; - QObject::connect (&record, &Recorder::done, &app, &QCoreApplication::quit); - return app.exec(); + QFileInfo ofi {parser.value ("o")}; + if (!ofi.suffix ().size () && ofi.fileName ()[ofi.fileName ().size () - 1] != QChar {'.'}) + { + ofi.setFile (ofi.filePath () + ".wav"); + } + if (!parser.isSet ("f") && ofi.isFile ()) + { + throw std::invalid_argument {"set the `-force' option to overwrite an existing output file"}; + } + + audio_format.setSampleRate (sample_rate); + audio_format.setChannelCount (num_channels); + audio_format.setSampleSize (16); + audio_format.setSampleType (QAudioFormat::SignedInt); + audio_format.setCodec ("audio/pcm"); + + auto source = input_device ? input_devices[input_device] : QAudioDeviceInfo::defaultInputDevice (); + if (!source.isFormatSupported (audio_format)) + { + qtout << "warning, requested format not supported, using nearest" << endl; + audio_format = source.nearestFormat (audio_format); + } + BWFFile output_file {audio_format, ofi.filePath ()}; + if (!output_file.open (BWFFile::WriteOnly)) throw std::invalid_argument {QString {"cannot open output file \"%1\""}.arg (ofi.filePath ()).toStdString ()}; + + // run the application + Record record {start, duration, source, &output_file, notify_interval, buffer_size}; + QObject::connect (&record, &Record::done, &app, &QCoreApplication::quit); + return app.exec(); + } + else // Playback + { + QFileInfo ifi {parser.value ("i")}; + if (!ifi.isFile () && !ifi.suffix ().size () && ifi.fileName ()[ifi.fileName ().size () - 1] != QChar {'.'}) + { + ifi.setFile (ifi.filePath () + ".wav"); + } + BWFFile input_file {audio_format, ifi.filePath ()}; + if (!input_file.open (BWFFile::ReadOnly)) throw std::invalid_argument {QString {"cannot open input file \"%1\""}.arg (ifi.filePath ()).toStdString ()}; + auto sink = output_device ? output_devices[output_device] : QAudioDeviceInfo::defaultOutputDevice (); + if (!sink.isFormatSupported (input_file.format ())) + { + throw std::invalid_argument {"audio output device does not support input file audio format"}; + } + + // run the application + Playback play {start, &input_file, sink, notify_interval, buffer_size}; + QObject::connect (&play, &Playback::done, &app, &QCoreApplication::quit); + return app.exec(); + } } catch (std::exception const& e) { From 8d6c7649e0ca0ffe30c0fc343fc54f501b0363ce Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 10 May 2019 20:31:16 +0100 Subject: [PATCH 263/367] Repaired a defect in the calculation of delay before starting audio streams --- Audio/tools/record_time_signal.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp index f63f8dbdc..8cd4f8ee1 100644 --- a/Audio/tools/record_time_signal.cpp +++ b/Audio/tools/record_time_signal.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "revision_utils.hpp" #include "Audio/BWFFile.hpp" @@ -52,7 +53,12 @@ public: } else { - QTimer::singleShot (int ((((start - (QDateTime::currentMSecsSinceEpoch () / 1000) % 60) + 60) % 60) * 1000), Qt::PreciseTimer, this, &Record::start_recording); + auto now = QDateTime::currentDateTimeUtc (); + auto time = now.time (); + auto then = now; + then.setTime (QTime {time.hour (), time.minute (), start}); + auto delta_ms = (now.msecsTo (then) + (60 * 1000)) % (60 * 1000); + QTimer::singleShot (int (delta_ms), Qt::PreciseTimer, this, &Record::start_recording); } } @@ -113,7 +119,12 @@ public: } else { - QTimer::singleShot (int ((((start - (QDateTime::currentMSecsSinceEpoch () / 1000) % 60) + 60) % 60) * 1000), Qt::PreciseTimer, this, &Playback::start_playback); + auto now = QDateTime::currentDateTimeUtc (); + auto time = now.time (); + auto then = now; + then.setTime (QTime {time.hour (), time.minute (), start}); + auto delta_ms = (now.msecsTo (then) + (60 * 1000)) % (60 * 1000); + QTimer::singleShot (int (delta_ms), Qt::PreciseTimer, this, &Playback::start_playback); } } From c393740b0a8cba7edfd6032ec7165a496b7a91b8 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 11 May 2019 01:57:56 +0100 Subject: [PATCH 264/367] Fix an off by error --- Audio/tools/record_time_signal.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp index 8cd4f8ee1..c128e34ff 100644 --- a/Audio/tools/record_time_signal.cpp +++ b/Audio/tools/record_time_signal.cpp @@ -112,10 +112,10 @@ public: sink_.setNotifyInterval (notify_interval); connect (&sink_, &QAudioOutput::notify, this, &Playback::notify); } + connect (&sink_, &QAudioOutput::stateChanged, this, &Playback::sink_state_changed); if (start == -1) { start_playback (); - } else { @@ -136,7 +136,6 @@ private: qtout << "started playback at " << QDateTime::currentDateTimeUtc ().toString ("hh:mm:ss.zzz UTC") << endl; sink_.start (input_); qtout << QString {"buffer size used is: %1 (%2 frames)"}.arg (sink_.bufferSize ()).arg (sink_.format ().framesForBytes (sink_.bufferSize ())) << endl; - connect (&sink_, &QAudioOutput::stateChanged, this, &Playback::sink_state_changed); } Q_SLOT void notify () @@ -160,6 +159,7 @@ private: break; case QAudio::IdleState: stop_playback (); + qtout << "\naudio output state changed to idle\n"; break; #if QT_VERSION >= QT_VERSION_CHECK (5, 10, 0) case QAudio::InterruptedState: @@ -276,6 +276,7 @@ int main(int argc, char *argv[]) { start = parser.value ("s").toInt (&ok); if (!ok) throw std::invalid_argument {"start time not a number"}; + if (0 > start || start > 59) throw std::invalid_argument {"0 > start > 59"}; } int sample_rate {48000}; if (parser.isSet ("r")) @@ -344,7 +345,7 @@ int main(int argc, char *argv[]) audio_format.setSampleType (QAudioFormat::SignedInt); audio_format.setCodec ("audio/pcm"); - auto source = input_device ? input_devices[input_device] : QAudioDeviceInfo::defaultInputDevice (); + auto source = input_device ? input_devices[input_device - 1] : QAudioDeviceInfo::defaultInputDevice (); if (!source.isFormatSupported (audio_format)) { qtout << "warning, requested format not supported, using nearest" << endl; @@ -367,7 +368,7 @@ int main(int argc, char *argv[]) } BWFFile input_file {audio_format, ifi.filePath ()}; if (!input_file.open (BWFFile::ReadOnly)) throw std::invalid_argument {QString {"cannot open input file \"%1\""}.arg (ifi.filePath ()).toStdString ()}; - auto sink = output_device ? output_devices[output_device] : QAudioDeviceInfo::defaultOutputDevice (); + auto sink = output_device ? output_devices[output_device - 1] : QAudioDeviceInfo::defaultOutputDevice (); if (!sink.isFormatSupported (input_file.format ())) { throw std::invalid_argument {"audio output device does not support input file audio format"}; From ab1454a24cc14fc320a43205b541023e199d7d1c Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Sat, 11 May 2019 09:36:15 -0500 Subject: [PATCH 265/367] Try to avoid a crash in freqcal.f90 when data is all zeros. --- lib/freqcal.f90 | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/lib/freqcal.f90 b/lib/freqcal.f90 index 540237f6e..80ce90c66 100644 --- a/lib/freqcal.f90 +++ b/lib/freqcal.f90 @@ -41,6 +41,7 @@ subroutine freqcal(id2,k,nkhz,noffset,ntol,line) endif smax=0. s=0. + ipk=-99 do i=ia,ib s(i)=real(cx(i))**2 + aimag(cx(i))**2 if(s(i).gt.smax) then @@ -48,25 +49,32 @@ subroutine freqcal(id2,k,nkhz,noffset,ntol,line) ipk=i endif enddo - - call peakup(s(ipk-1),s(ipk),s(ipk+1),dx) - fpeak=df * (ipk+dx) - ap=(fpeak/fs+1.0/(2.0*NFFT)) - an=(fpeak/fs-1.0/(2.0*NFFT)) - sp=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*ap),-sin(xi*ap))) - sn=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*an),-sin(xi*an))) - fpeak=fpeak+fs*(abs(sp)-abs(sn))/(abs(sp)+abs(sn))/(2*NFFT) - xsum=0. - nsum=0 - do i=ia,ib - if(abs(i-ipk).gt.10) then - xsum=xsum+s(i) - nsum=nsum+1 - endif - enddo - ave=xsum/nsum - snr=db(smax/ave) - pave=db(ave) + 8.0 + + if(ipk.ge.1) then + call peakup(s(ipk-1),s(ipk),s(ipk+1),dx) + fpeak=df * (ipk+dx) + ap=(fpeak/fs+1.0/(2.0*NFFT)) + an=(fpeak/fs-1.0/(2.0*NFFT)) + sp=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*ap),-sin(xi*ap))) + sn=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*an),-sin(xi*an))) + fpeak=fpeak+fs*(abs(sp)-abs(sn))/(abs(sp)+abs(sn))/(2*NFFT) + xsum=0. + nsum=0 + do i=ia,ib + if(abs(i-ipk).gt.10) then + xsum=xsum+s(i) + nsum=nsum+1 + endif + enddo + ave=xsum/nsum + snr=db(smax/ave) + pave=db(ave) + 8.0 + else + snr=-99.9 + pave=-99.9 + fpeak=-99.9 + ferr=-99.9 + endif cflag=' ' if(snr.lt.20.0) cflag='*' n=n+1 @@ -77,7 +85,7 @@ subroutine freqcal(id2,k,nkhz,noffset,ntol,line) ncal=1 ferr=fpeak-noffset write(line,1100) nhr,nmin,nsec,nkhz,ncal,noffset,fpeak,ferr,pave, & - snr,cflag,char(0) + snr,cflag,char(0) 1100 format(i2.2,':',i2.2,':',i2.2,i7,i3,i6,2f10.3,2f7.1,2x,a1,a1) 900 return From 350391d66ef817444477b6408ce8defb0616d512 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 11 May 2019 16:43:48 +0100 Subject: [PATCH 266/367] AAdded audio o/p category to playback options --- Audio/tools/record_time_signal.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Audio/tools/record_time_signal.cpp b/Audio/tools/record_time_signal.cpp index c128e34ff..6a78a0a2c 100644 --- a/Audio/tools/record_time_signal.cpp +++ b/Audio/tools/record_time_signal.cpp @@ -101,12 +101,13 @@ class Playback final Q_OBJECT; public: - Playback (int start, BWFFile * input, QAudioDeviceInfo const& sink_device, int notify_interval, int buffer_size) + Playback (int start, BWFFile * input, QAudioDeviceInfo const& sink_device, int notify_interval, int buffer_size, QString const& category) : input_ {input} , sink_ {sink_device, input->format ()} , notify_interval_ {notify_interval} { if (buffer_size) sink_.setBufferSize (input_->format ().bytesForFrames (buffer_size)); + if (category.size ()) sink_.setCategory (category); if (notify_interval_) { sink_.setNotifyInterval (notify_interval); @@ -239,6 +240,9 @@ int main(int argc, char *argv[]) {{"P", "playback-device-number"}, app.translate ("main", "Playback to "), app.translate ("main", "device-number")}, + {{"C", "category"}, + app.translate ("main", "Playback "), + app.translate ("main", "category-name")}, {{"n", "notify-interval"}, app.translate ("main", "use notify signals every milliseconds, zero to use a timer"), app.translate ("main", "interval")}, @@ -375,7 +379,7 @@ int main(int argc, char *argv[]) } // run the application - Playback play {start, &input_file, sink, notify_interval, buffer_size}; + Playback play {start, &input_file, sink, notify_interval, buffer_size, parser.value ("category")}; QObject::connect (&play, &Playback::done, &app, &QCoreApplication::quit); return app.exec(); } From 2044b736dad8444272d3dd5f89cf63716ccbf073 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 20 May 2019 12:46:36 -0400 Subject: [PATCH 267/367] Fix a bug in calculation of S/N in JT4 mode. --- lib/jt4_decode.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/jt4_decode.f90 b/lib/jt4_decode.f90 index da0fbda68..ff0b33c4d 100644 --- a/lib/jt4_decode.f90 +++ b/lib/jt4_decode.f90 @@ -156,7 +156,7 @@ contains nfreqz=nint(dfx) call timer('sync4 ',1) - nsnr=nint(snrx) + nsnr=-26 if(sync.lt.syncmin) then if (associated (this%decode_callback)) then call this%decode_callback(nsnr,dtxz,nfreqz,.false.,csync, & @@ -166,6 +166,7 @@ contains endif ! We have achieved sync + nsnr=nint(snrsync - 22.9) decoded=blank deepmsg=blank special=' ' From 10aaec90e3309b77a6965c41193839c72ced7a3e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 21 May 2019 12:09:17 -0400 Subject: [PATCH 268/367] FT4 decodes using jt9 from command line now use ndepth=3. --- lib/jt9.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index a0ffcda31..68984e33a 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -157,7 +157,7 @@ program jt9 end do go to 999 endif - + iret=fftwf_init_threads() !Initialize FFTW threading ! Default to 1 thread, but use nthreads for the big ones @@ -179,6 +179,7 @@ program jt9 go to 999 endif + if(mode.eq.5) ndepth=3 allocate(shared_data) nflatten=0 From 6507fedec3d3aa21e5f3921fcab8690d155f7915 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 22 May 2019 02:23:04 +0100 Subject: [PATCH 269/367] Correct FT4 mode designation for ADIF v3.1.0 and later FT4 -> MFSK FT4 When reading ADIF records FT4 is acceptable as well. --- logbook/WorkedBefore.cpp | 7 ++++++- logbook/logbook.cpp | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/logbook/WorkedBefore.cpp b/logbook/WorkedBefore.cpp index daaf18fc7..31380b4c3 100644 --- a/logbook/WorkedBefore.cpp +++ b/logbook/WorkedBefore.cpp @@ -332,10 +332,15 @@ namespace // will parse a record { auto const& entity = prefixes->lookup (call); + auto mode = extractField (record, "MODE").toUpper (); + if (!mode.size () || "MFSK" == mode) + { + mode = extractField (record, "SUBMODE").toUpper (); + } worked.emplace (call.toUpper () , extractField (record, "GRIDSQUARE").left (4).toUpper () // not interested in 6-digit grids , extractField (record, "BAND").toUpper () - , extractField (record, "MODE").toUpper () + , mode , entity.entity_name , entity.continent , entity.CQ_zone diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index b84b65c1a..e4a04f64a 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -69,7 +69,14 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q QString t; t = "" + hisCall; t += " " + hisGrid; - t += " " + mode; + if (mode != "FT4") + { + t += " " + mode; + } + else + { + t += " MFSK " + mode; + } t += " " + rptSent; t += " " + rptRcvd; t += " " + dateTimeOn.date().toString("yyyyMMdd"); From 0d3be0128b1361bddf816279e08e4001f1c5d0a2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 22 May 2019 12:44:28 -0400 Subject: [PATCH 270/367] Change m_TRperiod from qint32 to double. Functional, but needs more testing! --- Detector.cpp | 6 ++- Detector.hpp | 7 +-- Modulator.cpp | 19 ++++--- Modulator.hpp | 10 ++-- widgets/astro.cpp | 7 +-- widgets/astro.h | 2 +- widgets/fastgraph.cpp | 4 +- widgets/fastgraph.h | 6 +-- widgets/fastplot.cpp | 6 +-- widgets/fastplot.h | 4 +- widgets/mainwindow.cpp | 109 +++++++++++++++++++++-------------------- widgets/mainwindow.h | 2 +- widgets/plotter.cpp | 8 +-- widgets/plotter.h | 4 +- widgets/widegraph.cpp | 16 +++--- widgets/widegraph.h | 7 +-- 16 files changed, 113 insertions(+), 104 deletions(-) diff --git a/Detector.cpp b/Detector.cpp index 69a10f5e8..3bf5cf410 100644 --- a/Detector.cpp +++ b/Detector.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "commons.h" #include "moc_Detector.cpp" @@ -10,7 +11,7 @@ extern "C" { void fil4_(qint16*, qint32*, qint16*, qint32*); } -Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds, +Detector::Detector (unsigned frameRate, double periodLengthInSeconds, unsigned downSampleFactor, QObject * parent) : AudioDevice (parent) , m_frameRate (frameRate) @@ -128,5 +129,6 @@ unsigned Detector::secondInPeriod () const qint64 now (QDateTime::currentMSecsSinceEpoch ()); unsigned secondInToday ((now % 86400000LL) / 1000); - return secondInToday % m_period; + unsigned secInPeriod = fmod(double(secondInToday),m_period); + return secInPeriod; } diff --git a/Detector.hpp b/Detector.hpp index d5e5b0a38..404951a90 100644 --- a/Detector.hpp +++ b/Detector.hpp @@ -22,9 +22,10 @@ public: // // the samplesPerFFT argument is the number after down sampling // - Detector (unsigned frameRate, unsigned periodLengthInSeconds, unsigned downSampleFactor = 4u, QObject * parent = 0); + Detector (unsigned frameRate, double periodLengthInSeconds, unsigned downSampleFactor = 4u, + QObject * parent = 0); - void setTRPeriod(unsigned p) {m_period=p;} + void setTRPeriod(double p) {m_period=p;} bool reset () override; Q_SIGNAL void framesWritten (qint64) const; @@ -43,7 +44,7 @@ private: unsigned secondInPeriod () const; unsigned m_frameRate; - unsigned m_period; + double m_period; unsigned m_downSampleFactor; qint32 m_samplesPerFFT; // after any down sampling qint32 m_ns; diff --git a/Modulator.cpp b/Modulator.cpp index 725de9e42..e5587120b 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -25,7 +25,7 @@ double constexpr Modulator::m_twoPi; // unsigned m_nspd=1.2*48000.0/wpm; // m_nspd=3072; //18.75 WPM -Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds, +Modulator::Modulator (unsigned frameRate, double periodLengthInSeconds, QObject * parent) : AudioDevice {parent} , m_quickClose {false} @@ -45,14 +45,13 @@ Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds, void Modulator::start (unsigned symbolsLength, double framesPerSymbol, double frequency, double toneSpacing, SoundOutput * stream, Channel channel, - bool synchronize, bool fastMode, double dBSNR, int TRperiod) + bool synchronize, bool fastMode, double dBSNR, double TRperiod) { Q_ASSERT (stream); // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; -// qDebug() << "ModStart" << symbolsLength << framesPerSymbol -// << frequency << toneSpacing; +// qDebug() << "ModStart" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.sss"); if(m_state != Idle) stop (); @@ -78,7 +77,7 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (m_snr > 1.0) m_fac = 3000.0 / m_snr; } - unsigned mstr = ms0 % (1000 * m_period); // ms in period + unsigned mstr = ms0 % int(1000.0*m_period); // ms in period // round up to an exact portion of a second that allows for startup // delays @@ -183,12 +182,12 @@ qint64 Modulator::readData (char * data, qint64 maxSize) if(!m_tuning) isym=m_ic/(4.0*m_nsps); // Actual fsample=48000 bool slowCwId=((isym >= m_symbolsLength) && (icw[0] > 0)) && (!m_bFastMode); - if(m_TRperiod==3) slowCwId=false; + if(m_TRperiod==3.0) slowCwId=false; bool fastCwId=false; static bool bCwId=false; qint64 ms = QDateTime::currentMSecsSinceEpoch(); - float tsec=0.001*(ms % (1000*m_TRperiod)); - if(m_bFastMode and (icw[0]>0) and (tsec>(m_TRperiod-5.0))) fastCwId=true; + float tsec=0.001*(ms % int(1000*m_TRperiod)); + if(m_bFastMode and (icw[0]>0) and (tsec > (m_TRperiod-5.0))) fastCwId=true; if(!m_bFastMode) m_nspd=2560; // 22.5 WPM // qDebug() << "Mod A" << m_ic << isym << tsec; @@ -259,7 +258,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) i1= m_symbolsLength * 4.0 * m_nsps; } if(m_bFastMode and !m_tuning) { - i1=m_TRperiod*48000 - 24000; + i1=m_TRperiod*48000.0 - 24000.0; i0=i1-816; } @@ -267,7 +266,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize) for (unsigned i = 0; i < numFrames && m_ic <= i1; ++i) { isym=0; - if(!m_tuning and m_TRperiod!=3) isym=m_ic/(4.0*m_nsps); //Actual fsample=48000 + if(!m_tuning and m_TRperiod!=3.0) isym=m_ic/(4.0*m_nsps); //Actual fsample=48000 if(m_bFastMode) isym=isym%m_symbolsLength; if (isym != m_isym0 || m_frequency != m_frequency0) { if(itone[0]>=100) { diff --git a/Modulator.hpp b/Modulator.hpp index e8df7f2dd..3371cbe5e 100644 --- a/Modulator.hpp +++ b/Modulator.hpp @@ -23,7 +23,7 @@ class Modulator public: enum ModulatorState {Synchronizing, Active, Idle}; - Modulator (unsigned frameRate, unsigned periodLengthInSeconds, QObject * parent = nullptr); + Modulator (unsigned frameRate, double periodLengthInSeconds, QObject * parent = nullptr); void close () override; @@ -31,14 +31,14 @@ public: double frequency () const {return m_frequency;} bool isActive () const {return m_state != Idle;} void setSpread(double s) {m_fSpread=s;} - void setTRPeriod(unsigned p) {m_period=p;} + void setTRPeriod(double p) {m_period=p;} void set_nsym(int n) {m_symbolsLength=n;} void set_ms0(qint64 ms) {m_ms0=ms;} Q_SLOT void start (unsigned symbolsLength, double framesPerSymbol, double frequency, double toneSpacing, SoundOutput *, Channel = Mono, bool synchronize = true, bool fastMode = false, - double dBSNR = 99., int TRperiod=60); + double dBSNR = 99., double TRperiod=60.0); Q_SLOT void stop (bool quick = false); Q_SLOT void tune (bool newState = true); Q_SLOT void setFrequency (double newFrequency) {m_frequency = newFrequency;} @@ -72,14 +72,14 @@ private: double m_fac; double m_toneSpacing; double m_fSpread; + double m_TRperiod; + double m_period; qint64 m_silentFrames; qint64 m_ms0; - qint32 m_TRperiod; qint16 m_ramp; unsigned m_frameRate; - unsigned m_period; ModulatorState volatile m_state; bool volatile m_tuning; diff --git a/widgets/astro.cpp b/widgets/astro.cpp index 4ee55da4a..c1eee0157 100644 --- a/widgets/astro.cpp +++ b/widgets/astro.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "commons.h" #include "MessageBox.hpp" @@ -90,7 +91,7 @@ void Astro::write_settings () } auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const& hisgrid, Frequency freq, - bool dx_is_self, bool bTx, bool no_tx_QSY, int TR_period) -> Correction + bool dx_is_self, bool bTx, bool no_tx_QSY, double TR_period) -> Correction { Frequency freq_moon {freq}; double azsun,elsun,azmoon,elmoon,azmoondx,elmoondx; @@ -211,8 +212,8 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const // // use a base time of (secs-since-epoch + 2) so as to be sure // we do the next period if we calculate just before it starts - auto sec_since_epoch = t.toMSecsSinceEpoch () / 1000 + 2; - auto target_sec = sec_since_epoch - sec_since_epoch % TR_period + TR_period / 2; + auto sec_since_epoch = t.toMSecsSinceEpoch ()/1000 + 2; + auto target_sec = sec_since_epoch - fmod(double(sec_since_epoch),TR_period) + 0.5*TR_period; auto target_date_time = QDateTime::fromMSecsSinceEpoch (target_sec * 1000, Qt::UTC); QString date {target_date_time.date().toString("yyyy MMM dd").trimmed ()}; QString utc {target_date_time.time().toString().trimmed ()}; diff --git a/widgets/astro.h b/widgets/astro.h index 03d8c66c6..4f7f71d5b 100644 --- a/widgets/astro.h +++ b/widgets/astro.h @@ -44,7 +44,7 @@ public: bool dx_is_self, bool bTx, bool no_tx_QSY, - int TR_period); + double TR_period); bool doppler_tracking () const; Q_SLOT void nominal_frequency (Frequency rx, Frequency tx); diff --git a/widgets/fastgraph.cpp b/widgets/fastgraph.cpp index e599138f2..9efe5fc63 100644 --- a/widgets/fastgraph.cpp +++ b/widgets/fastgraph.cpp @@ -86,9 +86,9 @@ void FastGraph::on_greenZeroSlider_valueChanged(int value) ui->fastPlot->draw(); } -void FastGraph::setTRPeriod(int n) +void FastGraph::setTRPeriod(double p) { - m_TRperiod=n; + m_TRperiod=p; ui->fastPlot->setTRperiod(m_TRperiod); } diff --git a/widgets/fastgraph.h b/widgets/fastgraph.h index 7ed32671f..b5f7c0b8d 100644 --- a/widgets/fastgraph.h +++ b/widgets/fastgraph.h @@ -22,7 +22,7 @@ public: void plotSpec(bool diskData, int UTCdisk); void saveSettings(); - void setTRPeriod(int n); + void setTRPeriod(double p); void setMode(QString mode); signals: @@ -40,8 +40,8 @@ protected: private: QSettings * m_settings; - float m_ave; - qint32 m_TRperiod; + float m_ave; + double m_TRperiod; QScopedPointer ui; }; diff --git a/widgets/fastplot.cpp b/widgets/fastplot.cpp index 1437834d8..a388f0ac7 100644 --- a/widgets/fastplot.cpp +++ b/widgets/fastplot.cpp @@ -135,11 +135,11 @@ void FPlotter::setGreenZero(int n) m_bPaint2=true; } -void FPlotter::setTRperiod(int n) +void FPlotter::setTRperiod(double p) { - m_TRperiod=n; + m_TRperiod=p; m_pixPerSecond=12000.0/512.0; - if(m_TRperiod<30) m_pixPerSecond=12000.0/256.0; + if(m_TRperiod<30.0) m_pixPerSecond=12000.0/256.0; drawScale(); update(); } diff --git a/widgets/fastplot.h b/widgets/fastplot.h index b13913388..f24fcc24e 100644 --- a/widgets/fastplot.h +++ b/widgets/fastplot.h @@ -37,7 +37,7 @@ public: void setPlotZero(int plotZero); void setPlotGain(int plotGain); void setGreenZero(int n); - void setTRperiod(int n); + void setTRperiod(double p); void drawScale(); void setMode(QString mode); @@ -68,6 +68,7 @@ private: QString m_mode; double m_pixPerSecond; + double m_TRperiod; qint32 m_hdivs; qint32 m_h; @@ -75,7 +76,6 @@ private: qint32 m_h2; QPixmap m_HorizPixmap; qint32 m_jh0; - qint32 m_TRperiod; bool m_bPaint2; }; diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 88fe0016e..d40e0d1c9 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -246,7 +246,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_logDlg (new LogQSO (program_title (), m_settings, &m_config, nullptr)), m_lastDialFreq {0}, m_dialFreqRxWSPR {0}, - m_detector {new Detector {RX_SAMPLE_RATE, NTMAX, downSampleFactor}}, + m_detector {new Detector {RX_SAMPLE_RATE, double(NTMAX), downSampleFactor}}, m_FFTSize {6192 / 2}, // conservative value to avoid buffer overruns m_soundInput {new SoundInput}, m_modulator {new Modulator {TX_SAMPLE_RATE, NTMAX}}, @@ -257,6 +257,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_freqTxNominal {0}, m_s6 {0.}, m_tRemaining {0.}, + m_TRperiod {60.0}, m_DTtol {3.0}, m_waterfallAvg {1}, m_ntx {1}, @@ -268,7 +269,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_nutc0 {999999}, m_ntr {0}, m_tx {0}, - m_TRperiod {60}, m_inGain {0}, m_secID {0}, m_idleMinutes {0}, @@ -877,7 +877,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, connect (&m_wav_future_watcher, &QFutureWatcher::finished, this, &MainWindow::diskDat); connect(&watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done())); -// Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ()); Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, m_detector, m_downSampleFactor, m_config.audio_input_channel ()); Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered); Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT); @@ -1355,7 +1354,7 @@ void MainWindow::dataSink(qint64 frames) } // Get power, spectrum, and ihsym - int trmin=m_TRperiod/60; + int trmin=m_TRperiod/60.0; // int k (frames - 1); dec_data.params.nfa=m_wideGraph->nStartFreq(); dec_data.params.nfb=m_wideGraph->Fmax(); @@ -1452,14 +1451,15 @@ void MainWindow::dataSink(qint64 frames) if(!m_mode.startsWith ("WSPR")) decode(); //Start decoder if(!m_diskData) { //Always save; may delete later - if(m_mode=="FT8" or m_mode=="FT4") { - int n=now.time().second() % m_TRperiod; + int n=fmod(double(now.time().second()),m_TRperiod); if(n<(m_TRperiod/2)) n=n+m_TRperiod; auto const& period_start=now.addSecs(-n); m_fnameWE=m_config.save_directory().absoluteFilePath (period_start.toString("yyMMdd_hhmmss")); +// qDebug() << "datasink 2" << QDateTime::currentDateTimeUtc().toString("ss.zzz") +// << n << period_start.toString("ss.zzz"); } else { - auto const& period_start = now.addSecs (-(now.time ().minute () % (m_TRperiod / 60)) * 60); + auto const& period_start = now.addSecs (-(now.time ().minute () % (int(m_TRperiod) / 60)) * 60); m_fnameWE=m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmm")); } m_fileToSave.clear (); @@ -1589,7 +1589,7 @@ void MainWindow::fastSink(qint64 frames) int ihr=tnow.toString("hh").toInt(); int imin=tnow.toString("mm").toInt(); int isec=tnow.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; + isec=isec - fmod(double(isec),m_TRperiod); int nutc0=10000*ihr + 100*imin + isec; if(m_diskData) nutc0=m_UTCdisk; char line[80]; @@ -1669,7 +1669,7 @@ void MainWindow::fastSink(qint64 frames) if(decodeNow or m_bFastDone) { if(!m_diskData) { QDateTime now {QDateTime::currentDateTimeUtc()}; - int n=now.time().second() % m_TRperiod; + int n=fmod(double(now.time().second()),m_TRperiod); if(n<(m_TRperiod/2)) n=n+m_TRperiod; auto const& period_start = now.addSecs (-n); m_fnameWE = m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmmss")); @@ -1679,11 +1679,11 @@ void MainWindow::fastSink(qint64 frames) // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], m_TRperiod*12000, m_config.my_callsign(), + this, m_fnameWE, &dec_data.d2[0], int(m_TRperiod*12000.0), m_config.my_callsign(), m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); } if(m_mode!="MSK144") { - killFileTimer.start (3*1000*m_TRperiod/4); //Kill 3/4 period from now + killFileTimer.start (int(750.0*m_TRperiod)); //Kill 3/4 period from now } } m_bFastDone=false; @@ -2218,7 +2218,6 @@ void MainWindow::createStatusBar() //createStatusBar statusBar()->addPermanentWidget(&progressBar); progressBar.setMinimumSize (QSize {150, 18}); - progressBar.setFormat ("%v/%m"); statusBar ()->addPermanentWidget (&watchdog_label); update_watchdog_label (); @@ -2631,7 +2630,8 @@ void MainWindow::read_wav_file (QString const& fname) bool ok=file.open (BWFFile::ReadOnly); if(ok) { auto bytes_per_frame = file.format ().bytesPerFrame (); - qint64 max_bytes = std::min (std::size_t (m_TRperiod * RX_SAMPLE_RATE), + int nsamples=m_TRperiod * RX_SAMPLE_RATE; + qint64 max_bytes = std::min (std::size_t (nsamples), sizeof (dec_data.d2) / sizeof (dec_data.d2[0]))* bytes_per_frame; auto n = file.read (reinterpret_cast (dec_data.d2), std::min (max_bytes, file.size ())); @@ -2822,7 +2822,7 @@ void MainWindow::decode() //decode() } m_msec0=QDateTime::currentMSecsSinceEpoch(); - if(!m_dataAvailable or m_TRperiod==0) return; + if(!m_dataAvailable or m_TRperiod==0.0) return; ui->DecodeButton->setChecked (true); if(!dec_data.params.nagain && m_diskData && !m_bFastMode && m_mode!="FT8" && m_mode!="FT4") { dec_data.params.nutc=dec_data.params.nutc/100; @@ -2832,14 +2832,16 @@ void MainWindow::decode() //decode() int imin=ms/60000; int ihr=imin/60; imin=imin % 60; - if(m_TRperiod>=60) imin=imin - (imin % (m_TRperiod/60)); + if(m_TRperiod>=60) imin=imin - (imin % (int(m_TRperiod)/60)); dec_data.params.nutc=100*ihr + imin; if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9 or m_mode=="FT8" or m_mode=="FT4") { - QDateTime t=QDateTime::currentDateTimeUtc().addSecs(2-m_TRperiod); + qint64 ms=1000.0*(2.0-m_TRperiod); + if(m_mode=="FT4") ms=1000.0*(3.0-m_TRperiod); + QDateTime t=QDateTime::currentDateTimeUtc().addMSecs(ms); ihr=t.toString("hh").toInt(); imin=t.toString("mm").toInt(); int isec=t.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; + if(m_mode!="FT4") isec=isec - fmod(double(isec),m_TRperiod); dec_data.params.nutc=10000*ihr + 100*imin + isec; } } @@ -2849,7 +2851,7 @@ void MainWindow::decode() //decode() int ihr=t.toString("hh").toInt(); int imin=t.toString("mm").toInt(); int isec=t.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; + isec=isec - fmod(double(isec),m_TRperiod); dec_data.params.nutc=10000*ihr + 100*imin + isec; } if(m_nPick==2) dec_data.params.nutc=m_nutc0; @@ -2948,8 +2950,8 @@ void MainWindow::decode() //decode() } static short int d2b[360000]; narg[0]=dec_data.params.nutc; - if(m_kdone>12000*m_TRperiod) { - m_kdone=12000*m_TRperiod; + if(m_kdone>int(12000.0*m_TRperiod)) { + m_kdone=int(12000.0*m_TRperiod); } narg[1]=m_kdone; narg[2]=m_nSubMode; @@ -2968,9 +2970,10 @@ void MainWindow::decode() //decode() narg[12]=0; narg[13]=-1; narg[14]=m_config.aggressive(); + int nTRperiod=m_TRperiod; memcpy(d2b,dec_data.d2,2*360000); watcher3.setFuture (QtConcurrent::run (std::bind (fast_decode_,&d2b[0], - &narg[0],&m_TRperiod,&m_msg[0][0], + &narg[0],&nTRperiod,&m_msg[0][0], dec_data.params.mycall,dec_data.params.hiscall,8000,12,12))); } else { memcpy(to, from, qMin(mem_jt9->size(), size)); @@ -3055,7 +3058,7 @@ void MainWindow::readFromStdout() //readFromStdout if(line_read.indexOf("") >= 0) { if(m_mode=="QRA64") m_wideGraph->drawRed(0,0); m_bDecoded = line_read.mid(20).trimmed().toInt() > 0; - int mswait=3*1000*m_TRperiod/4; + int mswait=750.0*m_TRperiod; if(!m_diskData) killFileTimer.start(mswait); //Kill in 3/4 period decodeDone (); m_startAnother=m_loopall; @@ -3081,7 +3084,7 @@ void MainWindow::readFromStdout() //readFromStdout write_all("Rx",line_read.trimmed()); if (m_config.insert_blank () && m_blankLine && SpecOp::FOX != m_config.special_op_id()) { QString band; - if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*m_TRperiod/4) { + if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4) { band = ' ' + m_config.bands ()->find (m_freqNominal); } ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-')); @@ -3241,7 +3244,7 @@ void MainWindow::readFromStdout() //readFromStdout } // extract details and send to PSKreporter int nsec=QDateTime::currentMSecsSinceEpoch()/1000-m_secBandChanged; - bool okToPost=(nsec>(4*m_TRperiod)/5); + bool okToPost=(nsec > int(4*m_TRperiod)/5); if (stdMsg && okToPost) pskPost(decodedtext); if((m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64") and m_msgAvgWidget!=NULL) { @@ -3421,7 +3424,7 @@ void MainWindow::guiUpdate() double txDuration; QString rt; - if(m_TRperiod==0) m_TRperiod=60; + if(m_TRperiod==0) m_TRperiod=60.0; txDuration=0.0; if(m_modeTx=="FT4") txDuration=0.35 + 105*512/12000.0; // FT4 if(m_modeTx=="FT8") txDuration=1.0 + 79*1920/12000.0; // FT8 @@ -3451,8 +3454,8 @@ void MainWindow::guiUpdate() double tsec=0.001*ms; double t2p=fmod(tsec,2*m_TRperiod); m_s6=fmod(tsec,6.0); - m_nseq = nsec % m_TRperiod; - m_tRemaining=m_TRperiod - fmod(tsec,double(m_TRperiod)); + m_nseq = fmod(double(nsec),m_TRperiod); + m_tRemaining=m_TRperiod - fmod(tsec,m_TRperiod); if(m_mode=="Echo") { txDuration=2.4; @@ -3495,8 +3498,7 @@ void MainWindow::guiUpdate() // Check for "txboth" (testing purposes only) QFile f(m_appDir + "/txboth"); - if(f.exists() and - fmod(tsec,m_TRperiod)<(1.0 + 85.0*m_nsps/12000.0)) m_bTxTime=true; + if(f.exists() and fmod(tsec,m_TRperiod) < (1.0 + 85.0*m_nsps/12000.0)) m_bTxTime=true; // Don't transmit another mode in the 30 m WSPR sub-band Frequency onAirFreq = m_freqNominal + ui->TxFreqSpinBox->value(); @@ -3539,7 +3541,7 @@ void MainWindow::guiUpdate() tx_watchdog (true); // disable transmit } - float fTR=float((ms%(1000*m_TRperiod)))/(1000*m_TRperiod); + float fTR=float((ms%int(1000.0*m_TRperiod)))/int(1000.0*m_TRperiod); QString txMsg; if(m_ntx == 1) txMsg=ui->tx1->text(); @@ -3959,17 +3961,21 @@ void MainWindow::guiUpdate() if(tHound >= 120 and m_ntx==1) auto_tx_mode(false); } -// progressBar.setVisible(!(m_mode=="FT4")); progressBar.setVisible(true); + progressBar.setFormat ("%v/%m"); if(m_auto and m_mode=="Echo" and m_bEchoTxOK) { - progressBar.setMaximum(6); + progressBar.setMaximum(3); progressBar.setValue(int(m_s6)); } -// if(m_mode!="Echo" and m_mode!="FT4") { if(m_mode!="Echo") { if(m_monitoring or m_transmitting) { progressBar.setMaximum(m_TRperiod); int isec=int(fmod(tsec,m_TRperiod)); + if(m_TRperiod-int(m_TRperiod)>0.0) { + QString progBarLabel; + progBarLabel.sprintf("%d/%3.1f",isec,m_TRperiod); + progressBar.setFormat (progBarLabel); + } progressBar.setValue(isec); } else { progressBar.setValue(0); @@ -4152,7 +4158,8 @@ void MainWindow::set_dateTimeQSO(int m_ntx) } else { // we also take of m_TRperiod/2 to allow for late clicks auto now = QDateTime::currentDateTimeUtc(); - m_dateTimeQSOOn = now.addSecs (-(m_ntx - 2) * m_TRperiod - (now.time ().second () % m_TRperiod)); + m_dateTimeQSOOn = now.addSecs (-(m_ntx - 2) * int(m_TRperiod) - + int(fmod(double(now.time().second()),m_TRperiod))); } } @@ -4405,7 +4412,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie } } - int nmod = message.timeInSeconds () % (2*m_TRperiod); + int nmod = fmod(double(message.timeInSeconds()),2.0*m_TRperiod); m_txFirst=(nmod!=0); if( SpecOp::HOUND == m_config.special_op_id() ) m_txFirst=false; //Hound must not transmit first if( SpecOp::FOX == m_config.special_op_id() ) m_txFirst=true; //Fox must always transmit first @@ -5632,7 +5639,7 @@ void MainWindow::on_actionFT4_triggered() { m_mode="FT4"; m_modeTx="FT4"; - m_TRperiod=6; + m_TRperiod=7.5; bool bVHF=m_config.enable_VHF_features(); m_bFast9=false; m_bFastMode=false; @@ -5693,7 +5700,7 @@ void MainWindow::on_actionFT8_triggered() m_wideGraph->setModeTx(m_modeTx); VHF_features_enabled(bVHF); ui->cbAutoSeq->setChecked(true); - m_TRperiod=15; + m_TRperiod=15.0; m_fastGraph->hide(); m_wideGraph->show(); ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); @@ -5782,7 +5789,7 @@ void MainWindow::on_actionJT4_triggered() WSPR_config(false); switch_mode (Modes::JT4); m_modeTx="JT4"; - m_TRperiod=60; + m_TRperiod=60.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -5855,7 +5862,7 @@ void MainWindow::on_actionJT9_triggered() ui->decodedTextLabel2->setText("UTC dB T Freq Message"); } else { ui->cbAutoSeq->setChecked(false); - m_TRperiod=60; + m_TRperiod=60.0; ui->decodedTextLabel->setText("UTC dB DT Freq Message"); ui->decodedTextLabel2->setText("UTC dB DT Freq Message"); } @@ -5884,7 +5891,7 @@ void MainWindow::on_actionJT9_JT65_triggered() m_modeTx="JT9"; } m_nSubMode=0; //Dual-mode always means JT9 and JT65A - m_TRperiod=60; + m_TRperiod=60.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; @@ -5926,7 +5933,7 @@ void MainWindow::on_actionJT65_triggered() WSPR_config(false); switch_mode (Modes::JT65); if(m_modeTx!="JT65") on_pbTxMode_clicked(); - m_TRperiod=60; + m_TRperiod=60.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -6102,7 +6109,7 @@ void MainWindow::on_actionWSPR_triggered() WSPR_config(true); switch_mode (Modes::WSPR); m_modeTx="WSPR"; - m_TRperiod=120; + m_TRperiod=120.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -6130,7 +6137,7 @@ void MainWindow::on_actionWSPR_LF_triggered() m_mode="WSPR-LF"; switch_mode (Modes::WSPR); m_modeTx="WSPR-LF"; - m_TRperiod=240; + m_TRperiod=240.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_hsymStop=813; @@ -6146,7 +6153,7 @@ void MainWindow::on_actionEcho_triggered() on_actionJT4_triggered(); m_mode="Echo"; ui->actionEcho->setChecked(true); - m_TRperiod=3; + m_TRperiod=3.0; m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_nsps=6912; //For symspec only @@ -6425,7 +6432,6 @@ void MainWindow::on_bandComboBox_activated (int index) void MainWindow::band_changed (Frequency f) { -// bool monitor_off=!m_monitoring; // Set the attenuation value if options are checked QString curBand = ui->bandComboBox->currentText(); if (m_config.pwrBandTxMemory() && !m_tune) { @@ -6461,7 +6467,6 @@ void MainWindow::band_changed (Frequency f) if(r<0.9 or r>1.1) m_bVHFwarned=false; setRig (f); setXIT (ui->TxFreqSpinBox->value ()); -// if(monitor_off) monitor(false); } } @@ -7245,7 +7250,7 @@ void MainWindow::on_sbSubmode_valueChanged(int n) on_cbFast9_clicked(false); ui->cbFast9->setEnabled(false); ui->sbTR->setVisible(false); - m_TRperiod=60; + m_TRperiod=60.0; } else { ui->cbFast9->setEnabled(true); } @@ -7267,9 +7272,9 @@ void MainWindow::on_cbFast9_clicked(bool b) if(b) { m_TRperiod = ui->sbTR->value (); } else { - m_TRperiod=60; + m_TRperiod=60.0; } - progressBar.setMaximum(m_TRperiod); + progressBar.setMaximum(int(m_TRperiod)); m_wideGraph->setPeriod(m_TRperiod,m_nsps); fast_config(b); statusChanged (); @@ -7813,7 +7818,7 @@ void MainWindow::setRig (Frequency f) void MainWindow::fastPick(int x0, int x1, int y) { float pixPerSecond=12000.0/512.0; - if(m_TRperiod<30) pixPerSecond=12000.0/256.0; + if(m_TRperiod<30.0) pixPerSecond=12000.0/256.0; if(m_mode!="ISCAT" and m_mode!="MSK144") return; if(!m_decoderBusy) { dec_data.params.newdat=0; @@ -8014,7 +8019,7 @@ void MainWindow::write_transmit_entry (QString const& file_name) { QTextStream out(&f); auto time = QDateTime::currentDateTimeUtc (); - time = time.addSecs (-(time.time ().second () % m_TRperiod)); + time = time.addSecs (-fmod(double(time.time().second()),m_TRperiod)); out << time.toString("yyMMdd_hhmmss") << " Transmitting " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz " << m_modeTx @@ -8677,7 +8682,7 @@ void MainWindow::write_all(QString txRx, QString message) t.sprintf("%5d",ui->TxFreqSpinBox->value()); if (txRx=="Tx") msg=" 0 0.0" + t + " " + message; auto time = QDateTime::currentDateTimeUtc (); - time = time.addSecs(-(time.time().second() % m_TRperiod)); + time = time.addSecs(-fmod(double(time.time().second()),m_TRperiod)); t.sprintf("%10.3f ",m_freqNominal/1.e6); if (m_diskData) { if (m_fileDateTime.size()==11) { diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index eada752bc..ffa71c1fe 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -406,6 +406,7 @@ private: double m_s6; double m_tRemaining; + double m_TRperiod; float m_DTtol; float m_t0; @@ -428,7 +429,6 @@ private: qint32 m_ntr; qint32 m_tx; qint32 m_hsym; - qint32 m_TRperiod; qint32 m_nsps; qint32 m_hsymStop; qint32 m_inGain; diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 98c1af168..85c662a7a 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -241,9 +241,9 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) painter1.setPen(Qt::white); QString t; qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - int n=(ms/1000) % m_TRperiod; + int n = fmod(0.001*ms,m_TRperiod); QDateTime t1=QDateTime::currentDateTimeUtc().addSecs(-n); - if(m_TRperiod < 60 or m_mode=="FT4") { + if(m_TRperiod<60.0) { t=t1.toString("hh:mm:ss") + " " + m_rxBand; } else { t=t1.toString("hh:mm") + " " + m_rxBand; @@ -721,9 +721,9 @@ void CPlotter::mouseDoubleClickEvent (QMouseEvent * event) } } -void CPlotter::setNsps(int ntrperiod, int nsps) //setNsps +void CPlotter::setNsps(double trperiod, int nsps) //setNsps { - m_TRperiod=ntrperiod; + m_TRperiod=trperiod; m_nsps=nsps; m_fftBinWidth=1500.0/2048.0; if(m_nsps==15360) m_fftBinWidth=1500.0/2048.0; diff --git a/widgets/plotter.h b/widgets/plotter.h index e243c1777..2cbfd202b 100644 --- a/widgets/plotter.h +++ b/widgets/plotter.h @@ -56,7 +56,7 @@ public: void DrawOverlay(); int rxFreq(); void setFsample(int n); - void setNsps(int ntrperiod, int nsps); + void setNsps(double trperiod, int nsps); void setTxFreq(int n); void setMode(QString mode); void setSubMode(int n); @@ -145,6 +145,7 @@ private: double m_fftBinWidth; double m_dialFreq; double m_xOffset; + double m_TRperiod; float m_sum[2048]; @@ -161,7 +162,6 @@ private: qint32 m_h; qint32 m_h1; qint32 m_h2; - qint32 m_TRperiod; qint32 m_rxFreq; qint32 m_txFreq; qint32 m_fMin; diff --git a/widgets/widegraph.cpp b/widgets/widegraph.cpp index 1f3110cee..6234f731a 100644 --- a/widgets/widegraph.cpp +++ b/widgets/widegraph.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "ui_widegraph.h" #include "commons.h" #include "Configuration.hpp" @@ -23,7 +24,7 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) : ui(new Ui::WideGraph), m_settings (settings), m_palettes_path {":/Palettes"}, - m_ntr0 {0}, + m_tr0 {0.0}, m_n {0}, m_bHaveTransmitted {false} { @@ -186,9 +187,8 @@ void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dat // Time according to this computer qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - int ntr = (ms/1000) % m_TRperiod; - if((ndiskdata && ihsym <= m_waterfallAvg) || (!ndiskdata && - (ntrwidePlot->draw(swide,true,false); } } @@ -278,11 +278,11 @@ int WideGraph::fSpan() return ui->widePlot->fSpan (); } -void WideGraph::setPeriod(int ntrperiod, int nsps) //SetPeriod +void WideGraph::setPeriod(double trperiod, int nsps) //SetPeriod { - m_TRperiod=ntrperiod; + m_TRperiod=trperiod; m_nsps=nsps; - ui->widePlot->setNsps(ntrperiod, nsps); + ui->widePlot->setNsps(trperiod, nsps); } void WideGraph::setTxFreq(int n) //setTxFreq diff --git a/widgets/widegraph.h b/widgets/widegraph.h index 2b172ef7d..c87bab050 100644 --- a/widgets/widegraph.h +++ b/widgets/widegraph.h @@ -35,7 +35,7 @@ public: int fSpan(); void saveSettings(); void setFsample(int n); - void setPeriod(int ntrperiod, int nsps); + void setPeriod(double trperiod, int nsps); void setTxFreq(int n); void setMode(QString mode); void setSubMode(int n); @@ -95,10 +95,11 @@ private: WFPalette m_userPalette; QHash m_fMinPerBand; + double m_tr0; + double m_TRperiod; + qint32 m_waterfallAvg; - qint32 m_TRperiod; qint32 m_nsps; - qint32 m_ntr0; qint32 m_fMax; qint32 m_nSubMode; qint32 m_nsmo; From 912e40876a6c58ee5be719121eeb27dc161636bc Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 22 May 2019 13:06:16 -0400 Subject: [PATCH 271/367] Disable the "not_GA_warning_message", for now. --- widgets/mainwindow.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index d40e0d1c9..b7a600bd8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -989,6 +989,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, void MainWindow::not_GA_warning_message () { + /* MessageBox::critical_message (this, "

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 aY$L@cEe0f>N7kKb(y8Iop8K7IU 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 From 637d4d04114a8b75c91a6ec2612c9b5c850bd2b4 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 24 May 2019 08:31:56 -0400 Subject: [PATCH 282/367] "Force Call 1st" must also force AutoSeq. --- widgets/mainwindow.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 23fa97772..54422a8b7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -4076,7 +4076,10 @@ void MainWindow::startTx2() t=ui->tx6->text(); if(t.mid(0,1)=="#") snr=t.mid(1,5).toDouble(); if(snr>0.0 or snr < -50.0) snr=99.0; - if((m_ntx==6 or m_ntx==7) and m_config.force_call_1st()) ui->cbFirst->setChecked(true); + if((m_ntx==6 or m_ntx==7) and m_config.force_call_1st()) { + ui->cbAutoSeq->setChecked(true); + ui->cbFirst->setChecked(true); + } transmit (snr); ui->signal_meter_widget->setValue(0,0); if(m_mode=="Echo" and !m_tune) m_bTransmittedEcho=true; @@ -4608,7 +4611,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie logQSOTimer.start(0); m_ntx=6; ui->txrb6->setChecked(true); - ui->cbFirst->setChecked(false); } else { m_ntx=5; ui->txrb5->setChecked(true); From d5cd9db6961983576bf3e1475cea2b5356b52f48 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 24 May 2019 10:42:30 -0400 Subject: [PATCH 283/367] In FT4 mode, Shift+F11/F12 should move Tx freq by +/- 100 Hz. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 54422a8b7..60a331111 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1986,7 +1986,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { int offset=60; - if(m_mode=="FT4") offset=120; + if(m_mode=="FT4") offset=100; ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()-offset); } else{ bumpFqso(n); @@ -2002,7 +2002,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { int offset=60; - if(m_mode=="FT4") offset=120; + if(m_mode=="FT4") offset=100; ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()+offset); } else { bumpFqso(n); From a521000775199f1e67036ea74867518c6d8ba8f7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 24 May 2019 11:04:30 -0400 Subject: [PATCH 284/367] No need to test FT4 and FT8 messages for trailing "f" or "d" indicators. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 60a331111..99bcc410d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3070,7 +3070,7 @@ void MainWindow::readFromStdout() //readFromStdout } return; } else { - if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") { + if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64") { int n=line_read.indexOf("f"); if(n<0) n=line_read.indexOf("d"); if(n>0) { From 883c914d29693bca8c269339df2c6823187fb700 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 24 May 2019 20:09:00 -0500 Subject: [PATCH 285/367] Make DT=0 mean that the first full symbol starts at t=0.5s. Formerly DT=0 corresponded to the beginning of the ramp-up symbol. Fix a bug that caused signals with large DT to wrap around instead of truncating them. --- lib/ft4/ft4sim.f90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index e35e5ad8a..959cf423c 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -110,8 +110,10 @@ program ft4sim c0((NN+1)*NSPS:(NN+2)*NSPS-1)=c0((NN+1)*NSPS:(NN+2)*NSPS-1)*(1.0+cos(twopi*(/(i,i=0,NSPS-1)/)/(2.0*NSPS) ))/2.0 c0((NN+2)*NSPS:)=0. - k=nint((xdt+0.5)/dt) + k=nint((xdt+0.5)/dt)-NSPS c0=cshift(c0,-k) + if(k.gt.0) c0(0:k-1)=0.0 + if(k.lt.0) c0(NZZ+k:NZZ-1)=0.0 do ifile=1,nfiles c=c0 From 6dbaa28a014fcb2a2a2293af2ec69d1e422a348d Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 24 May 2019 20:11:20 -0500 Subject: [PATCH 286/367] Fix DT search range so that it includes DT= +/-1.0. --- lib/ft4_decode.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index cf4acaab7..001ee4c33 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -255,8 +255,8 @@ contains idfmin=-12 idfmax=12 idfstp=3 - ibmin=-333 - ibmax=1000 + ibmin=-344 + ibmax=1012 ibstp=4 else idfmin=idfbest-4 From 3bc5e538d29e97ca1fc1981af85094812fdde260 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 25 May 2019 10:58:04 -0500 Subject: [PATCH 287/367] FT4: Implement polynomial baseline fit. --- CMakeLists.txt | 1 + lib/ft4/ft4_baseline.f90 | 49 ++++++++++++++++++++++++++++++++++++++ lib/ft4/ft4sim_mult.f90 | 2 -- lib/ft4/getcandidates4.f90 | 21 +++++----------- 4 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 lib/ft4/ft4_baseline.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 787ac38e9..74f382421 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,6 +387,7 @@ set (wsjt_FSRCS lib/azdist.f90 lib/badmsg.f90 lib/ft8/baseline.f90 + lib/ft4/ft4_baseline.f90 lib/bpdecode40.f90 lib/bpdecode128_90.f90 lib/ft8/bpdecode174_91.f90 diff --git a/lib/ft4/ft4_baseline.f90 b/lib/ft4/ft4_baseline.f90 new file mode 100644 index 000000000..afdbeb5eb --- /dev/null +++ b/lib/ft4/ft4_baseline.f90 @@ -0,0 +1,49 @@ +subroutine ft4_baseline(s,nfa,nfb,sbase) + +! Fit baseline to spectrum (for FT8) +! Input: s(npts) Linear scale in power +! Output: sbase(npts) Baseline + + include 'ft4_params.f90' + implicit real*8 (a-h,o-z) + real*4 s(NH1) + real*4 sbase(NH1) + real*4 base + real*8 x(1000),y(1000),a(5) + data nseg/10/,npct/10/ + + df=12000.0/NFFT1 !5.21 Hz + ia=max(nint(200.0/df),nfa) + ib=min(NH1,nfb) + do i=ia,ib + s(i)=10.0*log10(s(i)) !Convert to dB scale + enddo + + nterms=5 + nlen=(ib-ia+1)/nseg !Length of test segment + i0=(ib-ia+1)/2 !Midpoint + k=0 + do n=1,nseg !Loop over all segments + ja=ia + (n-1)*nlen + jb=ja+nlen-1 + call pctile(s(ja),nlen,npct,base) !Find lowest npct of points + do i=ja,jb + if(s(i).le.base) then + if (k.lt.1000) k=k+1 !Save all "lower envelope" points + x(k)=i-i0 + y(k)=s(i) + endif + enddo + enddo + kz=k + a=0. + call polyfit(x,y,y,kz,nterms,0,a,chisqr) !Fit a low-order polynomial + do i=ia,ib + t=i-i0 + sbase(i)=a(1)+t*(a(2)+t*(a(3)+t*(a(4)+t*(a(5))))) + 0.65 +! write(51,3051) i*df,s(i),sbase(i) +!3051 format(3f12.3) + sbase(i)=10**(sbase(i)/10.0) + enddo + return +end subroutine ft4_baseline diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 582a48f77..d93978e5f 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -17,8 +17,6 @@ program ft4sim_mult integer itone(NN) integer*1 msgbits(77) integer*2 iwave(NZZ) !Generated full-length waveform - integer icos4(4) - data icos4/0,1,3,2/ ! Get command-line argument(s) nargs=iargc() diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 97aeb54bf..dd875336d 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -10,7 +10,6 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & complex cx(0:NH1) real candidate(3,maxcand) real dd(NMAX) - integer indx(NH1) integer ipk(1) equivalence (x,cx) logical first @@ -26,7 +25,6 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! Compute symbol spectra, stepping by NSTEP steps. savg=0. - tstep=NSTEP/12000.0 df=12000.0/NFFT1 fac=1.0/300.0 do j=1,NHSYM @@ -40,27 +38,20 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & enddo savg=savg + s(1:NH1,j) !Average spectrum enddo + savg=savg/NHSYM savsm=0. do i=8,NH1-7 savsm(i)=sum(savg(i-7:i+7))/15. enddo + nfa=fa/df - if(nfa.lt.1) nfa=1 + if(nfa.lt.8) nfa=8 nfb=fb/df if(nfb.gt.nint(5000.0/df)) nfb=nint(5000.0/df) - n300=300/df - n2500=2500/df -! np=nfb-nfa+1 - np=n2500-n300+1 - indx=0 - call indexx(savsm(n300:n2500),np,indx) - xn=savsm(n300+indx(nint(0.3*np))) ncand=0 - if(xn.le.1.e-8) return - savsm=savsm/xn -! call ft4_baseline(savg,nfa,nfb,sbase) -! savsm=savsm/sbase - + call ft4_baseline(savg,nfa,nfb,sbase) + if(any(sbase(nfa:nfb).le.0)) return + savsm(nfa:nfb)=savsm(nfa:nfb)/sbase(nfa:nfb) f_offset = -1.5*12000.0/NSPS do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. & From 7e4de9162683fc25b098657270dd3232d12e0781 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 09:52:17 -0500 Subject: [PATCH 288/367] Fix a comment. --- lib/ft4/ft4_baseline.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/ft4_baseline.f90 b/lib/ft4/ft4_baseline.f90 index afdbeb5eb..85a60d9ec 100644 --- a/lib/ft4/ft4_baseline.f90 +++ b/lib/ft4/ft4_baseline.f90 @@ -1,6 +1,6 @@ subroutine ft4_baseline(s,nfa,nfb,sbase) -! Fit baseline to spectrum (for FT8) +! Fit baseline to spectrum ! Input: s(npts) Linear scale in power ! Output: sbase(npts) Baseline From 8c371d7d66447cf62013264e7de4f4a4aa7dd85a Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 09:55:39 -0500 Subject: [PATCH 289/367] Remove an obsolete routine. --- lib/ft4/syncft4.f90 | 145 -------------------------------------------- 1 file changed, 145 deletions(-) delete mode 100644 lib/ft4/syncft4.f90 diff --git a/lib/ft4/syncft4.f90 b/lib/ft4/syncft4.f90 deleted file mode 100644 index 4841c560e..000000000 --- a/lib/ft4/syncft4.f90 +++ /dev/null @@ -1,145 +0,0 @@ -subroutine syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate, & - ncand,sbase) - - include 'ft4_params.f90' -! Search over +/- 2.5s relative to 0.5s TX start time. - parameter (JZ=20) - complex cx(0:NH1) - real s(NH1,NHSYM) - real savg(NH1) - real sbase(NH1) - real x(NFFT1) - real sync2d(NH1,-JZ:JZ) - real red(NH1) - real candidate0(3,maxcand) - real candidate(3,maxcand) - real dd(NMAX) - integer jpeak(NH1) - integer indx(NH1) - integer ii(1) - integer*2 iwave(NMAX) - integer icos4(0:3) - data icos4/0,1,3,2/ !Costas 4x4 tone pattern - equivalence (x,cx) - - dd=iwave/1e3 -! Compute symbol spectra, stepping by NSTEP steps. - savg=0. - tstep=NSTEP/12000.0 - df=12000.0/NFFT1 - fac=1.0/300.0 - do j=1,NHSYM - ia=(j-1)*NSTEP + 1 - ib=ia+NSPS-1 - x(1:NSPS)=fac*dd(ia:ib) - x(NSPS+1:)=0. - call four2a(x,NFFT1,1,-1,0) !r2c FFT - do i=1,NH1 - s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 - enddo - savg=savg + s(1:NH1,j) !Average spectrum - enddo - - call baseline(savg,nfa,nfb,sbase) - - ia=max(1,nint(nfa/df)) - ib=nint(nfb/df) - nssy=NSPS/NSTEP ! # steps per symbol - nfos=NFFT1/NSPS ! # frequency bin oversampling factor - jstrt=0.25/tstep - candidate0=0. - k=0 - - do i=ia,ib - do j=-JZ,+JZ - ta=0. - tb=0. - tc=0. - t0a=0. - t0b=0. - t0c=0. - do n=0,3 - m=j+jstrt+nssy*n - if(m.ge.1.and.m.le.NHSYM) then - ta=ta + s(i+nfos*icos4(n),m) - t0a=t0a + sum(s(i:i+nfos*3:nfos,m)) - endif - tb=tb + s(i+nfos*icos4(n),m+nssy*36) - t0b=t0b + sum(s(i:i+nfos*3:nfos,m+nssy*36)) - if(m+nssy*72.le.NHSYM) then - tc=tc + s(i+nfos*icos4(n),m+nssy*72) - t0c=t0c + sum(s(i:i+nfos*3:nfos,m+nssy*72)) - endif - enddo - t=ta+tb+tc - t0=t0a+t0b+t0c - t0=(t0-t)/3.0 - sync_abc=t/t0 - t=tb+tc - t0=t0b+t0c - t0=(t0-t)/3.0 - sync_bc=t/t0 - sync2d(i,j)=max(sync_abc,sync_bc) - enddo - enddo - - red=0. - do i=ia,ib - ii=maxloc(sync2d(i,-JZ:JZ)) - 1 - JZ - j0=ii(1) - jpeak(i)=j0 - red(i)=sync2d(i,j0) - enddo - iz=ib-ia+1 - call indexx(red(ia:ib),iz,indx) - ibase=indx(nint(0.40*iz)) - 1 + ia - if(ibase.lt.1) ibase=1 - if(ibase.gt.nh1) ibase=nh1 - base=red(ibase) - red=red/base - do i=1,min(maxcand,iz) - n=ia + indx(iz+1-i) - 1 - if(red(n).lt.syncmin.or.isnan(red(n)).or.k.eq.maxcand) exit - k=k+1 -! candidate0(1,k)=n*df+37.5*1.5 - candidate0(1,k)=n*df - candidate0(2,k)=(jpeak(n)-1)*tstep - candidate0(3,k)=red(n) - enddo - ncand=k - -! Put nfqso at top of list, and save only the best of near-dupe freqs. - do i=1,ncand - if(abs(candidate0(1,i)-nfqso).lt.10.0) candidate0(1,i)=-candidate0(1,i) - if(i.ge.2) then - do j=1,i-1 - fdiff=abs(candidate0(1,i))-abs(candidate0(1,j)) - if(abs(fdiff).lt.4.0) then - if(candidate0(3,i).ge.candidate0(3,j)) candidate0(3,j)=0. - if(candidate0(3,i).lt.candidate0(3,j)) candidate0(3,i)=0. - endif - enddo - endif - enddo - - fac=20.0/maxval(s) - s=fac*s - -! Sort by sync -! call indexx(candidate0(3,1:ncand),ncand,indx) -! Sort by frequency - call indexx(candidate0(1,1:ncand),ncand,indx) - k=1 -! do i=ncand,1,-1 - do i=1,ncand - j=indx(i) -! if( candidate0(3,j) .ge. syncmin .and. candidate0(2,j).ge.-1.5 ) then - if( candidate0(3,j) .ge. syncmin ) then - candidate(2:3,k)=candidate0(2:3,j) - candidate(1,k)=abs(candidate0(1,j)) - k=k+1 - endif - enddo - ncand=k-1 - return -end subroutine syncft4 From a56960a19b9676fd37ee7e0bfeec2e3fcacef576 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 10:06:59 -0500 Subject: [PATCH 290/367] Remove syncft4.f90 from CMakeLists.txt. --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74f382421..a8093b100 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -566,7 +566,6 @@ set (wsjt_FSRCS lib/sync64.f90 lib/sync65.f90 lib/ft4/getcandidates4.f90 - lib/ft4/syncft4.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 lib/ft4/sync4d.f90 From 11065c349c3683c0a52f6196de5b32c71038c380 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 12:08:07 -0500 Subject: [PATCH 291/367] Call OSD if Deep decoding is selected. --- lib/ft4_decode.f90 | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 001ee4c33..5b36ed8dd 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -74,7 +74,7 @@ contains logical nohiscall,unpk77_success logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first, dobigfft - logical dosubtract + logical dosubtract,doosd data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ @@ -210,19 +210,23 @@ contains fb=nfb dd=iwave -! ndepth=3: 2 passes, subtract on each pass -! ndepth=2: 1 pass, no subtraction -! ndepth=1: 1 pass, no subtraction, fewer candidates +! ndepth=3: 3 passes, bp+osd +! ndepth=2: 3 passes, bp only +! ndepth=1: 1 pass, no subtraction max_iterations=40 syncmin=1.2 dosubtract=.true. + doosd=.true. nsp=3 - if(ndepth.lt.3) then + if(ndepth.eq.2) then + doosd=.false. + endif + if(ndepth.eq.1) then nsp=1 dosubtract=.false. + doosd=.false. endif - if(ndepth.eq.1) syncmin=2.0 do isp = 1,nsp if(isp.eq.2) then @@ -482,10 +486,22 @@ contains llr=llrd endif message77=0 + dmin=0.0 call timer('bpdec174',0) call bpdecode174_91(llr,apmask,max_iterations,message77, & cw,nharderror,niterations) call timer('bpdec174',1) + + if(doosd .and. nharderror.lt.0) then + ndeep=3 + if(abs(nfqso-f1).le.napwid) then + ndeep=4 + endif + call timer('osd174_91 ',0) + call osd174_91(llr,apmask,ndeep,message77,cw,nharderror,dmin) + call timer('osd174_91 ',1) + endif + if(sum(message77).eq.0) cycle if( nharderror.ge.0 ) then message77=mod(message77+rvec,2) ! remove rvec scrambling @@ -508,11 +524,11 @@ contains if(snr.gt.0.0) then xsnr=10*log10(snr)-14.8 else - xsnr=-20.0 + xsnr=-21.0 endif - nsnr=nint(max(-20.0,xsnr)) + nsnr=nint(max(-21.0,xsnr)) xdt=ibest/666.67 - 0.5 -!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp +!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3,f5.1)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp,dmin call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit endif From f00bcebb9c462e369aa503b4cf5b2b86e3ec4d4a Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 26 May 2019 13:25:36 -0500 Subject: [PATCH 292/367] Enable lapcqonly for FT4. This disables AP for all but CQ messages if 5 minutes or more have elapsed since the last Tx. --- lib/decoder.f90 | 4 ++-- lib/ft4_decode.f90 | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 174b75115..d3f1153f4 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -152,8 +152,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) if(params%nmode.eq.5) then call timer('decft4 ',0) call my_ft4%decode(ft4_decoded,id2,params%nQSOProgress,params%nfqso, & - params%nutc,params%nfa,params%nfb,params%ndepth,ncontest, & - mycall,hiscall) + params%nutc,params%nfa,params%nfb,params%ndepth, & + logical(params%lapcqonly),ncontest,mycall,hiscall) call timer('decft4 ',1) go to 800 endif diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 5b36ed8dd..50c9fa47d 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -24,7 +24,7 @@ module ft4_decode contains subroutine decode(this,callback,iwave,nQSOProgress,nfqso, & - nutc,nfa,nfb,ndepth,ncontest,mycall,hiscall) + nutc,nfa,nfb,ndepth,lapcqonly,ncontest,mycall,hiscall) use timer_module, only: timer use packjt77 include 'ft4/ft4_params.f90' @@ -75,6 +75,7 @@ contains logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first, dobigfft logical dosubtract,doosd + logical, intent(in) :: lapcqonly data icos4a/0,1,3,2/ data icos4b/1,0,2,3/ @@ -407,6 +408,7 @@ contains apmag=maxval(abs(llra))*1.1 npasses=3+nappasses(nQSOProgress) + if(lapcqonly) npasses=4 if(ndepth.eq.1) npasses=3 if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound do ipass=1,npasses @@ -421,6 +423,7 @@ contains if(ipass .gt. 3) then llrd=llra iaptype=naptypes(nQSOProgress,ipass-3) + if(lapcqonly) iaptype=1 ! ncontest=0 : NONE ! 1 : NA_VHF From cc43e6b954813fe97a26dfbb80f687783145f25d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 27 May 2019 15:28:14 -0400 Subject: [PATCH 293/367] Tweaks to robo-detector. --- robots/go | 2 +- robots/robo.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 robots/go diff --git a/robots/go b/robots/go old mode 100644 new mode 100755 index 9a7c9f3dd..f7bf846fc --- a/robots/go +++ b/robots/go @@ -1,2 +1,2 @@ curl https://pskreporter.info/cgi-bin/robot.pl > robo.dat -robo | sort -nr -k2 +robo | sort -nr -k2 -k1 diff --git a/robots/robo.f90 b/robots/robo.f90 index 69650a149..1f748378c 100644 --- a/robots/robo.f90 +++ b/robots/robo.f90 @@ -14,7 +14,7 @@ program robo character*12 callsign(0:NMAX) integer*1 ic1 - open(10,file='robo.dat',status='old',access='stream') + open(10,file='/tmp/robo.dat',status='old',access='stream') callsign=' ' do ichar=1,NCHARS From fc4dcc6d8817675a408b9ba3e86d388c020de62c Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 27 May 2019 16:34:53 -0500 Subject: [PATCH 294/367] Fix a bug that caused FT4 decoding to fail when widegraph Start freq was less than 200 Hz. --- lib/ft4/getcandidates4.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index dd875336d..f7cef02ef 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -45,7 +45,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & enddo nfa=fa/df - if(nfa.lt.8) nfa=8 + if(nfa.lt.nint(200.0/df)) nfa=nint(200.0/df) nfb=fb/df if(nfb.gt.nint(5000.0/df)) nfb=nint(5000.0/df) ncand=0 From 0a02ad75e032d1ed4f35485416fc4ed049a46771 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 11:25:28 +0100 Subject: [PATCH 295/367] Remove references to N1MM on the Settings dialog as it now uses the WSJT-X UDP messages The second UDP server and port are noted as deprecated since that channel is no longer used for its original purpose, namely N1MM Logger+ consumption of ADIF logged QSO records. This has been marked as deprecated rather than removing since other applications have unilaterally chosen to use this feed rather than the documented WSJT-X UDP message protocol which contains the same information and more. Expect this UDP channel to be removed in some future WSJT-X release. --- Configuration.ui | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Configuration.ui b/Configuration.ui index 9e36e7ee1..e32f4a198 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -7,7 +7,7 @@ 0 0 546 - 536 + 553 @@ -1919,7 +1919,7 @@ for assessing propagation and system performance. - N1MM Logger+ Broadcasts + Secondary UDP Server (deprecated) @@ -1935,7 +1935,7 @@ for assessing propagation and system performance. - <html><head/><body><p>N1MM Server name or IP address:</p></body></html> + Server name or IP address: n1mm_server_name_line_edit @@ -1952,7 +1952,7 @@ for assessing propagation and system performance. - <html><head/><body><p>N1MM Server port number:</p></body></html> + Server port number: n1mm_server_port_spin_box @@ -3085,13 +3085,13 @@ Right click for insert and delete options. - - - - - - + + + + + + From 72bce860d87eecb96b12169a920efc895cc0f9b7 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 11:25:28 +0100 Subject: [PATCH 296/367] Remove references to N1MM on the Settings dialog as it now uses the WSJT-X UDP messages The second UDP server and port are noted as deprecated since that channel is no longer used for its original purpose, namely N1MM Logger+ consumption of ADIF logged QSO records. This has been marked as deprecated rather than removing since other applications have unilaterally chosen to use this feed rather than the documented WSJT-X UDP message protocol which contains the same information and more. Expect this UDP channel to be removed in some future WSJT-X release. --- Configuration.ui | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Configuration.ui b/Configuration.ui index 9bc5f35aa..4fd9cc1d2 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -7,7 +7,7 @@ 0 0 546 - 536 + 553 @@ -1912,7 +1912,7 @@ for assessing propagation and system performance. - N1MM Logger+ Broadcasts + Secondary UDP Server (deprecated) @@ -1928,7 +1928,7 @@ for assessing propagation and system performance. - <html><head/><body><p>N1MM Server name or IP address:</p></body></html> + Server name or IP address: n1mm_server_name_line_edit @@ -1945,7 +1945,7 @@ for assessing propagation and system performance. - <html><head/><body><p>N1MM Server port number:</p></body></html> + Server port number: n1mm_server_port_spin_box From 67ab7c7b8b8f4f199ecbb441cfa90eb2587b1286 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 12:18:54 +0100 Subject: [PATCH 297/367] Add Alt+O hotkey to change the operator quickly without going to the Settings dialog Thanks to Jim, W2JC, for suggesting this enhancement. --- Configuration.cpp | 1 + Configuration.hpp | 1 + shortcuts.txt | 1 + widgets/mainwindow.cpp | 10 ++++++++++ 4 files changed, 13 insertions(+) diff --git a/Configuration.cpp b/Configuration.cpp index 5526a1ec4..d1cc8d172 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -718,6 +718,7 @@ bool Configuration::x2ToneSpacing() const {return m_->x2ToneSpacing_;} bool Configuration::x4ToneSpacing() const {return m_->x4ToneSpacing_;} bool Configuration::split_mode () const {return m_->split_mode ();} QString Configuration::opCall() const {return m_->opCall_;} +void Configuration::opCall (QString const& call) {m_->opCall_ = call;} QString Configuration::udp_server_name () const {return m_->udp_server_name_;} auto Configuration::udp_server_port () const -> port_type {return m_->udp_server_port_;} bool Configuration::accept_udp_requests () const {return m_->accept_udp_requests_;} diff --git a/Configuration.hpp b/Configuration.hpp index 0ed7a4057..9535605d9 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -148,6 +148,7 @@ public: bool EMEonly() const; bool post_decodes () const; QString opCall() const; + void opCall (QString const&); QString udp_server_name () const; port_type udp_server_port () const; QString n1mm_server_name () const; diff --git a/shortcuts.txt b/shortcuts.txt index 4356664c0..10276a269 100644 --- a/shortcuts.txt +++ b/shortcuts.txt @@ -35,6 +35,7 @@ Alt+M Monitor Alt+N Enable Tx Ctrl+O Open a .wav file + Alt+O Change operator Alt+Q Log QSO Alt+S Stop monitoring Alt+T Tune diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 99bcc410d..2d3281760 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include "revision_utils.hpp" #include "qt_helpers.hpp" @@ -2062,6 +2063,15 @@ void MainWindow::keyPressEvent (QKeyEvent * e) on_actionOpen_triggered(); return; } + else if(e->modifiers() & Qt::AltModifier) { + bool ok; + auto call = QInputDialog::getText (this, tr ("Change Operator"), tr ("New operator:"), + QLineEdit::Normal, m_config.opCall (), &ok); + if (ok) { + m_config.opCall (call); + } + return; + } break; case Qt::Key_V: if(e->modifiers() & Qt::AltModifier) { From abd7847922528fb4f9b03567bda7009f74295162 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 12:54:57 +0100 Subject: [PATCH 298/367] Update ADIF header in UDP message "Logged ADIF"(12) to v3.1.0 --- MessageClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MessageClient.cpp b/MessageClient.cpp index 5bf23294b..6e2ea7955 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -527,7 +527,7 @@ void MessageClient::logged_ADIF (QByteArray const& ADIF_record) { QByteArray message; NetworkMessage::Builder out {&message, NetworkMessage::LoggedADIF, m_->id_, m_->schema_}; - QByteArray ADIF {"\n3.0.7\nWSJT-X\n\n" + ADIF_record + " "}; + QByteArray ADIF {"\n3.1.0\nWSJT-X\n\n" + ADIF_record + " "}; out << ADIF; TRACE_UDP ("ADIF:" << ADIF); m_->send_message (out, message); From 946a2504371519168126b7e4a803ca82efeef88d Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 28 May 2019 11:19:12 -0400 Subject: [PATCH 299/367] Update the Release Notes in preparation for v2.1-rc6 --- Release_Notes.txt | 129 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/Release_Notes.txt b/Release_Notes.txt index c59ffafca..efc7bb42c 100644 --- a/Release_Notes.txt +++ b/Release_Notes.txt @@ -12,6 +12,135 @@ Copyright 2001 - 2019 by Joe Taylor, K1JT. + Release: WSJT-X 2.1.0-rc6 + May 30, 2019 + ------------------------- + +Changes and bug fixes since WSJT-X 2.1.0-rc5: + +IMPORTANT CHANGES TO THE FT4 PROTOCOL, NOT BACKWARD COMPATIBLE + - T/R sequence length increased from 6.0 to 7.5 seconds + - Symbol rate decreased from 23.4375 to 20.8333 baud. + - Bandwidth decreased from 90 Hz to 80 Hz + +OTHER IMPROVEMENTS + - Allowable FT4 time offsets -1.0 < DT < +1.0 s + - Allow RRR Tx4 message in FT4 mode, if not using contest messages + - Send FT4 audio frequency to PSK Reporter + - Add a third decoding pass + - Add ordered statistics decoding + - Improved sensitivity: threshold S/N is now -17.5 dB + - Improvements to accessibility + - Updates to the User Guide (not yet complete, however) + - New user option: "Calling CQ forces Call 1st" + - In FT4 mode, Shift+F11/F12 moves Tx freq by +/- 100 Hz + - Improved S/N calculation for FT4 mode + - N1MM Logger+ now uses the standard WSJT-X UDP messages + - OK/Cancel buttons on Log QSO window maintain fixed positions + +BUG FIXES + - Fix generation of Tx5 message when one callsign is nonstandard + - Fix a bug that prevented use on macOS + - Fix a bug that caused mode switch from FT4 to FT8 + - Fix a bug that caused FT4 to do WSPR-style band hopping + - Fix a bug that caused a Fortran bounds error + + + Release: WSJT-X 2.1.0-rc5 + April 29, 2019 + ------------------------- + +WSJT-X 2.1.0 fifth release candidate is a minor release including the +following. + + - Repairs a defect that stopped messages from UDP servers being accepted. + - Improved message sequencing a QSO end for CQing FT4 stations. + - "Best S+P" action times out after two minutes waiting for a candidate. + - Updated macOS Info.plist to comply with latest mic. privacy controls. + - Multi-pass decoding for FT4 inc. prior decode subtraction. + - Fast/Normal/Deep options for the FT4 decoder. + - Proposed suggested working frequencies for the new FT4 mode. + - Repair a defect in RTTY RU where sequencer fails to advance to Tx3. + - Fix a defect where the contest serial # spin box was incorrectly hidden. + - Fix defects in ALL.TXT formatting for JT65 and JT9. + - Reduce timeout for AP decoding with own call from 10 mins to 5 mins. + + + Release: WSJT-X 2.1.0-rc4 + April 10, 2019 + ------------------------- + +WSJT-X 2.1.0 fourth release candidate is a minor release including the +following. + + - New "Call Best" button for FT4 mode to select the best reply to a + CQ call based on neediness. + - Fixed UTC display on FT4 waterfall. + +This release is made by invitation only to selected testers to trial +the FT4 mode in semi-realistic contest simulations and to elicit +feedback to guide future development. + +*Note* this release is not for general public release and we request + that it is not distributed. + + + Release: WSJT-X 2.1.0-rc3 + April 5, 2019 + ------------------------- + +WSJT-X 2.1.0 third release candidate is an enhancement release to +change the implementation of the new FT4 mode to a synchronous T/R +period of 6 seconds. + +This release is made by invitation only to selected testers to trial +the FT4 mode in semi-realistic contest simulations and to elicit +feedback to guide future development. + +*Note* this release is not for general public release and we request + that it is not distributed. + + + Release: WSJT-X 2.1.0-rc2 + March 29, 2019 + ------------------------- + +WSJT-X 2.1.0 second release candidate is a bug fix release to repair +some usability issues with FT4 contest mode. The following new +features are also included. + + - Better options for QSO flow by clicking Tx# buttons to transmit + - A 64-bit package for Windows 64-bit systems + - Improved FT4 sync detection speed + +This release is made by invitation only to selected testers to trial +the FT4 mode in semi-realistic contest simulations and to elicit +feedback to guide future development. + +*Note* this release is not for general public release and we request +that it is not distributed. + + Release: WSJT-X 2.1.0-rc1 + March 25, 2019 + ------------------------- + +WSJT-X 2.1.0 first release candidate is a preview alpha quality +release containing the following new features. + + - FT4 mode, a new mode targeted at HF digital contesting + - GMSK modulation for FT4 and FT8 + - New waterfall option to select between raw sensitivity or a + filtered signal representation for best visualization of signal + quality + +This release is made by invitation only to selected testers to trial +the FT4 mode in semi-realistic contest simulations and to elicit +feedback to guide future development. + +*Note* this release is not for general public release and we request +that it is not distributed. + + Release: WSJT-X 2.0.1 February 25, 2019 --------------------- From dce016f6ebf4eb305e71b18391f94940c341bb89 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 28 May 2019 12:09:34 -0400 Subject: [PATCH 300/367] Disable RC6 during ARRL June VHF contest, Field Day, and after July 21, 2019. --- widgets/mainwindow.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2d3281760..06f9106e3 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -990,16 +990,23 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, void MainWindow::not_GA_warning_message () { - /* MessageBox::critical_message (this, "

" "This is a pre-release version of WSJT-X 2.1.0 made " - "available for testing purposes. It will become nonfunctional " - "after June 7, 2019."); - QDateTime now=QDateTime::currentDateTime(); - QDateTime timeout=QDateTime(QDate(2019,6,7)); + "available for testing purposes. By design it will " + "be nonfunctional during the 2019 ARRL June VHF contest " + "(June 8-10) and Field Day (June 22-23) weekends. It " + "will be permanently nonfunctional after July 21, 2019."); + QDateTime now=QDateTime::currentDateTimeUtc(); + QDateTime t1(QDate(2019,6,8),QTime(18,0)); + QDateTime t2(QDate(2019,6,10),QTime(3,0)); + if(now.secsTo(t1)<0 and now.secsTo(t2)>0) Q_EMIT finished(); + t1=QDateTime(QDate(2019,6,22),QTime(18,0)); + t2=QDateTime(QDate(2019,6,23),QTime(21,0)); + if(now.secsTo(t1)<0 and now.secsTo(t2)>0) Q_EMIT finished(); + QDateTime timeout(QDate(2019,7,21),QTime(0,0)); if(now.daysTo(timeout) < 0) Q_EMIT finished(); - */ + } void MainWindow::initialize_fonts () From f4633809d385f46dcc5a9767fcf4fd6282c3c6b5 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 18:28:12 +0100 Subject: [PATCH 301/367] Put EU VHF contest mode serial numbers into the ADIF SRX and STX fields --- logbook/logbook.cpp | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index e4a04f64a..0e855c88f 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -96,24 +96,43 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q auto words = xSent.split (' ', QString::SkipEmptyParts); if (words.size () > 1) { - bool ok; - auto sn = words.back ().toUInt (&ok); - if (ok && sn) + if (words.back ().toUInt ()) { // assume last word is a serial if there are at least // two words and if it is positive numeric - t += " ' + words.back (); + t += " ' + words.back (); + } + else + { + if (words.front ().toUInt () && words.front ().size () > 3) // EU VHF contest mode + { + auto sn_text = words.front ().mid (2); + // assume first word is report+serial if there are + // at least two words and if the first word less the + // first two characters is a positive numeric + t += " ' + sn_text; + } } } } if (xRcvd.size ()) { - QString t1=""; - if(xRcvd.split(" ").size()==2) t1=xRcvd.split(" ").at(1); - if(t1.toInt()>0) { - t += " " + t1; - } else { - t += " " + t1; - } + auto words = xRcvd.split (' ', QString::SkipEmptyParts); + if (words.size () == 2) + { + if (words.at (1).toUInt ()) + { + t += " " + words.at (1); + } + else if (words.at (0).toUInt () && words.at (0).size () > 3) // EU VHF contest exchange + { + // strip report and set SRX to serial + t += " " + words.at (0).mid (2); + } + else + { + t += " " + words.at (1); + } + } } return t.toLatin1(); } From e3ecd552813818a83c4781158ac53b140a6e43bc Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 18:28:12 +0100 Subject: [PATCH 302/367] Put EU VHF contest mode serial numbers into the ADIF SRX and STX fields --- logbook/logbook.cpp | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index b84b65c1a..aa2b7e39e 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -89,24 +89,43 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q auto words = xSent.split (' ', QString::SkipEmptyParts); if (words.size () > 1) { - bool ok; - auto sn = words.back ().toUInt (&ok); - if (ok && sn) + if (words.back ().toUInt ()) { // assume last word is a serial if there are at least // two words and if it is positive numeric - t += " ' + words.back (); + t += " ' + words.back (); + } + else + { + if (words.front ().toUInt () && words.front ().size () > 3) // EU VHF contest mode + { + auto sn_text = words.front ().mid (2); + // assume first word is report+serial if there are + // at least two words and if the first word less the + // first two characters is a positive numeric + t += " ' + sn_text; + } } } } if (xRcvd.size ()) { - QString t1=""; - if(xRcvd.split(" ").size()==2) t1=xRcvd.split(" ").at(1); - if(t1.toInt()>0) { - t += " " + t1; - } else { - t += " " + t1; - } + auto words = xRcvd.split (' ', QString::SkipEmptyParts); + if (words.size () == 2) + { + if (words.at (1).toUInt ()) + { + t += " " + words.at (1); + } + else if (words.at (0).toUInt () && words.at (0).size () > 3) // EU VHF contest exchange + { + // strip report and set SRX to serial + t += " " + words.at (0).mid (2); + } + else + { + t += " " + words.at (1); + } + } } return t.toLatin1(); } From 8035880c451dc4938d8e8380da10c97b5151cf0b Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 19:00:13 +0100 Subject: [PATCH 303/367] CMake updates to remove warnings when using recent CMake versions --- CMake/Modules/Findhamlib.cmake | 7 +++++-- CMakeLists.txt | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CMake/Modules/Findhamlib.cmake b/CMake/Modules/Findhamlib.cmake index 98419bda1..234083ae1 100644 --- a/CMake/Modules/Findhamlib.cmake +++ b/CMake/Modules/Findhamlib.cmake @@ -19,9 +19,12 @@ find_path (__hamlib_pc_path NAMES hamlib.pc PATH_SUFFIXES lib/pkgconfig lib64/pkgconfig ) if (__hamlib_pc_path) - set (ENV{PKG_CONFIG_PATH} "${__hamlib_pc_path}" "$ENV{PKG_CONFIG_PATH}") - unset (__hamlib_pc_path CACHE) + set (__pc_path $ENV{PKG_CONFIG_PATH}) + list (APPEND __pc_path "${__hamlib_pc_path}") + set (ENV{PKG_CONFIG_PATH} "${__pc_path}") + unset (__pc_path CACHE) endif () +unset (__hamlib_pc_path CACHE) # Use pkg-config to get hints about paths, libs and, flags unset (__pkg_config_checked_hamlib CACHE) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8093b100..d5d18467c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,10 @@ if (POLICY CMP0063) cmake_policy (SET CMP0063 NEW) # honour visibility properties for all library types endif (POLICY CMP0063) +if (POLICY CMP0071) + cmake_policy (SET CMP0071 NEW) # run automoc and autouic on generated sources +endif (POLICY CMP0071) + include (${PROJECT_SOURCE_DIR}/CMake/VersionCompute.cmake) message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}") From e1451202f45ca8ed6f6e0a06764e4c575a257d2e Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 19:00:13 +0100 Subject: [PATCH 304/367] CMake updates to remove warnings when using recent CMake versions --- CMake/Modules/Findhamlib.cmake | 7 +++++-- CMakeLists.txt | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CMake/Modules/Findhamlib.cmake b/CMake/Modules/Findhamlib.cmake index 98419bda1..234083ae1 100644 --- a/CMake/Modules/Findhamlib.cmake +++ b/CMake/Modules/Findhamlib.cmake @@ -19,9 +19,12 @@ find_path (__hamlib_pc_path NAMES hamlib.pc PATH_SUFFIXES lib/pkgconfig lib64/pkgconfig ) if (__hamlib_pc_path) - set (ENV{PKG_CONFIG_PATH} "${__hamlib_pc_path}" "$ENV{PKG_CONFIG_PATH}") - unset (__hamlib_pc_path CACHE) + set (__pc_path $ENV{PKG_CONFIG_PATH}) + list (APPEND __pc_path "${__hamlib_pc_path}") + set (ENV{PKG_CONFIG_PATH} "${__pc_path}") + unset (__pc_path CACHE) endif () +unset (__hamlib_pc_path CACHE) # Use pkg-config to get hints about paths, libs and, flags unset (__pkg_config_checked_hamlib CACHE) diff --git a/CMakeLists.txt b/CMakeLists.txt index db716d464..418173a73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,10 @@ if (POLICY CMP0063) cmake_policy (SET CMP0063 NEW) # honour visibility properties for all library types endif (POLICY CMP0063) +if (POLICY CMP0071) + cmake_policy (SET CMP0071 NEW) # run automoc and autouic on generated sources +endif (POLICY CMP0071) + include (${PROJECT_SOURCE_DIR}/CMake/VersionCompute.cmake) message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}") From a54140582ad2badb579df5546c8ea1ae025d339c Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 29 May 2019 20:47:11 +0100 Subject: [PATCH 305/367] Tidied up cut-off criteria --- widgets/mainwindow.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 06f9106e3..ef5dd616b 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -997,16 +997,13 @@ void MainWindow::not_GA_warning_message () "be nonfunctional during the 2019 ARRL June VHF contest " "(June 8-10) and Field Day (June 22-23) weekends. It " "will be permanently nonfunctional after July 21, 2019."); - QDateTime now=QDateTime::currentDateTimeUtc(); - QDateTime t1(QDate(2019,6,8),QTime(18,0)); - QDateTime t2(QDate(2019,6,10),QTime(3,0)); - if(now.secsTo(t1)<0 and now.secsTo(t2)>0) Q_EMIT finished(); - t1=QDateTime(QDate(2019,6,22),QTime(18,0)); - t2=QDateTime(QDate(2019,6,23),QTime(21,0)); - if(now.secsTo(t1)<0 and now.secsTo(t2)>0) Q_EMIT finished(); - QDateTime timeout(QDate(2019,7,21),QTime(0,0)); - if(now.daysTo(timeout) < 0) Q_EMIT finished(); - + auto now = QDateTime::currentDateTimeUtc (); + if ((QDateTime {{2019, 6, 8}, {18, 0}, Qt::UTC} <= now + && now < QDateTime {{2019, 6, 10}, {3, 0}, Qt::UTC}) + || now >= QDateTime {{2019, 7, 21}, {0, 0}, Qt::UTC}) + { + Q_EMIT finished (); + } } void MainWindow::initialize_fonts () From 381faca99aa8603f2e38125feab669c8148a0656 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 29 May 2019 23:35:18 +0100 Subject: [PATCH 306/367] Add option to include or exclude WAE extra entities in DXCC entity lookups Also refactored object relationships as a start to implementing contest multiplier highlighting. --- Configuration.cpp | 8 +++- Configuration.hpp | 1 + Configuration.ui | 83 ++++++++++++++++++++++++---------------- logbook/AD1CCty.cpp | 52 ++++++++++++++++--------- logbook/AD1CCty.hpp | 8 ++-- logbook/WorkedBefore.cpp | 9 +++-- logbook/WorkedBefore.hpp | 3 +- logbook/logbook.cpp | 24 ++++++++++++ logbook/logbook.h | 8 ++++ models/CabrilloLog.cpp | 13 +++++++ models/CabrilloLog.hpp | 5 ++- widgets/logqso.cpp | 9 ++--- widgets/logqso.h | 8 ++-- widgets/mainwindow.cpp | 28 ++++---------- widgets/mainwindow.h | 4 -- 15 files changed, 169 insertions(+), 94 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index d1cc8d172..11c7be369 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -564,6 +564,7 @@ private: DecodeHighlightingModel decode_highlighing_model_; DecodeHighlightingModel next_decode_highlighing_model_; bool highlight_by_mode_; + bool include_WAE_entities_; int LotW_days_since_upload_; TransceiverFactory::ParameterPack rig_params_; @@ -745,6 +746,7 @@ bool Configuration::pwrBandTuneMemory () const {return m_->pwrBandTuneMemory_;} LotWUsers const& Configuration::lotw_users () const {return m_->lotw_users_;} DecodeHighlightingModel const& Configuration::decode_highlighting () const {return m_->decode_highlighing_model_;} bool Configuration::highlight_by_mode () const {return m_->highlight_by_mode_;} +bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;} void Configuration::set_calibration (CalibrationParams params) { @@ -950,6 +952,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network , station_insert_action_ {tr ("&Insert ..."), nullptr} , station_dialog_ {new StationDialog {&next_stations_, &bands_, this}} , highlight_by_mode_ {false} + , include_WAE_entities_ {false} , LotW_days_since_upload_ {0} , last_port_type_ {TransceiverFactory::Capabilities::none} , rig_is_dummy_ {false} @@ -1319,6 +1322,7 @@ void Configuration::impl::initialize_models () next_decode_highlighing_model_.items (decode_highlighing_model_.items ()); ui_->highlight_by_mode_check_box->setChecked (highlight_by_mode_); + ui_->include_WAE_check_box->setChecked (include_WAE_entities_); ui_->LotW_days_since_upload_spin_box->setValue (LotW_days_since_upload_); set_rig_invariants (); @@ -1467,6 +1471,7 @@ void Configuration::impl::read_settings () if (!highlight_items.size ()) highlight_items = DecodeHighlightingModel::default_items (); decode_highlighing_model_.items (highlight_items); highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool (); + include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool (); LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt (); lotw_users_.set_age_constraint (LotW_days_since_upload_); @@ -1579,7 +1584,7 @@ void Configuration::impl::write_settings () settings_->setValue ("FrequenciesForRegionModes", QVariant::fromValue (frequencies_.frequency_list ())); settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ())); settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ())); - settings_->setValue ("HighlightByMode", highlight_by_mode_); + settings_->setValue ("IncludeWAEEntities", include_WAE_entities_); settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_); settings_->setValue ("toRTTY", log_as_RTTY_); settings_->setValue ("dBtoComments", report_in_comments_); @@ -2116,6 +2121,7 @@ void Configuration::impl::accept () Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_); } highlight_by_mode_ = ui_->highlight_by_mode_check_box->isChecked (); + include_WAE_entities_ = ui_->include_WAE_check_box->isChecked (); LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value (); lotw_users_.set_age_constraint (LotW_days_since_upload_); diff --git a/Configuration.hpp b/Configuration.hpp index 9535605d9..80f5a5cd1 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -177,6 +177,7 @@ public: LotWUsers const& lotw_users () const; DecodeHighlightingModel const& decode_highlighting () const; bool highlight_by_mode () const; + bool include_WAE_entities () const; enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND}; SpecialOperatingActivity special_op_id () const; diff --git a/Configuration.ui b/Configuration.ui index e32f4a198..a9fe51d45 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2294,6 +2294,23 @@ Right click for insert and delete options. + + + + + + + + + Include extra WAE entities + + + include_WAE_check_box + + + + + @@ -2306,35 +2323,6 @@ Right click for insert and delete options. Logbook of the World User Validation - - - - Age of last upload less than: - - - LotW_days_since_upload_spin_box - - - - - - - <html><head/><body><p>Adjust this spin box to set the age threshold of LotW user's last upload date that is accepted as a current LotW user.</p></body></html> - - - days - - - 0 - - - 9999 - - - 365 - - - @@ -2369,6 +2357,35 @@ Right click for insert and delete options. + + + + Age of last upload less than: + + + LotW_days_since_upload_spin_box + + + + + + + <html><head/><body><p>Adjust this spin box to set the age threshold of LotW user's last upload date that is accepted as a current LotW user.</p></body></html> + + + days + + + 0 + + + 9999 + + + 365 + + + @@ -3085,13 +3102,13 @@ Right click for insert and delete options. - + - - + - + + diff --git a/logbook/AD1CCty.cpp b/logbook/AD1CCty.cpp index 58ed375f6..23d34fb43 100644 --- a/logbook/AD1CCty.cpp +++ b/logbook/AD1CCty.cpp @@ -16,6 +16,7 @@ #include #include #include +#include "Configuration.hpp" #include "Radio.hpp" #include "pimpl_impl.hpp" @@ -155,14 +156,16 @@ typedef multi_index_container< class AD1CCty::impl final { public: - explicit impl () + using entity_by_id = entities_type::index::type; + + explicit impl (Configuration const * configuration) + : configuration_ {configuration} { } - Record fixup (QString call, prefix const& p) const + entity_by_id::iterator lookup_entity (QString call, prefix const& p) const { call = call.toUpper (); - using entity_by_id = entities_type::index::type; entity_by_id::iterator e; // iterator into entity set // @@ -171,23 +174,26 @@ public: if (call.startsWith ("KG4") && call.size () != 5 && call.size () != 3) { // KG4 2x1 and 2x3 calls that map to Gitmo are mainland US not Gitmo - e = entities_.project (entities_.get ().find ("K")); + return entities_.project (entities_.get ().find ("K")); } else { - e = entities_.get ().find (p.entity_id_); + return entities_.get ().find (p.entity_id_); } - + } + + Record fixup (prefix const& p, entity const& e) const + { Record result; - result.continent = e->continent_; - result.CQ_zone = e->CQ_zone_; - result.ITU_zone = e->ITU_zone_; - result.entity_name = e->name_; - result.WAE_only = e->WAE_only_; - result.latitude = e->lat_; - result.longtitude = e->long_; - result.UTC_offset = e->UTC_offset_; - result.primary_prefix = e->primary_prefix_; + result.continent = e.continent_; + result.CQ_zone = e.CQ_zone_; + result.ITU_zone = e.ITU_zone_; + result.entity_name = e.name_; + result.WAE_only = e.WAE_only_; + result.latitude = e.lat_; + result.longtitude = e.long_; + result.UTC_offset = e.UTC_offset_; + result.primary_prefix = e.primary_prefix_; // check for overrides bool ok1 {true}, ok2 {true}, ok3 {true}, ok4 {true}, ok5 {true}; @@ -220,6 +226,7 @@ public: return false; } + Configuration const * configuration_; QString path_; entities_type entities_; prefixes_type prefixes_; @@ -307,8 +314,13 @@ char const * AD1CCty::continent (Continent c) } } -AD1CCty::AD1CCty () +AD1CCty::AD1CCty (Configuration const * configuration) + : m_ {configuration} { + Q_ASSERT (configuration); + // TODO: G4WJS - consider doing the following asynchronously to + // speed up startup. Not urgent as it takes less than 1s on a Core + // i7 reading BIG CTY.DAT. QDir dataPath {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}; m_->path_ = dataPath.exists (file_name) ? dataPath.absoluteFilePath (file_name) // user override @@ -389,7 +401,7 @@ auto AD1CCty::lookup (QString const& call) const -> Record auto p = m_->prefixes_.find (exact_search); if (p != m_->prefixes_.end () && p->exact_) { - return m_->fixup (call, *p); + return m_->fixup (*p, *m_->lookup_entity (call, *p)); } } while (search_prefix.size ()) @@ -397,9 +409,11 @@ auto AD1CCty::lookup (QString const& call) const -> Record auto p = m_->prefixes_.find (search_prefix); if (p != m_->prefixes_.end ()) { - if (!p->exact_ || call.size () == search_prefix.size ()) + impl::entity_by_id::iterator e = m_->lookup_entity (call, *p); + if ((m_->configuration_->include_WAE_entities () || !e->WAE_only_) + && (!p->exact_ || call.size () == search_prefix.size ())) { - return m_->fixup (call, *p); + return m_->fixup (*p, *e); } } search_prefix = search_prefix.left (search_prefix.size () - 1); diff --git a/logbook/AD1CCty.hpp b/logbook/AD1CCty.hpp index 37cada3e9..4a485afa9 100644 --- a/logbook/AD1CCty.hpp +++ b/logbook/AD1CCty.hpp @@ -1,17 +1,19 @@ #ifndef AD1C_CTY_HPP_ #define AD1C_CTY_HPP_ -#include #include +#include #include "pimpl_h.hpp" +class QString; +class Configuration; + // // AD1CCty - Fast access database of Jim Reisert, AD1C's, cty.dat // entity and entity override information file. // class AD1CCty final : public QObject - , private boost::noncopyable { Q_OBJECT @@ -39,7 +41,7 @@ public: QString primary_prefix; }; - explicit AD1CCty (); + explicit AD1CCty (Configuration const *); ~AD1CCty (); Record lookup (QString const& call) const; diff --git a/logbook/WorkedBefore.cpp b/logbook/WorkedBefore.cpp index 31380b4c3..5edc51d3e 100644 --- a/logbook/WorkedBefore.cpp +++ b/logbook/WorkedBefore.cpp @@ -18,7 +18,7 @@ #include #include #include - +#include "Configuration.hpp" #include "qt_helpers.hpp" #include "pimpl_impl.hpp" @@ -361,8 +361,9 @@ namespace class WorkedBefore::impl final { public: - impl () + impl (Configuration const * configuration) : path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)} + , prefixes_ {configuration} { } @@ -379,8 +380,10 @@ public: worked_before_database_type worked_; }; -WorkedBefore::WorkedBefore () +WorkedBefore::WorkedBefore (Configuration const * configuration) + : m_ {configuration} { + Q_ASSERT (configuration); connect (&m_->loader_watcher_, &QFutureWatcher::finished, [this] () { QString error; size_t n {0}; diff --git a/logbook/WorkedBefore.hpp b/logbook/WorkedBefore.hpp index 90a31813a..8b115351f 100644 --- a/logbook/WorkedBefore.hpp +++ b/logbook/WorkedBefore.hpp @@ -5,6 +5,7 @@ #include "AD1CCty.hpp" #include "pimpl_h.hpp" +class Configuration; class CountryDat; class QString; class QByteArray; @@ -17,7 +18,7 @@ class WorkedBefore final public: using Continent = AD1CCty::Continent; - explicit WorkedBefore (); + explicit WorkedBefore (Configuration const *); ~WorkedBefore (); Q_SLOT void reload (); diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index 0e855c88f..bde52228c 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -3,12 +3,16 @@ #include #include "Configuration.hpp" #include "AD1CCty.hpp" +#include "models/CabrilloLog.hpp" +#include "models/FoxLog.hpp" #include "moc_logbook.cpp" LogBook::LogBook (Configuration const * configuration) : config_ {configuration} + , worked_before_ {configuration} { + Q_ASSERT (configuration); connect (&worked_before_, &WorkedBefore::finished_loading, this, &LogBook::finished_loading); } @@ -136,3 +140,23 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q } return t.toLatin1(); } + +CabrilloLog * LogBook::contest_log () +{ + // lazy create of Cabrillo log object instance + if (!m_contest_log) + { + m_contest_log.reset (new CabrilloLog {config_}); + } + return m_contest_log.data (); +} + +FoxLog * LogBook::fox_log () +{ + // lazy create of Fox log object instance + if (!m_fox_log) + { + m_fox_log.reset (new FoxLog {config_}); + } + return m_fox_log.data (); +} diff --git a/logbook/logbook.h b/logbook/logbook.h index 1850aa01f..2fd73bd3b 100644 --- a/logbook/logbook.h +++ b/logbook/logbook.h @@ -8,12 +8,15 @@ #include #include +#include #include "WorkedBefore.hpp" class Configuration; class QByteArray; class QDateTime; +class CabrilloLog; +class FoxLog; class LogBook final : public QObject @@ -43,9 +46,14 @@ public: Q_SIGNAL void finished_loading (int worked_before_record_count, QString const& error) const; + CabrilloLog * contest_log (); + FoxLog * fox_log (); + private: Configuration const * config_; WorkedBefore worked_before_; + QScopedPointer m_contest_log; + QScopedPointer m_fox_log; }; #endif diff --git a/models/CabrilloLog.cpp b/models/CabrilloLog.cpp index 6849cdd61..6a637f07d 100644 --- a/models/CabrilloLog.cpp +++ b/models/CabrilloLog.cpp @@ -12,6 +12,7 @@ #include #include "Configuration.hpp" #include "Bands.hpp" +#include "logbook/AD1CCty.hpp" #include "qt_db_helpers.hpp" #include "pimpl_impl.hpp" @@ -232,3 +233,15 @@ void CabrilloLog::export_qsos (QTextStream& stream) const .arg (m_->export_query_.value (rcvd_index).toString (), -13); } } + +QSet CabrilloLog::unique_DXCC_entities (AD1CCty const& countries) const +{ + QSqlQuery q {"SELECT UNIQUE CALL FROM cabrillo_log"}; + auto call_index = q.record ().indexOf ("call"); + QSet entities; + while (q.next ()) + { + entities << countries.lookup (q.value(call_index).toString ()).primary_prefix; + } + return entities; +} diff --git a/models/CabrilloLog.hpp b/models/CabrilloLog.hpp index 43b9e8f94..ad0255297 100644 --- a/models/CabrilloLog.hpp +++ b/models/CabrilloLog.hpp @@ -2,14 +2,16 @@ #define CABRILLO_LOG_HPP_ #include +#include +#include #include "Radio.hpp" #include "pimpl_h.hpp" class Configuration; class QDateTime; -class QString; class QSqlTableModel; class QTextStream; +class AD1CCty; class CabrilloLog final : private boost::noncopyable @@ -28,6 +30,7 @@ public: QSqlTableModel * model (); void reset (); void export_qsos (QTextStream&) const; + QSet unique_DXCC_entities (AD1CCty const&) const; private: class impl; diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index acbb340bc..a9aa18341 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -16,11 +16,12 @@ #include "moc_logqso.cpp" LogQSO::LogQSO(QString const& programTitle, QSettings * settings - , Configuration const * config, QWidget *parent) + , Configuration const * config, LogBook * log, QWidget *parent) : QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint} , ui(new Ui::LogQSO) , m_settings (settings) , m_config {config} + , m_log {log} { ui->setupUi(this); setWindowTitle(programTitle + " - Log QSO"); @@ -57,8 +58,7 @@ void LogQSO::storeSettings () const void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString mode, QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn, QDateTime const& dateTimeOff, - Radio::Frequency dialFreq, bool noSuffix, QString xSent, QString xRcvd, - CabrilloLog * cabrillo_log) + Radio::Frequency dialFreq, bool noSuffix, QString xSent, QString xRcvd) { if(!isHidden()) return; ui->call->setText (hisCall); @@ -100,7 +100,6 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString ui->loggedOperator->setText(m_config->opCall()); ui->exchSent->setText (xSent); ui->exchRcvd->setText (xRcvd); - m_cabrilloLog = cabrillo_log; using SpOp = Configuration::SpecialOperatingActivity; auto special_op = m_config->special_op_id (); @@ -158,7 +157,7 @@ void LogQSO::accept() return; // without accepting } - if (!m_cabrilloLog->add_QSO (m_dialFreq, dateTimeOff, hisCall, xsent, xrcvd)) + if (!m_log->contest_log ()->add_QSO (m_dialFreq, dateTimeOff, hisCall, xsent, xrcvd)) { show (); MessageBox::warning_message (this, tr ("Invalid QSO Data"), diff --git a/widgets/logqso.h b/widgets/logqso.h index 82a75b7bd..739a601f7 100644 --- a/widgets/logqso.h +++ b/widgets/logqso.h @@ -17,19 +17,19 @@ namespace Ui { class QSettings; class Configuration; class QByteArray; -class CabrilloLog; +class LogBook; class LogQSO : public QDialog { Q_OBJECT public: - explicit LogQSO(QString const& programTitle, QSettings *, Configuration const *, QWidget *parent = 0); + explicit LogQSO(QString const& programTitle, QSettings *, Configuration const *, LogBook *, QWidget *parent = 0); ~LogQSO(); void initLogQSO(QString const& hisCall, QString const& hisGrid, QString mode, QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn, QDateTime const& dateTimeOff, Radio::Frequency dialFreq, - bool noSuffix, QString xSent, QString xRcvd, CabrilloLog *); + bool noSuffix, QString xSent, QString xRcvd); public slots: void accept(); @@ -54,12 +54,12 @@ private: QScopedPointer ui; QSettings * m_settings; Configuration const * m_config; + LogBook * m_log; QString m_txPower; QString m_comments; Radio::Frequency m_dialFreq; QString m_myCall; QString m_myGrid; - CabrilloLog * m_cabrilloLog; }; #endif // LogQSO_H diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index ef5dd616b..ef1ca5705 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -244,7 +244,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_echoGraph (new EchoGraph(m_settings)), m_fastGraph (new FastGraph(m_settings)), // no parent so that it has a taskbar icon - m_logDlg (new LogQSO (program_title (), m_settings, &m_config, nullptr)), + m_logDlg (new LogQSO (program_title (), m_settings, &m_config, &m_logBook, nullptr)), m_lastDialFreq {0}, m_dialFreqRxWSPR {0}, m_detector {new Detector {RX_SAMPLE_RATE, double(NTMAX), downSampleFactor}}, @@ -2544,16 +2544,14 @@ void MainWindow::on_actionAstronomical_data_toggled (bool checked) void MainWindow::on_fox_log_action_triggered() { - if (!m_foxLog) m_foxLog.reset (new FoxLog {&m_config}); if (!m_foxLogWindow) { - m_foxLogWindow.reset (new FoxLogWindow {m_settings, &m_config, m_foxLog.data ()}); + m_foxLogWindow.reset (new FoxLogWindow {m_settings, &m_config, m_logBook.fox_log ()}); // Connect signals from fox log window connect (this, &MainWindow::finished, m_foxLogWindow.data (), &FoxLogWindow::close); connect (m_foxLogWindow.data (), &FoxLogWindow::reset_log_model, [this] () { - if (!m_foxLog) m_foxLog.reset (new FoxLog {&m_config}); - m_foxLog->reset (); + m_logBook.fox_log ()->reset (); }); } m_foxLogWindow->showNormal (); @@ -2563,10 +2561,9 @@ void MainWindow::on_fox_log_action_triggered() void MainWindow::on_contest_log_action_triggered() { - if (!m_cabrilloLog) m_cabrilloLog.reset (new CabrilloLog {&m_config}); if (!m_contestLogWindow) { - m_contestLogWindow.reset (new CabrilloLogWindow {m_settings, &m_config, m_cabrilloLog->model ()}); + m_contestLogWindow.reset (new CabrilloLogWindow {m_settings, &m_config, m_logBook.contest_log ()->model ()}); // Connect signals from contest log window connect (this, &MainWindow::finished, m_contestLogWindow.data (), &CabrilloLogWindow::close); @@ -5521,15 +5518,9 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button default: break; } - auto special_op = m_config.special_op_id (); - if (SpecOp::NONE < special_op && special_op < SpecOp::FOX) - { - if (!m_cabrilloLog) m_cabrilloLog.reset (new CabrilloLog {&m_config}); - } m_logDlg->initLogQSO (m_hisCall, grid, m_modeTx, m_rptSent, m_rptRcvd, m_dateTimeQSOOn, dateTimeQSOOff, m_freqNominal + - ui->TxFreqSpinBox->value(), m_noSuffix, m_xSent, m_xRcvd, - m_cabrilloLog.data ()); + ui->TxFreqSpinBox->value(), m_noSuffix, m_xSent, m_xRcvd); m_inQSOwith=""; } @@ -6369,15 +6360,13 @@ void MainWindow::on_reset_cabrillo_log_action_triggered () "for export in your Cabrillo log."))) { if(m_config.RTTY_Exchange()!="SCC") ui->sbSerialNumber->setValue(1); - if (!m_cabrilloLog) m_cabrilloLog.reset (new CabrilloLog {&m_config}); - m_cabrilloLog->reset (); + m_logBook.contest_log ()->reset (); } } void MainWindow::on_actionExport_Cabrillo_log_triggered() { - if (!m_cabrilloLog) m_cabrilloLog.reset (new CabrilloLog {&m_config}); - if (QDialog::Accepted == ExportCabrillo {m_settings, &m_config, m_cabrilloLog.data ()}.exec()) + if (QDialog::Accepted == ExportCabrillo {m_settings, &m_config, m_logBook.contest_log ()}.exec()) { MessageBox::information_message (this, tr ("Cabrillo Log saved")); } @@ -8459,9 +8448,8 @@ list2Done: m_hisGrid=m_foxQSO[hc1].grid; m_rptSent=m_foxQSO[hc1].sent; m_rptRcvd=m_foxQSO[hc1].rcvd; - if (!m_foxLog) m_foxLog.reset (new FoxLog {&m_config}); if (!m_foxLogWindow) on_fox_log_action_triggered (); - if (m_foxLog->add_QSO (QSO_time, m_hisCall, m_hisGrid, m_rptSent, m_rptRcvd, m_lastBand)) + if (m_logBook.fox_log ()->add_QSO (QSO_time, m_hisCall, m_hisGrid, m_rptSent, m_rptRcvd, m_lastBand)) { writeFoxQSO (QString {" Log: %1 %2 %3 %4 %5"}.arg (m_hisCall).arg (m_hisGrid) .arg (m_rptSent).arg (m_rptRcvd).arg (m_lastBand)); diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index ffa71c1fe..03d009a76 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -72,9 +72,7 @@ class WideGraph; class LogQSO; class Transceiver; class MessageAveraging; -class FoxLog; class FoxLogWindow; -class CabrilloLog; class CabrilloLogWindow; class ColorHighlighting; class MessageClient; @@ -376,9 +374,7 @@ private: QScopedPointer m_prefixes; QScopedPointer m_mouseCmnds; QScopedPointer m_msgAvgWidget; - QScopedPointer m_foxLog; QScopedPointer m_foxLogWindow; - QScopedPointer m_cabrilloLog; QScopedPointer m_contestLogWindow; QScopedPointer m_colorHighlighting; Transceiver::TransceiverState m_rigState; From 94b86c3b2991a490ff48f2204d140706d38514ba Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 30 May 2019 04:10:55 +0100 Subject: [PATCH 307/367] Finally fixed the default item delegate creation mechanism --- Configuration.cpp | 6 ------ MetaDataRegistry.cpp | 33 +++++++++++++++++++++++++-------- MetaDataRegistry.hpp | 3 --- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 11c7be369..08ee2e9d3 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -1122,9 +1122,6 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network ui_->frequencies_table_view->setColumnHidden (FrequencyList_v2::frequency_mhz_column, true); // delegates - auto frequencies_item_delegate = new QStyledItemDelegate {this}; - frequencies_item_delegate->setItemEditorFactory (item_editor_factory ()); - ui_->frequencies_table_view->setItemDelegate (frequencies_item_delegate); ui_->frequencies_table_view->setItemDelegateForColumn (FrequencyList_v2::region_column, new ForeignKeyDelegate {®ions_, 0, this}); ui_->frequencies_table_view->setItemDelegateForColumn (FrequencyList_v2::mode_column, new ForeignKeyDelegate {&modes_, 0, this}); @@ -1163,9 +1160,6 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network ui_->stations_table_view->sortByColumn (StationList::band_column, Qt::AscendingOrder); // stations delegates - auto stations_item_delegate = new QStyledItemDelegate {this}; - stations_item_delegate->setItemEditorFactory (item_editor_factory ()); - ui_->stations_table_view->setItemDelegate (stations_item_delegate); ui_->stations_table_view->setItemDelegateForColumn (StationList::band_column, new ForeignKeyDelegate {&bands_, &next_stations_, 0, StationList::band_column, this}); // stations actions diff --git a/MetaDataRegistry.cpp b/MetaDataRegistry.cpp index 6ce9a7f92..32af71b4d 100644 --- a/MetaDataRegistry.cpp +++ b/MetaDataRegistry.cpp @@ -17,14 +17,33 @@ #include "widgets/FrequencyLineEdit.hpp" #include "widgets/DateTimeEdit.hpp" -QItemEditorFactory * item_editor_factory () +namespace { - static QItemEditorFactory * our_item_editor_factory = new QItemEditorFactory; - return our_item_editor_factory; + class ItemEditorFactory final + : public QItemEditorFactory + { + public: + ItemEditorFactory () + : default_factory_ {QItemEditorFactory::defaultFactory ()} + { + } + + QWidget * createEditor (int user_type, QWidget * parent) const override + { + auto editor = QItemEditorFactory::createEditor (user_type, parent); + return editor ? editor : default_factory_->createEditor (user_type, parent); + } + + private: + QItemEditorFactory const * default_factory_; + }; } void register_types () { + auto item_editor_factory = new ItemEditorFactory; + QItemEditorFactory::setDefaultFactory (item_editor_factory); + // types in Radio.hpp are registered in their own translation unit // as they are needed in the wsjtx_udp shared library too @@ -32,12 +51,10 @@ void register_types () // used as signal/slot connection arguments since the new Qt 5.5 // Q_ENUM macro only seems to register the unqualified name - item_editor_factory ()->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); + item_editor_factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); //auto frequency_delta_type_id = qRegisterMetaType ("FrequencyDelta"); - item_editor_factory ()->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); - auto factory = new QItemEditorFactory; - factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); - QItemEditorFactory::setDefaultFactory (factory); + item_editor_factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); + item_editor_factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); // Frequency list model qRegisterMetaTypeStreamOperators ("Item_v2"); diff --git a/MetaDataRegistry.hpp b/MetaDataRegistry.hpp index 43000d201..8bf3c80dc 100644 --- a/MetaDataRegistry.hpp +++ b/MetaDataRegistry.hpp @@ -1,9 +1,6 @@ #ifndef META_DATA_REGISTRY_HPP__ #define META_DATA_REGISTRY_HPP__ -class QItemEditorFactory; - -QItemEditorFactory * item_editor_factory (); void register_types (); #endif From 425b0e89a8ace7fa461bcb588b4d0209cb09fb88 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 30 May 2019 21:30:48 +0100 Subject: [PATCH 308/367] Move 40m FT4 frequency up 500 Hz to clear W1AW code practice QRG This is still provisional but by zero beating W1AW we should avoid most QRM to W1AW. --- models/FrequencyList.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/models/FrequencyList.cpp b/models/FrequencyList.cpp index b135a512a..c0170a499 100644 --- a/models/FrequencyList.cpp +++ b/models/FrequencyList.cpp @@ -127,7 +127,9 @@ namespace {7074000, Modes::FT8, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL}, - {7047000, Modes::FT4, IARURegions::ALL}, // provisional + {7047500, Modes::FT4, IARURegions::ALL}, // provisional - moved + // up 500Hz to clear + // W1AW code practice QRG // Band plans (all USB dial unless stated otherwise) // From 19c46774b494f29360f179d8c66acb199da3801e Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 30 May 2019 22:20:09 +0100 Subject: [PATCH 309/367] Moving toward multiplier and dupe detection for contest modes There's not much to show for this so far but some of the necessary infrastructure is in place. --- CMakeLists.txt | 4 + Configuration.cpp | 5 + MetaDataRegistry.cpp | 4 - Radio.cpp | 8 +- Radio.hpp | 4 +- item_delegates/FrequencyDelegate.cpp | 27 ++++ item_delegates/FrequencyDelegate.hpp | 21 +++ item_delegates/FrequencyDeltaDelegate.cpp | 26 +++ item_delegates/FrequencyDeltaDelegate.hpp | 21 +++ item_delegates/item_delegates.pri | 6 +- logbook/Multiplier.cpp | 45 ++++++ logbook/Multiplier.hpp | 30 ++++ logbook/WorkedBefore.cpp | 4 +- logbook/WorkedBefore.hpp | 2 +- logbook/logbook.cpp | 35 ++++- logbook/logbook.h | 10 +- logbook/logbook.pri | 6 +- main.cpp | 2 + models/CabrilloLog.cpp | 183 ++++++++++++++++------ models/CabrilloLog.hpp | 17 +- qt_db_helpers.hpp | 1 + widgets/CabrilloLogWindow.cpp | 10 +- widgets/FrequencyDeltaLineEdit.cpp | 54 +++++++ widgets/FrequencyDeltaLineEdit.hpp | 29 ++++ widgets/FrequencyLineEdit.cpp | 18 --- widgets/FrequencyLineEdit.hpp | 18 +-- widgets/displaytext.cpp | 2 +- widgets/displaytext.h | 2 - widgets/logqso.cpp | 2 +- widgets/mainwindow.cpp | 2 +- widgets/widgets.pri | 3 +- 31 files changed, 473 insertions(+), 128 deletions(-) create mode 100644 item_delegates/FrequencyDelegate.cpp create mode 100644 item_delegates/FrequencyDelegate.hpp create mode 100644 item_delegates/FrequencyDeltaDelegate.cpp create mode 100644 item_delegates/FrequencyDeltaDelegate.hpp create mode 100644 logbook/Multiplier.cpp create mode 100644 logbook/Multiplier.hpp create mode 100644 widgets/FrequencyDeltaLineEdit.cpp create mode 100644 widgets/FrequencyDeltaLineEdit.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d5d18467c..a2d6dd396 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -237,6 +237,7 @@ set (wsjt_qt_CXXSRCS models/FrequencyList.cpp models/StationList.cpp widgets/FrequencyLineEdit.cpp + widgets/FrequencyDeltaLineEdit.cpp item_delegates/CandidateKeyFilter.cpp item_delegates/ForeignKeyDelegate.cpp validators/LiveFrequencyValidator.cpp @@ -279,9 +280,12 @@ set (wsjt_qt_CXXSRCS widgets/CabrilloLogWindow.cpp item_delegates/CallsignDelegate.cpp item_delegates/MaidenheadLocatorDelegate.cpp + item_delegates/FrequencyDelegate.cpp + item_delegates/FrequencyDeltaDelegate.cpp models/CabrilloLog.cpp logbook/AD1CCty.cpp logbook/WorkedBefore.cpp + logbook/Multiplier.cpp ) set (wsjt_qtmm_CXXSRCS diff --git a/Configuration.cpp b/Configuration.cpp index 08ee2e9d3..b78739d11 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -167,8 +167,11 @@ #include "MetaDataRegistry.hpp" #include "SettingsGroup.hpp" #include "widgets/FrequencyLineEdit.hpp" +#include "widgets/FrequencyDeltaLineEdit.hpp" #include "item_delegates/CandidateKeyFilter.hpp" #include "item_delegates/ForeignKeyDelegate.hpp" +#include "item_delegates/FrequencyDelegate.hpp" +#include "item_delegates/FrequencyDeltaDelegate.hpp" #include "TransceiverFactory.hpp" #include "Transceiver.hpp" #include "models/Bands.hpp" @@ -1122,6 +1125,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network ui_->frequencies_table_view->setColumnHidden (FrequencyList_v2::frequency_mhz_column, true); // delegates + ui_->frequencies_table_view->setItemDelegateForColumn (FrequencyList_v2::frequency_column, new FrequencyDelegate {this}); ui_->frequencies_table_view->setItemDelegateForColumn (FrequencyList_v2::region_column, new ForeignKeyDelegate {®ions_, 0, this}); ui_->frequencies_table_view->setItemDelegateForColumn (FrequencyList_v2::mode_column, new ForeignKeyDelegate {&modes_, 0, this}); @@ -1160,6 +1164,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network ui_->stations_table_view->sortByColumn (StationList::band_column, Qt::AscendingOrder); // stations delegates + ui_->stations_table_view->setItemDelegateForColumn (StationList::offset_column, new FrequencyDeltaDelegate {this}); ui_->stations_table_view->setItemDelegateForColumn (StationList::band_column, new ForeignKeyDelegate {&bands_, &next_stations_, 0, StationList::band_column, this}); // stations actions diff --git a/MetaDataRegistry.cpp b/MetaDataRegistry.cpp index 32af71b4d..e66a43008 100644 --- a/MetaDataRegistry.cpp +++ b/MetaDataRegistry.cpp @@ -14,7 +14,6 @@ #include "WFPalette.hpp" #include "models/IARURegions.hpp" #include "models/DecodeHighlightingModel.hpp" -#include "widgets/FrequencyLineEdit.hpp" #include "widgets/DateTimeEdit.hpp" namespace @@ -51,9 +50,6 @@ void register_types () // used as signal/slot connection arguments since the new Qt 5.5 // Q_ENUM macro only seems to register the unqualified name - item_editor_factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); - //auto frequency_delta_type_id = qRegisterMetaType ("FrequencyDelta"); - item_editor_factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); item_editor_factory->registerEditor (qMetaTypeId (), new QStandardItemEditorCreator ()); // Frequency list model diff --git a/Radio.cpp b/Radio.cpp index 3940815f4..e5b34c35d 100644 --- a/Radio.cpp +++ b/Radio.cpp @@ -74,14 +74,14 @@ namespace Radio } - QString frequency_MHz_string (Frequency f, QLocale const& locale) + QString frequency_MHz_string (Frequency f, int precision, QLocale const& locale) { - return locale.toString (f / MHz_factor, 'f', frequency_precsion); + return locale.toString (f / MHz_factor, 'f', precision); } - QString frequency_MHz_string (FrequencyDelta d, QLocale const& locale) + QString frequency_MHz_string (FrequencyDelta d, int precision, QLocale const& locale) { - return locale.toString (d / MHz_factor, 'f', frequency_precsion); + return locale.toString (d / MHz_factor, 'f', precision); } QString pretty_frequency_MHz_string (Frequency f, QLocale const& locale) diff --git a/Radio.hpp b/Radio.hpp index 7f8b0a0f4..e63abf4b8 100644 --- a/Radio.hpp +++ b/Radio.hpp @@ -42,8 +42,8 @@ namespace Radio // // Frequency type formatting // - QString UDP_EXPORT frequency_MHz_string (Frequency, QLocale const& = QLocale ()); - QString UDP_EXPORT frequency_MHz_string (FrequencyDelta, QLocale const& = QLocale ()); + QString UDP_EXPORT frequency_MHz_string (Frequency, int precision = 6, QLocale const& = QLocale ()); + QString UDP_EXPORT frequency_MHz_string (FrequencyDelta, int precision = 6, QLocale const& = QLocale ()); QString UDP_EXPORT pretty_frequency_MHz_string (Frequency, QLocale const& = QLocale ()); QString UDP_EXPORT pretty_frequency_MHz_string (double, int scale, QLocale const& = QLocale ()); QString UDP_EXPORT pretty_frequency_MHz_string (FrequencyDelta, QLocale const& = QLocale ()); diff --git a/item_delegates/FrequencyDelegate.cpp b/item_delegates/FrequencyDelegate.cpp new file mode 100644 index 000000000..b899c0563 --- /dev/null +++ b/item_delegates/FrequencyDelegate.cpp @@ -0,0 +1,27 @@ +#include "FrequencyDelegate.hpp" + +#include "widgets/FrequencyLineEdit.hpp" + +FrequencyDelegate::FrequencyDelegate (QObject * parent) + : QStyledItemDelegate {parent} +{ +} + +QWidget * FrequencyDelegate::createEditor (QWidget * parent, QStyleOptionViewItem const& + , QModelIndex const&) const +{ + auto * editor = new FrequencyLineEdit {parent}; + editor->setFrame (false); + return editor; +} + +void FrequencyDelegate::setEditorData (QWidget * editor, QModelIndex const& index) const +{ + static_cast (editor)->frequency (index.model ()->data (index, Qt::EditRole).value ()); +} + +void FrequencyDelegate::setModelData (QWidget * editor, QAbstractItemModel * model, QModelIndex const& index) const +{ + model->setData (index, static_cast (editor)->frequency (), Qt::EditRole); +} + diff --git a/item_delegates/FrequencyDelegate.hpp b/item_delegates/FrequencyDelegate.hpp new file mode 100644 index 000000000..76fc5545d --- /dev/null +++ b/item_delegates/FrequencyDelegate.hpp @@ -0,0 +1,21 @@ +#ifndef FREQUENCY_DELEGATE_HPP_ +#define FREQUENCY_DELEGATE_HPP_ + +#include + +// +// Class FrequencyDelegate +// +// Item delegate for editing a frequency in Hertz but displayed in MHz +// +class FrequencyDelegate final + : public QStyledItemDelegate +{ +public: + explicit FrequencyDelegate (QObject * parent = nullptr); + QWidget * createEditor (QWidget * parent, QStyleOptionViewItem const&, QModelIndex const&) const override; + void setEditorData (QWidget * editor, QModelIndex const&) const override; + void setModelData (QWidget * editor, QAbstractItemModel *, QModelIndex const&) const override; +}; + +#endif diff --git a/item_delegates/FrequencyDeltaDelegate.cpp b/item_delegates/FrequencyDeltaDelegate.cpp new file mode 100644 index 000000000..40d90dc58 --- /dev/null +++ b/item_delegates/FrequencyDeltaDelegate.cpp @@ -0,0 +1,26 @@ +#include "FrequencyDeltaDelegate.hpp" + +#include "widgets/FrequencyDeltaLineEdit.hpp" + +FrequencyDeltaDelegate::FrequencyDeltaDelegate (QObject * parent) + : QStyledItemDelegate {parent} +{ +} + +QWidget * FrequencyDeltaDelegate::createEditor (QWidget * parent, QStyleOptionViewItem const& + , QModelIndex const&) const +{ + auto * editor = new FrequencyDeltaLineEdit {parent}; + editor->setFrame (false); + return editor; +} + +void FrequencyDeltaDelegate::setEditorData (QWidget * editor, QModelIndex const& index) const +{ + static_cast (editor)->frequency_delta (index.model ()->data (index, Qt::EditRole).value ()); +} + +void FrequencyDeltaDelegate::setModelData (QWidget * editor, QAbstractItemModel * model, QModelIndex const& index) const +{ + model->setData (index, static_cast (editor)->frequency_delta (), Qt::EditRole); +} diff --git a/item_delegates/FrequencyDeltaDelegate.hpp b/item_delegates/FrequencyDeltaDelegate.hpp new file mode 100644 index 000000000..121bc3d94 --- /dev/null +++ b/item_delegates/FrequencyDeltaDelegate.hpp @@ -0,0 +1,21 @@ +#ifndef FREQUENCY_DELTA_DELEGATE_HPP_ +#define FREQUENCY_DELTA_DELEGATE_HPP_ + +#include + +// +// Class FrequencyDeltaDelegate +// +// Item delegate for editing a frequency delta in Hertz but displayed in MHz +// +class FrequencyDeltaDelegate final + : public QStyledItemDelegate +{ +public: + explicit FrequencyDeltaDelegate (QObject * parent = nullptr); + QWidget * createEditor (QWidget * parent, QStyleOptionViewItem const&, QModelIndex const&) const override; + void setEditorData (QWidget * editor, QModelIndex const&) const override; + void setModelData (QWidget * editor, QAbstractItemModel *, QModelIndex const&) const override; +}; + +#endif diff --git a/item_delegates/item_delegates.pri b/item_delegates/item_delegates.pri index 026e1ca57..819cb2e0c 100644 --- a/item_delegates/item_delegates.pri +++ b/item_delegates/item_delegates.pri @@ -1,11 +1,13 @@ SOURCES += \ item_delegates/ForeignKeyDelegate.cpp \ - item_delegates/FrequencyItemDelegate.cpp \ + item_delegates/FrequencyDelegate.cpp \ + item_delegates/FrequencyDeltaDelegate.cpp \ item_delegates/CallsignDelegate.cpp \ item_delegates/MaidenheadLocatorItemDelegate.cpp HEADERS += \ item_delegates/ForeignKeyDelegate.hpp \ - item_delegates/FrequencyItemDelegate.hpp \ + item_delegates/FrequencyDelegate.hpp \ + item_delegates/FrequencyDeltaDelegate.hpp \ item_delegates/CallsignDelegate.hpp \ item_delegates/MaidenheadLocatorDelegate.hpp diff --git a/logbook/Multiplier.cpp b/logbook/Multiplier.cpp new file mode 100644 index 000000000..64f6cc6f3 --- /dev/null +++ b/logbook/Multiplier.cpp @@ -0,0 +1,45 @@ +#include "Multiplier.hpp" + +#include +#include +#include +#include "models/CabrilloLog.hpp" +#include "pimpl_impl.hpp" + +class Multiplier::impl +{ +public: + impl (AD1CCty const * countries) + : countries_ {countries} + { + } + + AD1CCty const * countries_; + worked_set entities_worked_; + worked_set grids_worked_; +}; + +Multiplier::Multiplier (AD1CCty const * countries) + : m_ {countries} +{ +} + +Multiplier::~Multiplier () +{ +} + +void Multiplier::reload (CabrilloLog const * log) +{ + m_->entities_worked_ = log->unique_DXCC_entities (m_->countries_); + qDebug () << "Entities worked:" << m_->entities_worked_; +} + +auto Multiplier::entities_worked () const -> worked_set const& +{ + return m_->entities_worked_; +} + +auto Multiplier::grids_worked () const -> worked_set const& +{ + return m_->grids_worked_; +} diff --git a/logbook/Multiplier.hpp b/logbook/Multiplier.hpp new file mode 100644 index 000000000..2271dd775 --- /dev/null +++ b/logbook/Multiplier.hpp @@ -0,0 +1,30 @@ +#ifndef MULTIPLIER_HPP_ +#define MULTIPLIER_HPP_ + +#include +#include +#include "pimpl_h.hpp" + +class QString; +class AD1CCty; +class CabrilloLog; + +class Multiplier final + : private boost::noncopyable +{ +public: + using worked_item = QPair; + using worked_set = QSet; + + explicit Multiplier (AD1CCty const *); + ~Multiplier (); + void reload (CabrilloLog const *); + worked_set const& entities_worked () const; + worked_set const& grids_worked () const; + +private: + class impl; + pimpl m_; +}; + +#endif diff --git a/logbook/WorkedBefore.cpp b/logbook/WorkedBefore.cpp index 5edc51d3e..aa65ab651 100644 --- a/logbook/WorkedBefore.cpp +++ b/logbook/WorkedBefore.cpp @@ -415,9 +415,9 @@ QString const& WorkedBefore::path () const return m_->path_; } -AD1CCty const& WorkedBefore::countries () const +AD1CCty const * WorkedBefore::countries () const { - return m_->prefixes_; + return &m_->prefixes_; } bool WorkedBefore::add (QString const& call diff --git a/logbook/WorkedBefore.hpp b/logbook/WorkedBefore.hpp index 8b115351f..1aae1aca4 100644 --- a/logbook/WorkedBefore.hpp +++ b/logbook/WorkedBefore.hpp @@ -29,7 +29,7 @@ public: , QByteArray const& ADIF_record); QString const& path () const; - AD1CCty const& countries () const; + AD1CCty const * countries () const; bool country_worked (QString const& call, QString const& mode, QString const& band) const; bool grid_worked (QString const& grid, QString const& mode, QString const& band) const; bool call_worked (QString const& call, QString const& mode, QString const& band) const; diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index bde52228c..a154664d5 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -3,6 +3,8 @@ #include #include "Configuration.hpp" #include "AD1CCty.hpp" +#include "Multiplier.hpp" +#include "logbook/AD1CCty.hpp" #include "models/CabrilloLog.hpp" #include "models/FoxLog.hpp" @@ -16,6 +18,10 @@ LogBook::LogBook (Configuration const * configuration) connect (&worked_before_, &WorkedBefore::finished_loading, this, &LogBook::finished_loading); } +LogBook::~LogBook () +{ +} + void LogBook::match (QString const& call, QString const& mode, QString const& grid, AD1CCty::Record const& looked_up, bool& callB4, @@ -144,19 +150,36 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q CabrilloLog * LogBook::contest_log () { // lazy create of Cabrillo log object instance - if (!m_contest_log) + if (!contest_log_) { - m_contest_log.reset (new CabrilloLog {config_}); + contest_log_.reset (new CabrilloLog {config_}); + if (!multiplier_) + { + multiplier_.reset (new Multiplier {countries ()}); + } + connect (contest_log_.data (), &CabrilloLog::data_changed, [this] () { + multiplier_->reload (contest_log_.data ()); + }); } - return m_contest_log.data (); + return contest_log_.data (); +} + +Multiplier const * LogBook::multiplier () const +{ + // lazy create of Multiplier object instance + if (!multiplier_) + { + multiplier_.reset (new Multiplier {countries ()}); + } + return multiplier_.data (); } FoxLog * LogBook::fox_log () { // lazy create of Fox log object instance - if (!m_fox_log) + if (!fox_log_) { - m_fox_log.reset (new FoxLog {config_}); + fox_log_.reset (new FoxLog {config_}); } - return m_fox_log.data (); + return fox_log_.data (); } diff --git a/logbook/logbook.h b/logbook/logbook.h index 2fd73bd3b..c87009e48 100644 --- a/logbook/logbook.h +++ b/logbook/logbook.h @@ -16,6 +16,7 @@ class Configuration; class QByteArray; class QDateTime; class CabrilloLog; +class Multiplier; class FoxLog; class LogBook final @@ -25,13 +26,14 @@ class LogBook final public: LogBook (Configuration const *); + ~LogBook (); QString const& path () const {return worked_before_.path ();} bool add (QString const& call , QString const& grid , QString const& band , QString const& mode , QByteArray const& ADIF_record); - AD1CCty const& countries () const {return worked_before_.countries ();} + AD1CCty const * countries () const {return worked_before_.countries ();} void rescan (); void match (QString const& call, QString const& mode, QString const& grid, AD1CCty::Record const&, bool& callB4, bool& countryB4, @@ -47,13 +49,15 @@ public: Q_SIGNAL void finished_loading (int worked_before_record_count, QString const& error) const; CabrilloLog * contest_log (); + Multiplier const * multiplier () const; FoxLog * fox_log (); private: Configuration const * config_; WorkedBefore worked_before_; - QScopedPointer m_contest_log; - QScopedPointer m_fox_log; + QScopedPointer contest_log_; + QScopedPointer mutable multiplier_; + QScopedPointer fox_log_; }; #endif diff --git a/logbook/logbook.pri b/logbook/logbook.pri index fcac62524..e67cdebd3 100644 --- a/logbook/logbook.pri +++ b/logbook/logbook.pri @@ -2,10 +2,12 @@ SOURCES += \ logbook/countriesworked.cpp \ logbook/logbook.cpp \ logbook/AD1CCty.cpp \ - logbook/WorkedBefore.cpp + logbook/WorkedBefore.cpp \ + logbook/Multiplier.cpp HEADERS += \ logbook/WorkedBefore.hpp \ logbook/logbook.h \ logbook/countriesworked.h \ - logbook/AD1CCty.hpp + logbook/AD1CCty.hpp \ + logbook/Multiplier.hpp diff --git a/main.cpp b/main.cpp index 1ea0c6a49..9070ce33f 100644 --- a/main.cpp +++ b/main.cpp @@ -380,10 +380,12 @@ int main(int argc, char *argv[]) } catch (std::exception const& e) { + MessageBox::critical_message (nullptr, QApplication::translate ("main", "Fatal error"), e.what ()); std::cerr << "Error: " << e.what () << '\n'; } catch (...) { + MessageBox::critical_message (nullptr, QApplication::translate ("main", "Unexpected fatal error")); std::cerr << "Unexpected fatal error\n"; throw; // hoping the runtime might tell us more about the exception } diff --git a/models/CabrilloLog.cpp b/models/CabrilloLog.cpp index 6a637f07d..5c3b0ef5b 100644 --- a/models/CabrilloLog.cpp +++ b/models/CabrilloLog.cpp @@ -20,59 +20,122 @@ class CabrilloLog::impl final : public QSqlTableModel { public: - impl (Configuration const *); + impl (CabrilloLog *, Configuration const *); - QVariant data (QModelIndex const& index, int role) const + int columnCount (QModelIndex const& /*index */) const override { - auto value = QSqlTableModel::data (index, role); - if (index.column () == fieldIndex ("when") - && (Qt::DisplayRole == role || Qt::EditRole == role)) + return QSqlTableModel::columnCount () + 1; + } + + Qt::ItemFlags flags (QModelIndex const& index) const override + { + auto flags = QSqlTableModel::flags (index); + if (index.isValid () && index.column () == columnCount (index) - 1) { - auto t = QDateTime::fromMSecsSinceEpoch (value.toULongLong () * 1000ull, Qt::UTC); + flags = Qt::ItemIsEnabled; + } + return flags; + } + + QVariant data (QModelIndex const& model_index, int role) const override + { + QVariant value; + if (model_index.isValid () && model_index.column () == columnCount (model_index) - 1) + { // derive band column if (Qt::DisplayRole == role) { - QLocale locale; - return locale.toString (t, locale.dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); + value = configuration_->bands ()->find (QSqlTableModel::data (index (model_index.row (), fieldIndex ("frequency"))).toULongLong ()); + } + } + else + { + value = QSqlTableModel::data (model_index, role); + if (model_index.column () == fieldIndex ("frequency") && Qt::DisplayRole == role) + { + value = Radio::frequency_MHz_string (value.value (), 3); // kHz precision + } + else if (model_index.column () == fieldIndex ("when") + && (Qt::DisplayRole == role || Qt::EditRole == role)) + { // adjust date/time to Qt format + auto t = QDateTime::fromMSecsSinceEpoch (value.toULongLong () * 1000ull, Qt::UTC); + if (Qt::DisplayRole == role) + { + QLocale locale; + return locale.toString (t, locale.dateFormat (QLocale::ShortFormat) + " hh:mm:ss"); + } + value = t; } - value = t; } return value; } QString cabrillo_frequency_string (Radio::Frequency frequency) const; + void create_table (); + CabrilloLog * self_; Configuration const * configuration_; QSqlQuery mutable dupe_query_; QSqlQuery mutable export_query_; + bool adding_row_; }; -CabrilloLog::impl::impl (Configuration const * configuration) - : QSqlTableModel {} +CabrilloLog::impl::impl (CabrilloLog * self, Configuration const * configuration) + : self_ {self} , configuration_ {configuration} + , adding_row_ {false} { if (!database ().tables ().contains ("cabrillo_log")) + { + create_table (); + } + + setEditStrategy (QSqlTableModel::OnFieldChange); + setTable ("cabrillo_log"); + if (-1 != fieldIndex ("band")) // schema out of date { QSqlQuery query; SQL_error_check (query, static_cast (&QSqlQuery::exec), - "CREATE TABLE cabrillo_log (" - " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," - " frequency INTEGER NOT NULL," - " \"when\" DATETIME NOT NULL," - " call VARCHAR(20) NOT NULL," - " exchange_sent VARCHAR(32) NOT NULL," - " exchange_rcvd VARCHAR(32) NOT NULL," - " band VARCHAR(6) NOT NULL" - ")"); + "DROP TABLE IF EXISTS cabrillo_log_backup"); + SQL_error_check (query, static_cast (&QSqlQuery::exec), + "CREATE TABLE cabrillo_log_backup AS SELECT * FROM cabrillo_log"); + SQL_error_check (query, static_cast (&QSqlQuery::exec), + "DROP TABLE cabrillo_log"); + create_table (); + setTable ("cabrillo_log"); } + setHeaderData (fieldIndex ("frequency"), Qt::Horizontal, tr ("Freq(MHz)")); + setHeaderData (fieldIndex ("mode"), Qt::Horizontal, tr ("Mode")); + setHeaderData (fieldIndex ("when"), Qt::Horizontal, tr ("Date & Time(UTC)")); + setHeaderData (fieldIndex ("call"), Qt::Horizontal, tr ("Call")); + setHeaderData (fieldIndex ("exchange_sent"), Qt::Horizontal, tr ("Sent")); + setHeaderData (fieldIndex ("exchange_rcvd"), Qt::Horizontal, tr ("Rcvd")); + setHeaderData (columnCount (QModelIndex {}) - 1, Qt::Horizontal, tr ("Band")); + + // This descending order by time is important, it makes the view + // place the latest row at the top, without this the model/view + // interactions are both sluggish and unhelpful. + setSort (fieldIndex ("when"), Qt::DescendingOrder); + + connect (this, &CabrilloLog::impl::modelReset, self_, &CabrilloLog::data_changed); + connect (this, &CabrilloLog::impl::dataChanged, [this] (QModelIndex const& tl, QModelIndex const& br) { + if (!adding_row_ && !(tl == br)) // ignore single cell changes + // as a another change for the + // whole row will follow + { + Q_EMIT self_->data_changed (); + } + }); + + SQL_error_check (*this, &QSqlTableModel::select); + SQL_error_check (dupe_query_, &QSqlQuery::prepare, "SELECT " - " COUNT(*) " + " frequency " " FROM " " cabrillo_log " " WHERE " - " call = :call " - " AND band = :band"); + " call = :call "); SQL_error_check (export_query_, &QSqlQuery::prepare, "SELECT " @@ -85,29 +148,28 @@ CabrilloLog::impl::impl (Configuration const * configuration) " cabrillo_log " " ORDER BY " " \"when\""); - - setEditStrategy (QSqlTableModel::OnFieldChange); - setTable ("cabrillo_log"); - setHeaderData (fieldIndex ("frequency"), Qt::Horizontal, tr ("Freq(kHz)")); - setHeaderData (fieldIndex ("when"), Qt::Horizontal, tr ("Date & Time(UTC)")); - setHeaderData (fieldIndex ("call"), Qt::Horizontal, tr ("Call")); - setHeaderData (fieldIndex ("exchange_sent"), Qt::Horizontal, tr ("Sent")); - setHeaderData (fieldIndex ("exchange_rcvd"), Qt::Horizontal, tr ("Rcvd")); - setHeaderData (fieldIndex ("band"), Qt::Horizontal, tr ("Band")); +} - // This descending order by time is important, it makes the view - // place the latest row at the top, without this the model/view - // interactions are both sluggish and unhelpful. - setSort (fieldIndex ("when"), Qt::DescendingOrder); - - SQL_error_check (*this, &QSqlTableModel::select); +void CabrilloLog::impl::create_table () +{ + QSqlQuery query; + SQL_error_check (query, static_cast (&QSqlQuery::exec), + "CREATE TABLE cabrillo_log (" + " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + " frequency INTEGER NOT NULL," + " mode VARCHAR(6) NOT NULL," + " \"when\" DATETIME NOT NULL," + " call VARCHAR(20) NOT NULL," + " exchange_sent VARCHAR(32) NOT NULL," + " exchange_rcvd VARCHAR(32) NOT NULL" + ")"); } // frequency here is in kHz QString CabrilloLog::impl::cabrillo_frequency_string (Radio::Frequency frequency) const { QString result; - auto band = configuration_->bands ()->find (frequency * 1000ull); + auto band = configuration_->bands ()->find (frequency); if ("1mm" == band) result = "LIGHT"; else if ("2mm" == band) result = "241G"; else if ("2.5mm" == band) result = "134G"; @@ -125,12 +187,15 @@ QString CabrilloLog::impl::cabrillo_frequency_string (Radio::Frequency frequency else if ("2m" == band) result = "144"; else if ("4m" == band) result = "70"; else if ("6m" == band) result = "50"; - else result = QString::number (frequency); + else result = QString::number (frequency / 1000ull); return result; } -CabrilloLog::CabrilloLog (Configuration const * configuration) - : m_ {configuration} +#include "moc_CabrilloLog.cpp" + +CabrilloLog::CabrilloLog (Configuration const * configuration, QObject * parent) + : QObject {parent} + , m_ {this, configuration} { Q_ASSERT (configuration); } @@ -159,11 +224,12 @@ namespace } } -bool CabrilloLog::add_QSO (Frequency frequency, QDateTime const& when, QString const& call +bool CabrilloLog::add_QSO (Frequency frequency, QString const& mode, QDateTime const& when, QString const& call , QString const& exchange_sent, QString const& exchange_received) { auto record = m_->record (); - record.setValue ("frequency", frequency / 1000ull); // kHz + record.setValue ("frequency", frequency); + record.setValue ("mode", mode); if (!when.isNull ()) { record.setValue ("when", when.toMSecsSinceEpoch () / 1000ull); @@ -175,15 +241,16 @@ bool CabrilloLog::add_QSO (Frequency frequency, QDateTime const& when, QString c set_value_maybe_null (record, "call", call); set_value_maybe_null (record, "exchange_sent", exchange_sent); set_value_maybe_null (record, "exchange_rcvd", exchange_received); - set_value_maybe_null (record, "band", m_->configuration_->bands ()->find (frequency)); if (m_->isDirty ()) { m_->revert (); // discard any uncommitted changes } m_->setEditStrategy (QSqlTableModel::OnManualSubmit); ConditionalTransaction transaction {*m_}; + m_->adding_row_ = true; auto ok = m_->insertRecord (-1, record); transaction.submit (); + m_->adding_row_ = false; m_->setEditStrategy (QSqlTableModel::OnFieldChange); return ok; } @@ -191,10 +258,18 @@ bool CabrilloLog::add_QSO (Frequency frequency, QDateTime const& when, QString c bool CabrilloLog::dupe (Frequency frequency, QString const& call) const { m_->dupe_query_.bindValue (":call", call); - m_->dupe_query_.bindValue (":band", m_->configuration_->bands ()->find (frequency)); SQL_error_check (m_->dupe_query_, static_cast (&QSqlQuery::exec)); - m_->dupe_query_.next (); - return m_->dupe_query_.value (0).toInt (); + auto record = m_->dupe_query_.record (); + auto frequency_index = record.indexOf ("frequency"); + while (m_->dupe_query_.next ()) + { + if (m_->configuration_->bands ()->find (m_->dupe_query_.value (frequency_index).toULongLong ()) + == m_->configuration_->bands ()->find (frequency)) + { + return true; + } + } + return false; } void CabrilloLog::reset () @@ -209,6 +284,7 @@ void CabrilloLog::reset () transaction.submit (); m_->select (); // to refresh views m_->setEditStrategy (QSqlTableModel::OnFieldChange); + Q_EMIT data_changed (); } } @@ -217,6 +293,7 @@ void CabrilloLog::export_qsos (QTextStream& stream) const SQL_error_check (m_->export_query_, static_cast (&QSqlQuery::exec)); auto record = m_->export_query_.record (); auto frequency_index = record.indexOf ("frequency"); + // auto mode_index = record.indexOf ("mode"); auto when_index = record.indexOf ("when"); auto call_index = record.indexOf ("call"); auto sent_index = record.indexOf ("exchange_sent"); @@ -234,14 +311,16 @@ void CabrilloLog::export_qsos (QTextStream& stream) const } } -QSet CabrilloLog::unique_DXCC_entities (AD1CCty const& countries) const +auto CabrilloLog::unique_DXCC_entities (AD1CCty const * countries) const -> worked_set { - QSqlQuery q {"SELECT UNIQUE CALL FROM cabrillo_log"}; + QSqlQuery q {"SELECT DISTINCT BAND, CALL FROM cabrillo_log"}; + auto band_index = q.record ().indexOf ("band"); auto call_index = q.record ().indexOf ("call"); - QSet entities; + worked_set entities; while (q.next ()) { - entities << countries.lookup (q.value(call_index).toString ()).primary_prefix; + entities << worked_item {q.value (band_index).toString () + , countries->lookup (q.value (call_index).toString ()).primary_prefix}; } return entities; } diff --git a/models/CabrilloLog.hpp b/models/CabrilloLog.hpp index ad0255297..97d8f0d88 100644 --- a/models/CabrilloLog.hpp +++ b/models/CabrilloLog.hpp @@ -1,8 +1,9 @@ #ifndef CABRILLO_LOG_HPP_ #define CABRILLO_LOG_HPP_ -#include +#include #include +#include #include #include "Radio.hpp" #include "pimpl_h.hpp" @@ -14,23 +15,29 @@ class QTextStream; class AD1CCty; class CabrilloLog final - : private boost::noncopyable + : public QObject { + Q_OBJECT + public: using Frequency = Radio::Frequency; + using worked_item = QPair; + using worked_set = QSet; - explicit CabrilloLog (Configuration const *); + explicit CabrilloLog (Configuration const *, QObject * parent = nullptr); ~CabrilloLog (); // returns false if insert fails - bool add_QSO (Frequency, QDateTime const&, QString const& call + bool add_QSO (Frequency, QString const& mode, QDateTime const&, QString const& call , QString const& report_sent, QString const& report_received); bool dupe (Frequency, QString const& call) const; QSqlTableModel * model (); void reset (); void export_qsos (QTextStream&) const; - QSet unique_DXCC_entities (AD1CCty const&) const; + worked_set unique_DXCC_entities (AD1CCty const *) const; + + Q_SIGNAL void data_changed () const; private: class impl; diff --git a/qt_db_helpers.hpp b/qt_db_helpers.hpp index 49a082f72..dcf9d0333 100644 --- a/qt_db_helpers.hpp +++ b/qt_db_helpers.hpp @@ -6,6 +6,7 @@ #include #include #include +#include "boost/core/noncopyable.hpp" template void SQL_error_check (T&& object, Func func, Args&&... args) diff --git a/widgets/CabrilloLogWindow.cpp b/widgets/CabrilloLogWindow.cpp index 2f7b44d4a..6fd753136 100644 --- a/widgets/CabrilloLogWindow.cpp +++ b/widgets/CabrilloLogWindow.cpp @@ -1,10 +1,12 @@ #include "CabrilloLogWindow.hpp" +#include #include #include #include #include "Configuration.hpp" #include "models/Bands.hpp" +#include "item_delegates/FrequencyDelegate.hpp" #include "item_delegates/ForeignKeyDelegate.hpp" #include "item_delegates/CallsignDelegate.hpp" #include "pimpl_impl.hpp" @@ -29,7 +31,7 @@ namespace switch (index.column ()) { case 1: - case 6: + case 7: return Qt::AlignRight + Qt::AlignVCenter; default: break; @@ -63,10 +65,10 @@ CabrilloLogWindow::CabrilloLogWindow (QSettings * settings, Configuration const m_->format_model_.setSourceModel (m_->log_model_); m_->ui_.log_table_view->setModel (&m_->format_model_); set_log_view (m_->ui_.log_table_view); - m_->ui_.log_table_view->setItemDelegateForColumn (3, new CallsignDelegate {this}); - m_->ui_.log_table_view->setItemDelegateForColumn (6, new ForeignKeyDelegate {configuration->bands (), 0, this}); + m_->ui_.log_table_view->setItemDelegateForColumn (1, new FrequencyDelegate {this}); + m_->ui_.log_table_view->setItemDelegateForColumn (4, new CallsignDelegate {this}); auto h_header = m_->ui_.log_table_view->horizontalHeader (); - h_header->moveSection (6, 1); // band to first column + h_header->moveSection (7, 1); // band to first column } CabrilloLogWindow::~CabrilloLogWindow () diff --git a/widgets/FrequencyDeltaLineEdit.cpp b/widgets/FrequencyDeltaLineEdit.cpp new file mode 100644 index 000000000..b7ed144b6 --- /dev/null +++ b/widgets/FrequencyDeltaLineEdit.cpp @@ -0,0 +1,54 @@ +#include "FrequencyDeltaLineEdit.hpp" + +#include + +#include +#include +#include + +#include "moc_FrequencyDeltaLineEdit.cpp" + +namespace +{ + class MHzValidator + : public QDoubleValidator + { + public: + MHzValidator (double bottom, double top, QObject * parent = nullptr) + : QDoubleValidator {bottom, top, 6, parent} + { + } + + State validate (QString& input, int& pos) const override + { + State result = QDoubleValidator::validate (input, pos); + if (Acceptable == result) + { + bool ok; + (void)QLocale {}.toDouble (input, &ok); + if (!ok) + { + result = Intermediate; + } + } + return result; + } + }; +} + +FrequencyDeltaLineEdit::FrequencyDeltaLineEdit (QWidget * parent) + : QLineEdit (parent) +{ + setValidator (new MHzValidator {-std::numeric_limits::max () / 10.e6, + std::numeric_limits::max () / 10.e6, this}); +} + +auto FrequencyDeltaLineEdit::frequency_delta () const -> FrequencyDelta +{ + return Radio::frequency_delta (text (), 6); +} + +void FrequencyDeltaLineEdit::frequency_delta (FrequencyDelta d) +{ + setText (Radio::frequency_MHz_string (d)); +} diff --git a/widgets/FrequencyDeltaLineEdit.hpp b/widgets/FrequencyDeltaLineEdit.hpp new file mode 100644 index 000000000..caa00ecba --- /dev/null +++ b/widgets/FrequencyDeltaLineEdit.hpp @@ -0,0 +1,29 @@ +#ifndef FREQUENCY_DELTA_LINE_EDIT_HPP_ +#define FREQUENCY_DELTA_LINE_EDIT_HPP_ + +#include + +#include "Radio.hpp" + +class QWidget; + +// +// MHz frequency delta line edit with validation +// +class FrequencyDeltaLineEdit final + : public QLineEdit +{ + Q_OBJECT; + Q_PROPERTY (FrequencyDelta frequency_delta READ frequency_delta WRITE frequency_delta USER true); + +public: + using FrequencyDelta = Radio::FrequencyDelta; + + explicit FrequencyDeltaLineEdit (QWidget * parent = nullptr); + + // Property frequency_delta implementation + FrequencyDelta frequency_delta () const; + void frequency_delta (FrequencyDelta); +}; + +#endif diff --git a/widgets/FrequencyLineEdit.cpp b/widgets/FrequencyLineEdit.cpp index 78f8b2e1f..1ca2ba20b 100644 --- a/widgets/FrequencyLineEdit.cpp +++ b/widgets/FrequencyLineEdit.cpp @@ -51,21 +51,3 @@ void FrequencyLineEdit::frequency (Frequency f) { setText (Radio::frequency_MHz_string (f)); } - - -FrequencyDeltaLineEdit::FrequencyDeltaLineEdit (QWidget * parent) - : QLineEdit (parent) -{ - setValidator (new MHzValidator {-std::numeric_limits::max () / 10.e6, - std::numeric_limits::max () / 10.e6, this}); -} - -auto FrequencyDeltaLineEdit::frequency_delta () const -> FrequencyDelta -{ - return Radio::frequency_delta (text (), 6); -} - -void FrequencyDeltaLineEdit::frequency_delta (FrequencyDelta d) -{ - setText (Radio::frequency_MHz_string (d)); -} diff --git a/widgets/FrequencyLineEdit.hpp b/widgets/FrequencyLineEdit.hpp index dec0feb00..7e535f5a9 100644 --- a/widgets/FrequencyLineEdit.hpp +++ b/widgets/FrequencyLineEdit.hpp @@ -8,7 +8,7 @@ class QWidget; // -// MHz frequency line edits with validation +// MHz frequency line edit with validation // class FrequencyLineEdit final : public QLineEdit @@ -26,20 +26,4 @@ public: void frequency (Frequency); }; -class FrequencyDeltaLineEdit final - : public QLineEdit -{ - Q_OBJECT; - Q_PROPERTY (FrequencyDelta frequency_delta READ frequency_delta WRITE frequency_delta USER true); - -public: - using FrequencyDelta = Radio::FrequencyDelta; - - explicit FrequencyDeltaLineEdit (QWidget * parent = nullptr); - - // Property frequency_delta implementation - FrequencyDelta frequency_delta () const; - void frequency_delta (FrequencyDelta); -}; - #endif diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index c0bcd4129..53d7cd5cd 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -271,7 +271,7 @@ QString DisplayText::appendWorkedB4 (QString message, QString call, QString cons if(call.length()<3) return message; if(!call.contains(QRegExp("[0-9]|[A-Z]"))) return message; - auto const& looked_up = logBook.countries ().lookup (call); + auto const& looked_up = logBook.countries ()->lookup (call); logBook.match (call, currentMode, grid, looked_up, callB4, countryB4, gridB4, continentB4, CQZoneB4, ITUZoneB4); logBook.match (call, currentMode, grid, looked_up, callB4onBand, countryB4onBand, gridB4onBand, continentB4onBand, CQZoneB4onBand, ITUZoneB4onBand, currentBand); diff --git a/widgets/displaytext.h b/widgets/displaytext.h index 7f308bef8..8b580b8a2 100644 --- a/widgets/displaytext.h +++ b/widgets/displaytext.h @@ -65,6 +65,4 @@ private: int modified_vertical_scrollbar_max_; }; - extern QHash m_LoTW; - #endif // DISPLAYTEXT_H diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index a9aa18341..2eaedf116 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -157,7 +157,7 @@ void LogQSO::accept() return; // without accepting } - if (!m_log->contest_log ()->add_QSO (m_dialFreq, dateTimeOff, hisCall, xsent, xrcvd)) + if (!m_log->contest_log ()->add_QSO (m_dialFreq, mode, dateTimeOff, hisCall, xsent, xrcvd)) { show (); MessageBox::warning_message (this, tr ("Invalid QSO Data"), diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index ef1ca5705..277dbfdd7 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -8267,7 +8267,7 @@ void MainWindow::houndCallers() if(!ui->textBrowser4->toPlainText().contains(paddedHoundCall)) { 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); //If we are using a directed CQ, ignore Hound calls that do not comply. diff --git a/widgets/widgets.pri b/widgets/widgets.pri index eef0c7857..3c2cb2444 100644 --- a/widgets/widgets.pri +++ b/widgets/widgets.pri @@ -8,13 +8,14 @@ SOURCES += \ widgets/fastplot.cpp widgets/MessageBox.cpp \ widgets/colorhighlighting.cpp widgets/ExportCabrillo.cpp \ widgets/AbstractLogWindow.cpp \ + widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \ widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp HEADERS += \ widgets/mainwindow.h widgets/plotter.h \ widgets/about.h widgets/widegraph.h \ widgets/displaytext.h widgets/logqso.h widgets/LettersSpinBox.hpp \ - widgets/FrequencyLineEdit.hpp widgets/signalmeter.h \ + widgets/FrequencyLineEdit.hpp widgets/FrequencyDeltaLineEdit.hpp widgets/signalmeter.h \ widgets/meterwidget.h widgets/messageaveraging.h \ widgets/echoplot.h widgets/echograph.h widgets/fastgraph.h \ widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \ From df4e00605ac7ce787df470973b679afd0424d371 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 30 May 2019 23:21:41 +0100 Subject: [PATCH 310/367] Better handling of exceptions thrown from contructors --- main.cpp | 2 ++ models/CabrilloLog.cpp | 58 +++++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/main.cpp b/main.cpp index fd510bffb..cd4129701 100644 --- a/main.cpp +++ b/main.cpp @@ -380,10 +380,12 @@ int main(int argc, char *argv[]) } catch (std::exception const& e) { + MessageBox::critical_message (nullptr, QApplication::translate ("main", "Fatal error"), e.what ()); std::cerr << "Error: " << e.what () << '\n'; } catch (...) { + MessageBox::critical_message (nullptr, QApplication::translate ("main", "Unexpected fatal error")); std::cerr << "Unexpected fatal error\n"; throw; // hoping the runtime might tell us more about the exception } diff --git a/models/CabrilloLog.cpp b/models/CabrilloLog.cpp index 1fee9b148..1ef2fcc30 100644 --- a/models/CabrilloLog.cpp +++ b/models/CabrilloLog.cpp @@ -22,6 +22,7 @@ public: impl (Configuration const *); QString cabrillo_frequency_string (Radio::Frequency frequency) const; + void create_table (); Configuration const * configuration_; QSqlQuery mutable dupe_query_; @@ -34,19 +35,25 @@ CabrilloLog::impl::impl (Configuration const * configuration) { if (!database ().tables ().contains ("cabrillo_log")) { - QSqlQuery query; - SQL_error_check (query, static_cast (&QSqlQuery::exec), - "CREATE TABLE cabrillo_log (" - " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," - " frequency INTEGER NOT NULL," - " \"when\" DATETIME NOT NULL," - " call VARCHAR(20) NOT NULL," - " exchange_sent VARCHAR(32) NOT NULL," - " exchange_rcvd VARCHAR(32) NOT NULL," - " band VARCHAR(6) NOT NULL" - ")"); + create_table (); } + setTable ("cabrillo_log"); + setEditStrategy (QSqlTableModel::OnFieldChange); + setHeaderData (fieldIndex ("frequency"), Qt::Horizontal, tr ("Freq(kHz)")); + setHeaderData (fieldIndex ("when"), Qt::Horizontal, tr ("Date & Time(UTC)")); + setHeaderData (fieldIndex ("call"), Qt::Horizontal, tr ("Call")); + setHeaderData (fieldIndex ("exchange_sent"), Qt::Horizontal, tr ("Sent")); + setHeaderData (fieldIndex ("exchange_rcvd"), Qt::Horizontal, tr ("Rcvd")); + setHeaderData (fieldIndex ("band"), Qt::Horizontal, tr ("Band")); + + // This descending order by time is important, it makes the view + // place the latest row at the top, without this the model/view + // interactions are both sluggish and unhelpful. + setSort (fieldIndex ("when"), Qt::DescendingOrder); + + SQL_error_check (*this, &QSqlTableModel::select); + SQL_error_check (dupe_query_, &QSqlQuery::prepare, "SELECT " " COUNT(*) " @@ -67,22 +74,21 @@ CabrilloLog::impl::impl (Configuration const * configuration) " cabrillo_log " " ORDER BY " " \"when\""); - - setEditStrategy (QSqlTableModel::OnFieldChange); - setTable ("cabrillo_log"); - setHeaderData (fieldIndex ("frequency"), Qt::Horizontal, tr ("Freq(kHz)")); - setHeaderData (fieldIndex ("when"), Qt::Horizontal, tr ("Date & Time(UTC)")); - setHeaderData (fieldIndex ("call"), Qt::Horizontal, tr ("Call")); - setHeaderData (fieldIndex ("exchange_sent"), Qt::Horizontal, tr ("Sent")); - setHeaderData (fieldIndex ("exchange_rcvd"), Qt::Horizontal, tr ("Rcvd")); - setHeaderData (fieldIndex ("band"), Qt::Horizontal, tr ("Band")); +} - // This descending order by time is important, it makes the view - // place the latest row at the top, without this the model/view - // interactions are both sluggish and unhelpful. - setSort (fieldIndex ("when"), Qt::DescendingOrder); - - SQL_error_check (*this, &QSqlTableModel::select); +void CabrilloLog::impl::create_table () +{ + QSqlQuery query; + SQL_error_check (query, static_cast (&QSqlQuery::exec), + "CREATE TABLE cabrillo_log (" + " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + " frequency INTEGER NOT NULL," + " \"when\" DATETIME NOT NULL," + " call VARCHAR(20) NOT NULL," + " exchange_sent VARCHAR(32) NOT NULL," + " exchange_rcvd VARCHAR(32) NOT NULL," + " band VARCHAR(6) NOT NULL" + ")"); } // frequency here is in kHz From 80c819c326135eecc6fcf5cd6d5b6941c9566c6b Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 30 May 2019 23:29:46 +0100 Subject: [PATCH 311/367] Use a new name for the revised cabrillo_log(_v2) database table This avoids most backward compatibility issues but contest logs cannot be carried forward to v2.1.0. --- models/CabrilloLog.cpp | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/models/CabrilloLog.cpp b/models/CabrilloLog.cpp index 5c3b0ef5b..dfba3d439 100644 --- a/models/CabrilloLog.cpp +++ b/models/CabrilloLog.cpp @@ -84,26 +84,13 @@ CabrilloLog::impl::impl (CabrilloLog * self, Configuration const * configuration , configuration_ {configuration} , adding_row_ {false} { - if (!database ().tables ().contains ("cabrillo_log")) + if (!database ().tables ().contains ("cabrillo_log_v2")) { create_table (); } setEditStrategy (QSqlTableModel::OnFieldChange); - setTable ("cabrillo_log"); - if (-1 != fieldIndex ("band")) // schema out of date - { - QSqlQuery query; - SQL_error_check (query, static_cast (&QSqlQuery::exec), - "DROP TABLE IF EXISTS cabrillo_log_backup"); - SQL_error_check (query, static_cast (&QSqlQuery::exec), - "CREATE TABLE cabrillo_log_backup AS SELECT * FROM cabrillo_log"); - SQL_error_check (query, static_cast (&QSqlQuery::exec), - "DROP TABLE cabrillo_log"); - create_table (); - setTable ("cabrillo_log"); - } - + setTable ("cabrillo_log_v2"); setHeaderData (fieldIndex ("frequency"), Qt::Horizontal, tr ("Freq(MHz)")); setHeaderData (fieldIndex ("mode"), Qt::Horizontal, tr ("Mode")); setHeaderData (fieldIndex ("when"), Qt::Horizontal, tr ("Date & Time(UTC)")); @@ -133,7 +120,7 @@ CabrilloLog::impl::impl (CabrilloLog * self, Configuration const * configuration "SELECT " " frequency " " FROM " - " cabrillo_log " + " cabrillo_log_v2 " " WHERE " " call = :call "); @@ -145,7 +132,7 @@ CabrilloLog::impl::impl (CabrilloLog * self, Configuration const * configuration " , call" " , exchange_rcvd" " FROM " - " cabrillo_log " + " cabrillo_log_v2 " " ORDER BY " " \"when\""); } @@ -154,7 +141,7 @@ void CabrilloLog::impl::create_table () { QSqlQuery query; SQL_error_check (query, static_cast (&QSqlQuery::exec), - "CREATE TABLE cabrillo_log (" + "CREATE TABLE cabrillo_log_v2 (" " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," " frequency INTEGER NOT NULL," " mode VARCHAR(6) NOT NULL," @@ -313,7 +300,7 @@ void CabrilloLog::export_qsos (QTextStream& stream) const auto CabrilloLog::unique_DXCC_entities (AD1CCty const * countries) const -> worked_set { - QSqlQuery q {"SELECT DISTINCT BAND, CALL FROM cabrillo_log"}; + QSqlQuery q {"SELECT DISTINCT BAND, CALL FROM cabrillo_log_v2"}; auto band_index = q.record ().indexOf ("band"); auto call_index = q.record ().indexOf ("call"); worked_set entities; From a867a3ca18580469e593ebb572b3292121fe2887 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 28 May 2019 18:58:12 +0100 Subject: [PATCH 312/367] Updates to Omni-Rig interface in line with suggestions from Alex, VE3NEA Includes tidying up some old and obsolete code. --- DXLabSuiteCommanderTransceiver.cpp | 4 +- DXLabSuiteCommanderTransceiver.hpp | 2 +- HRDTransceiver.cpp | 2 +- HRDTransceiver.hpp | 2 +- HamlibTransceiver.cpp | 4 +- HamlibTransceiver.hpp | 2 +- OmniRigTransceiver.cpp | 303 ++++++++++++++++------------- OmniRigTransceiver.hpp | 7 +- PollingTransceiver.cpp | 70 +++---- PollingTransceiver.hpp | 4 +- TransceiverBase.cpp | 33 +++- TransceiverBase.hpp | 2 - 12 files changed, 239 insertions(+), 196 deletions(-) diff --git a/DXLabSuiteCommanderTransceiver.cpp b/DXLabSuiteCommanderTransceiver.cpp index 4e9270cfe..d745ec17f 100644 --- a/DXLabSuiteCommanderTransceiver.cpp +++ b/DXLabSuiteCommanderTransceiver.cpp @@ -127,7 +127,7 @@ int DXLabSuiteCommanderTransceiver::do_start () throw error {tr ("DX Lab Suite Commander didn't respond correctly reading frequency: ") + reply}; } - poll (); + do_poll (); return resolution; } @@ -247,7 +247,7 @@ void DXLabSuiteCommanderTransceiver::do_mode (MODE m) update_mode (m); } -void DXLabSuiteCommanderTransceiver::poll () +void DXLabSuiteCommanderTransceiver::do_poll () { #if WSJT_TRACE_CAT && WSJT_TRACE_CAT_POLLS bool quiet {false}; diff --git a/DXLabSuiteCommanderTransceiver.hpp b/DXLabSuiteCommanderTransceiver.hpp index b02fbef12..1196678b8 100644 --- a/DXLabSuiteCommanderTransceiver.hpp +++ b/DXLabSuiteCommanderTransceiver.hpp @@ -39,7 +39,7 @@ protected: void do_mode (MODE) override; void do_ptt (bool on) override; - void poll () override; + void do_poll () override; private: MODE get_mode (bool no_debug = false); diff --git a/HRDTransceiver.cpp b/HRDTransceiver.cpp index 3b9f90e23..c44914145 100644 --- a/HRDTransceiver.cpp +++ b/HRDTransceiver.cpp @@ -885,7 +885,7 @@ bool HRDTransceiver::is_button_checked (int button_index, bool no_debug) return "1" == reply; } -void HRDTransceiver::poll () +void HRDTransceiver::do_poll () { #if WSJT_TRACE_CAT && WSJT_TRACE_CAT_POLLS bool quiet {false}; diff --git a/HRDTransceiver.hpp b/HRDTransceiver.hpp index e17134d53..6ccd72d52 100644 --- a/HRDTransceiver.hpp +++ b/HRDTransceiver.hpp @@ -48,7 +48,7 @@ protected: void do_ptt (bool on) override; // Implement the PollingTransceiver interface. - void poll () override; + void do_poll () override; private: QString send_command (QString const&, bool no_debug = false, bool prepend_context = true, bool recurse = false); diff --git a/HamlibTransceiver.cpp b/HamlibTransceiver.cpp index f2e55bb4b..da0623e22 100644 --- a/HamlibTransceiver.cpp +++ b/HamlibTransceiver.cpp @@ -632,7 +632,7 @@ int HamlibTransceiver::do_start () resolution = -1; // best guess } - poll (); + do_poll (); TRACE_CAT ("HamlibTransceiver", "exit" << state () << "reversed =" << reversed_ << "resolution = " << resolution); return resolution; @@ -898,7 +898,7 @@ void HamlibTransceiver::do_mode (MODE mode) update_mode (mode); } -void HamlibTransceiver::poll () +void HamlibTransceiver::do_poll () { #if !WSJT_TRACE_CAT_POLLS #if defined (NDEBUG) diff --git a/HamlibTransceiver.hpp b/HamlibTransceiver.hpp index c8c0f74d7..17f1c28d3 100644 --- a/HamlibTransceiver.hpp +++ b/HamlibTransceiver.hpp @@ -40,7 +40,7 @@ class HamlibTransceiver final void do_mode (MODE) override; void do_ptt (bool) override; - void poll () override; + void do_poll () override; void error_check (int ret_code, QString const& doing) const; void set_conf (char const * item, char const * value); diff --git a/OmniRigTransceiver.cpp b/OmniRigTransceiver.cpp index 09f1e5cfa..4d3bbf1f8 100644 --- a/OmniRigTransceiver.cpp +++ b/OmniRigTransceiver.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "qt_helpers.hpP" @@ -109,6 +110,15 @@ OmniRigTransceiver::OmniRigTransceiver (std::unique_ptr wrapped { } +// returns false on time out +bool OmniRigTransceiver::await_notification_with_timeout (int timeout) +{ + QEventLoop el; + connect (this, &OmniRigTransceiver::notified, &el, [&el] () {el.exit (1);}); + QTimer::singleShot (timeout, Qt::CoarseTimer, &el, [&el] () {el.exit (0);}); + return 1 == el.exec (); // wait for notify or timer +} + int OmniRigTransceiver::do_start () { TRACE_CAT ("OmniRigTransceiver", "starting"); @@ -182,101 +192,97 @@ int OmniRigTransceiver::do_start () .arg (readable_params_, 8, 16, QChar ('0')) .arg (writable_params_, 8, 16, QChar ('0')) .arg (rig_number_).toLocal8Bit ()); - - offline_timer_.reset (new QTimer); - offline_timer_->setSingleShot (true); - offline_timer_->setInterval (5 * 1000); - connect (&*offline_timer_, &QTimer::timeout, this, &OmniRigTransceiver::timeout_check); - - for (unsigned tries {0}; tries < 10; ++tries) + if (OmniRig::ST_ONLINE != rig_->Status ()) { - QThread::msleep (100); // wait until OmniRig polls the rig - auto f = rig_->GetRxFrequency (); - int resolution {0}; - if (f) + throw_qstring ("OmniRig: " + rig_->StatusStr ()); + } + await_notification_with_timeout (1000); + update_rx_frequency (rig_->GetRxFrequency ()); + qDebug () << "Initial state:" << state (); + int resolution {0}; + if (OmniRig::PM_UNKNOWN == rig_->Vfo () + && (writable_params_ & (OmniRig::PM_VFOA | OmniRig::PM_VFOB)) + == (OmniRig::PM_VFOA | OmniRig::PM_VFOB)) + { + // start with VFO A (probably MAIN) on rigs that we + // can't query VFO but can set explicitly + rig_->SetVfo (OmniRig::PM_VFOA); + } + auto f = state ().frequency (); + if (f % 10) return resolution; // 1Hz resolution + auto test_frequency = f - f % 100 + 55; + if (OmniRig::PM_FREQ & writable_params_) + { + rig_->SetFreq (test_frequency); + } + else if (reversed_ && (OmniRig::PM_FREQB & writable_params_)) + { + rig_->SetFreqB (test_frequency); + } + else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_)) + { + rig_->SetFreqA (test_frequency); + } + else + { + throw_qstring (tr ("OmniRig: don't know how to set rig frequency")); + } + if (!await_notification_with_timeout (1000)) + { + TRACE_CAT ("OmniRigTransceiver", "do_start 1: wait timed out"); + throw_qstring (tr ("OmniRig: timeout waiting for update from rig")); + } + switch (rig_->GetRxFrequency () - test_frequency) + { + case -5: resolution = -1; break; // 10Hz truncated + case 5: resolution = 1; break; // 10Hz rounded + case -15: resolution = -2; break; // 20Hz truncated + case -55: resolution = -2; break; // 100Hz truncated + case 45: resolution = 2; break; // 100Hz rounded + } + if (1 == resolution) // may be 20Hz rounded + { + test_frequency = f - f % 100 + 51; + if (OmniRig::PM_FREQ & writable_params_) { - if (OmniRig::PM_UNKNOWN == rig_->Vfo () - && (writable_params_ & (OmniRig::PM_VFOA | OmniRig::PM_VFOB)) - == (OmniRig::PM_VFOA | OmniRig::PM_VFOB)) - { - // start with VFO A (probably MAIN) on rigs that we - // can't query VFO but can set explicitly - rig_->SetVfo (OmniRig::PM_VFOA); - } - if (f % 10) return resolution; // 1Hz resolution - auto test_frequency = f - f % 100 + 55; - if (OmniRig::PM_FREQ & writable_params_) - { - rig_->SetFreq (test_frequency); - } - else if (reversed_ && (OmniRig::PM_FREQB & writable_params_)) - { - rig_->SetFreqB (test_frequency); - } - else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_)) - { - rig_->SetFreqA (test_frequency); - } - else - { - throw_qstring (tr ("OmniRig: don't know how to set rig frequency")); - } - switch (rig_->GetRxFrequency () - test_frequency) - { - case -5: resolution = -1; break; // 10Hz truncated - case 5: resolution = 1; break; // 10Hz rounded - case -15: resolution = -2; break; // 20Hz truncated - case -55: resolution = -2; break; // 100Hz truncated - case 45: resolution = 2; break; // 100Hz rounded - } - if (1 == resolution) // may be 20Hz rounded - { - test_frequency = f - f % 100 + 51; - if (OmniRig::PM_FREQ & writable_params_) - { - rig_->SetFreq (test_frequency); - } - else if (reversed_ && (OmniRig::PM_FREQB & writable_params_)) - { - rig_->SetFreqB (test_frequency); - } - else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_)) - { - rig_->SetFreqA (test_frequency); - } - if (9 == rig_->GetRxFrequency () - test_frequency) - { - resolution = 2; // 20Hz rounded - } - } - if (OmniRig::PM_FREQ & writable_params_) - { - rig_->SetFreq (f); - } - else if (reversed_ && (OmniRig::PM_FREQB & writable_params_)) - { - rig_->SetFreqB (f); - } - else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_)) - { - rig_->SetFreqA (f); - } - update_rx_frequency (f); - return resolution; + rig_->SetFreq (test_frequency); + } + else if (reversed_ && (OmniRig::PM_FREQB & writable_params_)) + { + rig_->SetFreqB (test_frequency); + } + else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_)) + { + rig_->SetFreqA (test_frequency); + } + if (!await_notification_with_timeout (2000)) + { + TRACE_CAT ("OmniRigTransceiver", "do_start 2: wait timed out"); + throw_qstring (tr ("OmniRig: timeout waiting for update from rig")); + } + if (9 == rig_->GetRxFrequency () - test_frequency) + { + resolution = 2; // 20Hz rounded } } - throw_qstring (tr ("OmniRig: Initialization timed out")); - return 0; // keep compiler happy + if (OmniRig::PM_FREQ & writable_params_) + { + rig_->SetFreq (f); + } + else if (reversed_ && (OmniRig::PM_FREQB & writable_params_)) + { + rig_->SetFreqB (f); + } + else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_)) + { + rig_->SetFreqA (f); + } + update_rx_frequency (f); + return resolution; } void OmniRigTransceiver::do_stop () { - if (offline_timer_) - { - offline_timer_->stop (); - offline_timer_.reset (); - } - QThread::msleep (200); // leave some time for pending // commands at the server end if (port_) @@ -300,17 +306,6 @@ void OmniRigTransceiver::do_stop () TRACE_CAT ("OmniRigTransceiver", "stopped"); } -void OmniRigTransceiver::do_sync (bool force_signal, bool /*no_poll*/) -{ - // nothing much we can do here, we just have to let OmniRig do its - // stuff and its first poll should send us and update that will - // trigger a update signal from us. Any attempt to query OmniRig - // leads to a whole mess of trouble since its internal state is - // garbage until it has done its first rig poll. - send_update_signal_ = force_signal; - update_complete (); -} - void OmniRigTransceiver::handle_COM_exception (int code, QString source, QString desc, QString help) { TRACE_CAT ("OmniRigTransceiver", QString::number (code) + " at " + source + ": " + desc + " (" + help + ')'); @@ -319,16 +314,20 @@ void OmniRigTransceiver::handle_COM_exception (int code, QString source, QString void OmniRigTransceiver::handle_visible_change () { + if (!omni_rig_ || omni_rig_->isNull ()) return; TRACE_CAT ("OmniRigTransceiver", "visibility change: visibility =" << omni_rig_->DialogVisible ()); } void OmniRigTransceiver::handle_rig_type_change (int rig_number) { + if (!omni_rig_ || omni_rig_->isNull ()) return; + TRACE_CAT ("OmniRigTransceiver", "rig type change: rig =" << rig_number); if (rig_number_ == rig_number) { + if (!rig_ || rig_->isNull ()) return; readable_params_ = rig_->ReadableParams (); writable_params_ = rig_->WriteableParams (); - TRACE_CAT ("OmniRigTransceiver", QString {"OmniRig rig type change to: %1 readable params = 0x%2 writable params = 0x%3 for rig %4"} + TRACE_CAT ("OmniRigTransceiver", QString {"rig type change to: %1 readable params = 0x%2 writable params = 0x%3 for rig %4"} .arg (rig_->RigType ()) .arg (readable_params_, 8, 16, QChar ('0')) .arg (writable_params_, 8, 16, QChar ('0')) @@ -338,48 +337,43 @@ void OmniRigTransceiver::handle_rig_type_change (int rig_number) void OmniRigTransceiver::handle_status_change (int rig_number) { + if (!omni_rig_ || omni_rig_->isNull ()) return; + TRACE_CAT ("OmniRigTransceiver", QString {"status change for rig %1"}.arg (rig_number).toLocal8Bit ()); if (rig_number_ == rig_number) { + if (!rig_ || rig_->isNull ()) return; auto const& status = rig_->StatusStr ().toLocal8Bit (); - TRACE_CAT ("OmniRigTransceiver", QString {"OmniRig status change: new status for rig %1 = "}.arg (rig_number).toLocal8Bit () << status); + TRACE_CAT ("OmniRigTransceiver", "OmniRig status change: new status = " << status); if (OmniRig::ST_ONLINE != rig_->Status ()) { - if (!offline_timer_->isActive ()) - { - offline_timer_->start (); // give OmniRig time to recover - } - } - else - { - offline_timer_->stop (); - update_rx_frequency (rig_->GetRxFrequency ()); - update_complete (); - TRACE_CAT ("OmniRigTransceiver", "OmniRig frequency:" << state ().frequency ()); + offline ("Rig went offline"); } + // else + // { + // update_rx_frequency (rig_->GetRxFrequency ()); + // update_complete (); + // TRACE_CAT ("OmniRigTransceiver", "frequency:" << state ().frequency ()); + // } } } -void OmniRigTransceiver::timeout_check () -{ - offline ("Rig went offline"); -} - void OmniRigTransceiver::handle_params_change (int rig_number, int params) { - if (rig_number_ == rig_number) - { - TRACE_CAT ("OmniRigTransceiver", QString {"OmniRig params change: params = 0x%1 for rig %2"} + if (!omni_rig_ || omni_rig_->isNull ()) return; + TRACE_CAT ("OmniRigTransceiver", QString {"params change: params = 0x%1 for rig %2"} .arg (params, 8, 16, QChar ('0')) .arg (rig_number).toLocal8Bit () << "state before:" << state ()); + if (rig_number_ == rig_number) + { + if (!rig_ || rig_->isNull ()) return; // starting_ = false; TransceiverState old_state {state ()}; auto need_frequency = false; - // state_.online = true; // sometimes we don't get an initial - // // OmniRig::ST_ONLINE status change - // // event + if (params & OmniRig::PM_VFOAA) { + TRACE_CAT ("OmniRigTransceiver", "VFOAA"); update_split (false); reversed_ = false; update_rx_frequency (rig_->FreqA ()); @@ -387,6 +381,7 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) } if (params & OmniRig::PM_VFOAB) { + TRACE_CAT ("OmniRigTransceiver", "VFOAB"); update_split (true); reversed_ = false; update_rx_frequency (rig_->FreqA ()); @@ -394,6 +389,7 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) } if (params & OmniRig::PM_VFOBA) { + TRACE_CAT ("OmniRigTransceiver", "VFOBA"); update_split (true); reversed_ = true; update_other_frequency (rig_->FreqA ()); @@ -401,6 +397,7 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) } if (params & OmniRig::PM_VFOBB) { + TRACE_CAT ("OmniRigTransceiver", "VFOBB"); update_split (false); reversed_ = true; update_other_frequency (rig_->FreqA ()); @@ -408,64 +405,75 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) } if (params & OmniRig::PM_VFOA) { + TRACE_CAT ("OmniRigTransceiver", "VFOA"); reversed_ = false; need_frequency = true; } if (params & OmniRig::PM_VFOB) { + TRACE_CAT ("OmniRigTransceiver", "VFOB"); reversed_ = true; need_frequency = true; } if (params & OmniRig::PM_FREQ) { + TRACE_CAT ("OmniRigTransceiver", "FREQ"); need_frequency = true; } if (params & OmniRig::PM_FREQA) { + auto f = rig_->FreqA (); + TRACE_CAT ("OmniRigTransceiver", "FREQA = " << f); if (reversed_) { - update_other_frequency (rig_->FreqA ()); + update_other_frequency (f); } else { - update_rx_frequency (rig_->FreqA ()); + update_rx_frequency (f); } } if (params & OmniRig::PM_FREQB) { + auto f = rig_->FreqB (); + TRACE_CAT ("OmniRigTransceiver", "FREQB = " << f); if (reversed_) { - update_rx_frequency (rig_->FreqB ()); + update_rx_frequency (f); } else { - update_other_frequency (rig_->FreqB ()); + update_other_frequency (f); } } if (need_frequency) { if (readable_params_ & OmniRig::PM_FREQA) { + auto f = rig_->FreqA (); + TRACE_CAT ("OmniRigTransceiver", "FREQA = " << f); if (reversed_) { - update_other_frequency (rig_->FreqA ()); + update_other_frequency (f); } else { - update_rx_frequency (rig_->FreqA ()); + update_rx_frequency (f); } need_frequency = false; } if (readable_params_ & OmniRig::PM_FREQB) { + auto f = rig_->FreqB (); + TRACE_CAT ("OmniRigTransceiver", "FREQB = " << f); if (reversed_) { - update_rx_frequency (rig_->FreqB ()); + update_rx_frequency (f); } else { - update_other_frequency (rig_->FreqB ()); + update_other_frequency (f); } need_frequency = false; } @@ -473,89 +481,113 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) if (need_frequency && (readable_params_ & OmniRig::PM_FREQ) && !state ().ptt ()) { - update_rx_frequency (rig_->Freq ()); + auto f = rig_->Freq (); + TRACE_CAT ("OmniRigTransceiver", "FREQ = " << f); + update_rx_frequency (f); } if (params & OmniRig::PM_PITCH) { + TRACE_CAT ("OmniRigTransceiver", "PITCH"); } if (params & OmniRig::PM_RITOFFSET) { + TRACE_CAT ("OmniRigTransceiver", "RITOFFSET"); } if (params & OmniRig::PM_RIT0) { + TRACE_CAT ("OmniRigTransceiver", "RIT0"); } if (params & OmniRig::PM_VFOEQUAL) { auto f = readable_params_ & OmniRig::PM_FREQA ? rig_->FreqA () : rig_->Freq (); + auto m = map_mode (rig_->Mode ()); + TRACE_CAT ("OmniRigTransceiver", QString {"VFOEQUAL f=%1 m=%2"}.arg (f).arg (m)); update_rx_frequency (f); update_other_frequency (f); - update_mode (map_mode (rig_->Mode ())); + update_mode (m); } if (params & OmniRig::PM_VFOSWAP) { - auto temp = state ().tx_frequency (); + TRACE_CAT ("OmniRigTransceiver", "VFOSWAP"); + auto f = state ().tx_frequency (); update_other_frequency (state ().frequency ()); - update_rx_frequency (temp); + update_rx_frequency (f); update_mode (map_mode (rig_->Mode ())); } if (params & OmniRig::PM_SPLITON) { + TRACE_CAT ("OmniRigTransceiver", "SPLITON"); update_split (true); } if (params & OmniRig::PM_SPLITOFF) { + TRACE_CAT ("OmniRigTransceiver", "SPLITOFF"); update_split (false); } if (params & OmniRig::PM_RITON) { + TRACE_CAT ("OmniRigTransceiver", "RITON"); } if (params & OmniRig::PM_RITOFF) { + TRACE_CAT ("OmniRigTransceiver", "RITOFF"); } if (params & OmniRig::PM_XITON) { + TRACE_CAT ("OmniRigTransceiver", "XITON"); } if (params & OmniRig::PM_XITOFF) { + TRACE_CAT ("OmniRigTransceiver", "XITOFF"); } if (params & OmniRig::PM_RX) { + TRACE_CAT ("OmniRigTransceiver", "RX"); update_PTT (false); } if (params & OmniRig::PM_TX) { + TRACE_CAT ("OmniRigTransceiver", "TX"); update_PTT (); } if (params & OmniRig::PM_CW_U) { + TRACE_CAT ("OmniRigTransceiver", "CW-R"); update_mode (CW_R); } if (params & OmniRig::PM_CW_L) { + TRACE_CAT ("OmniRigTransceiver", "CW"); update_mode (CW); } if (params & OmniRig::PM_SSB_U) { + TRACE_CAT ("OmniRigTransceiver", "USB"); update_mode (USB); } if (params & OmniRig::PM_SSB_L) { + TRACE_CAT ("OmniRigTransceiver", "LSB"); update_mode (LSB); } if (params & OmniRig::PM_DIG_U) { + TRACE_CAT ("OmniRigTransceiver", "DATA-U"); update_mode (DIG_U); } if (params & OmniRig::PM_DIG_L) { + TRACE_CAT ("OmniRigTransceiver", "DATA-L"); update_mode (DIG_L); } if (params & OmniRig::PM_AM) { + TRACE_CAT ("OmniRigTransceiver", "AM"); update_mode (AM); } if (params & OmniRig::PM_FM) { + TRACE_CAT ("OmniRigTransceiver", "FM"); update_mode (FM); } @@ -566,6 +598,7 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) } TRACE_CAT ("OmniRigTransceiver", "OmniRig params change: state after:" << state ()); } + Q_EMIT notified (); } void OmniRigTransceiver::handle_custom_reply (int rig_number, QVariant const& command, QVariant const& reply) @@ -573,8 +606,10 @@ void OmniRigTransceiver::handle_custom_reply (int rig_number, QVariant const& co (void)command; (void)reply; + if (!omni_rig_ || omni_rig_->isNull ()) return; if (rig_number_ == rig_number) { + if (!rig_ || rig_->isNull ()) return; TRACE_CAT ("OmniRigTransceiver", "custom command" << command.toString ().toLocal8Bit () << "with reply" << reply.toString ().toLocal8Bit () << QString ("for rig %1").arg (rig_number).toLocal8Bit ()); diff --git a/OmniRigTransceiver.hpp b/OmniRigTransceiver.hpp index c63266b69..2ba5fd4d3 100644 --- a/OmniRigTransceiver.hpp +++ b/OmniRigTransceiver.hpp @@ -38,10 +38,11 @@ public: void do_tx_frequency (Frequency, MODE, bool no_ignore) override; void do_mode (MODE) override; void do_ptt (bool on) override; - void do_sync (bool force_signal, bool no_poll) override; private: - Q_SLOT void timeout_check (); + bool await_notification_with_timeout (int timeout); + Q_SIGNAL void notified () const; + // Q_SLOT void timeout_check (); Q_SLOT void handle_COM_exception (int, QString, QString, QString); Q_SLOT void handle_visible_change (); Q_SLOT void handle_rig_type_change (int rig_number); @@ -62,7 +63,7 @@ private: QString rig_type_; int readable_params_; int writable_params_; - QScopedPointer offline_timer_; + // QScopedPointer offline_timer_; bool send_update_signal_; bool reversed_; // some rigs can reverse VFOs }; diff --git a/PollingTransceiver.cpp b/PollingTransceiver.cpp index b2bbab179..ed47144af 100644 --- a/PollingTransceiver.cpp +++ b/PollingTransceiver.cpp @@ -129,52 +129,46 @@ bool PollingTransceiver::do_pre_update () return true; } -void PollingTransceiver::do_sync (bool force_signal, bool no_poll) -{ - if (!no_poll) poll (); // tell sub-classes to update our state - - // Signal new state if it is directly requested or, what we expected - // or, hasn't become what we expected after polls_to_stabilize - // polls. Unsolicited changes will be signalled immediately unless - // they intervene in a expected sequence where they will be delayed. - if (retries_) - { - --retries_; - if (force_signal || state () == next_state_ || !retries_) - { - // our client wants a signal regardless - // or the expected state has arrived - // or there are no more retries - force_signal = true; - } - } - else if (force_signal || state () != last_signalled_state_) - { - // here is the normal passive polling path either our client has - // requested a state update regardless of change or state has - // changed asynchronously - force_signal = true; - } - - if (force_signal) - { - // reset everything, record and signal the current state - retries_ = 0; - next_state_ = state (); - last_signalled_state_ = state (); - update_complete (true); - } -} - void PollingTransceiver::handle_timeout () { QString message; + bool force_signal {false}; // we must catch all exceptions here since we are called by Qt and // inform our parent of the failure via the offline() message try { - do_sync (); + do_poll (); // tell sub-classes to update our state + + // Signal new state if it what we expected or, hasn't become + // what we expected after polls_to_stabilize polls. Unsolicited + // changes will be signalled immediately unless they intervene + // in a expected sequence where they will be delayed. + if (retries_) + { + --retries_; + if (state () == next_state_ || !retries_) + { + // the expected state has arrived or there are no more + // retries + force_signal = true; + } + } + else if (state () != last_signalled_state_) + { + // here is the normal passive polling path where state has + // changed asynchronously + force_signal = true; + } + + if (force_signal) + { + // reset everything, record and signal the current state + retries_ = 0; + next_state_ = state (); + last_signalled_state_ = state (); + update_complete (true); + } } catch (std::exception const& e) { diff --git a/PollingTransceiver.hpp b/PollingTransceiver.hpp index 0945c84ac..a9e639f9d 100644 --- a/PollingTransceiver.hpp +++ b/PollingTransceiver.hpp @@ -39,11 +39,9 @@ protected: QObject * parent); protected: - void do_sync (bool force_signal = false, bool no_poll = false) override final; - // Sub-classes implement this and fetch what they can from the rig // in a non-intrusive manner. - virtual void poll () = 0; + virtual void do_poll () = 0; void do_post_start () override final; void do_post_stop () override final; diff --git a/TransceiverBase.cpp b/TransceiverBase.cpp index ef77d51e4..43a88a4e1 100644 --- a/TransceiverBase.cpp +++ b/TransceiverBase.cpp @@ -19,10 +19,10 @@ void TransceiverBase::start (unsigned sequence_number) noexcept QString message; try { + last_sequence_number_ = sequence_number; may_update u {this, true}; shutdown (); startup (); - last_sequence_number_ = sequence_number; } catch (std::exception const& e) { @@ -46,6 +46,7 @@ void TransceiverBase::set (TransceiverState const& s, QString message; try { + last_sequence_number_ = sequence_number; may_update u {this, true}; bool was_online {requested_.online ()}; if (!s.online () && was_online) @@ -115,7 +116,6 @@ void TransceiverBase::set (TransceiverState const& s, // record what actually changed requested_.ptt (actual_.ptt ()); } - last_sequence_number_ = sequence_number; } catch (std::exception const& e) { @@ -133,10 +133,27 @@ void TransceiverBase::set (TransceiverState const& s, void TransceiverBase::startup () { - Q_EMIT resolution (do_start ()); - do_post_start (); - actual_.online (true); - requested_.online (true); + QString message; + try + { + actual_.online (true); + requested_.online (true); + auto res = do_start (); + do_post_start (); + Q_EMIT resolution (res); + } + catch (std::exception const& e) + { + message = e.what (); + } + catch (...) + { + message = unexpected; + } + if (!message.isEmpty ()) + { + offline (message); + } } void TransceiverBase::shutdown () @@ -163,8 +180,8 @@ void TransceiverBase::shutdown () } do_stop (); do_post_stop (); - actual_.online (false); - requested_.online (false); + actual_ = TransceiverState {}; + requested_ = TransceiverState {}; } void TransceiverBase::stop () noexcept diff --git a/TransceiverBase.hpp b/TransceiverBase.hpp index ea981d44b..7d43cc32e 100644 --- a/TransceiverBase.hpp +++ b/TransceiverBase.hpp @@ -112,8 +112,6 @@ protected: virtual void do_ptt (bool = true) = 0; virtual void do_post_ptt (bool = true) {} - virtual void do_sync (bool force_signal = false, bool no_poll = false) = 0; - virtual bool do_pre_update () {return true;} // sub classes report rig state changes with these methods From fef64fc0e094ef1ccb1c006f655f8146e999b396 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 30 May 2019 23:36:02 +0100 Subject: [PATCH 313/367] Remove a diagnostic --- logbook/Multiplier.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/logbook/Multiplier.cpp b/logbook/Multiplier.cpp index 64f6cc6f3..6323e4feb 100644 --- a/logbook/Multiplier.cpp +++ b/logbook/Multiplier.cpp @@ -31,7 +31,6 @@ Multiplier::~Multiplier () void Multiplier::reload (CabrilloLog const * log) { m_->entities_worked_ = log->unique_DXCC_entities (m_->countries_); - qDebug () << "Entities worked:" << m_->entities_worked_; } auto Multiplier::entities_worked () const -> worked_set const& From 42173f181616942ae7a6d691b7e9d49fe0fe8e34 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 31 May 2019 00:13:43 +0100 Subject: [PATCH 314/367] Minor release notes additions --- Release_Notes.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Release_Notes.txt b/Release_Notes.txt index efc7bb42c..60fa0aa20 100644 --- a/Release_Notes.txt +++ b/Release_Notes.txt @@ -37,6 +37,8 @@ OTHER IMPROVEMENTS - Improved S/N calculation for FT4 mode - N1MM Logger+ now uses the standard WSJT-X UDP messages - OK/Cancel buttons on Log QSO window maintain fixed positions + - Enhancements to the Omni-Rig CAT interface + - New setting option to include or exclude WAE entities BUG FIXES - Fix generation of Tx5 message when one callsign is nonstandard @@ -44,6 +46,7 @@ BUG FIXES - Fix a bug that caused mode switch from FT4 to FT8 - Fix a bug that caused FT4 to do WSPR-style band hopping - Fix a bug that caused a Fortran bounds error + - Repaired field editing in the Contest Log window Release: WSJT-X 2.1.0-rc5 From 3456bdb9498678f358486eb178ba41471cbd4a6a Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 31 May 2019 03:10:46 +0100 Subject: [PATCH 315/367] Update for new FT4 sample .WAV file --- samples/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 6be6a6df2..271d2d3c4 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,5 +1,5 @@ set (SAMPLE_FILES - FT4/190106_000112.wav + FT4/000000_000002.wav FT8/181201_180245.wav ISCAT/ISCAT-A/VK7MO_110401_235515.wav ISCAT/ISCAT-B/K0AWU_100714_115000.wav From f61fc47efb34b0bb138b55c4016b250ce40efa58 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 31 May 2019 03:11:53 +0100 Subject: [PATCH 316/367] Bump RC number --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index f07339063..45cd79820 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 6) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 7) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From ca41934b6821808810e225f4f5c7885ea4f6c19a Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 3 Jun 2019 00:35:20 +0100 Subject: [PATCH 317/367] Repair an object instance initialization order issue that causes crashes The background thread running the ADIF log load needs a valid configuration object as it now depends on the "Include WAE entities" option. --- widgets/mainwindow.cpp | 2 +- widgets/mainwindow.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 277dbfdd7..f5c5cff41 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -234,8 +234,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_configurations_button {0}, m_settings {multi_settings->settings ()}, ui(new Ui::MainWindow), - m_logBook {&m_config}, m_config {&m_network_manager, temp_directory, m_settings, &m_logBook, this}, + m_logBook {&m_config}, m_WSPR_band_hopping {m_settings, &m_config, this}, m_WSPR_tx_next {false}, m_rigErrorMessageBox {MessageBox::Critical, tr ("Rig Control Error") diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 03d009a76..ca545ec35 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -357,8 +357,8 @@ private: QSettings * m_settings; QScopedPointer ui; - LogBook m_logBook; // must be before Configuration construction Configuration m_config; + LogBook m_logBook; // must be after Configuration construction WSPRBandHopping m_WSPR_band_hopping; bool m_WSPR_tx_next; MessageBox m_rigErrorMessageBox; From 0e8433d1b0c69919fb666e6dc21479afadefbe6b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 3 Jun 2019 08:26:32 -0400 Subject: [PATCH 318/367] Several edits to the Release Notes. --- Release_Notes.txt | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Release_Notes.txt b/Release_Notes.txt index efc7bb42c..101e13d74 100644 --- a/Release_Notes.txt +++ b/Release_Notes.txt @@ -13,30 +13,33 @@ Copyright 2001 - 2019 by Joe Taylor, K1JT. Release: WSJT-X 2.1.0-rc6 - May 30, 2019 + June 2, 2019 ------------------------- - + Changes and bug fixes since WSJT-X 2.1.0-rc5: -IMPORTANT CHANGES TO THE FT4 PROTOCOL, NOT BACKWARD COMPATIBLE +IMPORTANT CHANGES TO THE FT4 PROTOCOL *** NOT BACKWARD COMPATIBLE *** - T/R sequence length increased from 6.0 to 7.5 seconds - - Symbol rate decreased from 23.4375 to 20.8333 baud. - - Bandwidth decreased from 90 Hz to 80 Hz + - Symbol rate decreased from 23.4375 to 20.8333 baud + - Signal bandwidth decreased from 90 Hz to 80 Hz -OTHER IMPROVEMENTS - - Allowable FT4 time offsets -1.0 < DT < +1.0 s - - Allow RRR Tx4 message in FT4 mode, if not using contest messages - - Send FT4 audio frequency to PSK Reporter +OTHER FT4 IMPROVEMENTS + - Allowable time offsets -1.0 < DT < +1.0 s + - Tx4 message with RRR now allowed, except in contest messages + - Audio frequency is now sent to PSK Reporter - Add a third decoding pass - Add ordered statistics decoding - Improved sensitivity: threshold S/N is now -17.5 dB + - Improved S/N calculation + - In FT4 mode, Shift+F11/F12 moves Tx freq by +/- 100 Hz + +OTHER IMPROVEMENTS - Improvements to accessibility - Updates to the User Guide (not yet complete, however) - New user option: "Calling CQ forces Call 1st" - - In FT4 mode, Shift+F11/F12 moves Tx freq by +/- 100 Hz - - Improved S/N calculation for FT4 mode - N1MM Logger+ now uses the standard WSJT-X UDP messages - OK/Cancel buttons on Log QSO window maintain fixed positions + - Put EU VHF contest serial numbers into the ADIF SRX and STX fields BUG FIXES - Fix generation of Tx5 message when one callsign is nonstandard @@ -45,6 +48,13 @@ BUG FIXES - Fix a bug that caused FT4 to do WSPR-style band hopping - Fix a bug that caused a Fortran bounds error +Release candidate WSJT-X 2.1.0-rc6 will be available for beta-testing +through July 21, 2019. It will be inoperable during the ARRL June VHF +QSO Party (June 8-10) or ARRL Field Day (June 22-23). It will +permanently cease to function after July 21, 2019. If all goes +according to plan, by that time there will be a General +Availability (GA) release of WSJT-X 2.1.0. + Release: WSJT-X 2.1.0-rc5 April 29, 2019 From 248742a3c6b96e83172acc34822d8c231d7f8b29 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 3 Jun 2019 16:35:27 +0100 Subject: [PATCH 319/367] Stability fixes for Omni-Rig and its clones --- OmniRigTransceiver.cpp | 74 +++++++++++++++++++++++++++--------------- TransceiverBase.cpp | 7 ++-- 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/OmniRigTransceiver.cpp b/OmniRigTransceiver.cpp index 4d3bbf1f8..de352fb5a 100644 --- a/OmniRigTransceiver.cpp +++ b/OmniRigTransceiver.cpp @@ -192,13 +192,25 @@ int OmniRigTransceiver::do_start () .arg (readable_params_, 8, 16, QChar ('0')) .arg (writable_params_, 8, 16, QChar ('0')) .arg (rig_number_).toLocal8Bit ()); + for (int i = 0; i < 5; ++i) + { + if (OmniRig::ST_ONLINE == rig_->Status ()) + { + break; + } + await_notification_with_timeout (1000); + } if (OmniRig::ST_ONLINE != rig_->Status ()) { throw_qstring ("OmniRig: " + rig_->StatusStr ()); } - await_notification_with_timeout (1000); - update_rx_frequency (rig_->GetRxFrequency ()); - qDebug () << "Initial state:" << state (); + auto f = rig_->GetRxFrequency (); + for (int i = 0; (f == 0) && (i < 5); ++i) + { + await_notification_with_timeout (1000); + f = rig_->GetRxFrequency (); + } + update_rx_frequency (f); int resolution {0}; if (OmniRig::PM_UNKNOWN == rig_->Vfo () && (writable_params_ & (OmniRig::PM_VFOA | OmniRig::PM_VFOB)) @@ -208,7 +220,7 @@ int OmniRigTransceiver::do_start () // can't query VFO but can set explicitly rig_->SetVfo (OmniRig::PM_VFOA); } - auto f = state ().frequency (); + f = state ().frequency (); if (f % 10) return resolution; // 1Hz resolution auto test_frequency = f - f % 100 + 55; if (OmniRig::PM_FREQ & writable_params_) @@ -348,6 +360,10 @@ void OmniRigTransceiver::handle_status_change (int rig_number) { offline ("Rig went offline"); } + else + { + Q_EMIT notified (); + } // else // { // update_rx_frequency (rig_->GetRxFrequency ()); @@ -452,39 +468,45 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params) if (readable_params_ & OmniRig::PM_FREQA) { auto f = rig_->FreqA (); - TRACE_CAT ("OmniRigTransceiver", "FREQA = " << f); - if (reversed_) + if (f) { - update_other_frequency (f); + TRACE_CAT ("OmniRigTransceiver", "FREQA = " << f); + if (reversed_) + { + update_other_frequency (f); + } + else + { + update_rx_frequency (f); + } } - else - { - update_rx_frequency (f); - } - need_frequency = false; } if (readable_params_ & OmniRig::PM_FREQB) { auto f = rig_->FreqB (); - TRACE_CAT ("OmniRigTransceiver", "FREQB = " << f); - if (reversed_) + if (f) { + TRACE_CAT ("OmniRigTransceiver", "FREQB = " << f); + if (reversed_) + { + update_rx_frequency (f); + } + else + { + update_other_frequency (f); + } + } + } + if (readable_params_ & OmniRig::PM_FREQ && !state ().ptt ()) + { + auto f = rig_->Freq (); + if (f) + { + TRACE_CAT ("OmniRigTransceiver", "FREQ = " << f); update_rx_frequency (f); } - else - { - update_other_frequency (f); - } - need_frequency = false; } } - if (need_frequency && (readable_params_ & OmniRig::PM_FREQ) - && !state ().ptt ()) - { - auto f = rig_->Freq (); - TRACE_CAT ("OmniRigTransceiver", "FREQ = " << f); - update_rx_frequency (f); - } if (params & OmniRig::PM_PITCH) { TRACE_CAT ("OmniRigTransceiver", "PITCH"); diff --git a/TransceiverBase.cpp b/TransceiverBase.cpp index 43a88a4e1..f1decb682 100644 --- a/TransceiverBase.cpp +++ b/TransceiverBase.cpp @@ -211,8 +211,11 @@ void TransceiverBase::stop () noexcept void TransceiverBase::update_rx_frequency (Frequency rx) { - actual_.frequency (rx); - requested_.frequency (rx); // track rig changes + if (rx) + { + actual_.frequency (rx); + requested_.frequency (rx); // track rig changes + } } void TransceiverBase::update_other_frequency (Frequency tx) From d03900d738593fe49af340bb8390b772ba4e3db1 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 3 Jun 2019 16:41:17 +0100 Subject: [PATCH 320/367] Updated AD1C cty.dat (Big CTY.DAT 20190523) --- cty.dat | 1246 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 631 insertions(+), 615 deletions(-) diff --git a/cty.dat b/cty.dat index 3e12eaf9a..b1b8c2789 100644 --- a/cty.dat +++ b/cty.dat @@ -176,7 +176,7 @@ China: 24: 44: AS: 36.00: -102.00: -8.0: BY: BG,BG0(23)[42],BG9(23)[43],BH,BH0(23)[42],BH9(23)[43],BI,BI0(23)[42],BI9(23)[43],BJ,BJ0(23)[42], BJ9(23)[43],BL,BL0(23)[42],BL9(23)[43],BT,BT0(23)[42],BT9(23)[43],BY,BY0(23)[42],BY9(23)[43],BZ, BZ0(23)[42],BZ9(23)[43],XS,XS0(23)[42],XS9(23)[43],=B90IARU,=BD6KF/0(23)[42],=BD7MQ/9(23), - =BG6IFR/9(23),=BG9XD/4,=BG9XD/5,=BG9XD/7,=VO1AU/BY1RX,=VO1AU/BY1TTY,=W5FKX/BY1RX, + =BG6IFR/9(23),=BG9XD/4,=BG9XD/5,=BG9XD/7,=BH4CXY/9(23),=VO1AU/BY1RX,=VO1AU/BY1TTY,=W5FKX/BY1RX, =BA4DC/0(23)[42],=BD9BI/0(23)[42],=BG8FUL/0(23)[42], =BA4DT/0(23)[42],=BA4RF/0(23)[42],=BA7IO/0(23)[42],=BA7JS/0(23)[42],=BD1PTA/0(23)[42], =BD7IEE/0(23)[42],=BG1KIY/0(23)[42],=BG1LLB/0(23)[42],=BG1PIP/0(23)[42],=BG4WUA/0(23)[42], @@ -486,7 +486,7 @@ Nauru: 31: 65: OC: -0.52: -166.92: -12.0: C2: Andorra: 14: 27: EU: 42.58: -1.62: -1.0: C3: C3; The Gambia: 35: 46: AF: 13.40: 16.38: 0.0: C5: - C5,=C56W/BI,=VERSION; + C5,=C56W/BI; Bahamas: 08: 11: NA: 24.25: 76.00: 5.0: C6: C6,=WK2G/C6A/LH; Mozambique: 37: 53: AF: -18.25: -35.00: -2.0: C9: @@ -567,7 +567,7 @@ Antarctica: 13: 74: SA: -90.00: 0.00: 0.0: CE9: =LU/FT5YJ[73], =OR4TN(38)[67], =CE9/K2ARB(12), - =DH1HB/P(38)[67],=DH5CW(38)[67],=DP0/OJ1ABOA(38)[67],=DP0GVN(38)[67],=DP1POL(38)[67], + =DH1HB/P(38)[67],=DP0/OJ1ABOA(38)[67],=DP0GVN(38)[67],=DP1POL(38)[67], =FT5YJ/P[73], =R1ANR(38)[67],=RI1ANR(38)[67], =OH2FFP/P(38)[67], @@ -601,7 +601,7 @@ Portugal: 14: 37: EU: 39.50: 8.00: 0.0: CT: Madeira Islands: 33: 36: AF: 32.75: 16.95: 0.0: CT3: CQ2,CQ3,CQ9,CR3,CR9,CS3,CS9,CT3,CT9,=CT9500AEP/J; Azores: 14: 36: EU: 38.70: 27.23: 1.0: CU: - CQ1,CQ8,CR1,CR2,CR8,CS4,CS8,CT8,CU, + CQ1,CQ8,CR1,CR2,CR8,CS4,CS8,CT8,CU,=CU2JU/ND, =CQ8ARN/LH, =CU5/CU3EJ/LH, =CT8/DK6EA/LH; @@ -654,8 +654,8 @@ Palestine: 20: 39: AS: 31.28: -34.27: -2.0: E4: E4; North Cook Islands: 32: 62: OC: -10.02: 161.08: 10.0: E5/n: =E51LYC,=E51QMA,=E51TUG, - =E51AMF,=E51GC,=E51M,=E51MAN,=E51MBX,=E51MKW,=E51MQT,=E51PT,=E51QQQ,=E51UFF,=E51WWB,=ZK1HCC, - =ZK1MA,=ZK1NCF,=ZK1NCI,=ZK1TTG, + =E51AMF,=E51M,=E51MAN,=E51MBX,=E51MKW,=E51MQT,=E51PT,=E51QQQ,=E51UFF,=E51WWB,=ZK1HCC,=ZK1MA, + =ZK1NCF,=ZK1NCI,=ZK1TTG, =E50W[63],=E51PDX[63],=E51PEN[63],=E51WL[63],=ZK1/AC4LN/N[63],=ZK1KDN[63],=ZK1NCP[63],=ZK1NDK[63], =ZK1NJC[63],=ZK1QMA[63],=ZK1TUG[63],=ZK1WL[63]; South Cook Islands: 32: 63: OC: -21.90: 157.93: 10.0: E5/s: @@ -670,20 +670,21 @@ Spain: 14: 37: EU: 40.37: 4.88: -1.0: EA: =AM1TDH/LH,=EA1APV/LH,=EA1BEY/Y,=EA1EEY/L,=EA1EEY/LGT,=EA1EEY/LH,=EA1EK/ZAP,=EA1FGS/LH,=EA1HLW/YL, =EA1RCG/CPV,=EA1RCG/SEU,=EA1RCG/YOA,=EA1RCI/CA,=EA1RCI/CR,=EA1RCI/CVG,=EA1RCI/ESM,=EA1RCI/IA, =EA1RCI/ICA,=EA1RCI/JBN,=EA1RCI/PAZ,=EA1RCI/PCV,=EA1RCI/RSM,=EA1RCI/YOA,=EA1URL/CVL,=EA1URO/D, - =EA3HSD/P,=EA5AER/P,=EA6QB/1,=EA8BFH/1,=EA8CZT/1,=EA8FC/1,=EA8RV/P,=EA9CD/1,=EA9CI/1,=EA9CP/1, - =EA9PD/1,=EB1DH/LH,=ED1IRM/LH,=EG1ILW/LH,=EG1LWC/LH,=EG1LWI/LH,=EG1LWN/LH,=EG1TDH/LH,=EG90IARU/1, + =EA5AER/P,=EA6QB/1,=EA8BFH/1,=EA8CZT/1,=EA8FC/1,=EA8RV/P,=EA9CD/1,=EA9CI/1,=EA9CP/1,=EA9PD/1, + =EB1DH/LH,=ED1IRM/LH,=EG1ILW/LH,=EG1LWC/LH,=EG1LWI/LH,=EG1LWN/LH,=EG1TDH/LH,=EG90IARU/1, =AM08ATU/H,=AM08CAZ/H,=AM08CYQ/H,=AM08EIE/Z,=AM08FAC/H,=AN08ADE/H,=AO08BQH/Z,=AO08BTM/Z, =AO08CIK/H,=AO08CVV/Z,=AO08CXK/H,=AO08CYL/H,=AO08DI/Z,=AO08EIE/Z,=AO08HV/Z,=AO08ICA/Z,=AO08ID/Z, =AO08KJ/Z,=AO08KV/Z,=AO08OK/H,=AO08PB/Z,=AO08RKO/H,=AO08VK/Z,=AO2016DSS/LH,=EA2/ON7RU/LH, =EA2CRX/LH,=EA2EZ/P,=EA2SPS/LH,=EA2URI/O,=EA6SK/2,=EA9CP/2,=EG90IARU/2, - =EA3ESZ/Z,=EA3EVR/R,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3,=EG90IARU/3, + =EA3ESZ/Z,=EA3EVR/R,=EA3HSD/P,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3, + =EG90IARU/3, =EA4AAQ/O,=EA4RCH/CIE,=EA6AFU/4,=EA6RC/4,=EA8BFH/4,=EA8BY/4,=EA9CI/4,=EA9CP/4,=EG8AOP/4, =EG90IARU/4, - =EA5ADM/P,=EA5CC/P,=EA5EQ/N,=EA5EZ/P,=EA5FL/LH,=EA5GVT/AVW,=EA5HCC/P,=EA5IKT/P,=EA5KB/LH,=EA5ND/D, - =EA5RCK/CDI,=EA5RKD/PAZ,=EA5TOM/AVW,=EA5URE/IVA,=EA5URE/P,=EA5URM/C,=EA5URM/F,=EA5URM/G,=EA5URM/H, - =EA5URM/I,=EA5URM/L,=EA5URR/PAZ,=EA5URV/CAC,=EA6AKN/5,=EA8BFH/5,=EA8CWF/5,=EA9BLJ/5,=EA9CI/5, - =EA9CP/5,=EA9PD/5,=ED5MFP/C,=ED5MFP/G,=ED5MFP/H,=ED5MFP/I,=ED5MFP/K,=ED5MFP/Q,=ED5MFP/R,=ED5MFP/S, - =ED5URD/LH,=EG90IARU/5,=EH5FL/LH, + =EA5/ON4LO/LH,=EA5ADM/P,=EA5CC/P,=EA5EQ/N,=EA5EZ/P,=EA5FL/LH,=EA5GVT/AVW,=EA5HCC/P,=EA5IKT/P, + =EA5KB/LH,=EA5ND/D,=EA5RCK/CDI,=EA5RKD/PAZ,=EA5TOM/AVW,=EA5URE/IVA,=EA5URE/P,=EA5URM/C,=EA5URM/F, + =EA5URM/G,=EA5URM/H,=EA5URM/I,=EA5URM/L,=EA5URR/PAZ,=EA5URV/CAC,=EA6AKN/5,=EA8BFH/5,=EA8CWF/5, + =EA9BLJ/5,=EA9CI/5,=EA9CP/5,=EA9PD/5,=ED5MFP/C,=ED5MFP/G,=ED5MFP/H,=ED5MFP/I,=ED5MFP/K,=ED5MFP/Q, + =ED5MFP/R,=ED5MFP/S,=ED5URD/LH,=EG90IARU/5,=EH5FL/LH, =AO7WRD/MA,=EA6SK/7,=EA7CFU/U,=EA7FC/FCJ,=EA7HZ/F,=EA7OBH/LH,=EA7URA/GET,=EA7URA/PAZ,=EA7URA/SG, =EA7URA/YOTA,=EA7URE/PAZ,=EA7URF/PAZ,=EA7URI/MDL,=EA7URJ/CPM,=EA7URL/FSV,=EA7URM/PAZ,=EA7URP/LAI, =EA9CP/7,=EA9FN/7,=EA9HU,=EA9HU/7,=EA9JS/7,=EA9LZ/7,=EA9PD/7,=EA9QD/7,=EA9UL/7,=EA9UV/7,=EB9PH/7, @@ -771,7 +772,7 @@ Austral Islands: 32: 63: OC: -23.37: 149.48: 10.0: FO/a: =FO/AC4LN/A,=FO/DF6IC,=FO/DJ4OI,=FO/DL1AWI,=FO/DL1IAN,=FO/DL3APO,=FO/DL3GA,=FO/DL7FT,=FO/DL9AWI, =FO/F6CTL,=FO/F8CFU,=FO/G3BJ,=FO/HG9B,=FO/HG9B/P,=FO/IK2GNW,=FO/JA8BMK,=FO/K7AR,=FO/OH6KN, =FO/ON4AXU/A,=FO/UT6UD,=FO0CLA/A,=FO0ERI,=FO0FLA,=FO0FRY,=FO0HWU,=FO0MOT/P,=FO0SEV,=FO0WEG, - =FO0WII,=FO5FD,=TX0HF,=TX3D,=TX5BTY,=TX5D,=TX5RV,=TX5SPA,=TX5T,=TX5W,=TX5Z,=TX6G; + =FO0WII,=FO5FD,=TX0HF,=TX2A,=TX3D,=TX5BTY,=TX5D,=TX5RV,=TX5SPA,=TX5T,=TX5W,=TX5Z,=TX6G; Clipperton Island: 07: 10: NA: 10.28: 109.22: 8.0: FO/c: =FO0/F8UFT,=FO0AAA,=TX5C,=TX5K,=TX5P; Marquesas Islands: 31: 63: OC: -8.92: 140.07: 9.5: FO/m: @@ -887,10 +888,10 @@ Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: =GB2HLB,=GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT,=GB2JCM,=GB2KDR,=GB2KGB, =GB2KW,=GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB,=GB2LHI,=GB2LK,=GB2LK/LH, =GB2LMG,=GB2LP,=GB2LS,=GB2LS/LH,=GB2LSS,=GB2LT,=GB2LT/LH,=GB2LXX,=GB2M,=GB2MAS,=GB2MBB,=GB2MDG, - =GB2MN,=GB2MOF,=GB2MSL,=GB2MUC,=GB2MUL,=GB2NBC,=GB2NEF,=GB2NL,=GB2OL,=GB2OWM,=GB2PBF,=GB2PG, - =GB2QM,=GB2RB,=GB2RDR,=GB2RRL,=GB2RWW,=GB2SAA,=GB2SAM,=GB2SAS,=GB2SB,=GB2SBG,=GB2SHL/LH,=GB2SKG, - =GB2SLH,=GB2SMM,=GB2SOH,=GB2SQN,=GB2SR,=GB2SSB,=GB2SUM,=GB2SWF,=GB2TDS,=GB2THL,=GB2TNL,=GB2VCB, - =GB2VEF,=GB2WBF,=GB2WG,=GB2WLS,=GB2YLS,=GB2ZE,=GB3ANG,=GB3GKR,=GB3GM,=GB3LER,=GB3LER/B,=GB3ORK, + =GB2MN,=GB2MOF,=GB2MSL,=GB2MUC,=GB2MUL,=GB2NBC,=GB2NEF,=GB2NL,=GB2NMM,=GB2OL,=GB2OWM,=GB2PBF, + =GB2PG,=GB2QM,=GB2RB,=GB2RDR,=GB2RRL,=GB2RWW,=GB2SAA,=GB2SAM,=GB2SAS,=GB2SB,=GB2SBG,=GB2SHL/LH, + =GB2SKG,=GB2SLH,=GB2SMM,=GB2SOH,=GB2SQN,=GB2SR,=GB2SSB,=GB2SUM,=GB2SWF,=GB2TDS,=GB2THL,=GB2TNL, + =GB2VCB,=GB2VEF,=GB2WBF,=GB2WG,=GB2WLS,=GB2YLS,=GB2ZE,=GB3ANG,=GB3GKR,=GB3LER,=GB3LER/B,=GB3ORK, =GB3ORK/B,=GB3SWF,=GB3WOI,=GB4AAS,=GB4AST,=GB4BBR,=GB4BG,=GB4CGS,=GB4CMA,=GB4DAS,=GB4DHX,=GB4DTD, =GB4DUK,=GB4EPC,=GB4GD,=GB4GDS,=GB4GS,=GB4IE,=GB4JCM,=GB4JPJ,=GB4JYS,=GB4LER,=GB4MSE,=GB4NFE, =GB4OL,=GB4PAS,=GB4SK,=GB4SKO,=GB4SLH,=GB4SMM,=GB4SRO,=GB4SWF,=GB50FVS,=GB50GDS,=GB50JS,=GB50WAB, @@ -949,64 +950,65 @@ Wales: 14: 27: EU: 52.28: 3.73: 0.0: GW: =2R0BRR,=2R0CDY,=2R0CDZ,=2R0CSS,=2R0CVE,=2R0DRB,=2R0IDT,=2R0OJA,=2R0PHP,=2R0PJP,=2R0REX,=2R0RWF, =2R0TRR,=2R0TYG,=2R0XTP,=2R0YKK,=2R3SFC,=2V0CDY,=2V0CGM,=2V0CLJ,=2V0CVL,=2V0DAA,=2V0DUN,=2V0GME, =2V0GNG,=2V0KED,=2V0WDS,=2V1EPO,=GB0AAW,=GB0AD,=GB0AWE,=GB0AWS,=GB0BHR,=GB0BP,=GB0BRE,=GB0BTB, - =GB0BVL,=GB0BYL,=GB0CCE,=GB0CEW,=GB0CFD,=GB0CGG,=GB0CLC,=GB0CQD,=GB0CSA,=GB0CSR,=GB0CVA,=GB0DFD, - =GB0DMT,=GB0DS,=GB0DVP,=GB0FHD,=GB0FHI,=GB0GDD,=GB0GIW,=GB0GLV,=GB0GMD,=GB0GRM,=GB0HEL,=GB0HGC, - =GB0HLT,=GB0HMM,=GB0HMT,=GB0KF,=GB0L,=GB0LBG,=GB0LM,=GB0LVF,=GB0MFH,=GB0MIW,=GB0ML,=GB0MPA, - =GB0MUU,=GB0MWL,=GB0NAW,=GB0NEW,=GB0NG,=GB0NLC,=GB0PBR,=GB0PEM,=GB0PGG,=GB0PLB,=GB0PLL,=GB0PSG, - =GB0RME,=GB0ROC,=GB0RPO,=GB0RS,=GB0RSC,=GB0RSF,=GB0RWM,=GB0SDD,=GB0SGC,=GB0SH,=GB0SH/LH,=GB0SOA, - =GB0SPE,=GB0SPS,=GB0TD,=GB0TPR,=GB0TS,=GB0TTT,=GB0VCA,=GB0VK,=GB0WHH,=GB0WHR,=GB0WIW,=GB0WUL, - =GB0YG,=GB100AB,=GB100BP,=GB100CSW,=GB100GGC,=GB100GGM,=GB100HD,=GB100LB,=GB100LSG,=GB100MCV, - =GB100TMD,=GB10SOTA,=GB19CGW,=GB19CW,=GB19SG,=GB1AD,=GB1ATC,=GB1BAF,=GB1BGS,=GB1BPL,=GB1BSW, - =GB1BW,=GB1CCC,=GB1CDS,=GB1CPG,=GB1DS,=GB1FHS,=GB1HAS,=GB1HTW,=GB1JC,=GB1LSG,=GB1LW,=GB1OOC, - =GB1PCA,=GB1PCS,=GB1PD,=GB1PGW,=GB1PJ,=GB1PLL,=GB1SEA,=GB1SL,=GB1SPN,=GB1SSL,=GB1TDS,=GB1WAA, - =GB1WIW,=GB1WSM,=GB2000SET,=GB2003SET,=GB200HNT,=GB250TMB,=GB250TT,=GB2ADU,=GB2BEF,=GB2BGG, - =GB2BOM,=GB2BOW,=GB2BPM,=GB2BYF,=GB2CC,=GB2CI,=GB2COB,=GB2CR,=GB2CRS,=GB2DWR,=GB2EI,=GB2FC, - =GB2FLB,=GB2GGM,=GB2GLS,=GB2GOL,=GB2GSG,=GB2GVA,=GB2HDG,=GB2IMD,=GB2LBR,=GB2LM,=GB2LNP,=GB2LSA, - =GB2LSA/LH,=GB2LSH,=GB2MD,=GB2MGY,=GB2MIL,=GB2MMC,=GB2MOP,=GB2NF,=GB2NPH,=GB2NPL,=GB2OOA,=GB2PRC, - =GB2RFS,=GB2RTB,=GB2SAC,=GB2SCD,=GB2SCP,=GB2SFM,=GB2SIP,=GB2SLA,=GB2TD,=GB2TD/LH,=GB2TTA,=GB2VK, - =GB2WAA,=GB2WHO,=GB2WNA,=GB2WSF,=GB2WT,=GB3HLS,=GB3LMW,=GB4ADU,=GB4AFS,=GB4AOS,=GB4BB,=GB4BOJ, - =GB4BPL,=GB4BPL/LH,=GB4BPL/P,=GB4BPR,=GB4BRS/P,=GB4BSG,=GB4CI,=GB4CTC,=GB4EUL,=GB4FAA,=GB4GM, - =GB4GSS,=GB4HFH,=GB4HI,=GB4HLB,=GB4HMD,=GB4HMM,=GB4MBC,=GB4MD,=GB4MDH,=GB4MDI,=GB4MJS,=GB4MPI, - =GB4MUU,=GB4NDG,=GB4NPL,=GB4NTB,=GB4ON,=GB4OST,=GB4PAT,=GB4PCS,=GB4PD,=GB4POW,=GB4RC,=GB4RME, - =GB4RSL,=GB4SDD,=GB4SLC,=GB4SSP,=GB4SUB,=GB4TMS,=GB4UKG,=GB4VJD,=GB4WT,=GB4WWI,=GB4XT,=GB50ABS, - =GB50EVS,=GB50RSC,=GB50SGP,=GB5AC,=GB5FI,=GB5GEO,=GB5IMD,=GB5MD,=GB5ONG,=GB5PSJ,=GB5SIP,=GB5WT, - =GB60DITP,=GB60ER,=GB60PW,=GB60SPS,=GB60VLY,=GB65BTF,=GB6AC,=GB6BLB,=GB6CRI,=GB6GGM,=GB6OQA, - =GB6ORA,=GB6PLB,=GB6RNLI,=GB6SPD,=GB6TS,=GB6TSG,=GB6WT,=GB6WWT,=GB70BTF,=GB750CC,=GB75ATC,=GB75BB, - =GB8CCC,=GB8HI,=GB8MD,=GB8MG,=GB8OAE,=GB8OQE,=GB8RAF,=GB8WOW,=GB8WT,=GB90RSGB/62,=GB90RSGB/72, - =GB9GGM,=GC4BRS/LH,=GG100ACD,=GG100ANG,=GG100CPG,=GG100RGG,=GG100SG,=GO0DIV,=GO0EZQ,=GO0EZY, - =GO0JEQ,=GO0MNP,=GO0MNP/P,=GO0NPL,=GO0PLB,=GO0PNI,=GO0PUP,=GO0VKW,=GO0VML,=GO0VSW,=GO1DPL,=GO1IOT, - =GO1JFV,=GO1MVL,=GO1PKM,=GO3PLB,=GO3UOF,=GO3UOF/M,=GO3XJQ,=GO4BKG,=GO4BLE,=GO4CQZ,=GO4DTQ,=GO4GTI, - =GO4JKR,=GO4JUN,=GO4JUW,=GO4MVA,=GO4NOO,=GO4OKT,=GO4SUE,=GO4SUE/P,=GO4TNZ,=GO4WXM,=GO6IMS,=GO6NKG, - =GO6UKO,=GO7DWR,=GO7SBO,=GO7VJK,=GO7VQD,=GO8BQK,=GO8IQC,=GO8JOY,=GO8OKR,=GQ0ANA,=GQ0DIV,=GQ0JEQ, - =GQ0JRF,=GQ0MNO,=GQ0MNP,=GQ0NPL,=GQ0PUP,=GQ0RYT,=GQ0SLM,=GQ0TQM,=GQ0VKW,=GQ0VML,=GQ0VSW,=GQ0WVL, - =GQ1FKY,=GQ1FOA/P,=GQ1IOT,=GQ1JFV,=GQ1MVL,=GQ1NRS,=GQ1WRV,=GQ1ZKN,=GQ3IRK,=GQ3PLB,=GQ3SB,=GQ3UOF, - =GQ3VEN,=GQ3VKL,=GQ3WSU,=GQ3XJA,=GQ3XJQ,=GQ4BKG,=GQ4BLE,=GQ4CQZ,=GQ4EZW,=GQ4GSH,=GQ4GTI,=GQ4IIL, - =GQ4JKR,=GQ4JUN,=GQ4JUW,=GQ4LZP,=GQ4MVA,=GQ4NOO,=GQ4OKT,=GQ4SUE,=GQ4VNS,=GQ4VZJ,=GQ4WXM,=GQ4WXM/P, - =GQ6IMS,=GQ6ITJ,=GQ6NKG,=GQ6UKO,=GQ7BQK,=GQ7DWR,=GQ7FBV,=GQ7SBO,=GQ7UNJ,=GQ7UNV,=GQ7VJK,=GQ7VQD, - =GQ8BQK,=GQ8IQC,=GQ8JOY,=GQ8OKR,=GR0ANA,=GR0DIV,=GR0DSP,=GR0HUS,=GR0JEQ,=GR0MYY,=GR0NPL,=GR0PSV, - =GR0RYT,=GR0SYN,=GR0TKX,=GR0VKW,=GR0WGK,=GR1FJI,=GR1HNG,=GR1LFX,=GR1LHV,=GR1MCD,=GR1SGG,=GR1WVY, - =GR1YQM,=GR3SB,=GR3SFC,=GR3TKH,=GR3UOF,=GR3XJQ,=GR4BKG,=GR4BLE,=GR4CQZ,=GR4GNY,=GR4GTI,=GR4HZA, - =GR4JUN,=GR4JUW,=GR4OGO,=GR4SUE,=GR4VSS/P,=GR4XXJ,=GR4ZOM,=GR5PH,=GR6NKG,=GR6SIX,=GR6STK,=GR6UKO, - =GR6ZDH,=GR7AAV,=GR7HOC,=GR7NAU,=GR7TKZ,=GR7UNV,=GR7VQD,=GR8BQK,=GR8IQC,=GR8OGI,=GR8TRO,=GV0ANA, - =GV0DCK,=GV0DIV,=GV0EME,=GV0FRE,=GV0MNP,=GV0NPL,=GV1FKY,=GV1IOT,=GV1JFV,=GV1NBW,=GV1YQM,=GV3ATZ, - =GV3TJE/P,=GV3UOF,=GV3WEZ,=GV3XJQ,=GV4BKG,=GV4BRS,=GV4CQZ,=GV4JKR,=GV4JQP,=GV4NQJ,=GV4PUC,=GV6BRC, - =GV6JPC,=GV6NKG,=GV7UNV,=GV7VJK,=GV8IQC,=GW0AWT/2K,=GW0GEI/2K,=GW0GIH/2K,=GW0MNO/2K,=GW0VSW/2K, - =GW3JXN/2K,=GW3KJN/2K,=GW4IIL/2K,=GW4VHP/2K,=M2000Y/97A,=MO0AQZ,=MO0ATI,=MO0COE,=MO0CVT,=MO0EQL, - =MO0EZQ,=MO0GXE,=MO0HCX,=MO0IBZ,=MO0IML,=MO0KLW,=MO0LDJ,=MO0LLK,=MO0LUK,=MO0LZZ,=MO0MAU,=MO0MUM, - =MO0MWZ,=MO0OWW,=MO0SGD,=MO0SGR,=MO0TBB,=MO0TMI,=MO0TTU,=MO0UPH,=MO0VVO,=MO1CFA,=MO1CFN,=MO3DAO, - =MO3DQB,=MO3GKI,=MO3OJA,=MO3PUU,=MO3RNI,=MO3UEZ,=MO3WPH,=MO3YVO,=MO3ZCO,=MO6DVP,=MO6GWK,=MO6GWR, - =MO6GWR/P,=MO6MAU,=MO6PAM,=MO6PLC,=MO6PUT,=MO6SEF,=MO6TBD,=MO6TBP,=MO6WLB,=MQ0AQZ,=MQ0ATI,=MQ0AWW, - =MQ0CDO,=MQ0CNA,=MQ0CVT,=MQ0DHF,=MQ0EQL,=MQ0GXE,=MQ0GYV,=MQ0HCX,=MQ0IBZ,=MQ0IML,=MQ0LDJ,=MQ0LLK, - =MQ0LUK,=MQ0LZZ,=MQ0MAU,=MQ0MUM,=MQ0MWA,=MQ0MWZ,=MQ0OWW,=MQ0PAD,=MQ0RHD,=MQ0SGD,=MQ0SGR,=MQ0TBB, - =MQ0TMI,=MQ0TTU,=MQ0UPH,=MQ0UPH/P,=MQ0VVO,=MQ0XMC/P,=MQ1CFA,=MQ1CFN,=MQ1EYO/P,=MQ1LCR,=MQ3DAO, - =MQ3EPA,=MQ3GKI,=MQ3JAT,=MQ3NDB,=MQ3OJA,=MQ3USK,=MQ3WPH,=MQ3ZCB/P,=MQ5AND,=MQ5EPA,=MQ5VZW,=MQ6DVP, - =MQ6KLL,=MQ6MAU,=MQ6PAM,=MQ6PLC,=MQ6RHD,=MQ6SEF,=MQ6TBD,=MQ6TBP,=MR0AQZ,=MR0BXJ,=MR0CVT,=MR0GUK, - =MR0GXE,=MR0IDX,=MR0JGE,=MR0LAO,=MR0LDJ,=MR0MAU,=MR0RLD,=MR0TTR,=MR0TTU,=MR0YAD,=MR0ZAP,=MR1CFN, - =MR1EAA,=MR1LCR,=MR1MAJ/P,=MR1MDH,=MR3AVB,=MR3AVC,=MR3CBF,=MR3NYR,=MR3OBL,=MR3SET/P,=MR3UFN, - =MR3XZP,=MR3YKL,=MR3YLO,=MR3YVO,=MR3ZCB/P,=MR5HOC,=MR6ADZ,=MR6KDA,=MR6VHF,=MR6YDP,=MV0AEL,=MV0BLM, - =MV0EDX,=MV0GWT,=MV0GXE,=MV0HGY/P,=MV0IML,=MV0LLK,=MV0PJJ,=MV0PJJ/P,=MV0RRD,=MV0SGD,=MV0SGR, - =MV0TBB,=MV0TDQ,=MV0UAA,=MV0USK,=MV0VRQ,=MV0WYN,=MV1CFA,=MV1CFN,=MV1EYP/P,=MV3RNI,=MV6CQN,=MV6GWR, - =MV6GWR/P,=MV6URC,=MV6ZOL,=MW0CND/2K,=MW0DHF/LH,=MW5AAM/2K,=MW5GOL/LH; + =GB0BVL,=GB0BYL,=GB0CAC,=GB0CCE,=GB0CEW,=GB0CFD,=GB0CGG,=GB0CLC,=GB0CQD,=GB0CSA,=GB0CSR,=GB0CVA, + =GB0DFD,=GB0DMT,=GB0DS,=GB0DVP,=GB0FHD,=GB0FHI,=GB0GDD,=GB0GIW,=GB0GLV,=GB0GMD,=GB0GRM,=GB0HEL, + =GB0HGC,=GB0HLT,=GB0HMM,=GB0HMT,=GB0KF,=GB0L,=GB0LBG,=GB0LM,=GB0LVF,=GB0MFH,=GB0MIW,=GB0ML, + =GB0MPA,=GB0MUU,=GB0MWL,=GB0NAW,=GB0NEW,=GB0NG,=GB0NLC,=GB0PBR,=GB0PEM,=GB0PGG,=GB0PLB,=GB0PLL, + =GB0PSG,=GB0RME,=GB0ROC,=GB0RPO,=GB0RS,=GB0RSC,=GB0RSF,=GB0RWM,=GB0SDD,=GB0SGC,=GB0SH,=GB0SH/LH, + =GB0SOA,=GB0SPE,=GB0SPS,=GB0TD,=GB0TPR,=GB0TS,=GB0TTT,=GB0VCA,=GB0VK,=GB0WHH,=GB0WHR,=GB0WIW, + =GB0WUL,=GB0YG,=GB100AB,=GB100BP,=GB100CSW,=GB100GGC,=GB100GGM,=GB100HD,=GB100LB,=GB100LSG, + =GB100MCV,=GB100TMD,=GB10SOTA,=GB19CGW,=GB19CW,=GB19SG,=GB1AD,=GB1ATC,=GB1BAF,=GB1BGS,=GB1BPL, + =GB1BSW,=GB1BW,=GB1CCC,=GB1CDS,=GB1CPG,=GB1DS,=GB1FHS,=GB1HAS,=GB1HTW,=GB1JC,=GB1LSG,=GB1LW, + =GB1OOC,=GB1PCA,=GB1PCS,=GB1PD,=GB1PGW,=GB1PJ,=GB1PLL,=GB1SEA,=GB1SL,=GB1SPN,=GB1SSL,=GB1TDS, + =GB1WAA,=GB1WIW,=GB1WSM,=GB2000SET,=GB2003SET,=GB200HNT,=GB250TMB,=GB250TT,=GB2ADU,=GB2BEF, + =GB2BGG,=GB2BOM,=GB2BOW,=GB2BPM,=GB2BYF,=GB2CC,=GB2CI,=GB2COB,=GB2CR,=GB2CRS,=GB2DWR,=GB2EI, + =GB2FC,=GB2FLB,=GB2GGM,=GB2GLS,=GB2GOL,=GB2GSG,=GB2GVA,=GB2HDG,=GB2IMD,=GB2LBR,=GB2LM,=GB2LNP, + =GB2LSA,=GB2LSA/LH,=GB2LSH,=GB2MD,=GB2MGY,=GB2MIL,=GB2MLM,=GB2MMC,=GB2MOP,=GB2NF,=GB2NPH,=GB2NPL, + =GB2OOA,=GB2ORM,=GB2PRC,=GB2RFS,=GB2RTB,=GB2SAC,=GB2SCD,=GB2SCP,=GB2SFM,=GB2SIP,=GB2SLA,=GB2TD, + =GB2TD/LH,=GB2TTA,=GB2VK,=GB2WAA,=GB2WHO,=GB2WNA,=GB2WSF,=GB2WT,=GB3HLS,=GB3LMW,=GB4ADU,=GB4AFS, + =GB4AOS,=GB4BB,=GB4BOJ,=GB4BPL,=GB4BPL/LH,=GB4BPL/P,=GB4BPR,=GB4BRS/P,=GB4BSG,=GB4CI,=GB4CTC, + =GB4EUL,=GB4FAA,=GB4GM,=GB4GSS,=GB4HFH,=GB4HI,=GB4HLB,=GB4HMD,=GB4HMM,=GB4MBC,=GB4MD,=GB4MDH, + =GB4MDI,=GB4MJS,=GB4MPI,=GB4MUU,=GB4NDG,=GB4NPL,=GB4NTB,=GB4ON,=GB4OST,=GB4PAT,=GB4PCS,=GB4PD, + =GB4POW,=GB4RC,=GB4RME,=GB4RSL,=GB4SDD,=GB4SLC,=GB4SSP,=GB4SUB,=GB4TMS,=GB4UKG,=GB4VJD,=GB4WT, + =GB4WWI,=GB4XT,=GB50ABS,=GB50EVS,=GB50RSC,=GB50SGP,=GB5AC,=GB5FI,=GB5GEO,=GB5IMD,=GB5MD,=GB5ONG, + =GB5PSJ,=GB5SIP,=GB5WT,=GB60DITP,=GB60ER,=GB60PW,=GB60SPS,=GB60VLY,=GB65BTF,=GB6AC,=GB6BLB, + =GB6CRI,=GB6GGM,=GB6OQA,=GB6ORA,=GB6PLB,=GB6RNLI,=GB6SPD,=GB6TS,=GB6TSG,=GB6WT,=GB6WWT,=GB70BTF, + =GB750CC,=GB75ATC,=GB75BB,=GB8CCC,=GB8HI,=GB8MD,=GB8MG,=GB8ND,=GB8OAE,=GB8OQE,=GB8RAF,=GB8WOW, + =GB8WT,=GB90RSGB/62,=GB90RSGB/72,=GB9GGM,=GC4BRS/LH,=GG100ACD,=GG100ANG,=GG100CPG,=GG100RGG, + =GG100SG,=GO0DIV,=GO0EZQ,=GO0EZY,=GO0JEQ,=GO0MNP,=GO0MNP/P,=GO0NPL,=GO0PLB,=GO0PNI,=GO0PUP, + =GO0VKW,=GO0VML,=GO0VSW,=GO1DPL,=GO1IOT,=GO1JFV,=GO1MVL,=GO1PKM,=GO3PLB,=GO3UOF,=GO3UOF/M,=GO3XJQ, + =GO4BKG,=GO4BLE,=GO4CQZ,=GO4DTQ,=GO4GTI,=GO4JKR,=GO4JUN,=GO4JUW,=GO4MVA,=GO4NOO,=GO4OKT,=GO4SUE, + =GO4SUE/P,=GO4TNZ,=GO4WXM,=GO6IMS,=GO6NKG,=GO6UKO,=GO7DWR,=GO7SBO,=GO7VJK,=GO7VQD,=GO8BQK,=GO8IQC, + =GO8JOY,=GO8OKR,=GQ0ANA,=GQ0DIV,=GQ0JEQ,=GQ0JRF,=GQ0MNO,=GQ0MNP,=GQ0NPL,=GQ0PUP,=GQ0RYT,=GQ0SLM, + =GQ0TQM,=GQ0VKW,=GQ0VML,=GQ0VSW,=GQ0WVL,=GQ1FKY,=GQ1FOA/P,=GQ1IOT,=GQ1JFV,=GQ1MVL,=GQ1NRS,=GQ1WRV, + =GQ1ZKN,=GQ3IRK,=GQ3PLB,=GQ3SB,=GQ3UOF,=GQ3VEN,=GQ3VKL,=GQ3WSU,=GQ3XJA,=GQ3XJQ,=GQ4BKG,=GQ4BLE, + =GQ4CQZ,=GQ4EZW,=GQ4GSH,=GQ4GTI,=GQ4IIL,=GQ4JKR,=GQ4JUN,=GQ4JUW,=GQ4LZP,=GQ4MVA,=GQ4NOO,=GQ4OKT, + =GQ4SUE,=GQ4VNS,=GQ4VZJ,=GQ4WXM,=GQ4WXM/P,=GQ6IMS,=GQ6ITJ,=GQ6NKG,=GQ6UKO,=GQ7BQK,=GQ7DWR,=GQ7FBV, + =GQ7SBO,=GQ7UNJ,=GQ7UNV,=GQ7VJK,=GQ7VQD,=GQ8BQK,=GQ8IQC,=GQ8JOY,=GQ8OKR,=GR0ANA,=GR0DIV,=GR0DSP, + =GR0HUS,=GR0JEQ,=GR0MYY,=GR0NPL,=GR0PSV,=GR0RYT,=GR0SYN,=GR0TKX,=GR0VKW,=GR0WGK,=GR1FJI,=GR1HNG, + =GR1LFX,=GR1LHV,=GR1MCD,=GR1SGG,=GR1WVY,=GR1YQM,=GR3SB,=GR3SFC,=GR3TKH,=GR3UOF,=GR3XJQ,=GR4BKG, + =GR4BLE,=GR4CQZ,=GR4GNY,=GR4GTI,=GR4HZA,=GR4JUN,=GR4JUW,=GR4OGO,=GR4SUE,=GR4VSS/P,=GR4XXJ,=GR4ZOM, + =GR5PH,=GR6NKG,=GR6SIX,=GR6STK,=GR6UKO,=GR6ZDH,=GR7AAV,=GR7HOC,=GR7NAU,=GR7TKZ,=GR7UNV,=GR7VQD, + =GR8BQK,=GR8IQC,=GR8OGI,=GR8TRO,=GV0ANA,=GV0DCK,=GV0DIV,=GV0EME,=GV0FRE,=GV0MNP,=GV0NPL,=GV1FKY, + =GV1IOT,=GV1JFV,=GV1NBW,=GV1YQM,=GV3ATZ,=GV3TJE/P,=GV3UOF,=GV3WEZ,=GV3XJQ,=GV4BKG,=GV4BRS,=GV4CQZ, + =GV4JKR,=GV4JQP,=GV4NQJ,=GV4PUC,=GV6BRC,=GV6JPC,=GV6NKG,=GV7UNV,=GV7VJK,=GV8IQC,=GW0AWT/2K, + =GW0GEI/2K,=GW0GIH/2K,=GW0MNO/2K,=GW0VSW/2K,=GW3JXN/2K,=GW3KJN/2K,=GW4IIL/2K,=GW4VHP/2K, + =M2000Y/97A,=MO0AQZ,=MO0ATI,=MO0COE,=MO0CVT,=MO0EQL,=MO0EZQ,=MO0GXE,=MO0HCX,=MO0IBZ,=MO0IML, + =MO0KLW,=MO0LDJ,=MO0LLK,=MO0LUK,=MO0LZZ,=MO0MAU,=MO0MUM,=MO0MWZ,=MO0OWW,=MO0SGD,=MO0SGR,=MO0TBB, + =MO0TMI,=MO0TTU,=MO0UPH,=MO0VVO,=MO1CFA,=MO1CFN,=MO3DAO,=MO3DQB,=MO3GKI,=MO3OJA,=MO3PUU,=MO3RNI, + =MO3UEZ,=MO3WPH,=MO3YVO,=MO3ZCO,=MO6DVP,=MO6GWK,=MO6GWR,=MO6GWR/P,=MO6MAU,=MO6PAM,=MO6PLC,=MO6PUT, + =MO6SEF,=MO6TBD,=MO6TBP,=MO6WLB,=MQ0AQZ,=MQ0ATI,=MQ0AWW,=MQ0CDO,=MQ0CNA,=MQ0CVT,=MQ0DHF,=MQ0EQL, + =MQ0GXE,=MQ0GYV,=MQ0HCX,=MQ0IBZ,=MQ0IML,=MQ0LDJ,=MQ0LLK,=MQ0LUK,=MQ0LZZ,=MQ0MAU,=MQ0MUM,=MQ0MWA, + =MQ0MWZ,=MQ0OWW,=MQ0PAD,=MQ0RHD,=MQ0SGD,=MQ0SGR,=MQ0TBB,=MQ0TMI,=MQ0TTU,=MQ0UPH,=MQ0UPH/P,=MQ0VVO, + =MQ0XMC/P,=MQ1CFA,=MQ1CFN,=MQ1EYO/P,=MQ1LCR,=MQ3DAO,=MQ3EPA,=MQ3GKI,=MQ3JAT,=MQ3NDB,=MQ3OJA, + =MQ3USK,=MQ3WPH,=MQ3ZCB/P,=MQ5AND,=MQ5EPA,=MQ5VZW,=MQ6DVP,=MQ6KLL,=MQ6MAU,=MQ6PAM,=MQ6PLC,=MQ6RHD, + =MQ6SEF,=MQ6TBD,=MQ6TBP,=MR0AQZ,=MR0BXJ,=MR0CVT,=MR0GUK,=MR0GXE,=MR0IDX,=MR0JGE,=MR0LAO,=MR0LDJ, + =MR0MAU,=MR0RLD,=MR0TTR,=MR0TTU,=MR0YAD,=MR0ZAP,=MR1CFN,=MR1EAA,=MR1LCR,=MR1MAJ/P,=MR1MDH,=MR3AVB, + =MR3AVC,=MR3CBF,=MR3NYR,=MR3OBL,=MR3SET/P,=MR3UFN,=MR3XZP,=MR3YKL,=MR3YLO,=MR3YVO,=MR3ZCB/P, + =MR5HOC,=MR6ADZ,=MR6KDA,=MR6VHF,=MR6YDP,=MV0AEL,=MV0BLM,=MV0EDX,=MV0GWT,=MV0GXE,=MV0HGY/P,=MV0IML, + =MV0LLK,=MV0PJJ,=MV0PJJ/P,=MV0RRD,=MV0SGD,=MV0SGR,=MV0TBB,=MV0TDQ,=MV0UAA,=MV0USK,=MV0VRQ,=MV0WYN, + =MV1CFA,=MV1CFN,=MV1EYP/P,=MV3RNI,=MV6CQN,=MV6GWR,=MV6GWR/P,=MV6URC,=MV6ZOL,=MW0CND/2K,=MW0DHF/LH, + =MW5AAM/2K,=MW5GOL/LH; Solomon Islands: 28: 51: OC: -9.00: -160.00: -11.0: H4: H4,=H40/H44RK; Temotu Province: 32: 51: OC: -10.72: -165.80: -11.0: H40: @@ -1075,10 +1077,10 @@ Italy: 15: 28: EU: 42.82: -12.58: -1.0: I: =IQ6PS/LH,=IQ6SB/LGH,=IQ6SB/LGT,=IQ6SB/LH,=IQ6VP/J,=IZ6ASI/LH,=IZ6ASI/N,=IZ6CDI/O,=IZ6RWD/O, =IZ6TGS/LH,=IZ6TGS/N, =4U13FEB,=4U1GSC,=4U20B,=4U24OCT,=4U29MAY,=4U73B,=I7PXV/LH,=I7PXV/P/LH,=I7XUW/MI/224,=II7IAOI/N, - =II7PT/C,=II7PT/D,=II7PT/E,=II7PT/F,=II7PT/G,=II7PT/H,=II7PT/L,=II8ICN/NAVY,=IK7JWX/LH,=IQ7ML/J, - =IQ7ML/LH,=IQ7QK/LH,=IU7SCT/J,=IZ2DPX/7/LH,=IZ7DKA/YL,=IZ7KDX/LH,=IZ7LDC/LH, - =IK2RLS/8/LH,=IK8TEO/N,=IQ8OM/N,=IQ8PC/BWL,=IQ8XS/CEU,=IW8FFG/J,=IZ8AJQ/LGT,=IZ8AJQ/LH, - =IZ8DBJ/LGT,=IZ8DBJ/LH,=IZ8FMU/KR,=IZ8IZK/YL,=IZ8JPV/N,=IZ8QNX/N, + =II7PT/C,=II7PT/D,=II7PT/E,=II7PT/F,=II7PT/G,=II7PT/H,=II7PT/L,=II8ICN/NAVY,=IK7JWX/LH,=IK7SHC/MT, + =IQ7ML/J,=IQ7ML/LH,=IQ7QK/LH,=IU7SCT/J,=IZ2DPX/7/LH,=IZ7DKA/YL,=IZ7KDX/LH,=IZ7LDC/LH, + =IK2RLS/8/LH,=IK8IJN/I/US,=IK8TEO/N,=IQ8OM/N,=IQ8PC/BWL,=IQ8XS/CEU,=IU8CEU/8CZ,=IW8FFG/J, + =IZ8AJQ/LGT,=IZ8AJQ/LH,=IZ8DBJ/LGT,=IZ8DBJ/LH,=IZ8FMU/KR,=IZ8IZK/YL,=IZ8JPV/N,=IZ8QNX/N, =IA5/IW3ILP/L, =IC8/DJ5AA/LH, =IN3IKF/J,=IN3TJK/YL, @@ -1089,9 +1091,9 @@ Sardinia: 15: 28: EU: 40.15: -9.27: -1.0: IS: IM0,IS,IW0U,IW0V,IW0W,IW0X,IW0Y,IW0Z,=II0C,=II0EUDX,=II0FDR,=II0IAML,=II0ICH,=II0IDP,=II0M,=II0P, =II0PAX,=II0RSB,=II0SB,=II0SB/MM,=II0SRT/P,=II3EUDX,=IQ0AG,=IQ0AG/P,=IQ0AH,=IQ0AH/P,=IQ0AI, =IQ0AI/P,=IQ0AK,=IQ0AK/P,=IQ0AL,=IQ0AL/P,=IQ0AM,=IQ0AM/P,=IQ0EH,=IQ0EH/P,=IQ0HO,=IQ0ID,=IQ0ID/P, - =IQ0NU,=IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0QP/LH,=IQ0QP/P,=IQ0QP/WW,=IQ0SS,=IQ0SS/P, - =IQ0US,=IQ0UT,=IQ0XP,=IR0EO,=IR0FOC,=IR0IDP,=IR0IDP/1,=IR0IDP/2,=IR0IDP/3,=IR0LVC,=IR0MDC, - =IS0/4Z5KJ/LH,=IS0ICE/N,=IS0IGV/N,=IS0PGF/N,=IS0SDX/N,=IW0HRI,=IY0GA,=IY0NV; + =IQ0NU,=IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0QP/LH,=IQ0QP/P,=IQ0SS,=IQ0SS/P,=IQ0US, + =IQ0UT,=IQ0XP,=IR0EO,=IR0FOC,=IR0IDP,=IR0IDP/1,=IR0IDP/2,=IR0IDP/3,=IR0LVC,=IR0MDC,=IS0/4Z5KJ/LH, + =IS0/DL5SE/LH,=IS0ICE/N,=IS0IGV/N,=IS0PGF/N,=IS0SDX/N,=IW0HRI,=IY0GA,=IY0NV; Sicily: 15: 28: EU: 37.50: -14.00: -1.0: *IT9: IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=IQ1QQ/9,=IT9CHU/J,=IT9CKA/CA,=IT9CLY/JZK, =IT9DSA/CA,=IT9DTU/N,=IT9GDS/WLK,=IT9HBS/LH,=IT9JZK/WLK,=IT9KKE/JZK,=IT9MRM/N,=IT9MRZ/LH, @@ -1116,12 +1118,11 @@ Japan: 25: 45: AS: 36.40: -138.38: -9.0: JA: =JD1BHH/6; Minami Torishima: 27: 90: OC: 24.28: -153.97: -10.0: JD/m: =8J1ZIU/JD1,=8N1AQ/JD1,=JA6GXK/JD1,=JD1/8J1ZIU,=JD1/8N1AQ,=JD1/JA6GXK,=JD1/JD1BIC,=JD1/JD1YAB, - =JD1/JE6XPF,=JD1/JF3CTR,=JD1/JF7MTO,=JD1/JF8HIQ,=JD1/JG1RHN,=JD1/JG8NQJ,=JD1/JH1EFP,=JD1/JI2AMA, - =JD1/JK1PCN,=JD1/JR8XXQ,=JD1BCK,=JD1BIC/JD1,=JD1BME,=JD1BMM,=JD1BND,=JD1M/JI2AMA,=JD1YAA, - =JD1YAB/JD1,=JD1YBJ,=JF3CTR/JD1,=JF7MTO/JD1,=JF8HIQ/JD1,=JG1RHN/JD1,=JG8NQJ/JD1,=JH1EFP/JD1, - =JI2AMA/JD1,=JK1PCN/JD1,=JR8XXQ/JD1; + =JD1/JE6XPF,=JD1/JF3CTR,=JD1/JF8HIQ,=JD1/JG1RHN,=JD1/JG8NQJ,=JD1/JH1EFP,=JD1/JI2AMA,=JD1/JK1PCN, + =JD1/JR8XXQ,=JD1BCK,=JD1BIC/JD1,=JD1BME,=JD1BMM,=JD1BND,=JD1M/JI2AMA,=JD1YAA,=JD1YAB/JD1,=JD1YBJ, + =JF3CTR/JD1,=JF8HIQ/JD1,=JG1RHN/JD1,=JG8NQJ/JD1,=JH1EFP/JD1,=JI2AMA/JD1,=JK1PCN/JD1,=JR8XXQ/JD1; Ogasawara: 27: 45: AS: 27.05: -142.20: -9.0: JD/o: - JD1,=8N1OGA; + JD1,=8N1OGA,=JR7ISY/JD1/CM; Mongolia: 23: 32: AS: 46.77: -102.17: -7.0: JT: JT,JU,JV, JT2[33],JU2[33],JV2[33], @@ -1129,7 +1130,7 @@ Mongolia: 23: 32: AS: 46.77: -102.17: -7.0: JT: Svalbard: 40: 18: EU: 78.00: -16.00: -1.0: JW: JW; Bear Island: 40: 18: EU: 74.43: -19.08: -1.0: *JW/b: - =JW0BEA,=JW1I,=JW2US,=JW2VOA,=JW3FL,=JW4GHA,=JW4JSA,=JW4LN,=JW5RIA,=JW7VW,=JW9JKA; + =JW/LB2PG,=JW0BEA,=JW1I,=JW2US,=JW2VOA,=JW3FL,=JW4GHA,=JW4JSA,=JW4LN,=JW5RIA,=JW7VW,=JW9JKA; Jan Mayen: 40: 18: EU: 71.05: 8.28: 1.0: JX: JX; Jordan: 20: 39: AS: 31.18: -36.42: -2.0: JY: @@ -1146,32 +1147,33 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: WE0(4)[7],WF0(4)[7],WG0(4)[7],WI0(4)[7],WJ0(4)[7],WK0(4)[7],WM0(4)[7],WN0(4)[7],WO0(4)[7], WQ0(4)[7],WR0(4)[7],WS0(4)[7],WT0(4)[7],WU0(4)[7],WV0(4)[7],WW0(4)[7],WX0(4)[7],WY0(4)[7], WZ0(4)[7],=AH2BW(4)[7],=AH2BY(4)[7],=AH6ES/0(4)[7],=AH6FY(4)[7],=AH6MD(4)[7],=AH6N(4)[7], - =AH6N/0(4)[7],=AH6O(4)[7],=AH6OS(4)[7],=AH6RS(4)[7],=AL0G(4)[7],=AL3E(4)[7],=AL6E(4)[7], - =AL7BX(4)[7],=AL7EK(4)[7],=AL7FU(4)[7],=AL7GQ(4)[7],=AL7NY(4)[7],=AL7O/0(4)[7],=AL7OC(4)[7], - =AL7QQ(4)[7],=AL7QQ/P(4)[7],=AL9DB(4)[7],=KH0EX(4)[7],=KH2CZ(4)[7],=KH2JK(4)[7],=KH2OP(4)[7], - =KH2OP/0(4)[7],=KH2SL(4)[7],=KH6DM(4)[7],=KH6GN(4)[7],=KH6HNL(4)[7],=KH6HTV/0(4)[7],=KH6JEM(4)[7], - =KH6JFH(4)[7],=KH6NM(4)[7],=KH6NR(4)[7],=KH6RON(4)[7],=KH6SB(4)[7],=KH6TL(4)[7],=KH6UC(4)[7], - =KH6VHF(4)[7],=KH6VO(4)[7],=KH7AL/M(4)[7],=KH7AL/P(4)[7],=KH7BU(4)[7],=KH7GF(4)[7],=KH7HA(4)[7], - =KH7HY(4)[7],=KH7QI(4)[7],=KH7QJ(4)[7],=KH7QT(4)[7],=KH8CW(4)[7],=KL0DW(4)[7],=KL0EQ(4)[7], - =KL0FOX(4)[7],=KL0GP(4)[7],=KL0GQ(4)[7],=KL0MW(4)[7],=KL0SV(4)[7],=KL0UP(4)[7],=KL0WIZ(4)[7], - =KL1HT(4)[7],=KL1IF(4)[7],=KL1IF/M(4)[7],=KL1J(4)[7],=KL1LD(4)[7],=KL1PV(4)[7],=KL1TU(4)[7], - =KL1V/M(4)[7],=KL1VN(4)[7],=KL2A/0(4)[7],=KL2FU(4)[7],=KL2GR(4)[7],=KL2QO(4)[7],=KL2SX(4)[7], - =KL3LY(4)[7],=KL3MA(4)[7],=KL3MB(4)[7],=KL3MC(4)[7],=KL3QS(4)[7],=KL3SM(4)[7],=KL3VN(4)[7], - =KL4IY(4)[7],=KL4JN(4)[7],=KL7DE(4)[7],=KL7DTJ(4)[7],=KL7ED(4)[7],=KL7EP(4)[7],=KL7EP/0(4)[7], - =KL7GKY/0(4)[7],=KL7GLK(4)[7],=KL7GLK/0(4)[7],=KL7GLK/B(4)[7],=KL7IXI(4)[7],=KL7JGJ(4)[7], - =KL7JIE(4)[7],=KL7JIM(4)[7],=KL7JR/0(4)[7],=KL7MH(4)[7],=KL7MV(4)[7],=KL7NW(4)[7],=KL7PE/M(4)[7], - =KL7QW(4)[7],=KL7QW/0(4)[7],=KL7RH(4)[7],=KL7RZ(4)[7],=KL7SB/0(4)[7],=KL7SFD(4)[7],=KL7UV(4)[7], - =KL7XH(4)[7],=KL7YL(4)[7],=KL7YY/0(4)[7],=KL7ZD(4)[7],=KL7ZT(4)[7],=KP4ATV(4)[7],=KP4MLF(4)[7], - =KP4XZ(4)[7],=NH2LH(4)[7],=NH6CF(4)[7],=NH6WF(4)[7],=NH7CY(4)[7],=NH7FI(4)[7],=NH7XM(4)[7], - =NH7ZH(4)[7],=NL7AS(4)[7],=NL7BU(4)[7],=NL7CQ(4)[7],=NL7CQ/0(4)[7],=NL7FF(4)[7],=NL7FU(4)[7], - =NL7XT(4)[7],=NL7XU(4)[7],=NP4AI(4)[7],=NP4AI/0(4)[7],=VE4AGT/M(4)[7],=VE4XC/M(4)[7],=WH2S(4)[7], - =WH6AKZ(4)[7],=WH6ANH(4)[7],=WH6BLT(4)[7],=WH6BUL(4)[7],=WH6BXD(4)[7],=WH6CTU(4)[7],=WH6CUE(4)[7], - =WH6CYM(4)[7],=WH6CZI(4)[7],=WH6CZU(4)[7],=WH6DCJ(4)[7],=WH6DUV(4)[7],=WH6EAE(4)[7],=WH6ENX(4)[7], - =WH6LR(4)[7],=WH6MS(4)[7],=WH6QS(4)[7],=WH7DA(4)[7],=WH7IR(4)[7],=WH7MZ(4)[7],=WH7PV(4)[7], - =WH9AAH(4)[7],=WL0JF(4)[7],=WL1ON(4)[7],=WL7AEC(4)[7],=WL7AJA(4)[7],=WL7ANY(4)[7],=WL7ATK(4)[7], - =WL7BT(4)[7],=WL7CEG(4)[7],=WL7CLI(4)[7],=WL7CPW(4)[7],=WL7CQF(4)[7],=WL7CRT(4)[7],=WL7CY(4)[7], - =WL7JB(4)[7],=WL7LZ(4)[7],=WL7LZ/M(4)[7],=WL7RV(4)[7],=WL7YM(4)[7],=WP2B/0(4)[7],=WP3QH(4)[7], - =WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4LC(4)[7],=WP4NPV(4)[7], + =AH6N/0(4)[7],=AH6O(4)[7],=AH6OS(4)[7],=AH6PC(4)[7],=AH6RS(4)[7],=AL0G(4)[7],=AL3E(4)[7], + =AL6E(4)[7],=AL7BX(4)[7],=AL7EK(4)[7],=AL7FU(4)[7],=AL7GQ(4)[7],=AL7NY(4)[7],=AL7O/0(4)[7], + =AL7OC(4)[7],=AL7QQ(4)[7],=AL7QQ/P(4)[7],=AL9DB(4)[7],=KH0EX(4)[7],=KH2CZ(4)[7],=KH2JK(4)[7], + =KH2OP(4)[7],=KH2OP/0(4)[7],=KH2SL(4)[7],=KH6DM(4)[7],=KH6GN(4)[7],=KH6HNL(4)[7],=KH6HTV/0(4)[7], + =KH6JEM(4)[7],=KH6JFH(4)[7],=KH6NM(4)[7],=KH6NR(4)[7],=KH6RON(4)[7],=KH6SB(4)[7],=KH6TL(4)[7], + =KH6UC(4)[7],=KH6VHF(4)[7],=KH6VO(4)[7],=KH7AL/M(4)[7],=KH7AL/P(4)[7],=KH7BU(4)[7],=KH7GF(4)[7], + =KH7HA(4)[7],=KH7HY(4)[7],=KH7QI(4)[7],=KH7QJ(4)[7],=KH7QT(4)[7],=KH8CW(4)[7],=KL0DW(4)[7], + =KL0EQ(4)[7],=KL0FOX(4)[7],=KL0GP(4)[7],=KL0GQ(4)[7],=KL0MW(4)[7],=KL0N(4)[7],=KL0SV(4)[7], + =KL0UP(4)[7],=KL0WIZ(4)[7],=KL1HT(4)[7],=KL1IF(4)[7],=KL1IF/M(4)[7],=KL1J(4)[7],=KL1LD(4)[7], + =KL1PV(4)[7],=KL1TU(4)[7],=KL1V/M(4)[7],=KL1VN(4)[7],=KL2A/0(4)[7],=KL2FU(4)[7],=KL2GR(4)[7], + =KL2QO(4)[7],=KL2SX(4)[7],=KL3LY(4)[7],=KL3MA(4)[7],=KL3MB(4)[7],=KL3MC(4)[7],=KL3QS(4)[7], + =KL3SM(4)[7],=KL3VN(4)[7],=KL4IY(4)[7],=KL4JN(4)[7],=KL7DE(4)[7],=KL7DTJ(4)[7],=KL7ED(4)[7], + =KL7EP(4)[7],=KL7EP/0(4)[7],=KL7GKY/0(4)[7],=KL7GLK(4)[7],=KL7GLK/0(4)[7],=KL7GLK/B(4)[7], + =KL7IXI(4)[7],=KL7JGJ(4)[7],=KL7JIE(4)[7],=KL7JIM(4)[7],=KL7JR/0(4)[7],=KL7MH(4)[7],=KL7MV(4)[7], + =KL7NW(4)[7],=KL7PE/M(4)[7],=KL7QW(4)[7],=KL7QW/0(4)[7],=KL7RH(4)[7],=KL7RZ(4)[7],=KL7SB/0(4)[7], + =KL7SFD(4)[7],=KL7UV(4)[7],=KL7XH(4)[7],=KL7YL(4)[7],=KL7YY/0(4)[7],=KL7ZD(4)[7],=KL7ZT(4)[7], + =KP4ATV(4)[7],=KP4MLF(4)[7],=KP4XZ(4)[7],=NH2LH(4)[7],=NH6CF(4)[7],=NH6WF(4)[7],=NH7CY(4)[7], + =NH7FI(4)[7],=NH7XM(4)[7],=NH7ZH(4)[7],=NL7AS(4)[7],=NL7BU(4)[7],=NL7CQ(4)[7],=NL7CQ/0(4)[7], + =NL7FF(4)[7],=NL7FU(4)[7],=NL7XT(4)[7],=NL7XU(4)[7],=NP4AI(4)[7],=NP4AI/0(4)[7],=VE4AGT/M(4)[7], + =VE4XC/M(4)[7],=WH2S(4)[7],=WH6AKZ(4)[7],=WH6ANH(4)[7],=WH6BLT(4)[7],=WH6BUL(4)[7],=WH6BXD(4)[7], + =WH6CTU(4)[7],=WH6CUE(4)[7],=WH6CYM(4)[7],=WH6CZI(4)[7],=WH6CZU(4)[7],=WH6DCJ(4)[7],=WH6DUV(4)[7], + =WH6EAE(4)[7],=WH6ENX(4)[7],=WH6LR(4)[7],=WH6MS(4)[7],=WH6QS(4)[7],=WH7DA(4)[7],=WH7IR(4)[7], + =WH7MZ(4)[7],=WH7PV(4)[7],=WH9AAH(4)[7],=WL0JF(4)[7],=WL1ON(4)[7],=WL7AEC(4)[7],=WL7AJA(4)[7], + =WL7ANY(4)[7],=WL7ATK(4)[7],=WL7BRV(4)[7],=WL7BT(4)[7],=WL7CEG(4)[7],=WL7CLI(4)[7],=WL7CPW(4)[7], + =WL7CQF(4)[7],=WL7CRT(4)[7],=WL7CY(4)[7],=WL7JB(4)[7],=WL7LZ(4)[7],=WL7LZ/M(4)[7],=WL7RV(4)[7], + =WL7YM(4)[7],=WP2B/0(4)[7],=WP3QH(4)[7],=WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4LC(4)[7], + =WP4NPV(4)[7], =AH2V(5)[8],=AH2W(5)[8],=AH6BV(5)[8],=AL0A(5)[8],=AL1O(5)[8],=AL4V(5)[8],=AL6L(5)[8],=AL6M(5)[8], =AL7EL(5)[8],=AL7LV(5)[8],=AL7QS(5)[8],=AL8E(5)[8],=KH2AB(5)[8],=KH2EH(5)[8],=KH6GR(5)[8], =KH6HZ(5)[8],=KH6IKI(5)[8],=KH6JKQ(5)[8],=KH6JUK(5)[8],=KH6RF(5)[8],=KH6RF/1(5)[8],=KH6RF/M(5)[8], @@ -1192,71 +1194,72 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =WP4OJK(5)[8], =AH0BR(5)[8],=AH2AL(5)[8],=AH2O(5)[8],=AH6K(5)[8],=AL0Q(5)[8],=AL0Y(5)[8],=AL2O(5)[8], =AL7RG(5)[8],=KH2CW(5)[8],=KH2P(5)[8],=KH2R(5)[8],=KH4AG(5)[8],=KH6ALN(5)[8],=KH6HO(5)[8], - =KH7GA(5)[8],=KH7JO(5)[8],=KH7JO/2(5)[8],=KH7MX(5)[8],=KH7NE(5)[8],=KH8ZK(5)[8],=KL0WV(5)[8], - =KL1A/2(5)[8],=KL2A/2(5)[8],=KL2NP(5)[8],=KL3ET(5)[8],=KL3ZC(5)[8],=KL4T(5)[8],=KL7DL(5)[8], - =KL7GB(5)[8],=KL7JCQ(5)[8],=KL7NL/2(5)[8],=KL7TJZ(5)[8],=KL7USI/2(5)[8],=KL7WA(5)[8],=KL9ER(5)[8], - =KP2NP(5)[8],=KP3AK(5)[8],=KP3LM(5)[8],=KP3Y(5)[8],=KP4AK(5)[8],=KP4CML(5)[8],=KP4GEG(5)[8], - =KP4HR(5)[8],=KP4I(5)[8],=KP4JDR(5)[8],=KP4JMP(5)[8],=NH2DC(5)[8],=NH7NA(5)[8],=NH7TN(5)[8], - =NL7CC(5)[8],=NP2AQ(5)[8],=NP2GI(5)[8],=NP3D(5)[8],=NP3E(5)[8],=NP3EU(5)[8],=NP3I(5)[8], - =NP3KH(5)[8],=NP3KP(5)[8],=NP4H(5)[8],=NP4IR(5)[8],=NP4IT(5)[8],=NP4JQ(5)[8],=WH0W(5)[8], - =WH2C(5)[8],=WH6DLD(5)[8],=WH6DNT(5)[8],=WH6UO(5)[8],=WL2NAS(5)[8],=WL7OG(5)[8],=WP2AAO(5)[8], - =WP3MD(5)[8],=WP3VU(5)[8],=WP3WZ(5)[8],=WP4AR(5)[8],=WP4BMU(5)[8],=WP4BNI(5)[8],=WP4BZ(5)[8], - =WP4CB(5)[8],=WP4DME(5)[8],=WP4DWH(5)[8],=WP4EHY(5)[8],=WP4EYW(5)[8],=WP4HLY(5)[8],=WP4HXS(5)[8], - =WP4KXX(5)[8],=WP4LYI(5)[8],=WP4MQN(5)[8],=WP4MRB(5)[8],=WP4MUJ(5)[8],=WP4MYM(5)[8],=WP4MZO(5)[8], - =WP4NBS(5)[8],=WP4NZF(5)[8],=WP4OCO(5)[8],=WP4OPY(5)[8],=WP4PZB(5)[8],=WP4R(5)[8],=XL3TUV/M(5)[8], - =XM3CMB/M(5)[8], + =KH7GA(5)[8],=KH7JO(5)[8],=KH7JO/2(5)[8],=KH7MX(5)[8],=KH7NE(5)[8],=KH8ZK(5)[8],=KL0TV(5)[8], + =KL0WV(5)[8],=KL1A/2(5)[8],=KL2A/2(5)[8],=KL2NP(5)[8],=KL3ET(5)[8],=KL3ZC(5)[8],=KL4T(5)[8], + =KL7DL(5)[8],=KL7GB(5)[8],=KL7JCQ(5)[8],=KL7NL/2(5)[8],=KL7TJZ(5)[8],=KL7USI/2(5)[8],=KL7WA(5)[8], + =KL9ER(5)[8],=KP2NP(5)[8],=KP3AK(5)[8],=KP3LM(5)[8],=KP3Y(5)[8],=KP4AK(5)[8],=KP4CML(5)[8], + =KP4GEG(5)[8],=KP4HR(5)[8],=KP4I(5)[8],=KP4JDR(5)[8],=KP4JMP(5)[8],=NH2DC(5)[8],=NH7NA(5)[8], + =NH7TN(5)[8],=NL7CC(5)[8],=NP2AQ(5)[8],=NP2GI(5)[8],=NP3D(5)[8],=NP3E(5)[8],=NP3EU(5)[8], + =NP3I(5)[8],=NP3KH(5)[8],=NP3KP(5)[8],=NP4H(5)[8],=NP4IR(5)[8],=NP4IT(5)[8],=NP4JQ(5)[8], + =WH0W(5)[8],=WH2C(5)[8],=WH6DLD(5)[8],=WH6DNT(5)[8],=WH6UO(5)[8],=WL2NAS(5)[8],=WL7OG(5)[8], + =WP2AAO(5)[8],=WP3MD(5)[8],=WP3VU(5)[8],=WP3WZ(5)[8],=WP4AR(5)[8],=WP4BMU(5)[8],=WP4BNI(5)[8], + =WP4BZ(5)[8],=WP4CB(5)[8],=WP4DME(5)[8],=WP4DWH(5)[8],=WP4EHY(5)[8],=WP4EYW(5)[8],=WP4HLY(5)[8], + =WP4HXS(5)[8],=WP4KXX(5)[8],=WP4LYI(5)[8],=WP4MQN(5)[8],=WP4MRB(5)[8],=WP4MUJ(5)[8],=WP4MYM(5)[8], + =WP4MZO(5)[8],=WP4NBS(5)[8],=WP4NZF(5)[8],=WP4OCO(5)[8],=WP4OPY(5)[8],=WP4PZB(5)[8],=WP4R(5)[8], + =XL3TUV/M(5)[8],=XM3CMB/M(5)[8], =4U1WB(5)[8],=AH6AX(5)[8],=AH6FF/3(5)[8],=AH6R(5)[8],=AH6Z(5)[8],=AH7J(5)[8],=AH8P(5)[8], =AL1B(5)[8],=AL1B/M(5)[8],=AL7AB(5)[8],=AL7NN(5)[8],=AL7NN/3(5)[8],=AL7RS(5)[8],=KH2GM(5)[8], =KH2JX(5)[8],=KH2SX(5)[8],=KH6CUJ(5)[8],=KH6ILR/3(5)[8],=KH6JGA(5)[8],=KH6LDO(5)[8],=KH8CN(5)[8], =KL1HA(5)[8],=KL1KM(5)[8],=KL2A(5)[8],=KL2A/3(5)[8],=KL2BV(5)[8],=KL2XF(5)[8],=KL3JC(5)[8], =KL7FD(5)[8],=KL7GLK/3(5)[8],=KL7HR/3(5)[8],=KL7JO(5)[8],=KL7OF/3(5)[8],=KL7OQ(5)[8], - =KL9A/3(5)[8],=KP3M(5)[8],=KP4CAM(5)[8],=KP4FCF(5)[8],=KP4GB/3(5)[8],=KP4IP(5)[8],=KP4JB(5)[8], - =KP4N(5)[8],=KP4N/3(5)[8],=KP4PRI(5)[8],=KP4UV(5)[8],=KP4WR(5)[8],=KP4XO(5)[8],=KP4XX(5)[8], - =KP4YH(5)[8],=NH2CW(5)[8],=NH2LA(5)[8],=NH6BD(5)[8],=NH6BK(5)[8],=NH7C(5)[8],=NH7CC(5)[8], - =NH7YK(5)[8],=NL7CK(5)[8],=NL7PJ(5)[8],=NL7V/3(5)[8],=NL7XM(5)[8],=NL7XM/B(5)[8],=NP2EP(5)[8], - =NP2G(5)[8],=NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8],=NP3YN(5)[8],=NP4RH(5)[8],=NP4YZ(5)[8], - =WH6ADS(5)[8],=WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8],=WH6CTO(5)[8],=WH6DOA(5)[8],=WH6ECO(5)[8], - =WH6EEL(5)[8],=WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8],=WH6OB(5)[8],=WH7F(5)[8],=WH7USA(5)[8], - =WL7AF(5)[8],=WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8],=WP3EC(5)[8],=WP3FK(5)[8], - =WP4DA(5)[8],=WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HRK(5)[8],=WP4HSZ(5)[8],=WP4KDN(5)[8], - =WP4KKX(5)[8],=WP4LEM(5)[8],=WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8],=WP4MYN(5)[8],=WP4OSQ(5)[8], - =WP4PPH(5)[8],=WP4PQN(5)[8],=WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8],=WP4PYN(5)[8],=WP4PYT(5)[8], - =WP4PYU(5)[8],=WP4PYV(5)[8],=WP4PYZ(5)[8],=WP4PZA(5)[8], + =KL9A/3(5)[8],=KP3M(5)[8],=KP4BEP(5)[8],=KP4CAM(5)[8],=KP4FCF(5)[8],=KP4GB/3(5)[8],=KP4IP(5)[8], + =KP4JB(5)[8],=KP4N(5)[8],=KP4N/3(5)[8],=KP4PRI(5)[8],=KP4UV(5)[8],=KP4WR(5)[8],=KP4XO(5)[8], + =KP4XX(5)[8],=KP4YH(5)[8],=NH2CW(5)[8],=NH2LA(5)[8],=NH6BD(5)[8],=NH6BK(5)[8],=NH7C(5)[8], + =NH7CC(5)[8],=NH7YK(5)[8],=NL7CK(5)[8],=NL7PJ(5)[8],=NL7V/3(5)[8],=NL7XM(5)[8],=NL7XM/B(5)[8], + =NP2EP(5)[8],=NP2G(5)[8],=NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8],=NP3YN(5)[8],=NP4RH(5)[8], + =NP4YZ(5)[8],=WH6ADS(5)[8],=WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8],=WH6CTO(5)[8],=WH6DOA(5)[8], + =WH6ECO(5)[8],=WH6EEL(5)[8],=WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8],=WH6OB(5)[8],=WH7F(5)[8], + =WH7USA(5)[8],=WL7AF(5)[8],=WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8],=WP3EC(5)[8], + =WP3FK(5)[8],=WP4DA(5)[8],=WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HRK(5)[8],=WP4HSZ(5)[8], + =WP4KDN(5)[8],=WP4KKX(5)[8],=WP4LEM(5)[8],=WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8],=WP4MYN(5)[8], + =WP4OSQ(5)[8],=WP4PPH(5)[8],=WP4PQN(5)[8],=WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8],=WP4PYN(5)[8], + =WP4PYT(5)[8],=WP4PYU(5)[8],=WP4PYV(5)[8],=WP4PYZ(5)[8],=WP4PZA(5)[8], =AH0BV(5)[8],=AH0BZ(5)[8],=AH0G(5)[8],=AH2AJ(5)[8],=AH2AM(5)[8],=AH2AV/4(5)[8],=AH2DF(5)[8], =AH2EB(5)[8],=AH2X(5)[8],=AH3B(5)[8],=AH6AL(5)[8],=AH6AT(5)[8],=AH6AU(5)[8],=AH6BJ(5)[8], =AH6C(5)[8],=AH6EZ/4(5)[8],=AH6FX(5)[8],=AH6FX/4(5)[8],=AH6IC(5)[8],=AH6IJ(5)[8],=AH6IW(5)[8], =AH6JH(5)[8],=AH6JN/4(5)[8],=AH6JN/M(5)[8],=AH6KS(5)[8],=AH6KT(5)[8],=AH6KT/4(5)[8],=AH6LS(5)[8], - =AH6OB(5)[8],=AH6TI(5)[8],=AH7I/4(5)[8],=AH7MI(5)[8],=AH8B(5)[8],=AH8M(5)[8],=AH8M/M(5)[8], - =AH8T(5)[8],=AL0I(5)[8],=AL1A(5)[8],=AL3G(5)[8],=AL3M(5)[8],=AL4T(5)[8],=AL4T/4(5)[8],=AL4U(5)[8], - =AL4X(5)[8],=AL5A(5)[8],=AL7AL(5)[8],=AL7AM(5)[8],=AL7BA(5)[8],=AL7GF(5)[8],=AL7GK(5)[8], - =AL7HG(5)[8],=AL7HW(5)[8],=AL7HW/4(5)[8],=AL7IS(5)[8],=AL7KT(5)[8],=AL7LH(5)[8],=AL7NL(5)[8], - =AL7NM(5)[8],=AL7NS(5)[8],=AL7NS/140(5)[8],=AL7PL(5)[8],=AL7QI(5)[8],=AL7RE(5)[8],=AL7RL(5)[8], - =G8ERJ(5)[8],=GO4AZM(5)[8],=GQ4AZM(5)[8],=GR4AZM(5)[8],=KH0CW(5)[8],=KH0HR(5)[8],=KH0NI(5)[8], - =KH0ZZ(5)[8],=KH2BX(5)[8],=KH2D(5)[8],=KH2D/4(5)[8],=KH2GUM/P(5)[8],=KH2HB(5)[8],=KH2KD(5)[8], - =KH2N(5)[8],=KH2NC(5)[8],=KH2PM(5)[8],=KH2RL(5)[8],=KH2TI(5)[8],=KH2UV(5)[8],=KH2VM(5)[8], - =KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8],=KH6CG/4(5)[8],=KH6CT(5)[8],=KH6ED(5)[8], - =KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8],=KH6ILR(5)[8],=KH6ILR/4(5)[8],=KH6ITI(5)[8], - =KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JNW(5)[8],=KH6JUA(5)[8],=KH6M(5)[8],=KH6M/4(5)[8], - =KH6M/M(5)[8],=KH6MT(5)[8],=KH6MT/4(5)[8],=KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8], - =KH6PU(5)[8],=KH6RP(5)[8],=KH6TY(5)[8],=KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8], - =KH7DY(5)[8],=KH7FC(5)[8],=KH7GZ(5)[8],=KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8], - =KH7XS/4(5)[8],=KH7XT(5)[8],=KH7ZC(5)[8],=KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8], - =KL0KC(5)[8],=KL0KE/4(5)[8],=KL0L(5)[8],=KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8], - =KL0TY(5)[8],=KL0VU(5)[8],=KL0WF(5)[8],=KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8], - =KL1PA(5)[8],=KL1SS(5)[8],=KL2AK(5)[8],=KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8], - =KL2HV(5)[8],=KL2MQ(5)[8],=KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8], - =KL3KB(5)[8],=KL3KG(5)[8],=KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8], - =KL4DD(5)[8],=KL4H(5)[8],=KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8], - =KL7DA/4(5)[8],=KL7FO(5)[8],=KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8], - =KL7HQW(5)[8],=KL7HX(5)[8],=KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8], - =KL7JDS(5)[8],=KL7JR(5)[8],=KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8], - =KL7NT(5)[8],=KL7P/4(5)[8],=KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8], - =KL9A/1(5)[8],=KP2AF(5)[8],=KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8], - =KP2L/4(5)[8],=KP2N(5)[8],=KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8], - =KP3BL(5)[8],=KP3BP(5)[8],=KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8], - =KP4AOD/4(5)[8],=KP4BEC(5)[8],=KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8], - =KP4CPP(5)[8],=KP4CSJ(5)[8],=KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8], - =KP4DPQ(5)[8],=KP4DQS(5)[8],=KP4EDL(5)[8],=KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8], + =AH6OB(5)[8],=AH6TI(5)[8],=AH7I(5)[8],=AH7I/4(5)[8],=AH7MI(5)[8],=AH8B(5)[8],=AH8M(5)[8], + =AH8M/M(5)[8],=AH8T(5)[8],=AL0I(5)[8],=AL1A(5)[8],=AL3G(5)[8],=AL3M(5)[8],=AL4T(5)[8], + =AL4T/4(5)[8],=AL4U(5)[8],=AL4X(5)[8],=AL5A(5)[8],=AL7AL(5)[8],=AL7AM(5)[8],=AL7BA(5)[8], + =AL7GF(5)[8],=AL7GK(5)[8],=AL7HG(5)[8],=AL7HW(5)[8],=AL7HW/4(5)[8],=AL7IS(5)[8],=AL7KT(5)[8], + =AL7LH(5)[8],=AL7NL(5)[8],=AL7NM(5)[8],=AL7NS(5)[8],=AL7NS/140(5)[8],=AL7PL(5)[8],=AL7QI(5)[8], + =AL7RE(5)[8],=AL7RL(5)[8],=G8ERJ(5)[8],=GO4AZM(5)[8],=GQ4AZM(5)[8],=GR4AZM(5)[8],=KH0CW(5)[8], + =KH0HR(5)[8],=KH0NI(5)[8],=KH0ZZ(5)[8],=KH2BX(5)[8],=KH2D(5)[8],=KH2D/4(5)[8],=KH2GUM/P(5)[8], + =KH2HB(5)[8],=KH2KD(5)[8],=KH2N(5)[8],=KH2NC(5)[8],=KH2PM(5)[8],=KH2RL(5)[8],=KH2TI(5)[8], + =KH2UV(5)[8],=KH2VM(5)[8],=KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8],=KH6CG/4(5)[8], + =KH6CT(5)[8],=KH6ED(5)[8],=KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8],=KH6ILR(5)[8], + =KH6ILR/4(5)[8],=KH6ITI(5)[8],=KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JNW(5)[8], + =KH6JUA(5)[8],=KH6KZ(5)[8],=KH6M(5)[8],=KH6M/4(5)[8],=KH6M/M(5)[8],=KH6MT(5)[8],=KH6MT/4(5)[8], + =KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8],=KH6PU(5)[8],=KH6RP(5)[8],=KH6TY(5)[8], + =KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8],=KH7DY(5)[8],=KH7FC(5)[8],=KH7GZ(5)[8], + =KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8],=KH7XS/4(5)[8],=KH7XT(5)[8],=KH7ZC(5)[8], + =KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8],=KL0KC(5)[8],=KL0KE/4(5)[8],=KL0L(5)[8], + =KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8],=KL0TY(5)[8],=KL0VU(5)[8],=KL0WF(5)[8], + =KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8],=KL1PA(5)[8],=KL1SS(5)[8],=KL2AK(5)[8], + =KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8],=KL2HV(5)[8],=KL2MQ(5)[8],=KL2NN(5)[8], + =KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8],=KL3KB(5)[8],=KL3KG(5)[8], + =KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8],=KL4DD(5)[8],=KL4H(5)[8], + =KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8],=KL7DA/4(5)[8],=KL7FO(5)[8], + =KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8],=KL7HQW(5)[8],=KL7HX(5)[8], + =KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8],=KL7JDS(5)[8],=KL7JR(5)[8], + =KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8],=KL7NT(5)[8],=KL7P/4(5)[8], + =KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8],=KL9A/1(5)[8],=KP2AF(5)[8], + =KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8],=KP2L/4(5)[8],=KP2N(5)[8], + =KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8],=KP3BL(5)[8],=KP3BP(5)[8], + =KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8],=KP4AOD/4(5)[8],=KP4BBN(5)[8], + =KP4BEC(5)[8],=KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8],=KP4CPP(5)[8], + =KP4CSJ(5)[8],=KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8],=KP4DPQ(5)[8], + =KP4DQS(5)[8],=KP4EDL(5)[8],=KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8], =KP4EOR/4(5)[8],=KP4ERT(5)[8],=KP4ESC(5)[8],=KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8], =KP4FJE(5)[8],=KP4FLP(5)[8],=KP4FOF(5)[8],=KP4HE(5)[8],=KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8], =KP4IRI(5)[8],=KP4IT(5)[8],=KP4JC(5)[8],=KP4JCC(5)[8],=KP4JOS(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8], @@ -1269,48 +1272,49 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =NH6BD/4(5)[8],=NH6E(5)[8],=NH6GE(5)[8],=NH6GR(5)[8],=NH6HX(5)[8],=NH6HX/4(5)[8],=NH6JX(5)[8], =NH6KI(5)[8],=NH6QR(5)[8],=NH6SR(5)[8],=NH6T(5)[8],=NH6TL(5)[8],=NH7AA(5)[8],=NH7AQ(5)[8], =NH7AR(5)[8],=NH7FG(5)[8],=NH7OI(5)[8],=NH7T/4(5)[8],=NH7UN(5)[8],=NH7XN(5)[8],=NL5L(5)[8], - =NL7AJ(5)[8],=NL7AU(5)[8],=NL7AU/4(5)[8],=NL7BV(5)[8],=NL7KX(5)[8],=NL7LO(5)[8],=NL7LR(5)[8], - =NL7LY(5)[8],=NL7MD(5)[8],=NL7MR(5)[8],=NL7OB(5)[8],=NL7OS(5)[8],=NL7P(5)[8],=NL7PV(5)[8], - =NL7U(5)[8],=NL7VV(5)[8],=NL7VX(5)[8],=NL7VX/4(5)[8],=NL7VX/M(5)[8],=NL7YZ(5)[8],=NP2B(5)[8], - =NP2B/4(5)[8],=NP2BB(5)[8],=NP2BW(5)[8],=NP2C(5)[8],=NP2C/4(5)[8],=NP2CB(5)[8],=NP2D(5)[8], - =NP2DJ(5)[8],=NP2EI(5)[8],=NP2FT(5)[8],=NP2GN(5)[8],=NP2GW(5)[8],=NP2HQ(5)[8],=NP2HS(5)[8], - =NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8],=NP2IJ(5)[8],=NP2IS(5)[8],=NP2IW(5)[8],=NP2IX(5)[8], - =NP2JA(5)[8],=NP2JS(5)[8],=NP2L(5)[8],=NP2LC(5)[8],=NP2MM(5)[8],=NP2MN(5)[8],=NP2MP(5)[8], - =NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8],=NP2OL(5)[8],=NP2OO(5)[8],=NP2OR(5)[8],=NP2PA(5)[8], - =NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8],=NP3CC(5)[8],=NP3CI(5)[8], - =NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8],=NP3HG(5)[8],=NP3HN(5)[8], - =NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8],=NP3KM(5)[8],=NP3MM(5)[8], - =NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8],=NP3ST(5)[8],=NP3TM(5)[8], - =NP3UM(5)[8],=NP3VJ(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8],=NP4CK(5)[8],=NP4CV(5)[8], - =NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8],=NP4JL(5)[8],=NP4JU(5)[8], - =NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8],=NP4SY(5)[8],=NP4TR(5)[8], - =NP4WT(5)[8],=NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8],=WH6A(5)[8],=WH6ACF(5)[8], - =WH6AJS(5)[8],=WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8],=WH6CEF(5)[8],=WH6CMT(5)[8], - =WH6CNC(5)[8],=WH6CTC(5)[8],=WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8],=WH6DMJ(5)[8],=WH6DNF(5)[8], - =WH6DOL(5)[8],=WH6DUJ(5)[8],=WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8],=WH6EKW(5)[8],=WH6ELG(5)[8], - =WH6ELM(5)[8],=WH6ETE(5)[8],=WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8],=WH6HA(5)[8],=WH6IF(5)[8], - =WH6IZ(5)[8],=WH6J(5)[8],=WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8],=WH6LE/M(5)[8],=WH6LE/P(5)[8], - =WH6NE(5)[8],=WH6WX(5)[8],=WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8],=WH6ZF(5)[8],=WH7GD(5)[8], - =WH7HX(5)[8],=WH7NI(5)[8],=WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8],=WH7YV(5)[8],=WH7ZM(5)[8], - =WH9AAF(5)[8],=WL7AUL(5)[8],=WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8],=WL7CIB(5)[8],=WL7CKJ(5)[8], - =WL7COL(5)[8],=WL7CQT(5)[8],=WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8],=WL7SR(5)[8],=WL7UN(5)[8], - =WL7WN(5)[8],=WL7YX(5)[8],=WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8],=WP2AIG(5)[8],=WP2BB(5)[8], - =WP2C(5)[8],=WP2L(5)[8],=WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8],=WP3BC(5)[8],=WP3JQ(5)[8], - =WP3JU(5)[8],=WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8],=WP3ME(5)[8],=WP3NIS(5)[8],=WP3O(5)[8], - =WP3TQ(5)[8],=WP3ZA(5)[8],=WP3ZP(5)[8],=WP4AIE(5)[8],=WP4AIL(5)[8],=WP4AIZ(5)[8],=WP4ALH(5)[8], - =WP4AQK(5)[8],=WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8],=WP4BIN(5)[8],=WP4BJS(5)[8],=WP4BK(5)[8], - =WP4BOC(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8],=WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8], - =WP4DCB(5)[8],=WP4DFK(5)[8],=WP4DNE(5)[8],=WP4DPX(5)[8],=WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8], - =WP4FRK(5)[8],=WP4FS(5)[8],=WP4GAK(5)[8],=WP4GFH(5)[8],=WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8], - =WP4HNN(5)[8],=WP4HOX(5)[8],=WP4IF(5)[8],=WP4IJ(5)[8],=WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8], - =WP4JT(5)[8],=WP4KCJ(5)[8],=WP4KDH(5)[8],=WP4KFP(5)[8],=WP4KGI(5)[8],=WP4KI(5)[8],=WP4KJV(5)[8], - =WP4KSK(5)[8],=WP4KTD(5)[8],=WP4LBK(5)[8],=WP4LDG(5)[8],=WP4LDL(5)[8],=WP4LDP(5)[8],=WP4LHA(5)[8], - =WP4MAE(5)[8],=WP4MD(5)[8],=WP4MO(5)[8],=WP4MQF(5)[8],=WP4MWE(5)[8],=WP4MXE(5)[8],=WP4MYG(5)[8], - =WP4MYK(5)[8],=WP4NAI(5)[8],=WP4NAQ(5)[8],=WP4NBF(5)[8],=WP4NBG(5)[8],=WP4NFU(5)[8],=WP4NKU(5)[8], - =WP4NLQ(5)[8],=WP4NQA(5)[8],=WP4NVL(5)[8],=WP4NWW(5)[8],=WP4O/4(5)[8],=WP4O/M(5)[8],=WP4ODR(5)[8], - =WP4OFA(5)[8],=WP4OHJ(5)[8],=WP4OLM(5)[8],=WP4OMG(5)[8],=WP4OMV(5)[8],=WP4ONR(5)[8],=WP4OOI(5)[8], - =WP4OPD(5)[8],=WP4OPF(5)[8],=WP4OPG(5)[8],=WP4OTP(5)[8],=WP4P(5)[8],=WP4PR(5)[8],=WP4PUV(5)[8], - =WP4PWV(5)[8],=WP4PXG(5)[8],=WP4QHU(5)[8],=WP4SW(5)[8],=WP4TD(5)[8],=WP4TX(5)[8],=WP4UM(5)[8], + =NL7AJ(5)[8],=NL7AU(5)[8],=NL7AU/4(5)[8],=NL7BV(5)[8],=NL7KL(5)[8],=NL7KX(5)[8],=NL7LO(5)[8], + =NL7LR(5)[8],=NL7LY(5)[8],=NL7MD(5)[8],=NL7MR(5)[8],=NL7OB(5)[8],=NL7OS(5)[8],=NL7P(5)[8], + =NL7PV(5)[8],=NL7U(5)[8],=NL7VV(5)[8],=NL7VX(5)[8],=NL7VX/4(5)[8],=NL7VX/M(5)[8],=NL7YZ(5)[8], + =NP2B(5)[8],=NP2B/4(5)[8],=NP2BB(5)[8],=NP2BW(5)[8],=NP2C(5)[8],=NP2C/4(5)[8],=NP2CB(5)[8], + =NP2D(5)[8],=NP2DJ(5)[8],=NP2EI(5)[8],=NP2FT(5)[8],=NP2GN(5)[8],=NP2GW(5)[8],=NP2HQ(5)[8], + =NP2HS(5)[8],=NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8],=NP2IJ(5)[8],=NP2IS(5)[8],=NP2IW(5)[8], + =NP2IX(5)[8],=NP2JA(5)[8],=NP2JS(5)[8],=NP2L(5)[8],=NP2LC(5)[8],=NP2MM(5)[8],=NP2MN(5)[8], + =NP2MP(5)[8],=NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8],=NP2OL(5)[8],=NP2OO(5)[8],=NP2OR(5)[8], + =NP2PA(5)[8],=NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8],=NP3CC(5)[8], + =NP3CI(5)[8],=NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8],=NP3HG(5)[8], + =NP3HN(5)[8],=NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8],=NP3KM(5)[8], + =NP3MM(5)[8],=NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8],=NP3ST(5)[8], + =NP3TM(5)[8],=NP3UM(5)[8],=NP3VJ(5)[8],=NP3WX(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8], + =NP4CK(5)[8],=NP4CV(5)[8],=NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8], + =NP4JL(5)[8],=NP4JU(5)[8],=NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8], + =NP4SY(5)[8],=NP4TR(5)[8],=NP4WT(5)[8],=NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8], + =WH6A(5)[8],=WH6ACF(5)[8],=WH6AJS(5)[8],=WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8], + =WH6CEF(5)[8],=WH6CMT(5)[8],=WH6CNC(5)[8],=WH6CTC(5)[8],=WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8], + =WH6DMJ(5)[8],=WH6DNF(5)[8],=WH6DOL(5)[8],=WH6DUJ(5)[8],=WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8], + =WH6EKW(5)[8],=WH6ELG(5)[8],=WH6ELM(5)[8],=WH6ETE(5)[8],=WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8], + =WH6HA(5)[8],=WH6IF(5)[8],=WH6IZ(5)[8],=WH6J(5)[8],=WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8], + =WH6LE/M(5)[8],=WH6LE/P(5)[8],=WH6NE(5)[8],=WH6WX(5)[8],=WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8], + =WH6ZF(5)[8],=WH7GD(5)[8],=WH7HX(5)[8],=WH7NI(5)[8],=WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8], + =WH7YV(5)[8],=WH7ZM(5)[8],=WH9AAF(5)[8],=WL7AUL(5)[8],=WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8], + =WL7CIB(5)[8],=WL7CKJ(5)[8],=WL7COL(5)[8],=WL7CQT(5)[8],=WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8], + =WL7SR(5)[8],=WL7UN(5)[8],=WL7WN(5)[8],=WL7YX(5)[8],=WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8], + =WP2AIG(5)[8],=WP2BB(5)[8],=WP2C(5)[8],=WP2L(5)[8],=WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8], + =WP3BC(5)[8],=WP3JE(5)[8],=WP3JQ(5)[8],=WP3JU(5)[8],=WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8], + =WP3ME(5)[8],=WP3NIS(5)[8],=WP3O(5)[8],=WP3TQ(5)[8],=WP3ZA(5)[8],=WP3ZP(5)[8],=WP4AIE(5)[8], + =WP4AIL(5)[8],=WP4AIZ(5)[8],=WP4ALH(5)[8],=WP4AQK(5)[8],=WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8], + =WP4BIN(5)[8],=WP4BJS(5)[8],=WP4BK(5)[8],=WP4BOC(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8], + =WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8],=WP4DCB(5)[8],=WP4DFK(5)[8],=WP4DNE(5)[8],=WP4DPX(5)[8], + =WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8],=WP4FRK(5)[8],=WP4FS(5)[8],=WP4GAK(5)[8],=WP4GFH(5)[8], + =WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8],=WP4HNN(5)[8],=WP4HOX(5)[8],=WP4IF(5)[8],=WP4IJ(5)[8], + =WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8],=WP4JT(5)[8],=WP4KCJ(5)[8],=WP4KDH(5)[8],=WP4KFP(5)[8], + =WP4KGI(5)[8],=WP4KI(5)[8],=WP4KJV(5)[8],=WP4KSK(5)[8],=WP4KTD(5)[8],=WP4LBK(5)[8],=WP4LDG(5)[8], + =WP4LDL(5)[8],=WP4LDP(5)[8],=WP4LHA(5)[8],=WP4MAE(5)[8],=WP4MD(5)[8],=WP4MO(5)[8],=WP4MQF(5)[8], + =WP4MWE(5)[8],=WP4MXE(5)[8],=WP4MYG(5)[8],=WP4MYK(5)[8],=WP4NAI(5)[8],=WP4NAQ(5)[8],=WP4NBF(5)[8], + =WP4NBG(5)[8],=WP4NFU(5)[8],=WP4NKU(5)[8],=WP4NLQ(5)[8],=WP4NQA(5)[8],=WP4NVL(5)[8],=WP4NWW(5)[8], + =WP4O/4(5)[8],=WP4O/M(5)[8],=WP4ODR(5)[8],=WP4OFA(5)[8],=WP4OHJ(5)[8],=WP4OLM(5)[8],=WP4OMG(5)[8], + =WP4OMV(5)[8],=WP4ONR(5)[8],=WP4OOI(5)[8],=WP4OPD(5)[8],=WP4OPF(5)[8],=WP4OPG(5)[8],=WP4OTP(5)[8], + =WP4OXA(5)[8],=WP4P(5)[8],=WP4PR(5)[8],=WP4PUV(5)[8],=WP4PWV(5)[8],=WP4PXG(5)[8],=WP4QHU(5)[8], + =WP4SW(5)[8],=WP4TD(5)[8],=WP4TX(5)[8],=WP4UC(5)[8],=WP4UM(5)[8], AA5(4)[7],AB5(4)[7],AC5(4)[7],AD5(4)[7],AE5(4)[7],AF5(4)[7],AG5(4)[7],AI5(4)[7],AJ5(4)[7], AK5(4)[7],K5(4)[7],KA5(4)[7],KB5(4)[7],KC5(4)[7],KD5(4)[7],KE5(4)[7],KF5(4)[7],KG5(4)[7], KI5(4)[7],KJ5(4)[7],KK5(4)[7],KM5(4)[7],KN5(4)[7],KO5(4)[7],KQ5(4)[7],KR5(4)[7],KS5(4)[7], @@ -1320,49 +1324,49 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: NW5(4)[7],NX5(4)[7],NY5(4)[7],NZ5(4)[7],W5(4)[7],WA5(4)[7],WB5(4)[7],WC5(4)[7],WD5(4)[7], WE5(4)[7],WF5(4)[7],WG5(4)[7],WI5(4)[7],WJ5(4)[7],WK5(4)[7],WM5(4)[7],WN5(4)[7],WO5(4)[7], WQ5(4)[7],WR5(4)[7],WS5(4)[7],WT5(4)[7],WU5(4)[7],WV5(4)[7],WW5(4)[7],WX5(4)[7],WY5(4)[7], - WZ5(4)[7],=AH2AQ(4)[7],=AH2AQ/5(4)[7],=AH2DG(4)[7],=AH2EH(4)[7],=AH2H(4)[7],=AH2T(4)[7], - =AH6AF(4)[7],=AH6DZ(4)[7],=AH6FV(4)[7],=AH6HT(4)[7],=AH6OU(4)[7],=AH6RB(4)[7],=AH6TD(4)[7], - =AH6UD(4)[7],=AH8O(4)[7],=AH9B(4)[7],=AL1F(4)[7],=AL2K(4)[7],=AL2S(4)[7],=AL4F(4)[7],=AL5J(4)[7], - =AL7C(4)[7],=AL7CJ(4)[7],=AL7CQ(4)[7],=AL7DF(4)[7],=AL7DR(4)[7],=AL7GY(4)[7],=AL7HH(4)[7], - =AL7HU(4)[7],=AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7],=AL7L/5(4)[7],=AL7PB(4)[7], - =AL7RD(4)[7],=AL7RI(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7],=KH0CU(4)[7],=KH0DW(4)[7],=KH2AI(4)[7], - =KH2BH(4)[7],=KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7],=KH2XO(4)[7],=KH2YO(4)[7], - =KH6ABA(4)[7],=KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7],=KH6ITY/M(4)[7], - =KH6JIQ(4)[7],=KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LL(4)[7],=KH6LX(4)[7],=KH6MB/5(4)[7], - =KH6SP/5(4)[7],=KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7],=KH7IC(4)[7],=KH7JE(4)[7], - =KH7QL(4)[7],=KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7],=KL0HU(4)[7],=KL0PG(4)[7], - =KL1DA(4)[7],=KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7],=KL1WG(4)[7],=KL1WO(4)[7], - =KL1XK(4)[7],=KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7],=KL2CD(4)[7],=KL2HC(4)[7], - =KL2HN(4)[7],=KL2MI(4)[7],=KL2NN(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7],=KL2VA(4)[7], - =KL3DB(4)[7],=KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7],=KL3KI(4)[7], - =KL3TB(4)[7],=KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7],=KL7AH(4)[7],=KL7AU(4)[7],=KL7AX(4)[7], - =KL7BCD(4)[7],=KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7],=KL7BZL(4)[7],=KL7CD(4)[7],=KL7DB(4)[7], - =KL7EBE(4)[7],=KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7],=KL7F(4)[7],=KL7FB(4)[7],=KL7FHX(4)[7], - =KL7FLY(4)[7],=KL7FQR(4)[7],=KL7GNW(4)[7],=KL7HH(4)[7],=KL7IDM(4)[7],=KL7IK(4)[7],=KL7ITF(4)[7], - =KL7IWU(4)[7],=KL7IZW(4)[7],=KL7JAR(4)[7],=KL7JEX(4)[7],=KL7JIU(4)[7],=KL7JR/5(4)[7],=KL7JW(4)[7], - =KL7LJ(4)[7],=KL7LY(4)[7],=KL7MA(4)[7],=KL7ME(4)[7],=KL7ML(4)[7],=KL7NE(4)[7],=KL7NI(4)[7], - =KL7OI(4)[7],=KL7PZ(4)[7],=KL7QC(4)[7],=KL7SG(4)[7],=KL7TN/5(4)[7],=KL7UHF(4)[7],=KL7USI/5(4)[7], - =KL7XP(4)[7],=KL7XS(4)[7],=KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7],=KP4DJT(4)[7],=KP4FF(4)[7], - =KP4FFW(4)[7],=KP4GMC(4)[7],=KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7],=KP4YP(4)[7],=NH0V/5(4)[7], - =NH2LP(4)[7],=NH6AZ(4)[7],=NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7],=NH6L(4)[7],=NH6VB(4)[7], - =NH6VJ(4)[7],=NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7],=NH7PZ(4)[7],=NH7R(4)[7], - =NH7RO(4)[7],=NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7],=NL7AX(4)[7],=NL7C(4)[7], - =NL7CO(4)[7],=NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7],=NL7IE(4)[7],=NL7JH(4)[7], - =NL7JI(4)[7],=NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7],=NL7PD(4)[7],=NL7RQ(4)[7], - =NL7RQ/5(4)[7],=NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7],=NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7], - =NP3CV(4)[7],=NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7],=NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7], - =NP4NQ(4)[7],=NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7],=WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7], - =WH6BYJ(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7],=WH6CUL(4)[7],=WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7], - =WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7],=WH6EXQ(4)[7],=WH6FAD(4)[7],=WH6FGM(4)[7], - =WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH7DC(4)[7],=WH7DW(4)[7],=WH7OK(4)[7],=WH7R(4)[7],=WH7YQ(4)[7], - =WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7],=WL7AWC(4)[7],=WL7BBV(4)[7],=WL7BKF(4)[7], - =WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7],=WL7CQE(4)[7],=WL7CTP(4)[7],=WL7CTQ(4)[7], - =WL7D(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7],=WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7],=WL7OP(4)[7], - =WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7],=WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7],=WP2WP(4)[7], - =WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7],=WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7],=WP4CJY(4)[7], - =WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7],=WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7],=WP4MJP(4)[7], - =WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7],=WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7],=WP4OUE(4)[7], - =WP4RON(4)[7], + WZ5(4)[7],=AH2AQ(4)[7],=AH2AQ/5(4)[7],=AH2DG(4)[7],=AH2DR(4)[7],=AH2EH(4)[7],=AH2H(4)[7], + =AH2T(4)[7],=AH6AF(4)[7],=AH6DZ(4)[7],=AH6FV(4)[7],=AH6HT(4)[7],=AH6OU(4)[7],=AH6RB(4)[7], + =AH6TD(4)[7],=AH6UD(4)[7],=AH8O(4)[7],=AH9B(4)[7],=AL1F(4)[7],=AL2K(4)[7],=AL2S(4)[7],=AL4F(4)[7], + =AL5J(4)[7],=AL7C(4)[7],=AL7CJ(4)[7],=AL7CQ(4)[7],=AL7DF(4)[7],=AL7DR(4)[7],=AL7GY(4)[7], + =AL7HH(4)[7],=AL7HU(4)[7],=AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7],=AL7L/5(4)[7], + =AL7PB(4)[7],=AL7RD(4)[7],=AL7RI(4)[7],=AL7V(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7],=KH0CU(4)[7], + =KH0DW(4)[7],=KH2AI(4)[7],=KH2BH(4)[7],=KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7], + =KH2XO(4)[7],=KH2YO(4)[7],=KH6ABA(4)[7],=KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7], + =KH6ITY/M(4)[7],=KH6JIQ(4)[7],=KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LL(4)[7], + =KH6LX(4)[7],=KH6MB/5(4)[7],=KH6SP/5(4)[7],=KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7], + =KH7IC(4)[7],=KH7JE(4)[7],=KH7QL(4)[7],=KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7], + =KL0HU(4)[7],=KL0PG(4)[7],=KL1DA(4)[7],=KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7], + =KL1WG(4)[7],=KL1WO(4)[7],=KL1XK(4)[7],=KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7], + =KL2CD(4)[7],=KL2HC(4)[7],=KL2HN(4)[7],=KL2MI(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7], + =KL2VA(4)[7],=KL3DB(4)[7],=KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7], + =KL3KI(4)[7],=KL3TB(4)[7],=KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7],=KL7AH(4)[7],=KL7AU(4)[7], + =KL7AX(4)[7],=KL7BCD(4)[7],=KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7],=KL7BZL(4)[7],=KL7CD(4)[7], + =KL7DB(4)[7],=KL7EBE(4)[7],=KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7],=KL7F(4)[7],=KL7FB(4)[7], + =KL7FHX(4)[7],=KL7FLY(4)[7],=KL7FQR(4)[7],=KL7GNW(4)[7],=KL7HH(4)[7],=KL7HJZ(4)[7],=KL7IDM(4)[7], + =KL7IK(4)[7],=KL7ITF(4)[7],=KL7IWU(4)[7],=KL7IZW(4)[7],=KL7JAR(4)[7],=KL7JEX(4)[7],=KL7JIU(4)[7], + =KL7JR/5(4)[7],=KL7JW(4)[7],=KL7LJ(4)[7],=KL7LY(4)[7],=KL7MA(4)[7],=KL7ME(4)[7],=KL7ML(4)[7], + =KL7NE(4)[7],=KL7NI(4)[7],=KL7OI(4)[7],=KL7PZ(4)[7],=KL7QC(4)[7],=KL7SG(4)[7],=KL7TN/5(4)[7], + =KL7UHF(4)[7],=KL7USI/5(4)[7],=KL7XP(4)[7],=KL7XS(4)[7],=KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7], + =KP4DJT(4)[7],=KP4FF(4)[7],=KP4FFW(4)[7],=KP4GMC(4)[7],=KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7], + =KP4YP(4)[7],=NH0V/5(4)[7],=NH2LP(4)[7],=NH6AZ(4)[7],=NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7], + =NH6L(4)[7],=NH6VB(4)[7],=NH6VJ(4)[7],=NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7], + =NH7PZ(4)[7],=NH7R(4)[7],=NH7RO(4)[7],=NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7], + =NL7AX(4)[7],=NL7C(4)[7],=NL7CO(4)[7],=NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7], + =NL7IE(4)[7],=NL7JH(4)[7],=NL7JI(4)[7],=NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7], + =NL7PD(4)[7],=NL7RQ(4)[7],=NL7RQ/5(4)[7],=NL7SI(4)[7],=NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7], + =NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7],=NP3CV(4)[7],=NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7], + =NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7],=NP4NQ(4)[7],=NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7], + =WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7],=WH6BYJ(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7], + =WH6CUL(4)[7],=WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7],=WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7], + =WH6EXQ(4)[7],=WH6FAD(4)[7],=WH6FGM(4)[7],=WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH7DC(4)[7],=WH7DW(4)[7], + =WH7OK(4)[7],=WH7R(4)[7],=WH7YQ(4)[7],=WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7], + =WL7AWC(4)[7],=WL7BBV(4)[7],=WL7BKF(4)[7],=WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7], + =WL7CQE(4)[7],=WL7CTP(4)[7],=WL7CTQ(4)[7],=WL7D(4)[7],=WL7FE(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7], + =WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7],=WL7OP(4)[7],=WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7], + =WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7],=WP2WP(4)[7],=WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7], + =WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7],=WP4CJY(4)[7],=WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7], + =WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7],=WP4MJP(4)[7],=WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7], + =WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7],=WP4OUE(4)[7],=WP4RON(4)[7], AA6(3)[6],AB6(3)[6],AC6(3)[6],AD6(3)[6],AE6(3)[6],AF6(3)[6],AG6(3)[6],AI6(3)[6],AJ6(3)[6], AK6(3)[6],K6(3)[6],KA6(3)[6],KB6(3)[6],KC6(3)[6],KD6(3)[6],KE6(3)[6],KF6(3)[6],KG6(3)[6], KI6(3)[6],KJ6(3)[6],KK6(3)[6],KM6(3)[6],KN6(3)[6],KO6(3)[6],KQ6(3)[6],KR6(3)[6],KS6(3)[6], @@ -1372,54 +1376,55 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: NW6(3)[6],NX6(3)[6],NY6(3)[6],NZ6(3)[6],W6(3)[6],WA6(3)[6],WB6(3)[6],WC6(3)[6],WD6(3)[6], WE6(3)[6],WF6(3)[6],WG6(3)[6],WI6(3)[6],WJ6(3)[6],WK6(3)[6],WM6(3)[6],WN6(3)[6],WO6(3)[6], WQ6(3)[6],WR6(3)[6],WS6(3)[6],WT6(3)[6],WU6(3)[6],WV6(3)[6],WW6(3)[6],WX6(3)[6],WY6(3)[6], - WZ6(3)[6],=AH0CS(3)[6],=AH0U(3)[6],=AH0U/6(3)[6],=AH2AP(3)[6],=AH2DY(3)[6],=AH6BS(3)[6], - =AH6CY(3)[6],=AH6CY/P(3)[6],=AH6EI(3)[6],=AH6HE(3)[6],=AH6KG(3)[6],=AH6ML(3)[6],=AH6NL(3)[6], - =AH6NP(3)[6],=AH6PD(3)[6],=AH6RI(3)[6],=AH6S(3)[6],=AH6SU(3)[6],=AH6TX(3)[6],=AH6UN(3)[6], - =AH7A(3)[6],=AH7D(3)[6],=AH7F(3)[6],=AH8C(3)[6],=AL3A(3)[6],=AL5ET(3)[6],=AL6A(3)[6],=AL7DQ(3)[6], - =AL7EM(3)[6],=AL7EP(3)[6],=AL7EW(3)[6],=AL7FN(3)[6],=AL7GS(3)[6],=AL7HO/6(3)[6],=AL7L/6(3)[6], - =AL7PS(3)[6],=KH0BR(3)[6],=KH0BU(3)[6],=KH0CA(3)[6],=KH0CG(3)[6],=KH0DH(3)[6],=KH0DJ(3)[6], - =KH0HQ(3)[6],=KH0JJ(3)[6],=KH0V(3)[6],=KH0XD(3)[6],=KH2BD(3)[6],=KH2BI(3)[6],=KH2BR(3)[6], - =KH2BR/6(3)[6],=KH2C(3)[6],=KH2EE(3)[6],=KH2FI(3)[6],=KH2FI/6(3)[6],=KH2H(3)[6],=KH2IW(3)[6], - =KH2LU(3)[6],=KH2LW(3)[6],=KH2LZ(3)[6],=KH2OJ(3)[6],=KH2QE(3)[6],=KH2QL(3)[6],=KH2QY(3)[6], - =KH2TJ(3)[6],=KH2TJ/6(3)[6],=KH2XW(3)[6],=KH2YJ(3)[6],=KH2Z(3)[6],=KH2ZM(3)[6],=KH4AB(3)[6], - =KH6ARA(3)[6],=KH6AS(3)[6],=KH6BMD(3)[6],=KH6BRY(3)[6],=KH6COL(3)[6],=KH6DDW(3)[6],=KH6DX/M(3)[6], - =KH6DX/M6(3)[6],=KH6DZ(3)[6],=KH6EHF(3)[6],=KH6FH(3)[6],=KH6FL(3)[6],=KH6FOX(3)[6],=KH6FQR(3)[6], - =KH6FQY(3)[6],=KH6GBQ(3)[6],=KH6GC(3)[6],=KH6GJV(3)[6],=KH6GJV/6(3)[6],=KH6GK(3)[6],=KH6GKR(3)[6], - =KH6HJE(3)[6],=KH6HOU(3)[6],=KH6IKH(3)[6],=KH6IKL(3)[6],=KH6IP(3)[6],=KH6IPJ(3)[6],=KH6JCT(3)[6], - =KH6JGD(3)[6],=KH6JJN(3)[6],=KH6JJN/P(3)[6],=KH6JN(3)[6],=KH6JR(3)[6],=KH6JRB(3)[6],=KH6JRC(3)[6], - =KH6JS(3)[6],=KH6JUZ(3)[6],=KH6JVS(3)[6],=KH6JWG(3)[6],=KH6KT(3)[6],=KH6LO(3)[6],=KH6MV(3)[6], - =KH6N(3)[6],=KH6NG(3)[6],=KH6O(3)[6],=KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6], - =KH6TO(3)[6],=KH6UQ(3)[6],=KH6USA(3)[6],=KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6], - =KH6WZ(3)[6],=KH7CD/6(3)[6],=KH7CO(3)[6],=KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6], - =KH7JR(3)[6],=KH7NS(3)[6],=KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6], - =KH7XX/6(3)[6],=KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6], - =KL0AF(3)[6],=KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6], - =KL3YH(3)[6],=KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6],=KL4UZ(3)[6],=KL7AK(3)[6], - =KL7CE/6(3)[6],=KL7CM(3)[6],=KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6],=KL7DJ(3)[6],=KL7EAE(3)[6], - =KL7EAL(3)[6],=KL7HQR(3)[6],=KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6],=KL7IDY/6(3)[6], - =KL7ISN(3)[6],=KL7JBE(3)[6],=KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6],=KL7MF/6(3)[6],=KL7MF/M(3)[6], - =KL7OO(3)[6],=KL7RT(3)[6],=KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6],=KL7VU/6(3)[6],=KP2BK(3)[6], - =KP3BN(3)[6],=KP3YL(3)[6],=KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6],=KP4ENM(3)[6],=KP4ERR(3)[6], - =KP4FBT(3)[6],=KP4MD(3)[6],=KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6],=NH2AR(3)[6],=NH2BD(3)[6], - =NH2BV(3)[6],=NH2CM(3)[6],=NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6],=NH2S(3)[6],=NH6AC(3)[6], - =NH6AE(3)[6],=NH6FV(3)[6],=NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6],=NH6WR(3)[6],=NH7AG(3)[6], - =NH7EM(3)[6],=NH7FW(3)[6],=NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6],=NH7QV(3)[6], - =NH7RT(3)[6],=NH7ST(3)[6],=NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6],=NL7GE(3)[6], - =NL7IB(3)[6],=NL7OP(3)[6],=NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6],=NP4AB(3)[6],=NP4AI/6(3)[6], - =NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6],=NP4XE(3)[6],=WH0AAZ(3)[6],=WH0M(3)[6],=WH2ABS(3)[6], - =WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6],=WH6ANA(3)[6],=WH6ASW/M(3)[6],=WH6BYT(3)[6], - =WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6],=WH6CPT(3)[6],=WH6CRE(3)[6],=WH6CSG(3)[6], - =WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6],=WH6CWS(3)[6],=WH6CZF(3)[6],=WH6CZH(3)[6], - =WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6],=WH6DVX(3)[6],=WH6DYA(3)[6],=WH6DZV(3)[6], - =WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6],=WH6EKB(3)[6],=WH6ENG(3)[6],=WH6EUH(3)[6], - =WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6OI(3)[6],=WH6PX(3)[6],=WH6QA(3)[6],=WH6RF(3)[6], - =WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6],=WH6VN(3)[6],=WH6XI(3)[6],=WH6XX(3)[6], - =WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6],=WH7IN(3)[6],=WH7IV(3)[6],=WH7IZ(3)[6], - =WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6],=WH7RU(3)[6],=WH7TT(3)[6],=WH7VM(3)[6], - =WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6],=WL7ACO(3)[6],=WL7BA(3)[6],=WL7BGF(3)[6], - =WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6],=WL7EKK(3)[6],=WL7RA(3)[6],=WL7SE(3)[6], - =WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6],=WP2N(3)[6],=WP4CUJ(3)[6],=WP4CW(3)[6], - =WP4KSU(3)[6],=WP4MVE(3)[6],=WP4OBB(3)[6], + WZ6(3)[6],=AH0C(3)[6],=AH0CS(3)[6],=AH0U(3)[6],=AH0U/6(3)[6],=AH2AP(3)[6],=AH2DY(3)[6], + =AH6BS(3)[6],=AH6CY(3)[6],=AH6CY/P(3)[6],=AH6EI(3)[6],=AH6HE(3)[6],=AH6KG(3)[6],=AH6ML(3)[6], + =AH6NL(3)[6],=AH6NP(3)[6],=AH6PD(3)[6],=AH6RI(3)[6],=AH6S(3)[6],=AH6SU(3)[6],=AH6TX(3)[6], + =AH6UN(3)[6],=AH7A(3)[6],=AH7D(3)[6],=AH7F(3)[6],=AH8C(3)[6],=AL3A(3)[6],=AL5ET(3)[6],=AL6A(3)[6], + =AL7DQ(3)[6],=AL7EM(3)[6],=AL7EP(3)[6],=AL7EW(3)[6],=AL7FN(3)[6],=AL7GS(3)[6],=AL7HO/6(3)[6], + =AL7L/6(3)[6],=AL7PS(3)[6],=AL7QR(3)[6],=KH0BR(3)[6],=KH0BU(3)[6],=KH0CA(3)[6],=KH0CG(3)[6], + =KH0DH(3)[6],=KH0DJ(3)[6],=KH0HQ(3)[6],=KH0JJ(3)[6],=KH0V(3)[6],=KH0XD(3)[6],=KH2BD(3)[6], + =KH2BI(3)[6],=KH2BR(3)[6],=KH2BR/6(3)[6],=KH2C(3)[6],=KH2EE(3)[6],=KH2FI(3)[6],=KH2FI/6(3)[6], + =KH2H(3)[6],=KH2IW(3)[6],=KH2LU(3)[6],=KH2LW(3)[6],=KH2LZ(3)[6],=KH2OJ(3)[6],=KH2QE(3)[6], + =KH2QL(3)[6],=KH2QY(3)[6],=KH2TJ(3)[6],=KH2TJ/6(3)[6],=KH2XW(3)[6],=KH2YJ(3)[6],=KH2Z(3)[6], + =KH2ZM(3)[6],=KH4AB(3)[6],=KH6ARA(3)[6],=KH6AS(3)[6],=KH6BMD(3)[6],=KH6BRY(3)[6],=KH6COL(3)[6], + =KH6DDW(3)[6],=KH6DX/M(3)[6],=KH6DX/M6(3)[6],=KH6DZ(3)[6],=KH6EHF(3)[6],=KH6FH(3)[6],=KH6FL(3)[6], + =KH6FOX(3)[6],=KH6FQR(3)[6],=KH6FQY(3)[6],=KH6GBQ(3)[6],=KH6GC(3)[6],=KH6GJV(3)[6], + =KH6GJV/6(3)[6],=KH6GK(3)[6],=KH6GKR(3)[6],=KH6HJE(3)[6],=KH6HOU(3)[6],=KH6IKH(3)[6], + =KH6IKL(3)[6],=KH6IP(3)[6],=KH6IPJ(3)[6],=KH6JCT(3)[6],=KH6JGD(3)[6],=KH6JJN(3)[6], + =KH6JJN/P(3)[6],=KH6JN(3)[6],=KH6JR(3)[6],=KH6JRB(3)[6],=KH6JRC(3)[6],=KH6JS(3)[6],=KH6JUZ(3)[6], + =KH6JVS(3)[6],=KH6JWG(3)[6],=KH6KT(3)[6],=KH6LO(3)[6],=KH6MV(3)[6],=KH6N(3)[6],=KH6NG(3)[6], + =KH6O(3)[6],=KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6],=KH6TO(3)[6],=KH6UQ(3)[6], + =KH6USA(3)[6],=KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6],=KH6WZ(3)[6],=KH7CD/6(3)[6], + =KH7CO(3)[6],=KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6],=KH7JR(3)[6],=KH7NS(3)[6], + =KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6],=KH7TW(3)[6],=KH7XX/6(3)[6], + =KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6],=KL0AF(3)[6], + =KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6],=KL3YH(3)[6], + =KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6],=KL4UZ(3)[6],=KL7AK(3)[6],=KL7CE/6(3)[6], + =KL7CM(3)[6],=KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6],=KL7DJ(3)[6],=KL7EAE(3)[6],=KL7EAL(3)[6], + =KL7HQR(3)[6],=KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6],=KL7IDY/6(3)[6],=KL7ISN(3)[6], + =KL7JBE(3)[6],=KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6],=KL7MF/6(3)[6],=KL7MF/M(3)[6],=KL7OO(3)[6], + =KL7RT(3)[6],=KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6],=KL7VU/6(3)[6],=KP2BK(3)[6],=KP3BN(3)[6], + =KP3YL(3)[6],=KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6],=KP4ENM(3)[6],=KP4ERR(3)[6],=KP4FBT(3)[6], + =KP4MD(3)[6],=KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6],=NH2AR(3)[6],=NH2BD(3)[6],=NH2BV(3)[6], + =NH2CM(3)[6],=NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6],=NH2S(3)[6],=NH6AC(3)[6],=NH6AE(3)[6], + =NH6AF(3)[6],=NH6FV(3)[6],=NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6],=NH6ST(3)[6],=NH6WR(3)[6], + =NH7AG(3)[6],=NH7EM(3)[6],=NH7FW(3)[6],=NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6], + =NH7QV(3)[6],=NH7RT(3)[6],=NH7ST(3)[6],=NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6], + =NL7GE(3)[6],=NL7IB(3)[6],=NL7LC(3)[6],=NL7OP(3)[6],=NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6], + =NP4AB(3)[6],=NP4AI/6(3)[6],=NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6],=NP4XE(3)[6],=WH0AAZ(3)[6], + =WH0M(3)[6],=WH2ABS(3)[6],=WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6],=WH6ANA(3)[6],=WH6ASW/M(3)[6], + =WH6BYT(3)[6],=WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6],=WH6CPT(3)[6],=WH6CRE(3)[6], + =WH6CSG(3)[6],=WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6],=WH6CWS(3)[6],=WH6CZF(3)[6], + =WH6CZH(3)[6],=WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6],=WH6DVX(3)[6],=WH6DYA(3)[6], + =WH6DZV(3)[6],=WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6],=WH6EKB(3)[6],=WH6ENG(3)[6], + =WH6EUH(3)[6],=WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6MC(3)[6],=WH6OI(3)[6],=WH6PX(3)[6], + =WH6QA(3)[6],=WH6RF(3)[6],=WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6],=WH6VN(3)[6], + =WH6XI(3)[6],=WH6XX(3)[6],=WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6],=WH7IN(3)[6], + =WH7IV(3)[6],=WH7IZ(3)[6],=WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6],=WH7RU(3)[6], + =WH7TT(3)[6],=WH7VM(3)[6],=WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6],=WL7ACO(3)[6], + =WL7BA(3)[6],=WL7BGF(3)[6],=WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6],=WL7EKK(3)[6], + =WL7RA(3)[6],=WL7SE(3)[6],=WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6],=WP2N(3)[6], + =WP4CUJ(3)[6],=WP4CW(3)[6],=WP4KSU(3)[6],=WP4MVE(3)[6],=WP4OBB(3)[6], AA7(3)[6],AB7(3)[6],AC7(3)[6],AD7(3)[6],AE7(3)[6],AF7(3)[6],AG7(3)[6],AI7(3)[6],AJ7(3)[6], AK7(3)[6],K7(3)[6],KA7(3)[6],KB7(3)[6],KC7(3)[6],KD7(3)[6],KE7(3)[6],KF7(3)[6],KG7(3)[6], KI7(3)[6],KJ7(3)[6],KK7(3)[6],KM7(3)[6],KN7(3)[6],KO7(3)[6],KQ7(3)[6],KR7(3)[6],KS7(3)[6], @@ -1483,51 +1488,51 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KL7GKY(3)[6],=KL7GRF(3)[6],=KL7GT(3)[6],=KL7HB(3)[6],=KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6], =KL7HI(3)[6],=KL7HJR(3)[6],=KL7HLF(3)[6],=KL7HM(3)[6],=KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6], =KL7IAL(3)[6],=KL7IBT(3)[6],=KL7IDY(3)[6],=KL7IEI(3)[6],=KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6], - =KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6],=KL7IPV(3)[6],=KL7ISE(3)[6],=KL7IUX(3)[6], - =KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6],=KL7JBB(3)[6],=KL7JDQ(3)[6],=KL7JES(3)[6], - =KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6],=KL7KG/7(3)[6],=KL7LG(3)[6],=KL7LI(3)[6], - =KL7LX(3)[6],=KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6],=KL7MZ(3)[6],=KL7NA(3)[6],=KL7NP(3)[6], - =KL7NP/7(3)[6],=KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6],=KL7OR(3)[6],=KL7OR/7(3)[6],=KL7OS(3)[6], - =KL7OY(3)[6],=KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6],=KL7QK/140(3)[6],=KL7QK/7(3)[6],=KL7QR(3)[6], - =KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6],=KL7RM(3)[6],=KL7RS(3)[6],=KL7S(3)[6], - =KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6],=KL7UP(3)[6],=KL7UT(3)[6],=KL7VK(3)[6], - =KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6],=KL7WC(3)[6],=KL7WM(3)[6],=KL7WN(3)[6], - =KL7WP(3)[6],=KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6],=KL7YY/M(3)[6],=KL7ZH(3)[6], - =KL7ZW(3)[6],=KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6],=KP2CB(3)[6],=KP2CT(3)[6], - =KP2X(3)[6],=KP2Y(3)[6],=KP4BBN(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6],=KP4UZ(3)[6],=KP4X(3)[6], - =NH0F(3)[6],=NH0K(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6],=NH6B(3)[6],=NH6BF(3)[6], - =NH6CI(3)[6],=NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6],=NH6HE(3)[6],=NH6HZ(3)[6], - =NH6LM(3)[6],=NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6],=NH6Z(3)[6],=NH6ZA(3)[6], - =NH6ZE(3)[6],=NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6],=NH7N(3)[6],=NH7ND(3)[6], - =NH7NJ/7(3)[6],=NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6],=NH7SH(3)[6],=NH7TG(3)[6], - =NH7VZ(3)[6],=NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6],=NH7YI(3)[6],=NL7AH(3)[6], - =NL7AR(3)[6],=NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6],=NL7DH(3)[6],=NL7DY(3)[6], - =NL7EO(3)[6],=NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6],=NL7GW(3)[6],=NL7HH(3)[6], - =NL7HK(3)[6],=NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6],=NL7JN(3)[6],=NL7KV(3)[6], - =NL7LI(3)[6],=NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6],=NL7PN(3)[6],=NL7QI(3)[6], - =NL7RL(3)[6],=NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6],=NL7WJ(3)[6],=NL7XX(3)[6], - =NL7ZM(3)[6],=NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6],=NP3PH(3)[6],=NP4AI/M(3)[6], - =NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6],=VA2GLB/P(3)[6],=WH0AAM(3)[6], - =WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6],=WH6B(3)[6],=WH6BDR(3)[6], - =WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6],=WH6CUS(3)[6],=WH6CWD(3)[6], - =WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6],=WH6DAY(3)[6],=WH6DJO(3)[6], - =WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6],=WH6EEC(3)[6],=WH6EEG(3)[6], - =WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6],=WH6ETO(3)[6],=WH6EWE(3)[6], - =WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6],=WH6OY(3)[6],=WH6QV(3)[6], - =WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6],=WH6YT(3)[6],=WH6ZR(3)[6], - =WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6],=WH7G(3)[6],=WH7GC(3)[6], - =WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6],=WH7RG(3)[6],=WH7TC(3)[6], - =WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6],=WL7AAW(3)[6],=WL7AL(3)[6],=WL7AP(3)[6], - =WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6],=WL7BHR(3)[6],=WL7BLM(3)[6],=WL7BM(3)[6], - =WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6],=WL7BUI(3)[6],=WL7BVN(3)[6],=WL7BVS(3)[6], - =WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6],=WL7CPE(3)[6],=WL7CPI(3)[6],=WL7CQX(3)[6], - =WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6],=WL7CTE(3)[6],=WL7DD(3)[6],=WL7FA(3)[6], - =WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6],=WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6],=WL7IS(3)[6], - =WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6],=WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6],=WL7OA(3)[6], - =WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6],=WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6],=WL7SO(3)[6], - =WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6],=WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6],=WL7WU(3)[6], - =WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6],=WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6],=WP2ADG(3)[6], - =WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], + =KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6],=KL7IOW(3)[6],=KL7IPV(3)[6],=KL7ISE(3)[6], + =KL7IUX(3)[6],=KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6],=KL7JBB(3)[6],=KL7JDQ(3)[6], + =KL7JES(3)[6],=KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6],=KL7KG/7(3)[6],=KL7LG(3)[6], + =KL7LI(3)[6],=KL7LX(3)[6],=KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6],=KL7MZ(3)[6],=KL7NA(3)[6], + =KL7NP(3)[6],=KL7NP/7(3)[6],=KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6],=KL7OR(3)[6],=KL7OR/7(3)[6], + =KL7OS(3)[6],=KL7OY(3)[6],=KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6],=KL7QK/140(3)[6],=KL7QK/7(3)[6], + =KL7QR(3)[6],=KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6],=KL7RM(3)[6],=KL7RS(3)[6], + =KL7S(3)[6],=KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6],=KL7UP(3)[6],=KL7UT(3)[6], + =KL7VK(3)[6],=KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6],=KL7WC(3)[6],=KL7WM(3)[6], + =KL7WN(3)[6],=KL7WP(3)[6],=KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6],=KL7YY/M(3)[6], + =KL7ZH(3)[6],=KL7ZW(3)[6],=KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6],=KP2CB(3)[6], + =KP2CT(3)[6],=KP2X(3)[6],=KP2Y(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6],=KP4UZ(3)[6],=KP4X(3)[6], + =NH0F(3)[6],=NH0K(3)[6],=NH0O(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6],=NH6B(3)[6], + =NH6BF(3)[6],=NH6CI(3)[6],=NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6],=NH6HE(3)[6], + =NH6HZ(3)[6],=NH6LF(3)[6],=NH6LM(3)[6],=NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6], + =NH6Z(3)[6],=NH6ZA(3)[6],=NH6ZE(3)[6],=NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6], + =NH7N(3)[6],=NH7ND(3)[6],=NH7NJ/7(3)[6],=NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6], + =NH7SH(3)[6],=NH7TG(3)[6],=NH7VZ(3)[6],=NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6], + =NH7YI(3)[6],=NL7AH(3)[6],=NL7AR(3)[6],=NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6], + =NL7DH(3)[6],=NL7DY(3)[6],=NL7EO(3)[6],=NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6], + =NL7GW(3)[6],=NL7HH(3)[6],=NL7HK(3)[6],=NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6], + =NL7JN(3)[6],=NL7KV(3)[6],=NL7LI(3)[6],=NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6], + =NL7PN(3)[6],=NL7QI(3)[6],=NL7RL(3)[6],=NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6], + =NL7WJ(3)[6],=NL7XX(3)[6],=NL7ZM(3)[6],=NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6], + =NP3PH(3)[6],=NP4AI/M(3)[6],=NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6], + =VA2GLB/P(3)[6],=WH0AAM(3)[6],=WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6], + =WH6B(3)[6],=WH6BDR(3)[6],=WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6], + =WH6CUS(3)[6],=WH6CWD(3)[6],=WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6], + =WH6DAY(3)[6],=WH6DJO(3)[6],=WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6], + =WH6EEC(3)[6],=WH6EEG(3)[6],=WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6], + =WH6ETO(3)[6],=WH6EWE(3)[6],=WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6], + =WH6OY(3)[6],=WH6QV(3)[6],=WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6], + =WH6YT(3)[6],=WH6ZR(3)[6],=WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6], + =WH7G(3)[6],=WH7GC(3)[6],=WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6], + =WH7RG(3)[6],=WH7TC(3)[6],=WH7U(3)[6],=WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6], + =WL7AAW(3)[6],=WL7AL(3)[6],=WL7AP(3)[6],=WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6], + =WL7BHR(3)[6],=WL7BLM(3)[6],=WL7BM(3)[6],=WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6], + =WL7BUI(3)[6],=WL7BVN(3)[6],=WL7BVS(3)[6],=WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6], + =WL7CPE(3)[6],=WL7CPI(3)[6],=WL7CQX(3)[6],=WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6], + =WL7CTE(3)[6],=WL7DD(3)[6],=WL7FA(3)[6],=WL7FR(3)[6],=WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6], + =WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6],=WL7IS(3)[6],=WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6], + =WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6],=WL7OA(3)[6],=WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6], + =WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6],=WL7SO(3)[6],=WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6], + =WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6],=WL7WU(3)[6],=WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6], + =WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6],=WP2ADG(3)[6],=WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], AA8(4)[8],AB8(4)[8],AC8(4)[8],AD8(4)[8],AE8(4)[8],AF8(4)[8],AG8(4)[8],AI8(4)[8],AJ8(4)[8], AK8(4)[8],K8(4)[8],KA8(4)[8],KB8(4)[8],KC8(4)[8],KD8(4)[8],KE8(4)[8],KF8(4)[8],KG8(4)[8], KI8(4)[8],KJ8(4)[8],KK8(4)[8],KM8(4)[8],KN8(4)[8],KO8(4)[8],KQ8(4)[8],KR8(4)[8],KS8(4)[8], @@ -1566,10 +1571,10 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KP2XX(4)[8],=KP3JOS(4)[8],=KP3VA/M(4)[8],=KP4CI(4)[8],=KP4GE/9(4)[8],=KP4SL(4)[8],=KP4WG(4)[8], =NH2W(4)[8],=NH2W/9(4)[8],=NH6R(4)[8],=NH7TK(4)[8],=NL7CM(4)[8],=NL7KD(4)[8],=NL7NK(4)[8], =NL7QC(4)[8],=NL7QC/9(4)[8],=NL7RC(4)[8],=NL7UH(4)[8],=NL7YI(4)[8],=NP2AV(4)[8],=NP2GM(4)[8], - =NP2L/9(4)[8],=NP2MU(4)[8],=NP3QC(4)[8],=NP4ZI(4)[8],=WH0AI(4)[8],=WH2T(4)[8],=WH6FBA(4)[8], - =WH6SB(4)[8],=WL7AHP(4)[8],=WL7AIT(4)[8],=WL7BEV(4)[8],=WL7CTA(4)[8],=WL7FJ(4)[8],=WL7JAN(4)[8], - =WL7NP(4)[8],=WL7UU(4)[8],=WP2B(4)[8],=WP4JSP(4)[8],=WP4KGF(4)[8],=WP4LKY(4)[8],=WP4LSQ(4)[8], - =WP4MQX(4)[8],=WP4MSD(4)[8],=WP4MTN(4)[8],=WP4MVQ(4)[8],=WP4MYL(4)[8],=WP4OCZ(4)[8], + =NP2L/9(4)[8],=NP2MU(4)[8],=NP3QC(4)[8],=NP4ZI(4)[8],=WH0AI(4)[8],=WH2T(4)[8],=WH6ERQ(4)[8], + =WH6FBA(4)[8],=WH6SB(4)[8],=WL7AHP(4)[8],=WL7AIT(4)[8],=WL7BEV(4)[8],=WL7CTA(4)[8],=WL7FJ(4)[8], + =WL7JAN(4)[8],=WL7NP(4)[8],=WL7UU(4)[8],=WP2B(4)[8],=WP4JSP(4)[8],=WP4KGF(4)[8],=WP4LKY(4)[8], + =WP4LSQ(4)[8],=WP4MQX(4)[8],=WP4MSD(4)[8],=WP4MTN(4)[8],=WP4MVQ(4)[8],=WP4MYL(4)[8],=WP4OCZ(4)[8], =AH2BG(4)[8],=AH6ES(4)[8],=AH6FF(4)[8],=AH6HR(4)[8],=AH6HR/4(4)[8],=AH6KB(4)[8],=AL0P(4)[8], =AL2C(4)[8],=AL2F(4)[8],=AL2F/4(4)[8],=AL4B(4)[8],=AL7CX(4)[8],=AL7EU(4)[8],=AL7KN(4)[8], =AL7MR(4)[8],=AL7QO(4)[8],=KH0UN(4)[8],=KH2AR(4)[8],=KH2AR/4(4)[8],=KH2DN(4)[8],=KH4AF(4)[8], @@ -1577,19 +1582,20 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KH6SKY/4(4)[8],=KH7JM(4)[8],=KH7UB(4)[8],=KL0AH(4)[8],=KL0BX(4)[8],=KL0CP(4)[8],=KL0ET(4)[8], =KL0ET/M(4)[8],=KL0EY(4)[8],=KL0FF(4)[8],=KL0GI(4)[8],=KL0LN(4)[8],=KL0PM(4)[8],=KL0VH(4)[8], =KL1DN(4)[8],=KL1IG(4)[8],=KL1LV(4)[8],=KL1SE(4)[8],=KL1SE/4(4)[8],=KL1ZA(4)[8],=KL2GB(4)[8], - =KL2HK(4)[8],=KL2LK(4)[8],=KL2LU(4)[8],=KL2MU(4)[8],=KL2UC(4)[8],=KL3PG(4)[8],=KL4KA(4)[8], - =KL7DT/4(4)[8],=KL7FO/P(4)[8],=KL7GN/M(4)[8],=KL7IUQ(4)[8],=KL7JKC(4)[8],=KL7LT(4)[8], - =KL7WW(4)[8],=KL7YN(4)[8],=KL7YT(4)[8],=KL9MEK(4)[8],=KP3RC(4)[8],=KP4TOM(4)[8],=NH2E(4)[8], - =NH6T/4(4)[8],=NH7FK(4)[8],=NH7FL(4)[8],=NH7H(4)[8],=NL7OE(4)[8],=NL7YU(4)[8],=NP3FB(4)[8], - =NP4AC(4)[8],=NP4AC/4(4)[8],=WH6AUL(4)[8],=WH6BPL(4)[8],=WH6BPL/4(4)[8],=WH6DM(4)[8], - =WH6EOG(4)[8],=WH6FEJ(4)[8],=WH6LAK(4)[8],=WL4B(4)[8],=WL7BHI(4)[8],=WL7BHJ(4)[8],=WL7CQH(4)[8], - =WL7CQK(4)[8],=WL7IP(4)[8],=WL7PC(4)[8],=WL7SF(4)[8],=WL7TD(4)[8],=WL7XZ(4)[8],=WP4CNA(4)[8], + =KL2HK(4)[8],=KL2LK(4)[8],=KL2LU(4)[8],=KL2MU(4)[8],=KL2UC(4)[8],=KL3PG(4)[8],=KL3PV(4)[8], + =KL4KA(4)[8],=KL7DT/4(4)[8],=KL7FO/P(4)[8],=KL7GN/M(4)[8],=KL7IUQ(4)[8],=KL7JKC(4)[8], + =KL7LT(4)[8],=KL7WW(4)[8],=KL7YN(4)[8],=KL7YT(4)[8],=KL9MEK(4)[8],=KP3RC(4)[8],=KP4TOM(4)[8], + =NH2E(4)[8],=NH6T/4(4)[8],=NH7FK(4)[8],=NH7FL(4)[8],=NH7H(4)[8],=NL7OE(4)[8],=NL7YU(4)[8], + =NP3FB(4)[8],=NP4AC(4)[8],=NP4AC/4(4)[8],=WH6AUL(4)[8],=WH6BPL(4)[8],=WH6BPL/4(4)[8],=WH6DM(4)[8], + =WH6EOG(4)[8],=WH6EQW(4)[8],=WH6FEJ(4)[8],=WH6LAK(4)[8],=WL4B(4)[8],=WL7BHI(4)[8],=WL7BHJ(4)[8], + =WL7CQH(4)[8],=WL7CQK(4)[8],=WL7IP(4)[8],=WL7PC(4)[8],=WL7SF(4)[8],=WL7TD(4)[8],=WL7XZ(4)[8], + =WP4CNA(4)[8], =AL7AU(4)[7],=AL7NI(4)[7],=AL7RT(4)[7],=AL7RT/7(4)[7],=KH2BR/7(4)[7],=KH6JVF(4)[7],=KH6OZ(4)[7], - =KH7SS(4)[7],=KL0NT(4)[7],=KL0NV(4)[7],=KL0RN(4)[7],=KL1HE(4)[7],=KL1MW(4)[7],=KL1TV(4)[7], - =KL2NZ(4)[7],=KL7AR(4)[7],=KL7HF(4)[7],=KL7JGS(4)[7],=KL7JGS/M(4)[7],=KL7JM(4)[7],=KL7LH(4)[7], - =KL7MVX(4)[7],=KL7YY/7(4)[7],=KL9A(4)[7],=KL9A/7(4)[7],=NH0E(4)[7],=NH6HW(4)[7],=NL7IH(4)[7], - =NL7MW(4)[7],=WH2M(4)[7],=WH6COM(4)[7],=WH6ETU(4)[7],=WH6EVP(4)[7],=WL7A(4)[7],=WL7DP(4)[7], - =WL7HP/7(4)[7],=WL7I(4)[7], + =KH7SS(4)[7],=KL0NT(4)[7],=KL0NV(4)[7],=KL0RN(4)[7],=KL0TF(4)[7],=KL1HE(4)[7],=KL1MW(4)[7], + =KL1TV(4)[7],=KL2NZ(4)[7],=KL4CZ(4)[7],=KL7AR(4)[7],=KL7HF(4)[7],=KL7JGS(4)[7],=KL7JGS/M(4)[7], + =KL7JM(4)[7],=KL7JUL(4)[7],=KL7LH(4)[7],=KL7MVX(4)[7],=KL7YY/7(4)[7],=KL9A(4)[7],=KL9A/7(4)[7], + =NH0E(4)[7],=NH6HW(4)[7],=NL7IH(4)[7],=NL7MW(4)[7],=WH2M(4)[7],=WH6COM(4)[7],=WH6ETU(4)[7], + =WH6EVP(4)[7],=WL7A(4)[7],=WL7DP(4)[7],=WL7HP/7(4)[7],=WL7I(4)[7], =AL7LU(5)[8],=KL7JFR(5)[8],=WL7HC(5)[8],=WP4GR(5)[8]; Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: KG4,=KG44WW,=KG4AC,=KG4AS,=KG4AW,=KG4AY,=KG4BP,=KG4DY,=KG4EM,=KG4EU,=KG4HF,=KG4HH,=KG4LA,=KG4LB, @@ -1598,15 +1604,16 @@ Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: AH0,KH0,NH0,WH0,=AB2HV,=AB2QH,=AB9HF,=AB9OQ,=AC8CP,=AD5KT,=AD6YP,=AE6OG,=AF4IN,=AF4KH,=AF6EO, =AH2U,=AJ6K,=AK1JA,=K0FRI,=K8KH,=K8RN,=KB5UAB,=KB9LQG,=KC2WIK,=KC5SPG,=KC7SDC,=KC9GQX,=KD7GJX, =KG2QH,=KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O,=KH2VL,=KL7QOL,=KW2X,=N0J,=N3QD,=N6EAX,=N7NVX, - =N8CS,=NA1M,=NH2B,=NH2FG,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; + =N8CS,=NA1M,=NH2B,=NH2FG,=NO3V,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; Baker & Howland Islands: 31: 61: OC: 0.00: 176.00: 12.0: KH1: AH1,KH1,NH1,WH1; Guam: 27: 64: OC: 13.37: -144.70: -10.0: KH2: - AH2,KH2,NH2,WH2,=AB2AB,=AB8EW,=AC0FG,=AE6QZ,=AH0AX,=AH0F,=AH0FM,=AH0S,=AI6ID,=K1IWD,=K2QGC,=K5GUA, - =K5GUM,=KA0RU,=KA6BEG,=KB5OXR,=KB7OVT,=KB7PQU,=KC2OOX,=KD7IRV,=KE4YSP,=KE6ATM,=KE7GMC,=KE7IPG, - =KF4UFC,=KF5ULC,=KF7BMU,=KG4BKW,=KG6AGT,=KG6ARL,=KG6DX,=KG6FJG,=KG6JDX,=KG6JKR,=KG6JKT,=KG6TWZ, - =KH0C,=KH0DX,=KH0ES,=KH0TF,=KH0UM,=KH6KK,=KI4KKH,=KI4KKI,=KI7SSW,=KJ6KCJ,=KK6GVF,=KK7AV,=KM4NVB, - =N2MI,=NH0A,=NH0B,=NH7TL,=NH7WC,=NP3EZ,=W5LFA,=W6KV,=W7GVC,=W9MRE,=WA3KNB,=WB7AXZ,=WD6DGS,=WH0AC; + AH2,KH2,NH2,WH2,=AB2AB,=AB8EW,=AC0FG,=AC7WL,=AE6QZ,=AH0AX,=AH0F,=AH0FM,=AH0S,=AI6ID,=AJ6JF,=K1IWD, + =K2QGC,=K5GUA,=K5GUM,=KA0RU,=KA1I,=KA6BEG,=KB5OXR,=KB7OVT,=KB7PQU,=KC2OOX,=KD7IRV,=KE4YSP,=KE6ATM, + =KE7GMC,=KE7IPG,=KF4UFC,=KF5ULC,=KF7BMU,=KG4BKW,=KG6AGT,=KG6ARL,=KG6DX,=KG6FJG,=KG6JDX,=KG6JKR, + =KG6JKT,=KG6TWZ,=KH0C,=KH0DX,=KH0ES,=KH0TF,=KH0UM,=KH6KK,=KI4KKH,=KI4KKI,=KI7SSW,=KJ6KCJ,=KK6GVF, + =KK7AV,=KM4NVB,=N2MI,=NH0A,=NH0B,=NH0Q,=NH7TL,=NH7WC,=NP3EZ,=W5LFA,=W6KV,=W7GVC,=W9MRE,=WA3KNB, + =WB7AXZ,=WD6DGS,=WH0AC; Johnston Island: 31: 61: OC: 16.72: 169.53: 10.0: KH3: AH3,KH3,NH3,WH3,=KJ6BZ; Midway Island: 31: 61: OC: 28.20: 177.37: 11.0: KH4: @@ -1615,10 +1622,10 @@ Palmyra & Jarvis Islands: 31: 61: OC: 5.87: 162.07: 11.0: KH5: AH5,KH5,NH5,WH5; Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,=AA7LE,=AA8JA,=AB0JM,=AB3WS,=AB6AP,=AB8VQ,=AC4PJ,=AC4TJ,=AC7LR, - =AC7N,=AC9PT,=AE3TT,=AE5AB,=AE5LR,=AG4FH,=AH0A,=AH0AG,=AH2CN,=AJ0M,=AJ6JF,=AJ8HT,=AK0P,=AK2J, - =AL3U,=AL7RQ,=K0BAD,=K0LAS,=K0LIH,=K0LUC,=K0OUS,=K1ENT,=K1HZM,=K1OSP,=K1OWL,=K1RJ,=K1VAN,=K2FFT, - =K2GT,=K3NW,=K3QHP,=K3UNS,=K4EVR,=K4RAC,=K4UAI,=K4UHL,=K4XS,=K4XSS,=K4XV,=K5HQM,=K5UN,=K5ZAI, - =K5ZYO,=K6AMA,=K6APP,=K6ATF,=K6CEE,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ALH,=K7ASH, + =AC7N,=AC9PT,=AE3TT,=AE5AB,=AE5LR,=AG4FH,=AH0A,=AH0AG,=AH2CN,=AJ0M,=AJ8HT,=AK0P,=AK2J,=AL3U, + =AL7RQ,=K0BAD,=K0LAS,=K0LIH,=K0LUC,=K0OUS,=K1ENT,=K1HZM,=K1OSP,=K1OWL,=K1RJ,=K1VAN,=K2FFT,=K2GT, + =K3NW,=K3QHP,=K3UNS,=K4EVR,=K4RAC,=K4UAI,=K4UHL,=K4XS,=K4XSS,=K4XV,=K5HQM,=K5UN,=K5ZAI,=K5ZYO, + =K6AMA,=K6APP,=K6ATF,=K6BU,=K6CEE,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ALH,=K7ASH, =K7FAR,=K7FR,=K7NRJ,=K7QAS,=K8EUT,=K9AGI,=K9FD,=K9UBS,=KA0FOR,=KA0VHP,=KA1ICJ,=KA1YJ,=KA2IXG, =KA2WXU,=KA3HIZ,=KA3TUA,=KA4INK,=KA6QOD,=KA7APU,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR,=KB0PXK, =KB0ZKZ,=KB1EUJ,=KB1GC,=KB1PCX,=KB1UHL,=KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV,=KB4NGN, @@ -1629,31 +1636,32 @@ Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: =KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG,=KC7USA,=KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI,=KC8EJ, =KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ,=KD0QLR,=KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ,=KD4GW, =KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX,=KD5TBQ,=KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX,=KD6LRA, - =KD6VTU,=KD7GWM,=KD7HTG,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ,=KD7UV,=KD7UZG,=KD7WJM,=KD8GVO,=KE0TU, - =KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM,=KE5UZN,=KE6AXN,=KE6AXP,=KE6AYZ,=KE6CQE, - =KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ,=KE7FJA,=KE7FSK,=KE7HEW,=KE7IZS,=KE7JTX, - =KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT,=KE7UAJ,=KE7UV,=KE7UW,=KF4DWA,=KF4FQR, - =KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ,=KF5MXM,=KF5MXP,=KF6BS,=KF6FDG,=KF6IVV, - =KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD,=KF6RLP,=KF6YZR,=KF6ZAL,=KF6ZVS,=KF7GNP, - =KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC,=KG4SGV,=KG6DV,=KG6EFD,=KG6HRX, - =KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI,=KG6SDD,=KG6TFI,=KG6WZD,=KG7AYU, - =KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE,=KH2YI,=KH3AE,=KH3AE/M,=KH3AF, - =KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ,=KI6EFY,=KI6FTE,=KI6HBZ,=KI6JEC, - =KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV,=KI7EZG,=KI7FJW,=KI7FJX,=KI7FUT, - =KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW,=KJ6LAX,=KJ6LBI,=KJ6NZH,=KJ6QQT, - =KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX,=KK6PGA,=KK6QAI,=KK6VJN,=KK6ZQ, - =KK6ZZE,=KK7WR,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM,=KN6BE,=KN6ZU,=KN8AQR,=KO6KW, - =KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0PJV,=N0RMC,=N0ZSJ,=N1CBF,=N1CFD,=N1CNQ, - =N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ,=N3DJT,=N3FUR,=N3GWR,=N3HQW,=N3RWD, - =N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW,=N6GOZ,=N6IKX,=N6KB,=N6NCT,=N6PJQ, - =N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX,=N9CRQ,=N9GFL,=N9SBL,=NB6R,=NE7SO, - =NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II,=NH2IJ,=NH2IO,=NH2JO,=NH2KF,=NH2KH, - =NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F,=W0UNX,=W1BMB,=W2UNS,=W3ZRT,=W4YQS, - =W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ,=W6NBK,=W6ROM,=W6SHH,=W6UNX,=W7EHP, - =W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=WA0FUR,=WA0NHD,=WA2AUI,=WA3ZEM,=WA6ECX, - =WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE,=WA7ZK,=WA8JQP,=WB0RUA,=WB0TZQ, - =WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PIO,=WB6PJT,=WB6SAA,=WB8NCD,=WB9SMM, - =WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K,=WU0H,=WV0Z,=WV6K,=WX7G,=WY6F; + =KD6NVX,=KD6VTU,=KD7GWM,=KD7HTG,=KD7KFT,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ,=KD7UV,=KD7UZG,=KD7WJM, + =KD8GVO,=KE0TU,=KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM,=KE5UZN,=KE6AXN,=KE6AXP, + =KE6AYZ,=KE6CQE,=KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ,=KE7FJA,=KE7FSK,=KE7HEW, + =KE7IZS,=KE7JTX,=KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT,=KE7UAJ,=KE7UV,=KE7UW, + =KF4DWA,=KF4FQR,=KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ,=KF5MXM,=KF5MXP,=KF6BS, + =KF6FDG,=KF6IVV,=KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD,=KF6RLP,=KF6YZR,=KF6ZAL, + =KF6ZVS,=KF7GNP,=KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC,=KG4SGV,=KG6DV, + =KG6EFD,=KG6HRX,=KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI,=KG6SDD,=KG6TFI, + =KG6WZD,=KG7AYU,=KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE,=KH2YI,=KH3AE, + =KH3AE/M,=KH3AF,=KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ,=KI6EFY,=KI6FTE, + =KI6HBZ,=KI6JEC,=KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV,=KI7EZG,=KI7FJW, + =KI7FJX,=KI7FUT,=KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW,=KJ6LAX,=KJ6LBI, + =KJ6NZH,=KJ6QQT,=KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX,=KK6PGA,=KK6QAI, + =KK6RM,=KK6VJN,=KK6ZQ,=KK6ZZE,=KK7WR,=KL0TK,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM, + =KN6BE,=KN6ZU,=KN8AQR,=KO6KW,=KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0KXY,=N0PJV, + =N0RMC,=N0ZSJ,=N1CBF,=N1CFD,=N1CNQ,=N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ, + =N3DJT,=N3FUR,=N3GWR,=N3HQW,=N3RWD,=N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW, + =N6GOZ,=N6IKX,=N6KB,=N6NCT,=N6PJQ,=N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX, + =N9CRQ,=N9GFL,=N9SBL,=NB6R,=NE7SO,=NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II, + =NH2IJ,=NH2IO,=NH2JO,=NH2KF,=NH2KH,=NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F, + =W0UNX,=W1BMB,=W2UNS,=W3ZRT,=W4YQS,=W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ, + =W6NBK,=W6ROM,=W6SHH,=W6UNX,=W7EHP,=W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=WA0FUR, + =WA0NHD,=WA2AUI,=WA3ZEM,=WA6ECX,=WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE, + =WA7ZK,=WA8JQP,=WB0RUA,=WB0TZQ,=WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PIO, + =WB6PJT,=WB6SAA,=WB8NCD,=WB9SMM,=WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K, + =WU0H,=WV0Z,=WV6K,=WX7G,=WY6F; Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K: AH7K,KH7K,NH7K,WH7K; American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8: @@ -1666,8 +1674,8 @@ Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: AL,KL,NL,WL,=AA0NN,=AA8FY,=AB0IC,=AB0WK,=AB5JB,=AB7YB,=AB7YO,=AB8XX,=AB9OM,=AC0CW,=AC9QX,=AD0DK, =AD0FQ,=AD0ZL,=AD3BJ,=AD6GC,=AD7MF,=AD7VV,=AE1DJ,=AE4QH,=AE5CP,=AE5EX,=AE5FN,=AE5IR,=AE7ES,=AE7KS, =AE7SB,=AF7FV,=AG5LN,=AG5OF,=AH0AH,=AH0H,=AJ4ZI,=K0AZZ,=K0BHC,=K1BZD,=K1KAO,=K1MAT,=K2ICW,=K2NPS, - =K3JMI,=K4DRC,=K4ETC,=K4HOE,=K4RND,=K4WPK,=K5DOW,=K5HL,=K5RD,=K5RSO,=K5RZW,=K5TDN,=K5UBS,=K6ANE, - =K6GKW,=K7EJM,=K7GRW,=K7LOP,=K7MVX,=K7OCL,=K7RDR,=K7SGA,=K7UNX,=K7ZOA,=K8IEL,=K8OUA,=K9DUG,=K9WUV, + =K3JMI,=K4DRC,=K4ETC,=K4HOE,=K4RND,=K4WPK,=K5DOW,=K5HL,=K5RD,=K5RSO,=K5RZW,=K5TDN,=K6ANE,=K6GKW, + =K7EJM,=K7GRW,=K7LOP,=K7MVX,=K7OCL,=K7RDR,=K7SGA,=K7UNX,=K7ZOA,=K8IEL,=K8OUA,=K9DUG,=K9WUV, =KA0SIM,=KA0YPV,=KA1NCN,=KA2TJZ,=KA2ZSD,=KA6UGT,=KA7ETQ,=KA7HOX,=KA7JOR,=KA7TMU,=KA7TOM,=KA7UKN, =KA7VCR,=KA7YEY,=KA9GYQ,=KB0APK,=KB0LOW,=KB0TSU,=KB0UGE,=KB0UVK,=KB1CRT,=KB1FCX,=KB1KLH,=KB1PHP, =KB1QCD,=KB1QCE,=KB1SYV,=KB1WQL,=KB2JWV,=KB2ZME,=KB3CYB,=KB3JFK,=KB3NCR,=KB3VQE,=KB4DX,=KB5DNT, @@ -1688,49 +1696,49 @@ Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: =KE6DLM,=KE6DUJ,=KE6DXH,=KE6IPM,=KE6SYD,=KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL,=KE7EOP,=KE7EPZ,=KE7FNC, =KE7FXM,=KE7GOE,=KE7HMJ,=KE7KYU,=KE7TRX,=KE8RO,=KF4JET,=KF4PLR,=KF4TBD,=KF4YFD,=KF5CVM,=KF5FJQ, =KF5HFB,=KF5HJC,=KF5NDT,=KF5NHR,=KF5YYK,=KF6AWG,=KF6AXS,=KF6BMF,=KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO, - =KF6ILC,=KF6IOT,=KF6LGK,=KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7GKY,=KF7LEX, - =KF7LUA,=KF7PCJ,=KF7PFT,=KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P,=KG4TJS, - =KG4WNZ,=KG5EQN,=KG5GDF,=KG5GTD,=KG5JQC,=KG5MIB,=KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL,=KG7CUR,=KG7DVI, - =KG7GJL,=KG7JVJ,=KG7OQC,=KG7SEQ,=KG7TGE,=KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA,=KI4COG,=KI4ERC, - =KI4GAG,=KI4GCF,=KI4GDI,=KI4NGY,=KI4NVI,=KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW,=KI6YXZ,=KI7COR, - =KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ,=KJ4PSV,=KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6KRG,=KJ6ZSX,=KJ7IR,=KK4AMV, - =KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG,=KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I,=KK7IV,=KK7STL,=KL7D/M, - =KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX,=KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KN8IVE,=KR4WV,=KV3X,=KW1W,=KY7J, - =KZ6HJC,=N0GDT,=N0GDU,=N0GLI,=N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN,=N0SUB,=N0WXJ,=N0XKY,=N0XS, - =N0ZKV,=N1HEN,=N1HUT,=N1KDQ,=N1KTI,=N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH,=N2SHO,=N2TJY,=N2YZW,=N3QEH, - =N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV,=N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV,=N6CZU,=N6JM,=N7BUO,=N7DBN, - =N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX,=N7MGT,=N7MTG,=N7PHB,=N7QAN,=N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY, - =N7YQS,=N7ZYS,=N8DDY,=N8EX,=N8JKB,=N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD,=NA7WM,=NC4OI,=NE7EK,=NH2GZ, - =NH7UO,=NJ7H,=NM0H,=NN4NN,=NP4FU,=NW4G,=NW7F,=W0EZM,=W0FJN,=W0RWS,=W0UZJ,=W1LYD,=W1RSC,=W1ZKA, - =W2DLS,=W2KRZ,=W3JPN,=W4AUL,=W4BMR,=W4LS,=W4RSB,=W5JKT,=W6DDP,=W6GTE,=W6ROW,=W7APM,=W7DDG,=W7EIK, - =W7JMR,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT,=W8MDD,=W8PVZ,=W8TCX,=W9ITU,=W9JMC,=WA0JS,=WA1FVJ, - =WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX,=WA7YXF,=WB0CMZ,=WB1GZL,=WB1ILS,=WB6COP,=WB7TYK, - =WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK,=WJ8M,=WP4IYI,=WT5T,=WX1NCC; + =KF6ILC,=KF6IOT,=KF6LGK,=KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7CXJ,=KF7GKY, + =KF7LEX,=KF7LUA,=KF7PCJ,=KF7PFT,=KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P, + =KG4TJS,=KG4WNZ,=KG5EQN,=KG5GDF,=KG5GTD,=KG5JQC,=KG5MIB,=KG5MIO,=KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL, + =KG7CUR,=KG7DVI,=KG7GJL,=KG7JVJ,=KG7OQC,=KG7SEQ,=KG7TGE,=KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA, + =KI4COG,=KI4ERC,=KI4GAG,=KI4GCF,=KI4GDI,=KI4NGY,=KI4NVI,=KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW, + =KI6YXZ,=KI7COR,=KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ,=KJ4PSV,=KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6DCH,=KJ6KRG, + =KJ6ZSX,=KJ7IR,=KK4AMV,=KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG,=KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I, + =KK7IV,=KK7STL,=KL7D/M,=KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX,=KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KN8IVE, + =KR4WV,=KV3X,=KW1W,=KY7J,=KZ6HJC,=N0GDT,=N0GDU,=N0GLI,=N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN, + =N0SUB,=N0WXJ,=N0XKY,=N0XS,=N0ZKV,=N1HEN,=N1HUT,=N1KDQ,=N1KTI,=N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH, + =N2SHO,=N2TJY,=N2YZW,=N3QEH,=N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV,=N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV, + =N6CZU,=N6JM,=N6ZZX,=N7BUO,=N7DBN,=N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX,=N7MGT,=N7MTG,=N7PHB,=N7QAN, + =N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY,=N7YQS,=N8DDY,=N8EX,=N8JKB,=N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD, + =NA7WM,=NC4OI,=NE7EK,=NH2GZ,=NH7UO,=NJ7H,=NM0H,=NN4NN,=NP4FU,=NW4G,=NW7F,=W0EZM,=W0FJN,=W0RWS, + =W0UZJ,=W1LYD,=W1RSC,=W1ZKA,=W2DLS,=W2KRZ,=W3JPN,=W3MKG,=W4AUL,=W4BMR,=W4RSB,=W5JKT,=W6DDP,=W6GTE, + =W6ROW,=W7APM,=W7DDG,=W7EIK,=W7JMR,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT,=W8MDD,=W8PVZ,=W8TCX,=W9ITU, + =W9JMC,=WA0JS,=WA1FVJ,=WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX,=WA7YXF,=WB0CMZ,=WB1GZL, + =WB1ILS,=WB6COP,=WB7TYK,=WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK,=WJ8M,=WP4IYI,=WT5T,=WX1NCC; Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: KP1,NP1,WP1; US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: KP2,NP2,WP2,=AC7FX,=AJ2O,=K5KFL,=K5TP,=K8RF,=KA7KDU,=KB1MDZ,=KB1ZTY,=KB3ZUD,=KB9ALR,=KC9MCN, - =KD4SGB,=KD5QJN,=KF2HC,=KF4CGR,=KF4MSI,=KG4SZC,=KG5KHO,=KH2XQ,=KH2XR,=KI4FOE,=KI6BLD,=KJ6IR, - =KL7NZ,=KR7O/R,=KV4/W2KW,=KV4AD,=KV4BA,=KV4BT,=KV4BW,=KV4CF,=KV4CQ/P,=KV4DN,=KV4EY,=KV4FZ,=KV4HR, - =KV4IH,=KV4JC,=KV4KW,=N1TKK,=N1VKI,=W0AIH/KV4,=W0YNY,=W2AZK,=W2KW/KV4,=W3K/KD2CLB,=W4LIS,=WA4HLB, - =WB2KQW,=WB4WFU,=WD8AHQ,=WI7C; + =KD4SGB,=KD5QJN,=KF2HC,=KF4CGR,=KF4MSI,=KG4SZC,=KG5KHO,=KG6KVR,=KH2XQ,=KH2XR,=KI4FOE,=KI6BLD, + =KJ6IR,=KL7NZ,=KR7O/R,=KV4/W2KW,=KV4AD,=KV4BA,=KV4BT,=KV4BW,=KV4CF,=KV4CQ/P,=KV4DN,=KV4EY,=KV4FZ, + =KV4HR,=KV4IH,=KV4JC,=KV4KW,=N1TKK,=N1VKI,=W0AIH/KV4,=W0YNY,=W2AZK,=W2KW/KV4,=W3K/KD2CLB,=W4LIS, + =WA4HLB,=WB2KQW,=WB4WFU,=WD8AHQ,=WI7C; Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: - KP3,KP4,NP3,NP4,WP3,WP4,=AA0WX,=AA2ZN,=AB2DR,=AF4OU,=AF5IZ,=AG4CD,=AI4EZ,=K1NDN,=K4C/LH,=K4PFH, - =K5YJR,=K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA3ZGQ,=KA7URH,=KA9UTY,=KB0AQB,=KB0TEP,=KB1IJU, - =KB1KDP,=KB1RUQ,=KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX,=KB2NMT,=KB2NYN, - =KB2OIF,=KB2OMN,=KB2OPM,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK,=KB3BTN,=KB3LUV,=KB3SBO, - =KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO,=KC1JLY,=KC1KZI, - =KC2BZZ,=KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC2VCR,=KC3GEO,=KC5DKT, - =KC8BFN,=KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KE0AYJ,=KE0GFK,=KE0SH,=KE1MA, - =KE3WW,=KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO,=KF4ZDB,=KF6OGJ,=KG4GYO,=KG4IRC, - =KG4IVO,=KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB,=KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ, - =KK4DCX,=KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW,=KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD, - =KN4IDV,=KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT,=KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ, - =KN4REC,=KN4SKZ,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT,=KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT, - =KP4ES/LH,=KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH,=N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD, - =N1SZM,=N1VCW,=N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM,=N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER, - =N4UK,=N6NVD,=N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR,=W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF, - =WB7ADC,=WB7VVV,=WD4LOL,=WP4L/TP,=WR8Z; + KP3,KP4,NP3,NP4,WP3,WP4,=AA0WX,=AA2ZN,=AB2DR,=AF4OU,=AF5IZ,=AG4CD,=AI4EZ,=K1NDN,=K4C/LH,=K4LCR, + =K4PFH,=K5YJR,=K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA3ZGQ,=KA7URH,=KA9UTY,=KB0AQB,=KB0TEP, + =KB1IJU,=KB1KDP,=KB1RUQ,=KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX,=KB2NMT, + =KB2NYN,=KB2OIF,=KB2OMN,=KB2OPM,=KB2QQK,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK,=KB3BTN, + =KB3LUV,=KB3SBO,=KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO, + =KC1JLY,=KC1KZI,=KC2BZZ,=KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC2VCR, + =KC3GEO,=KC5DKT,=KC8BFN,=KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KD9MRY,=KE0AYJ, + =KE0GFK,=KE0SH,=KE1MA,=KE3WW,=KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO,=KF4ZDB, + =KF6OGJ,=KG4GYO,=KG4IRC,=KG4IVO,=KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB,=KJ4KZN, + =KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ,=KK4DCX,=KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW, + =KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD,=KN4IDV,=KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT, + =KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ,=KN4REC,=KN4SKZ,=KN4TNC,=KN4UAN,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT, + =KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT,=KP4ES/LH,=KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH, + =N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD,=N1SZM,=N1VCW,=N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM, + =N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER,=N4UK,=N6NVD,=N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR, + =W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF,=WB7ADC,=WB7VVV,=WD4LOL,=WP4L/TP,=WR8Z; Desecheo Island: 08: 11: NA: 18.08: 67.88: 4.0: KP5: KP5,NP5,WP5; Norway: 14: 18: EU: 61.00: -9.00: -1.0: LA: @@ -1765,41 +1773,41 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LU3DLF/D,=LU3DMZ/D,=LU3DO/D,=LU3DOC/D,=LU3DP/D,=LU3DPH/D,=LU3DQJ/D,=LU3DR/D,=LU3DRP/D,=LU3DRP/E, =LU3DXG/D,=LU3DXI/D,=LU3DY/D,=LU3DYN/D,=LU3DZO/D,=LU3EBS/D,=LU3ED/D,=LU3EDU/D,=LU3EFL/D,=LU3EJ/L, =LU3EJD/D,=LU3ELR/D,=LU3EMB/D,=LU3EOU/D,=LU3EP/D,=LU3ERU/D,=LU3ES/D,=LU3ESY/D,=LU3EZA/D,=LU3FCI/D, - =LU3HKA/D,=LU4AA/D,=LU4AAO/D,=LU4AAO/E,=LU4ACA/D,=LU4AJC/D,=LU4BAN/D,=LU4BR/D,=LU4CMF/D,=LU4DBL/D, - =LU4DBP/D,=LU4DBT/D,=LU4DBV/D,=LU4DCE/D,=LU4DCY/D,=LU4DGC/D,=LU4DHA/D,=LU4DHC/D,=LU4DHE/D, - =LU4DIS/D,=LU4DK/D,=LU4DLJ/D,=LU4DLL/D,=LU4DLN/D,=LU4DMI/D,=LU4DPB/D,=LU4DQ/D,=LU4DRC/D,=LU4DRH/D, - =LU4DRH/E,=LU4DVD/D,=LU4EAE/D,=LU4EET/D,=LU4EGP/D,=LU4EHP/D,=LU4EJ/D,=LU4EL/D,=LU4ELE/D,=LU4EOU/D, - =LU4ERS/D,=LU4ESP/D,=LU4ETD/D,=LU4ETN/D,=LU4EV/D,=LU4HSA/D,=LU4HTD/D,=LU4MA/D,=LU4UWZ/D,=LU4UZW/D, - =LU4VEN/D,=LU4VSD/D,=LU4WAP/D,=LU5AHN/D,=LU5ALS/D,=LU5AM/D,=LU5ANL/D,=LU5AQV/D,=LU5ARS/D, - =LU5ASA/D,=LU5AVD/D,=LU5BDS/D,=LU5BE/D,=LU5BTL/D,=LU5CBA/D,=LU5CRE/D,=LU5DA/D,=LU5DA/E,=LU5DAS/D, - =LU5DCO/D,=LU5DDH/D,=LU5DEM/D,=LU5DF/D,=LU5DFR/D,=LU5DFT/D,=LU5DGG/D,=LU5DGR/D,=LU5DHE/D, - =LU5DIT/D,=LU5DJE/D,=LU5DKE/D,=LU5DLH/D,=LU5DLT/D,=LU5DLZ/D,=LU5DMI/D,=LU5DMP/D,=LU5DMR/D, - =LU5DQ/D,=LU5DRV/D,=LU5DSH/D,=LU5DSM/D,=LU5DT/D,=LU5DTB/D,=LU5DTF/D,=LU5DUC/D,=LU5DVB/D,=LU5DWS/D, - =LU5DYT/D,=LU5EAO/D,=LU5EC/D,=LU5ED/D,=LU5EDS/D,=LU5EFG/D,=LU5EH/D,=LU5EHC/D,=LU5EJL/D,=LU5EM/D, - =LU5EP/D,=LU5EW/D,=LU5FZ/D,=LU5FZ/E,=LU5JAH/D,=LU5JIB/D,=LU5OD/D,=LU5VAS/D,=LU5VAT/D,=LU5XP/D, - =LU6AER/D,=LU6CN/D,=LU6DAX/D,=LU6DBL/D,=LU6DC/D,=LU6DCT/D,=LU6DDC/D,=LU6DG/D,=LU6DIE/D,=LU6DIO/D, - =LU6DKT/D,=LU6DL/D,=LU6DM/D,=LU6DO/D,=LU6DRD/D,=LU6DRD/E,=LU6DRN/D,=LU6DRR/D,=LU6DSA/D,=LU6DTB/D, - =LU6EAG/D,=LU6EC/D,=LU6EDC/D,=LU6EE/D,=LU6EEG/D,=LU6EGO/D,=LU6EI/D,=LU6EJJ/D,=LU6EKL/D,=LU6ELP/D, - =LU6EMM/D,=LU6ENA/D,=LU6EPE/D,=LU6EPR/D,=LU6EPR/E,=LU6EQV/D,=LU6EU/D,=LU6EVD/D,=LU6EWR/D, - =LU6EXD/D,=LU6HBB/D,=LU6JJ/D,=LU6UAL/D,=LU6UO/D,=LU6UVI/D,=LU6XQ/D,=LU7AA/D,=LU7AC/D,=LU7ADC/D, - =LU7ADN/D,=LU7ART/D,=LU7AVW/D,=LU7BSN/D,=LU7BTO/D,=LU7BTO/E,=LU7CAW/D,=LU7CP/D,=LU7DAC/D, - =LU7DAF/D,=LU7DAR/D,=LU7DBA/D,=LU7DBL/D,=LU7DCE/D,=LU7DD/D,=LU7DDC/D,=LU7DDO/D,=LU7DHG/D, - =LU7DJH/D,=LU7DLN/D,=LU7DNM/D,=LU7DOT/D,=LU7DP/D,=LU7DR/D,=LU7DS/D,=LU7DSC/D,=LU7DSS/D,=LU7DSU/D, - =LU7DSY/D,=LU7DTC/D,=LU7DZL/D,=LU7DZL/E,=LU7DZV/D,=LU7ECZ/D,=LU7EGY/D,=LU7EHL/D,=LU7EIA/D, - =LU7EJC/D,=LU7ELY/D,=LU7EMA/D,=LU7EMM/D,=LU7ENP/D,=LU7EO/D,=LU7EON/D,=LU7EPC/D,=LU7ETR/D, - =LU7HBL/D,=LU7HW/D,=LU7HZ/D,=LU7VCH/D,=LU8ABR/D,=LU8ACH/D,=LU8ADX/D,=LU8AE/D,=LU8ARI/D,=LU8ATM/D, - =LU8DAF/D,=LU8DCF/D,=LU8DCH/D,=LU8DCK/D,=LU8DCM/D,=LU8DIP/D,=LU8DIW/D,=LU8DJR/D,=LU8DLD/D, - =LU8DLT/D,=LU8DMD/D,=LU8DQ/D,=LU8DR/D,=LU8DRA/D,=LU8DRH/D,=LU8DRQ/D,=LU8DSJ/D,=LU8DTF/D,=LU8DUJ/D, - =LU8DVQ/D,=LU8DW/D,=LU8DWR/D,=LU8DX/D,=LU8DY/D,=LU8DZE/D,=LU8DZH/D,=LU8EAG/D,=LU8EAJ/D,=LU8EBJ/D, - =LU8EBJ/E,=LU8EBK/D,=LU8EBK/E,=LU8EC/D,=LU8ECF/D,=LU8ECF/E,=LU8EEM/D,=LU8EFF/D,=LU8EGC/D, - =LU8EGS/D,=LU8EHQ/D,=LU8EHQ/E,=LU8EHS/D,=LU8EHV/D,=LU8EKC/D,=LU8EMC/D,=LU8ERH/D,=LU8ETC/D, - =LU8EU/D,=LU8EXJ/D,=LU8EXN/D,=LU8FAU/D,=LU8VCC/D,=LU8VER/D,=LU9ACJ/D,=LU9AEA/D,=LU9AOS/D, - =LU9AUC/D,=LU9BRC/D,=LU9BSA/D,=LU9CGN/D,=LU9CLH/D,=LU9DA/D,=LU9DAA/D,=LU9DAD/D,=LU9DB/D,=LU9DE/D, - =LU9DEQ/D,=LU9DF/D,=LU9DGE/D,=LU9DKO/D,=LU9DMG/D,=LU9DO/D,=LU9DPD/D,=LU9DPI/D,=LU9DPZ/E,=LU9DSD/D, - =LU9DVO/D,=LU9EAG/D,=LU9ECE/D,=LU9EI/D,=LU9EIM/D,=LU9EJM/D,=LU9EJS/E,=LU9EJZ/D,=LU9ENH/D, - =LU9EOE/D,=LU9ERA/D,=LU9ESD/D,=LU9ESD/E,=LU9ESD/LH,=LU9EV/D,=LU9EV/E,=LU9EV/LH,=LU9EY/D,=LU9EYE/D, - =LU9EZX/D,=LU9HDR/D,=LU9HJV/D,=LU9HVR/D,=LU9USD/D,=LU9WM/D,=LV7E/D,=LW1DAL/D,=LW1DDX/D,=LW1DE/D, - =LW1DEN/D,=LW1DEW/D,=LW1DJ/D,=LW1DOG/D,=LW1DQQ/D,=LW1DVB/D,=LW1DXH/D,=LW1DXP/D,=LW1DYN/D, + =LU3HKA/D,=LU4AA/D,=LU4AAO/D,=LU4AAO/E,=LU4ACA/D,=LU4ADE/D,=LU4AJC/D,=LU4BAN/D,=LU4BR/D,=LU4CMF/D, + =LU4DBL/D,=LU4DBP/D,=LU4DBT/D,=LU4DBV/D,=LU4DCE/D,=LU4DCY/D,=LU4DGC/D,=LU4DHA/D,=LU4DHC/D, + =LU4DHE/D,=LU4DIS/D,=LU4DK/D,=LU4DLJ/D,=LU4DLL/D,=LU4DLN/D,=LU4DMI/D,=LU4DPB/D,=LU4DQ/D,=LU4DRC/D, + =LU4DRH/D,=LU4DRH/E,=LU4DVD/D,=LU4EAE/D,=LU4EET/D,=LU4EGP/D,=LU4EHP/D,=LU4EJ/D,=LU4EL/D,=LU4ELE/D, + =LU4EOU/D,=LU4ERS/D,=LU4ESP/D,=LU4ETD/D,=LU4ETN/D,=LU4EV/D,=LU4HSA/D,=LU4HTD/D,=LU4MA/D,=LU4UWZ/D, + =LU4UZW/D,=LU4VEN/D,=LU4VSD/D,=LU4WAP/D,=LU5AHN/D,=LU5ALS/D,=LU5AM/D,=LU5ANL/D,=LU5AQV/D, + =LU5ARS/D,=LU5ASA/D,=LU5AVD/D,=LU5BDS/D,=LU5BE/D,=LU5BTL/D,=LU5CBA/D,=LU5CRE/D,=LU5DA/D,=LU5DA/E, + =LU5DAS/D,=LU5DCO/D,=LU5DDH/D,=LU5DEM/D,=LU5DF/D,=LU5DFR/D,=LU5DFT/D,=LU5DGG/D,=LU5DGR/D, + =LU5DHE/D,=LU5DIT/D,=LU5DJE/D,=LU5DKE/D,=LU5DLH/D,=LU5DLT/D,=LU5DLZ/D,=LU5DMI/D,=LU5DMP/D, + =LU5DMR/D,=LU5DQ/D,=LU5DRV/D,=LU5DSH/D,=LU5DSM/D,=LU5DT/D,=LU5DTB/D,=LU5DTF/D,=LU5DUC/D,=LU5DVB/D, + =LU5DWS/D,=LU5DYT/D,=LU5EAO/D,=LU5EC/D,=LU5ED/D,=LU5EDS/D,=LU5EFG/D,=LU5EH/D,=LU5EHC/D,=LU5EJL/D, + =LU5EM/D,=LU5EP/D,=LU5EW/D,=LU5FZ/D,=LU5FZ/E,=LU5JAH/D,=LU5JIB/D,=LU5OD/D,=LU5VAS/D,=LU5VAT/D, + =LU5XP/D,=LU6AER/D,=LU6CN/D,=LU6DAX/D,=LU6DBL/D,=LU6DC/D,=LU6DCT/D,=LU6DDC/D,=LU6DG/D,=LU6DIE/D, + =LU6DIO/D,=LU6DKT/D,=LU6DL/D,=LU6DM/D,=LU6DO/D,=LU6DRD/D,=LU6DRD/E,=LU6DRN/D,=LU6DRR/D,=LU6DSA/D, + =LU6DTB/D,=LU6EAG/D,=LU6EC/D,=LU6EDC/D,=LU6EE/D,=LU6EEG/D,=LU6EGO/D,=LU6EI/D,=LU6EJJ/D,=LU6EKL/D, + =LU6ELP/D,=LU6EMM/D,=LU6ENA/D,=LU6EPE/D,=LU6EPR/D,=LU6EPR/E,=LU6EQV/D,=LU6EU/D,=LU6EVD/D, + =LU6EWR/D,=LU6EXD/D,=LU6HBB/D,=LU6JJ/D,=LU6UAL/D,=LU6UO/D,=LU6UVI/D,=LU6XQ/D,=LU7AA/D,=LU7AC/D, + =LU7ADC/D,=LU7ADN/D,=LU7ART/D,=LU7AVW/D,=LU7BSN/D,=LU7BTO/D,=LU7BTO/E,=LU7CAW/D,=LU7CP/D, + =LU7DAC/D,=LU7DAF/D,=LU7DAR/D,=LU7DBA/D,=LU7DBL/D,=LU7DCE/D,=LU7DD/D,=LU7DDC/D,=LU7DDO/D, + =LU7DHG/D,=LU7DJH/D,=LU7DLN/D,=LU7DNM/D,=LU7DOT/D,=LU7DP/D,=LU7DR/D,=LU7DS/D,=LU7DSC/D,=LU7DSS/D, + =LU7DSU/D,=LU7DSY/D,=LU7DTC/D,=LU7DZL/D,=LU7DZL/E,=LU7DZV/D,=LU7ECZ/D,=LU7EGY/D,=LU7EHL/D, + =LU7EIA/D,=LU7EJC/D,=LU7ELY/D,=LU7EMA/D,=LU7EMM/D,=LU7ENP/D,=LU7EO/D,=LU7EON/D,=LU7EPC/D, + =LU7ETR/D,=LU7HBL/D,=LU7HW/D,=LU7HZ/D,=LU7VCH/D,=LU8ABR/D,=LU8ACH/D,=LU8ADX/D,=LU8AE/D,=LU8ARI/D, + =LU8ATM/D,=LU8DAF/D,=LU8DCF/D,=LU8DCH/D,=LU8DCK/D,=LU8DCM/D,=LU8DIP/D,=LU8DIW/D,=LU8DJR/D, + =LU8DLD/D,=LU8DLT/D,=LU8DMD/D,=LU8DQ/D,=LU8DR/D,=LU8DRA/D,=LU8DRH/D,=LU8DRQ/D,=LU8DSJ/D,=LU8DTF/D, + =LU8DUJ/D,=LU8DVQ/D,=LU8DW/D,=LU8DWR/D,=LU8DX/D,=LU8DY/D,=LU8DZE/D,=LU8DZH/D,=LU8EAG/D,=LU8EAJ/D, + =LU8EBJ/D,=LU8EBJ/E,=LU8EBK/D,=LU8EBK/E,=LU8EC/D,=LU8ECF/D,=LU8ECF/E,=LU8EEM/D,=LU8EFF/D, + =LU8EGC/D,=LU8EGS/D,=LU8EHQ/D,=LU8EHQ/E,=LU8EHS/D,=LU8EHV/D,=LU8EKC/D,=LU8EMC/D,=LU8ERH/D, + =LU8ETC/D,=LU8EU/D,=LU8EXJ/D,=LU8EXN/D,=LU8FAU/D,=LU8VCC/D,=LU8VER/D,=LU9ACJ/D,=LU9AEA/D, + =LU9AOS/D,=LU9AUC/D,=LU9BRC/D,=LU9BSA/D,=LU9CGN/D,=LU9CLH/D,=LU9DA/D,=LU9DAA/D,=LU9DAD/D,=LU9DB/D, + =LU9DE/D,=LU9DEQ/D,=LU9DF/D,=LU9DGE/D,=LU9DKO/D,=LU9DMG/D,=LU9DO/D,=LU9DPD/D,=LU9DPI/D,=LU9DPZ/E, + =LU9DSD/D,=LU9DVO/D,=LU9EAG/D,=LU9ECE/D,=LU9EI/D,=LU9EIM/D,=LU9EJM/D,=LU9EJS/E,=LU9EJZ/D, + =LU9ENH/D,=LU9EOE/D,=LU9ERA/D,=LU9ESD/D,=LU9ESD/E,=LU9ESD/LH,=LU9EV/D,=LU9EV/E,=LU9EV/LH,=LU9EY/D, + =LU9EYE/D,=LU9EZX/D,=LU9HDR/D,=LU9HJV/D,=LU9HVR/D,=LU9USD/D,=LU9WM/D,=LV7E/D,=LW1DAL/D,=LW1DDX/D, + =LW1DE/D,=LW1DEN/D,=LW1DEW/D,=LW1DJ/D,=LW1DOG/D,=LW1DQQ/D,=LW1DVB/D,=LW1DXH/D,=LW1DXP/D,=LW1DYN/D, =LW1DYP/D,=LW1ECE/D,=LW1ECO/D,=LW1ELI/D,=LW1EQI/D,=LW1EQZ/D,=LW1EVO/D,=LW1EXU/D,=LW2DAW/D, =LW2DET/D,=LW2DJM/D,=LW2DNC/D,=LW2DOD/D,=LW2DOM/D,=LW2DSM/D,=LW2DX/E,=LW2DYA/D,=LW2ECK/D, =LW2ECM/D,=LW2EFS/D,=LW2EHD/D,=LW2ENB/D,=LW2EQS/D,=LW2EUA/D,=LW3DAB/D,=LW3DBM/D,=LW3DC/D, @@ -2054,7 +2062,7 @@ Denmark: 14: 18: EU: 56.00: -10.00: -1.0: OZ: =OZ2GBW/LH,=OZ2NYB/LGT,=OZ2NYB/LH,=OZ2ZB/LH,=OZ3EDR/LH,=OZ3EVA/LH,=OZ3FYN/LH,=OZ3TL/JOTA, =OZ4EL/LH,=OZ50RN/LH,=OZ5ESB/LH,=OZ7AEI/LH,=OZ7DAL/LH,=OZ7DAL/LS,=OZ7EA/YL,=OZ7HAM/LH,=OZ7LH/LH, =OZ7RJ/LGT,=OZ7RJ/LH,=OZ7SP/JOTA,=OZ7TOM/LH,=OZ8KV/LH,=OZ8SMA/LGT,=OZ8SMA/LH,=OZ9HBO/JOTA, - =OZ9HBO/LH,=OZ9WSR/J; + =OZ9HBO/LH,=OZ9WSR/J,=VERSION; Papua New Guinea: 28: 51: OC: -9.50: -147.12: -10.0: P2: P2; Aruba: 09: 11: SA: 12.53: 69.98: 4.0: P4: @@ -2069,18 +2077,19 @@ Netherlands: 14: 27: EU: 52.28: -5.47: -1.0: PA: =PA3CPI/JOTA,=PA3DEW/J,=PA3EEQ/LH,=PA3EFR/J,=PA3ESO/J,=PA3EWG/J,=PA3FBO/LH,=PA3FYE/J,=PA3GAG/LH, =PA3GQS/J,=PA3GWN/J,=PA3HFJ/J,=PA3WSK/JOTA,=PA40LAB/J,=PA4RVS/MILL,=PA4WK/J,=PA5CA/LH,=PA65DUIN/J, =PA65URK/LH,=PA6ADZ/MILL,=PA6ARC/LH,=PA6FUN/LGT,=PA6FUN/LH,=PA6FUN/LS,=PA6HOOP/MILL,=PA6HYG/J, - =PA6JAM/J,=PA6KMS/MILL,=PA6LH/LH,=PA6LL/LH,=PA6LST/LH,=PA6LST/LS,=PA6MZD/MILL,=PA6RCG/J,=PA6SB/L, - =PA6SB/LH,=PA6SCH/LH,=PA6SHB/J,=PA6SJB/J,=PA6SJS/J,=PA6STAR/MILL,=PA6URK/LH,=PA6VEN/LH,=PA6VLD/LH, - =PA6WAD/LGT,=PA70HYG/JOTA,=PA75SM/J,=PA7AL/LH,=PA7HPH/J,=PA7JWC/J,=PA99HYG/JOTA,=PA9M/LH,=PB6F/LH, - =PB6KW/LH,=PB88XYL/YL,=PB9ZR/J,=PC2D/LH,=PD0ARI/MILL,=PD0FSB/LH,=PD1JL/MILL,=PD1JSH/J,=PD2C/LH, - =PD2GCM/LH,=PD5CW/LH,=PD5MVH/P/LH,=PD7DX/J,=PE18KA/J,=PE1NCS/LGT,=PE1NCS/LH,=PE1NZJ/J,=PE1OPM/LH, - =PE1OXI/J,=PE1RBG/J,=PE1RBR/J,=PE2MC/J,=PE2MGA/J,=PF100ROVER/J,=PF18NAWAKA/J,=PF4R/LH,=PG150N/LH, - =PG6HK/LH,=PG6N/LH,=PH4RTM/MILL,=PH4RTM/WHE,=PH50GFB/J,=PH6BB/J,=PH6WAL/LH,=PH75S/J,=PH9GFB/J, - =PI4ADH/LGT,=PI4ADH/LH,=PI4ADH/LS,=PI4ALK/LH,=PI4AZL/J,=PI4BG/J,=PI4BOZ/LH,=PI4CQ/J,=PI4DHG/DM, - =PI4DHG/MILL,=PI4ET/MILL,=PI4ETL/MILL,=PI4F/LH,=PI4LDN/L,=PI4LDN/LH,=PI4RCK/LGT,=PI4RCK/LH, - =PI4RIS/J,=PI4S/J,=PI4SHV/J,=PI4SRN/LH,=PI4SRN/MILL,=PI4VNW/LGT,=PI4VNW/LH,=PI4VPO/LH,=PI4VPO/LT, - =PI4WAL/LGT,=PI4WAL/LH,=PI4WBR/LH,=PI4WFL/MILL,=PI4YLC/LH,=PI4ZHE/LH,=PI4ZHE/LS,=PI4ZHE/MILL, - =PI4ZVL/FD,=PI4ZVL/LGT,=PI4ZVL/LH,=PI9NHL/LH,=PI9SRS/LH,=PI9TP/J; + =PA6JAM/J,=PA6KMS/MILL,=PA6LH/LH,=PA6LL/LH,=PA6LST/LH,=PA6LST/LS,=PA6MZD/MILL,=PA6OP/MILL, + =PA6RCG/J,=PA6SB/L,=PA6SB/LH,=PA6SCH/LH,=PA6SHB/J,=PA6SJB/J,=PA6SJS/J,=PA6STAR/MILL,=PA6URK/LH, + =PA6VEN/LH,=PA6VLD/LH,=PA6WAD/LGT,=PA70HYG/JOTA,=PA75SM/J,=PA7AL/LH,=PA7HPH/J,=PA7JWC/J, + =PA99HYG/JOTA,=PA9M/LH,=PB6F/LH,=PB6KW/LH,=PB88XYL/YL,=PB9ZR/J,=PC2D/LH,=PD0ARI/MILL,=PD0FSB/LH, + =PD1JL/MILL,=PD1JSH/J,=PD2C/LH,=PD2GCM/LH,=PD5CW/LH,=PD5MVH/P/LH,=PD7DX/J,=PE18KA/J,=PE1NCS/LGT, + =PE1NCS/LH,=PE1NZJ/J,=PE1OPM/LH,=PE1OXI/J,=PE1RBG/J,=PE1RBR/J,=PE2MC/J,=PE2MGA/J,=PF100ROVER/J, + =PF18NAWAKA/J,=PF4R/LH,=PG150N/LH,=PG64HOOP/MIL,=PG6HK/LH,=PG6N/LH,=PH4RTM/MILL,=PH4RTM/WHE, + =PH50GFB/J,=PH6BB/J,=PH6WAL/LH,=PH75S/J,=PH9GFB/J,=PI4ADH/LGT,=PI4ADH/LH,=PI4ADH/LS,=PI4ALK/LH, + =PI4AZL/J,=PI4BG/J,=PI4BOZ/LH,=PI4CQ/J,=PI4DHG/DM,=PI4DHG/MILL,=PI4ET/MILL,=PI4ETL/MILL,=PI4F/LH, + =PI4LDN/L,=PI4LDN/LH,=PI4RCK/LGT,=PI4RCK/LH,=PI4RIS/J,=PI4S/J,=PI4SHV/J,=PI4SRN/LH,=PI4SRN/MILL, + =PI4VNW/LGT,=PI4VNW/LH,=PI4VPO/LH,=PI4VPO/LT,=PI4WAL/LGT,=PI4WAL/LH,=PI4WBR/LH,=PI4WFL/MILL, + =PI4YLC/LH,=PI4ZHE/LH,=PI4ZHE/LS,=PI4ZHE/MILL,=PI4ZVL/FD,=PI4ZVL/LGT,=PI4ZVL/LH,=PI4ZWN/MILL, + =PI9NHL/LH,=PI9SRS/LH,=PI9TP/J; Curacao: 09: 11: SA: 12.17: 69.00: 4.0: PJ2: PJ2; Bonaire: 09: 11: SA: 12.20: 68.25: 4.0: PJ4: @@ -2184,7 +2193,7 @@ Greece: 20: 28: EU: 39.78: -21.78: -2.0: SV: =SV5KJQ/8,=SV8/DJ5AA/LH,=SV8/LY1DF/LGT,=SV9GPM/8,=SW8SW/LH,=SX8DI/LH,=SZ8LES/LH,=SZ8XIO/J, =SZ8XIO/P/JOTA; Mount Athos: 20: 28: EU: 40.00: -24.00: -2.0: SV/a: - =SV2/SV1RP/T,=SV2ASP/A,=SV2RSG/A,=SY2A; + =SV2/SV1RP/T,=SV2ASP,=SV2ASP/A,=SV2ASP/P,=SV2RSG/A,=SY2A; Dodecanese: 20: 28: EU: 36.17: -27.93: -2.0: SV5: J45,SV5,SW5,SX5,SY5,SZ5,=J42004/SP5MXZ,=J45FRE/J,=SV0XAN/5,=SV0XBZ/5,=SV0XCA/5,=SV0XCA/P, =SV1ENJ/5,=SV1GSX/5,=SV5/DJ5AA/LH,=SV5/LY1DF/LGT,=SV5CJQ/LH,=SV9DJO/5,=SV9GPV/5,=SV9JI/5, @@ -2253,8 +2262,8 @@ Benin: 35: 46: AF: 9.87: -2.25: -1.0: TY: Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: TZ; European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: - R,U,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R7AB/P,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF, - =R9AV/6,=R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, + R,U,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF,=R9AV/6, + =R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, =RA3CQ/9/M(17)[20],=RA80SP,=RA9JR/3,=RA9JX/3,=RA9P/4,=RA9RT/3,=RA9UUY/6,=RA9YA/6,=RC80SP,=RG0F/5, =RG50P(17),=RG50P/9(17)[30],=RJ80SP,=RK80X(17)[19],=RK8O/4,=RL9AA/6,=RM80SP,=RM8A/4/M,=RM94AE, =RN9M/4,=RN9OI/3,=RO80RO,=RP61XX(17)[19],=RP62X(17)[19],=RP63X(17)[19],=RP63XO(17)[19], @@ -2264,23 +2273,23 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =UA0KT/4,=UA0QNE/3,=UA0QNU/3,=UA0QQJ/3,=UA0UV/6,=UA0XAK/3,=UA0XAK/6,=UA0ZL/6,=UA9CCO/6,=UA9CTT/3, =UA9CTT/6,=UA9FFS/1/MM,=UE23DKA,=UE6MAC/9(17),=UE95AE,=UE95E,=UE95ME,=UE96ME,=UE99PS, =R900BL,=R9J/1,=RA2FN/1,=RA9KU/1,=RA9KU/1/M,=RA9MC/1,=RA9SGI/1,=RK9XWV/1,=RL1O,=RM0L/1,=RM80DZ, - =RN85AM,=RN85KN,=RT9T/1,=RU2FB/1,=RU9YT/1,=RU9YT/1/P,=RV1CC/M,=RW1AI/ANT,=RW8W/1,=RW9QA/1, - =RX3AMI/1/LH,=UA1ADQ/ANT,=UA1BJ/ANT,=UA1JJ/ANT,=UA2FFX/1,=UA9B/1,=UA9KG/1,=UA9KGH/1,=UA9KK/1, - =UA9UDX/1,=UB9YUW/1,=UE21A,=UE21B,=UE21M,=UE22A,=UE25AC,=UE25AQ,=UE2AT/1, - =R0XAC/1,=R900DM,=R90LPU,=R9JNO/1,=RA0FU/1,=RA9FNV/1,=RN9N/1,=RU9MU/1,=RV0CA/1,=RV2FW/1,=RV9JD/1, - =RX9TN/1,=UA0BDS/1,=UA0SIK/1,=UA1CDA/LH,=UA1CIO/LH,=UA9MQR/1,=UB5O/1, + =RN85AM,=RN85KN,=RT9T/1,=RU2FB/1,=RU9YT/1,=RU9YT/1/P,=RW1AI/ANT,=RW8W/1,=RW9QA/1,=UA1ADQ/ANT, + =UA1BJ/ANT,=UA1JJ/ANT,=UA2FFX/1,=UA9B/1,=UA9KG/1,=UA9KGH/1,=UA9KK/1,=UA9UDX/1,=UB9YUW/1,=UE21A, + =UE21B,=UE21M,=UE22A,=UE25AC,=UE25AQ,=UE2AT/1, + =R0XAC/1,=R8XF/1,=R900DM,=R90LPU,=R9JNO/1,=RA0FU/1,=RA9FNV/1,=RN9N/1,=RU9MU/1,=RV0CA/1,=RV1CC/M, + =RV2FW/1,=RV9JD/1,=RX9TN/1,=UA0BDS/1,=UA0SIK/1,=UA1CDA/LH,=UA1CIO/LH,=UA9MQR/1,=UB5O/1, R1N[19],RA1N[19],RC1N[19],RD1N[19],RE1N[19],RF1N[19],RG1N[19],RJ1N[19],RK1N[19],RL1N[19],RM1N[19], RN1N[19],RO1N[19],RQ1N[19],RT1N[19],RU1N[19],RV1N[19],RW1N[19],RX1N[19],RY1N[19],RZ1N[19],U1N[19], UA1N[19],UB1N[19],UC1N[19],UD1N[19],UE1N[19],UF1N[19],UG1N[19],UH1N[19],UI1N[19],=R01DTV/1[19], =R85KFF[19],=R90K[19],=RN1NA/ANT[19],=RO25KL[19],=RP72PT[19],=RP72RK[19],=RP73PT[19],=RP73RK[19], - =RV1CC/1[19],=RV9JD/1/M[19], + =RP74PT[19],=RP74RK[19],=RV9JD/1/M[19],=RX3AMI/1/LH[19], R1O[19],RA1O[19],RC1O[19],RD1O[19],RE1O[19],RF1O[19],RG1O[19],RJ1O[19],RK1O[19],RL1O[19],RM1O[19], RN1O[19],RO1O[19],RQ1O[19],RT1O[19],RU1O[19],RV1O[19],RW1O[19],RX1O[19],RY1O[19],RZ1O[19],U1O[19], UA1O[19],UB1O[19],UC1O[19],UD1O[19],UE1O[19],UF1O[19],UG1O[19],UH1O[19],UI1O[19],=R0000O[19], =R100K[19],=R20ARRS[19],=R25ILIM[19],=R8FF/1[19],=R9LI/1[19],=R9MCM/1[19],=RA0NN/1[19], =RA9XA/1[19],=RA9XA/1/P[19],=RK0SE/1[19],=RM9X/1[19],=RO80KEDR[19],=RP72A[19],=RP73A[19], - =RP73AU[19],=UA1PAC/ANT[19],=UA9UAX/1[19],=UA9UAX/1/M[19],=UA9XK/1[19],=UA9XMC/1[19], - =UA9XRK/1[19],=UE25IK[19],=UE80AR[19],=UE80AR/M[19],=UE80AR/P[19], + =RP73AU[19],=RP74A[19],=RP74AU[19],=UA1PAC/ANT[19],=UA9UAX/1[19],=UA9UAX/1/M[19],=UA9XK/1[19], + =UA9XMC/1[19],=UA9XRK/1[19],=UE25IK[19],=UE80AR[19],=UE80AR/M[19],=UE80AR/P[19], R1P[20],RA1P[20],RC1P[20],RD1P[20],RE1P[20],RF1P[20],RG1P[20],RJ1P[20],RK1P[20],RL1P[20],RM1P[20], RN1P[20],RO1P[20],RQ1P[20],RT1P[20],RU1P[20],RV1P[20],RW1P[20],RX1P[20],RY1P[20],RZ1P[20],U1P[20], UA1P[20],UB1P[20],UC1P[20],UD1P[20],UE1P[20],UF1P[20],UG1P[20],UH1P[20],UI1P[20],=R8XW/1[20], @@ -2288,37 +2297,37 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =RK1PWA/ANT[20],=RL1P[20],=RN2FA/1[20],=UA1PAC/1/ANT[20],=UA9FOJ/1[20],=UA9MRY/1[20], =UA9XRP/1[20], =R9FM/1,=RA0BM/1,=RA0BM/1/P,=RA1QQ/LH,=RU9MX/1,=RW9XC/1,=UA1QV/ANT,=UA9XC/1,=UE80GS, - =R88EPC,=R95NRL,=RA9FBV/1,=RA9SC/1,=RA9XY/1,=RV2FW/1/M,=RZ0IWW/1,=UA9XF/1,=UE9WFF/1, + =R88EPC,=R95NRL,=RA9FBV/1,=RA9SC/1,=RA9XY/1,=RV1CC/1,=RV2FW/1/M,=RZ0IWW/1,=UA9XF/1,=UE9WFF/1, =RA0ZD/1,=RP9X/1,=RP9XWM/1,=UE25WDW,=UE9XBW/1,=UF2F/1/M, R1Z[19],RA1Z[19],RC1Z[19],RD1Z[19],RE1Z[19],RF1Z[19],RG1Z[19],RJ1Z[19],RK1Z[19],RL1Z[19],RM1Z[19], RN1Z[19],RO1Z[19],RQ1Z[19],RT1Z[19],RU1Z[19],RV1Z[19],RW1Z[19],RX1Z[19],RY1Z[19],RZ1Z[19],U1Z[19], UA1Z[19],UB1Z[19],UC1Z[19],UD1Z[19],UE1Z[19],UF1Z[19],UG1Z[19],UH1Z[19],UI1Z[19],=R25RRA[19], =RA9CFH/1[19],=RA9CFH/1/P[19],=RK21Z[19],=RK3DZJ/1/LH[19],=RM9WN/1[19],=RP72MU[19],=RP73MU[19], - =RP73ZP[19],=RU1ZC/ANT[19],=RW1ZQ/LH[19],=RY83HN[19],=UB1ZBD/N[19], - =R01DTV/3,=R85PAR,=R870B,=R870C,=R870K,=R870M,=R870O,=R9FM/3,=RA2AT,=RA2FDX/3,=RA9CO/3,=RA9USU/3, - =RC85MP,=RL3AB/FF,=RT2F/3/M,=RT9K/3,=RW0LF/3,=RX9UL/3,=RX9WN/3,=RZ9UA/3,=UA0KCX/3,=UA3AV/ANT, - =UA8AA/3,=UA8AA/5,=UA9KHD/3,=UA9MDU/3,=UA9MRX/3,=UA9QCP/3,=UA9UAX/3,=UB5O/M,=UE24SU, + =RP73ZP[19],=RP74ZP[19],=RU1ZC/ANT[19],=RW1ZQ/LH[19],=RY83HN[19],=UB1ZBD/N[19], + =R01DTV/3,=R1712M,=R85PAR,=R870B,=R870C,=R870K,=R870M,=R870O,=R9FM/3,=RA2AT,=RA2FDX/3,=RA9CO/3, + =RA9USU/3,=RC85MP,=RL3AB/FF,=RT2F/3/M,=RT9K/3,=RW0LF/3,=RX9UL/3,=RX9WN/3,=RZ9UA/3,=UA0KCX/3, + =UA3AV/ANT,=UA8AA/3,=UA8AA/5,=UA9KHD/3,=UA9MDU/3,=UA9MRX/3,=UA9QCP/3,=UA9UAX/3,=UE24SU, =R85QMR,=R85WDW,=R8B,=R8FF/3,=R90DNF,=R99FSB,=RA0BY/3,=RA80KEDR,=RA9KV/3,=RA9SB/3,=RA9XY/3, =RK3DSW/ANT,=RK3DWA/3/N,=RN9MD/3,=RT80KEDR,=RU0LM/3,=RU2FA/3,=RU3HD/ANT,=RV0AO/3,=RV9LM/3/P, =RW0IM/3,=RW3DU/N,=RW9UEW/3,=RX9SN/3,=RZ9SZ/3,=RZ9W/3,=UA0JAD/3,=UA0KCL/3,=UA0ZAZ/3,=UA9AJ/3/M, =UA9DD/3,=UA9HSI/3,=UA9ONJ/3,=UA9XGD/3,=UA9XMC/3,=UE23DSA,=UE25FO,=UE95GA,=UE96WS, =R80ORL,=UA0QGM/3,=UE80O,=UE80OL, =R0CAF/3,=R3GO/FF,=RM0L/3,=RN3GL/FF,=RN3GW/FF,=RT5G/P/FF,=RW0IW/3,=UA3GM/ANT,=UE90FL, - =R0WX/P,=RA9KT/3,=RZ9SZ/3/M,=UA0FHC/3,=UF2F/3/M, - =R0IA/3,=R863LC,=R863LK,=R863LX,=R875R,=R9XZ/3,=RG80KEDR,=RL80KEDR,=RN0CF/3,=RU9QRP/3,=RZ90W/3, - =UA9JFM/3,=UA9XZ/3,=UE80G,=UE80V,=UE80YG, + =RA9KT/3,=RZ9SZ/3/M,=UA0FHC/3,=UF2F/3/M, + =R0IA/3,=R17SMW,=R863LC,=R863LK,=R863LX,=R875R,=R9XZ/3,=RG80KEDR,=RL80KEDR,=RN0CF/3,=RU9QRP/3, + =RZ90W/3,=UA9JFM/3,=UA9XZ/3,=UE80G,=UE80V,=UE80YG, =RK3MXT/FF,=RV9AZ/3,=UA0AD/3, =R870T,=RT90PK,=RU0ZW/3,=RW0UM/3,=RW9JV/3, - =RA0CCV/3,=RA0QA/3,=RC9YA/3/P,=RM8X/3,=RV9LC/3,=UA0QJE/3,=UA0QQO/3,=UA9CGL/3,=UA9JLY/3,=UA9XLE/3, - =UB0AJJ/3,=UC0LAF/3,=UE25AFG,=UE25R,=UE27AFG,=UE28AFG,=UE96SN, - =R80RTL,=R90IARU,=R9CZ/3,=RU80TO,=RZ9HK/3/P, + =R17CWB,=RA0CCV/3,=RA0QA/3,=RC9YA/3/P,=RM8X/3,=RV9LC/3,=UA0QJE/3,=UA0QQO/3,=UA9CGL/3,=UA9JLY/3, + =UA9XLE/3,=UB0AJJ/3,=UB5O/M,=UC0LAF/3,=UE25AFG,=UE25R,=UE27AFG,=UE28AFG,=UE96SN, + =R17TCNY,=R80RTL,=R90IARU,=R9CZ/3,=RU80TO,=RZ9HK/3/P, =R920RZ,=R95DOD,=RA0QQ/3,=UA0KBA/3,=UE80S,=UE85NKN,=UE85WDW, =R3TT/FF,=R8FF/M,=R8TA/4/P,=R8TR/3,=R90NOR,=R9KW/3,=R9KW/4,=R9PA/4,=RA9AP/3,=RA9CKQ/4,=RA9KW/3, =RA9KW/3/M,=RA9ST/3/P,=RG9A/3/P,=RM9T/4/P,=RN0CT/4,=RT9S/3,=RT9S/3/P,=RT9S/4,=RU9LA/4,=RV9FQ/3, =RV9FQ/3/M,=RV9WB/4,=RV9WLE/3/P,=RV9WZ/3,=RW9KW/3,=RW9WA/3,=RX9SN/P,=UA0ADX/3,=UA0DM/4,=UA0S/4, =UA0SC/4,=UA9APA/3/P,=UA9CTT/4,=UA9PM/4,=UA9SSR/3,=UE200TARS,=UE25TF,=UE9FDA/3,=UE9FDA/3/M, =UE9WDA/3,=UI8W/3/P, - =R5VAJ/N,=R850G,=R850PN,=RT9T/3,=RU0BW/3,=RU9MU/3,=RV80KEDR,=RX9TL/3, + =R170VN,=R5VAJ/N,=R850G,=R850PN,=RT9T/3,=RU0BW/3,=RU9MU/3,=RV80KEDR,=RX9TL/3, =R110A/P,=R80PVB, =RA9XF/3,=RC80KEDR,=RD0L/3,=RK0BWW/3,=RN80KEDR,=RW9XC/3/M,=RX3XX/N,=UA0KBA/3/P,=UA9SIV/3, =UE0ZOO/3, @@ -2327,9 +2336,9 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R3ZK/FF,=RA3ZZ/ANT,=RA9AK/3,=RA9KD/3,=RU3ZK/FF,=RW0BG/3,=UA0QBC/3, =RA07DR,=RA9ODR/4/M,=RC4AF/FF,=RN4ACA/FF,=RU9CK/6/M,=UA4ASE/FF,=UA4ATL/FF,=UA8WAA/6,=UA9FGR/4, =UE00S,=UE00S/P,=UE09VG,=UE80RWW, - =R4CDX/FF,=R8FF/4,=R8FR/4/M,=RA9KO/4,=RL96WS,=RL97WS,=RU80KEDR,=RU80KEDR/P,=RU9SO/4/M,=RV4CC/FF, - =RV9CX/4/M,=RW0UZ/4,=RW9AW/4/M,=RZ0SB/4,=UA0KAT/4,=UA8WAA/4,=UA9AGR/4/M,=UA9JPX/4,=UA9OC/4, - =UE23DZO,=UE95MS,=UE95WS,=UE98WS,=UE99PW, + =R1747PS,=R4CDX/FF,=R8FF/4,=R8FR/4/M,=RA9KO/4,=RL96WS,=RL97WS,=RU80KEDR,=RU80KEDR/P,=RU9SO/4/M, + =RV4CC/FF,=RV9CX/4/M,=RW0UZ/4,=RW9AW/4/M,=RZ0SB/4,=UA0KAT/4,=UA8WAA/4,=UA9AGR/4/M,=UA9JPX/4, + =UA9OC/4,=UE23DZO,=UE95MS,=UE95WS,=UE98WS,=UE99PW, =R9CMA/4,=R9JBN/4, R4H[30],R4I[30],RA4H[30],RA4I[30],RC4H[30],RC4I[30],RD4H[30],RD4I[30],RE4H[30],RE4I[30],RF4H[30], RF4I[30],RG4H[30],RG4I[30],RJ4H[30],RJ4I[30],RK4H[30],RK4I[30],RL4H[30],RL4I[30],RM4H[30], @@ -2342,11 +2351,12 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R4IT[29],=R9DA/4[30],=RA4HL[29],=RA9FAA/4/M[30],=RA9SC/4[30],=RA9SC/4/P[30],=RC18SA[30], =RC20HZ[30],=RC4HT[29],=RC4I[29],=RC9YA/4/M[30],=RJ4I[29],=RK4HM[29],=RM4I[29],=RN4HFJ[29], =RN4HIF[29],=RN9S/M[30],=RP72AG[30],=RP72I[30],=RP72MF[30],=RP72WO[30],=RP73DD[30],=RP73I[30], - =RP73PM[30],=RT9K/4[30],=RU4HD[29],=RU4HP[29],=RU4I[29],=RU9CK/4/M[30],=RV9JD/4/M[30],=RW4HM[29], - =RW4HTK[29],=RW4HW[29],=RW4HZ[29],=RW9SW/4[30],=RW9TP/4[30],=RW9WJ/4[30],=RW9WJ/4/P[30], - =RW9WJ/P[30],=RZ4HWF/LH[30],=RZ4HZW/FF[30],=RZ9WU/4/M[30],=UA0KAO/4[30],=UA0QJA/4[30],=UA4H[29], - =UA4HBM[29],=UA4HGL[29],=UA4HIP[29],=UA4HIP/M[30],=UA4HRZ[29],=UA4HY[29],=UA9JGX/4[30], - =UA9LAO/4[30],=UA9SQG/4/P[30],=UA9SY/4[30],=UC4I[29],=UI4I[29], + =RP73PM[30],=RP74DD[30],=RP74I[30],=RT9K/4[30],=RU4HD[29],=RU4HP[29],=RU4I[29],=RU9CK/4/M[30], + =RV9JD/4/M[30],=RW4HM[29],=RW4HTK[29],=RW4HW[29],=RW4HZ[29],=RW9SW/4[30],=RW9TP/4[30], + =RW9WJ/4[30],=RW9WJ/4/P[30],=RW9WJ/P[30],=RZ4HWF/LH[30],=RZ4HZW/FF[30],=RZ9WU/4/M[30], + =UA0KAO/4[30],=UA0QJA/4[30],=UA4H[29],=UA4HBM[29],=UA4HGL[29],=UA4HIP[29],=UA4HIP/M[30], + =UA4HRZ[29],=UA4HY[29],=UA9JGX/4[30],=UA9LAO/4[30],=UA9SQG/4/P[30],=UA9SY/4[30],=UC4I[29], + =UI4I[29], =R01DTV/4,=R9XC/4,=RA9XAF/4,=UA4HIP/4,=UA9JFE/4, =R8XF/4,=RA4NCC[30],=RA9FR/4/P,=RA9XSM/4,=RD9CX/4,=RD9CX/4/P,=RU0LM/4,=RW9XC/4/M,=UA4NE/M, =UA4NF[30],=UA4NF/M,=UA9APA/4/P,=UA9FIT/4,=UA9XI/4,=UE9FDA/4,=UE9FDA/4/M,=UE9GDA/4, @@ -2360,7 +2370,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: RN4W[30],RO4W[30],RQ4W[30],RT4W[30],RU4W[30],RV4W[30],RW4W[30],RX4W[30],RY4W[30],RZ4W[30],U4W[30], UA4W[30],UB4W[30],UC4W[30],UD4W[30],UE4W[30],UF4W[30],UG4W[30],UH4W[30],UI4W[30],=R0CM/4[30], =R9GM/4[30],=R9UT/4[30],=RA9FDR/4/P[30],=RA9KV/4/M[30],=RA9WU/4[30],=RA9WU/4/M[30],=RA9WU/4/P[30], - =RP72IZ[30],=RP73IZ[30],=RW9FWB/4[30],=RW9FWR/4[30],=RW9FWR/4/M[30],=RX9FW/4[30],=UA9UAX/4/M[30], + =RP72IZ[30],=RP73IZ[30],=RP74IZ[30],=RW9FWB/4[30],=RW9FWR/4[30],=RW9FWR/4/M[30],=RX9FW/4[30], + =UA9UAX/4/M[30], =RT9T/4,=RV9MD/4,=UA4PCM/M,=UE04YCS,=UE85AGN, =R01DTV,=R01DTV/7,=R0IT/6,=R80TV,=R8XW/6,=R9JO/6,=R9KD/6,=R9OM/6,=R9WGM/6/M,=RA0APW/6,=RA0FW/6, =RA0LIF/6,=RA0LLW/6,=RA0QR/6,=RA9ODR/6,=RA9ODR/6/M,=RA9SAS/6,=RA9UWD/6,=RA9WW/6,=RD9CX/6, @@ -2380,7 +2391,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R8FF/6,=R9DA/6,=RU9CK/6/P,=RV9CX/6/P,=UA9CES/6,=UA9FGR/6,=UA9WQK/6, =RU9CK/7/M,=RU9CK/7/P,=RV9CX/7/P,=UA9JFN/6/M, =RT9K/7/P,=RZ7G/6/FF, - =R01DTV/6,=RV9AB/6, + =R01DTV/6,=R7AB/P,=RV9AB/6, =R9MJ/6,=R9OM/5/P,=R9XT/6,=RA9KD/6,=RN9N/6,=RT9T/6,=RT9T/6/M,=RU2FB/5,=RU9WW/5/M,=RW9AW/5, =UA0LLM/5,=UA8WAA/5,=UA9CDC/6,=UA9UAX/5,=UE2KR,=UE98PW, =R8AEU/6,=R9MJ/6/M,=RN9N/6/M,=UB8ADI/5,=UB8ADI/6,=UE2SE, @@ -2408,15 +2419,19 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R9CZ/4/M(17)[30],=R9KC/4/M(17)[30],=R9KC/8/M(17)[30],=RA27FM(17)[30],=RA9XAI/4(17)[30], =RC20FM(17)[30],=RD4M/9(17)[30],=RG50P/M(17)[30],=RN9N/4(17)[30],=RP70PK(17)[30],=RP9FKU(17)[30], =RP9FTK(17)[30],=RU27FQ(17)[30],=RU27FW(17)[30],=RU4W/9(17)[30],=RV22PM(17)[30],=RX9TX/9(17)[30], - =RZ16FM(17)[30],=RZ9WM/9(17)[30],=UA1ZQO/9(17)[30],=UA4NF/4/M(17)[30],=UA4WA/9(17)[30], - =UA9CGL/4/M(17)[30],=UA9CUA/4/M(17)[30],=UA9UAX/4(17)[30],=UE16SA(17)[30],=UE55PM(17)[30], + =RZ16FM(17)[30],=RZ9WM/9(17)[30],=UA1ZQO/9(17)[30],=UA3FQ/4(17)[30],=UA3FQ/4/P(17)[30], + =UA4NF/4/M(17)[30],=UA4WA/9(17)[30],=UA9CGL/4/M(17)[30],=UA9CUA/4/M(17)[30],=UA9UAX/4(17)[30], + =UE16SA(17)[30],=UE55PM(17)[30], =RW3TN/9(17)[30],=UE10SK(17)[30], - R8X(17)[20],R9X(17)[20],RA8X(17)[20],RA9X(17)[20],RC8X(17)[20],RC9X(17)[20],RD8X(17)[20], - RD9X(17)[20],RE8X(17)[20],RE9X(17)[20],RF8X(17)[20],RF9X(17)[20],RG8X(17)[20],RG9X(17)[20], - RI8X(17)[20],RI9X(17)[20],RJ8X(17)[20],RJ9X(17)[20],RK8X(17)[20],RK9X(17)[20],RL8X(17)[20], - RL9X(17)[20],RM8X(17)[20],RM9X(17)[20],RN8X(17)[20],RN9X(17)[20],RO8X(17)[20],RO9X(17)[20], - RQ8X(17)[20],RQ9X(17)[20],RT8X(17)[20],RT9X(17)[20],RU8X(17)[20],RU9X(17)[20],RV8X(17)[20], - RV9X(17)[20],RW8X(17)[20],RW9X(17)[20],RX8X(17)[20],RX9X(17)[20],RY8X(17)[20],RY9X(17)[20], + R1I(17)[20],R8X(17)[20],R9X(17)[20],RA1I(17)[20],RA8X(17)[20],RA9X(17)[20],RC1I(17)[20], + RC8X(17)[20],RC9X(17)[20],RD1I(17)[20],RD8X(17)[20],RD9X(17)[20],RE1I(17)[20],RE8X(17)[20], + RE9X(17)[20],RF1I(17)[20],RF8X(17)[20],RF9X(17)[20],RG1I(17)[20],RG8X(17)[20],RG9X(17)[20], + RI8X(17)[20],RI9X(17)[20],RJ1I(17)[20],RJ8X(17)[20],RJ9X(17)[20],RK1I(17)[20],RK8X(17)[20], + RK9X(17)[20],RL1I(17)[20],RL8X(17)[20],RL9X(17)[20],RM1I(17)[20],RM8X(17)[20],RM9X(17)[20], + RN1I(17)[20],RN8X(17)[20],RN9X(17)[20],RO1I(17)[20],RO8X(17)[20],RO9X(17)[20],RQ1I(17)[20], + RQ8X(17)[20],RQ9X(17)[20],RT1I(17)[20],RT8X(17)[20],RT9X(17)[20],RU1I(17)[20],RU8X(17)[20], + RU9X(17)[20],RV1I(17)[20],RV8X(17)[20],RV9X(17)[20],RW1I(17)[20],RW8X(17)[20],RW9X(17)[20], + RX1I(17)[20],RX8X(17)[20],RX9X(17)[20],RY1I(17)[20],RY8X(17)[20],RY9X(17)[20],RZ1I(17)[20], RZ8X(17)[20],RZ9X(17)[20],U8X(17)[20],U9X(17)[20],UA8X(17)[20],UA9X(17)[20],UB8X(17)[20], UB9X(17)[20],UC8X(17)[20],UC9X(17)[20],UD8X(17)[20],UD9X(17)[20],UE8X(17)[20],UE9X(17)[20], UF8X(17)[20],UF9X(17)[20],UG8X(17)[20],UG9X(17)[20],UH8X(17)[20],UH9X(17)[20],UI8X(17)[20], @@ -2429,11 +2444,10 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =RA4NH/9(17)[20],=RA4NV/9(17)[20],=RA6ACI/9(17)[20],=RD4CBQ/9(17)[20],=RK1OWZ/9(17)[20], =RK1OWZ/9/M(17)[20],=RK6K/9(17)[20],=RK90DR(17)[20],=RN22OG(17)[20],=RN22OV(17)[20], =RN4ACZ/9(17)[20],=RO25KO(17)[20],=RP67KR(17)[20],=RP68KR(17)[20],=RP70KW(17)[20],=RP71KW(17)[20], - =RP72X(17)[20],=RP73X(17)[20],=RT73LF(17)[20],=RV3UI/9(17)[20],=RW1QN/9(17)[20], + =RP72X(17)[20],=RP73X(17)[20],=RP74X(17)[20],=RT73LF(17)[20],=RV3UI/9(17)[20],=RW1QN/9(17)[20], =RW1QN/9/M(17)[20],=RW1QN/9/P(17)[20],=RW4NJ/9/M(17)[20],=RY110RAEM(17)[20],=UA1OOX/9(17)[20], - =UA1QV/9(17)[20],=UA3FQ/4(17)[20],=UA4WP/9/M(17)[20],=UA6LTO/9(17)[20],=UB1OAD/1/P(17)[20], - =UB1OAD/9/P(17)[20],=UB5O/1/M(17)[20],=UE16ST(17)[20],=UE1RDA/9(17)[20],=UE85DRK(17)[20], - =UE90K(17)[20]; + =UA1QV/9(17)[20],=UA4WP/9/M(17)[20],=UA6LTO/9(17)[20],=UB1OAD/1/P(17)[20],=UB1OAD/9/P(17)[20], + =UB5O/1/M(17)[20],=UE16ST(17)[20],=UE1RDA/9(17)[20],=UE85DRK(17)[20],=UE90K(17)[20]; Kaliningrad: 15: 29: EU: 54.72: -20.52: -3.0: UA2: R2F,R2K,RA2,RC2F,RC2K,RD2F,RD2K,RE2F,RE2K,RF2F,RF2K,RG2F,RG2K,RJ2F,RJ2K,RK2F,RK2K,RL2F,RL2K,RM2F, RM2K,RN2F,RN2K,RO2F,RO2K,RQ2F,RQ2K,RT2F,RT2K,RU2F,RU2K,RV2F,RV2K,RW2F,RW2K,RX2F,RX2K,RY2F,RY2K, @@ -2464,10 +2478,11 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =R70PW,=R70PW/P,=R9SRR,=RA1AIP/9/P,=RA1AR/9,=RA1QR/9,=RA3WJ/9,=RA3XBN/9,=RA3ZM/8,=RA4FSC/9, =RA4HGN/9,=RA9SC/9,=RA9WJV/8/P,=RC20AB,=RC20AC,=RD3BN/9,=RD4CAQ/9,=RG110RAEM,=RJ17CW,=RK9SZZ/9, =RL5G/8,=RL9AA/P,=RN4WA/9,=RN9O/8,=RP67TG,=RP68MZ,=RP70AZ,=RP70PM,=RP70TG,=RP71AZ,=RP71TG,=RP72AZ, - =RP72MS,=RP72TG,=RP73AZ,=RP73TG,=RP73U,=RQ4D/8,=RT60RT,=RT73AB,=RU22AZ,=RV1AQ/9,=RV1CC/8,=RV1CC/9, - =RV3BA/9,=RV9WB/9/M,=RV9WMZ/9/P,=RV9WMZ/P,=RX3RC/9,=RX9WN/9/M,=RZ0OO/9,=RZ6DR/9/M,=RZ9OO/9/M, - =UA0MF/9,=UA3AKO/8,=UA4RC/9,=UA6A/9,=UA6CW/9,=UA6YGY/8,=UA6YGY/9,=UA8WAA/9,=UA8WAA/9/P,=UA8WAA/M, - =UA9CGL/9/M,=UA9SG/9,=UA9TO/9/M,=UA9WMN/9/P,=UB5O/8,=UE45AWT,=UE70AAA,=UE9WDA/9, + =RP72MS,=RP72TG,=RP73AZ,=RP73TG,=RP73U,=RP74AZ,=RP74TG,=RP74U,=RQ4D/8,=RT60RT,=RT73AB,=RU22AZ, + =RV1AQ/9,=RV1CC/8,=RV1CC/9,=RV3BA/9,=RV9WB/9/M,=RV9WMZ/9/P,=RV9WMZ/P,=RX3RC/9,=RX9WN/9/M,=RZ0OO/9, + =RZ6DR/9/M,=RZ9OO/9/M,=UA0MF/9,=UA3AKO/8,=UA4RC/9,=UA6A/9,=UA6CW/9,=UA6YGY/8,=UA6YGY/9,=UA8WAA/9, + =UA8WAA/9/P,=UA8WAA/M,=UA9CGL/9/M,=UA9SG/9,=UA9TO/9/M,=UA9WMN/9/P,=UB5O/8,=UE45AWT,=UE70AAA, + =UE9WDA/9, =R01DTV/8,=R14CWC/8,=R14CWC/9,=R150DMP,=R155AP,=R15CWC/8,=R15CWC/8/QRP,=R160DMP,=R16SVK,=R170GS/8, =R2015BP,=R2015R,=R2016DR,=R20EKB,=R22SKJ,=R27EKB,=R30ZF,=R35CZF,=R375I,=R44YETI/8,=R4WAB/9/P, =R55EPC,=R55EPC/P,=R6UAE/9,=R70NIK,=R7LZ/8,=R8FF/8,=R9GM/8,=R9GM/8/M,=RA/DL6XK,=RA/US5ETV, @@ -2475,10 +2490,11 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RD0B/8,=RK9AD/9/M,=RK9DR/N,=RM0B/9,=RM19NY,=RN16CW,=RN3QBG/9,=RP68DT,=RP68RG,=RP68TG,=RP68TK, =RP69GR,=RP70DT,=RP70G,=RP70GB,=RP70GR,=RP70MA,=RP70SA,=RP70UH,=RP71DT,=RP71GA,=RP71GA/M,=RP71GB, =RP71GR,=RP71LT,=RP71MO,=RP71SA,=RP72DT,=RP72FI,=RP72GB,=RP72GR,=RP72IM,=RP72KB,=RP72SA,=RP73DT, - =RP73GB,=RP73GR,=RP73IM,=RP73SA,=RT4C/8,=RT4W/9,=RT73BR,=RT73EB,=RT73FL,=RT73HE,=RT73KB,=RT73SK, - =RU22CR,=RU5D/8,=RU5D/9,=RV6LGY/9,=RV6LGY/9/M,=RV6LGY/9/P,=RV6MD/9,=RW4NX/9,=RW9C[20],=RX0SD/9, - =RX3Q/9,=RX9UL/9,=RY9C/P,=RZ37ZF,=RZ38ZF,=RZ39ZF,=UA0BA/8,=UA3FQ/8,=UA3IHJ/8,=UA4WHX/9,=UA8WAA/8, - =UA9MW/9,=UA9UAX/8,=UA9UAX/8/M,=UE16SR,=UE25F,=UE40CZF,=UE4NFF/9,=UE56S,=UE64RWA,=UE70SL,=UE75DT, + =RP73GB,=RP73GR,=RP73IM,=RP73SA,=RP74DT,=RP74GB,=RP74GR,=RP74IM,=RT4C/8,=RT4W/9,=RT73BR,=RT73EB, + =RT73FL,=RT73HE,=RT73KB,=RT73SK,=RU22CR,=RU5D/8,=RU5D/9,=RV6LGY/9,=RV6LGY/9/M,=RV6LGY/9/P, + =RV6MD/9,=RW4NX/9,=RW9C[20],=RX0SD/9,=RX3Q/9,=RX9UL/9,=RY9C/P,=RZ37ZF,=RZ38ZF,=RZ39ZF,=UA0BA/8, + =UA3FQ/8,=UA3IHJ/8,=UA4WHX/9,=UA8WAA/8,=UA9MW/9,=UA9UAX/8,=UA9UAX/8/M,=UE16SR,=UE25F,=UE40CZF, + =UE4NFF/9,=UE56S,=UE64RWA,=UE70SL,=UE75DT, R8H(18)[31],R8I(18)[31],R9H(18)[31],R9I(18)[31],RA8H(18)[31],RA8I(18)[31],RA9H(18)[31], RA9I(18)[31],RC8H(18)[31],RC8I(18)[31],RC9H(18)[31],RC9I(18)[31],RD8H(18)[31],RD8I(18)[31], RD9H(18)[31],RD9I(18)[31],RE8H(18)[31],RE8I(18)[31],RE9H(18)[31],RE9I(18)[31],RF8H(18)[31], @@ -2502,21 +2518,21 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RQ9I(18)[31],=RU9AZ/9(18)[31],=RV3LO/9(18)[31],=RZ9HK/FF(18)[31],=RZ9HX/FF(18)[31], =UA9JFN/9/M(18)[31],=UA9MUY/9(18)[31],=UA9OAP/9/P(18)[31],=UA9UAX/9/M(18)[31],=UE14TS(18)[31], =UE9FDA/9(18)[31], - R8J[20],R9J[20],RA8J[20],RA9J[20],RC8J[20],RC9J[20],RD8J[20],RD9J[20],RE8J[20],RE9J[20],RF8J[20], - RF9J[20],RG8J[20],RG9J[20],RJ8J[20],RJ9J[20],RK8J[20],RK9J[20],RL8J[20],RL9J[20],RM8J[20], - RM9J[20],RN8J[20],RN9J[20],RO8J[20],RO9J[20],RQ8J[20],RQ9J[20],RT8J[20],RT9J[20],RU8J[20], - RU9J[20],RV8J[20],RV9J[20],RW8J[20],RW9J[20],RX8J[20],RX9J[20],RY8J[20],RY9J[20],RZ8J[20], - RZ9J[20],U8J[20],U9J[20],UA8J[20],UA9J[20],UB8J[20],UB9J[20],UC8J[20],UC9J[20],UD8J[20],UD9J[20], - UE8J[20],UE9J[20],UF8J[20],UF9J[20],UG8J[20],UG9J[20],UH8J[20],UH9J[20],UI8J[20],UI9J[20], - =R11UND[20],=R120RJ[20],=R123JDR[20],=R15UGRA[20],=R16UGRA[20],=R18KSA[20],=R25ARCK/8[20], - =R2AEA/9[20],=R4YAC/9[20],=R8JAJ/M[20],=RA/UR8IF[20],=RA/UT2LA[20],=RA1QBH/9[20],=RA3ARS/9[20], - =RA3ARS/9/M[20],=RA3QQI/8[20],=RA4FCJ/9[20],=RA4HRM/9[20],=RA9WN/9[20],=RD4HM/9[20],=RJ9J[20], - =RK4PA/9[20],=RK6ANP/9[20],=RK6YM/8[20],=RK6YM/9[20],=RP67GS[20],=RP68GS[20],=RP68J[20], - =RP68LK[20],=RP69GS[20],=RP69SF[20],=RP70GS[20],=RP70LF[20],=RP70SF[20],=RP70SU[20],=RP70YF[20], - =RP71GS[20],=RP71LF[20],=RP71SF[20],=RP72DS[20],=RP72GS[20],=RP72SF[20],=RP72YF[20],=RP73GS[20], - =RP73SF[20],=RQ0C/8[20],=RU6YD/9[20],=RV6YM/9[20],=RW4HOH/9[20],=RW4LX/9[20],=RW6AHV/9[20], - =RW9WX/9[20],=RX3BP/9[20],=RX3BP/9/MM[20],=RZ5D/8[20],=RZ9WF/8[20],=RZ9WF/9[20],=UA3ZAF/9[20], - =UA6WIO/9[20],=UA9JFN/M[20], + R17[20],R8J[20],R9J[20],RA8J[20],RA9J[20],RC8J[20],RC9J[20],RD8J[20],RD9J[20],RE8J[20],RE9J[20], + RF8J[20],RF9J[20],RG8J[20],RG9J[20],RJ8J[20],RJ9J[20],RK8J[20],RK9J[20],RL8J[20],RL9J[20], + RM8J[20],RM9J[20],RN8J[20],RN9J[20],RO8J[20],RO9J[20],RQ8J[20],RQ9J[20],RT8J[20],RT9J[20], + RU8J[20],RU9J[20],RV8J[20],RV9J[20],RW8J[20],RW9J[20],RX8J[20],RX9J[20],RY8J[20],RY9J[20], + RZ8J[20],RZ9J[20],U8J[20],U9J[20],UA8J[20],UA9J[20],UB8J[20],UB9J[20],UC8J[20],UC9J[20],UD8J[20], + UD9J[20],UE8J[20],UE9J[20],UF8J[20],UF9J[20],UG8J[20],UG9J[20],UH8J[20],UH9J[20],UI8J[20], + UI9J[20],=R11UND[20],=R120RJ[20],=R123JDR[20],=R15UGRA[20],=R16UGRA[20],=R18KSA[20], + =R25ARCK/8[20],=R2AEA/9[20],=R4YAC/9[20],=R8JAJ/M[20],=RA/UR8IF[20],=RA/UT2LA[20],=RA1QBH/9[20], + =RA3ARS/9[20],=RA3ARS/9/M[20],=RA3QQI/8[20],=RA4FCJ/9[20],=RA4HRM/9[20],=RA60PD[20],=RA9WN/9[20], + =RD4HM/9[20],=RJ9J[20],=RK4PA/9[20],=RK6ANP/9[20],=RK6YM/8[20],=RK6YM/9[20],=RP67GS[20], + =RP68GS[20],=RP68J[20],=RP68LK[20],=RP69GS[20],=RP69SF[20],=RP70GS[20],=RP70LF[20],=RP70SF[20], + =RP70SU[20],=RP70YF[20],=RP71GS[20],=RP71LF[20],=RP71SF[20],=RP72DS[20],=RP72GS[20],=RP72SF[20], + =RP72YF[20],=RP73GS[20],=RP73SF[20],=RP74GS[20],=RQ0C/8[20],=RU6YD/9[20],=RV6YM/9[20], + =RW4HOH/9[20],=RW4LX/9[20],=RW6AHV/9[20],=RW9WX/9[20],=RX3BP/9[20],=RX3BP/9/MM[20],=RZ5D/8[20], + =RZ9WF/8[20],=RZ9WF/9[20],=UA3ZAF/9[20],=UA6WIO/9[20],=UA9JFN/M[20], R8K[20],R9K[20],RA8K[20],RA9K[20],RC8K[20],RC9K[20],RD8K[20],RD9K[20],RE8K[20],RE9K[20],RF8K[20], RF9K[20],RG8K[20],RG9K[20],RI9K[20],RJ8K[20],RJ9K[20],RK8K[20],RK9K[20],RL8K[20],RL9K[20], RM8K[20],RM9K[20],RN8K[20],RN9K[20],RO8K[20],RO9K[20],RQ8K[20],RQ9K[20],RT8K[20],RT9K[20], @@ -2532,16 +2548,16 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =UA1FBP/9[20],=UA1PBA/9[20],=UA1PBP/9[20],=UA3DFM/8[20],=UA3DFM/9[20],=UA3MGA/9[20],=UA6BTN/9[20], =UA9SUV/8[20], =R11QRP/8,=R11QRP/8/P,=R120RL,=R18POR,=R2015EP,=R2015LY,=R2015LY/8,=R22BIA,=R30STM,=R430LT, - =R4FAA/8,=R8MC/9,=R8MD/9,=RA/EW8ADX,=RA0UAC/8,=RA0UF/8,=RA3CW/9,=RA9JG/9,=RC1M/8/M,=RN9N/M, - =RO25TN,=RP67JH,=RP67LK,=RP67LL,=RP67TT,=RP68LS,=RP68TT,=RP69CM,=RP69DK,=RP69GP,=RP69LK,=RP69LL, - =RP69LS,=RP69MM,=RP69P,=RP69YN,=RP70GP,=RP70LL,=RP70LM,=RP70P,=RP70TM,=RP71GP,=RP71LL,=RP71P, - =RP72GP,=RP72LL,=RP72P,=RP72PJ,=RP73LL,=RP73P,=RR110RAEM,=RU22LR,=RW0QJ/9,=RX4W/8,=RX6DL/8, + =R4FAA/8,=R8MC/9,=R8MD/9,=RA/EW8ADX,=RA0UAC/8,=RA0UF/8,=RA3CW/9,=RA9JG/9,=RC1M/8/M,=RO25TN, + =RP67JH,=RP67LK,=RP67LL,=RP67TT,=RP68LS,=RP68TT,=RP69CM,=RP69DK,=RP69GP,=RP69LK,=RP69LL,=RP69LS, + =RP69MM,=RP69P,=RP69YN,=RP70GP,=RP70LL,=RP70LM,=RP70P,=RP70TM,=RP71GP,=RP71LL,=RP71P,=RP72GP, + =RP72LL,=RP72P,=RP72PJ,=RP73LL,=RP73P,=RP74LL,=RP74P,=RR110RAEM,=RU22LR,=RW0QJ/9,=RX4W/8,=RX6DL/8, =RX6DL/8/P,=RX6DL/8/P/QRP,=RX6DL/9/P,=RZ9MXM/9/M,=UB5O/8/P,=UE44Y/8,=UE9FDA/9/M,=UE9MDA/9, =R16CAN,=R1716K,=R1716M,=R1716O,=R1716S,=R9MJ/M,=RA22MX,=RA4CQ/9/M,=RA9MR/0,=RA9MX/P,=RC20MX, - =RK6YYA/9,=RN0SZ/9,=RN9N/9,=RP65MOH,=RP67MC,=RP67MD,=RP68MC,=RP68MD,=RP69MC,=RP69MD,=RP70GK, - =RP70MC,=RP70MD,=RP70OB,=RP70OF,=RP70OS,=RP71GK,=RP71MJ,=RP71OB,=RP72GK,=RP72MJ,=RP72OB,=RP72ZW, - =RP73GK,=RP73OB,=RP8M,=RT22MC,=RT22MD,=RV0SR/9,=RW22MW,=RY22MC,=UA1ZGD/9,=UA3AKO/9,=UA9UAX/M, - =UE55OM,=UE70KRM/9,=UE70KRM/9/M,=UE9OFF/9, + =RK6YYA/9,=RN0SZ/9,=RN9N/9,=RN9N/M,=RP65MOH,=RP67MC,=RP67MD,=RP68MC,=RP68MD,=RP69MC,=RP69MD, + =RP70GK,=RP70MC,=RP70MD,=RP70OB,=RP70OF,=RP70OS,=RP71GK,=RP71MJ,=RP71OB,=RP72GK,=RP72MJ,=RP72OB, + =RP72ZW,=RP73GK,=RP73OB,=RP74PO,=RP8M,=RT22MC,=RT22MD,=RV0SR/9,=RW22MW,=RY22MC,=UA1ZGD/9, + =UA3AKO/9,=UA9MA/M,=UE55OM,=UE70KRM/9,=UE70KRM/9/M,=UE9OFF/9, R8O(18)[31],R8P(18)[31],R9O(18)[31],R9P(18)[31],RA8O(18)[31],RA8P(18)[31],RA9O(18)[31], RA9P(18)[31],RC8O(18)[31],RC8P(18)[31],RC9O(18)[31],RC9P(18)[31],RD8O(18)[31],RD8P(18)[31], RD9O(18)[31],RD9P(18)[31],RE8O(18)[31],RE8P(18)[31],RE9O(18)[31],RE9P(18)[31],RF8O(18)[31], @@ -2568,10 +2584,10 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RA27OM(18)[31],=RA3DH/9(18)[31],=RA3ET/9(18)[31],=RA4FRH/0/P(18)[31],=RA9JJ/9/M(18)[31], =RA9MX/9(18)[31],=RC1M/9(18)[31],=RC1M/9/M(18)[31],=RG9O(18)[31],=RN9N/9/M(18)[31],=RO9O(18)[31], =RP67MP(18)[31],=RP68MP(18)[31],=RP70MP(18)[31],=RP71MP(18)[31],=RP72MP(18)[31],=RP73MP(18)[31], - =RP9OMP(18)[31],=RP9OW(18)[31],=RQ16CW(18)[31],=RR9O(18)[31],=RS9O(18)[31],=RU0ZM/9(18)[31], - =RU27OZ(18)[31],=RU6LA/9(18)[31],=RV0CJ/9(18)[31],=RW1AC/9(18)[31],=RW9MD/9/M(18)[31], - =RZ9MXM/9(18)[31],=UA0KDR/9(18)[31],=UA0ZAY/9(18)[31],=UA6WFO/9(18)[31],=UA9MA/9(18)[31], - =UA9MA/9/M(18)[31],=UA9MRA/9(18)[31],=UE80NSO(18)[31], + =RP74MP(18)[31],=RP9OMP(18)[31],=RP9OW(18)[31],=RQ16CW(18)[31],=RR9O(18)[31],=RS9O(18)[31], + =RU0ZM/9(18)[31],=RU27OZ(18)[31],=RU6LA/9(18)[31],=RV0CJ/9(18)[31],=RW1AC/9(18)[31], + =RW9MD/9/M(18)[31],=RZ9MXM/9(18)[31],=UA0KDR/9(18)[31],=UA0ZAY/9(18)[31],=UA6WFO/9(18)[31], + =UA9MA/9(18)[31],=UA9MA/9/M(18)[31],=UA9MRA/9(18)[31],=UE80NSO(18)[31], =R110RP,=R120RDP,=R120RZ,=R120TM,=R150RP,=R155RP,=R160RP,=R18URU,=RA22QF,=RC20QA,=RC20QC,=RC20QF, =RM20CC,=RM9RZ/A,=RM9RZ/P,=RP65R,=RP67KE,=RP67R,=RP68KE,=RP68R,=RP69KE,=RP69R,=RP70KE,=RP70R, =RP71R,=RP72KE,=RP72R,=RT73CW,=RT73JH,=RV3MN/9,=RW22QA,=RW22QA/8,=RW22QC,=RW22QC/8,=RW4NW/9, @@ -2619,8 +2635,9 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =R22ULM(18)[31],=R400N(18)[31],=R70B(18)[31],=R9/EW1TM(18)[31],=R9UAG/N(18)[31],=RA4CQ/9(18)[31], =RC4W/9(18)[31],=RD0L/9(18)[31],=RK6CG/9(18)[31],=RP65UMF(18)[31],=RP67KM(18)[31],=RP68KM(18)[31], =RP69KM(18)[31],=RP70KM(18)[31],=RP70NM(18)[31],=RP70UK(18)[31],=RP70ZF(18)[31],=RP71KM(18)[31], - =RP72KM(18)[31],=RP72NM(18)[31],=RP73KM(18)[31],=RP73NZ(18)[31],=RP73ZF(18)[31],=RT22UA(18)[31], - =RT77VV(18)[31],=RW4CG/9(18)[31],=RZ5D/9(18)[31],=UA9JFE/9/P(18)[31],=UE3ATV/9(18)[31], + =RP72KM(18)[31],=RP72NM(18)[31],=RP73KM(18)[31],=RP73NZ(18)[31],=RP73ZF(18)[31],=RP74KM(18)[31], + =RT22UA(18)[31],=RT77VV(18)[31],=RW4CG/9(18)[31],=RZ5D/9(18)[31],=UA9JFE/9/P(18)[31], + =UA9UAX/M(18)[31],=UE3ATV/9(18)[31], R8W(16),R9W(16),RA8W(16),RA9W(16),RC8W(16),RC9W(16),RD8W(16),RD9W(16),RE8W(16),RE9W(16),RF8W(16), RF9W(16),RG8W(16),RG9W(16),RJ8W(16),RJ9W(16),RK8W(16),RK9W(16),RL8W(16),RL9W(16),RM8W(16), RM9W(16),RN8W(16),RN9W(16),RO8W(16),RO9W(16),RQ8W(16),RQ9W(16),RT8W(16),RT9W(16),RU8W(16), @@ -2636,15 +2653,15 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RP67MG(16),=RP67NG(16),=RP67RK(16),=RP67SW(16),=RP67UF(16),=RP68GM(16),=RP68NK(16),=RP68UF(16), =RP69GI(16),=RP69PW(16),=RP69UF(16),=RP70GI(16),=RP70GM(16),=RP70LS(16),=RP70NK(16),=RP70UF(16), =RP70ZO(16),=RP71GI(16),=RP71GM(16),=RP71UF(16),=RP72AR(16),=RP72GI(16),=RP72GM(16),=RP72UF(16), - =RP72WU(16),=RP73AR(16),=RP73GI(16),=RP73UF(16),=RP73WU(16),=RT22WF(16),=RT2F/4(16),=RT2F/4/M(16), - =RT2F/9/M(16),=RT73EA(16),=RT73EL(16),=RT8A/4(16),=RT9W(16),=RT9W/P(16),=RU110RAEM(16), - =RU20WC(16),=RU22WZ(16),=RU27WB(16),=RU27WF(16),=RU27WN(16),=RU27WO(16),=RU3HD/9/P(16), - =RU90WZ(16),=RU9KC/4/M(16),=RU9SO/4(16),=RU9SO/4/P(16),=RV22WB(16),=RV2FZ/9(16),=RV90WB(16), - =RV9CHB/4(16),=RW3SN/9(16),=RW3XX/9(16),=RW4WA/9/P(16),=RW90WC(16),=RW9FWR/9/M(16),=RW9JZ/4(16), - =RW9JZ/9(16),=RX22WN(16),=RZ16WF(16),=RZ90W(16),=RZ90WU(16),=UA0AZA/9(16),=UA1AAE/9(16), - =UA1ZPC/9(16),=UA4LU/9/P(16),=UA4PIE/9(16),=UA4PIE/9/M(16),=UA4PIE/9/P(16),=UA4PJM/9(16), - =UA4PJM/9/M(16),=UA4PJM/9/P(16),=UA4PXR/9/M(16),=UA9KAA/4(16),=UA9KAA/9(16),=UB5O/4/M(16), - =UE10RFF/4(16),=UE90W(16), + =RP72WU(16),=RP73AR(16),=RP73GI(16),=RP73UF(16),=RP73WU(16),=RP74GI(16),=RP74UF(16),=RT22WF(16), + =RT2F/4(16),=RT2F/4/M(16),=RT2F/9/M(16),=RT73EA(16),=RT73EL(16),=RT8A/4(16),=RT9W(16),=RT9W/P(16), + =RU110RAEM(16),=RU20WC(16),=RU22WZ(16),=RU27WB(16),=RU27WF(16),=RU27WN(16),=RU27WO(16), + =RU3HD/9/P(16),=RU90WZ(16),=RU9KC/4/M(16),=RU9SO/4(16),=RU9SO/4/P(16),=RV22WB(16),=RV2FZ/9(16), + =RV90WB(16),=RV9CHB/4(16),=RW3SN/9(16),=RW3XX/9(16),=RW4WA/9/P(16),=RW90WC(16),=RW9FWR/9/M(16), + =RW9JZ/4(16),=RW9JZ/9(16),=RX22WN(16),=RZ16WF(16),=RZ90W(16),=RZ90WU(16),=UA0AZA/9(16), + =UA1AAE/9(16),=UA1ZPC/9(16),=UA4LU/9/P(16),=UA4PIE/9(16),=UA4PIE/9/M(16),=UA4PIE/9/P(16), + =UA4PJM/9(16),=UA4PJM/9/M(16),=UA4PJM/9/P(16),=UA4PXR/9/M(16),=UA9KAA/4(16),=UA9KAA/9(16), + =UB5O/4/M(16),=UE10RFF/4(16),=UE90W(16), R8Y(18)[31],R9Y(18)[31],RA8Y(18)[31],RA9Y(18)[31],RC8Y(18)[31],RC9Y(18)[31],RD8Y(18)[31], RD9Y(18)[31],RE8Y(18)[31],RE9Y(18)[31],RF8Y(18)[31],RF9Y(18)[31],RG8Y(18)[31],RG9Y(18)[31], RJ8Y(18)[31],RJ9Y(18)[31],RK8Y(18)[31],RK9Y(18)[31],RL8Y(18)[31],RL9Y(18)[31],RM8Y(18)[31], @@ -2669,8 +2686,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: U8Z(18)[31],U9Z(18)[31],UA8Z(18)[31],UA9Z(18)[31],UB8Z(18)[31],UB9Z(18)[31],UC8Z(18)[31], UC9Z(18)[31],UD8Z(18)[31],UD9Z(18)[31],UE8Z(18)[31],UE9Z(18)[31],UF8Z(18)[31],UF9Z(18)[31], UG8Z(18)[31],UG9Z(18)[31],UH8Z(18)[31],UH9Z(18)[31],UI8Z(18)[31],UI9Z(18)[31], - =RA/IK5MIC/P(18)[31],=RC9YA/9/M(18)[31],=RW9MD/9/P(18)[31],=UA0KBG/9/P(18)[31],=UA9MA/M(18)[31], - =UA9MAC/9(18)[31], + =RA/IK5MIC/P(18)[31],=RC9YA/9/M(18)[31],=RW9MD/9/P(18)[31],=UA0KBG/9/P(18)[31],=UA9MAC/9(18)[31], R0A(18)[32],R0B(18)[32],R0H(18)[32],RA0A(18)[32],RA0B(18)[32],RA0H(18)[32],RC0A(18)[32], RC0B(18)[32],RC0H(18)[32],RD0A(18)[32],RD0B(18)[32],RD0H(18)[32],RE0A(18)[32],RE0B(18)[32], RE0H(18)[32],RF0A(18)[32],RF0B(18)[32],RF0H(18)[32],RG0A(18)[32],RG0B(18)[32],RG0H(18)[32], @@ -2692,13 +2708,13 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RAEM(18)[32],=RD110RAEM(18)[32],=RI0B(18)[32],=RI0BV/0(18)[32],=RK3DZJ/9(18)[32],=RK56GC(18)[32], =RK6BBM/9(18)[32],=RK80KEDR(18)[32],=RL5G/9(18)[32],=RM0A(18)[32],=RM2D/9(18)[32], =RM9RZ/0(18)[32],=RN0A(18)[32],=RN110RAEM(18)[32],=RN110RAEM/P(18)[32],=RP70KV(18)[32], - =RP70RS(18)[32],=RP73KT(18)[32],=RT22SA(18)[32],=RT9K/9(18)[32],=RU19NY(18)[32],=RU3FF/0(18)[32], - =RU4CO/0(18)[32],=RV3DHC/0(18)[32],=RV3DHC/0/P(18)[32],=RV9WP/9(18)[32],=RW3XN/0(18)[32], - =RW3YC/0(18)[32],=RW3YC/9(18)[32],=RY1AAB/9(18)[32],=RY1AAB/9/M(18)[32],=RZ3DSA/0(18)[32], - =RZ3DZS/0(18)[32],=RZ9ON/9(18)[32],=UA0ACG/0(18)[32],=UA0FCB/0(18)[32],=UA0FCB/0/P(18)[32], - =UA0WG/0(18)[32],=UA0WW/0(18)[32],=UA0WW/M(18)[32],=UA0WY/0(18)[32],=UA3ADN/0(18)[32], - =UA4LU/0(18)[32],=UA4PT/0(18)[32],=UA6BTN/0(18)[32],=UA9UAX/9(18)[32],=UA9WDK/0(18)[32], - =UB1AJQ/0(18)[32],=UE1WFF/0(18)[32], + =RP70RS(18)[32],=RP73KT(18)[32],=RP74KT(18)[32],=RT22SA(18)[32],=RT9K/9(18)[32],=RU19NY(18)[32], + =RU3FF/0(18)[32],=RU4CO/0(18)[32],=RV3DHC/0(18)[32],=RV3DHC/0/P(18)[32],=RV9WP/9(18)[32], + =RW3XN/0(18)[32],=RW3YC/0(18)[32],=RW3YC/9(18)[32],=RY1AAB/9(18)[32],=RY1AAB/9/M(18)[32], + =RZ3DSA/0(18)[32],=RZ3DZS/0(18)[32],=RZ9ON/9(18)[32],=UA0ACG/0(18)[32],=UA0FCB/0(18)[32], + =UA0FCB/0/P(18)[32],=UA0WG/0(18)[32],=UA0WW/0(18)[32],=UA0WW/M(18)[32],=UA0WY/0(18)[32], + =UA3ADN/0(18)[32],=UA4LU/0(18)[32],=UA4PT/0(18)[32],=UA6BTN/0(18)[32],=UA9UAX/9(18)[32], + =UA9WDK/0(18)[32],=UB1AJQ/0(18)[32],=UE1WFF/0(18)[32], =R100D(18)[22],=R100DI(18)[22],=R3CA/9(18)[22],=RA3XR/0(18)[22],=RA9LI/0(18)[22],=RI0BDI(18)[22], =RS0B(18)[22],=RS0B/P(18)[22],=RV3EFH/0(18)[22],=RW1AI/9(18)[22],=RW3GW/0(18)[22], =RX6LMQ/0(18)[22],=RZ9DX/0(18)[22],=RZ9DX/0/A(18)[22],=RZ9DX/0/P(18)[22],=RZ9DX/9(18)[22], @@ -2771,11 +2787,11 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RN1NS/0(19)[34],=RP0L(19)[34],=RP0LPK(19)[34],=RP60P(19)[34],=RP66V(19)[34],=RP67SD(19)[34], =RP67V(19)[34],=RP68SD(19)[34],=RP68V(19)[34],=RP69SD(19)[34],=RP69V(19)[34],=RP70DG(19)[34], =RP70SD(19)[34],=RP70V(19)[34],=RP71DG(19)[34],=RP71SD(19)[34],=RP71V(19)[34],=RP72DG(19)[34], - =RP72SD(19)[34],=RP72V(19)[34],=RP73DG(19)[34],=RP73SD(19)[34],=RP73V(19)[34],=RU3BY/0(19)[34], - =RU5D/0(19)[34],=RV1AW/0(19)[34],=RV3DSA/0(19)[34],=RW22GO(19)[34],=RW3LG/0(19)[34], - =RX15RX(19)[34],=UA0SDX/0(19)[34],=UA0SIK/0(19)[34],=UA3AHA/0(19)[34],=UA4SBZ/0(19)[34], - =UA6MF/0(19)[34],=UA7R/0(19)[34],=UB0LAP/P(19)[34],=UC0LAF/P(19)[34],=UE1RFF/0(19)[34], - =UE70MA(19)[34],=UE75L(19)[34], + =RP72SD(19)[34],=RP72V(19)[34],=RP73DG(19)[34],=RP73SD(19)[34],=RP73V(19)[34],=RP74DG(19)[34], + =RP74SD(19)[34],=RP74V(19)[34],=RU3BY/0(19)[34],=RU5D/0(19)[34],=RV1AW/0(19)[34], + =RV3DSA/0(19)[34],=RW22GO(19)[34],=RW3LG/0(19)[34],=RX15RX(19)[34],=UA0SDX/0(19)[34], + =UA0SIK/0(19)[34],=UA3AHA/0(19)[34],=UA4SBZ/0(19)[34],=UA6MF/0(19)[34],=UA7R/0(19)[34], + =UB0LAP/P(19)[34],=UC0LAF/P(19)[34],=UE1RFF/0(19)[34],=UE70MA(19)[34],=UE75L(19)[34], R0O(18)[32],RA0O(18)[32],RC0O(18)[32],RD0O(18)[32],RE0O(18)[32],RF0O(18)[32],RG0O(18)[32], RJ0O(18)[32],RK0O(18)[32],RL0O(18)[32],RM0O(18)[32],RN0O(18)[32],RO0O(18)[32],RQ0O(18)[32], RT0O(18)[32],RU0O(18)[32],RV0O(18)[32],RW0O(18)[32],RX0O(18)[32],RY0O(18)[32],RZ0O(18)[32], @@ -2813,7 +2829,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RA0SP/RP(18)[32],=RA0SR/RP(18)[32],=RA110RAEM(18)[32],=RA3TO/0(18)[32],=RA4CSX/0/P(18)[32], =RA9JG/0(18)[32],=RA9JG/0/P(18)[32],=RA9OBG/0(18)[32],=RA9USU/8(18)[32],=RD0L/0(18)[32], =RK17CW(18)[32],=RK9MZZ/0(18)[32],=RN4HIT/0(18)[32],=RP0S(18)[32],=RP0SXR(18)[32],=RP0SZZ(18)[32], - =RP67ST(18)[32],=RP70AB(18)[32],=RP72AB(18)[32],=RP73AB(18)[32],=RQ0C/9(18)[32], + =RP67ST(18)[32],=RP70AB(18)[32],=RP72AB(18)[32],=RP73AB(18)[32],=RP74AB(18)[32],=RQ0C/9(18)[32], =RV3ACA/0/M(18)[32],=RV6AJ/0(18)[32],=RV7AD/0(18)[32],=RV9JD/0(18)[32],=RW4YA/0(18)[32], =RW4YA/9(18)[32],=RX3AT/0(18)[32],=RX3DFH/0(18)[32],=RX9WN/0(18)[32],=RX9WN/0/M(18)[32], =RX9WN/0/P(18)[32],=RZ0SO/P(18)[32],=UA0KBG/0(18)[32],=UA0KBG/9(18)[32],=UA3EDQ/0(18)[32], @@ -2828,15 +2844,15 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RP0W(18)[31],=RP0W/P(18)[31],=RP0WWS(18)[31],=RP70SL(18)[31],=RP72SL(18)[31],=RV0AE/0/FF(18)[31], =RZ0AM/0(18)[31],=RZ22WW(18)[31],=UA0FCB/P(18)[31],=UA9UAX/0/M(18)[31],=UB5O/9(18)[31], =UE0ARD/0(18)[31],=UE10RFF/9(18)[31],=UE1RFF/0/P(18)[31],=UE9FDA/0(18)[31],=UE9FDA/0/M(18)[31], - =R23RRC(19)[25],=UA6HMC/0(19)[25], + =R205NEW(19)[25],=R23RRC(19)[25],=UA6HMC/0(19)[25], R0Y(23)[32],RA0Y(23)[32],RC0Y(23)[32],RD0Y(23)[32],RE0Y(23)[32],RF0Y(23)[32],RG0Y(23)[32], RJ0Y(23)[32],RK0Y(23)[32],RL0Y(23)[32],RM0Y(23)[32],RN0Y(23)[32],RO0Y(23)[32],RQ0Y(23)[32], RT0Y(23)[32],RU0Y(23)[32],RV0Y(23)[32],RW0Y(23)[32],RX0Y(23)[32],RY0Y(23)[32],RZ0Y(23)[32], U0Y(23)[32],UA0Y(23)[32],UB0Y(23)[32],UC0Y(23)[32],UD0Y(23)[32],UE0Y(23)[32],UF0Y(23)[32], - UG0Y(23)[32],UH0Y(23)[32],UI0Y(23)[32],=R3YAB/9/P(23)[32],=R9OOO/9/M(23)[32],=R9OOO/9/P(23)[32], - =R9OY/9/P(23)[32],=RA0AJ/0/P(23)[32],=RA0WA/0/P(23)[32],=RA9YME/0(23)[32],=RK3BY/0(23)[32], - =RP0Y(23)[32],=RX0AE/0(23)[32],=RX0AT/0/P(23)[32],=UA0ADU/0(23)[32],=UA0WGD/0(23)[32], - =UA9ZZ/0/P(23)[32],=UE0OFF/0(23)[32],=UE44Y/9(23)[32],=UE70Y(23)[32], + UG0Y(23)[32],UH0Y(23)[32],UI0Y(23)[32],=R0WX/P(23)[32],=R3YAB/9/P(23)[32],=R9OOO/9/M(23)[32], + =R9OOO/9/P(23)[32],=R9OY/9/P(23)[32],=RA0AJ/0/P(23)[32],=RA0WA/0/P(23)[32],=RA9YME/0(23)[32], + =RK3BY/0(23)[32],=RP0Y(23)[32],=RX0AE/0(23)[32],=RX0AT/0/P(23)[32],=UA0ADU/0(23)[32], + =UA0WGD/0(23)[32],=UA9ZZ/0/P(23)[32],=UE0OFF/0(23)[32],=UE44Y/9(23)[32],=UE70Y(23)[32], R0X(19)[35],R0Z(19)[35],RA0X(19)[35],RA0Z(19)[35],RC0X(19)[35],RC0Z(19)[35],RD0X(19)[35], RD0Z(19)[35],RE0X(19)[35],RE0Z(19)[35],RF0X(19)[35],RF0Z(19)[35],RG0X(19)[35],RG0Z(19)[35], RI0X(19)[35],RI0Z(19)[35],RJ0X(19)[35],RJ0Z(19)[35],RK0X(19)[35],RK0Z(19)[35],RL0X(19)[35], @@ -2921,12 +2937,12 @@ Marshall Islands: 31: 65: OC: 9.08: -167.33: -12.0: V7: Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8: V8; Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: - CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190416, + CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190523, =CF7AAW/1,=CK7IG/1,=VA3QSL/1,=VA3WR/1,=VE1REC/LH,=VE1REC/M/LH,=VE3RSA/1,=VE7IG/1, CF2[4],CG2[4],CJ2[4],CK2[4],VA2[4],VB2[4],VC2[4],VE2[4],VG2[4],VX2[4],XL2[4],XM2[4],=4Y1CAO[4], - =CY2ZT/2[4],=VA3ELE/2[4],=VA3MPM/2[4],=VA7AQ/P[4],=VE2/G3ZAY/P[4],=VE2/M0BLF/P[4],=VE2FK[9], - =VE2HAY/P[4],=VE2MAM/P[4],=VE2OV/P[4],=VE3AP/2[4],=VE3EXY/2[4],=VE3GF/2[4],=VE3GNO/2[4], - =VE3IAC/2[4],=VE3ZZ/2[4],=VE6TC/2[4],=VE7IG/2[4],=XO0ICE/2[4], + =CY2ZT/2[4],=VA3MPM/2[4],=VA7AQ/P[4],=VE2/G3ZAY/P[4],=VE2/M0BLF/P[4],=VE2FK[9],=VE2HAY/P[4], + =VE2MAM/P[4],=VE2OV/P[4],=VE3AP/2[4],=VE3EXY/2[4],=VE3GF/2[4],=VE3GNO/2[4],=VE3IAC/2[4], + =VE3ZZ/2[4],=VE6TC/2[4],=VE7IG/2[4],=XO0ICE/2[4], CF3(4)[4],CG3(4)[4],CJ3(4)[4],CK3(4)[4],VA3(4)[4],VB3(4)[4],VC3(4)[4],VE3(4)[4],VG3(4)[4], VX3(4)[4],XL3(4)[4],XM3(4)[4],=CF7EWK/3(4)[4],=CI0XN/P(4)[4],=CJ7EWK/3(4)[4],=VA7EWK/3(4)[4], =VE1RM/3(4)[4],=VE2AEJ/3(4)[4],=VE2MAM/3(4)[4],=VE2PK/3(4)[4],=VE2QLF/3(4)[4],=VE2QV/3(4)[4], @@ -2956,17 +2972,17 @@ Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: =CF2RC(2)[4],=CF2VVV(2)[4],=CJ2BY(2)[4],=CJ2KCE(2)[4],=K3FMQ/VE2(2)[4],=K5YG/VE2(2)[4], =KD3RF/VE2(2)[4],=KD3TB/VE2(2)[4],=N5ZO/VE2(2)[4],=VA1CN/2(2)[4],=VA2BK(2)[4],=VA2BY(2)[4], =VA2KCE(2)[4],=VA2MCJ/VE2(2)[4],=VA2RAG(2)[4],=VA2RC(2)[4],=VA2VFT(2)[4],=VA2VVV(2)[4], - =VA3NA/2(2)[4],=VB2C(2)[4],=VB2R(2)[4],=VB2T(2)[4],=VB2V(2)[4],=VB2W(2)[4],=VC2C(2)[4], - =VC2EME(2)[4],=VC2Q(2)[4],=VC2R(2)[4],=VC2X(2)[4],=VC3W/2(2)[4],=VE2/JA8BMK(2)[4],=VE2/K5YG(2)[4], - =VE2/KD3RF(2)[4],=VE2/KD3RF/M(2)[4],=VE2/N1NK(2)[4],=VE2/UT3UA(2)[4],=VE2/W2NTJ(2)[4], - =VE2/W5GED(2)[4],=VE2A(2)[4],=VE2ACP/P(2)[4],=VE2AE(2)[4],=VE2CSI(2)[4],=VE2CVI(2)[4], - =VE2DXY(2)[4],=VE2EKA(2)[4],=VE2EW(2)[4],=VE2FDJ/2(2)[4],=VE2GHZ/2(2)[4],=VE2HRI(2)[4], - =VE2IDX(2)[4],=VE2III(2)[4],=VE2IM(2)[4],=VE2KK(2)[4],=VE2NN(2)[4],=VE2OTT(2)[4],=VE2PR(2)[4], - =VE2PRG(2)[4],=VE2QIP/2(2)[4],=VE2WDX(2)[4],=VE2XAA/2(2)[4],=VE2XB/2(2)[4],=VE2Z(2)[4], - =VE3AXC/2(2)[4],=VE3CWU/2(2)[4],=VE3EY/2(2)[4],=VE3FDX/2(2)[4],=VE3JM/2(2)[4],=VE3NE/2(2)[4], - =VE3NWA/2(2)[4],=VE3RHJ/2(2)[4],=VE3ZF/2(2)[4],=VE7ACN/VE2(2)[4],=VE7MID/VE2(2)[4],=VE8DX/2(2)[4], - =W0SD/VE2(2)[4],=W2NTJ/VE2(2)[4],=W4TMO/VE2(2)[4],=W5GED/VE2(2)[4],=WB8YTZ/VE2(2)[4], - =XM3NE/2(2)[4], + =VA3ELE/2(2)[4],=VA3NA/2(2)[4],=VA7XW/VE2(2)[4],=VB2C(2)[4],=VB2R(2)[4],=VB2T(2)[4],=VB2V(2)[4], + =VB2W(2)[4],=VC2C(2)[4],=VC2EME(2)[4],=VC2Q(2)[4],=VC2R(2)[4],=VC2X(2)[4],=VC3W/2(2)[4], + =VE2/JA8BMK(2)[4],=VE2/K5YG(2)[4],=VE2/KD3RF(2)[4],=VE2/KD3RF/M(2)[4],=VE2/N1NK(2)[4], + =VE2/UT3UA(2)[4],=VE2/W2NTJ(2)[4],=VE2/W5GED(2)[4],=VE2A(2)[4],=VE2ACP/P(2)[4],=VE2AE(2)[4], + =VE2CSI(2)[4],=VE2CVI(2)[4],=VE2DXY(2)[4],=VE2EKA(2)[4],=VE2EW(2)[4],=VE2FDJ/2(2)[4], + =VE2GHZ/2(2)[4],=VE2HRI(2)[4],=VE2IDX(2)[4],=VE2III(2)[4],=VE2IM(2)[4],=VE2KK(2)[4],=VE2NN(2)[4], + =VE2OTT(2)[4],=VE2PR(2)[4],=VE2PRG(2)[4],=VE2QIP/2(2)[4],=VE2TWO(2)[4],=VE2WDX(2)[4], + =VE2XAA/2(2)[4],=VE2XB/2(2)[4],=VE2Z(2)[4],=VE3AXC/2(2)[4],=VE3CWU/2(2)[4],=VE3EY/2(2)[4], + =VE3FDX/2(2)[4],=VE3JM/2(2)[4],=VE3NE/2(2)[4],=VE3NWA/2(2)[4],=VE3RHJ/2(2)[4],=VE3ZF/2(2)[4], + =VE7ACN/VE2(2)[4],=VE7MID/VE2(2)[4],=VE8DX/2(2)[4],=W0SD/VE2(2)[4],=W2NTJ/VE2(2)[4], + =W4TMO/VE2(2)[4],=W5GED/VE2(2)[4],=WB8YTZ/VE2(2)[4],=XM3NE/2(2)[4], =K8JJ/VY0(4)[4],=K9AJ/VY0(4)[4],=KD6WW/VY0(4)[4],=VY0A(4)[4],=VY0V(4)[4]; Australia: 30: 59: OC: -23.70: -132.33: -10.0: VK: AX,VH,VI,VJ,VK,VL,VM,VN,VZ,=VK9MAV, From b985d415916fb15387b0f8e111ea77541822461d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 4 Jun 2019 14:47:35 +0100 Subject: [PATCH 321/367] Bump RC number --- Release_Notes.txt | 9 +++++++++ Versions.cmake | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Release_Notes.txt b/Release_Notes.txt index 60fa0aa20..60b79de8e 100644 --- a/Release_Notes.txt +++ b/Release_Notes.txt @@ -12,6 +12,15 @@ Copyright 2001 - 2019 by Joe Taylor, K1JT. + Release: WSJT-X 2.1.0-rc7 + June 3, 2019 + ------------------------- + +This release is a bug fix only release addressing regressions in the +prior RC6 release. There are no functional changes other than an +updated AD1C CTY.DAT database. + + Release: WSJT-X 2.1.0-rc6 May 30, 2019 ------------------------- diff --git a/Versions.cmake b/Versions.cmake index 45cd79820..3e2fc87cd 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -2,5 +2,5 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) -set (WSJTX_RC 7) # release candidate number, comment out or zero for development versions +set (WSJTX_RC 8) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build From d3121bfedd57038b8a66a33dbd8606a8e909e7f3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 4 Jun 2019 10:19:35 -0400 Subject: [PATCH 322/367] Correct the open() statement in readwav.f90. --- lib/jt9.f90 | 4 ++-- lib/readwav.f90 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 67e7ac319..0e99a7592 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -139,7 +139,7 @@ program jt9 read (optarg(:arglen), *) nexp_decode end select end do - + if (display_help .or. stat .lt. 0 & .or. (.not. read_files .and. remain .gt. 0) & .or. (read_files .and. remain .lt. 1)) then @@ -234,7 +234,7 @@ program jt9 read(unit=wav%lun,end=3) shared_data%id2(k-kstep+1:k) go to 4 3 call timer('read_wav',1) - print*,'EOF on input file ',infile + print*,'EOF on input file ',trim(infile) exit 4 call timer('read_wav',1) nhsym=(k-2048)/kstep diff --git a/lib/readwav.f90 b/lib/readwav.f90 index ebc30c9a0..5cd866e68 100644 --- a/lib/readwav.f90 +++ b/lib/readwav.f90 @@ -53,7 +53,7 @@ contains type(riff_descriptor) :: desc character(len=4) :: riff_type - open (newunit=this%lun, file=filename, access='stream', form='unformatted', status='old') + open (unit=this%lun, file=filename, access='stream',status='old') read (unit=this%lun) desc,riff_type inquire (unit=this%lun, pos=filepos) do From 6a2ac44916d73ffaed3a57fb3c8bc7125231bac4 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 4 Jun 2019 10:39:43 -0400 Subject: [PATCH 323/367] Use LU=26 in readwav.f90. --- lib/readwav.f90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/readwav.f90 b/lib/readwav.f90 index 5cd866e68..253690496 100644 --- a/lib/readwav.f90 +++ b/lib/readwav.f90 @@ -53,6 +53,7 @@ contains type(riff_descriptor) :: desc character(len=4) :: riff_type + this%lun=26 open (unit=this%lun, file=filename, access='stream',status='old') read (unit=this%lun) desc,riff_type inquire (unit=this%lun, pos=filepos) @@ -67,5 +68,6 @@ contains end if filepos = filepos + (desc%size + 1) / 2 * 2 ! pad to even alignment end do + return end subroutine read end module readwav From 97be1b46b90c11312905c6e295a68c933eec8ee7 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 4 Jun 2019 14:53:45 -0500 Subject: [PATCH 324/367] Add more protection against the i0 crash that has occurred in getcandidates4.f90. --- lib/ft4/ft4_downsample.f90 | 4 ++-- lib/ft4/getcandidates4.f90 | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index ed55fb9a0..f908c6c44 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -40,8 +40,8 @@ subroutine ft4_downsample(dd,newdata,f0,c) c1=0. if(i0.ge.0 .and. i0.le.NMAX/2) c1(0)=cx(i0) do i=1,NFFT2/2 - if(i0+i.le.NMAX/2) c1(i)=cx(i0+i) - if(i0-i.ge.0) c1(NFFT2-i)=cx(i0-i) + if(i0+i.ge.0 .and. i0+i.le.NMAX/2) c1(i)=cx(i0+i) + if(i0-i.ge.0 .and. i0-i.le.NMAX/2) c1(NFFT2-i)=cx(i0-i) enddo c1=c1*window/NFFT2 call four2a(c1,NFFT2,1,1,1) !c2c FFT back to time domain diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index f7cef02ef..951129915 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -47,7 +47,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & nfa=fa/df if(nfa.lt.nint(200.0/df)) nfa=nint(200.0/df) nfb=fb/df - if(nfb.gt.nint(5000.0/df)) nfb=nint(5000.0/df) + if(nfb.gt.nint(4910.0/df)) nfb=nint(4910.0/df) ncand=0 call ft4_baseline(savg,nfa,nfb,sbase) if(any(sbase(nfa:nfb).le.0)) return @@ -60,13 +60,9 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & del=0. if(den.ne.0.0) del=0.5*(savsm(i-1)-savsm(i+1))/den fpeak=(i+del)*df+f_offset - if(fpeak.lt.0.0 .or. fpeak.gt.4910.0) cycle + if(fpeak.lt.200.0 .or. fpeak.gt.4910.0) cycle speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del ncand=ncand+1 - if(ncand.gt.maxcand) then - ncand=maxcand - exit - endif candidate(1,ncand)=fpeak candidate(2,ncand)=-99.99 candidate(3,ncand)=speak From f9e9bc01a1bf0d22b04d0c8994c0c61803b6a183 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 5 Jun 2019 10:17:59 -0500 Subject: [PATCH 325/367] Update some comments, delete obsolete files. --- lib/ft4/ft4_downsample.f90 | 3 - lib/ft4/ft4_params.f90 | 2 +- lib/ft4/ft4b.f90 | 489 ------------------------------------- lib/ft4/ft4d.f90 | 83 ------- lib/ft4/genft4.f90 | 2 +- 5 files changed, 2 insertions(+), 577 deletions(-) delete mode 100644 lib/ft4/ft4b.f90 delete mode 100644 lib/ft4/ft4d.f90 diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index f908c6c44..bbe53a2a2 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -1,8 +1,5 @@ subroutine ft4_downsample(dd,newdata,f0,c) -! Input: real data in dd() at sample rate 12000 Hz -! Output: Complex data in c(), sampled at 1200 Hz - include 'ft4_params.f90' parameter (NFFT2=NMAX/NDOWN) real dd(NMAX) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 2914260d8..43abc573a 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -1,5 +1,5 @@ ! FT4 -! LDPC(174,91) code, four 4x4 Costas arrays for Sync +! LDPC(174,91) code, four 4x4 Costas arrays for sync, ramp-up and ramp-down symbols parameter (KK=91) !Information bits (77 + CRC14) parameter (ND=87) !Data symbols diff --git a/lib/ft4/ft4b.f90 b/lib/ft4/ft4b.f90 deleted file mode 100644 index d425277ef..000000000 --- a/lib/ft4/ft4b.f90 +++ /dev/null @@ -1,489 +0,0 @@ -subroutine ft4b(cdatetime0,tbuf,nfa,nfb,nQSOProgress,ncontest,nfqso, & - iwave,ndecodes,mycall,hiscall,cqstr,line,data_dir) - - use packjt77 - include 'ft4_params.f90' - parameter (NSS=NSPS/NDOWN) - - character message*37,msgsent*37,msg0*37 - character c77*77 - character*61 line,linex(100) - character*37 decodes(100) - character*512 data_dir,fname - character*17 cdatetime0 - character*12 mycall,hiscall - character*12 mycall0,hiscall0 - character*6 hhmmss - character*4 cqstr,cqstr0 - - complex cd2(0:NMAX/NDOWN-1) !Complex waveform - complex cb(0:NMAX/NDOWN-1) - complex cd(0:NN*NSS-1) !Complex waveform - complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) - complex csymb(NSS) - complex cs(0:3,NN) - real s4(0:3,NN) - - real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) - real a(5) - real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) - real s2(0:255) - real candidate(3,100) - real savg(NH1),sbase(NH1) - - integer apbits(2*ND) - integer apmy_ru(28),aphis_fd(28) - integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) - integer*2 iwave(NMAX) !Raw received data - integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) - integer*1 hbits(2*NN) - integer graymap(0:3) - integer ip(1) - integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 - integer naptypes(0:5,4) ! nQSOProgress, decoding pass - integer mcq(29) - integer mrrr(19),m73(19),mrr73(19) - - logical nohiscall,unpk77_success - logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits - logical first, dobigfft - - data icos4a/0,1,3,2/ - data icos4b/1,0,2,3/ - data icos4c/2,3,1,0/ - data icos4d/3,2,0,1/ - data graymap/0,1,3,2/ - data msg0/' '/ - data first/.true./ - data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ - data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ - data m73/0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1/ - data mrr73/0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1/ - data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & - 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & - 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ - save fs,dt,tt,txt,twopi,h,one,first,linex,apbits,nappasses,naptypes, & - mycall0,hiscall0,msg0,cqstr0,ctwk2 - - call clockit('ft4_deco',0) - hhmmss=cdatetime0(8:13) - - if(first) then - fs=12000.0/NDOWN !Sample rate after downsampling - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - txt=NZ*dt !Transmission length (s) without ramp up/down - twopi=8.0*atan(1.0) - h=1.0 - one=.false. - do i=0,255 - do j=0,7 - if(iand(i,2**j).ne.0) one(i,j)=.true. - enddo - enddo - - do idf=-16,16 - a=0. - a(1)=real(idf) - ctwk=1. - call clockit('twkfreq1',0) - call twkfreq1(ctwk,2*NSS,fs/2.0,a,ctwk2(:,idf)) - call clockit('twkfreq1',1) - enddo - - mrrr=2*mod(mrrr+rvec(59:77),2)-1 - m73=2*mod(m73+rvec(59:77),2)-1 - mrr73=2*mod(mrr73+rvec(59:77),2)-1 - nappasses(0)=2 - nappasses(1)=2 - nappasses(2)=2 - nappasses(3)=2 - nappasses(4)=2 - nappasses(5)=3 - -! iaptype -!------------------------ -! 1 CQ ??? ??? (29 ap bits) -! 2 MyCall ??? ??? (29 ap bits) -! 3 MyCall DxCall ??? (58 ap bits) -! 4 MyCall DxCall RRR (77 ap bits) -! 5 MyCall DxCall 73 (77 ap bits) -! 6 MyCall DxCall RR73 (77 ap bits) -!******** - naptypes(0,1:4)=(/1,2,0,0/) ! Tx6 selected (CQ) - naptypes(1,1:4)=(/2,3,0,0/) ! Tx1 - naptypes(2,1:4)=(/2,3,0,0/) ! Tx2 - naptypes(3,1:4)=(/3,6,0,0/) ! Tx3 - naptypes(4,1:4)=(/3,6,0,0/) ! Tx4 - naptypes(5,1:4)=(/3,1,2,0/) ! Tx5 - - mycall0='' - hiscall0='' - cqstr0='' - first=.false. - endif - - if(cqstr.ne.cqstr0) then - i0=index(cqstr,' ') - if(i0.le.1) then - message='CQ A1AA AA01' - else - message='CQ '//cqstr(1:i0-1)//' A1AA AA01' - endif - i3=-1 - n3=-1 - call pack77(message,i3,n3,c77) - call unpack77(c77,1,msgsent,unpk77_success) - read(c77,'(29i1)') mcq - mcq=2*mod(mcq+rvec(1:29),2)-1 - cqstr0=cqstr - endif - - l1=index(mycall,char(0)) - if(l1.ne.0) mycall(l1:)=" " - l1=index(hiscall,char(0)) - if(l1.ne.0) hiscall(l1:)=" " - if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then - apbits=0 - apbits(1)=99 - apbits(30)=99 - apmy_ru=0 - aphis_fd=0 - - if(len(trim(mycall)) .lt. 3) go to 10 - - nohiscall=.false. - hiscall0=hiscall - if(len(trim(hiscall0)).lt.3) then - hiscall0=mycall ! use mycall for dummy hiscall - mycall won't be hashed. - nohiscall=.true. - endif - message=trim(mycall)//' '//trim(hiscall0)//' RR73' - i3=-1 - n3=-1 - call pack77(message,i3,n3,c77) - call unpack77(c77,1,msgsent,unpk77_success) - if(i3.ne.1 .or. (message.ne.msgsent) .or. .not.unpk77_success) go to 10 - read(c77,'(77i1)') message77 - apmy_ru=2*mod(message77(1:28)+rvec(2:29),2)-1 - aphis_fd=2*mod(message77(30:57)+rvec(29:56),2)-1 - message77=mod(message77+rvec,2) - call encode174_91(message77,cw) - apbits=2*cw-1 - if(nohiscall) apbits(30)=99 - -10 continue - mycall0=mycall - hiscall0=hiscall - endif - candidate=0.0 - ncand=0 - syncmin=1.2 - maxcand=100 - - fa=nfa - fb=nfb - call clockit('getcand4',0) - call getcandidates4(iwave,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & - ncand,sbase) - call clockit('getcand4',1) - - ndecodes=0 - dobigfft=.true. - do icand=1,ncand - f0=candidate(1,icand) - snr=candidate(3,icand)-1.0 - if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle - call clockit('ft4_down',0) - call ft4_downsample(iwave,dobigfft,f0,cd2) !Downsample from 512 to 32 Sa/Symbol - if(dobigfft) dobigfft=.false. - call clockit('ft4_down',1) - - sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) - if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) -! Sample rate is now 12000/16 = 750 samples/second - do isync=1,2 - if(isync.eq.1) then - idfmin=-12 - idfmax=12 - idfstp=3 - ibmin=0 - ibmax=216 !Max DT = 216/750 = 0.288 s - ibstp=4 - else - idfmin=idfbest-4 - idfmax=idfbest+4 - idfstp=1 - ibmin=max(0,ibest-5) - ibmax=min(ibest+5,NMAX/NDOWN-1) - ibstp=1 - endif - ibest=-1 - smax=-99. - idfbest=0 - do idf=idfmin,idfmax,idfstp - - call clockit('sync4d ',0) - do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power - if(sync.gt.smax) then - smax=sync - ibest=istart - idfbest=idf - endif - enddo - call clockit('sync4d ',1) - - enddo - enddo - f0=f0+real(idfbest) - if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle - - call clockit('ft4down ',0) - call ft4_downsample(iwave,dobigfft,f0,cb) !Final downsample with corrected f0 - call clockit('ft4down ',1) - sum2=sum(abs(cb)**2)/(real(NSS)*NN) - if(sum2.gt.0.0) cb=cb/sqrt(sum2) - cd=cb(ibest:ibest+NN*NSS-1) - call clockit('four2a ',0) - do k=1,NN - i1=(k-1)*NSS - csymb=cd(i1:i1+NSS-1) - call four2a(csymb,NSS,1,-1,1) - cs(0:3,k)=csymb(1:4) - s4(0:3,k)=abs(csymb(1:4)) - enddo - call clockit('four2a ',1) - -! Sync quality check - is1=0 - is2=0 - is3=0 - is4=0 - do k=1,4 - ip=maxloc(s4(:,k)) - if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 - ip=maxloc(s4(:,k+33)) - if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 - ip=maxloc(s4(:,k+66)) - if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 - ip=maxloc(s4(:,k+99)) - if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 - enddo - nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 - if(smax .lt. 0.7 .or. nsync .lt. 8) cycle - - do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols - if(nseq.eq.1) nsym=1 - if(nseq.eq.2) nsym=2 - if(nseq.eq.3) nsym=4 - nt=2**(2*nsym) - do ks=1,NN-nsym+1,nsym !87+16=103 symbols. - amax=-1.0 - do i=0,nt-1 - i1=i/64 - i2=iand(i,63)/16 - i3=iand(i,15)/4 - i4=iand(i,3) - if(nsym.eq.1) then - s2(i)=abs(cs(graymap(i4),ks)) - elseif(nsym.eq.2) then - s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) - elseif(nsym.eq.4) then - s2(i)=abs(cs(graymap(i1),ks ) + & - cs(graymap(i2),ks+1) + & - cs(graymap(i3),ks+2) + & - cs(graymap(i4),ks+3) & - ) - else - print*,"Error - nsym must be 1, 2, or 4." - endif - enddo - ipt=1+(ks-1)*2 - if(nsym.eq.1) ibmax=1 - if(nsym.eq.2) ibmax=3 - if(nsym.eq.4) ibmax=7 - do ib=0,ibmax - bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & - maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) - if(ipt+ib.gt.2*NN) cycle - if(nsym.eq.1) then - bmeta(ipt+ib)=bm - elseif(nsym.eq.2) then - bmetb(ipt+ib)=bm - elseif(nsym.eq.4) then - bmetc(ipt+ib)=bm - endif - enddo - enddo - enddo - - bmetb(205:206)=bmeta(205:206) - bmetc(201:204)=bmetb(201:204) - bmetc(205:206)=bmeta(205:206) - - call clockit('normaliz',0) - call normalizebmet(bmeta,2*NN) - call normalizebmet(bmetb,2*NN) - call normalizebmet(bmetc,2*NN) - call clockit('normaliz',1) - - hbits=0 - where(bmeta.ge.0) hbits=1 - ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) - ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) - ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) - nsync_qual=ns1+ns2+ns3+ns4 - if(nsync_qual.lt. 20) cycle - - scalefac=2.83 - llra( 1: 58)=bmeta( 9: 66) - llra( 59:116)=bmeta( 75:132) - llra(117:174)=bmeta(141:198) - llra=scalefac*llra - llrb( 1: 58)=bmetb( 9: 66) - llrb( 59:116)=bmetb( 75:132) - llrb(117:174)=bmetb(141:198) - llrb=scalefac*llrb - llrc( 1: 58)=bmetc( 9: 66) - llrc( 59:116)=bmetc( 75:132) - llrc(117:174)=bmetc(141:198) - llrc=scalefac*llrc - - apmag=maxval(abs(llra))*1.1 - npasses=3+nappasses(nQSOProgress) - if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound - do ipass=1,npasses - if(ipass.eq.1) llr=llra - if(ipass.eq.2) llr=llrb - if(ipass.eq.3) llr=llrc - if(ipass.le.3) then - apmask=0 - iaptype=0 - endif - - if(ipass .gt. 3) then - llrd=llrc - iaptype=naptypes(nQSOProgress,ipass-3) - -! ncontest=0 : NONE -! 1 : NA_VHF -! 2 : EU_VHF -! 3 : FIELD DAY -! 4 : RTTY -! 5 : FOX -! 6 : HOUND -! -! Conditions that cause us to bail out of AP decoding - napwid=50 - if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f0-nfqso).gt.napwid) ) cycle - if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall - if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall - - if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC - apmask=0 - apmask(1:29)=1 - llrd(1:29)=apmag*mcq(1:29) - endif - - if(iaptype.eq.2) then ! MyCall,???,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1) then - apmask(1:29)=1 - llrd(1:29)=apmag*apbits(1:29) - else if(ncontest.eq.2) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.3) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.4) then - apmask(2:29)=1 - llrd(2:29)=apmag*apmy_ru(1:28) - endif - endif - - if(iaptype.eq.3) then ! MyCall,DxCall,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then - apmask(1:58)=1 - llrd(1:58)=apmag*apbits(1:58) - else if(ncontest.eq.3) then ! Field Day - apmask(1:56)=1 - llrd(1:28)=apmag*apbits(1:28) - llrd(29:56)=apmag*aphis_fd(1:28) - else if(ncontest.eq.4) then ! RTTY RU - apmask(2:57)=1 - llrd(2:29)=apmag*apmy_ru(1:28) - llrd(30:57)=apmag*apbits(30:57) - endif - endif - - if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then - apmask=0 - if(ncontest.le.4) then - apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 - if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) - endif - endif - - llr=llrd - endif - max_iterations=40 - message77=0 - call clockit('bpdecode',0) - call bpdecode174_91(llr,apmask,max_iterations,message77, & - cw,nharderror,niterations) - call clockit('bpdecode',1) - if(sum(message77).eq.0) cycle - if( nharderror.ge.0 ) then - message77=mod(message77+rvec,2) ! remove rvec scrambling - write(c77,'(77i1)') message77(1:77) - call unpack77(c77,1,message,unpk77_success) - idupe=0 - do i=1,ndecodes - if(decodes(i).eq.message) idupe=1 - enddo - if(ibest.le.10 .and. message.eq.msg0) idupe=1 !Already decoded - if(idupe.eq.1) exit - ndecodes=ndecodes+1 - decodes(ndecodes)=message - if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.0 - else - xsnr=-20.0 - endif - nsnr=nint(max(-20.0,xsnr)) - freq=f0 - tsig=mod(tbuf + ibest/750.0,100.0) - - write(line,1000) hhmmss,nsnr,tsig,nint(freq),message -1000 format(a6,i4,f5.1,i5,' + ',1x,a37) - l1=index(data_dir,char(0))-1 - if(l1.ge.1) data_dir(l1+1:l1+1)="/" - fname=data_dir(1:l1+1)//'all_ft4.txt' - open(24,file=trim(fname),status='unknown',position='append') - write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, & - nharderror,nsync_qual,ipass,niterations,iaptype,nsync - if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & - tsig,nint(freq),message,nharderror,nsync_qual,ipass, & - niterations,iaptype -1002 format(a17,i4,f5.1,i5,' Rx ',a37,6i4) - close(24) - linex(ndecodes)=line - if(ibest.ge.ibmax-15) msg0=message !Possible dupe candidate - exit - endif - enddo !Sequence estimation - enddo !Candidate list - call clockit('ft4_deco',1) - call clockit2(data_dir) - call clockit('ft4_deco',101) - return - - entry get_ft4msg(idecode,line) - line=linex(idecode) - return - - end subroutine ft4b diff --git a/lib/ft4/ft4d.f90 b/lib/ft4/ft4d.f90 deleted file mode 100644 index a63e3e0a6..000000000 --- a/lib/ft4/ft4d.f90 +++ /dev/null @@ -1,83 +0,0 @@ -program ft4d - - include 'ft4_params.f90' - character*8 arg - character*17 cdatetime - character*512 data_dir - character*12 mycall - character*12 hiscall - character*80 infile - character*61 line - character*4 cqstr - real*8 fMHz - integer ihdr(11) - integer*2 iwave(240000) !20*12000 - - fs=12000.0/NDOWN !Sample rate - dt=1/fs !Sample interval after downsample (s) - tt=NSPS*dt !Duration of "itone" symbols (s) - baud=1.0/tt !Keying rate for "itone" symbols (baud) - txt=NZ*dt !Transmission length (s) - - nargs=iargc() - if(nargs.lt.1) then - print*,'Usage: ft4d [-a ] [-f fMHz] [-n nQSOProgress] file1 [file2 ...]' - go to 999 - endif - iarg=1 - data_dir="." - call getarg(iarg,arg) - if(arg(1:2).eq.'-a') then - call getarg(iarg+1,data_dir) - iarg=iarg+2 - endif - call getarg(iarg,arg) - if(arg(1:2).eq.'-f') then - call getarg(iarg+1,arg) - read(arg,*) fMHz - iarg=iarg+2 - endif - nQSOProgress=0 - if(arg(1:2).eq.'-n') then - call getarg(iarg+1,arg) - read(arg,*) nQSOProgress - iarg=iarg+2 - endif - nfa=10 - nfb=4990 - ndecodes=0 - nfqso=1500 - mycall="K9AN" - hiscall="K1JT" - ncontest=4 - cqstr="RU " - - do ifile=iarg,nargs - call getarg(ifile,infile) - open(10,file=infile,status='old',access='stream') - read(10) ihdr - npts=min(ihdr(11)/2,180000) - read(10) iwave(1:npts) - close(10) - cdatetime=infile - j2=index(infile,'.wav') - if(j2.ge.14) cdatetime=infile(j2-13:j2)//'000' - istep=3456 - nsteps=(npts-52800)/istep + 1 - do n=1,nsteps - i0=(n-1)*istep + 1 - tbuf=(i0-1)/12000.0 - call ft4b(cdatetime,tbuf,nfa,nfb,nQSOProgress,ncontest, & - nfqso,iwave(i0),ndecodes,mycall,hiscall,cqstr,line,data_dir) - do idecode=1,ndecodes - call get_ft4msg(idecode,line) - write(*,'(a61)') line - enddo - enddo !steps - enddo !files - - call four2a(xx,-1,1,-1,1) !Destroy FFTW plans to free their memory - -999 end program ft4d - - diff --git a/lib/ft4/genft4.f90 b/lib/ft4/genft4.f90 index f57ca59aa..66e70a612 100644 --- a/lib/ft4/genft4.f90 +++ b/lib/ft4/genft4.f90 @@ -11,7 +11,7 @@ subroutine genft4(msg0,ichk,msgsent,msgbits,i4tone) ! s16 + 87symbols + 2 ramp up/down = 105 total channel symbols ! r1 + s4 + d29 + s4 + d29 + s4 + d29 + s4 + r1 -! Message duration: TxT = 105*512/12000 = 4.48 s +! Message duration: TxT = 105*576/12000 = 5.04 s ! use iso_c_binding, only: c_loc,c_size_t From 1758e7266be4a327e94572e228284ccb6c7805d0 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 5 Jun 2019 10:19:40 -0500 Subject: [PATCH 326/367] Remove deleted files from CMakeLists.txt --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2d6dd396..0bd94174c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -528,7 +528,6 @@ set (wsjt_FSRCS lib/msk144sim.f90 lib/mskrtd.f90 lib/nuttal_window.f90 - lib/ft4/ft4b.f90 lib/ft4/ft4sim.f90 lib/ft4/ft4sim_mult.f90 lib/ft4/ft4_downsample.f90 @@ -1298,9 +1297,6 @@ target_link_libraries (averaged_mf wsjt_fort wsjt_cxx) add_executable (ft4sim_mult lib/ft4/ft4sim_mult.f90 wsjtx.rc) target_link_libraries (ft4sim_mult wsjt_fort wsjt_cxx) -add_executable (ft4d lib/ft4/ft4d.f90 wsjtx.rc) -target_link_libraries (ft4d wsjt_fort wsjt_cxx) - add_executable (record_time_signal Audio/tools/record_time_signal.cpp) target_link_libraries (record_time_signal wsjt_cxx wsjt_qtmm wsjt_qt) From 45b12e60283272be7f20b965b9921f8a0975f62a Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 6 Jun 2019 12:56:25 +0100 Subject: [PATCH 327/367] Preparation for UI i18n Re-enabling the WSJT-X i18n facilities. This allows translation files to be created for languages that are automatically used to lookup translatable strings. To enable a new language the language name must be added to the CMakeLists.txt LANGUAGES list variable in BCP47 format (i.e. en_US, en_GB, pt_PT, ...). Do one build with the CMake option UPDATE_TRANSLATIONS enabled (do not leave it enabled as there is a danger of loosing existing translated texts), that will create a fresh translations/wsjtx_.ts file which should be immediately checked in with the CMakeLists.txt change. The .ts should then be updated by the translator using the Qt Linguist tool to add translations. Check in the updated .ts file to complete the initial translation process for that language. To aid translators their WIP .ts file may be tested by releasing (using the lrelease tool or from the Linguist menu) a .qm file and placing that .qm file in the current directory before starting WSJT-X. The translations will be used if the system locale matches the file name. If the system locale does not match the file name; the language may be overridden by setting the LANG environment variable. For example if a wsjtx_pt_PT.qm file is in the current directory WSJT-X will use it for translation lookups, regardless of the current system locale setting, if the LANG variable is set to pt_PT or pt-PT. On MS Windows from a command prompt: set LANG=pt_PT C:\WSJT\wsjtx\bin\wsjtx elsewhere: LANG=pt_PT wsjtx --- CMakeLists.txt | 42 +- Configuration.cpp | 4 + EmulateSplitTransceiver.cpp | 2 + EmulateSplitTransceiver.hpp | 2 + HRDTransceiver.cpp | 2 + HRDTransceiver.hpp | 2 + HamlibTransceiver.hpp | 4 +- MultiSettings.cpp | 4 + WSPRBandHopping.cpp | 4 + commons.h | 3 +- main.cpp | 29 + models/Bands.cpp | 2 + models/Bands.hpp | 2 + models/FoxLog.cpp | 4 + models/IARURegions.cpp | 4 +- models/IARURegions.hpp | 1 + models/StationList.cpp | 5 + models/StationList.hpp | 2 + translations/wsjtx_en_GB.ts | 6007 ++++++++++++++++++++++++ translations/wsjtx_pt_PT.ts | 6007 ++++++++++++++++++++++++ widgets/AbstractLogWindow.cpp | 7 + widgets/AbstractLogWindow.hpp | 2 + widgets/DecodeHighlightingListView.cpp | 2 + widgets/DecodeHighlightingListView.hpp | 2 + widgets/ExportCabrillo.cpp | 1 + widgets/ExportCabrillo.h | 2 + widgets/HelpTextWindow.cpp | 2 + widgets/HelpTextWindow.hpp | 2 + widgets/messageaveraging.cpp | 2 + widgets/messageaveraging.h | 2 + 30 files changed, 12142 insertions(+), 14 deletions(-) create mode 100644 translations/wsjtx_en_GB.ts create mode 100644 translations/wsjtx_pt_PT.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index a2d6dd396..5affce46a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -856,9 +856,6 @@ if (Boost_NO_SYSTEM_PATHS) set (BOOST_ROOT ${PROJECT_SOURCE_DIR}/boost) endif () find_package (Boost 1.63 REQUIRED) -if (Boost_FOUND) - include_directories (${Boost_INCLUDE_DIRS}) -endif () # # OpenMP @@ -889,10 +886,7 @@ message (STATUS "hamlib_LIBRARY_DIRS: ${hamlib_LIBRARY_DIRS}") # # Widgets finds its own dependencies. -find_package (Qt5Widgets 5 REQUIRED) -find_package (Qt5Multimedia 5 REQUIRED) -find_package (Qt5PrintSupport 5 REQUIRED) -find_package (Qt5Sql 5 REQUIRED) +find_package (Qt5 REQUIRED Widgets Multimedia PrintSupport Sql LinguistTools) if (WIN32) add_definitions (-DQT_NEEDS_QTMAIN) @@ -1098,11 +1092,41 @@ add_custom_target (ctags COMMAND ${CTAGS} -o ${CMAKE_SOURCE_DIR}/tags -R ${sourc add_custom_target (etags COMMAND ${ETAGS} -o ${CMAKE_SOURCE_DIR}/TAGS -R ${sources}) +# Qt i18n +set (LANGUAGES + en_GB + pt_PT + ) +foreach (lang_ ${LANGUAGES}) + file (TO_NATIVE_PATH translations/wsjtx_${lang_}.ts ts_) + list (APPEND TS_FILES ${ts_}) +endforeach () +if (UPDATE_TRANSLATIONS) + message (STATUS "UPDATE_TRANSLATIONS option is set.") + qt5_create_translation ( + QM_FILES ${wsjt_qt_UISRCS} ${wsjtx_UISRCS} ${wsjt_qt_CXXSRCS} ${wsjtx_CXXSRCS} + ${TS_FILES} + ) +else () + qt5_add_translation (QM_FILES ${TS_FILES}) +endif () +add_custom_target (translations DEPENDS ${QM_FILES}) +set_property (DIRECTORY PROPERTY CLEAN_NO_CUSTOM TRUE) +# do this after i18n to stop lupdate walking the boost tree which it +# chokes on +if (Boost_FOUND) + include_directories (${Boost_INCLUDE_DIRS}) +endif () + # embedded resources function (add_resources resources path) foreach (resource_file_ ${ARGN}) get_filename_component (name_ ${resource_file_} NAME) - file (TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${resource_file_} source_) + if (IS_ABSOLUTE "${resource_file_}") + file (TO_NATIVE_PATH ${resource_file_} source_) + else () + file (TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${resource_file_} source_) + endif () file (TO_NATIVE_PATH ${path}/${name_} dest_) set (resources_ "${resources_}\n ${source_}") set (${resources} ${${resources}}${resources_} PARENT_SCOPE) @@ -1111,6 +1135,7 @@ endfunction (add_resources resources path) add_resources (wsjtx_RESOURCES "" ${TOP_LEVEL_RESOURCES}) add_resources (wsjtx_RESOURCES /Palettes ${PALETTE_FILES}) +add_resources (wsjtx_RESOURCES /Translations ${QM_FILES}) configure_file (wsjtx.qrc.in wsjtx.qrc @ONLY) @@ -1131,7 +1156,6 @@ if (WIN32) wrap_ax_server (GENAXSRCS ${AXSERVERSRCS}) endif (WIN32) - # # targets # diff --git a/Configuration.cpp b/Configuration.cpp index b78739d11..b8c37184d 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -251,6 +251,8 @@ namespace class FrequencyDialog final : public QDialog { + Q_OBJECT + public: using Item = FrequencyList_v2::Item; @@ -297,6 +299,8 @@ private: class StationDialog final : public QDialog { + Q_OBJECT + public: explicit StationDialog (StationList const * stations, Bands * bands, QWidget * parent = nullptr) : QDialog {parent} diff --git a/EmulateSplitTransceiver.cpp b/EmulateSplitTransceiver.cpp index 7e84919e2..c42436db0 100644 --- a/EmulateSplitTransceiver.cpp +++ b/EmulateSplitTransceiver.cpp @@ -1,5 +1,7 @@ #include "EmulateSplitTransceiver.hpp" +#include "moc_EmulateSplitTransceiver.cpp" + EmulateSplitTransceiver::EmulateSplitTransceiver (std::unique_ptr wrapped, QObject * parent) : Transceiver {parent} , wrapped_ {std::move (wrapped)} diff --git a/EmulateSplitTransceiver.hpp b/EmulateSplitTransceiver.hpp index 210a37b71..d373c020e 100644 --- a/EmulateSplitTransceiver.hpp +++ b/EmulateSplitTransceiver.hpp @@ -27,6 +27,8 @@ class EmulateSplitTransceiver final : public Transceiver { + Q_OBJECT + public: // takes ownership of wrapped Transceiver explicit EmulateSplitTransceiver (std::unique_ptr wrapped, diff --git a/HRDTransceiver.cpp b/HRDTransceiver.cpp index c44914145..596f0ba27 100644 --- a/HRDTransceiver.cpp +++ b/HRDTransceiver.cpp @@ -19,6 +19,8 @@ namespace int constexpr yaesu_delay {250}; } +#include "moc_HRDTransceiver.cpp" + void HRDTransceiver::register_transceivers (TransceiverFactory::Transceivers * registry, int id) { (*registry)[HRD_transceiver_name] = TransceiverFactory::Capabilities (id, TransceiverFactory::Capabilities::network, true, true /* maybe */); diff --git a/HRDTransceiver.hpp b/HRDTransceiver.hpp index 6ccd72d52..2f563df6f 100644 --- a/HRDTransceiver.hpp +++ b/HRDTransceiver.hpp @@ -27,6 +27,8 @@ class QByteArray; class HRDTransceiver final : public PollingTransceiver { + Q_OBJECT + public: static void register_transceivers (TransceiverFactory::Transceivers *, int id); diff --git a/HamlibTransceiver.hpp b/HamlibTransceiver.hpp index 17f1c28d3..bcc040d23 100644 --- a/HamlibTransceiver.hpp +++ b/HamlibTransceiver.hpp @@ -21,9 +21,9 @@ extern "C" class HamlibTransceiver final : public PollingTransceiver { - Q_OBJECT; // for translation context + Q_OBJECT // for translation context - public: +public: static void register_transceivers (TransceiverFactory::Transceivers *); static void unregister_transceivers (); diff --git a/MultiSettings.cpp b/MultiSettings.cpp index f4798bc3f..c0db0ed67 100644 --- a/MultiSettings.cpp +++ b/MultiSettings.cpp @@ -65,6 +65,8 @@ namespace class NameDialog final : public QDialog { + Q_OBJECT + public: explicit NameDialog (QString const& current_name, QStringList const& current_names, @@ -112,6 +114,8 @@ namespace class ExistingNameDialog final : public QDialog { + Q_OBJECT + public: explicit ExistingNameDialog (QStringList const& current_names, QWidget * parent = nullptr) : QDialog {parent} diff --git a/WSPRBandHopping.cpp b/WSPRBandHopping.cpp index fd0167d51..e954d5433 100644 --- a/WSPRBandHopping.cpp +++ b/WSPRBandHopping.cpp @@ -44,6 +44,8 @@ namespace class Dialog : public QDialog { + Q_OBJECT + public: using BandList = QList; @@ -69,6 +71,8 @@ private: static int constexpr band_index_role {Qt::UserRole}; }; +#include "WSPRBandHopping.moc" + Dialog::Dialog (QSettings * settings, Configuration const * configuration, BandList const * WSPR_bands , QBitArray * bands, int * gray_line_duration, QWidget * parent) : QDialog {parent, Qt::Window | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint} diff --git a/commons.h b/commons.h index 7c202d26e..4083bb22f 100644 --- a/commons.h +++ b/commons.h @@ -8,7 +8,8 @@ #ifdef __cplusplus #include extern "C" { -#else +#endif +#ifndef __cplusplus #include #endif diff --git a/main.cpp b/main.cpp index 9070ce33f..fc791adec 100644 --- a/main.cpp +++ b/main.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -106,6 +107,34 @@ int main(int argc, char *argv[]) ExceptionCatchingApplication a(argc, argv); try { + // + // Enable i18n + // + QTranslator translator_from_resources; + // Default translations for releases use translations stored in + // the resources file system under the Translations + // directory. These are built by the CMake build system from .ts + // files in the translations source directory. New languages are + // added by enabling the UPDATE_TRANSLATIONS CMake option and + // building with the new language added to the LANGUAGES CMake + // list variable. UPDATE_TRANSLATIONS will preserve existing + // translations but should only be set when adding new + // languages. The resulting .ts files should be checked info + // source control for translators to access and update. + translator_from_resources.load (QLocale::system (), "wsjtx", "_", ":/Translations"); + a.installTranslator (&translator_from_resources); + + QTranslator translator_from_files; + // Load any matching translation from the current directory + // using the locale name. This allows translators to easily test + // their translations by releasing (lrelease) a .qm file into + // the current directory with a suitable name + // (e.g. wsjtx_en_GB.qm), then running wsjtx to view the + // results. Either the system locale setting or the environment + // variable LANG can be used to select the target language. + translator_from_files.load (QString {"wsjtx_"} + QLocale::system ().name ()); + a.installTranslator (&translator_from_files); + setlocale (LC_NUMERIC, "C"); // ensure number forms are in // consistent format, do this after // instantiating QApplication so diff --git a/models/Bands.cpp b/models/Bands.cpp index a70358fa3..e24d42965 100644 --- a/models/Bands.cpp +++ b/models/Bands.cpp @@ -55,6 +55,8 @@ namespace } } +#include "moc_Bands.cpp" + Bands::Bands (QObject * parent) : QAbstractTableModel {parent} { diff --git a/models/Bands.hpp b/models/Bands.hpp index ed625f2f1..170d4c756 100644 --- a/models/Bands.hpp +++ b/models/Bands.hpp @@ -29,6 +29,8 @@ class Bands final : public QAbstractTableModel { + Q_OBJECT + public: using Frequency = Radio::Frequency; diff --git a/models/FoxLog.cpp b/models/FoxLog.cpp index debb08afc..954090bd6 100644 --- a/models/FoxLog.cpp +++ b/models/FoxLog.cpp @@ -18,6 +18,8 @@ class FoxLog::impl final : public QSqlTableModel { + Q_OBJECT + public: impl (Configuration const * configuration); @@ -43,6 +45,8 @@ public: QSqlQuery mutable export_query_; }; +#include "FoxLog.moc" + FoxLog::impl::impl (Configuration const * configuration) : configuration_ {configuration} { diff --git a/models/IARURegions.cpp b/models/IARURegions.cpp index 25450ab47..dcdc94d43 100644 --- a/models/IARURegions.cpp +++ b/models/IARURegions.cpp @@ -7,8 +7,6 @@ #include #include -#include "moc_IARURegions.cpp" - namespace { // human readable strings for each Region enumeration value @@ -22,6 +20,8 @@ namespace std::size_t constexpr region_names_size = sizeof (region_names) / sizeof (region_names[0]); } +#include "moc_IARURegions.cpp" + IARURegions::IARURegions (QObject * parent) : QAbstractListModel {parent} { diff --git a/models/IARURegions.hpp b/models/IARURegions.hpp index d849d97b7..498846d34 100644 --- a/models/IARURegions.hpp +++ b/models/IARURegions.hpp @@ -29,6 +29,7 @@ class IARURegions final : public QAbstractListModel { Q_OBJECT + public: // // This enumeration contains the supported regions, to complement diff --git a/models/StationList.cpp b/models/StationList.cpp index eeeb4d607..202cac0e7 100644 --- a/models/StationList.cpp +++ b/models/StationList.cpp @@ -52,6 +52,8 @@ QDataStream& operator >> (QDataStream& is, StationList::Station& station) class StationList::impl final : public QAbstractTableModel { + Q_OBJECT + public: impl (Bands const * bands, Stations stations, QObject * parent) : QAbstractTableModel {parent} @@ -97,6 +99,9 @@ public: Stations stations_; }; +#include "StationList.moc" +#include "moc_StationList.cpp" + StationList::StationList (Bands const * bands, QObject * parent) : StationList {bands, {}, parent} { diff --git a/models/StationList.hpp b/models/StationList.hpp index 25bf428fc..3b0955c18 100644 --- a/models/StationList.hpp +++ b/models/StationList.hpp @@ -40,6 +40,8 @@ class Bands; class StationList final : public QSortFilterProxyModel { + Q_OBJECT + public: using Frequency = Radio::Frequency; using FrequencyDelta = Radio::FrequencyDelta; diff --git a/translations/wsjtx_en_GB.ts b/translations/wsjtx_en_GB.ts new file mode 100644 index 000000000..2e0570962 --- /dev/null +++ b/translations/wsjtx_en_GB.ts @@ -0,0 +1,6007 @@ + + + + + AbstractLogWindow + + + &Delete ... + + + + + AbstractLogWindow::impl + + + Confirm Delete + + + + + Are you sure you want to delete the %n selected QSO(s) from the log + + + + + + + + Astro + + + + Doppler tracking + + + + + <html><head/><body><p>One station does all Doppler shift correction, their QSO partner receives and transmits on the sked frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html> + + + + + Full Doppler to DX Grid + + + + + <html><head/><body><p>Transmit takes place on sked frequency and receive frequency is corrected for own echoes. </p><p>This mode can be used for calling CQ, or when using Echo mode.</p></body></html> + + + + + Own Echo + + + + + <html><head/><body><p>Both stations correct for Doppler shift such that they would be heard on the moon at the sked frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p><p>Use this option also for Echo mode.</p></body></html> + + + + + Constant frequency on Moon + + + + + <html><head/><body><p>DX station announces their TX Freq, which is entered as the Sked Freq. Correction applied to RX and TX so you appear on the DX's station's own echo Freq.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html> + + + + + On DX Echo + + + + + <html><head/><body><p>Tune radio manually and select this mode to put your echo on the same frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html> + + + + + Call DX + + + + + <html><head/><body><p>No Doppler shift correction is applied. This may be used when the QSO partner does full Doppler correction to your grid square.</p></body></html> + + + + + None + + + + + Sked frequency + + + + + + 0 + + + + + Rx: + + + + + Tx: + + + + + <html><head/><body><p>Press and hold the CTRL key to adjust the sked frequency manually with the rig's VFO dial or enter frequency directly into the band entry field on the main window.</p></body></html> + + + + + Astro Data + + + + + Astronomical Data + + + + + Doppler Tracking Error + + + + + Split operating is required for Doppler tracking + + + + + Go to "Menu->File->Settings->Radio" to enable split operation + + + + + Bands + + + Band name + + + + + Lower frequency limit + + + + + Upper frequency limit + + + + + Band + + + + + Lower Limit + + + + + Upper Limit + + + + + CAboutDlg + + + About WSJT-X + + + + + OK + + + + + CPlotter + + + &Set Rx && Tx Offset + + + + + CabrilloLog + + + Freq(MHz) + + + + + Mode + + + + + Date & Time(UTC) + + + + + Call + + + + + Sent + + + + + Rcvd + + + + + Band + + + + + CabrilloLogWindow + + + Contest Log + + + + + <html><head/><body><p>Right-click here for available actions.</p></body></html> + + + + + Right-click here for available actions. + + + + + CallsignDialog + + + Callsign + + + + + ColorHighlighting + + + + + + + + + + + + + + + + + + K1ABC + + + + + CQ in message + + + + + My Call in message + + + + + Transmitted message + + + + + New DXCC + + + + + New Grid + + + + + New DXCC on Band + + + + + New Call + + + + + New Grid on Band + + + + + New Call on Band + + + + + Uploads to LotW + + + + + New Continent + + + + + New Continent on Band + + + + + New CQ Zone + + + + + New CQ Zone on Band + + + + + New ITU Zone + + + + + New ITU Zone on Band + + + + + Configuration::impl + + + + + &Delete + + + + + + &Insert ... + + + + + Failed to create save directory + + + + + path: "%1% + + + + + Failed to create samples directory + + + + + path: "%1" + + + + + &Load ... + + + + + &Save as ... + + + + + &Merge ... + + + + + &Reset + + + + + Serial Port: + + + + + Serial port used for CAT control + + + + + Network Server: + + + + + Optional hostname and port of network service. +Leave blank for a sensible default on this machine. +Formats: + hostname:port + IPv4-address:port + [IPv6-address]:port + + + + + USB Device: + + + + + Optional device identification. +Leave blank for a sensible default for the rig. +Format: + [VID[:PID[:VENDOR[:PRODUCT]]]] + + + + + Invalid audio input device + + + + + Invalid audio out device + + + + + Invalid PTT method + + + + + Invalid PTT port + + + + + + Invalid Contest Exchange + + + + + You must input a valid ARRL Field Day exchange + + + + + You must input a valid ARRL RTTY Roundup exchange + + + + + Reset Decode Highlighting + + + + + Reset all decode highlighting and priorities to default values + + + + + WSJT-X Decoded Text Font Chooser + + + + + Load Working Frequencies + + + + + + + Frequency files (*.qrg);;All files (*.*) + + + + + Replace Working Frequencies + + + + + Are you sure you want to discard your current working frequencies and replace them with the loaded ones? + + + + + Merge Working Frequencies + + + + + + + Not a valid frequencies file + + + + + Incorrect file magic + + + + + Version is too new + + + + + Contents corrupt + + + + + Save Working Frequencies + + + + + Only Save Selected Working Frequencies + + + + + Are you sure you want to save only the working frequencies that are currently selected? Click No to save all. + + + + + Reset Working Frequencies + + + + + Are you sure you want to discard your current working frequencies and replace them with default ones? + + + + + Save Directory + + + + + AzEl Directory + + + + + Rig control error + + + + + Failed to open connection to rig + + + + + Rig failure + + + + + DXLabSuiteCommanderTransceiver + + + Failed to connect to DX Lab Suite Commander + + + + + + DX Lab Suite Commander didn't respond correctly reading frequency: + + + + + DX Lab Suite Commander sent an unrecognised TX state: + + + + + DX Lab Suite Commander didn't respond correctly polling TX status: + + + + + DX Lab Suite Commander rig did not respond to PTT: + + + + + DX Lab Suite Commander didn't respond correctly polling frequency: + + + + + DX Lab Suite Commander didn't respond correctly polling TX frequency: + + + + + DX Lab Suite Commander sent an unrecognised split state: + + + + + DX Lab Suite Commander didn't respond correctly polling split status: + + + + + DX Lab Suite Commander sent an unrecognised mode: " + + + + + DX Lab Suite Commander didn't respond correctly polling mode: + + + + + DX Lab Suite Commander send command failed + + + + + + DX Lab Suite Commander failed to send command "%1": %2 + + + + + + DX Lab Suite Commander send command "%1" read reply failed: %2 + + + + + + DX Lab Suite Commander retries exhausted sending command "%1" + + + + + DX Lab Suite Commander sent an unrecognized frequency + + + + + DecodeHighlightingListView + + + &Foreground color ... + + + + + Choose %1 Foreground Color + + + + + &Unset foreground color + + + + + &Background color ... + + + + + Choose %1 Background Color + + + + + U&nset background color + + + + + &Reset this item to defaults + + + + + DecodeHighlightingModel + + + Highlight Type + + + + + Designer + + + &Delete + + + + + &Insert ... + + + + + Insert &after ... + + + + + Import Palette + + + + + + Palettes (*.pal) + + + + + Export Palette + + + + + Dialog + + + Gray time: + + + + + Directory + + + + URL Error + + + + + + Invalid URL: +"%1" + + + + + + + + + + + JSON Error + + + + + Contents file syntax error %1 at character offset %2 + + + + + Contents file top level must be a JSON array + + + + + File System Error + + + + + Failed to open "%1" +Error: %2 - %3 + + + + + Contents entries must be a JSON array + + + + + Contents entries must have a valid type + + + + + Contents entries must have a valid name + + + + + Contents entries must be JSON objects + + + + + Contents directories must be relative and within "%1" + + + + + Network Error + + + + + Authentication required + + + + + DisplayText + + + &Erase + + + + + EchoGraph + + + + Echo Graph + + + + + <html><head/><body><p>Compression factor for frequency scale</p></body></html> + + + + + Bins/Pixel + + + + + Gain + + + + + <html><head/><body><p>Echo spectrum gain</p></body></html> + + + + + Zero + + + + + <html><head/><body><p>Echo spectrum zero</p></body></html> + + + + + <html><head/><body><p>Smoothing of echo spectrum</p></body></html> + + + + + Smooth + + + + + <html><head/><body><p>Number of echo transmissions averaged</p></body></html> + + + + + N: 0 + + + + + <html><head/><body><p>Click to cycle through a sequence of colors and line widths.</p></body></html> + + + + + Colors + Colours + + + + EmulateSplitTransceiver + + + Emulated split mode requires rig to be in simplex mode + + + + + EqualizationToolsDialog::impl + + + Phase + + + + + + Freq (Hz) + + + + + Phase (Π) + + + + + Delay (ms) + + + + + Measured + + + + + Proposed + + + + + Current + + + + + Group Delay + + + + + Amplitude + + + + + Relative Power (dB) + + + + + Reference + + + + + Phase ... + + + + + Refresh + + + + + Discard Measured + + + + + ExistingNameDialog + + + Configuration to Clone From + + + + + &Source Configuration Name: + + + + + ExportCabrillo + + + Dialog + + + + + Location: + + + + + SNJ + + + + + Contest: + + + + + ARRL-RTTY + + + + + Callsign: + + + + + Category-Operator: + + + + + SINGLE-OP + + + + + Category-Transmitter: + + + + + ONE + + + + + Category-Power: + + + + + LOW + + + + + Category-Assisted: + + + + + NON-ASSISTED + + + + + Category-Band: + + + + + ALL + + + + + Claimed-Score: + + + + + Operators: + + + + + Club: + + + + + Name: + + + + + + Address: + + + + + Save Log File + + + + + Cabrillo Log (*.cbr) + + + + + Cannot open "%1" for writing: %2 + + + + + Export Cabrillo File Error + + + + + FastGraph + + + + Fast Graph + + + + + Waterfall gain + + + + + Waterfall zero + + + + + Spectrum zero + + + + + <html><head/><body><p>Set reasonable levels for gain and zero sliders.</p></body></html> + + + + + Auto Level + + + + + FoxLog::impl + + + Date & Time(UTC) + + + + + Call + + + + + Grid + + + + + Sent + + + + + Rcvd + + + + + Band + + + + + FoxLogWindow + + + Fox Log + + + + + <html><head/><body><p>Right-click here for available actions.</p></body></html> + + + + + Callers: + + + + + + + N + + + + + In progress: + + + + + Rate: + + + + + &Export ADIF ... + + + + + Export ADIF Log File + + + + + ADIF Log (*.adi) + + + + + Export ADIF File Error + + + + + Cannot open "%1" for writing: %2 + + + + + &Reset ... + + + + + Confirm Reset + + + + + Are you sure you want to erase file FoxQSO.txt and start a new Fox log? + + + + + FrequencyDialog + + + Add Frequency + + + + + IARU &Region: + + + + + &Mode: + + + + + &Frequency (MHz): + + + + + FrequencyList_v2 + + + + IARU Region + + + + + + Mode + + + + + + Frequency + + + + + + Frequency (MHz) + + + + + HRDTransceiver + + + + Failed to connect to Ham Radio Deluxe + + + + + + Failed to open file "%1": %2. + + + + + + Ham Radio Deluxe: no rig found + + + + + Ham Radio Deluxe: rig doesn't support mode + + + + + Ham Radio Deluxe: sent an unrecognised mode + + + + + Ham Radio Deluxe: item not found in %1 dropdown list + + + + + Ham Radio Deluxe: button not available + + + + + Ham Radio Deluxe didn't respond as expected + + + + + Ham Radio Deluxe: rig has disappeared or changed + + + + + Ham Radio Deluxe send command "%1" failed %2 + + + + + + + Ham Radio Deluxe: failed to write command "%1" + + + + + Ham Radio Deluxe sent an invalid reply to our command "%1" + + + + + Ham Radio Deluxe failed to reply to command "%1" %2 + + + + + + Ham Radio Deluxe retries exhausted sending command "%1" + + + + + Ham Radio Deluxe didn't respond to command "%1" as expected + + + + + HamlibTransceiver + + + + Hamlib initialisation error + + + + + Hamlib settings file error: %1 at character offset %2 + + + + + Hamlib settings file error: top level must be a JSON object + + + + + Hamlib settings file error: config must be a JSON object + + + + + Unsupported CAT type + + + + + Hamlib error: %1 while %2 + + + + + opening connection to rig + + + + + getting current frequency + + + + + getting current mode + + + + + + exchanging VFOs + + + + + + getting other VFO frequency + + + + + getting other VFO mode + + + + + setting current VFO + + + + + getting frequency + + + + + getting mode + + + + + + getting current VFO + + + + + + + + getting current VFO frequency + + + + + + + + + + setting frequency + + + + + + + + getting current VFO mode + + + + + + + + + setting current VFO mode + + + + + + setting/unsetting split mode + + + + + + setting split mode + + + + + setting split TX frequency and mode + + + + + setting split TX frequency + + + + + getting split TX VFO mode + + + + + setting split TX VFO mode + + + + + getting PTT state + + + + + setting PTT on + + + + + setting PTT off + + + + + setting a configuration item + + + + + getting a configuration item + + + + + HelpTextWindow + + + Help file error + + + + + Cannot open "%1" for reading + + + + + Error: %1 + + + + + IARURegions + + + + IARU Region + + + + + LogQSO + + + Click OK to confirm the following QSO: + + + + + Call + + + + + Start + + + + + + dd/MM/yyyy HH:mm:ss + + + + + End + + + + + Mode + + + + + Band + + + + + Rpt Sent + + + + + Rpt Rcvd + + + + + Grid + + + + + Name + + + + + Tx power + + + + + + Retain + + + + + Comments + + + + + Operator + + + + + Exch sent + + + + + Rcvd + + + + + + Invalid QSO Data + + + + + Check exchange sent and received + + + + + Check all fields + + + + + Log file error + + + + + Cannot open "%1" for append + + + + + Error: %1 + + + + + LotWUsers::impl + + + Network Error - SSL/TLS support not installed, cannot fetch: +'%1' + + + + + Network Error - Too many redirects: +'%1' + + + + + Network Error: +%1 + + + + + File System Error - Cannot commit changes to: +"%1" + + + + + File System Error - Cannot open file: +"%1" +Error(%2): %3 + + + + + File System Error - Cannot write to file: +"%1" +Error(%2): %3 + + + + + MainWindow + + + WSJT-X by K1JT + + + + + Band Activity + + + + + + UTC dB DT Freq Dr + + + + + Rx Frequency + + + + + CQ only + + + + + Enter this QSO in log + + + + + Log &QSO + + + + + Stop monitoring + + + + + &Stop + + + + + Toggle monitoring On/Off + + + + + &Monitor + + + + + <html><head/><body><p>Erase right window. Double-click to erase both windows.</p></body></html> + + + + + Erase right window. Double-click to erase both windows. + + + + + &Erase + + + + + <html><head/><body><p>Clear the accumulating message average.</p></body></html> + + + + + Clear the accumulating message average. + + + + + Clear Avg + + + + + <html><head/><body><p>Decode most recent Rx period at QSO Frequency</p></body></html> + + + + + Decode most recent Rx period at QSO Frequency + + + + + &Decode + + + + + <html><head/><body><p>Toggle Auto-Tx On/Off</p></body></html> + + + + + Toggle Auto-Tx On/Off + + + + + E&nable Tx + + + + + Stop transmitting immediately + + + + + &Halt Tx + + + + + <html><head/><body><p>Toggle a pure Tx tone On/Off</p></body></html> + + + + + Toggle a pure Tx tone On/Off + + + + + &Tune + + + + + Menus + + + + + USB dial frequency + + + + + 14.078 000 + + + + + <html><head/><body><p>30dB recommended when only noise present<br/>Green when good<br/>Red when clipping may occur<br/>Yellow when too low</p></body></html> + + + + + Rx Signal + + + + + 30dB recommended when only noise present +Green when good +Red when clipping may occur +Yellow when too low + + + + + DX Call + + + + + DX Grid + + + + + Callsign of station to be worked + + + + + Search for callsign in database + + + + + &Lookup + + + + + Locator of station to be worked + + + + + Az: 251 16553 km + + + + + Add callsign and locator to database + + + + + Add + + + + + Pwr + + + + + <html><head/><body><p>If orange or red there has been a rig control failure, click to reset and read the dial frequency. S implies split mode.</p></body></html> + + + + + If orange or red there has been a rig control failure, click to reset and read the dial frequency. S implies split mode. + + + + + ? + + + + + Adjust Tx audio level + + + + + <html><head/><body><p>Select operating band or enter frequency in MHz or enter kHz increment followed by k.</p></body></html> + + + + + Frequncy entry + + + + + Select operating band or enter frequency in MHz or enter kHz increment followed by k. + + + + + <html><head/><body><p align="center"> 2015 Jun 17 </p><p align="center"> 01:23:45 </p></body></html> + + + + + <html><head/><body><p>Check to keep Tx frequency fixed when double-clicking on decoded text.</p></body></html> + + + + + Check to keep Tx frequency fixed when double-clicking on decoded text. + + + + + Hold Tx Freq + + + + + Audio Rx frequency + + + + + + + Hz + + + + + Rx + + + + + Set Tx frequency to Rx Frequency + + + + + â–² + + + + + Frequency tolerance (Hz) + + + + + F Tol + + + + + Set Rx frequency to Tx Frequency + + + + + â–¼ + + + + + <html><head/><body><p>Synchronizing threshold. Lower numbers accept weaker sync signals.</p></body></html> + + + + + Synchronizing threshold. Lower numbers accept weaker sync signals. + + + + + Sync + + + + + <html><head/><body><p>Check to use short-format messages.</p></body></html> + + + + + Check to use short-format messages. + + + + + Sh + + + + + <html><head/><body><p>Check to enable JT9 fast modes</p></body></html> + + + + + Check to enable JT9 fast modes + + + + + + Fast + + + + + <html><head/><body><p>Check to enable automatic sequencing of Tx messages based on received messages.</p></body></html> + + + + + Check to enable automatic sequencing of Tx messages based on received messages. + + + + + Auto Seq + + + + + <html><head/><body><p>Check to call the first decoded responder to my CQ.</p></body></html> + + + + + Check to call the first decoded responder to my CQ. + + + + + Call 1st + + + + + Check to generate "@1250 (SEND MSGS)" in Tx6. + + + + + Tx6 + + + + + <html><head/><body><p>Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.</p></body></html> + + + + + Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences. + + + + + Tx even/1st + + + + + <html><head/><body><p>Frequency to call CQ on in kHz above the current MHz</p></body></html> + + + + + Frequency to call CQ on in kHz above the current MHz + + + + + Tx CQ + + + + + <html><head/><body><p>Check this to call CQ on the &quot;Tx CQ&quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.</p><p>Not available to nonstandard callsign holders.</p></body></html> + + + + + Check this to call CQ on the "Tx CQ" frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on. +Not available to nonstandard callsign holders. + + + + + Rx All Freqs + + + + + <html><head/><body><p>Submode determines tone spacing; A is narrowest.</p></body></html> + + + + + Submode determines tone spacing; A is narrowest. + + + + + Submode + + + + + Fox + + + + + <html><head/><body><p>Check to monitor Sh messages.</p></body></html> + + + + + Check to monitor Sh messages. + + + + + SWL + + + + + Best S+P + + + + + <html><head/><body><p>Check this to start recording calibration data.<br/>While measuring calibration correction is disabled.<br/>When not checked you can view the calibration results.</p></body></html> + + + + + Check this to start recording calibration data. +While measuring calibration correction is disabled. +When not checked you can view the calibration results. + + + + + Measure + + + + + <html><head/><body><p>Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB).</p></body></html> + + + + + Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB). + + + + + Report + + + + + <html><head/><body><p>Tx/Rx or Frequency calibration sequence length</p></body></html> + + + + + Tx/Rx or Frequency calibration sequence length + + + + + s + + + + + T/R + + + + + Toggle Tx mode + + + + + Tx JT9 @ + + + + + Audio Tx frequency + + + + + + Tx + + + + + Tx# + + + + + <html><head/><body><p>Double-click on another caller to queue that call for your next QSO.</p></body></html> + + + + + Double-click on another caller to queue that call for your next QSO. + + + + + Next Call + + + + + 1 + + + + + + + Send this message in next Tx interval + + + + + Ctrl+2 + + + + + <html><head/><body><p>Send this message in next Tx interval</p><p>Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders)</p></body></html> + + + + + Send this message in next Tx interval +Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders) + + + + + Ctrl+1 + + + + + + + + Switch to this Tx message NOW + + + + + Tx &2 + + + + + Alt+2 + + + + + <html><head/><body><p>Switch to this Tx message NOW</p><p>Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders)</p></body></html> + + + + + Switch to this Tx message NOW +Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders) + + + + + Tx &1 + + + + + Alt+1 + + + + + Ctrl+6 + + + + + <html><head/><body><p>Send this message in next Tx interval</p><p>Double-click to reset to the standard 73 message</p></body></html> + + + + + Send this message in next Tx interval +Double-click to reset to the standard 73 message + + + + + Ctrl+5 + + + + + Ctrl+3 + + + + + Tx &3 + + + + + Alt+3 + + + + + <html><head/><body><p>Send this message in next Tx interval</p><p>Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type 2 compound call holders)</p><p>RR73 messages should only be used when you are reasonably confident that no message repetitions will be required</p></body></html> + + + + + Send this message in next Tx interval +Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type 2 compound call holders) +RR73 messages should only be used when you are reasonably confident that no message repetitions will be required + + + + + Ctrl+4 + + + + + <html><head/><body><p>Switch to this Tx message NOW</p><p>Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type2 compound call holders)</p><p>RR73 messages should only be used when you are reasonably confident that no message repetitions will be required</p></body></html> + + + + + Switch to this Tx message NOW +Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type2 compound call holders) +RR73 messages should only be used when you are reasonably confident that no message repetitions will be required + + + + + Tx &4 + + + + + Alt+4 + + + + + <html><head/><body><p>Switch to this Tx message NOW</p><p>Double-click to reset to the standard 73 message</p></body></html> + + + + + Switch to this Tx message NOW +Double-click to reset to the standard 73 message + + + + + Tx &5 + + + + + Alt+5 + + + + + Now + + + + + Generate standard messages for minimal QSO + + + + + Generate Std Msgs + + + + + Tx &6 + + + + + Alt+6 + + + + + + Enter a free text message (maximum 13 characters) +or select a predefined macro from the dropdown list. +Press ENTER to add the current text to the predefined +list. The list can be maintained in Settings (F2). + + + + + Queue up the next Tx message + + + + + Next + + + + + 2 + + + + + Calling CQ + + + + + Generate a CQ message + + + + + + + CQ + + + + + Generate message with RRR + + + + + RRR + + + + + Generate message with report + + + + + dB + + + + + Answering CQ + + + + + Generate message for replying to a CQ + + + + + + Grid + + + + + Generate message with R+report + + + + + R+dB + + + + + Generate message with 73 + + + + + 73 + + + + + Send this standard (generated) message + + + + + Gen msg + + + + + Send this free-text message (max 13 characters) + + + + + Free msg + + + + + 3 + + + + + Max dB + + + + + CQ AF + + + + + CQ AN + + + + + CQ AS + + + + + CQ EU + + + + + CQ NA + + + + + CQ OC + + + + + CQ SA + + + + + CQ 0 + + + + + CQ 1 + + + + + CQ 2 + + + + + CQ 3 + + + + + CQ 4 + + + + + CQ 5 + + + + + CQ 6 + + + + + CQ 7 + + + + + CQ 8 + + + + + CQ 9 + + + + + Reset + + + + + N List + + + + + N Slots + + + + + + Random + + + + + Call + + + + + S/N (dB) + + + + + Distance + + + + + More CQs + + + + + Percentage of 2-minute sequences devoted to transmitting. + + + + + % + + + + + Tx Pct + + + + + Band Hopping + + + + + Choose bands and times of day for band-hopping. + + + + + Schedule ... + + + + + Upload decoded messages to WSPRnet.org. + + + + + Upload spots + + + + + <html><head/><body><p>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> + + + + + 6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. + + + + + Prefer type 1 messages + + + + + No own call decodes + + + + + Transmit during the next 2-minute sequence. + + + + + Tx Next + + + + + Set Tx power in dBm (dB above 1 mW) as part of your WSPR message. + + + + + File + + + + + View + + + + + Decode + + + + + Save + + + + + Help + + + + + Mode + + + + + Configurations + + + + + Tools + + + + + Exit + + + + + Configuration + + + + + F2 + + + + + About WSJT-X + + + + + Waterfall + + + + + Open + + + + + Ctrl+O + + + + + Open next in directory + + + + + Decode remaining files in directory + + + + + Shift+F6 + + + + + Delete all *.wav && *.c2 files in SaveDir + + + + + None + + + + + Save all + + + + + Online User Guide + + + + + Keyboard shortcuts + + + + + Special mouse commands + + + + + JT9 + + + + + Save decoded + + + + + Normal + + + + + Deep + + + + + Monitor OFF at startup + + + + + Erase ALL.TXT + + + + + Erase wsjtx_log.adi + + + + + Convert mode to RTTY for logging + + + + + Log dB reports to Comments + + + + + Prompt me to log QSO + + + + + Blank line between decoding periods + + + + + Clear DX Call and Grid after logging + + + + + Display distance in miles + + + + + Double-click on call sets Tx Enable + + + + + + F7 + + + + + Tx disabled after sending 73 + + + + + Runaway Tx watchdog + + + + + Allow multiple instances + + + + + Tx freq locked to Rx freq + + + + + JT65 + + + + + JT9+JT65 + + + + + Tx messages to Rx Frequency window + + + + + Gray1 + + + + + Show DXCC entity and worked B4 status + + + + + Astronomical data + + + + + List of Type 1 prefixes and suffixes + + + + + Settings... + + + + + Local User Guide + + + + + Open log directory + + + + + JT4 + + + + + Message averaging + + + + + Enable averaging + + + + + Enable deep search + + + + + WSPR + + + + + Echo Graph + + + + + F8 + + + + + Echo + + + + + EME Echo mode + + + + + ISCAT + + + + + Fast Graph + + + + + F9 + + + + + &Download Samples ... + + + + + <html><head/><body><p>Download sample audio files demonstrating the various modes.</p></body></html> + + + + + MSK144 + + + + + QRA64 + + + + + Release Notes + + + + + Enable AP for DX Call + + + + + FreqCal + + + + + Measure reference spectrum + + + + + Measure phase response + + + + + Erase reference spectrum + + + + + Execute frequency calibration cycle + + + + + Equalization tools ... + + + + + WSPR-LF + + + + + Experimental LF/MF mode + + + + + FT8 + + + + + + Enable AP + + + + + Solve for calibration parameters + + + + + Copyright notice + + + + + Shift+F1 + + + + + Fox log + + + + + FT8 DXpedition Mode User Guide + + + + + Reset Cabrillo log ... + + + + + Color highlighting scheme + + + + + Contest Log + + + + + Export Cabrillo log ... + + + + + Quick-Start Guide to WSJT-X 2.0 + + + + + Contest log + + + + + Erase WSPR hashtable + + + + + FT4 + + + + + Rig Control Error + + + + + Do you want to reconfigure the radio interface? + + + + + Error Scanning ADIF Log + + + + + Scanned ADIF log, %1 worked before records created + + + + + Error Loading LotW Users Data + + + + + Error Writing WAV File + + + + + Configurations... + + + + + Error Killing jt9.exe Process + + + + + KillByName return code: %1 + + + + + Error removing "%1" + + + + + Click OK to retry + + + + + + Improper mode + + + + + + File Open Error + + + + + + + + + Cannot open "%1" for append: %2 + + + + + Error saving c2 file + + + + + Error in Sound Input + + + + + Error in Sound Output + + + + + Change Operator + + + + + New operator: + + + + + Status File Error + + + + + + Cannot open "%1" for writing: %2 + + + + + Subprocess Error + + + + + Subprocess failed with exit code %1 + + + + + + Running: %1 +%2 + + + + + Subprocess error + + + + + Reference spectrum saved + + + + + Invalid data in fmt.all at line %1 + + + + + Good Calibration Solution + + + + + <pre>%1%L2 ±%L3 ppm +%4%L5 ±%L6 Hz + +%7%L8 +%9%L10 Hz</pre> + + + + + Delete Calibration Measurements + + + + + The "fmt.all" file will be renamed as "fmt.bak" + + + + + If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work: + +"The algorithms, source code, look-and-feel of WSJT-X and related programs, and protocol specifications for the modes FSK441, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, MSK144 are Copyright (C) 2001-2019 by one or more of the following authors: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; and other members of the WSJT Development Group." + + + + + No data read from disk. Wrong file format? + + + + + Confirm Delete + + + + + Are you sure you want to delete all *.wav and *.c2 files in "%1"? + + + + + Keyboard Shortcuts + + + + + Special Mouse Commands + + + + + No more files to open. + + + + + Please choose another Tx frequency. WSJT-X will not knowingly transmit another mode in the WSPR sub-band on 30m. + + + + + WSPR Guard Band + + + + + Please choose another dial frequency. WSJT-X will not operate in Fox mode in the standard FT8 sub-bands. + + + + + Fox Mode warning + + + + + Should you switch to ARRL Field Day mode? + + + + + Should you switch to RTTY contest mode? + + + + + + + + Add to CALL3.TXT + + + + + Please enter a valid grid locator + + + + + Cannot open "%1" for read/write: %2 + + + + + %1 +is already in CALL3.TXT, do you wish to replace it? + + + + + Warning: DX Call field is empty. + + + + + Log file error + + + + + Cannot open "%1" + + + + + Error sending log to N1MM + + + + + Write returned "%1" + + + + + + + Confirm Erase + + + + + Are you sure you want to erase file ALL.TXT? + + + + + + Confirm Reset + + + + + Are you sure you want to erase your contest log? + + + + + Doing this will remove all QSO records for the current contest. They will be kept in the ADIF log file but will not be available for export in your Cabrillo log. + + + + + Cabrillo Log saved + + + + + Are you sure you want to erase file wsjtx_log.adi? + + + + + Are you sure you want to erase the WSPR hashtable? + + + + + VHF features warning + + + + + Tune digital gain + + + + + Transmit digital gain + + + + + Prefixes + + + + + Network Error + + + + + Error: %1 +UDP server %2:%3 + + + + + File Error + + + + + Phase Training Disabled + + + + + Phase Training Enabled + + + + + + Log File Error + + + + + Are you sure you want to clear the QSO queues? + + + + + MessageAveraging + + + + Message Averaging + + + + + UTC Sync DT Freq + + + + + Modes + + + + Mode + + + + + MultiSettings + + + Default + + + + + MultiSettings::impl + + + &Switch To + + + + + &Clone + + + + + Clone &Into ... + + + + + R&eset + + + + + &Rename ... + + + + + &Delete + + + + + Clone Into Configuration + + + + + Confirm overwrite of all values for configuration "%1" with values from "%2"? + + + + + Reset Configuration + + + + + Confirm reset to default values for configuration "%1"? + + + + + Delete Configuration + + + + + Confirm deletion of configuration "%1"? + + + + + NameDialog + + + New Configuration Name + + + + + Old name: + + + + + &New name: + + + + + OmniRigTransceiver + + + OmniRig: unrecognized mode + + + + + Failed to start OmniRig COM server + + + + + + OmniRig: don't know how to set rig frequency + + + + + + OmniRig: timeout waiting for update from rig + + + + + OmniRig COM/OLE error: %1 at %2: %3 (%4) + + + + + PollingTransceiver + + + Unexpected rig error + + + + + QObject + + + Invalid rig name - \ & / not allowed + + + + + User Defined + + + + + Failed to open LotW users CSV file: '%1' + + + + + OOB + + + + + Too many colours in palette. + + + + + Error reading waterfall palette file "%1:%2" too many colors. + + + + + Error reading waterfall palette file "%1:%2" invalid triplet. + + + + + Error reading waterfall palette file "%1:%2" invalid color. + + + + + Error opening waterfall palette file "%1": %2. + + + + + Error writing waterfall palette file "%1": %2. + + + + + RemoteFile + + + + + + + + File System Error + + + + + Cannot rename file: +"%1" +to: "%2" +Error(%3): %4 + + + + + Cannot delete file: +"%1" + + + + + + + Network Error + + + + + Too many redirects: %1 + + + + + Redirect not followed: %1 + + + + + Cannot commit changes to: +"%1" + + + + + Cannot open file: +"%1" +Error(%2): %3 + + + + + Cannot make path: +"%1" + + + + + Cannot write to file: +"%1" +Error(%2): %3 + + + + + SampleDownloader::impl + + + Download Samples + + + + + Input Error + + + + + Invalid URL format + + + + + SoundInput + + + An error opening the audio input device has occurred. + + + + + An error occurred during read from the audio input device. + + + + + Audio data not being fed to the audio input device fast enough. + + + + + Non-recoverable error, audio input device not usable at this time. + + + + + Requested input audio format is not valid. + + + + + Requested input audio format is not supported on device. + + + + + Failed to initialize audio sink device + + + + + Idle + + + + + Receiving + + + + + Suspended + + + + + Interrupted + + + + + Error + + + + + Stopped + + + + + SoundOutput + + + An error opening the audio output device has occurred. + + + + + An error occurred during write to the audio output device. + + + + + Audio data not being fed to the audio output device fast enough. + + + + + Non-recoverable error, audio output device not usable at this time. + + + + + Requested output audio format is not valid. + + + + + Requested output audio format is not supported on device. + + + + + Idle + + + + + Sending + + + + + Suspended + + + + + Interrupted + + + + + Error + + + + + Stopped + + + + + StationDialog + + + Add Station + + + + + &Band: + + + + + &Offset (MHz): + + + + + &Antenna: + + + + + StationList::impl + + + Band name + + + + + Frequency offset + + + + + Antenna description + + + + + Band + + + + + Offset + + + + + Antenna Description + + + + + TransceiverBase + + + Unexpected rig error + + + + + WideGraph + + + Dialog + + + + + Controls + + + + + Spectrum gain + + + + + Palette + + + + + <html><head/><body><p>Enter definition for a new color palette.</p></body></html> + + + + + Adjust... + + + + + Waterfall gain + + + + + <html><head/><body><p>Set fractional size of spectrum in this window.</p></body></html> + + + + + % + + + + + Spec + + + + + <html><head/><body><p>Flatten spectral baseline over the full displayed interval.</p></body></html> + + + + + Flatten + + + + + <html><head/><body><p>Compute and save a reference spectrum. (Not yet fully implemented.)</p></body></html> + + + + + Ref Spec + + + + + Smoothing of Linear Average spectrum + + + + + Smooth + + + + + Compression factor for frequency scale + + + + + Bins/Pixel + + + + + Select waterfall palette + + + + + <html><head/><body><p>Select data for spectral display</p></body></html> + + + + + Current + + + + + Cumulative + + + + + Linear Avg + + + + + Reference + + + + + <html><head/><body><p>Frequency at left edge of waterfall</p></body></html> + + + + + Hz + + + + + Start + + + + + <html><head/><body><p>Decode JT9 only above this frequency</p></body></html> + + + + + JT9 + + + + + JT65 + + + + + Number of FFTs averaged (controls waterfall scrolling rate) + + + + + N Avg + + + + + Waterfall zero + + + + + Spectrum zero + + + + + Wide Graph + + + + + + Read Palette + + + + + configuration_dialog + + + Settings + + + + + Genera&l + + + + + General station details and settings. + + + + + Station Details + + + + + My C&all: + + + + + Station callsign. + + + + + M&y Grid: + + + + + <html><head/><body><p>Maidenhead locator, preferably 6 characters.</p></body></html> + + + + + Check to allow grid changes from external programs + + + + + AutoGrid + + + + + IARU Region: + + + + + <html><head/><body><p>Select your IARU region.</p></body></html> + + + + + Message generation for type 2 compound callsign holders: + + + + + <html><head/><body><p>Type 2 compound callsigns are those with prefixes or suffixes not included in the allowed shortlist (See Help-&gt;Add-on prefixes and suffixes).</p><p>This option determines which generated messages should contain your full type 2 compound call sign rather than your base callsign. It only applies if you have a type 2 compound callsign.</p><p>This option controls the way the messages that are used to answer CQ calls are generated. Generated messages 6 (CQ) and 5 (73) will always contain your full callsign. The JT65 and JT9 protocols allow for some standard messages with your full call at the expense of another piece of information such as the DX call or your locator.</p><p>Choosing message 1 omits the DX callsign which may be an issue when replying to CQ calls. Choosing message 3 also omits the DX callsign and many versions of this and other software will not extract the report. Choosing neither means that your full callsign only goes in your message 5 (73) so your QSO partner may log the wrong callsign.</p><p>None of these options are perfect, message 3 is usually best but be aware your QSO partner may not log the report you send them.</p></body></html> + + + + + Full call in Tx1 + + + + + Full call in Tx3 + + + + + Full call in Tx5 only + + + + + Display + + + + + Show outgoing transmitted messages in the Rx frequency window. + + + + + &Tx messages to Rx frequency window + + + + + Show if decoded stations are new DXCC entities or worked before. + + + + + Show &DXCC, grid, and worked-before status + + + + + <html><head/><body><p>Check to have decodes for a new period start at the top of the Band Activity window and not scroll off the top when the window is full.</p><p>This is to aid selecting decodes to double-click while decoding is still in progress. Use the Band Activity vertical scroll bar to reveal decodes past the bottom of the window.</p></body></html> + + + + + Start new period decodes at top + + + + + Show principal prefix instead of country name + + + + + Set the font characteristics for the application. + + + + + Font... + + + + + Set the font characteristics for the Band Activity and Rx Frequency areas. + + + + + Decoded Text Font... + + + + + Include a separator line between periods in the band activity window. + + + + + &Blank line between decoding periods + + + + + Show distance to DX station in miles rather than kilometers. + + + + + Display dista&nce in miles + + + + + Behavior + + + + + Decode after EME delay + + + + + Tx watchdog: + + + + + <html><head/><body><p>Number of minutes before unattended transmissions are aborted</p></body></html> + + + + + Disabled + + + + + minutes + + + + + Enable VHF/UHF/Microwave features + + + + + Single decode + + + + + <html><head/><body><p>Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.</p></body></html> + + + + + Allow Tx frequency changes while transmitting + + + + + Don't start decoding until the monitor button is clicked. + + + + + Mon&itor off at startup + + + + + <html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html> + + + + + Monitor returns to last used frequency + + + + + Alternate F1-F6 bindings + + + + + Turns off automatic transmissions after sending a 73 or any other free +text message. + + + + + Di&sable Tx after sending 73 + + + + + Send a CW ID after every 73 or free text message. + + + + + CW ID a&fter 73 + + + + + Periodic CW ID Inter&val: + + + + + Send a CW ID periodically every few minutes. +This might be required under your countries licence regulations. +It will not interfere with other users as it is always sent in the +quiet period when decoding is done. + + + + + Automatic transmission mode. + + + + + Doubl&e-click on call sets Tx enable + + + + + Calling CQ forces Call 1st + + + + + &Radio + + + + + Radio interface configuration settings. + + + + + Settings that control your CAT interface. + + + + + CAT Control + + + + + + Port: + + + + + Serial port used for CAT control. + + + + + Serial Port Parameters + + + + + Baud Rate: + + + + + Serial port data rate which must match the setting of your radio. + + + + + 1200 + + + + + 2400 + + + + + 4800 + + + + + 9600 + + + + + 19200 + + + + + 38400 + + + + + 57600 + + + + + 115200 + + + + + <html><head/><body><p>Number of data bits used to communicate with your radio's CAT interface (usually eight).</p></body></html> + + + + + Data Bits + + + + + D&efault + + + + + Se&ven + + + + + E&ight + + + + + <html><head/><body><p>Number of stop bits used when communicating with your radio's CAT interface</p><p>(consult you radio's manual for details).</p></body></html> + + + + + Stop Bits + + + + + + Default + + + + + On&e + + + + + T&wo + + + + + <html><head/><body><p>Flow control protocol used between this computer and your radio's CAT interface (usually &quot;None&quot; but some require &quot;Hardware&quot;).</p></body></html> + + + + + Handshake + + + + + &None + + + + + Software flow control (very rare on CAT interfaces). + + + + + XON/XOFF + + + + + Flow control using the RTS and CTS RS-232 control lines +not often used but some radios have it as an option and +a few, particularly some Kenwood rigs, require it). + + + + + &Hardware + + + + + Special control of CAT port control lines. + + + + + Force Control Lines + + + + + + High + + + + + + Low + + + + + DTR: + + + + + RTS: + + + + + How this program activates the PTT on your radio + + + + + PTT Method + + + + + <html><head/><body><p>No PTT activation, instead the radio's automatic VOX is used to key the transmitter.</p><p>Use this if you have no radio interface hardware.</p></body></html> + + + + + VO&X + + + + + <html><head/><body><p>Use the RS-232 DTR control line to toggle your radio's PTT, requires hardware to inteface the line.</p><p>Some commercial interface units also use this method.</p><p>The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.</p></body></html> + + + + + &DTR + + + + + Some radios support PTT via CAT commands, +use this option if your radio supports it and you have no +other hardware interface for PTT. + + + + + C&AT + + + + + <html><head/><body><p>Use the RS-232 RTS control line to toggle your radio's PTT, requires hardware to inteface the line.</p><p>Some commercial interface units also use this method.</p><p>The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.</p></body></html> + + + + + R&TS + + + + + <html><head/><body><p>Select the RS-232 serial port utilised for PTT control, this option is available when DTR or RTS is selected above as a transmit method.</p><p>This port can be the same one as the one used for CAT control.</p><p>For some interface types the special value CAT may be chosen, this is used for non-serial CAT interfaces that can control serial port control lines remotely (OmniRig for example).</p></body></html> + + + + + Modulation mode selected on radio. + + + + + Mode + + + + + <html><head/><body><p>USB is usually the correct modulation mode,</p><p>unless the radio has a special data or packet mode setting</p><p>for AFSK operation.</p></body></html> + + + + + US&B + + + + + Don't allow the program to set the radio mode +(not recommended but use if the wrong mode +or bandwidth is selected). + + + + + + None + + + + + If this is availabe then it is usually the correct mode for this program. + + + + + Data/P&kt + + + + + Some radios can select the audio input using a CAT command, +this setting allows you to select which audio input will be used +(if it is available then generally the Rear/Data option is best). + + + + + Transmit Audio Source + + + + + Rear&/Data + + + + + &Front/Mic + + + + + Rig: + + + + + Poll Interval: + + + + + <html><head/><body><p>Interval to poll rig for status. Longer intervals will mean that changes to the rig will take longer to be detected.</p></body></html> + + + + + s + + + + + <html><head/><body><p>Attempt to connect to the radio with these settings.</p><p>The button will turn green if the connection is successful or red if there is a problem.</p></body></html> + + + + + Test CAT + + + + + Attempt to activate the transmitter. +Click again to deactivate. Normally no power should be +output since there is no audio being generated at this time. +Check that any Tx indication on your radio and/or your +radio interface behave as expected. + + + + + Test PTT + + + + + Split Operation + + + + + Fake It + + + + + Rig + + + + + A&udio + + + + + Audio interface settings + + + + + Souncard + + + + + Soundcard + + + + + Select the audio CODEC to use for transmitting. +If this is your default device for system sounds then +ensure that all system sounds are disabled otherwise +you will broadcast any systems sounds generated during +transmitting periods. + + + + + Select the audio CODEC to use for receiving. + + + + + &Input: + + + + + Select the channel to use for receiving. + + + + + + Mono + + + + + + Left + + + + + + Right + + + + + + Both + + + + + Select the audio channel used for transmission. +Unless you have multiple radios connected on different +channels; then you will usually want to select mono or +both here. + + + + + Ou&tput: + + + + + + Save Directory + + + + + Loc&ation: + + + + + Path to which .WAV files are saved. + + + + + + TextLabel + + + + + Click to select a different save directory for .WAV files. + + + + + S&elect + + + + + + AzEl Directory + + + + + Location: + + + + + Select + + + + + Power Memory By Band + + + + + Remember power settings by band + + + + + Enable power memory during transmit + + + + + Transmit + + + + + Enable power memory during tuning + + + + + Tune + + + + + Tx &Macros + + + + + Canned free text messages setup + + + + + &Add + + + + + &Delete + + + + + Drag and drop items to rearrange order +Right click for item specific actions +Click, SHIFT+Click and, CRTL+Click to select items + + + + + Reportin&g + + + + + Reporting and logging settings + + + + + Logging + + + + + The program will pop up a partially completed Log QSO dialog when you send a 73 or free text message. + + + + + Promp&t me to log QSO + + + + + Op Call: + + + + + Some logging programs will not accept the type of reports +saved by this program. +Check this option to save the sent and received reports in the +comments field. + + + + + d&B reports to comments + + + + + Check this option to force the clearing of the DX Call +and DX Grid fields when a 73 or free text message is sent. + + + + + Clear &DX call and grid after logging + + + + + <html><head/><body><p>Some logging programs will not accept WSJT-X mode names.</p></body></html> + + + + + Con&vert mode to RTTY + + + + + <html><head/><body><p>The callsign of the operator, if different from the station callsign.</p></body></html> + + + + + <html><head/><body><p>Check to have QSOs logged automatically, when complete.</p></body></html> + + + + + Log automatically (contesting only) + + + + + Network Services + + + + + The program can send your station details and all +decoded signals as spots to the http://pskreporter.info web site. +This is used for reverse beacon analysis which is very useful +for assessing propagation and system performance. + + + + + Enable &PSK Reporter Spotting + + + + + UDP Server + + + + + UDP Server: + + + + + <html><head/><body><p>Optional hostname of network service to receive decodes.</p><p>Formats:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">hostname</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 multicast group address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 multicast group address</li></ul><p>Clearing this field will disable the broadcasting of UDP status updates.</p></body></html> + + + + + UDP Server port number: + + + + + <html><head/><body><p>Enter the service port number of the UDP server that WSJT-X should send updates to. If this is zero no updates will be broadcast.</p></body></html> + + + + + <html><head/><body><p>With this enabled WSJT-X will accept certain requests back from a UDP server that receives decode messages.</p></body></html> + + + + + Accept UDP requests + + + + + <html><head/><body><p>Indicate acceptance of an incoming UDP request. The effect of this option varies depending on the operating system and window manager, its intent is to notify the acceptance of an incoming UDP request even if this application is minimized or hidden.</p></body></html> + + + + + Notify on accepted UDP request + + + + + <html><head/><body><p>Restore the window from minimized if an UDP request is accepted.</p></body></html> + + + + + Accepted UDP request restores window + + + + + Secondary UDP Server (deprecated) + + + + + <html><head/><body><p>When checked, WSJT-X will broadcast a logged contact in ADIF format to the configured hostname and port. </p></body></html> + + + + + Enable logged contact ADIF broadcast + + + + + Server name or IP address: + + + + + <html><head/><body><p>Optional host name of N1MM Logger+ program to receive ADIF UDP broadcasts. This is usually 'localhost' or ip address 127.0.0.1</p><p>Formats:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">hostname</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 multicast group address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 multicast group address</li></ul><p>Clearing this field will disable broadcasting of ADIF information via UDP.</p></body></html> + + + + + Server port number: + + + + + <html><head/><body><p>Enter the port number that WSJT-X should use for UDP broadcasts of ADIF log information. For N1MM Logger+, this value should be 2333. If this is zero, no updates will be broadcast.</p></body></html> + + + + + Frequencies + + + + + Default frequencies and band specific station details setup + + + + + <html><head/><body><p>See &quot;Frequency Calibration&quot; in the WSJT-X User Guide for details of how to determine these parameters for your radio.</p></body></html> + + + + + Frequency Calibration + + + + + Slope: + + + + + ppm + + + + + Intercept: + + + + + Hz + + + + + Working Frequencies + + + + + <html><head/><body><p>Right click to maintain the working frequencies list.</p></body></html> + + + + + Station Information + + + + + Items may be edited. +Right click for insert and delete options. + + + + + Colors + Colours + + + + Decode Highlightling + + + + + <html><head/><body><p>Enable or disable using the check boxes and right-click an item to change or unset the foreground color, background color, or reset the item to default values. Drag and drop the items to change their priority, higher in the list is higher in priority.</p><p>Note that each foreground or background color may be either set or unset, unset means that it is not allocated for that item's type and lower priority items may apply.</p></body></html> + + + + + <html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html> + + + + + Reset Highlighting + + + + + <html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html> + + + + + Highlight by Mode + + + + + <html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html> + + + + + Rescan ADIF Log + + + + + Include extra WAE entities + + + + + <html><head/><body><p>Controls for Logbook of the World user lookup.</p></body></html> + + + + + Logbook of the World User Validation + + + + + Users CSV file URL: + + + + + <html><head/><body><p>URL of the ARRL LotW user's last upload dates and times data file which is used to highlight decodes from stations that are known to upload their log file to LotW.</p></body></html> + + + + + https://lotw.arrl.org/lotw-user-activity.csv + + + + + <html><head/><body><p>Push this button to fetch the latest LotW user's upload date and time data file.</p></body></html> + + + + + Fetch Now + + + + + Age of last upload less than: + + + + + <html><head/><body><p>Adjust this spin box to set the age threshold of LotW user's last upload date that is accepted as a current LotW user.</p></body></html> + + + + + days + + + + + Advanced + + + + + <html><head/><body><p>User-selectable parameters for JT65 VHF/UHF/Microwave decoding.</p></body></html> + + + + + JT65 VHF/UHF/Microwave decoding parameters + + + + + Random erasure patterns: + + + + + <html><head/><body><p>Maximum number of erasure patterns for stochastic soft-decision Reed Solomon decoder is 10^(n/2).</p></body></html> + + + + + Aggressive decoding level: + + + + + <html><head/><body><p>Higher levels will increase the probability of decoding, but will also increase probability of a false decode.</p></body></html> + + + + + Two-pass decoding + + + + + Special operating activity: Generation of FT4, FT8, and MSK144 messages + + + + + <html><head/><body><p>FT8 DXpedition mode: Hound operator calling the DX.</p></body></html> + + + + + Hound + + + + + <html><head/><body><p>North American VHF/UHF/Microwave contests and others in which a 4-character grid locator is the required exchange.</p></body></html> + + + + + NA VHF Contest + + + + + <html><head/><body><p>FT8 DXpedition mode: Fox (DXpedition) operator.</p></body></html> + + + + + Fox + + + + + <html><head/><body><p>European VHF+ contests requiring a signal report, serial number, and 6-character locator.</p></body></html> + + + + + EU VHF Contest + + + + + + <html><head/><body><p>ARRL RTTY Roundup and similar contests. Exchange is US state, Canadian province, or &quot;DX&quot;.</p></body></html> + + + + + RTTY Roundup messages + + + + + RTTY RU Exch: + + + + + NJ + + + + + + <html><head/><body><p>ARRL Field Day exchange: number of transmitters, Class, and ARRL/RAC section or &quot;DX&quot;.</p></body></html> + + + + + ARRL Field Day + + + + + FD Exch: + + + + + 6A SNJ + + + + + Miscellaneous + + + + + Degrade S/N of .wav file: + + + + + + For offline sensitivity tests + + + + + dB + + + + + Receiver bandwidth: + + + + + Hz + + + + + Tx delay: + + + + + Minimum delay between assertion of PTT and start of Tx audio. + + + + + s + + + + + Tone spacing + + + + + <html><head/><body><p>Generate Tx audio with twice the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-2 before generating RF.</p></body></html> + + + + + x 2 + + + + + <html><head/><body><p>Generate Tx audio with four times the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-4 before generating RF.</p></body></html> + + + + + x 4 + + + + + Waterfall spectra + + + + + Low sidelobes + + + + + Most sensitive + + + + + <html><head/><body><p>Discard (Cancel) or apply (OK) configuration changes including</p><p>resetting the radio interface and applying any soundcard changes</p></body></html> + + + + + main + + + + Fatal error + + + + + + Unexpected fatal error + + + + + Where <rig-name> is for multi-instance support. + + + + + rig-name + + + + + Where <configuration> is an existing one. + + + + + configuration + + + + + Writable files in test location. Use with caution, for testing only. + + + + + Command line error + + + + + Command line help + + + + + Application version + + + + + Another instance may be running + + + + + try to remove stale lock file? + + + + + Failed to create a temporary directory + + + + + + Path: "%1" + + + + + Failed to create a usable temporary directory + + + + + Another application may be locking the directory + + + + + Failed to create data directory + + + + + path: "%1" + + + + + Shared memory error + + + + + Unable to create shared memory segment + + + + + wf_palette_design_dialog + + + Palette Designer + + + + + <html><head/><body><p>Double click a color to edit it.</p><p>Right click to insert or delete colors.</p><p>Colors at the top represent weak signals</p><p>and colors at the bottom represent strong</p><p>signals. You can have up to 256 colors.</p></body></html> + + + + diff --git a/translations/wsjtx_pt_PT.ts b/translations/wsjtx_pt_PT.ts new file mode 100644 index 000000000..6167f5d8d --- /dev/null +++ b/translations/wsjtx_pt_PT.ts @@ -0,0 +1,6007 @@ + + + + + AbstractLogWindow + + + &Delete ... + + + + + AbstractLogWindow::impl + + + Confirm Delete + + + + + Are you sure you want to delete the %n selected QSO(s) from the log + + + + + + + + Astro + + + + Doppler tracking + + + + + <html><head/><body><p>One station does all Doppler shift correction, their QSO partner receives and transmits on the sked frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html> + + + + + Full Doppler to DX Grid + + + + + <html><head/><body><p>Transmit takes place on sked frequency and receive frequency is corrected for own echoes. </p><p>This mode can be used for calling CQ, or when using Echo mode.</p></body></html> + + + + + Own Echo + + + + + <html><head/><body><p>Both stations correct for Doppler shift such that they would be heard on the moon at the sked frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p><p>Use this option also for Echo mode.</p></body></html> + + + + + Constant frequency on Moon + + + + + <html><head/><body><p>DX station announces their TX Freq, which is entered as the Sked Freq. Correction applied to RX and TX so you appear on the DX's station's own echo Freq.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html> + + + + + On DX Echo + + + + + <html><head/><body><p>Tune radio manually and select this mode to put your echo on the same frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html> + + + + + Call DX + + + + + <html><head/><body><p>No Doppler shift correction is applied. This may be used when the QSO partner does full Doppler correction to your grid square.</p></body></html> + + + + + None + + + + + Sked frequency + + + + + + 0 + + + + + Rx: + + + + + Tx: + + + + + <html><head/><body><p>Press and hold the CTRL key to adjust the sked frequency manually with the rig's VFO dial or enter frequency directly into the band entry field on the main window.</p></body></html> + + + + + Astro Data + + + + + Astronomical Data + + + + + Doppler Tracking Error + + + + + Split operating is required for Doppler tracking + + + + + Go to "Menu->File->Settings->Radio" to enable split operation + + + + + Bands + + + Band name + + + + + Lower frequency limit + + + + + Upper frequency limit + + + + + Band + + + + + Lower Limit + + + + + Upper Limit + + + + + CAboutDlg + + + About WSJT-X + + + + + OK + + + + + CPlotter + + + &Set Rx && Tx Offset + + + + + CabrilloLog + + + Freq(MHz) + + + + + Mode + + + + + Date & Time(UTC) + + + + + Call + + + + + Sent + + + + + Rcvd + + + + + Band + + + + + CabrilloLogWindow + + + Contest Log + + + + + <html><head/><body><p>Right-click here for available actions.</p></body></html> + + + + + Right-click here for available actions. + + + + + CallsignDialog + + + Callsign + + + + + ColorHighlighting + + + + + + + + + + + + + + + + + + K1ABC + + + + + CQ in message + + + + + My Call in message + + + + + Transmitted message + + + + + New DXCC + + + + + New Grid + + + + + New DXCC on Band + + + + + New Call + + + + + New Grid on Band + + + + + New Call on Band + + + + + Uploads to LotW + + + + + New Continent + + + + + New Continent on Band + + + + + New CQ Zone + + + + + New CQ Zone on Band + + + + + New ITU Zone + + + + + New ITU Zone on Band + + + + + Configuration::impl + + + + + &Delete + + + + + + &Insert ... + + + + + Failed to create save directory + + + + + path: "%1% + + + + + Failed to create samples directory + + + + + path: "%1" + + + + + &Load ... + + + + + &Save as ... + + + + + &Merge ... + + + + + &Reset + + + + + Serial Port: + + + + + Serial port used for CAT control + + + + + Network Server: + + + + + Optional hostname and port of network service. +Leave blank for a sensible default on this machine. +Formats: + hostname:port + IPv4-address:port + [IPv6-address]:port + + + + + USB Device: + + + + + Optional device identification. +Leave blank for a sensible default for the rig. +Format: + [VID[:PID[:VENDOR[:PRODUCT]]]] + + + + + Invalid audio input device + + + + + Invalid audio out device + + + + + Invalid PTT method + + + + + Invalid PTT port + + + + + + Invalid Contest Exchange + + + + + You must input a valid ARRL Field Day exchange + + + + + You must input a valid ARRL RTTY Roundup exchange + + + + + Reset Decode Highlighting + + + + + Reset all decode highlighting and priorities to default values + + + + + WSJT-X Decoded Text Font Chooser + + + + + Load Working Frequencies + + + + + + + Frequency files (*.qrg);;All files (*.*) + + + + + Replace Working Frequencies + + + + + Are you sure you want to discard your current working frequencies and replace them with the loaded ones? + + + + + Merge Working Frequencies + + + + + + + Not a valid frequencies file + + + + + Incorrect file magic + + + + + Version is too new + + + + + Contents corrupt + + + + + Save Working Frequencies + + + + + Only Save Selected Working Frequencies + + + + + Are you sure you want to save only the working frequencies that are currently selected? Click No to save all. + + + + + Reset Working Frequencies + + + + + Are you sure you want to discard your current working frequencies and replace them with default ones? + + + + + Save Directory + + + + + AzEl Directory + + + + + Rig control error + + + + + Failed to open connection to rig + + + + + Rig failure + + + + + DXLabSuiteCommanderTransceiver + + + Failed to connect to DX Lab Suite Commander + + + + + + DX Lab Suite Commander didn't respond correctly reading frequency: + + + + + DX Lab Suite Commander sent an unrecognised TX state: + + + + + DX Lab Suite Commander didn't respond correctly polling TX status: + + + + + DX Lab Suite Commander rig did not respond to PTT: + + + + + DX Lab Suite Commander didn't respond correctly polling frequency: + + + + + DX Lab Suite Commander didn't respond correctly polling TX frequency: + + + + + DX Lab Suite Commander sent an unrecognised split state: + + + + + DX Lab Suite Commander didn't respond correctly polling split status: + + + + + DX Lab Suite Commander sent an unrecognised mode: " + + + + + DX Lab Suite Commander didn't respond correctly polling mode: + + + + + DX Lab Suite Commander send command failed + + + + + + DX Lab Suite Commander failed to send command "%1": %2 + + + + + + DX Lab Suite Commander send command "%1" read reply failed: %2 + + + + + + DX Lab Suite Commander retries exhausted sending command "%1" + + + + + DX Lab Suite Commander sent an unrecognized frequency + + + + + DecodeHighlightingListView + + + &Foreground color ... + + + + + Choose %1 Foreground Color + + + + + &Unset foreground color + + + + + &Background color ... + + + + + Choose %1 Background Color + + + + + U&nset background color + + + + + &Reset this item to defaults + + + + + DecodeHighlightingModel + + + Highlight Type + + + + + Designer + + + &Delete + + + + + &Insert ... + + + + + Insert &after ... + + + + + Import Palette + + + + + + Palettes (*.pal) + + + + + Export Palette + + + + + Dialog + + + Gray time: + + + + + Directory + + + + URL Error + + + + + + Invalid URL: +"%1" + + + + + + + + + + + JSON Error + + + + + Contents file syntax error %1 at character offset %2 + + + + + Contents file top level must be a JSON array + + + + + File System Error + + + + + Failed to open "%1" +Error: %2 - %3 + + + + + Contents entries must be a JSON array + + + + + Contents entries must have a valid type + + + + + Contents entries must have a valid name + + + + + Contents entries must be JSON objects + + + + + Contents directories must be relative and within "%1" + + + + + Network Error + + + + + Authentication required + + + + + DisplayText + + + &Erase + + + + + EchoGraph + + + + Echo Graph + + + + + <html><head/><body><p>Compression factor for frequency scale</p></body></html> + + + + + Bins/Pixel + + + + + Gain + + + + + <html><head/><body><p>Echo spectrum gain</p></body></html> + + + + + Zero + + + + + <html><head/><body><p>Echo spectrum zero</p></body></html> + + + + + <html><head/><body><p>Smoothing of echo spectrum</p></body></html> + + + + + Smooth + + + + + <html><head/><body><p>Number of echo transmissions averaged</p></body></html> + + + + + N: 0 + + + + + <html><head/><body><p>Click to cycle through a sequence of colors and line widths.</p></body></html> + + + + + Colors + Cores + + + + EmulateSplitTransceiver + + + Emulated split mode requires rig to be in simplex mode + + + + + EqualizationToolsDialog::impl + + + Phase + + + + + + Freq (Hz) + + + + + Phase (Π) + + + + + Delay (ms) + + + + + Measured + + + + + Proposed + + + + + Current + + + + + Group Delay + + + + + Amplitude + + + + + Relative Power (dB) + + + + + Reference + + + + + Phase ... + + + + + Refresh + + + + + Discard Measured + + + + + ExistingNameDialog + + + Configuration to Clone From + + + + + &Source Configuration Name: + + + + + ExportCabrillo + + + Dialog + + + + + Location: + + + + + SNJ + + + + + Contest: + + + + + ARRL-RTTY + + + + + Callsign: + + + + + Category-Operator: + + + + + SINGLE-OP + + + + + Category-Transmitter: + + + + + ONE + + + + + Category-Power: + + + + + LOW + + + + + Category-Assisted: + + + + + NON-ASSISTED + + + + + Category-Band: + + + + + ALL + + + + + Claimed-Score: + + + + + Operators: + + + + + Club: + + + + + Name: + + + + + + Address: + + + + + Save Log File + + + + + Cabrillo Log (*.cbr) + + + + + Cannot open "%1" for writing: %2 + + + + + Export Cabrillo File Error + + + + + FastGraph + + + + Fast Graph + + + + + Waterfall gain + + + + + Waterfall zero + + + + + Spectrum zero + + + + + <html><head/><body><p>Set reasonable levels for gain and zero sliders.</p></body></html> + + + + + Auto Level + + + + + FoxLog::impl + + + Date & Time(UTC) + + + + + Call + + + + + Grid + + + + + Sent + + + + + Rcvd + + + + + Band + + + + + FoxLogWindow + + + Fox Log + + + + + <html><head/><body><p>Right-click here for available actions.</p></body></html> + + + + + Callers: + + + + + + + N + + + + + In progress: + + + + + Rate: + + + + + &Export ADIF ... + + + + + Export ADIF Log File + + + + + ADIF Log (*.adi) + + + + + Export ADIF File Error + + + + + Cannot open "%1" for writing: %2 + + + + + &Reset ... + + + + + Confirm Reset + + + + + Are you sure you want to erase file FoxQSO.txt and start a new Fox log? + + + + + FrequencyDialog + + + Add Frequency + + + + + IARU &Region: + + + + + &Mode: + + + + + &Frequency (MHz): + + + + + FrequencyList_v2 + + + + IARU Region + + + + + + Mode + + + + + + Frequency + + + + + + Frequency (MHz) + + + + + HRDTransceiver + + + + Failed to connect to Ham Radio Deluxe + + + + + + Failed to open file "%1": %2. + + + + + + Ham Radio Deluxe: no rig found + + + + + Ham Radio Deluxe: rig doesn't support mode + + + + + Ham Radio Deluxe: sent an unrecognised mode + + + + + Ham Radio Deluxe: item not found in %1 dropdown list + + + + + Ham Radio Deluxe: button not available + + + + + Ham Radio Deluxe didn't respond as expected + + + + + Ham Radio Deluxe: rig has disappeared or changed + + + + + Ham Radio Deluxe send command "%1" failed %2 + + + + + + + Ham Radio Deluxe: failed to write command "%1" + + + + + Ham Radio Deluxe sent an invalid reply to our command "%1" + + + + + Ham Radio Deluxe failed to reply to command "%1" %2 + + + + + + Ham Radio Deluxe retries exhausted sending command "%1" + + + + + Ham Radio Deluxe didn't respond to command "%1" as expected + + + + + HamlibTransceiver + + + + Hamlib initialisation error + + + + + Hamlib settings file error: %1 at character offset %2 + + + + + Hamlib settings file error: top level must be a JSON object + + + + + Hamlib settings file error: config must be a JSON object + + + + + Unsupported CAT type + + + + + Hamlib error: %1 while %2 + + + + + opening connection to rig + + + + + getting current frequency + + + + + getting current mode + + + + + + exchanging VFOs + + + + + + getting other VFO frequency + + + + + getting other VFO mode + + + + + setting current VFO + + + + + getting frequency + + + + + getting mode + + + + + + getting current VFO + + + + + + + + getting current VFO frequency + + + + + + + + + + setting frequency + + + + + + + + getting current VFO mode + + + + + + + + + setting current VFO mode + + + + + + setting/unsetting split mode + + + + + + setting split mode + + + + + setting split TX frequency and mode + + + + + setting split TX frequency + + + + + getting split TX VFO mode + + + + + setting split TX VFO mode + + + + + getting PTT state + + + + + setting PTT on + + + + + setting PTT off + + + + + setting a configuration item + + + + + getting a configuration item + + + + + HelpTextWindow + + + Help file error + + + + + Cannot open "%1" for reading + + + + + Error: %1 + + + + + IARURegions + + + + IARU Region + + + + + LogQSO + + + Click OK to confirm the following QSO: + + + + + Call + + + + + Start + + + + + + dd/MM/yyyy HH:mm:ss + + + + + End + + + + + Mode + + + + + Band + + + + + Rpt Sent + + + + + Rpt Rcvd + + + + + Grid + + + + + Name + + + + + Tx power + + + + + + Retain + + + + + Comments + + + + + Operator + + + + + Exch sent + + + + + Rcvd + + + + + + Invalid QSO Data + + + + + Check exchange sent and received + + + + + Check all fields + + + + + Log file error + + + + + Cannot open "%1" for append + + + + + Error: %1 + + + + + LotWUsers::impl + + + Network Error - SSL/TLS support not installed, cannot fetch: +'%1' + + + + + Network Error - Too many redirects: +'%1' + + + + + Network Error: +%1 + + + + + File System Error - Cannot commit changes to: +"%1" + + + + + File System Error - Cannot open file: +"%1" +Error(%2): %3 + + + + + File System Error - Cannot write to file: +"%1" +Error(%2): %3 + + + + + MainWindow + + + WSJT-X by K1JT + + + + + Band Activity + + + + + + UTC dB DT Freq Dr + + + + + Rx Frequency + + + + + CQ only + + + + + Enter this QSO in log + + + + + Log &QSO + + + + + Stop monitoring + + + + + &Stop + + + + + Toggle monitoring On/Off + + + + + &Monitor + + + + + <html><head/><body><p>Erase right window. Double-click to erase both windows.</p></body></html> + + + + + Erase right window. Double-click to erase both windows. + + + + + &Erase + + + + + <html><head/><body><p>Clear the accumulating message average.</p></body></html> + + + + + Clear the accumulating message average. + + + + + Clear Avg + + + + + <html><head/><body><p>Decode most recent Rx period at QSO Frequency</p></body></html> + + + + + Decode most recent Rx period at QSO Frequency + + + + + &Decode + + + + + <html><head/><body><p>Toggle Auto-Tx On/Off</p></body></html> + + + + + Toggle Auto-Tx On/Off + + + + + E&nable Tx + + + + + Stop transmitting immediately + + + + + &Halt Tx + + + + + <html><head/><body><p>Toggle a pure Tx tone On/Off</p></body></html> + + + + + Toggle a pure Tx tone On/Off + + + + + &Tune + + + + + Menus + + + + + USB dial frequency + + + + + 14.078 000 + + + + + <html><head/><body><p>30dB recommended when only noise present<br/>Green when good<br/>Red when clipping may occur<br/>Yellow when too low</p></body></html> + + + + + Rx Signal + + + + + 30dB recommended when only noise present +Green when good +Red when clipping may occur +Yellow when too low + + + + + DX Call + + + + + DX Grid + + + + + Callsign of station to be worked + + + + + Search for callsign in database + + + + + &Lookup + + + + + Locator of station to be worked + + + + + Az: 251 16553 km + + + + + Add callsign and locator to database + + + + + Add + + + + + Pwr + + + + + <html><head/><body><p>If orange or red there has been a rig control failure, click to reset and read the dial frequency. S implies split mode.</p></body></html> + + + + + If orange or red there has been a rig control failure, click to reset and read the dial frequency. S implies split mode. + + + + + ? + + + + + Adjust Tx audio level + + + + + <html><head/><body><p>Select operating band or enter frequency in MHz or enter kHz increment followed by k.</p></body></html> + + + + + Frequncy entry + + + + + Select operating band or enter frequency in MHz or enter kHz increment followed by k. + + + + + <html><head/><body><p align="center"> 2015 Jun 17 </p><p align="center"> 01:23:45 </p></body></html> + + + + + <html><head/><body><p>Check to keep Tx frequency fixed when double-clicking on decoded text.</p></body></html> + + + + + Check to keep Tx frequency fixed when double-clicking on decoded text. + + + + + Hold Tx Freq + + + + + Audio Rx frequency + + + + + + + Hz + + + + + Rx + + + + + Set Tx frequency to Rx Frequency + + + + + â–² + + + + + Frequency tolerance (Hz) + + + + + F Tol + + + + + Set Rx frequency to Tx Frequency + + + + + â–¼ + + + + + <html><head/><body><p>Synchronizing threshold. Lower numbers accept weaker sync signals.</p></body></html> + + + + + Synchronizing threshold. Lower numbers accept weaker sync signals. + + + + + Sync + + + + + <html><head/><body><p>Check to use short-format messages.</p></body></html> + + + + + Check to use short-format messages. + + + + + Sh + + + + + <html><head/><body><p>Check to enable JT9 fast modes</p></body></html> + + + + + Check to enable JT9 fast modes + + + + + + Fast + + + + + <html><head/><body><p>Check to enable automatic sequencing of Tx messages based on received messages.</p></body></html> + + + + + Check to enable automatic sequencing of Tx messages based on received messages. + + + + + Auto Seq + + + + + <html><head/><body><p>Check to call the first decoded responder to my CQ.</p></body></html> + + + + + Check to call the first decoded responder to my CQ. + + + + + Call 1st + + + + + Check to generate "@1250 (SEND MSGS)" in Tx6. + + + + + Tx6 + + + + + <html><head/><body><p>Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences.</p></body></html> + + + + + Check to Tx in even-numbered minutes or sequences, starting at 0; uncheck for odd sequences. + + + + + Tx even/1st + + + + + <html><head/><body><p>Frequency to call CQ on in kHz above the current MHz</p></body></html> + + + + + Frequency to call CQ on in kHz above the current MHz + + + + + Tx CQ + + + + + <html><head/><body><p>Check this to call CQ on the &quot;Tx CQ&quot; frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on.</p><p>Not available to nonstandard callsign holders.</p></body></html> + + + + + Check this to call CQ on the "Tx CQ" frequency. Rx will be on the current frequency and the CQ message wiill include the current Rx frequency so callers know which frequency to reply on. +Not available to nonstandard callsign holders. + + + + + Rx All Freqs + + + + + <html><head/><body><p>Submode determines tone spacing; A is narrowest.</p></body></html> + + + + + Submode determines tone spacing; A is narrowest. + + + + + Submode + + + + + Fox + + + + + <html><head/><body><p>Check to monitor Sh messages.</p></body></html> + + + + + Check to monitor Sh messages. + + + + + SWL + + + + + Best S+P + + + + + <html><head/><body><p>Check this to start recording calibration data.<br/>While measuring calibration correction is disabled.<br/>When not checked you can view the calibration results.</p></body></html> + + + + + Check this to start recording calibration data. +While measuring calibration correction is disabled. +When not checked you can view the calibration results. + + + + + Measure + + + + + <html><head/><body><p>Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB).</p></body></html> + + + + + Signal report: Signal-to-noise ratio in 2500 Hz reference bandwidth (dB). + + + + + Report + + + + + <html><head/><body><p>Tx/Rx or Frequency calibration sequence length</p></body></html> + + + + + Tx/Rx or Frequency calibration sequence length + + + + + s + + + + + T/R + + + + + Toggle Tx mode + + + + + Tx JT9 @ + + + + + Audio Tx frequency + + + + + + Tx + + + + + Tx# + + + + + <html><head/><body><p>Double-click on another caller to queue that call for your next QSO.</p></body></html> + + + + + Double-click on another caller to queue that call for your next QSO. + + + + + Next Call + + + + + 1 + + + + + + + Send this message in next Tx interval + + + + + Ctrl+2 + + + + + <html><head/><body><p>Send this message in next Tx interval</p><p>Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders)</p></body></html> + + + + + Send this message in next Tx interval +Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders) + + + + + Ctrl+1 + + + + + + + + Switch to this Tx message NOW + + + + + Tx &2 + + + + + Alt+2 + + + + + <html><head/><body><p>Switch to this Tx message NOW</p><p>Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders)</p></body></html> + + + + + Switch to this Tx message NOW +Double click to toggle the use of the Tx1 message to start a QSO with a station (not allowed for type 1 compound call holders) + + + + + Tx &1 + + + + + Alt+1 + + + + + Ctrl+6 + + + + + <html><head/><body><p>Send this message in next Tx interval</p><p>Double-click to reset to the standard 73 message</p></body></html> + + + + + Send this message in next Tx interval +Double-click to reset to the standard 73 message + + + + + Ctrl+5 + + + + + Ctrl+3 + + + + + Tx &3 + + + + + Alt+3 + + + + + <html><head/><body><p>Send this message in next Tx interval</p><p>Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type 2 compound call holders)</p><p>RR73 messages should only be used when you are reasonably confident that no message repetitions will be required</p></body></html> + + + + + Send this message in next Tx interval +Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type 2 compound call holders) +RR73 messages should only be used when you are reasonably confident that no message repetitions will be required + + + + + Ctrl+4 + + + + + <html><head/><body><p>Switch to this Tx message NOW</p><p>Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type2 compound call holders)</p><p>RR73 messages should only be used when you are reasonably confident that no message repetitions will be required</p></body></html> + + + + + Switch to this Tx message NOW +Double-click to toggle between RRR and RR73 messages in Tx4 (not allowed for type2 compound call holders) +RR73 messages should only be used when you are reasonably confident that no message repetitions will be required + + + + + Tx &4 + + + + + Alt+4 + + + + + <html><head/><body><p>Switch to this Tx message NOW</p><p>Double-click to reset to the standard 73 message</p></body></html> + + + + + Switch to this Tx message NOW +Double-click to reset to the standard 73 message + + + + + Tx &5 + + + + + Alt+5 + + + + + Now + + + + + Generate standard messages for minimal QSO + + + + + Generate Std Msgs + + + + + Tx &6 + + + + + Alt+6 + + + + + + Enter a free text message (maximum 13 characters) +or select a predefined macro from the dropdown list. +Press ENTER to add the current text to the predefined +list. The list can be maintained in Settings (F2). + + + + + Queue up the next Tx message + + + + + Next + + + + + 2 + + + + + Calling CQ + + + + + Generate a CQ message + + + + + + + CQ + + + + + Generate message with RRR + + + + + RRR + + + + + Generate message with report + + + + + dB + + + + + Answering CQ + + + + + Generate message for replying to a CQ + + + + + + Grid + + + + + Generate message with R+report + + + + + R+dB + + + + + Generate message with 73 + + + + + 73 + + + + + Send this standard (generated) message + + + + + Gen msg + + + + + Send this free-text message (max 13 characters) + + + + + Free msg + + + + + 3 + + + + + Max dB + + + + + CQ AF + + + + + CQ AN + + + + + CQ AS + + + + + CQ EU + + + + + CQ NA + + + + + CQ OC + + + + + CQ SA + + + + + CQ 0 + + + + + CQ 1 + + + + + CQ 2 + + + + + CQ 3 + + + + + CQ 4 + + + + + CQ 5 + + + + + CQ 6 + + + + + CQ 7 + + + + + CQ 8 + + + + + CQ 9 + + + + + Reset + + + + + N List + + + + + N Slots + + + + + + Random + + + + + Call + + + + + S/N (dB) + + + + + Distance + + + + + More CQs + + + + + Percentage of 2-minute sequences devoted to transmitting. + + + + + % + + + + + Tx Pct + + + + + Band Hopping + + + + + Choose bands and times of day for band-hopping. + + + + + Schedule ... + + + + + Upload decoded messages to WSPRnet.org. + + + + + Upload spots + + + + + <html><head/><body><p>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> + + + + + 6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. + + + + + Prefer type 1 messages + + + + + No own call decodes + + + + + Transmit during the next 2-minute sequence. + + + + + Tx Next + + + + + Set Tx power in dBm (dB above 1 mW) as part of your WSPR message. + + + + + File + + + + + View + + + + + Decode + + + + + Save + + + + + Help + + + + + Mode + + + + + Configurations + + + + + Tools + + + + + Exit + + + + + Configuration + + + + + F2 + + + + + About WSJT-X + + + + + Waterfall + + + + + Open + + + + + Ctrl+O + + + + + Open next in directory + + + + + Decode remaining files in directory + + + + + Shift+F6 + + + + + Delete all *.wav && *.c2 files in SaveDir + + + + + None + + + + + Save all + + + + + Online User Guide + + + + + Keyboard shortcuts + + + + + Special mouse commands + + + + + JT9 + + + + + Save decoded + + + + + Normal + + + + + Deep + + + + + Monitor OFF at startup + + + + + Erase ALL.TXT + + + + + Erase wsjtx_log.adi + + + + + Convert mode to RTTY for logging + + + + + Log dB reports to Comments + + + + + Prompt me to log QSO + + + + + Blank line between decoding periods + + + + + Clear DX Call and Grid after logging + + + + + Display distance in miles + + + + + Double-click on call sets Tx Enable + + + + + + F7 + + + + + Tx disabled after sending 73 + + + + + Runaway Tx watchdog + + + + + Allow multiple instances + + + + + Tx freq locked to Rx freq + + + + + JT65 + + + + + JT9+JT65 + + + + + Tx messages to Rx Frequency window + + + + + Gray1 + + + + + Show DXCC entity and worked B4 status + + + + + Astronomical data + + + + + List of Type 1 prefixes and suffixes + + + + + Settings... + + + + + Local User Guide + + + + + Open log directory + + + + + JT4 + + + + + Message averaging + + + + + Enable averaging + + + + + Enable deep search + + + + + WSPR + + + + + Echo Graph + + + + + F8 + + + + + Echo + + + + + EME Echo mode + + + + + ISCAT + + + + + Fast Graph + + + + + F9 + + + + + &Download Samples ... + + + + + <html><head/><body><p>Download sample audio files demonstrating the various modes.</p></body></html> + + + + + MSK144 + + + + + QRA64 + + + + + Release Notes + + + + + Enable AP for DX Call + + + + + FreqCal + + + + + Measure reference spectrum + + + + + Measure phase response + + + + + Erase reference spectrum + + + + + Execute frequency calibration cycle + + + + + Equalization tools ... + + + + + WSPR-LF + + + + + Experimental LF/MF mode + + + + + FT8 + + + + + + Enable AP + + + + + Solve for calibration parameters + + + + + Copyright notice + + + + + Shift+F1 + + + + + Fox log + + + + + FT8 DXpedition Mode User Guide + + + + + Reset Cabrillo log ... + + + + + Color highlighting scheme + + + + + Contest Log + + + + + Export Cabrillo log ... + + + + + Quick-Start Guide to WSJT-X 2.0 + + + + + Contest log + + + + + Erase WSPR hashtable + + + + + FT4 + + + + + Rig Control Error + + + + + Do you want to reconfigure the radio interface? + + + + + Error Scanning ADIF Log + + + + + Scanned ADIF log, %1 worked before records created + + + + + Error Loading LotW Users Data + + + + + Error Writing WAV File + + + + + Configurations... + + + + + Error Killing jt9.exe Process + + + + + KillByName return code: %1 + + + + + Error removing "%1" + + + + + Click OK to retry + + + + + + Improper mode + + + + + + File Open Error + + + + + + + + + Cannot open "%1" for append: %2 + + + + + Error saving c2 file + + + + + Error in Sound Input + + + + + Error in Sound Output + + + + + Change Operator + + + + + New operator: + + + + + Status File Error + + + + + + Cannot open "%1" for writing: %2 + + + + + Subprocess Error + + + + + Subprocess failed with exit code %1 + + + + + + Running: %1 +%2 + + + + + Subprocess error + + + + + Reference spectrum saved + + + + + Invalid data in fmt.all at line %1 + + + + + Good Calibration Solution + + + + + <pre>%1%L2 ±%L3 ppm +%4%L5 ±%L6 Hz + +%7%L8 +%9%L10 Hz</pre> + + + + + Delete Calibration Measurements + + + + + The "fmt.all" file will be renamed as "fmt.bak" + + + + + If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work: + +"The algorithms, source code, look-and-feel of WSJT-X and related programs, and protocol specifications for the modes FSK441, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, MSK144 are Copyright (C) 2001-2019 by one or more of the following authors: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; and other members of the WSJT Development Group." + + + + + No data read from disk. Wrong file format? + + + + + Confirm Delete + + + + + Are you sure you want to delete all *.wav and *.c2 files in "%1"? + + + + + Keyboard Shortcuts + + + + + Special Mouse Commands + + + + + No more files to open. + + + + + Please choose another Tx frequency. WSJT-X will not knowingly transmit another mode in the WSPR sub-band on 30m. + + + + + WSPR Guard Band + + + + + Please choose another dial frequency. WSJT-X will not operate in Fox mode in the standard FT8 sub-bands. + + + + + Fox Mode warning + + + + + Should you switch to ARRL Field Day mode? + + + + + Should you switch to RTTY contest mode? + + + + + + + + Add to CALL3.TXT + + + + + Please enter a valid grid locator + + + + + Cannot open "%1" for read/write: %2 + + + + + %1 +is already in CALL3.TXT, do you wish to replace it? + + + + + Warning: DX Call field is empty. + + + + + Log file error + + + + + Cannot open "%1" + + + + + Error sending log to N1MM + + + + + Write returned "%1" + + + + + + + Confirm Erase + + + + + Are you sure you want to erase file ALL.TXT? + + + + + + Confirm Reset + + + + + Are you sure you want to erase your contest log? + + + + + Doing this will remove all QSO records for the current contest. They will be kept in the ADIF log file but will not be available for export in your Cabrillo log. + + + + + Cabrillo Log saved + + + + + Are you sure you want to erase file wsjtx_log.adi? + + + + + Are you sure you want to erase the WSPR hashtable? + + + + + VHF features warning + + + + + Tune digital gain + + + + + Transmit digital gain + + + + + Prefixes + + + + + Network Error + + + + + Error: %1 +UDP server %2:%3 + + + + + File Error + + + + + Phase Training Disabled + + + + + Phase Training Enabled + + + + + + Log File Error + + + + + Are you sure you want to clear the QSO queues? + + + + + MessageAveraging + + + + Message Averaging + + + + + UTC Sync DT Freq + + + + + Modes + + + + Mode + + + + + MultiSettings + + + Default + + + + + MultiSettings::impl + + + &Switch To + + + + + &Clone + + + + + Clone &Into ... + + + + + R&eset + + + + + &Rename ... + + + + + &Delete + + + + + Clone Into Configuration + + + + + Confirm overwrite of all values for configuration "%1" with values from "%2"? + + + + + Reset Configuration + + + + + Confirm reset to default values for configuration "%1"? + + + + + Delete Configuration + + + + + Confirm deletion of configuration "%1"? + + + + + NameDialog + + + New Configuration Name + + + + + Old name: + + + + + &New name: + + + + + OmniRigTransceiver + + + OmniRig: unrecognized mode + + + + + Failed to start OmniRig COM server + + + + + + OmniRig: don't know how to set rig frequency + + + + + + OmniRig: timeout waiting for update from rig + + + + + OmniRig COM/OLE error: %1 at %2: %3 (%4) + + + + + PollingTransceiver + + + Unexpected rig error + + + + + QObject + + + Invalid rig name - \ & / not allowed + + + + + User Defined + + + + + Failed to open LotW users CSV file: '%1' + + + + + OOB + + + + + Too many colours in palette. + + + + + Error reading waterfall palette file "%1:%2" too many colors. + + + + + Error reading waterfall palette file "%1:%2" invalid triplet. + + + + + Error reading waterfall palette file "%1:%2" invalid color. + + + + + Error opening waterfall palette file "%1": %2. + + + + + Error writing waterfall palette file "%1": %2. + + + + + RemoteFile + + + + + + + + File System Error + + + + + Cannot rename file: +"%1" +to: "%2" +Error(%3): %4 + + + + + Cannot delete file: +"%1" + + + + + + + Network Error + + + + + Too many redirects: %1 + + + + + Redirect not followed: %1 + + + + + Cannot commit changes to: +"%1" + + + + + Cannot open file: +"%1" +Error(%2): %3 + + + + + Cannot make path: +"%1" + + + + + Cannot write to file: +"%1" +Error(%2): %3 + + + + + SampleDownloader::impl + + + Download Samples + + + + + Input Error + + + + + Invalid URL format + + + + + SoundInput + + + An error opening the audio input device has occurred. + + + + + An error occurred during read from the audio input device. + + + + + Audio data not being fed to the audio input device fast enough. + + + + + Non-recoverable error, audio input device not usable at this time. + + + + + Requested input audio format is not valid. + + + + + Requested input audio format is not supported on device. + + + + + Failed to initialize audio sink device + + + + + Idle + + + + + Receiving + + + + + Suspended + + + + + Interrupted + + + + + Error + + + + + Stopped + + + + + SoundOutput + + + An error opening the audio output device has occurred. + + + + + An error occurred during write to the audio output device. + + + + + Audio data not being fed to the audio output device fast enough. + + + + + Non-recoverable error, audio output device not usable at this time. + + + + + Requested output audio format is not valid. + + + + + Requested output audio format is not supported on device. + + + + + Idle + + + + + Sending + + + + + Suspended + + + + + Interrupted + + + + + Error + + + + + Stopped + + + + + StationDialog + + + Add Station + + + + + &Band: + + + + + &Offset (MHz): + + + + + &Antenna: + + + + + StationList::impl + + + Band name + + + + + Frequency offset + + + + + Antenna description + + + + + Band + + + + + Offset + + + + + Antenna Description + + + + + TransceiverBase + + + Unexpected rig error + + + + + WideGraph + + + Dialog + + + + + Controls + + + + + Spectrum gain + + + + + Palette + + + + + <html><head/><body><p>Enter definition for a new color palette.</p></body></html> + + + + + Adjust... + + + + + Waterfall gain + + + + + <html><head/><body><p>Set fractional size of spectrum in this window.</p></body></html> + + + + + % + + + + + Spec + + + + + <html><head/><body><p>Flatten spectral baseline over the full displayed interval.</p></body></html> + + + + + Flatten + + + + + <html><head/><body><p>Compute and save a reference spectrum. (Not yet fully implemented.)</p></body></html> + + + + + Ref Spec + + + + + Smoothing of Linear Average spectrum + + + + + Smooth + + + + + Compression factor for frequency scale + + + + + Bins/Pixel + + + + + Select waterfall palette + + + + + <html><head/><body><p>Select data for spectral display</p></body></html> + + + + + Current + + + + + Cumulative + + + + + Linear Avg + + + + + Reference + + + + + <html><head/><body><p>Frequency at left edge of waterfall</p></body></html> + + + + + Hz + + + + + Start + + + + + <html><head/><body><p>Decode JT9 only above this frequency</p></body></html> + + + + + JT9 + + + + + JT65 + + + + + Number of FFTs averaged (controls waterfall scrolling rate) + + + + + N Avg + + + + + Waterfall zero + + + + + Spectrum zero + + + + + Wide Graph + + + + + + Read Palette + + + + + configuration_dialog + + + Settings + + + + + Genera&l + + + + + General station details and settings. + + + + + Station Details + + + + + My C&all: + + + + + Station callsign. + + + + + M&y Grid: + + + + + <html><head/><body><p>Maidenhead locator, preferably 6 characters.</p></body></html> + + + + + Check to allow grid changes from external programs + + + + + AutoGrid + + + + + IARU Region: + + + + + <html><head/><body><p>Select your IARU region.</p></body></html> + + + + + Message generation for type 2 compound callsign holders: + + + + + <html><head/><body><p>Type 2 compound callsigns are those with prefixes or suffixes not included in the allowed shortlist (See Help-&gt;Add-on prefixes and suffixes).</p><p>This option determines which generated messages should contain your full type 2 compound call sign rather than your base callsign. It only applies if you have a type 2 compound callsign.</p><p>This option controls the way the messages that are used to answer CQ calls are generated. Generated messages 6 (CQ) and 5 (73) will always contain your full callsign. The JT65 and JT9 protocols allow for some standard messages with your full call at the expense of another piece of information such as the DX call or your locator.</p><p>Choosing message 1 omits the DX callsign which may be an issue when replying to CQ calls. Choosing message 3 also omits the DX callsign and many versions of this and other software will not extract the report. Choosing neither means that your full callsign only goes in your message 5 (73) so your QSO partner may log the wrong callsign.</p><p>None of these options are perfect, message 3 is usually best but be aware your QSO partner may not log the report you send them.</p></body></html> + + + + + Full call in Tx1 + + + + + Full call in Tx3 + + + + + Full call in Tx5 only + + + + + Display + + + + + Show outgoing transmitted messages in the Rx frequency window. + + + + + &Tx messages to Rx frequency window + + + + + Show if decoded stations are new DXCC entities or worked before. + + + + + Show &DXCC, grid, and worked-before status + + + + + <html><head/><body><p>Check to have decodes for a new period start at the top of the Band Activity window and not scroll off the top when the window is full.</p><p>This is to aid selecting decodes to double-click while decoding is still in progress. Use the Band Activity vertical scroll bar to reveal decodes past the bottom of the window.</p></body></html> + + + + + Start new period decodes at top + + + + + Show principal prefix instead of country name + + + + + Set the font characteristics for the application. + + + + + Font... + + + + + Set the font characteristics for the Band Activity and Rx Frequency areas. + + + + + Decoded Text Font... + + + + + Include a separator line between periods in the band activity window. + + + + + &Blank line between decoding periods + + + + + Show distance to DX station in miles rather than kilometers. + + + + + Display dista&nce in miles + + + + + Behavior + + + + + Decode after EME delay + + + + + Tx watchdog: + + + + + <html><head/><body><p>Number of minutes before unattended transmissions are aborted</p></body></html> + + + + + Disabled + + + + + minutes + + + + + Enable VHF/UHF/Microwave features + + + + + Single decode + + + + + <html><head/><body><p>Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.</p></body></html> + + + + + Allow Tx frequency changes while transmitting + + + + + Don't start decoding until the monitor button is clicked. + + + + + Mon&itor off at startup + + + + + <html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html> + + + + + Monitor returns to last used frequency + + + + + Alternate F1-F6 bindings + + + + + Turns off automatic transmissions after sending a 73 or any other free +text message. + + + + + Di&sable Tx after sending 73 + + + + + Send a CW ID after every 73 or free text message. + + + + + CW ID a&fter 73 + + + + + Periodic CW ID Inter&val: + + + + + Send a CW ID periodically every few minutes. +This might be required under your countries licence regulations. +It will not interfere with other users as it is always sent in the +quiet period when decoding is done. + + + + + Automatic transmission mode. + + + + + Doubl&e-click on call sets Tx enable + + + + + Calling CQ forces Call 1st + + + + + &Radio + + + + + Radio interface configuration settings. + + + + + Settings that control your CAT interface. + + + + + CAT Control + + + + + + Port: + + + + + Serial port used for CAT control. + + + + + Serial Port Parameters + + + + + Baud Rate: + + + + + Serial port data rate which must match the setting of your radio. + + + + + 1200 + + + + + 2400 + + + + + 4800 + + + + + 9600 + + + + + 19200 + + + + + 38400 + + + + + 57600 + + + + + 115200 + + + + + <html><head/><body><p>Number of data bits used to communicate with your radio's CAT interface (usually eight).</p></body></html> + + + + + Data Bits + + + + + D&efault + + + + + Se&ven + + + + + E&ight + + + + + <html><head/><body><p>Number of stop bits used when communicating with your radio's CAT interface</p><p>(consult you radio's manual for details).</p></body></html> + + + + + Stop Bits + + + + + + Default + + + + + On&e + + + + + T&wo + + + + + <html><head/><body><p>Flow control protocol used between this computer and your radio's CAT interface (usually &quot;None&quot; but some require &quot;Hardware&quot;).</p></body></html> + + + + + Handshake + + + + + &None + + + + + Software flow control (very rare on CAT interfaces). + + + + + XON/XOFF + + + + + Flow control using the RTS and CTS RS-232 control lines +not often used but some radios have it as an option and +a few, particularly some Kenwood rigs, require it). + + + + + &Hardware + + + + + Special control of CAT port control lines. + + + + + Force Control Lines + + + + + + High + + + + + + Low + + + + + DTR: + + + + + RTS: + + + + + How this program activates the PTT on your radio + + + + + PTT Method + + + + + <html><head/><body><p>No PTT activation, instead the radio's automatic VOX is used to key the transmitter.</p><p>Use this if you have no radio interface hardware.</p></body></html> + + + + + VO&X + + + + + <html><head/><body><p>Use the RS-232 DTR control line to toggle your radio's PTT, requires hardware to inteface the line.</p><p>Some commercial interface units also use this method.</p><p>The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.</p></body></html> + + + + + &DTR + + + + + Some radios support PTT via CAT commands, +use this option if your radio supports it and you have no +other hardware interface for PTT. + + + + + C&AT + + + + + <html><head/><body><p>Use the RS-232 RTS control line to toggle your radio's PTT, requires hardware to inteface the line.</p><p>Some commercial interface units also use this method.</p><p>The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.</p></body></html> + + + + + R&TS + + + + + <html><head/><body><p>Select the RS-232 serial port utilised for PTT control, this option is available when DTR or RTS is selected above as a transmit method.</p><p>This port can be the same one as the one used for CAT control.</p><p>For some interface types the special value CAT may be chosen, this is used for non-serial CAT interfaces that can control serial port control lines remotely (OmniRig for example).</p></body></html> + + + + + Modulation mode selected on radio. + + + + + Mode + + + + + <html><head/><body><p>USB is usually the correct modulation mode,</p><p>unless the radio has a special data or packet mode setting</p><p>for AFSK operation.</p></body></html> + + + + + US&B + + + + + Don't allow the program to set the radio mode +(not recommended but use if the wrong mode +or bandwidth is selected). + + + + + + None + + + + + If this is availabe then it is usually the correct mode for this program. + + + + + Data/P&kt + + + + + Some radios can select the audio input using a CAT command, +this setting allows you to select which audio input will be used +(if it is available then generally the Rear/Data option is best). + + + + + Transmit Audio Source + + + + + Rear&/Data + + + + + &Front/Mic + + + + + Rig: + + + + + Poll Interval: + + + + + <html><head/><body><p>Interval to poll rig for status. Longer intervals will mean that changes to the rig will take longer to be detected.</p></body></html> + + + + + s + + + + + <html><head/><body><p>Attempt to connect to the radio with these settings.</p><p>The button will turn green if the connection is successful or red if there is a problem.</p></body></html> + + + + + Test CAT + + + + + Attempt to activate the transmitter. +Click again to deactivate. Normally no power should be +output since there is no audio being generated at this time. +Check that any Tx indication on your radio and/or your +radio interface behave as expected. + + + + + Test PTT + + + + + Split Operation + + + + + Fake It + + + + + Rig + + + + + A&udio + + + + + Audio interface settings + + + + + Souncard + + + + + Soundcard + + + + + Select the audio CODEC to use for transmitting. +If this is your default device for system sounds then +ensure that all system sounds are disabled otherwise +you will broadcast any systems sounds generated during +transmitting periods. + + + + + Select the audio CODEC to use for receiving. + + + + + &Input: + + + + + Select the channel to use for receiving. + + + + + + Mono + + + + + + Left + + + + + + Right + + + + + + Both + + + + + Select the audio channel used for transmission. +Unless you have multiple radios connected on different +channels; then you will usually want to select mono or +both here. + + + + + Ou&tput: + + + + + + Save Directory + + + + + Loc&ation: + + + + + Path to which .WAV files are saved. + + + + + + TextLabel + + + + + Click to select a different save directory for .WAV files. + + + + + S&elect + + + + + + AzEl Directory + + + + + Location: + + + + + Select + + + + + Power Memory By Band + + + + + Remember power settings by band + + + + + Enable power memory during transmit + + + + + Transmit + + + + + Enable power memory during tuning + + + + + Tune + + + + + Tx &Macros + + + + + Canned free text messages setup + + + + + &Add + + + + + &Delete + + + + + Drag and drop items to rearrange order +Right click for item specific actions +Click, SHIFT+Click and, CRTL+Click to select items + + + + + Reportin&g + + + + + Reporting and logging settings + + + + + Logging + + + + + The program will pop up a partially completed Log QSO dialog when you send a 73 or free text message. + + + + + Promp&t me to log QSO + + + + + Op Call: + + + + + Some logging programs will not accept the type of reports +saved by this program. +Check this option to save the sent and received reports in the +comments field. + + + + + d&B reports to comments + + + + + Check this option to force the clearing of the DX Call +and DX Grid fields when a 73 or free text message is sent. + + + + + Clear &DX call and grid after logging + + + + + <html><head/><body><p>Some logging programs will not accept WSJT-X mode names.</p></body></html> + + + + + Con&vert mode to RTTY + + + + + <html><head/><body><p>The callsign of the operator, if different from the station callsign.</p></body></html> + + + + + <html><head/><body><p>Check to have QSOs logged automatically, when complete.</p></body></html> + + + + + Log automatically (contesting only) + + + + + Network Services + + + + + The program can send your station details and all +decoded signals as spots to the http://pskreporter.info web site. +This is used for reverse beacon analysis which is very useful +for assessing propagation and system performance. + + + + + Enable &PSK Reporter Spotting + + + + + UDP Server + + + + + UDP Server: + + + + + <html><head/><body><p>Optional hostname of network service to receive decodes.</p><p>Formats:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">hostname</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 multicast group address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 multicast group address</li></ul><p>Clearing this field will disable the broadcasting of UDP status updates.</p></body></html> + + + + + UDP Server port number: + + + + + <html><head/><body><p>Enter the service port number of the UDP server that WSJT-X should send updates to. If this is zero no updates will be broadcast.</p></body></html> + + + + + <html><head/><body><p>With this enabled WSJT-X will accept certain requests back from a UDP server that receives decode messages.</p></body></html> + + + + + Accept UDP requests + + + + + <html><head/><body><p>Indicate acceptance of an incoming UDP request. The effect of this option varies depending on the operating system and window manager, its intent is to notify the acceptance of an incoming UDP request even if this application is minimized or hidden.</p></body></html> + + + + + Notify on accepted UDP request + + + + + <html><head/><body><p>Restore the window from minimized if an UDP request is accepted.</p></body></html> + + + + + Accepted UDP request restores window + + + + + Secondary UDP Server (deprecated) + + + + + <html><head/><body><p>When checked, WSJT-X will broadcast a logged contact in ADIF format to the configured hostname and port. </p></body></html> + + + + + Enable logged contact ADIF broadcast + + + + + Server name or IP address: + + + + + <html><head/><body><p>Optional host name of N1MM Logger+ program to receive ADIF UDP broadcasts. This is usually 'localhost' or ip address 127.0.0.1</p><p>Formats:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">hostname</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv4 multicast group address</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">IPv6 multicast group address</li></ul><p>Clearing this field will disable broadcasting of ADIF information via UDP.</p></body></html> + + + + + Server port number: + + + + + <html><head/><body><p>Enter the port number that WSJT-X should use for UDP broadcasts of ADIF log information. For N1MM Logger+, this value should be 2333. If this is zero, no updates will be broadcast.</p></body></html> + + + + + Frequencies + + + + + Default frequencies and band specific station details setup + + + + + <html><head/><body><p>See &quot;Frequency Calibration&quot; in the WSJT-X User Guide for details of how to determine these parameters for your radio.</p></body></html> + + + + + Frequency Calibration + + + + + Slope: + + + + + ppm + + + + + Intercept: + + + + + Hz + + + + + Working Frequencies + + + + + <html><head/><body><p>Right click to maintain the working frequencies list.</p></body></html> + + + + + Station Information + + + + + Items may be edited. +Right click for insert and delete options. + + + + + Colors + Cores + + + + Decode Highlightling + + + + + <html><head/><body><p>Enable or disable using the check boxes and right-click an item to change or unset the foreground color, background color, or reset the item to default values. Drag and drop the items to change their priority, higher in the list is higher in priority.</p><p>Note that each foreground or background color may be either set or unset, unset means that it is not allocated for that item's type and lower priority items may apply.</p></body></html> + + + + + <html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html> + + + + + Reset Highlighting + + + + + <html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html> + + + + + Highlight by Mode + + + + + <html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html> + + + + + Rescan ADIF Log + + + + + Include extra WAE entities + + + + + <html><head/><body><p>Controls for Logbook of the World user lookup.</p></body></html> + + + + + Logbook of the World User Validation + + + + + Users CSV file URL: + + + + + <html><head/><body><p>URL of the ARRL LotW user's last upload dates and times data file which is used to highlight decodes from stations that are known to upload their log file to LotW.</p></body></html> + + + + + https://lotw.arrl.org/lotw-user-activity.csv + + + + + <html><head/><body><p>Push this button to fetch the latest LotW user's upload date and time data file.</p></body></html> + + + + + Fetch Now + + + + + Age of last upload less than: + + + + + <html><head/><body><p>Adjust this spin box to set the age threshold of LotW user's last upload date that is accepted as a current LotW user.</p></body></html> + + + + + days + + + + + Advanced + + + + + <html><head/><body><p>User-selectable parameters for JT65 VHF/UHF/Microwave decoding.</p></body></html> + + + + + JT65 VHF/UHF/Microwave decoding parameters + + + + + Random erasure patterns: + + + + + <html><head/><body><p>Maximum number of erasure patterns for stochastic soft-decision Reed Solomon decoder is 10^(n/2).</p></body></html> + + + + + Aggressive decoding level: + + + + + <html><head/><body><p>Higher levels will increase the probability of decoding, but will also increase probability of a false decode.</p></body></html> + + + + + Two-pass decoding + + + + + Special operating activity: Generation of FT4, FT8, and MSK144 messages + + + + + <html><head/><body><p>FT8 DXpedition mode: Hound operator calling the DX.</p></body></html> + + + + + Hound + + + + + <html><head/><body><p>North American VHF/UHF/Microwave contests and others in which a 4-character grid locator is the required exchange.</p></body></html> + + + + + NA VHF Contest + + + + + <html><head/><body><p>FT8 DXpedition mode: Fox (DXpedition) operator.</p></body></html> + + + + + Fox + + + + + <html><head/><body><p>European VHF+ contests requiring a signal report, serial number, and 6-character locator.</p></body></html> + + + + + EU VHF Contest + + + + + + <html><head/><body><p>ARRL RTTY Roundup and similar contests. Exchange is US state, Canadian province, or &quot;DX&quot;.</p></body></html> + + + + + RTTY Roundup messages + + + + + RTTY RU Exch: + + + + + NJ + + + + + + <html><head/><body><p>ARRL Field Day exchange: number of transmitters, Class, and ARRL/RAC section or &quot;DX&quot;.</p></body></html> + + + + + ARRL Field Day + + + + + FD Exch: + + + + + 6A SNJ + + + + + Miscellaneous + + + + + Degrade S/N of .wav file: + + + + + + For offline sensitivity tests + + + + + dB + + + + + Receiver bandwidth: + + + + + Hz + + + + + Tx delay: + + + + + Minimum delay between assertion of PTT and start of Tx audio. + + + + + s + + + + + Tone spacing + + + + + <html><head/><body><p>Generate Tx audio with twice the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-2 before generating RF.</p></body></html> + + + + + x 2 + + + + + <html><head/><body><p>Generate Tx audio with four times the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-4 before generating RF.</p></body></html> + + + + + x 4 + + + + + Waterfall spectra + + + + + Low sidelobes + + + + + Most sensitive + + + + + <html><head/><body><p>Discard (Cancel) or apply (OK) configuration changes including</p><p>resetting the radio interface and applying any soundcard changes</p></body></html> + + + + + main + + + + Fatal error + + + + + + Unexpected fatal error + + + + + Where <rig-name> is for multi-instance support. + + + + + rig-name + + + + + Where <configuration> is an existing one. + + + + + configuration + + + + + Writable files in test location. Use with caution, for testing only. + + + + + Command line error + + + + + Command line help + + + + + Application version + + + + + Another instance may be running + + + + + try to remove stale lock file? + + + + + Failed to create a temporary directory + + + + + + Path: "%1" + + + + + Failed to create a usable temporary directory + + + + + Another application may be locking the directory + + + + + Failed to create data directory + + + + + path: "%1" + + + + + Shared memory error + + + + + Unable to create shared memory segment + + + + + wf_palette_design_dialog + + + Palette Designer + + + + + <html><head/><body><p>Double click a color to edit it.</p><p>Right click to insert or delete colors.</p><p>Colors at the top represent weak signals</p><p>and colors at the bottom represent strong</p><p>signals. You can have up to 256 colors.</p></body></html> + + + + diff --git a/widgets/AbstractLogWindow.cpp b/widgets/AbstractLogWindow.cpp index efa1e60f1..bbe07a846 100644 --- a/widgets/AbstractLogWindow.cpp +++ b/widgets/AbstractLogWindow.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -16,7 +17,10 @@ #include "pimpl_impl.hpp" class AbstractLogWindow::impl final + : public QObject { + Q_OBJECT + public: impl (AbstractLogWindow * self, QString const& settings_key, QSettings * settings , Configuration const * configuration) @@ -38,6 +42,9 @@ public: FontOverrideModel model_; }; +#include "moc_AbstractLogWindow.cpp" +#include "AbstractLogWindow.moc" + namespace { bool row_is_higher (QModelIndex const& lhs, QModelIndex const& rhs) diff --git a/widgets/AbstractLogWindow.hpp b/widgets/AbstractLogWindow.hpp index 581212d82..476ff62f3 100644 --- a/widgets/AbstractLogWindow.hpp +++ b/widgets/AbstractLogWindow.hpp @@ -19,6 +19,8 @@ class QFont; class AbstractLogWindow : public QWidget { + Q_OBJECT + public: AbstractLogWindow (QString const& settings_key, QSettings * settings , Configuration const * configuration diff --git a/widgets/DecodeHighlightingListView.cpp b/widgets/DecodeHighlightingListView.cpp index cc5ea5d2e..cfb14fc5d 100644 --- a/widgets/DecodeHighlightingListView.cpp +++ b/widgets/DecodeHighlightingListView.cpp @@ -6,6 +6,8 @@ #include "models/DecodeHighlightingModel.hpp" #include "MessageBox.hpp" +#include "moc_DecodeHighlightingListView.cpp" + DecodeHighlightingListView::DecodeHighlightingListView (QWidget * parent) : QListView {parent} { diff --git a/widgets/DecodeHighlightingListView.hpp b/widgets/DecodeHighlightingListView.hpp index 86aa86f4f..76fd507b7 100644 --- a/widgets/DecodeHighlightingListView.hpp +++ b/widgets/DecodeHighlightingListView.hpp @@ -16,6 +16,8 @@ class QWidget; class DecodeHighlightingListView final : public QListView { + Q_OBJECT + public: explicit DecodeHighlightingListView (QWidget * parent = nullptr); diff --git a/widgets/ExportCabrillo.cpp b/widgets/ExportCabrillo.cpp index 0e61f0f08..5fb54c7dc 100644 --- a/widgets/ExportCabrillo.cpp +++ b/widgets/ExportCabrillo.cpp @@ -11,6 +11,7 @@ #include "models/CabrilloLog.hpp" #include "ui_ExportCabrillo.h" +#include "moc_ExportCabrillo.cpp" ExportCabrillo::ExportCabrillo (QSettings * settings, Configuration const * configuration , CabrilloLog const * log, QWidget * parent) diff --git a/widgets/ExportCabrillo.h b/widgets/ExportCabrillo.h index fbc9294cd..0dfbf6754 100644 --- a/widgets/ExportCabrillo.h +++ b/widgets/ExportCabrillo.h @@ -15,6 +15,8 @@ namespace Ui { class ExportCabrillo final : public QDialog { + Q_OBJECT + public: explicit ExportCabrillo (QSettings *, Configuration const * , CabrilloLog const *, QWidget * parent = nullptr); diff --git a/widgets/HelpTextWindow.cpp b/widgets/HelpTextWindow.cpp index 98c2b38e3..d24a87a51 100644 --- a/widgets/HelpTextWindow.cpp +++ b/widgets/HelpTextWindow.cpp @@ -9,6 +9,8 @@ #include "qt_helpers.hpp" #include "widgets/MessageBox.hpp" +#include "moc_HelpTextWindow.cpp" + HelpTextWindow::HelpTextWindow (QString const& title, QString const& file_name, QFont const& font, QWidget * parent) : QLabel {parent, Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint} { diff --git a/widgets/HelpTextWindow.hpp b/widgets/HelpTextWindow.hpp index c5793ae97..5cc5a6dca 100644 --- a/widgets/HelpTextWindow.hpp +++ b/widgets/HelpTextWindow.hpp @@ -9,6 +9,8 @@ class QString; class HelpTextWindow final : public QLabel { + Q_OBJECT + public: HelpTextWindow (QString const& title, QString const& file_name, QFont const& = QFont {}, QWidget * parent = nullptr); }; diff --git a/widgets/messageaveraging.cpp b/widgets/messageaveraging.cpp index fce022842..21f7b07ca 100644 --- a/widgets/messageaveraging.cpp +++ b/widgets/messageaveraging.cpp @@ -8,6 +8,8 @@ #include "qt_helpers.hpp" #include "ui_messageaveraging.h" +#include "moc_messageaveraging.cpp" + MessageAveraging::MessageAveraging(QSettings * settings, QFont const& font, QWidget *parent) : QWidget(parent), settings_ {settings}, diff --git a/widgets/messageaveraging.h b/widgets/messageaveraging.h index 4a8556b24..a5ed7b54d 100644 --- a/widgets/messageaveraging.h +++ b/widgets/messageaveraging.h @@ -14,6 +14,8 @@ namespace Ui { class MessageAveraging : public QWidget { + Q_OBJECT + public: explicit MessageAveraging(QSettings *, QFont const&, QWidget * parent = 0); ~MessageAveraging(); From f346d37fd6575ede541c0c5d8c07b83e03979458 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 6 Jun 2019 15:00:47 +0100 Subject: [PATCH 328/367] Modernize Fortran interfaces that are called from C/C++ Making Fortran interfaces called from other languages fully portable avoids issues with newer Fortran compilers. --- lib/astrosub.f90 | 134 ++++++++++++++++++++++++++++++---------------- widgets/astro.cpp | 65 +++++++++++----------- 2 files changed, 119 insertions(+), 80 deletions(-) diff --git a/lib/astrosub.f90 b/lib/astrosub.f90 index 49551ce3e..0670d66dc 100644 --- a/lib/astrosub.f90 +++ b/lib/astrosub.f90 @@ -1,55 +1,97 @@ -subroutine astrosub(nyear,month,nday,uth8,freq8,mygrid,hisgrid, & - AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00, & - RAMoon8,DecMoon8,Dgrd8,poloffset8,xnr8,techo8,width1,width2,bTx, & - AzElFileName,jpleph) +module astro_module + use, intrinsic :: iso_c_binding, only : c_int, c_double, c_bool, c_char, c_ptr, c_size_t, c_f_pointer + implicit none - implicit real*8 (a-h,o-z) - character*6 mygrid,hisgrid,c1*1 - character*6 AzElFileName*(*),jpleph*(*) - character*256 jpleph_file_name - logical*1 bTx - common/jplcom/jpleph_file_name + private + public :: astrosub - jpleph_file_name=jpleph +contains - call astro0(nyear,month,nday,uth8,freq8,mygrid,hisgrid, & - AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00, & - dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0, & - width1,width2,xlst8,techo8) + subroutine astrosub(nyear,month,nday,uth8,freq8,mygrid_cp,mygrid_len, & + hisgrid_cp,hisgrid_len,AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8, & + ntsky,ndop,ndop00,RAMoon8,DecMoon8,Dgrd8,poloffset8,xnr8,techo8,width1, & + width2,bTx,AzElFileName_cp,AzElFileName_len,jpleph_cp,jpleph_len) & + bind (C, name="astrosub") - if (len_trim(AzElFileName) .eq. 0) go to 999 - imin=60*uth8 - isec=3600*uth8 - ih=uth8 - im=mod(imin,60) - is=mod(isec,60) - open(15,file=AzElFileName,status='unknown',err=900) - c1='R' - nRx=1 - if(bTx) then - c1='T' - nRx=0 - endif - AzAux=0. - ElAux=0. - nfreq=freq8/1000000 - doppler=ndop - doppler00=ndop00 - write(15,1010,err=10) ih,im,is,AzMoon8,ElMoon8, & - ih,im,is,AzSun8,ElSun8, & - ih,im,is,AzAux,ElAux, & - nfreq,doppler,dfdt,doppler00,dfdt0,c1 -! TXFirst,TRPeriod,poloffset,Dgrd,xnr,ave,rms,nRx + integer, parameter :: dp = selected_real_kind(15, 50) + + integer(c_int), intent(in), value :: nyear, month, nday + real(c_double), intent(in), value :: uth8, freq8 + real(c_double), intent(out) :: AzSun8, ElSun8, AzMoon8, ElMoon8, AzMoonB8, & + ElMoonB8, Ramoon8, DecMoon8, Dgrd8, poloffset8, xnr8, techo8, width1, & + width2 + integer(c_int), intent(out) :: ntsky, ndop, ndop00 + logical(c_bool), intent(in), value :: bTx + type(c_ptr), intent(in), value :: mygrid_cp, hisgrid_cp, AzElFileName_cp, jpleph_cp + integer(c_size_t), intent(in), value :: mygrid_len, hisgrid_len, AzElFileName_len, jpleph_len + + character(len=6) :: mygrid, hisgrid + character(kind=c_char, len=:), allocatable :: AzElFileName + character(len=1) :: c1 + integer :: ih, im, imin, is, isec, nfreq, nRx + real(dp) :: AzAux, ElAux, dbMoon8, dfdt, dfdt0, doppler, doppler00, HA8, sd8, xlst8 + character*256 jpleph_file_name + common/jplcom/jpleph_file_name + + block + character(kind=c_char, len=mygrid_len), pointer :: mygrid_fp + character(kind=c_char, len=hisgrid_len), pointer :: hisgrid_fp + character(kind=c_char, len=AzElFileName_len), pointer :: AzElFileName_fp + character(kind=c_char, len=jpleph_len), pointer :: jpleph_fp + call c_f_pointer(cptr=mygrid_cp, fptr=mygrid_fp) + mygrid = mygrid_fp + mygrid_fp => null() + call c_f_pointer(cptr=hisgrid_cp, fptr=hisgrid_fp) + hisgrid = hisgrid_fp + hisgrid_fp => null() + call c_f_pointer(cptr=AzElFileName_cp, fptr=AzElFileName_fp) + AzElFileName = AzElFileName_fp + AzElFileName_fp => null() + call c_f_pointer(cptr=jpleph_cp, fptr=jpleph_fp) + jpleph_file_name = jpleph_fp + jpleph_fp => null() + end block + + call astro0(nyear,month,nday,uth8,freq8,mygrid,hisgrid, & + AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00, & + dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0, & + width1,width2,xlst8,techo8) + + if (len_trim(AzElFileName) .eq. 0) go to 999 + imin=60*uth8 + isec=3600*uth8 + ih=uth8 + im=mod(imin,60) + is=mod(isec,60) + open(15,file=AzElFileName,status='unknown',err=900) + c1='R' + nRx=1 + if(bTx) then + c1='T' + nRx=0 + endif + AzAux=0. + ElAux=0. + nfreq=freq8/1000000 + doppler=ndop + doppler00=ndop00 + write(15,1010,err=10) ih,im,is,AzMoon8,ElMoon8, & + ih,im,is,AzSun8,ElSun8, & + ih,im,is,AzAux,ElAux, & + nfreq,doppler,dfdt,doppler00,dfdt0,c1 + ! TXFirst,TRPeriod,poloffset,Dgrd,xnr,ave,rms,nRx 1010 format( & - i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/ & - i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/ & - i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/ & - i5,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler, ',a1) -! i1,',',i3,',',f8.1,','f8.1,',',f8.1,',',f12.3,',',f12.3,',',i1,',RPol') -10 close(15) - go to 999 + i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/ & + i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/ & + i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/ & + i5,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler, ',a1) + ! i1,',',i3,',',f8.1,','f8.1,',',f8.1,',',f12.3,',',f12.3,',',i1,',RPol') +10 close(15) + go to 999 900 print*,'Error opening azel.dat' 999 return -end subroutine astrosub + end subroutine astrosub + +end module astro_module diff --git a/widgets/astro.cpp b/widgets/astro.cpp index c1eee0157..8c083a89a 100644 --- a/widgets/astro.cpp +++ b/widgets/astro.cpp @@ -24,14 +24,14 @@ extern "C" { - void astrosub_(int* nyear, int* month, int* nday, double* uth, double* freqMoon, - const char* mygrid, const char* hisgrid, double* azsun, - double* elsun, double* azmoon, double* elmoon, double* azmoondx, - double* elmoondx, int* ntsky, int* ndop, int* ndop00, - double* ramoon, double* decmoon, double* dgrd, double* poloffset, - double* xnr, double* techo, double* width1, double* width2, - bool* bTx, const char* AzElFileName, const char* jpleph, - fortran_charlen_t, fortran_charlen_t, fortran_charlen_t, fortran_charlen_t); + void astrosub(int nyear, int month, int nday, double uth, double freqMoon, + const char * mygrid, size_t mygrid_len, const char * hisgrid, + size_t hisgrid_len, double * azsun, double * elsun, double * azmoon, + double * elmoon, double * azmoondx, double * elmoondx, int * ntsky, + int * ndop, int * ndop00, double * ramoon, double * decmoon, double * dgrd, + double * poloffset, double * xnr, double * techo, double * width1, + double * width2, bool bTx, const char * AzElFileName, size_t AzElFileName_len, + const char * jpleph, size_t jpleph_len); } Astro::Astro(QSettings * settings, Configuration const * configuration, QWidget * parent) @@ -76,8 +76,8 @@ void Astro::read_settings () case 1: ui_->rbFullTrack->setChecked (true); break; case 2: ui_->rbConstFreqOnMoon->setChecked (true); break; case 3: ui_->rbOwnEcho->setChecked (true); break; - case 4: ui_->rbOnDxEcho->setChecked (true); break; - case 5: ui_->rbCallDx->setChecked (true); break; + case 4: ui_->rbOnDxEcho->setChecked (true); break; + case 5: ui_->rbCallDx->setChecked (true); break; } move (settings_->value ("window/pos", pos ()).toPoint ()); } @@ -107,24 +107,20 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const double sec {t.time().second() + 0.001*t.time().msec()}; double uth {nhr + nmin/60.0 + sec/3600.0}; if(freq_moon < 1) freq_moon = 144000000; - int nfreq {static_cast (freq_moon / 1000000u)}; - double freq8 {static_cast (freq_moon)}; auto const& AzElFileName = QDir::toNativeSeparators (configuration_->azel_directory ().absoluteFilePath ("azel.dat")); auto const& jpleph = configuration_->data_dir ().absoluteFilePath ("JPLEPH"); - - - - QString mygrid_padded {(mygrid + " ").left (6)}; - QString hisgrid_padded {(hisgrid + " ").left (6)}; - astrosub_(&nyear, &month, &nday, &uth, &freq8, mygrid_padded.toLatin1().constData(), - hisgrid_padded.toLatin1().constData(), &azsun, &elsun, &azmoon, &elmoon, - &azmoondx, &elmoondx, &ntsky, &m_dop, &m_dop00, &ramoon, &decmoon, - &dgrd, &poloffset, &xnr, &techo, &width1, &width2, &bTx, - AzElFileName.toLatin1().constData(), jpleph.toLatin1().constData(), 6, 6, - AzElFileName.length(), jpleph.length()); + astrosub(nyear, month, nday, uth, static_cast (freq_moon), + mygrid.toLatin1 ().constData (), mygrid.size (), + hisgrid.toLatin1().constData(), hisgrid.size (), + &azsun, &elsun, &azmoon, &elmoon, + &azmoondx, &elmoondx, &ntsky, &m_dop, &m_dop00, &ramoon, &decmoon, + &dgrd, &poloffset, &xnr, &techo, &width1, &width2, + bTx, + AzElFileName.toLatin1().constData(), AzElFileName.size (), + jpleph.toLatin1().constData(), jpleph.size ()); - if(hisgrid_padded==" ") { + if(!hisgrid.size ()) { azmoondx=0.0; elmoondx=0.0; m_dop=0; @@ -152,8 +148,8 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const "Dec: " << decmoon << "\n" "SunAz: " << azsun << "\n" "SunEl: " << elsun << "\n" - "Freq: " << nfreq << "\n"; - if(nfreq>=50) { //Suppress data not relevant below VHF + "Freq: " << freq / 1.e6 << "\n"; + if(freq>=5000000ull) { //Suppress data not relevant below VHF out << "Tsky: " << ntsky << "\n" "Dpol: " << poloffset << "\n" "MNR: " << xnr << "\n" @@ -215,8 +211,6 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const auto sec_since_epoch = t.toMSecsSinceEpoch ()/1000 + 2; auto target_sec = sec_since_epoch - fmod(double(sec_since_epoch),TR_period) + 0.5*TR_period; auto target_date_time = QDateTime::fromMSecsSinceEpoch (target_sec * 1000, Qt::UTC); - QString date {target_date_time.date().toString("yyyy MMM dd").trimmed ()}; - QString utc {target_date_time.time().toString().trimmed ()}; int nyear {target_date_time.date().year()}; int month {target_date_time.date().month()}; int nday {target_date_time.date().day()}; @@ -224,12 +218,15 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const int nmin {target_date_time.time().minute()}; double sec {target_date_time.time().second() + 0.001*target_date_time.time().msec()}; double uth {nhr + nmin/60.0 + sec/3600.0}; - astrosub_(&nyear, &month, &nday, &uth, &freq8, mygrid_padded.toLatin1().constData(), - hisgrid_padded.toLatin1().constData(), &azsun, &elsun, &azmoon, &elmoon, + astrosub(nyear, month, nday, uth, static_cast (freq_moon), + mygrid.toLatin1 ().constData (), mygrid.size (), + hisgrid.toLatin1().constData(), hisgrid.size (), + &azsun, &elsun, &azmoon, &elmoon, &azmoondx, &elmoondx, &ntsky, &m_dop, &m_dop00, &ramoon, &decmoon, - &dgrd, &poloffset, &xnr, &techo, &width1, &width2, &bTx, - "", jpleph.toLatin1().constData(), 6, 6, - 0, jpleph.length()); + &dgrd, &poloffset, &xnr, &techo, &width1, &width2, + bTx, + AzElFileName.toLatin1().constData(), AzElFileName.size (), + jpleph.toLatin1().constData(), jpleph.size ()); FrequencyDelta offset {0}; switch (m_DopplerMethod) { @@ -255,7 +252,7 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const } correction.tx = -offset; - qDebug () << "correction.tx (no tx qsy):" << correction.tx; + qDebug () << "correction.tx (no tx qsy):" << correction.tx; } } return correction; From d4a7a292c0e8da72b63f92fc1d1ca38d2be9b0e6 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 6 Jun 2019 10:29:58 -0400 Subject: [PATCH 329/367] Implement message type i3=5 (for WWROF contest exchange) in packjt77. --- lib/77bit/77bit.txt | 7 +--- lib/77bit/messages.txt | 13 ++++++- lib/77bit/packjt77.f90 | 87 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 97 insertions(+), 10 deletions(-) diff --git a/lib/77bit/77bit.txt b/lib/77bit/77bit.txt index ef370c111..89b481b6c 100644 --- a/lib/77bit/77bit.txt +++ b/lib/77bit/77bit.txt @@ -22,15 +22,10 @@ i3.n3 Example message Bits Total Purpose 2 PA3XYZ/P GM4ABC/P R JO22 28 1 28 1 1 15 74 EU VHF contest 3 TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 ARRL RTTY Roundup 4 PJ4/KA1ABC RR73 12 58 1 2 1 74 Nonstandard calls -5 ... tbd +5 TU; W9XYZ K1ABC R-07 FN 1 28 28 1 7 9 74 WWROF contest ? 6 ... tbd 7 ... tbd ---------------------------------------------------------------------------------- -In case we need them, later: - -5 TU; W9XYZ K1ABC R 579 8 MA 1 28 28 1 3 6 7 74 CQ WW RTTY -6 TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 CQ WPX RTTY ----------------------------------------------------------------------------------- NB: three 74-bit message types and two 71-bit message subtypes are still TBD. ---------------------------------------------------------------------------------- diff --git a/lib/77bit/messages.txt b/lib/77bit/messages.txt index 54fd44b05..aa4ab0789 100644 --- a/lib/77bit/messages.txt +++ b/lib/77bit/messages.txt @@ -72,7 +72,18 @@ CQ W9XYZ EN37 W9XYZ R-09 YW18FIFA RRR YW18FIFA 73 -10. Other stuff + +10. WWROF FT8/FT4 contest +----------------------------------------------------------- +CQ TEST K1ABC FN42 + K1ABC W9XYZ -16 EN +W9XYZ K1ABC R-07 FN + K1ABC W9XYZ RR73 + K1ABC G3AAA -11 IO +TU; G3AAA K1ABC R-09 FN + K1ABC G3AAA RR73 + +11. Other stuff ----------------------------------------------------------- TNX BOB 73 GL CQ YW18FIFA diff --git a/lib/77bit/packjt77.f90 b/lib/77bit/packjt77.f90 index 1ee37f5c1..1f9ed9a19 100644 --- a/lib/77bit/packjt77.f90 +++ b/lib/77bit/packjt77.f90 @@ -172,6 +172,10 @@ subroutine pack77(msg0,i3,n3,c77) call pack77_4(nwords,w,i3,n3,c77) if(i3.ge.0) go to 900 +! Check Type 5 (WWROF contest exchange) + call pack77_5(nwords,w,i3,n3,c77) + if(i3.ge.0) go to 900 + ! It defaults to free text 800 i3=0 n3=0 @@ -204,6 +208,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success) character*6 cexch,grid6 character*4 grid4,cserial character*3 csec(NSEC) + character*2 cfield character*38 c integer hashmy10,hashmy12,hashmy22,hashdx10,hashdx12,hashdx22 logical unpk28_success,unpk77_success @@ -491,8 +496,31 @@ subroutine unpack77(c77,nrx,msg,unpk77_success) else msg='CQ '//trim(call_2) endif + + else if(i3.eq.5) then +! 5 TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest + read(c77,1041) itu,n28a,n28b,ir,irpt,nexch,i3 +1041 format(b1,2b28.28,b1,b7.7,b9.9,b3.3) + call unpack28(n28a,call_1,unpk28_success) + if(.not.unpk28_success) unpk77_success=.false. + call unpack28(n28b,call_2,unpk28_success) + if(.not.unpk28_success) unpk77_success=.false. + write(crpt,'(i3.2)') irpt-35 + if(crpt(1:1).eq.' ') crpt(1:1)='+' + n1=nexch/18 + n2=nexch - 18*n1 + cfield(1:1)=char(ichar('A')+n1) + cfield(2:2)=char(ichar('A')+n2) + if(itu.eq.0 .and. ir.eq.0) msg=trim(call_1)//' '//trim(call_2)// & + ' '//crpt//' '//cfield + if(itu.eq.1 .and. ir.eq.0) msg='TU; '//trim(call_1)//' '//trim(call_2)// & + ' '//crpt//' '//cfield + if(itu.eq.0 .and. ir.eq.1) msg=trim(call_1)//' '//trim(call_2)// & + ' R'//crpt//' '//cfield + if(itu.eq.1 .and. ir.eq.1) msg='TU; '//trim(call_1)//' '//trim(call_2)// & + ' R'//crpt//' '//cfield endif - if(msg(1:4).eq.'CQ <') unpk77_success=.false. +! if(msg(1:4).eq.'CQ <') unpk77_success=.false. return end subroutine unpack77 @@ -1040,12 +1068,11 @@ subroutine pack77_3(nwords,w,i3,n3,c77) call chkcall(w(i1+1),bcall_2,ok2) if(.not.ok1 .or. .not.ok2) go to 900 crpt=w(nwords-1)(1:3) + if(index(crpt,'-').ge.1 .or. index(crpt,'+').ge.1) go to 900 if(crpt(1:1).eq.'5' .and. crpt(2:2).ge.'2' .and. crpt(2:2).le.'9' .and. & crpt(3:3).eq.'9') then nserial=0 read(w(nwords),*,err=1) nserial -!1 i3=3 -! n3=0 endif 1 mult=' ' imult=-1 @@ -1150,6 +1177,60 @@ subroutine pack77_4(nwords,w,i3,n3,c77) 900 return end subroutine pack77_4 +subroutine pack77_5(nwords,w,i3,n3,c77) +! Check Type 5 (WWROF contest exchange) + + character*13 w(19) + character*77 c77 + character*6 bcall_1,bcall_2 + character*3 mult + character crpt*4 + character c1*1,c2*2 + logical ok1,ok2 + + if(nwords.eq.4 .or. nwords.eq.5 .or. nwords.eq.6) then + i1=1 + if(trim(w(1)).eq.'TU;') i1=2 + call chkcall(w(i1),bcall_1,ok1) + call chkcall(w(i1+1),bcall_2,ok2) + if(.not.ok1 .or. .not.ok2) go to 900 + crpt=w(nwords-1)(1:4) + if(index(crpt,'-').lt.1 .and. index(crpt,'+').lt.1) go to 900 + + c1=crpt(1:1) + c2=crpt(1:2) + irpt=-1 + if(c1.eq.'+' .or. c1.eq.'-') then + ir=0 + read(w(nwords-1),*,err=900) irpt + irpt=irpt+35 + else if(c2.eq.'R+' .or. c2.eq.'R-') then + ir=1 + read(w(nwords-1)(2:),*) irpt + irpt=irpt+35 + endif + if(irpt.eq.-1 .or. len(trim(w(nwords))).ne.2) go to 900 + c2=w(nwords)(1:2) + n1=ichar(c2(1:1)) - ichar('A') + n2=ichar(c2(2:2)) - ichar('A') + if(n1.lt.0 .or. n1.gt.17) go to 900 + if(n2.lt.0 .or. n2.gt.17) go to 900 + nexch=18*n1 + n2 + i3=5 + n3=0 + itu=0 + if(trim(w(1)).eq.'TU;') itu=1 + call pack28(w(1+itu),n28a) + call pack28(w(2+itu),n28b) +! 5 TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest + write(c77,1010) itu,n28a,n28b,ir,irpt,nexch,i3 +1010 format(b1,2b28.28,b1,b7.7,b9.9,b3.3) + + end if + +900 return +end subroutine pack77_5 + subroutine packtext77(c13,c71) character*13 c13,w From 9c3c5d6b3c9c903e66d91323b6ee70e39fc34465 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 6 Jun 2019 11:58:52 -0400 Subject: [PATCH 330/367] Turn Tx Enable to OFF after logging a QSO, even if "Clear DX call and grid after logging" is not checked. --- widgets/mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index f5c5cff41..7c0d178a8 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5559,6 +5559,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, } if(m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX (); + auto_tx_mode (false); m_dateTimeQSOOn = QDateTime {}; auto special_op = m_config.special_op_id (); if (SpecOp::NONE < special_op && special_op < SpecOp::FOX && From e3c73def7ae4fbb947c72b1285979ccf97e6c6f1 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 6 Jun 2019 13:44:32 -0400 Subject: [PATCH 331/367] Updates to the User Guide, mostly related to addition of the FT4 mode. --- doc/common/links.adoc | 1 + doc/user_guide/en/install-windows.adoc | 7 +++-- doc/user_guide/en/introduction.adoc | 31 +++++++++++-------- doc/user_guide/en/new_features.adoc | 35 ++++------------------ doc/user_guide/en/protocols.adoc | 41 +++++++++++++++++--------- 5 files changed, 56 insertions(+), 59 deletions(-) diff --git a/doc/common/links.adoc b/doc/common/links.adoc index e886f551f..58ad60476 100644 --- a/doc/common/links.adoc +++ b/doc/common/links.adoc @@ -116,6 +116,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes. :QRA64_EME: http://physics.princeton.edu/pulsar/K1JT/QRA64_EME.pdf[QRA64 for microwave EME] :svn: http://subversion.apache.org/packages.html#windows[Subversion] :win32: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win32.exe[wsjtx-{VERSION}-win32.exe] +:win64: http://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win64.exe[wsjtx-{VERSION}-win64.exe] :wsjt-devel: https://lists.sourceforge.net/lists/listinfo/wsjt-devel[here] :wsjt_repo: https://sourceforge.net/p/wsjt/wsjt_orig/ci/master/tree/[WSJT Source Repository] :wspr_code: http://physics.princeton.edu/pulsar/K1JT/WSPRcode.exe[WSPRcode.exe] diff --git a/doc/user_guide/en/install-windows.adoc b/doc/user_guide/en/install-windows.adoc index 5b8e06834..786e9a294 100644 --- a/doc/user_guide/en/install-windows.adoc +++ b/doc/user_guide/en/install-windows.adoc @@ -1,11 +1,12 @@ // Status=review -Download and execute the package file {win32}, following these -instructions: +Download and execute the package file {win32} (WinXP, Vista, Win 7, +Win 8, Win10, 32-bit) or {win64} (Vista, Win 7, Win 8, Win10, 64-bit) +following these instructions: * Install _WSJT-X_ into its own directory, for example `C:\WSJTX` or ` C:\WSJT\WSJTX`, rather than the conventional location `C:\Program - Files (x86)\WSJTX`. + Files ...\WSJTX`. * All program files relating to _WSJT-X_ will be stored in the chosen installation directory and its subdirectories. diff --git a/doc/user_guide/en/introduction.adoc b/doc/user_guide/en/introduction.adoc index b48738190..6da0f7936 100644 --- a/doc/user_guide/en/introduction.adoc +++ b/doc/user_guide/en/introduction.adoc @@ -7,10 +7,10 @@ K1**JT**,`" while the suffix "`-X`" indicates that _WSJT-X_ started as an extended and experimental branch of the program _WSJT_. -_WSJT-X_ Version {VERSION_MAJOR}.{VERSION_MINOR} offers nine different -protocols or modes: *FT8*, *JT4*, *JT9*, *JT65*, *QRA64*, *ISCAT*, -*MSK144*, *WSPR*, and *Echo*. The first five are designed for making -reliable QSOs under extreme weak-signal conditions. They use nearly +_WSJT-X_ Version {VERSION_MAJOR}.{VERSION_MINOR} offers ten different +protocols or modes: *FT4*, *FT8*, *JT4*, *JT9*, *JT65*, *QRA64*, +*ISCAT*, *MSK144*, *WSPR*, and *Echo*. The first six are designed for +making reliable QSOs under weak-signal conditions. They use nearly identical message structure and source encoding. JT65 and QRA64 were designed for EME ("`moonbounce`") on the VHF/UHF bands and have also proven very effective for worldwide QRP communication on the HF bands. @@ -25,12 +25,17 @@ one-minute timed sequences of alternating transmission and reception, so a minimal QSO takes four to six minutes — two or three transmissions by each station, one sending in odd UTC minutes and the other even. FT8 is operationally similar but four times faster -(15-second T/R sequences) and less sensitive by a few dB. On the HF -bands, world-wide QSOs are possible with any of these modes using -power levels of a few watts (or even milliwatts) and compromise -antennas. On VHF bands and higher, QSOs are possible (by EME and -other propagation types) at signal levels 10 to 15 dB below those -required for CW. +(15-second T/R sequences) and less sensitive by a few dB. FT4 is +faster still (7.5 s T/R sequences) and especially well suited for +radio contesting. On the HF bands, world-wide QSOs are possible with +any of these modes using power levels of a few watts (or even +milliwatts) and compromise antennas. On VHF bands and higher, QSOs +are possible (by EME and other propagation types) at signal levels 10 +to 15 dB below those required for CW. + +Note that even though their T/R sequences are short, FT4 and FT8 are +classified as slow modes because their message frames are sent +only once per transmission. *ISCAT*, *MSK144*, and optionally submodes *JT9E-H* are "`fast`" protocols designed to take advantage of brief signal enhancements from @@ -65,10 +70,10 @@ are available for all three platforms. *Version Numbers:* _WSJT-X_ release numbers have major, minor, and patch numbers separated by periods: for example, _WSJT-X_ Version -1.9.0. Temporary "`beta`" release candidates are sometimes made in +2.1.0. Temporary _beta release_ candidates are sometimes made in advance of a new general-availability release, in order to obtain user -feedback. For example, version 1.9.0-rc1, 1.9.0-rc2, etc., would -be beta releases leading up to the final release of v1.9.0. +feedback. For example, version 2.1.0-rc1, 2.1.0-rc2, etc., would +be beta releases leading up to the final release of v2.1.0. Release candidates should be used _only_ during a short testing period. They carry an implied obligation to provide feedback to the program development group. Candidate releases should not be used on diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index a90b52182..496bef16b 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -1,40 +1,17 @@ === New in Version {VERSION} For quick reference, here's a short list of features and capabilities -added to _WSJT-X_ since Version 1.9.1: +added to _WSJT-X_ since Version 2.0.1: -- New FT8 and MSK144 protocols with 77-bit payloads permit these enhancements: +- New FT4 protocol, designed especially for radio contesting -* Optimized contest messages for NA VHF, EU VHF, Field Day, RTTY Roundup +* T/R sequence length 7.5 s -* Full support for "/R" and "/P" calls in relevant contests +* Bandwidth 80 Hz -* New logging features for contesting - -* Integration with {n1mm_logger} and {writelog} for contesting - -* Improved support for compound and nonstandard callsigns - -* Nearly equal (or better) sensitivity compared to old protocols - -* Lower false decode rates - -- Improved color highlighting of received messages - -- Improved WSPR sensitivity - -- Expanded and improved UDP messages sent to companion programs - -- Bug fixes and other minor tweaks to user interface - -IMPORTANT: Note that for FT8 and MSK144 there is no backward -compatibility with WSJT-X 1.9.1 and earlier. Everyone using these -modes should upgrade to WSJT-X 2.0 by January 1, 2019. - -IMPORTANT: _WSJT-X_ Version 2.0 drops support for Apple Mac OS X 10.9 -(Mavericks). It is possible to build from source for this operating -system version but the DMG installer package requires 10.10 or later. +* Threshold sensitivity -17.5 dB +- Improvements to accessibility === Documentation Conventions diff --git a/doc/user_guide/en/protocols.adoc b/doc/user_guide/en/protocols.adoc index f50096097..fc0dad266 100644 --- a/doc/user_guide/en/protocols.adoc +++ b/doc/user_guide/en/protocols.adoc @@ -12,10 +12,10 @@ Special cases allow other information such as add-on callsign prefixes aim is to compress the most common messages used for minimally valid QSOs into a fixed 72-bit length. -The information payload for FT8 and MSK144 contains 77 bits. The 5 -additional bits are used to flag special message types used for FT8 -DXpedition Mode, contesting, nonstandard callsigns, and a few other -special types. +The information payload for FT4, FT8, and MSK144 contains 77 bits. +The 5 additional bits are used to flag special message types used for +FT8 DXpedition Mode, contesting, nonstandard callsigns, and a few +other special types. A standard amateur callsign consists of a one- or two-character prefix, at least one of which must be a letter, followed by a digit @@ -67,18 +67,29 @@ _WSJT-X_ modes have continuous phase and constant envelope. [[SLOW_MODES]] === Slow Modes +[[FT4PRO]] +==== FT4 + +Forward error correction (FEC) in FT4 uses a low-density parity check +(LDPC) code with 77 information bits, a 14-bit cyclic redundancy check +(CRC), and 83 parity bits making a 174-bit codeword. It is thus +called an LDPC (174,91) code. Synchronization uses four 4×4 Costas +arrays, and ramp-up and ramp-down symbols are inserted at the start +and end of each transmission. Modulation is 4-tone frequency-shift +keying with Gaussian smoothing of frequency transitions (4-GFSK). The +keying rate is 12000/576 = 20.8333 baud. Each transmitted symbol +conveys two bits, so the total number of channel symbols is 174/2 + 16 ++ 2 = 105. The total bandwidth is 4 × 20.8333 = 83.3 Hz. + [[FT8PRO]] ==== FT8 -Forward error correction (FEC) in FT8 uses a low-density parity check -(LDPC) code with 77 information bits, a 14-bit cyclic redundancy check -(CRC), and 83 parity bits making a 174-bit codeword. It is thus -called an LDPC (174,91) code. Synchronization uses 7×7 Costas arrays -at the beginning, middle, and end of each transmission. Modulation is -8-tone frequency-shift keying (8-FSK) at 12000/1920 = 6.25 baud. Each -transmitted symbol carries three bits, so the total number of channel -symbols is 174/3 + 21 = 79. The total occupied bandwidth is 8 × 6.25 -= 50 Hz. +FT8 uses the same LDPC (174,91) code as FT4. Modulation is 8-tone +frequency-shift keying (8-GFSK) at 12000/1920 = 6.25 baud. +Synchronization uses 7×7 Costas arrays at the beginning, middle, and +end of each transmission. Transmitted symbols carry three bits, so +the total number of channel symbols is 174/3 + 21 = 79. The total +occupied bandwidth is 8 × 6.25 = 50 Hz. [[JT4PRO]] ==== JT4 @@ -227,7 +238,8 @@ which the probability of decoding is 50% or higher. |=============================================================================== |Mode |FEC Type |(n,k) | Q|Modulation type|Keying rate (Baud)|Bandwidth (Hz) |Sync Energy|Tx Duration (s)|S/N Threshold (dB) -|FT8 |LDPC, r=1/2|(174,91)| 8| 8-FSK| 6.25 | 50.0 | 0.27| 12.6 | -21 +|FT4 |LDPC, r=1/2|(174,91)| 4| 4-GFSK| 20.8333 | 83.3 | 0.15| 5.04 | -17.5 +|FT8 |LDPC, r=1/2|(174,91)| 8| 8-GFSK| 6.25 | 50.0 | 0.27| 12.6 | -21 |JT4A |K=32, r=1/2|(206,72)| 2| 4-FSK| 4.375| 17.5 | 0.50| 47.1 | -23 |JT9A |K=32, r=1/2|(206,72)| 8| 9-FSK| 1.736| 15.6 | 0.19| 49.0 | -27 |JT65A |Reed Solomon|(63,12) |64|65-FSK| 2.692| 177.6 | 0.50| 46.8 | -25 @@ -246,6 +258,7 @@ comparable to tone spacing. [width="50%",cols="h,3*^",frame=topbot,options="header"] |===================================== |Mode |Tone Spacing |BW (Hz)|S/N (dB) +|FT4 |20.8333 | 83.3 |-17.5 |FT8 |6.25 | 50.0 |-21 |JT4A |4.375| 17.5 |-23 |JT4B |8.75 | 30.6 |-22 From 3ff672705fa78fdbfbf67a3c6d0e6cb861f3d23e Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 6 Jun 2019 14:14:11 -0400 Subject: [PATCH 332/367] Change the F11/F12 frequency increments for FT4 to +/- 90 Hz. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7c0d178a8..2d3964efa 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1991,7 +1991,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { int offset=60; - if(m_mode=="FT4") offset=100; + if(m_mode=="FT4") offset=90; ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()-offset); } else{ bumpFqso(n); @@ -2007,7 +2007,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) if(e->modifiers() & Qt::ControlModifier) n+=100; if(e->modifiers() & Qt::ShiftModifier) { int offset=60; - if(m_mode=="FT4") offset=100; + if(m_mode=="FT4") offset=90; ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()+offset); } else { bumpFqso(n); From 3b777860ca742e761274850f92d0c9d6a5ec053a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 6 Jun 2019 14:15:12 -0400 Subject: [PATCH 333/367] Add a User Guide tutorial section for FT4. --- doc/CMakeLists.txt | 3 ++ doc/user_guide/en/images/ft4_decodes.png | Bin 0 -> 23112 bytes doc/user_guide/en/images/ft4_waterfall.png | Bin 0 -> 35788 bytes doc/user_guide/en/tutorial-example4.adoc | 51 +++++++++++++++++++++ doc/user_guide/en/wsjtx-main.adoc | 4 ++ 5 files changed, 58 insertions(+) create mode 100644 doc/user_guide/en/images/ft4_decodes.png create mode 100644 doc/user_guide/en/images/ft4_waterfall.png create mode 100644 doc/user_guide/en/tutorial-example4.adoc diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index e81160575..bc333dd8c 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -52,6 +52,7 @@ set (UG_SRCS tutorial-example1.adoc tutorial-example2.adoc tutorial-example3.adoc + tutorial-example4.adoc tutorial-main-window.adoc tutorial-wide-graph-settings.adoc utilities.adoc @@ -77,6 +78,8 @@ set (UG_IMGS images/FreqCal_Graph.png images/FreqCal_Results.png images/freemsg.png + images/ft4_decodes.png + images/ft4_waterfall.png images/ft8_decodes.png images/FT8_waterfall.png images/help-menu.png diff --git a/doc/user_guide/en/images/ft4_decodes.png b/doc/user_guide/en/images/ft4_decodes.png new file mode 100644 index 0000000000000000000000000000000000000000..05d2083fd182c77e065cd09cf6af06fce037d8e0 GIT binary patch literal 23112 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 literal 0 HcmV?d00001 diff --git a/doc/user_guide/en/images/ft4_waterfall.png b/doc/user_guide/en/images/ft4_waterfall.png new file mode 100644 index 0000000000000000000000000000000000000000..07ed6398a134587d5234f5714e7732d289166737 GIT binary patch literal 35788 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 Date: Thu, 6 Jun 2019 14:21:12 -0400 Subject: [PATCH 334/367] Update the shortcuts.txt file. --- shortcuts.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shortcuts.txt b/shortcuts.txt index 10276a269..93c75585b 100644 --- a/shortcuts.txt +++ b/shortcuts.txt @@ -13,11 +13,11 @@ F7 Display Message Averaging window F11 Move Rx frequency down 1 Hz Ctrl+F11 Move identical Rx and Tx frequencies down 1 Hz - Shift+F11 Move Tx frequency down 60 Hz + Shift+F11 Move Tx frequency down 60 Hz (FT8) or 90 Hz (FT4) Ctrl+Shift+F11 Move dial frequency down 2000 Hz F12 Move Rx frequency up 1 Hz Ctrl+F12 Move identical Rx and Tx frequencies up 1 Hz - Shift+F12 Move Tx frequency up 60 Hz + Shift+F12 Move Tx frequency up 60 Hz (FT8) or 90 Hz (FT4) Ctrl+Shift+F12 Move dial frequency up 2000 Hz Alt+1-6 Set now transmission to this number on Tab 1 Ctl+1-6 Set next transmission to this number on Tab 1 From 85bc9ef6be261115c525b0641d71e4eef0698915 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 7 Jun 2019 01:33:18 +0100 Subject: [PATCH 335/367] Update prerequisite packages to include the Qt Linguist tools --- INSTALL | 62 +++++++++++++-------------------------------------------- 1 file changed, 14 insertions(+), 48 deletions(-) diff --git a/INSTALL b/INSTALL index 4f6e85b78..3886fe7c7 100644 --- a/INSTALL +++ b/INSTALL @@ -30,13 +30,13 @@ Mac". Qt v5, preferably v5.5 or later is required to build WSJT-X. -Qt v5 multimedia support and serial port is necessary as well as the -core Qt v5 components, normally installing the Qt multimedia -development package and Qt serialport development package are -sufficient to pull in all the required Qt components and dependants as -a single transaction. On some systems the Qt multimedia plugin -component is separate in the distribution repository an it may also -need installing. +Qt v5 multimedia support, serial port, and Linguist is necessary as +well as the core Qt v5 components, normally installing the Qt +multimedia development, Qt serialport development packages, and teh Qt +Linguist packages are sufficient to pull in all the required Qt +components and dependants as a single transaction. On some systems +the Qt multimedia plugin component is separate in the distribution +repository an it may also need installing. The single precision FFTW v3 library libfftw3f is required along with the libfftw library development package. Normally installing the @@ -256,47 +256,6 @@ The above commands will build hamlib and install it into ~/hamlib-prefix. If `make install-strip` fails, try `make install`. -Qt --- - -NOTE: As of Qt v5.4 building Qt from source on Mac OS X is no longer -necessary since the Qt team have switched to using the modern libc++ -Standard C++ Library for all distributable run time -components. Instead you may simply download a binary installer for OS -X 64-bit. The binary installer is here: - - http://www.qt.io/download - -The binary Qt distributions prior to Qt v5.4 from -http://www.qt.io/download unfortunately are built to use the libstdc++ -C++ support library, WSJT-X uses a less geriatric C++ dialect which -uses the libc++ C++ support library. This means that you need to -build Qt from sources. This is not difficult but does take some time. - -Download the Qt source tarball from -http://www.qt.io/download-open-source/, the link is about half way -down the page, you want the full sources tar ball shown as a 'tar.gz' -link. - -Unpack the sources and cd into the top level directory then type: - -$ ./configure -prefix ~/local/qt-macx-clang -opensource \ - -confirm-license -platform macx-clang -silent -nomake tests \ - -nomake examples -sdk macosx10.10 -skip qtwebkit \ - -skip qtwebkit-examples -skip qtquick1 -skip qtconnectivity \ - -skip qtlocation -skip qtsensors -skip qtscript \ - -skip qtwebsockets -skip qtwebengine -skip qtwebchannel \ - -skip qtwayland -skip qtquickcontrols -skip qtdeclarative \ - -skip qtxmlpatterns -skip qtenginio -$ make -j4 -$ make install - -If you are building on 10.8 or don't have the 10.10 Mac SDK (Xcode 6) -available, you can substitute '-sdk macosx10.9' above. - -The build above will take a few hours to complete. - - CMake ----- Although CMake is available via MacPorts I prefer to use the binary @@ -328,6 +287,13 @@ $ sudo chgrp wheel /usr/local/bin and then retry the install command. +Qt +-- + +Download the latest on-line installer package from the Qt web site and +isntall the latest Qt stable version development package. + + WSJT-X ------ First fetch the source from the repository: From b3d6f5d22e7ba687ffdc0f15ed585578556f822c Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 7 Jun 2019 09:04:55 -0500 Subject: [PATCH 336/367] Fix a typo. --- INSTALL | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL b/INSTALL index 3886fe7c7..42169fb38 100644 --- a/INSTALL +++ b/INSTALL @@ -32,7 +32,7 @@ Qt v5, preferably v5.5 or later is required to build WSJT-X. Qt v5 multimedia support, serial port, and Linguist is necessary as well as the core Qt v5 components, normally installing the Qt -multimedia development, Qt serialport development packages, and teh Qt +multimedia development, Qt serialport development packages, and the Qt Linguist packages are sufficient to pull in all the required Qt components and dependants as a single transaction. On some systems the Qt multimedia plugin component is separate in the distribution @@ -377,4 +377,4 @@ $ cmake --build . --target install 73 Bill -G4WJS. \ No newline at end of file +G4WJS. From 067692cd1e176a7ac38d19881d223fccd4f8818d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 7 Jun 2019 17:21:57 +0100 Subject: [PATCH 337/367] Disable automatically enabled toolbar on Mac Qt automatically adds a "Menu->View->Show Tab Bar" button, this change disables that as we don't have a tool bar or tab bar. --- widgets/mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 2d3964efa..0d6d63e74 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -413,6 +413,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_manual {&m_network_manager} { ui->setupUi(this); + setUnifiedTitleAndToolBarOnMac (true); createStatusBar(); add_child_to_event_filter (this); ui->dxGridEntry->setValidator (new MaidenheadLocatorValidator {this}); From 53cb410b8ef1367d6c10ebc2ef54a463102d3b72 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 7 Jun 2019 23:48:21 +0100 Subject: [PATCH 338/367] Use all caps for Maindenhead Locators --- validators/MaidenheadLocatorValidator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validators/MaidenheadLocatorValidator.cpp b/validators/MaidenheadLocatorValidator.cpp index 9de41233e..e7e1134c7 100644 --- a/validators/MaidenheadLocatorValidator.cpp +++ b/validators/MaidenheadLocatorValidator.cpp @@ -64,7 +64,7 @@ auto MaidenheadLocatorValidator::validate (QString& input, int& pos) const -> St auto subsquare = match.captured ("subsquare"); if (subsquare.size ()) { - input.replace (match.capturedStart ("subsquare"), match.capturedLength ("subsquare"), subsquare.toLower ()); + input.replace (match.capturedStart ("subsquare"), match.capturedLength ("subsquare"), subsquare.toUpper ()); } if (match.hasMatch ()) return Acceptable; if (!input.size () || match.hasPartialMatch ()) return Intermediate; From 3c23a05d1fb5e17be3a5c5340e2552d7a2979744 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sat, 8 Jun 2019 08:34:46 -0500 Subject: [PATCH 339/367] Move demod and bit metric calculation to a subroutine. This will make it easier to experiment with alternative schemes for demod. --- CMakeLists.txt | 1 + lib/ft4/get_ft4_bitmetrics.f90 | 114 +++++++++++++++++++++++++++++ lib/ft4_decode.f90 | 129 +++++---------------------------- 3 files changed, 133 insertions(+), 111 deletions(-) create mode 100644 lib/ft4/get_ft4_bitmetrics.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 6451b5750..4b425a6e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -573,6 +573,7 @@ set (wsjt_FSRCS lib/sync64.f90 lib/sync65.f90 lib/ft4/getcandidates4.f90 + lib/ft4/get_ft4_bitmetrics.f90 lib/ft8/sync8.f90 lib/ft8/sync8d.f90 lib/ft4/sync4d.f90 diff --git a/lib/ft4/get_ft4_bitmetrics.f90 b/lib/ft4/get_ft4_bitmetrics.f90 new file mode 100644 index 000000000..6d87485e8 --- /dev/null +++ b/lib/ft4/get_ft4_bitmetrics.f90 @@ -0,0 +1,114 @@ +subroutine get_ft4_bitmetrics(cd,smax,bitmetrics,badsync) + + include 'ft4_params.f90' + parameter (NSS=NSPS/NDOWN,NDMAX=NMAX/NDOWN) + complex cd(0:NN*NSS-1) + complex cs(0:3,NN) + complex csymb(NSS) + integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) + integer graymap(0:3) + integer ip(1) + logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits + logical first + logical badsync + real bitmetrics(2*NN,3) + real s2(0:255) + real s4(0:3,NN) + + data icos4a/0,1,3,2/ + data icos4b/1,0,2,3/ + data icos4c/2,3,1,0/ + data icos4d/3,2,0,1/ + data graymap/0,1,3,2/ + data first/.true./ + save first,one + + if(first) then + one=.false. + do i=0,255 + do j=0,7 + if(iand(i,2**j).ne.0) one(i,j)=.true. + enddo + enddo + first=.false. + endif + + do k=1,NN + i1=(k-1)*NSS + csymb=cd(i1:i1+NSS-1) + call four2a(csymb,NSS,1,-1,1) + cs(0:3,k)=csymb(1:4) + s4(0:3,k)=abs(csymb(1:4)) + enddo + +! Sync quality check + is1=0 + is2=0 + is3=0 + is4=0 + badsync=.false. + do k=1,4 + ip=maxloc(s4(:,k)) + if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s4(:,k+33)) + if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s4(:,k+66)) + if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 + ip=maxloc(s4(:,k+99)) + if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 + enddo + nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 + if(smax .lt. 0.7 .or. nsync .lt. 8) then + badsync=.true. + return + endif + + do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols + if(nseq.eq.1) nsym=1 + if(nseq.eq.2) nsym=2 + if(nseq.eq.3) nsym=4 + nt=2**(2*nsym) + do ks=1,NN-nsym+1,nsym !87+16=103 symbols. + amax=-1.0 + do i=0,nt-1 + i1=i/64 + i2=iand(i,63)/16 + i3=iand(i,15)/4 + i4=iand(i,3) + if(nsym.eq.1) then + s2(i)=abs(cs(graymap(i4),ks)) + elseif(nsym.eq.2) then + s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) + elseif(nsym.eq.4) then + s2(i)=abs(cs(graymap(i1),ks ) + & + cs(graymap(i2),ks+1) + & + cs(graymap(i3),ks+2) + & + cs(graymap(i4),ks+3) & + ) + else + print*,"Error - nsym must be 1, 2, or 4." + endif + enddo + ipt=1+(ks-1)*2 + if(nsym.eq.1) ibmax=1 + if(nsym.eq.2) ibmax=3 + if(nsym.eq.4) ibmax=7 + do ib=0,ibmax + bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & + maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) + if(ipt+ib.gt.2*NN) cycle + bitmetrics(ipt+ib,nseq)=bm + enddo + enddo + enddo + + bitmetrics(205:206,2)=bitmetrics(205:206,1) + bitmetrics(201:204,3)=bitmetrics(201:204,2) + bitmetrics(205:206,3)=bitmetrics(205:206,1) + + call normalizebmet(bitmetrics(:,1),2*NN) + call normalizebmet(bitmetrics(:,2),2*NN) + call normalizebmet(bitmetrics(:,3),2*NN) + return + +end subroutine get_ft4_bitmetrics diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 50c9fa47d..bd42c0450 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -45,43 +45,31 @@ contains complex cb(0:NDMAX-1) complex cd(0:NN*NSS-1) !Complex waveform complex ctwk(2*NSS),ctwk2(2*NSS,-16:16) - complex csymb(NSS) - complex cs(0:3,NN) - real s4(0:3,NN) - real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) real a(5) + real bitmetrics(2*NN,3) real dd(NMAX) real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) - real s2(0:255) real candidate(3,100) real savg(NH1),sbase(NH1) integer apbits(2*ND) integer apmy_ru(28),aphis_fd(28) - integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) integer*2 iwave(NMAX) !Raw received data integer*1 message77(77),rvec(77),apmask(2*ND),cw(2*ND) integer*1 hbits(2*NN) - integer graymap(0:3) integer i4tone(103) - integer ip(1) integer nappasses(0:5) ! # of decoding passes for QSO States 0-5 integer naptypes(0:5,4) ! nQSOProgress, decoding pass integer mcq(29) integer mrrr(19),m73(19),mrr73(19) logical nohiscall,unpk77_success - logical one(0:255,0:7) ! 256 4-symbol sequences, 8 bits logical first, dobigfft logical dosubtract,doosd + logical badsync logical, intent(in) :: lapcqonly - data icos4a/0,1,3,2/ - data icos4b/1,0,2,3/ - data icos4c/2,3,1,0/ - data icos4d/3,2,0,1/ - data graymap/0,1,3,2/ data first/.true./ data mcq/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0/ data mrrr/0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1/ @@ -90,7 +78,7 @@ contains data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ - save fs,dt,tt,txt,twopi,h,one,first,apbits,nappasses,naptypes, & + save fs,dt,tt,txt,twopi,h,first,apbits,nappasses,naptypes, & mycall0,hiscall0,cqstr0,ctwk2 this%callback => callback @@ -105,12 +93,6 @@ contains txt=NZ*dt !Transmission length (s) without ramp up/down twopi=8.0*atan(1.0) h=1.0 - one=.false. - do i=0,255 - do j=0,7 - if(iand(i,2**j).ne.0) one(i,j)=.true. - enddo - enddo do idf=-16,16 a=0. @@ -237,7 +219,7 @@ contains nd2=ndecodes-nd1 if(nd2.eq.0) exit endif - + candidate=0.0 ncand=0 call timer('getcand4',0) @@ -302,89 +284,14 @@ contains else cd(-ibest:ibest+NN*NSS-1)=cb(0:NN*NSS+2*ibest-1) endif - call timer('four2a ',0) - do k=1,NN - i1=(k-1)*NSS - csymb=cd(i1:i1+NSS-1) - call four2a(csymb,NSS,1,-1,1) - cs(0:3,k)=csymb(1:4) - s4(0:3,k)=abs(csymb(1:4)) - enddo - call timer('four2a ',1) -! Sync quality check - is1=0 - is2=0 - is3=0 - is4=0 - do k=1,4 - ip=maxloc(s4(:,k)) - if(icos4a(k-1).eq.(ip(1)-1)) is1=is1+1 - ip=maxloc(s4(:,k+33)) - if(icos4b(k-1).eq.(ip(1)-1)) is2=is2+1 - ip=maxloc(s4(:,k+66)) - if(icos4c(k-1).eq.(ip(1)-1)) is3=is3+1 - ip=maxloc(s4(:,k+99)) - if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 - enddo - nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 - if(smax .lt. 0.7 .or. nsync .lt. 8) cycle - - do nseq=1,3 !Try coherent sequences of 1, 2, and 4 symbols - if(nseq.eq.1) nsym=1 - if(nseq.eq.2) nsym=2 - if(nseq.eq.3) nsym=4 - nt=2**(2*nsym) - do ks=1,NN-nsym+1,nsym !87+16=103 symbols. - amax=-1.0 - do i=0,nt-1 - i1=i/64 - i2=iand(i,63)/16 - i3=iand(i,15)/4 - i4=iand(i,3) - if(nsym.eq.1) then - s2(i)=abs(cs(graymap(i4),ks)) - elseif(nsym.eq.2) then - s2(i)=abs(cs(graymap(i3),ks)+cs(graymap(i4),ks+1)) - elseif(nsym.eq.4) then - s2(i)=abs(cs(graymap(i1),ks ) + & - cs(graymap(i2),ks+1) + & - cs(graymap(i3),ks+2) + & - cs(graymap(i4),ks+3) & - ) - else - print*,"Error - nsym must be 1, 2, or 4." - endif - enddo - ipt=1+(ks-1)*2 - if(nsym.eq.1) ibmax=1 - if(nsym.eq.2) ibmax=3 - if(nsym.eq.4) ibmax=7 - do ib=0,ibmax - bm=maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)) - & - maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)) - if(ipt+ib.gt.2*NN) cycle - if(nsym.eq.1) then - bmeta(ipt+ib)=bm - elseif(nsym.eq.2) then - bmetb(ipt+ib)=bm - elseif(nsym.eq.4) then - bmetc(ipt+ib)=bm - endif - enddo - enddo - enddo - - bmetb(205:206)=bmeta(205:206) - bmetc(201:204)=bmetb(201:204) - bmetc(205:206)=bmeta(205:206) - - call normalizebmet(bmeta,2*NN) - call normalizebmet(bmetb,2*NN) - call normalizebmet(bmetc,2*NN) + call timer('bitmet ',0) + call get_ft4_bitmetrics(cd,smax,bitmetrics,badsync) + call timer('bitmet ',1) + if(badsync) cycle hbits=0 - where(bmeta.ge.0) hbits=1 + where(bitmetrics(:,1).ge.0) hbits=1 ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) @@ -393,17 +300,17 @@ contains if(nsync_qual.lt. 20) cycle scalefac=2.83 - llra( 1: 58)=bmeta( 9: 66) - llra( 59:116)=bmeta( 75:132) - llra(117:174)=bmeta(141:198) + llra( 1: 58)=bitmetrics( 9: 66, 1) + llra( 59:116)=bitmetrics( 75:132, 1) + llra(117:174)=bitmetrics(141:198, 1) llra=scalefac*llra - llrb( 1: 58)=bmetb( 9: 66) - llrb( 59:116)=bmetb( 75:132) - llrb(117:174)=bmetb(141:198) + llrb( 1: 58)=bitmetrics( 9: 66, 2) + llrb( 59:116)=bitmetrics( 75:132, 2) + llrb(117:174)=bitmetrics(141:198, 2) llrb=scalefac*llrb - llrc( 1: 58)=bmetc( 9: 66) - llrc( 59:116)=bmetc( 75:132) - llrc(117:174)=bmetc(141:198) + llrc( 1: 58)=bitmetrics( 9: 66, 3) + llrc( 59:116)=bitmetrics( 75:132, 3) + llrc(117:174)=bitmetrics(141:198, 3) llrc=scalefac*llrc apmag=maxval(abs(llra))*1.1 From e9559244f8e0df839378ef26d7eeedbcd7803fac Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 11 Jun 2019 10:14:04 +0100 Subject: [PATCH 340/367] Recall "Settings->Colors->Highlight by mode" from settings on startup --- Configuration.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Configuration.cpp b/Configuration.cpp index b8c37184d..2ac22b0b7 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -1587,6 +1587,7 @@ void Configuration::impl::write_settings () settings_->setValue ("FrequenciesForRegionModes", QVariant::fromValue (frequencies_.frequency_list ())); settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ())); settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ())); + settings_->setValue ("HighlightByMode", highlight_by_mode_); settings_->setValue ("IncludeWAEEntities", include_WAE_entities_); settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_); settings_->setValue ("toRTTY", log_as_RTTY_); From 89dc109968f2ec14ecf86ff4b7a419a9b2406afd Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 11 Jun 2019 09:17:13 -0500 Subject: [PATCH 341/367] Re-enable printing of ?a# decode quality and ap-type annotations, for now. --- lib/decoder.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index d3f1153f4..8abdcb75f 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -517,7 +517,7 @@ contains decoded0=decoded annot=' ' - if(ncontest.eq.0 .and. nap.ne.0) then + if(nap.ne.0) then write(annot,'(a1,i1)') 'a',nap if(qual.lt.0.17) decoded0(37:37)='?' endif @@ -598,7 +598,7 @@ contains decoded0=decoded annot=' ' - if(ncontest.eq.0 .and. nap.ne.0) then + if(nap.ne.0) then write(annot,'(a1,i1)') 'a',nap if(qual.lt.0.17) decoded0(37:37)='?' endif From fc07bd92875e90a6a51486e913784ca9a8a9967d Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 12 Jun 2019 08:16:10 -0500 Subject: [PATCH 342/367] FT4: minor tweak to avoid passing an unnecessary argument and reject bad candidates sooner. --- lib/ft4/get_ft4_bitmetrics.f90 | 4 ++-- lib/ft4_decode.f90 | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/ft4/get_ft4_bitmetrics.f90 b/lib/ft4/get_ft4_bitmetrics.f90 index 6d87485e8..eba86a418 100644 --- a/lib/ft4/get_ft4_bitmetrics.f90 +++ b/lib/ft4/get_ft4_bitmetrics.f90 @@ -1,4 +1,4 @@ -subroutine get_ft4_bitmetrics(cd,smax,bitmetrics,badsync) +subroutine get_ft4_bitmetrics(cd,bitmetrics,badsync) include 'ft4_params.f90' parameter (NSS=NSPS/NDOWN,NDMAX=NMAX/NDOWN) @@ -58,7 +58,7 @@ subroutine get_ft4_bitmetrics(cd,smax,bitmetrics,badsync) if(icos4d(k-1).eq.(ip(1)-1)) is4=is4+1 enddo nsync=is1+is2+is3+is4 !Number of correct hard sync symbols, 0-16 - if(smax .lt. 0.7 .or. nsync .lt. 8) then + if(nsync .lt. 8) then badsync=.true. return endif diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index bd42c0450..28c044c77 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -269,6 +269,7 @@ contains enddo call timer('sync4d ',1) enddo + if(smax.lt.0.7) cycle f0=f0+real(idfbest) if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle call timer('ft4down ',0) @@ -286,7 +287,7 @@ contains endif call timer('bitmet ',0) - call get_ft4_bitmetrics(cd,smax,bitmetrics,badsync) + call get_ft4_bitmetrics(cd,bitmetrics,badsync) call timer('bitmet ',1) if(badsync) cycle From 9de51ebfa3d9a48661c99aacf3b1eb1b6969f039 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 12 Jun 2019 11:31:35 -0400 Subject: [PATCH 343/367] Rename and tweak rtty_spec.f90. --- CMakeLists.txt | 3 ++ lib/rtty_spec.f90 | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 lib/rtty_spec.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b425a6e4..0c10ff8d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1274,6 +1274,9 @@ target_link_libraries (jt49sim wsjt_fort wsjt_cxx) add_executable (allsim lib/allsim.f90 wsjtx.rc) target_link_libraries (allsim wsjt_fort wsjt_cxx) +add_executable (rtty_spec lib/rtty_spec.f90 wsjtx.rc) +target_link_libraries (rtty_spec wsjt_fort wsjt_cxx) + add_executable (jt65code lib/jt65code.f90 wsjtx.rc) target_link_libraries (jt65code wsjt_fort wsjt_cxx) diff --git a/lib/rtty_spec.f90 b/lib/rtty_spec.f90 new file mode 100644 index 000000000..704e5ce53 --- /dev/null +++ b/lib/rtty_spec.f90 @@ -0,0 +1,86 @@ +program rtty_spec + +! Generate simulated data for standard RTTY and WSJT-X modes FT8, FT4 + + use wavhdr + use packjt + parameter (NMAX=15*12000) + type(hdr) h + complex cwave(NMAX) + real wave(NMAX) + real*4 dat(NMAX) !Generated waveform + integer*2 iwave(NMAX) !Generated waveform + integer itone(680) !Channel symbols (values 0-1, 0-3, 0-7) + integer*1 msgbits(77) + character*37 msg37,msgsent37 + character*8 arg + + nargs=iargc() + if(nargs.ne.1) then + print*,'Usage: rtty_spec ' + go to 999 + endif + call getarg(1,arg) + read(arg,*) snrdb !S/N in dB (2500 hz reference BW) + + rmsdb=25. + rms=10.0**(0.05*rmsdb) + sig=10.0**(0.05*snrdb) + npts=NMAX + + do i=1,NMAX !Generate gaussian noise + dat(i)=gran() + enddo + +! Add the RTTY signal + fsample=12000.0 !Sample rate (Hz) + dt=1.0/fsample !Sample interval (s) + twopi=8.0*atan(1.0) + phi=0. + dphi=0. + j0=-1 + do i=6001,NMAX-6000 + j=nint(i*dt/0.022) + if(j.ne.j0) then + f0=1415.0 + call random_number(rr) + if(rr.gt.0.5) f0=1585.0 + dphi=twopi*f0*dt + j0=j + endif + phi=phi+dphi + if(phi.gt.twopi) phi=phi-twopi + dat(i)=dat(i) + sig*sin(phi) + enddo + +! Add the FT8 signal + i3=0 + n3=0 + msg37='WB9XYZ KA2ABC FN42' + call genft8(msg37,i3,n3,msgsent37,msgbits,itone) + nsym=79 + nsps=1920 + bt=2.0 + f0=3000.0 + icmplx=0 + nwave=nsym*nsps + call gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) + dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave) + +! Add the FT4 signal + ichk=0 + call genft4(msg37,ichk,msgsent37,msgbits,itone) + nsym=103 + nsps=576 + f0=3500.0 + icmplx=0 + nwave=(nsym+2)*nsps + call gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) + dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave) + h=default_header(12000,NMAX) + iwave=nint(rms*dat) + open(10,file='000000_000001.wav',access='stream',status='unknown') + write(10) h,iwave + close(10) + +999 end program rtty_spec From 3f5a99684230007ed81f309139606a60255136c1 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 13 Jun 2019 01:44:28 +0100 Subject: [PATCH 344/367] New UDP message SwitchConfiguration(14) to switch to an existing configuration The Status(1) message also acquires the current configuration name as a new field. See NetworkMessage.hpp for details. The UDP reference example program message_aggregator acquires the ability to display and change the configuration of a WSJT-X client to exercise these new features. --- MessageClient.cpp | 19 ++- MessageClient.hpp | 6 +- MessageServer.cpp | 17 ++- MessageServer.hpp | 5 +- MultiSettings.cpp | 156 ++++++++++++-------- MultiSettings.hpp | 4 + NetworkMessage.hpp | 16 +- UDPExamples/ClientWidget.cpp | 11 +- UDPExamples/ClientWidget.hpp | 5 +- UDPExamples/MessageAggregatorMainWindow.cpp | 1 + UDPExamples/UDPDaemon.cpp | 2 +- widgets/mainwindow.cpp | 6 +- 12 files changed, 171 insertions(+), 77 deletions(-) diff --git a/MessageClient.cpp b/MessageClient.cpp index 6e2ea7955..0629c3026 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -261,6 +261,18 @@ void MessageClient::impl::parse_message (QByteArray const& msg) } break; + case NetworkMessage::SwitchConfiguration: + { + QByteArray configuration_name; + in >> configuration_name; + TRACE_UDP ("SwitchConfiguration name:" << configuration_name); + if (check_status (in) != Fail && configuration_name.size ()) + { + Q_EMIT self_->switch_configuration (QString::fromUtf8 (configuration_name)); + } + } + break; + default: // Ignore // @@ -444,7 +456,8 @@ void MessageClient::status_update (Frequency f, QString const& mode, QString con , qint32 rx_df, qint32 tx_df, QString const& de_call , QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode - , bool fast_mode, quint8 special_op_mode) + , bool fast_mode, quint8 special_op_mode + , QString const& configuration_name) { if (m_->server_port_ && !m_->server_string_.isEmpty ()) { @@ -453,8 +466,8 @@ void MessageClient::status_update (Frequency f, QString const& mode, QString con out << f << mode.toUtf8 () << dx_call.toUtf8 () << report.toUtf8 () << tx_mode.toUtf8 () << tx_enabled << transmitting << decoding << rx_df << tx_df << de_call.toUtf8 () << de_grid.toUtf8 () << dx_grid.toUtf8 () << watchdog_timeout << sub_mode.toUtf8 () - << fast_mode << special_op_mode; - TRACE_UDP ("frequency:" << f << "mode:" << mode << "DX:" << dx_call << "report:" << report << "Tx mode:" << tx_mode << "tx_enabled:" << tx_enabled << "Tx:" << transmitting << "decoding:" << decoding << "Rx df:" << rx_df << "Tx df:" << tx_df << "DE:" << de_call << "DE grid:" << de_grid << "DX grid:" << dx_grid << "w/d t/o:" << watchdog_timeout << "sub_mode:" << sub_mode << "fast mode:" << fast_mode << "spec op mode:" << special_op_mode); + << fast_mode << special_op_mode << configuration_name.toUtf8 (); + TRACE_UDP ("frequency:" << f << "mode:" << mode << "DX:" << dx_call << "report:" << report << "Tx mode:" << tx_mode << "tx_enabled:" << tx_enabled << "Tx:" << transmitting << "decoding:" << decoding << "Rx df:" << rx_df << "Tx df:" << tx_df << "DE:" << de_call << "DE grid:" << de_grid << "DX grid:" << dx_grid << "w/d t/o:" << watchdog_timeout << "sub_mode:" << sub_mode << "fast mode:" << fast_mode << "spec op mode:" << special_op_mode << "configuration name:" << configuration_name); m_->send_message (out, message); } } diff --git a/MessageClient.hpp b/MessageClient.hpp index ca5f02037..2396a6ad0 100644 --- a/MessageClient.hpp +++ b/MessageClient.hpp @@ -52,7 +52,7 @@ public: , QString const& tx_mode, bool tx_enabled, bool transmitting, bool decoding , qint32 rx_df, qint32 tx_df, QString const& de_call, QString const& de_grid , QString const& dx_grid, bool watchdog_timeout, QString const& sub_mode - , bool fast_mode, quint8 special_op_mode); + , bool fast_mode, quint8 special_op_mode, QString const& configuration_name); Q_SLOT void decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency , QString const& mode, QString const& message, bool low_confidence , bool off_air); @@ -105,6 +105,10 @@ public: // callsign request for the specified call Q_SIGNAL void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only); + // this signal is emitted if the server has requested a switch to a + // new configuration + Q_SIGNAL void switch_configuration (QString const& configuration_name); + // this signal is emitted when network errors occur or if a host // lookup fails Q_SIGNAL void error (QString const&) const; diff --git a/MessageServer.cpp b/MessageServer.cpp index dadf3d984..02d23e460 100644 --- a/MessageServer.cpp +++ b/MessageServer.cpp @@ -247,9 +247,10 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s QByteArray sub_mode; bool fast_mode {false}; quint8 special_op_mode {0}; + QByteArray configuration_name; in >> f >> mode >> dx_call >> report >> tx_mode >> tx_enabled >> transmitting >> decoding >> rx_df >> tx_df >> de_call >> de_grid >> dx_grid >> watchdog_timeout >> sub_mode - >> fast_mode >> special_op_mode; + >> fast_mode >> special_op_mode >> configuration_name; if (check_status (in) != Fail) { Q_EMIT self_->status_update (id, f, QString::fromUtf8 (mode), QString::fromUtf8 (dx_call) @@ -258,7 +259,7 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s , QString::fromUtf8 (de_call), QString::fromUtf8 (de_grid) , QString::fromUtf8 (dx_grid), watchdog_timeout , QString::fromUtf8 (sub_mode), fast_mode - , special_op_mode); + , special_op_mode, QString::fromUtf8 (configuration_name)); } } break; @@ -541,3 +542,15 @@ void MessageServer::highlight_callsign (QString const& id, QString const& callsi m_->send_message (out, message, iter.value ().sender_address_, (*iter).sender_port_); } } + +void MessageServer::switch_configuration (QString const& id, QString const& configuration_name) +{ + auto iter = m_->clients_.find (id); + if (iter != std::end (m_->clients_)) + { + QByteArray message; + NetworkMessage::Builder out {&message, NetworkMessage::SwitchConfiguration, id, (*iter).negotiated_schema_number_}; + out << configuration_name.toUtf8 (); + m_->send_message (out, message, iter.value ().sender_address_, (*iter).sender_port_); + } +} diff --git a/MessageServer.hpp b/MessageServer.hpp index 12377bef9..2764889cf 100644 --- a/MessageServer.hpp +++ b/MessageServer.hpp @@ -72,6 +72,9 @@ public: , QColor const& bg = QColor {}, QColor const& fg = QColor {} , bool last_only = false); + // ask the client with identification 'id' to switch configuration + Q_SLOT void switch_configuration (QString const& id, QString const& configuration_name); + // the following signals are emitted when a client broadcasts the // matching message Q_SIGNAL void client_opened (QString const& id, QString const& version, QString const& revision); @@ -80,7 +83,7 @@ public: , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode, bool fast_mode - , quint8 special_op_mode); + , quint8 special_op_mode, QString const& configuration_name); Q_SIGNAL void client_closed (QString const& id); Q_SIGNAL void decode (bool is_new, QString const& id, QTime time, qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode, QString const& message diff --git a/MultiSettings.cpp b/MultiSettings.cpp index c0db0ed67..29c686d3d 100644 --- a/MultiSettings.cpp +++ b/MultiSettings.cpp @@ -159,13 +159,16 @@ public: bool exit (); QSettings settings_; + QString current_; + + // switch to this configuration + void select_configuration (QString const& target_name); private: using Dictionary = QMap; // create a configuration maintenance sub menu - QMenu * create_sub_menu (QMainWindow * main_window, - QMenu * parent, + QMenu * create_sub_menu (QMenu * parent, QString const& menu_title, QActionGroup * = nullptr); @@ -175,32 +178,32 @@ private: // write the settings values from the dictionary to the current group void load_from (Dictionary const&, bool add_placeholder = true); - // switch to this configuration - void select_configuration (QMainWindow *, QMenu const *); - // clone this configuration - void clone_configuration (QMainWindow * main_window, QMenu *, QMenu const *); + void clone_configuration (QMenu *, QMenu const *); // update this configuration from another - void clone_into_configuration (QMainWindow *, QMenu const *); + void clone_into_configuration (QMenu const *); // reset configuration to default values - void reset_configuration (QMainWindow *, QMenu const *); + void reset_configuration (QMenu const *); // change configuration name - void rename_configuration (QMainWindow *, QMenu *); + void rename_configuration (QMenu *); // remove a configuration - void delete_configuration (QMainWindow *, QMenu *); + void delete_configuration (QMenu *); + + // action to take on restart + enum class RepositionType {unchanged, replace, save_and_replace}; + void restart (RepositionType); MultiSettings const * parent_; // required for emitting signals + QMainWindow * main_window_; bool name_change_emit_pending_; // delayed until menu built QFont original_font_; - QString current_; - // action to take on restart - enum class RepositionType {unchanged, replace, save_and_replace} reposition_type_; + RepositionType reposition_type_; Dictionary new_settings_; bool exit_flag_; // false means loop around with new // configuration @@ -267,6 +270,16 @@ void MultiSettings::create_menu_actions (QMainWindow * main_window, QMenu * menu m_->create_menu_actions (main_window, menu); } +void MultiSettings::select_configuration (QString const& name) +{ + m_->select_configuration (name); +} + +QString MultiSettings::configuration_name () const +{ + return m_->current_; +} + bool MultiSettings::exit () { return m_->exit (); @@ -275,6 +288,7 @@ bool MultiSettings::exit () MultiSettings::impl::impl (MultiSettings const * parent, QString const& config_name) : settings_ {settings_path (), QSettings::IniFormat} , parent_ {parent} + , main_window_ {nullptr} , name_change_emit_pending_ {true} , reposition_type_ {RepositionType::unchanged} , exit_flag_ {true} @@ -411,13 +425,14 @@ bool MultiSettings::impl::reposition () // and, reset void MultiSettings::impl::create_menu_actions (QMainWindow * main_window, QMenu * menu) { + main_window_ = main_window; auto const& current_group = settings_.group (); if (current_group.size ()) settings_.endGroup (); SettingsGroup alternatives {&settings_, multi_settings_root_group}; // get the current configuration name auto const& current_configuration_name = settings_.value (multi_settings_current_name_key, tr (default_string)).toString (); // add the default configuration sub menu - QMenu * default_menu = create_sub_menu (main_window, menu, current_configuration_name, configurations_group_); + QMenu * default_menu = create_sub_menu (menu, current_configuration_name, configurations_group_); // and set as the current configuration default_menu->menuAction ()->setChecked (true); @@ -427,7 +442,7 @@ void MultiSettings::impl::create_menu_actions (QMainWindow * main_window, QMenu // add all the other configurations for (auto const& configuration_name: available_configurations) { - create_sub_menu (main_window, menu, configuration_name, configurations_group_); + create_sub_menu (menu, configuration_name, configurations_group_); } if (current_group.size ()) settings_.beginGroup (current_group); @@ -450,8 +465,7 @@ bool MultiSettings::impl::exit () return reposition (); } -QMenu * MultiSettings::impl::create_sub_menu (QMainWindow * main_window, - QMenu * parent_menu, +QMenu * MultiSettings::impl::create_sub_menu (QMenu * parent_menu, QString const& menu_title, QActionGroup * action_group) { @@ -460,7 +474,7 @@ QMenu * MultiSettings::impl::create_sub_menu (QMainWindow * main_window, sub_menu->menuAction ()->setCheckable (true); // populate sub-menu actions before showing - connect (sub_menu, &QMenu::aboutToShow, [this, main_window, parent_menu, sub_menu] () { + connect (sub_menu, &QMenu::aboutToShow, [this, parent_menu, sub_menu] () { // depopulate before populating and showing because on Mac OS X // there is an issue with depopulating in QMenu::aboutToHide() // with connections being disconnected before they are actioned @@ -474,16 +488,16 @@ QMenu * MultiSettings::impl::create_sub_menu (QMainWindow * main_window, { auto select_action = new QAction {tr ("&Switch To"), this}; sub_menu->addAction (select_action); - connect (select_action, &QAction::triggered, [this, main_window, sub_menu] (bool) { - select_configuration (main_window, sub_menu); + connect (select_action, &QAction::triggered, [this, sub_menu] (bool) { + select_configuration (sub_menu->title ()); }); sub_menu->addSeparator (); } auto clone_action = new QAction {tr ("&Clone"), this}; sub_menu->addAction (clone_action); - connect (clone_action, &QAction::triggered, [this, main_window, parent_menu, sub_menu] (bool) { - clone_configuration (main_window, parent_menu, sub_menu); + connect (clone_action, &QAction::triggered, [this, parent_menu, sub_menu] (bool) { + clone_configuration (parent_menu, sub_menu); }); auto const& current_group = settings_.group (); @@ -493,29 +507,29 @@ QMenu * MultiSettings::impl::create_sub_menu (QMainWindow * main_window, { auto clone_into_action = new QAction {tr ("Clone &Into ..."), this}; sub_menu->addAction (clone_into_action); - connect (clone_into_action, &QAction::triggered, [this, main_window, sub_menu] (bool) { - clone_into_configuration (main_window, sub_menu); + connect (clone_into_action, &QAction::triggered, [this, sub_menu] (bool) { + clone_into_configuration (sub_menu); }); } if (current_group.size ()) settings_.beginGroup (current_group); auto reset_action = new QAction {tr ("R&eset"), this}; sub_menu->addAction (reset_action); - connect (reset_action, &QAction::triggered, [this, main_window, sub_menu] (bool) { - reset_configuration (main_window, sub_menu); + connect (reset_action, &QAction::triggered, [this, sub_menu] (bool) { + reset_configuration (sub_menu); }); auto rename_action = new QAction {tr ("&Rename ..."), this}; sub_menu->addAction (rename_action); - connect (rename_action, &QAction::triggered, [this, main_window, sub_menu] (bool) { - rename_configuration (main_window, sub_menu); + connect (rename_action, &QAction::triggered, [this, sub_menu] (bool) { + rename_configuration (sub_menu); }); if (!is_current) { auto delete_action = new QAction {tr ("&Delete"), this}; sub_menu->addAction (delete_action); - connect (delete_action, &QAction::triggered, [this, main_window, sub_menu] (bool) { - delete_configuration (main_window, sub_menu); + connect (delete_action, &QAction::triggered, [this, sub_menu] (bool) { + delete_configuration (sub_menu); }); } }); @@ -558,11 +572,9 @@ void MultiSettings::impl::load_from (Dictionary const& dictionary, bool add_plac settings_.sync (); } -void MultiSettings::impl::select_configuration (QMainWindow * main_window, QMenu const * menu) +void MultiSettings::impl::select_configuration (QString const& target_name) { - auto const& target_name = menu->title (); - - if (target_name != current_) + if (main_window_ && target_name != current_) { { auto const& current_group = settings_.group (); @@ -577,13 +589,11 @@ void MultiSettings::impl::select_configuration (QMainWindow * main_window, QMenu // and set up the restart current_ = target_name; Q_EMIT parent_->configurationNameChanged (unescape_ampersands (current_)); - reposition_type_ = RepositionType::save_and_replace; - exit_flag_ = false; - main_window->close (); + restart (RepositionType::save_and_replace); } } -void MultiSettings::impl::clone_configuration (QMainWindow * main_window, QMenu * parent_menu, QMenu const * menu) +void MultiSettings::impl::clone_configuration (QMenu * parent_menu, QMenu const * menu) { auto const& current_group = settings_.group (); if (current_group.size ()) settings_.endGroup (); @@ -616,12 +626,15 @@ void MultiSettings::impl::clone_configuration (QMainWindow * main_window, QMenu load_from (source_settings); // insert the new configuration sub menu in the parent menu - create_sub_menu (main_window, parent_menu, new_name, configurations_group_); + create_sub_menu (parent_menu, new_name, configurations_group_); if (current_group.size ()) settings_.beginGroup (current_group); } -void MultiSettings::impl::clone_into_configuration (QMainWindow * main_window, QMenu const * menu) +void MultiSettings::impl::clone_into_configuration (QMenu const * menu) { + Q_ASSERT (main_window_); + if (!main_window_) return; + auto const& current_group = settings_.group (); if (current_group.size ()) settings_.endGroup (); auto const& target_name = menu->title (); @@ -642,15 +655,16 @@ void MultiSettings::impl::clone_into_configuration (QMainWindow * main_window, Q } // pick a source configuration - ExistingNameDialog dialog {sources, main_window}; + ExistingNameDialog dialog {sources, main_window_}; if (sources.size () && (1 == sources.size () || QDialog::Accepted == dialog.exec ())) { QString source_name {1 == sources.size () ? sources.at (0) : dialog.name ()}; - if (MessageBox::Yes == MessageBox::query_message (main_window, - tr ("Clone Into Configuration"), - tr ("Confirm overwrite of all values for configuration \"%1\" with values from \"%2\"?") - .arg (unescape_ampersands (target_name)) - .arg (unescape_ampersands (source_name)))) + if (main_window_ + && MessageBox::Yes == MessageBox::query_message (main_window_, + tr ("Clone Into Configuration"), + tr ("Confirm overwrite of all values for configuration \"%1\" with values from \"%2\"?") + .arg (unescape_ampersands (target_name)) + .arg (unescape_ampersands (source_name)))) { // grab the data to clone from if (source_name == current_group_name) @@ -669,9 +683,7 @@ void MultiSettings::impl::clone_into_configuration (QMainWindow * main_window, Q if (target_name == current_) { // restart with new settings - reposition_type_ = RepositionType::replace; - exit_flag_ = false; - main_window->close (); + restart (RepositionType::replace); } else { @@ -686,14 +698,18 @@ void MultiSettings::impl::clone_into_configuration (QMainWindow * main_window, Q if (current_group.size ()) settings_.beginGroup (current_group); } -void MultiSettings::impl::reset_configuration (QMainWindow * main_window, QMenu const * menu) +void MultiSettings::impl::reset_configuration (QMenu const * menu) { + Q_ASSERT (main_window_); + if (!main_window_) return; + auto const& target_name = menu->title (); - if (MessageBox::Yes != MessageBox::query_message (main_window, - tr ("Reset Configuration"), - tr ("Confirm reset to default values for configuration \"%1\"?") - .arg (unescape_ampersands (target_name)))) + if (!main_window_ + || MessageBox::Yes != MessageBox::query_message (main_window_, + tr ("Reset Configuration"), + tr ("Confirm reset to default values for configuration \"%1\"?") + .arg (unescape_ampersands (target_name)))) { return; } @@ -701,10 +717,8 @@ void MultiSettings::impl::reset_configuration (QMainWindow * main_window, QMenu if (target_name == current_) { // restart with default settings - reposition_type_ = RepositionType::replace; new_settings_.clear (); - exit_flag_ = false; - main_window->close (); + restart (RepositionType::replace); } else { @@ -721,8 +735,11 @@ void MultiSettings::impl::reset_configuration (QMainWindow * main_window, QMenu } } -void MultiSettings::impl::rename_configuration (QMainWindow * main_window, QMenu * menu) +void MultiSettings::impl::rename_configuration (QMenu * menu) { + Q_ASSERT (main_window_); + if (!main_window_) return; + auto const& current_group = settings_.group (); if (current_group.size ()) settings_.endGroup (); auto const& target_name = menu->title (); @@ -733,7 +750,7 @@ void MultiSettings::impl::rename_configuration (QMainWindow * main_window, QMenu invalid_names << settings_.value (multi_settings_current_name_key).toString (); // get the new name - NameDialog dialog {target_name, invalid_names, main_window}; + NameDialog dialog {target_name, invalid_names, main_window_}; if (QDialog::Accepted == dialog.exec ()) { if (target_name == current_) @@ -764,8 +781,9 @@ void MultiSettings::impl::rename_configuration (QMainWindow * main_window, QMenu if (current_group.size ()) settings_.beginGroup (current_group); } -void MultiSettings::impl::delete_configuration (QMainWindow * main_window, QMenu * menu) +void MultiSettings::impl::delete_configuration (QMenu * menu) { + Q_ASSERT (main_window_); auto const& target_name = menu->title (); if (target_name == current_) @@ -774,10 +792,11 @@ void MultiSettings::impl::delete_configuration (QMainWindow * main_window, QMenu } else { - if (MessageBox::Yes != MessageBox::query_message (main_window, - tr ("Delete Configuration"), - tr ("Confirm deletion of configuration \"%1\"?") - .arg (unescape_ampersands (target_name)))) + if (!main_window_ + || MessageBox::Yes != MessageBox::query_message (main_window_, + tr ("Delete Configuration"), + tr ("Confirm deletion of configuration \"%1\"?") + .arg (unescape_ampersands (target_name)))) { return; } @@ -793,3 +812,12 @@ void MultiSettings::impl::delete_configuration (QMainWindow * main_window, QMenu // update the menu menu->deleteLater (); } + +void MultiSettings::impl::restart (RepositionType type) +{ + Q_ASSERT (main_window_); + reposition_type_ = type; + exit_flag_ = false; + main_window_->close (); + main_window_ = nullptr; +} diff --git a/MultiSettings.hpp b/MultiSettings.hpp index 051553b48..5e0c9a679 100644 --- a/MultiSettings.hpp +++ b/MultiSettings.hpp @@ -80,6 +80,10 @@ public: // action is triggered. void create_menu_actions (QMainWindow *, QMenu *); + // switch to this configuration if it exists + Q_SLOT void select_configuration (QString const& name); + QString configuration_name () const; + // Access to the QSettings object instance. QSettings * settings (); diff --git a/NetworkMessage.hpp b/NetworkMessage.hpp index 4783bb369..be85d63ee 100644 --- a/NetworkMessage.hpp +++ b/NetworkMessage.hpp @@ -124,7 +124,8 @@ * Tx Watchdog bool * Sub-mode utf8 * Fast mode bool - * Special operation mode quint8 + * Special Operation Mode quint8 + * Configuration Name utf8 * * WSJT-X sends this status message when various internal state * changes to allow the server to track the relevant state of each @@ -145,7 +146,8 @@ * When the Tx DF changes, * When settings are exited, * When the DX call or grid changes, - * When the Tx watchdog is set or reset. + * When the Tx watchdog is set or reset, + * When the configuration name changes. * * The Special operation mode is an enumeration that indicates the * setting selected in the WSJT-X "Settings->Advanced->Special @@ -414,6 +416,15 @@ * the last instance only instead of all instances of the * specified call be highlighted or have it's highlighting * cleared. + * + * + * Switch Configuration In 14 quint32 + * Id (unique key) utf8 + * Configuration Name utf8 + * + * The server may send this message at any time. The message + * specifies the name of the configuration to switch to. The new + * configuration must exist. */ #include @@ -443,6 +454,7 @@ namespace NetworkMessage Location, LoggedADIF, HighlightCallsign, + SwitchConfiguration, maximum_message_type_ // ONLY add new message types // immediately before here }; diff --git a/UDPExamples/ClientWidget.cpp b/UDPExamples/ClientWidget.cpp index 1715670bf..7d1601938 100644 --- a/UDPExamples/ClientWidget.cpp +++ b/UDPExamples/ClientWidget.cpp @@ -139,6 +139,7 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod , rx_df_label_ {new QLabel} , tx_df_label_ {new QLabel} , report_label_ {new QLabel} + , configuration_line_edit_ {new QLineEdit} , columns_resized_ {false} { // set up widgets @@ -155,6 +156,7 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod auto form_layout = new QFormLayout; form_layout->addRow (tr ("Free text:"), message_line_edit_); form_layout->addRow (tr ("Temporary grid:"), grid_line_edit_); + form_layout->addRow (tr ("Configuration name:"), configuration_line_edit_); message_line_edit_->setValidator (new QRegExpValidator {message_alphabet, this}); grid_line_edit_->setValidator (new MaidenheadLocatorValidator {this}); connect (message_line_edit_, &QLineEdit::textEdited, [this] (QString const& text) { @@ -166,6 +168,9 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod connect (grid_line_edit_, &QLineEdit::editingFinished, [this] () { Q_EMIT location (id_, grid_line_edit_->text ()); }); + connect (configuration_line_edit_, &QLineEdit::editingFinished, [this] () { + Q_EMIT switch_configuration (id_, configuration_line_edit_->text ()); + }); auto decodes_page = new QWidget; auto decodes_layout = new QVBoxLayout {decodes_page}; @@ -266,7 +271,7 @@ void ClientWidget::update_status (QString const& id, Frequency f, QString const& , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode, bool fast_mode - , quint8 special_op_mode) + , quint8 special_op_mode, QString const& configuration_name) { if (id == id_) { @@ -304,6 +309,10 @@ void ClientWidget::update_status (QString const& id, Frequency f, QString const& halt_tx_button_->setEnabled (transmitting); update_dynamic_property (mode_label_, "decoding", decoding); update_dynamic_property (tx_df_label_, "watchdog_timeout", watchdog_timeout); + if (!configuration_line_edit_->hasFocus ()) + { + configuration_line_edit_->setText (configuration_name); + } } } diff --git a/UDPExamples/ClientWidget.hpp b/UDPExamples/ClientWidget.hpp index 22488531c..9aa8d35a0 100644 --- a/UDPExamples/ClientWidget.hpp +++ b/UDPExamples/ClientWidget.hpp @@ -34,7 +34,7 @@ public: , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode, bool fast_mode - , quint8 special_op_mode); + , quint8 special_op_mode, QString const& configuration_name); Q_SLOT void decode_added (bool is_new, QString const& client_id, QTime, qint32 snr , float delta_time, quint32 delta_frequency, QString const& mode , QString const& message, bool low_confidence, bool off_air); @@ -52,8 +52,10 @@ public: Q_SIGNAL void highlight_callsign (QString const& id, QString const& call , QColor const& bg = QColor {}, QColor const& fg = QColor {} , bool last_only = false); + Q_SIGNAL void switch_configuration (QString const& id, QString const& configuration_name); private: + QString id_; QListWidget const * calls_of_interest_; class IdFilterModel final @@ -94,6 +96,7 @@ private: QLabel * rx_df_label_; QLabel * tx_df_label_; QLabel * report_label_; + QLineEdit * configuration_line_edit_; bool columns_resized_; }; diff --git a/UDPExamples/MessageAggregatorMainWindow.cpp b/UDPExamples/MessageAggregatorMainWindow.cpp index e6937e6cb..34c674f2c 100644 --- a/UDPExamples/MessageAggregatorMainWindow.cpp +++ b/UDPExamples/MessageAggregatorMainWindow.cpp @@ -256,6 +256,7 @@ void MessageAggregatorMainWindow::add_client (QString const& id, QString const& connect (dock, &ClientWidget::location, server_, &MessageServer::location); connect (view_action, &QAction::toggled, dock, &ClientWidget::setVisible); connect (dock, &ClientWidget::highlight_callsign, server_, &MessageServer::highlight_callsign); + connect (dock, &ClientWidget::switch_configuration, server_, &MessageServer::switch_configuration); dock_widgets_[id] = dock; server_->replay (id); // request decodes and status } diff --git a/UDPExamples/UDPDaemon.cpp b/UDPExamples/UDPDaemon.cpp index 0ee202dc7..98ff49e6e 100644 --- a/UDPExamples/UDPDaemon.cpp +++ b/UDPExamples/UDPDaemon.cpp @@ -51,7 +51,7 @@ public: , bool /*transmitting*/, bool /*decoding*/, qint32 /*rx_df*/, qint32 /*tx_df*/ , QString const& /*de_call*/, QString const& /*de_grid*/, QString const& /*dx_grid*/ , bool /* watchdog_timeout */, QString const& sub_mode, bool /*fast_mode*/ - , quint8 /*special_op_mode*/) + , quint8 /*special_op_mode*/, QString const& /*configuration_name*/) { if (id == id_) { diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0d6d63e74..529dab19d 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -560,6 +560,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, connect (m_messageClient, &MessageClient::highlight_callsign, ui->decodedTextBrowser, &DisplayText::highlight_callsign); + connect (m_messageClient, &MessageClient::switch_configuration, m_multi_settings, &MultiSettings::select_configuration); + // Hook up WSPR band hopping connect (ui->band_hopping_schedule_push_button, &QPushButton::clicked , &m_WSPR_band_hopping, &WSPRBandHopping::show_dialog); @@ -719,6 +721,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, else { config_label.hide (); } + statusUpdate (); }); m_multi_settings->create_menu_actions (this, ui->menuConfig); m_configurations_button = m_rigErrorMessageBox.addButton (tr ("Configurations...") @@ -7908,7 +7911,8 @@ void MainWindow::statusUpdate () const m_config.my_callsign (), m_config.my_grid (), m_hisGrid, m_tx_watchdog, submode != QChar::Null ? QString {submode} : QString {}, m_bFastMode, - static_cast (m_config.special_op_id ())); + static_cast (m_config.special_op_id ()), + m_multi_settings->configuration_name ()); } void MainWindow::childEvent (QChildEvent * e) From 7bd15246aed3c288c823a4fae1517cc557b37abb Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 13 Jun 2019 11:07:29 -0400 Subject: [PATCH 345/367] Adjustments to utility program rtty_spec.f90 --- lib/rtty_spec.f90 | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/rtty_spec.f90 b/lib/rtty_spec.f90 index 704e5ce53..2ddc802f1 100644 --- a/lib/rtty_spec.f90 +++ b/lib/rtty_spec.f90 @@ -53,7 +53,21 @@ program rtty_spec dat(i)=dat(i) + sig*sin(phi) enddo -! Add the FT8 signal +! FT8 signal (FSK) + i3=0 + n3=0 + msg37='WB9XYZ KA2ABC FN42' + call genft8(msg37,i3,n3,msgsent37,msgbits,itone) + nsym=79 + nsps=1920 + bt=99.0 + f0=3500.0 + icmplx=0 + nwave=nsym*nsps + call gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) + dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave) + +! FT8 signal (GFSK) i3=0 n3=0 msg37='WB9XYZ KA2ABC FN42' @@ -61,7 +75,7 @@ program rtty_spec nsym=79 nsps=1920 bt=2.0 - f0=3000.0 + f0=4000.0 icmplx=0 nwave=nsym*nsps call gen_ft8wave(itone,nsym,nsps,bt,fsample,f0,cwave,wave,icmplx,nwave) @@ -72,13 +86,15 @@ program rtty_spec call genft4(msg37,ichk,msgsent37,msgbits,itone) nsym=103 nsps=576 - f0=3500.0 + f0=4500.0 icmplx=0 nwave=(nsym+2)*nsps call gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave) + h=default_header(12000,NMAX) - iwave=nint(rms*dat) + datmax=maxval(abs(dat)) + iwave=nint(32767.0*dat/datmax) open(10,file='000000_000001.wav',access='stream',status='unknown') write(10) h,iwave close(10) From 7e9cc9cbc7c0283591ef6ee688f6b06e4c7fd191 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 14 Jun 2019 16:28:59 -0500 Subject: [PATCH 346/367] FT4: Improve sync performance on disturbed channels. Make jt9 command-line option -d work --- lib/ft4/sync4d.f90 | 10 ++++++---- lib/ft4_decode.f90 | 7 +++---- lib/jt9.f90 | 1 - 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index 28cb10b99..810412253 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -9,7 +9,6 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) complex csync2(2*NSS) complex ctwk(2*NSS) complex z1,z2,z3,z4 - complex zz1,zz2,zz3,zz4 logical first integer icos4a(0:3),icos4b(0:3),icos4c(0:3),icos4d(0:3) data icos4a/0,1,3,2/ @@ -19,7 +18,7 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) data first/.true./ save first,twopi,csynca,csyncb,csyncc,csyncd,fac - p(z1)=real(z1*fac)**2 + aimag(z1*fac)**2 !Statement function for power + p(z1)=sqrt(real(z1*fac)**2 + aimag(z1*fac)**2) !Statement function for power if( first ) then twopi=8.0*atan(1.0) @@ -60,11 +59,12 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) z4=0. if(itwk.eq.1) csync2=ctwk*csynca !Tweak the frequency + z1=0. if(i1.ge.0 .and. i1+4*NSS-1.le.NP-1) then z1=sum(cd0(i1:i1+4*NSS-1:2)*conjg(csync2)) elseif( i1.lt.0 ) then npts=(i1+4*NSS-1)/2 - if(npts.le.8) then + if(npts.le.16) then z1=0. else z1=sum(cd0(0:i1+4*NSS-1:2)*conjg(csync2(2*NSS-npts:))) @@ -78,16 +78,18 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) if(i3.ge.0 .and. i3+4*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+4*NSS-1:2)*conjg(csync2)) if(itwk.eq.1) csync2=ctwk*csyncd !Tweak the frequency + z4=0. if(i4.ge.0 .and. i4+4*NSS-1.le.NP-1) then z4=sum(cd0(i4:i4+4*NSS-1:2)*conjg(csync2)) elseif( i4+4*NSS-1.gt.NP-1 ) then npts=(NP-1-i4+1)/2 - if(npts.le.8) then + if(npts.le.16) then z4=0. else z4=sum(cd0(i4:i4+2*npts-1:2)*conjg(csync2(1:npts))) endif endif + sync = p(z1) + p(z2) + p(z3) + p(z4) return diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 28c044c77..0c1a4026f 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -285,12 +285,10 @@ contains else cd(-ibest:ibest+NN*NSS-1)=cb(0:NN*NSS+2*ibest-1) endif - call timer('bitmet ',0) call get_ft4_bitmetrics(cd,bitmetrics,badsync) call timer('bitmet ',1) if(badsync) cycle - hbits=0 where(bitmetrics(:,1).ge.0) hbits=1 ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) @@ -405,7 +403,7 @@ contains if(doosd .and. nharderror.lt.0) then ndeep=3 - if(abs(nfqso-f1).le.napwid) then + if(abs(nfqso-f0).le.napwid) then ndeep=4 endif call timer('osd174_91 ',0) @@ -439,7 +437,8 @@ contains endif nsnr=nint(max(-21.0,xsnr)) xdt=ibest/666.67 - 0.5 -!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3,f5.1)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp,dmin +!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3,f5.1,i4,i4)') & +! nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp,dmin,nsync_qual,nharderror call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit endif diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 0e99a7592..2e8dbd0f0 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -179,7 +179,6 @@ program jt9 go to 999 endif - if(mode.eq.5) ndepth=3 allocate(shared_data) nflatten=0 From c26d0b4f29ac84fb05ce1f856459144b5ff66a1e Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Sun, 16 Jun 2019 09:46:33 -0500 Subject: [PATCH 347/367] FT4: Imrovements to sync. Divide DT search range into 3 segments. Search central segment (near DT=0) first and try to decode the largest peak. Then find the largest peak in each of the surrounding segments and try to decode those only if the peak is larger than the one found in the central segment. Also re-indent ft4_decode.f90 and some other minor tweaks. --- lib/ft4/getcandidates4.f90 | 5 +- lib/ft4/sync4d.f90 | 2 +- lib/ft4_decode.f90 | 406 +++++++++++++++++++------------------ 3 files changed, 214 insertions(+), 199 deletions(-) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 951129915..09c2f135d 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -8,7 +8,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & real x(NFFT1) real window(NFFT1) complex cx(0:NH1) - real candidate(3,maxcand) + real candidate(2,maxcand) real dd(NMAX) integer ipk(1) equivalence (x,cx) @@ -64,8 +64,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del ncand=ncand+1 candidate(1,ncand)=fpeak - candidate(2,ncand)=-99.99 - candidate(3,ncand)=speak + candidate(2,ncand)=speak if(ncand.eq.maxcand) exit endif enddo diff --git a/lib/ft4/sync4d.f90 b/lib/ft4/sync4d.f90 index 810412253..8d78f66aa 100644 --- a/lib/ft4/sync4d.f90 +++ b/lib/ft4/sync4d.f90 @@ -18,7 +18,7 @@ subroutine sync4d(cd0,i0,ctwk,itwk,sync) data first/.true./ save first,twopi,csynca,csyncb,csyncc,csyncd,fac - p(z1)=sqrt(real(z1*fac)**2 + aimag(z1*fac)**2) !Statement function for power + p(z1)=(real(z1*fac)**2 + aimag(z1*fac)**2)**0.5 !Statement function for power if( first ) then twopi=8.0*atan(1.0) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 0c1a4026f..0ec43dd99 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -50,7 +50,7 @@ contains real bitmetrics(2*NN,3) real dd(NMAX) real llr(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND),llrd(2*ND) - real candidate(3,100) + real candidate(2,100) real savg(NH1),sbase(NH1) integer apbits(2*ND) @@ -194,7 +194,7 @@ contains dd=iwave ! ndepth=3: 3 passes, bp+osd -! ndepth=2: 3 passes, bp only +! ndepth=2: 3 passes, bp only ! ndepth=1: 1 pass, no subtraction max_iterations=40 @@ -203,23 +203,23 @@ contains doosd=.true. nsp=3 if(ndepth.eq.2) then - doosd=.false. + doosd=.false. endif - if(ndepth.eq.1) then - nsp=1 - dosubtract=.false. - doosd=.false. + if(ndepth.eq.1) then + nsp=1 + dosubtract=.false. + doosd=.false. endif - + do isp = 1,nsp if(isp.eq.2) then - if(ndecodes.eq.0) exit - nd1=ndecodes + if(ndecodes.eq.0) exit + nd1=ndecodes elseif(isp.eq.3) then - nd2=ndecodes-nd1 - if(nd2.eq.0) exit + nd2=ndecodes-nd1 + if(nd2.eq.0) exit endif - + candidate=0.0 ncand=0 call timer('getcand4',0) @@ -229,7 +229,7 @@ contains dobigfft=.true. do icand=1,ncand f0=candidate(1,icand) - snr=candidate(3,icand)-1.0 + snr=candidate(2,icand)-1.0 call timer('ft4_down',0) call ft4_downsample(dd,dobigfft,f0,cd2) !Downsample to 32 Sam/Sym call timer('ft4_down',1) @@ -237,99 +237,113 @@ contains sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) ! Sample rate is now 12000/18 = 666.67 samples/second - do isync=1,2 - if(isync.eq.1) then - idfmin=-12 - idfmax=12 - idfstp=3 - ibmin=-344 - ibmax=1012 - ibstp=4 - else - idfmin=idfbest-4 - idfmax=idfbest+4 - idfstp=1 - ibmin=ibest-5 - ibmax=ibest+5 - ibstp=1 - endif - ibest=-1 - smax=-99. - idfbest=0 - call timer('sync4d ',0) - do idf=idfmin,idfmax,idfstp - do istart=ibmin,ibmax,ibstp - call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power - if(sync.gt.smax) then - smax=sync - ibest=istart - idfbest=idf + do iseg=1,3 ! DT search is done over 3 segments + do isync=1,2 + if(isync.eq.1) then + idfmin=-12 + idfmax=12 + idfstp=3 + ibmin=-344 + ibmax=1012 + if(iseg.eq.1) then + ibmin=108 + ibmax=560 + elseif(iseg.eq.2) then + smax1=smax + ibmin=560 + ibmax=1012 + elseif(iseg.eq.3) then + ibmin=-344 + ibmax=108 endif + ibstp=4 + else + idfmin=idfbest-4 + idfmax=idfbest+4 + idfstp=1 + ibmin=ibest-5 + ibmax=ibest+5 + ibstp=1 + endif + ibest=-1 + idfbest=0 + smax=-99. + call timer('sync4d ',0) + do idf=idfmin,idfmax,idfstp + do istart=ibmin,ibmax,ibstp + call sync4d(cd2,istart,ctwk2(:,idf),1,sync) !Find sync power + if(sync.gt.smax) then + smax=sync + ibest=istart + idfbest=idf + endif + enddo enddo + call timer('sync4d ',1) enddo - call timer('sync4d ',1) - enddo - if(smax.lt.0.7) cycle - f0=f0+real(idfbest) - if( f0.le.10.0 .or. f0.ge.4990.0 ) cycle - call timer('ft4down ',0) - call ft4_downsample(dd,dobigfft,f0,cb) !Final downsample, corrected f0 - call timer('ft4down ',1) - sum2=sum(abs(cb)**2)/(real(NSS)*NN) - if(sum2.gt.0.0) cb=cb/sqrt(sum2) - cd=0. - if(ibest.ge.0) then - it=min(NDMAX-1,ibest+NN*NSS-1) - np=it-ibest+1 - cd(0:np-1)=cb(ibest:it) - else - cd(-ibest:ibest+NN*NSS-1)=cb(0:NN*NSS+2*ibest-1) - endif - call timer('bitmet ',0) - call get_ft4_bitmetrics(cd,bitmetrics,badsync) - call timer('bitmet ',1) - if(badsync) cycle - hbits=0 - where(bitmetrics(:,1).ge.0) hbits=1 - ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) - ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) - ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) - ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) - nsync_qual=ns1+ns2+ns3+ns4 - if(nsync_qual.lt. 20) cycle - - scalefac=2.83 - llra( 1: 58)=bitmetrics( 9: 66, 1) - llra( 59:116)=bitmetrics( 75:132, 1) - llra(117:174)=bitmetrics(141:198, 1) - llra=scalefac*llra - llrb( 1: 58)=bitmetrics( 9: 66, 2) - llrb( 59:116)=bitmetrics( 75:132, 2) - llrb(117:174)=bitmetrics(141:198, 2) - llrb=scalefac*llrb - llrc( 1: 58)=bitmetrics( 9: 66, 3) - llrc( 59:116)=bitmetrics( 75:132, 3) - llrc(117:174)=bitmetrics(141:198, 3) - llrc=scalefac*llrc - - apmag=maxval(abs(llra))*1.1 - npasses=3+nappasses(nQSOProgress) - if(lapcqonly) npasses=4 - if(ndepth.eq.1) npasses=3 - if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound - do ipass=1,npasses - if(ipass.eq.1) llr=llra - if(ipass.eq.2) llr=llrb - if(ipass.eq.3) llr=llrc - if(ipass.le.3) then - apmask=0 - iaptype=0 + if(iseg.eq.1) smax1=smax + if(smax.lt.0.7) cycle + if(iseg.gt.1 .and. smax.lt.smax1) cycle + f1=f0+real(idfbest) + if( f1.le.10.0 .or. f1.ge.4990.0 ) cycle + call timer('ft4down ',0) + call ft4_downsample(dd,dobigfft,f1,cb) !Final downsample, corrected f0 + call timer('ft4down ',1) + sum2=sum(abs(cb)**2)/(real(NSS)*NN) + if(sum2.gt.0.0) cb=cb/sqrt(sum2) + cd=0. + if(ibest.ge.0) then + it=min(NDMAX-1,ibest+NN*NSS-1) + np=it-ibest+1 + cd(0:np-1)=cb(ibest:it) + else + cd(-ibest:ibest+NN*NSS-1)=cb(0:NN*NSS+2*ibest-1) endif + call timer('bitmet ',0) + call get_ft4_bitmetrics(cd,bitmetrics,badsync) + call timer('bitmet ',1) + if(badsync) cycle + hbits=0 + where(bitmetrics(:,1).ge.0) hbits=1 + ns1=count(hbits( 1: 8).eq.(/0,0,0,1,1,0,1,1/)) + ns2=count(hbits( 67: 74).eq.(/0,1,0,0,1,1,1,0/)) + ns3=count(hbits(133:140).eq.(/1,1,1,0,0,1,0,0/)) + ns4=count(hbits(199:206).eq.(/1,0,1,1,0,0,0,1/)) + nsync_qual=ns1+ns2+ns3+ns4 + if(nsync_qual.lt. 20) cycle - if(ipass .gt. 3) then - llrd=llra - iaptype=naptypes(nQSOProgress,ipass-3) - if(lapcqonly) iaptype=1 + scalefac=2.83 + llra( 1: 58)=bitmetrics( 9: 66, 1) + llra( 59:116)=bitmetrics( 75:132, 1) + llra(117:174)=bitmetrics(141:198, 1) + llra=scalefac*llra + llrb( 1: 58)=bitmetrics( 9: 66, 2) + llrb( 59:116)=bitmetrics( 75:132, 2) + llrb(117:174)=bitmetrics(141:198, 2) + llrb=scalefac*llrb + llrc( 1: 58)=bitmetrics( 9: 66, 3) + llrc( 59:116)=bitmetrics( 75:132, 3) + llrc(117:174)=bitmetrics(141:198, 3) + llrc=scalefac*llrc + + apmag=maxval(abs(llra))*1.1 + npasses=3+nappasses(nQSOProgress) + if(lapcqonly) npasses=4 + if(ndepth.eq.1) npasses=3 + if(ncontest.ge.5) npasses=3 ! Don't support Fox and Hound + do ipass=1,npasses + if(ipass.eq.1) llr=llra + if(ipass.eq.2) llr=llrb + if(ipass.eq.3) llr=llrc + if(ipass.le.3) then + apmask=0 + iaptype=0 + endif + + if(ipass .gt. 3) then + llrd=llra + iaptype=naptypes(nQSOProgress,ipass-3) + if(lapcqonly) iaptype=1 ! ncontest=0 : NONE ! 1 : NA_VHF @@ -340,109 +354,111 @@ contains ! 6 : HOUND ! ! Conditions that cause us to bail out of AP decoding - napwid=50 - if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f0-nfqso).gt.napwid) ) cycle - if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall - if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall + napwid=50 + if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f1-nfqso).gt.napwid) ) cycle + if(iaptype.ge.2 .and. apbits(1).gt.1) cycle ! No, or nonstandard, mycall + if(iaptype.ge.3 .and. apbits(30).gt.1) cycle ! No, or nonstandard, dxcall - if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC - apmask=0 - apmask(1:29)=1 - llrd(1:29)=apmag*mcq(1:29) - endif - - if(iaptype.eq.2) then ! MyCall,???,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1) then + if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ SCC + apmask=0 apmask(1:29)=1 - llrd(1:29)=apmag*apbits(1:29) - else if(ncontest.eq.2) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.3) then - apmask(1:28)=1 - llrd(1:28)=apmag*apbits(1:28) - else if(ncontest.eq.4) then - apmask(2:29)=1 - llrd(2:29)=apmag*apmy_ru(1:28) + llrd(1:29)=apmag*mcq(1:29) endif - endif - if(iaptype.eq.3) then ! MyCall,DxCall,??? - apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then - apmask(1:58)=1 - llrd(1:58)=apmag*apbits(1:58) - else if(ncontest.eq.3) then ! Field Day - apmask(1:56)=1 - llrd(1:28)=apmag*apbits(1:28) - llrd(29:56)=apmag*aphis_fd(1:28) - else if(ncontest.eq.4) then ! RTTY RU - apmask(2:57)=1 - llrd(2:29)=apmag*apmy_ru(1:28) - llrd(30:57)=apmag*apbits(30:57) + if(iaptype.eq.2) then ! MyCall,???,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1) then + apmask(1:29)=1 + llrd(1:29)=apmag*apbits(1:29) + else if(ncontest.eq.2) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.3) then + apmask(1:28)=1 + llrd(1:28)=apmag*apbits(1:28) + else if(ncontest.eq.4) then + apmask(2:29)=1 + llrd(2:29)=apmag*apmy_ru(1:28) + endif endif - endif - if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then - apmask=0 - if(ncontest.le.4) then - apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 - if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) + if(iaptype.eq.3) then ! MyCall,DxCall,??? + apmask=0 + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then + apmask(1:58)=1 + llrd(1:58)=apmag*apbits(1:58) + else if(ncontest.eq.3) then ! Field Day + apmask(1:56)=1 + llrd(1:28)=apmag*apbits(1:28) + llrd(29:56)=apmag*aphis_fd(1:28) + else if(ncontest.eq.4) then ! RTTY RU + apmask(2:57)=1 + llrd(2:29)=apmag*apmy_ru(1:28) + llrd(30:57)=apmag*apbits(30:57) + endif endif + + if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then + apmask=0 + if(ncontest.le.4) then + apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 + if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) + endif + endif + + llr=llrd + endif + message77=0 + dmin=0.0 + call timer('bpdec174',0) + call bpdecode174_91(llr,apmask,max_iterations,message77, & + cw,nharderror,niterations) + call timer('bpdec174',1) + + if(doosd .and. nharderror.lt.0) then + ndeep=3 +! if(abs(nfqso-f1).le.napwid) then +! ndeep=4 +! endif + call timer('osd174_91 ',0) + call osd174_91(llr,apmask,ndeep,message77,cw,nharderror,dmin) + call timer('osd174_91 ',1) endif - llr=llrd - endif - message77=0 - dmin=0.0 - call timer('bpdec174',0) - call bpdecode174_91(llr,apmask,max_iterations,message77, & - cw,nharderror,niterations) - call timer('bpdec174',1) - - if(doosd .and. nharderror.lt.0) then - ndeep=3 - if(abs(nfqso-f0).le.napwid) then - ndeep=4 + if(sum(message77).eq.0) cycle + if( nharderror.ge.0 ) then + message77=mod(message77+rvec,2) ! remove rvec scrambling + write(c77,'(77i1)') message77(1:77) + call unpack77(c77,1,message,unpk77_success) + if(unpk77_success.and.dosubtract) then + call get_ft4_tones_from_77bits(message77,i4tone) + dt=real(ibest)/666.67 + call timer('subtract',0) + call subtractft4(dd,i4tone,f1,dt) + call timer('subtract',1) + endif + idupe=0 + do i=1,ndecodes + if(decodes(i).eq.message) idupe=1 + enddo + if(idupe.eq.1) exit + ndecodes=ndecodes+1 + decodes(ndecodes)=message + if(snr.gt.0.0) then + xsnr=10*log10(snr)-14.8 + else + xsnr=-21.0 + endif + nsnr=nint(max(-21.0,xsnr)) + xdt=ibest/666.67 - 0.5 +!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3,f5.1,i4,i4,i4)') & +! nutc,nsnr,xdt,nint(f1),message,smax,iaptype,ipass,isp,dmin,nsync_qual,nharderror,iseg + call this%callback(smax,nsnr,xdt,f1,message,iaptype,qual) + exit endif - call timer('osd174_91 ',0) - call osd174_91(llr,apmask,ndeep,message77,cw,nharderror,dmin) - call timer('osd174_91 ',1) - endif - - if(sum(message77).eq.0) cycle - if( nharderror.ge.0 ) then - message77=mod(message77+rvec,2) ! remove rvec scrambling - write(c77,'(77i1)') message77(1:77) - call unpack77(c77,1,message,unpk77_success) - if(unpk77_success.and.dosubtract) then - call get_ft4_tones_from_77bits(message77,i4tone) - dt=real(ibest)/666.67 - call timer('subtract',0) - call subtractft4(dd,i4tone,f0,dt) - call timer('subtract',1) - endif - idupe=0 - do i=1,ndecodes - if(decodes(i).eq.message) idupe=1 - enddo - if(idupe.eq.1) exit - ndecodes=ndecodes+1 - decodes(ndecodes)=message - if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.8 - else - xsnr=-21.0 - endif - nsnr=nint(max(-21.0,xsnr)) - xdt=ibest/666.67 - 0.5 -!write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3,f5.1,i4,i4)') & -! nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp,dmin,nsync_qual,nharderror - call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) - exit - endif - enddo !Sequence estimation + enddo !Sequence estimation + if(nharderror.ge.0) exit + enddo !3 DT segments enddo !Candidate list enddo !Subtraction loop return From 396bf1a0132dc8c2585a029c1a0cef1bb80e2636 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 17 Jun 2019 11:26:46 -0400 Subject: [PATCH 348/367] Correct a flaw in ft8sim when generating data with large abs(DT). --- lib/ft8/ft8sim.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft8/ft8sim.f90 b/lib/ft8/ft8sim.f90 index bbec600d4..c5dd82bb7 100644 --- a/lib/ft8/ft8sim.f90 +++ b/lib/ft8/ft8sim.f90 @@ -91,7 +91,7 @@ program ft8sim msg0=msg do ifile=1,nfiles k=nint((xdt+0.5)/dt) - ia=k + ia=max(1,k) phi=0.0 c0=0.0 do j=1,NN !Generate complex waveform @@ -105,7 +105,7 @@ program ft8sim if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,NWAVE,fs,delay,fspread) c=sig*c0 - ib=k + ib=min(k,NMAX) wave=real(c) peak=maxval(abs(wave(ia:ib))) nslots=1 From 393b595126bf88490faf1e4a8440255f169a4b88 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 17 Jun 2019 15:47:47 -0400 Subject: [PATCH 349/367] Editorial work on parts of the User Guide related to FT4. --- doc/user_guide/en/introduction.adoc | 6 ++++-- doc/user_guide/en/new_features.adoc | 18 ++++++------------ doc/user_guide/en/protocols.adoc | 9 +++++---- doc/user_guide/en/tutorial-example4.adoc | 3 ++- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/doc/user_guide/en/introduction.adoc b/doc/user_guide/en/introduction.adoc index 6da0f7936..f0d8e12e7 100644 --- a/doc/user_guide/en/introduction.adoc +++ b/doc/user_guide/en/introduction.adoc @@ -34,8 +34,10 @@ are possible (by EME and other propagation types) at signal levels 10 to 15 dB below those required for CW. Note that even though their T/R sequences are short, FT4 and FT8 are -classified as slow modes because their message frames are sent -only once per transmission. +classified as slow modes because their message frames are sent only +once per transmission. All fast modes in _WSJT-X_ send their message +frames repeatedly, as many times as will fit into the Tx sequence +length. *ISCAT*, *MSK144*, and optionally submodes *JT9E-H* are "`fast`" protocols designed to take advantage of brief signal enhancements from diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index 496bef16b..de5c34ff0 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -1,17 +1,11 @@ === New in Version {VERSION} -For quick reference, here's a short list of features and capabilities -added to _WSJT-X_ since Version 2.0.1: - -- New FT4 protocol, designed especially for radio contesting - -* T/R sequence length 7.5 s - -* Bandwidth 80 Hz - -* Threshold sensitivity -17.5 dB - -- Improvements to accessibility +The most important feature added to _WSJT-X_ since Version 2.0.1 is +the new *FT4 protocol*, designed especially for radio contesting. It +has T/R sequence length 7.5 s, bandwidth 80 Hz, and threshold +sensitivity -17.5 dB. Version 2.1.0 also has improvements to FT8 +waveform generation, contest logging, rig control, the user interface, +and accessibility, as well as a number of bug fixes. === Documentation Conventions diff --git a/doc/user_guide/en/protocols.adoc b/doc/user_guide/en/protocols.adoc index fc0dad266..e0d4145e3 100644 --- a/doc/user_guide/en/protocols.adoc +++ b/doc/user_guide/en/protocols.adoc @@ -13,9 +13,10 @@ aim is to compress the most common messages used for minimally valid QSOs into a fixed 72-bit length. The information payload for FT4, FT8, and MSK144 contains 77 bits. -The 5 additional bits are used to flag special message types used for -FT8 DXpedition Mode, contesting, nonstandard callsigns, and a few -other special types. +The 5 new bits added to the original 72 are used to flag special +message types signifying special message types used for FT8 DXpedition +Mode, contesting, nonstandard callsigns, and a few other +possibilities. A standard amateur callsign consists of a one- or two-character prefix, at least one of which must be a letter, followed by a digit @@ -76,7 +77,7 @@ Forward error correction (FEC) in FT4 uses a low-density parity check called an LDPC (174,91) code. Synchronization uses four 4×4 Costas arrays, and ramp-up and ramp-down symbols are inserted at the start and end of each transmission. Modulation is 4-tone frequency-shift -keying with Gaussian smoothing of frequency transitions (4-GFSK). The +keying (4-GFSK) with Gaussian smoothing of frequency transitions. The keying rate is 12000/576 = 20.8333 baud. Each transmitted symbol conveys two bits, so the total number of channel symbols is 174/2 + 16 + 2 = 105. The total bandwidth is 4 × 20.8333 = 83.3 Hz. diff --git a/doc/user_guide/en/tutorial-example4.adoc b/doc/user_guide/en/tutorial-example4.adoc index 762459728..43be6af1a 100644 --- a/doc/user_guide/en/tutorial-example4.adoc +++ b/doc/user_guide/en/tutorial-example4.adoc @@ -14,7 +14,8 @@ frequency limit is approximately 4000 Hz. - Select *File | Open* and navigate to +...\save\samples\FT4\000000_000002.wav+. The waterfall and Band Activity window should look something like the following screen shots. -Most of the decoded messages use the *RTTY Roundup* message formats. +This sample file was recorded during a practice contest test session, so +most of the decoded messages use the *RTTY Roundup* message formats. [[X15]] image::ft4_waterfall.png[align="left",alt="Wide Graph Decode FT4"] From 6caf9955a490a013ecc93c953b2419c8845c9bc6 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Tue, 18 Jun 2019 11:35:54 -0500 Subject: [PATCH 350/367] Back off to 77 AP bits for RR73 decodes, for now. --- lib/ft4_decode.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 0ec43dd99..3e4fa0916 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -401,8 +401,8 @@ contains if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then apmask=0 if(ncontest.le.4) then - apmask(1:91)=1 ! mycall, hiscall, RRR|73|RR73 - if(iaptype.eq.6) llrd(1:91)=apmag*apbits(1:91) + apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 + if(iaptype.eq.6) llrd(1:77)=apmag*apbits(1:77) endif endif From c68679bd10e27e6940c1692ac047f42916b69c4f Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 19 Jun 2019 09:07:08 -0500 Subject: [PATCH 351/367] Tweak to reduce the number of bad candidates. --- lib/ft4_decode.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 3e4fa0916..1fd60efa6 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -282,7 +282,7 @@ contains call timer('sync4d ',1) enddo if(iseg.eq.1) smax1=smax - if(smax.lt.0.7) cycle + if(smax.lt.1.2) cycle if(iseg.gt.1 .and. smax.lt.smax1) cycle f1=f0+real(idfbest) if( f1.le.10.0 .or. f1.ge.4990.0 ) cycle From 91aa591a7139d0bb3c3f989fd613941ee4790cdd Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 24 Jun 2019 00:56:41 +0100 Subject: [PATCH 352/367] Better ADIF conformance for ARRL Field Day mode This change may break N1MM Logger+ integration, notably the CLASS ADIF field is populated which may not be recognized by N1MM Logger+, nor interfaces to it. One exception to ADIF conformance is that the ARRL_SECT field may be populated with the value DX despite it not being a valid ARRL_SECT enumeration value. This is done for consistency with N1MM Logger+ ADIF exports. --- logbook/logbook.cpp | 47 ++++++++++++++++++++++++++++----------------- logbook/logbook.h | 12 ++++++------ widgets/logqso.cpp | 34 ++++++++++++++++---------------- 3 files changed, 52 insertions(+), 41 deletions(-) diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index a154664d5..bb27f8fba 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -32,7 +32,7 @@ void LogBook::match (QString const& call, QString const& mode, QString const& gr bool& ITUZoneB4, QString const& band) const { - if (call.length() > 0) + if (call.size() > 0) { auto const& mode_to_check = (config_ && !config_->highlight_by_mode ()) ? QString {} : mode; callB4 = worked_before_.call_worked (call, mode_to_check, band); @@ -77,30 +77,30 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q QString const& xSent, QString const& xRcvd) { QString t; - t = "" + hisCall; - t += " " + hisGrid; + t = "" + hisCall; + t += " " + hisGrid; if (mode != "FT4") { - t += " " + mode; + t += " " + mode; } else { - t += " MFSK " + mode; + t += " MFSK " + mode; } - t += " " + rptSent; - t += " " + rptRcvd; + t += " " + rptSent; + t += " " + rptRcvd; t += " " + dateTimeOn.date().toString("yyyyMMdd"); t += " " + dateTimeOn.time().toString("hhmmss"); t += " " + dateTimeOff.date().toString("yyyyMMdd"); t += " " + dateTimeOff.time().toString("hhmmss"); - t += " " + band; - t += " " + strDialFreq; - t += " " + myCall; - t += " " + myGrid; - if(txPower!="") t += " " + txPower; - if(comments!="") t += " " + comments; - if(name!="") t += " " + name; - if(operator_call!="") t+=" " + operator_call; + t += " " + band; + t += " " + strDialFreq; + t += " " + myCall; + t += " " + myGrid; + if(txPower!="") t += " " + txPower; + if(comments!="") t += " " + comments; + if(name!="") t += " " + name; + if(operator_call!="") t+=" " + operator_call; if (xSent.size ()) { auto words = xSent.split (' ', QString::SkipEmptyParts); @@ -131,16 +131,27 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q { if (words.at (1).toUInt ()) { - t += " " + words.at (1); + t += " " + words.at (1); } else if (words.at (0).toUInt () && words.at (0).size () > 3) // EU VHF contest exchange { // strip report and set SRX to serial - t += " " + words.at (0).mid (2); + t += " " + words.at (0).mid (2); } else { - t += " " + words.at (1); + if (Configuration::SpecialOperatingActivity::FIELD_DAY == config_->special_op_id ()) + { + // include DX as an ARRL_SECT value even though it is + // not in the ADIF spec ARRL_SECT enumeration, done + // because N1MM does the same + t += " ARRL-FIELD-DAY ' + + words.at (0) + " ' + words.at (1); + } + else if (Configuration::SpecialOperatingActivity::RTTY == config_->special_op_id ()) + { + t += " " + words.at (1); + } } } } diff --git a/logbook/logbook.h b/logbook/logbook.h index c87009e48..858bb64d8 100644 --- a/logbook/logbook.h +++ b/logbook/logbook.h @@ -39,12 +39,12 @@ public: AD1CCty::Record const&, bool& callB4, bool& countryB4, bool &gridB4, bool &continentB4, bool& CQZoneB4, bool& ITUZoneB4, QString const& currentBand = QString {}) const; - static QByteArray QSOToADIF (QString const& hisCall, QString const& hisGrid, QString const& mode, - QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn, - QDateTime const& dateTimeOff, QString const& band, QString const& comments, - QString const& name, QString const& strDialFreq, QString const& myCall, - QString const& m_myGrid, QString const& m_txPower, QString const& operator_call, - QString const& xSent, QString const& xRcvd); + QByteArray QSOToADIF (QString const& hisCall, QString const& hisGrid, QString const& mode, + QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn, + QDateTime const& dateTimeOff, QString const& band, QString const& comments, + QString const& name, QString const& strDialFreq, QString const& myCall, + QString const& m_myGrid, QString const& m_txPower, QString const& operator_call, + QString const& xSent, QString const& xRcvd); Q_SIGNAL void finished_loading (int worked_before_record_count, QString const& error) const; diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index 2eaedf116..14c92358b 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -202,23 +202,23 @@ void LogQSO::accept() , m_myGrid , xsent , xrcvd - , LogBook::QSOToADIF (hisCall - , hisGrid - , mode - , rptSent - , rptRcvd - , dateTimeOn - , dateTimeOff - , band - , m_comments - , name - , strDialFreq - , m_myCall - , m_myGrid - , m_txPower - , operator_call - , xsent - , xrcvd)); + , m_log->QSOToADIF (hisCall + , hisGrid + , mode + , rptSent + , rptRcvd + , dateTimeOn + , dateTimeOff + , band + , m_comments + , name + , strDialFreq + , m_myCall + , m_myGrid + , m_txPower + , operator_call + , xsent + , xrcvd)); QDialog::accept(); } From 17492c45a9f780fa637543d0549a3c6c01bbc2e0 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 24 Jun 2019 16:03:41 +0100 Subject: [PATCH 353/367] Further field day ADIF log enhancements Received exchange exported to SRX_STRING. --- logbook/logbook.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index bb27f8fba..96a8cb8e3 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -145,7 +145,8 @@ QByteArray LogBook::QSOToADIF (QString const& hisCall, QString const& hisGrid, Q // include DX as an ARRL_SECT value even though it is // not in the ADIF spec ARRL_SECT enumeration, done // because N1MM does the same - t += " ARRL-FIELD-DAY ' + t += " ARRL-FIELD-DAY ' + xRcvd + + " ' + words.at (0) + " ' + words.at (1); } else if (Configuration::SpecialOperatingActivity::RTTY == config_->special_op_id ()) From e7889ba11bf17d407089959cf346fd058b9bf30b Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Mon, 24 Jun 2019 11:09:55 -0500 Subject: [PATCH 354/367] FT4: candidates within 20 Hz of nfqso are presented to the decoder first. --- lib/ft4/getcandidates4.f90 | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index 09c2f135d..e9860b7a7 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -8,7 +8,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & real x(NFFT1) real window(NFFT1) complex cx(0:NH1) - real candidate(2,maxcand) + real candidate(2,maxcand),candidatet(2,maxcand) real dd(NMAX) integer ipk(1) equivalence (x,cx) @@ -48,11 +48,12 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & if(nfa.lt.nint(200.0/df)) nfa=nint(200.0/df) nfb=fb/df if(nfb.gt.nint(4910.0/df)) nfb=nint(4910.0/df) - ncand=0 call ft4_baseline(savg,nfa,nfb,sbase) if(any(sbase(nfa:nfb).le.0)) return savsm(nfa:nfb)=savsm(nfa:nfb)/sbase(nfa:nfb) f_offset = -1.5*12000.0/NSPS + ncand=0 + candidatet=0 do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. & savsm(i).ge.syncmin) then @@ -63,11 +64,23 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & if(fpeak.lt.200.0 .or. fpeak.gt.4910.0) cycle speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del ncand=ncand+1 - candidate(1,ncand)=fpeak - candidate(2,ncand)=speak + candidatet(1,ncand)=fpeak + candidatet(2,ncand)=speak if(ncand.eq.maxcand) exit endif enddo - + candidate=0 + nq=count(abs(candidatet(1,1:ncand)-nfqso).le.20.0) + n1=1 + n2=nq+1 + do i=1,ncand + if(abs(candidatet(1,i)-nfqso).le.20.0) then + candidate(1:2,n1)=candidatet(1:2,i) + n1=n1+1 + else + candidate(1:2,n2)=candidatet(1:2,i) + n2=n2+1 + endif + enddo return end subroutine getcandidates4 From c65d83235665919f19aab0c64c3523bb87e0fcbe Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 25 Jun 2019 14:35:58 +0100 Subject: [PATCH 355/367] New UDP messages to close and reconfigure WSJT-X plus more status fields The Status(1) message acquires the new fields Frequency Tolerance, T/R Period, and Configuration Name. The Rx DF, Tx DF fields become unsigned (this should be a benign change which is just for correctness as -ve values have never been possible). The Close(6) message becomes bi-directional allowing external applications to gracefully close down WSJT-X instances. A new message SwitchConfiguration(14) is provided that allows an external application to switch the current configuration of a WSJT-X instance. Another new message Configure(15) is provided to allow external applications to adjust some key parameters like the mode and submode. See the NetworkMessages.hpp header commentary for full details. The UDPExamples/MessageAggregator reference application has been updated to be able to exercise all of the above changes. Note that this commit enforces stricter checking on the "Settings->Reporting->Allow UDP requests" option, which must be checked before any state changing incoming messages to a WSJT-X instance are processed. --- Configuration.cpp | 7 +- Configuration.hpp | 1 + MessageClient.cpp | 58 +++- MessageClient.hpp | 22 +- MessageServer.cpp | 43 ++- MessageServer.hpp | 16 +- NetworkMessage.hpp | 70 +++-- UDPExamples/ClientWidget.cpp | 292 ++++++++++++++------ UDPExamples/ClientWidget.hpp | 83 ++++-- UDPExamples/MessageAggregatorMainWindow.cpp | 4 +- UDPExamples/UDPDaemon.cpp | 3 +- widgets/RestrictedSpinBox.cpp | 14 + widgets/RestrictedSpinBox.hpp | 1 + widgets/mainwindow.cpp | 197 ++++++++----- widgets/mainwindow.h | 5 + 15 files changed, 609 insertions(+), 207 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 2ac22b0b7..ebb6380b3 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -2092,7 +2092,12 @@ void Configuration::impl::accept () Q_EMIT self_->udp_server_port_changed (new_port); } - accept_udp_requests_ = ui_->accept_udp_requests_check_box->isChecked (); + if (ui_->accept_udp_requests_check_box->isChecked () != accept_udp_requests_) + { + accept_udp_requests_ = ui_->accept_udp_requests_check_box->isChecked (); + Q_EMIT self_->accept_udp_requests_changed (accept_udp_requests_); + } + n1mm_server_name_ = ui_->n1mm_server_name_line_edit->text (); n1mm_server_port_ = ui_->n1mm_server_port_spin_box->value (); broadcast_to_n1mm_ = ui_->enable_n1mm_broadcast_check_box->isChecked (); diff --git a/Configuration.hpp b/Configuration.hpp index 80f5a5cd1..dbf232fd5 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -271,6 +271,7 @@ public: // Q_SIGNAL void udp_server_changed (QString const& udp_server) const; Q_SIGNAL void udp_server_port_changed (port_type server_port) const; + Q_SIGNAL void accept_udp_requests_changed (bool checked) const; // signal updates to decode highlighting Q_SIGNAL void decode_highlighting_changed (DecodeHighlightingModel const&) const; diff --git a/MessageClient.cpp b/MessageClient.cpp index 0629c3026..ddf269564 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -35,6 +36,7 @@ public: impl (QString const& id, QString const& version, QString const& revision, port_type server_port, MessageClient * self) : self_ {self} + , enabled_ {false} , id_ {id} , version_ {version} , revision_ {revision} @@ -79,6 +81,7 @@ public: Q_SLOT void host_info_results (QHostInfo); MessageClient * self_; + bool enabled_; QString id_; QString version_; QString revision_; @@ -160,6 +163,12 @@ void MessageClient::impl::parse_message (QByteArray const& msg) schema_ = in.schema (); } + if (!enabled_) + { + TRACE_UDP ("message processing disabled for id:" << in.id ()); + return; + } + // // message format is described in NetworkMessage.hpp // @@ -200,6 +209,15 @@ void MessageClient::impl::parse_message (QByteArray const& msg) } break; + case NetworkMessage::Close: + TRACE_UDP ("Close"); + if (check_status (in) != Fail) + { + last_message_.clear (); + Q_EMIT self_->close (); + } + break; + case NetworkMessage::Replay: TRACE_UDP ("Replay"); if (check_status (in) != Fail) @@ -265,14 +283,38 @@ void MessageClient::impl::parse_message (QByteArray const& msg) { QByteArray configuration_name; in >> configuration_name; - TRACE_UDP ("SwitchConfiguration name:" << configuration_name); - if (check_status (in) != Fail && configuration_name.size ()) + TRACE_UDP ("Switch Configuration name:" << configuration_name); + if (check_status (in) != Fail) { Q_EMIT self_->switch_configuration (QString::fromUtf8 (configuration_name)); } } break; + case NetworkMessage::Configure: + { + QByteArray mode; + quint32 frequency_tolerance; + QByteArray submode; + bool fast_mode {false}; + quint32 tr_period {std::numeric_limits::max ()}; + quint32 rx_df {std::numeric_limits::max ()}; + QByteArray dx_call; + QByteArray dx_grid; + bool generate_messages {false}; + in >> mode >> frequency_tolerance >> submode >> fast_mode >> tr_period >> rx_df + >> dx_call >> dx_grid >> generate_messages; + TRACE_UDP ("Configure mode:" << mode << "frequency tolerance:" << frequency_tolerance << "submode:" << submode << "fast mode:" << fast_mode << "T/R period:" << tr_period << "rx df:" << rx_df << "dx call:" << dx_call << "dx grid:" << dx_grid << "generate messages:" << generate_messages); + if (check_status (in) != Fail) + { + Q_EMIT self_->configure (QString::fromUtf8 (mode), frequency_tolerance + , QString::fromUtf8 (submode), fast_mode, tr_period, rx_df + , QString::fromUtf8 (dx_call), QString::fromUtf8 (dx_grid) + , generate_messages); + } + } + break; + default: // Ignore // @@ -450,13 +492,19 @@ void MessageClient::add_blocked_destination (QHostAddress const& a) } } +void MessageClient::enable (bool flag) +{ + m_->enabled_ = flag; +} + void MessageClient::status_update (Frequency f, QString const& mode, QString const& dx_call , QString const& report, QString const& tx_mode , bool tx_enabled, bool transmitting, bool decoding - , qint32 rx_df, qint32 tx_df, QString const& de_call + , quint32 rx_df, quint32 tx_df, QString const& de_call , QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode , bool fast_mode, quint8 special_op_mode + , quint32 frequency_tolerance, quint32 tr_period , QString const& configuration_name) { if (m_->server_port_ && !m_->server_string_.isEmpty ()) @@ -466,8 +514,8 @@ void MessageClient::status_update (Frequency f, QString const& mode, QString con out << f << mode.toUtf8 () << dx_call.toUtf8 () << report.toUtf8 () << tx_mode.toUtf8 () << tx_enabled << transmitting << decoding << rx_df << tx_df << de_call.toUtf8 () << de_grid.toUtf8 () << dx_grid.toUtf8 () << watchdog_timeout << sub_mode.toUtf8 () - << fast_mode << special_op_mode << configuration_name.toUtf8 (); - TRACE_UDP ("frequency:" << f << "mode:" << mode << "DX:" << dx_call << "report:" << report << "Tx mode:" << tx_mode << "tx_enabled:" << tx_enabled << "Tx:" << transmitting << "decoding:" << decoding << "Rx df:" << rx_df << "Tx df:" << tx_df << "DE:" << de_call << "DE grid:" << de_grid << "DX grid:" << dx_grid << "w/d t/o:" << watchdog_timeout << "sub_mode:" << sub_mode << "fast mode:" << fast_mode << "spec op mode:" << special_op_mode << "configuration name:" << configuration_name); + << fast_mode << special_op_mode << frequency_tolerance << tr_period << configuration_name.toUtf8 (); + TRACE_UDP ("frequency:" << f << "mode:" << mode << "DX:" << dx_call << "report:" << report << "Tx mode:" << tx_mode << "tx_enabled:" << tx_enabled << "Tx:" << transmitting << "decoding:" << decoding << "Rx df:" << rx_df << "Tx df:" << tx_df << "DE:" << de_call << "DE grid:" << de_grid << "DX grid:" << dx_grid << "w/d t/o:" << watchdog_timeout << "sub_mode:" << sub_mode << "fast mode:" << fast_mode << "spec op mode:" << special_op_mode << "frequency tolerance:" << frequency_tolerance << "T/R period:" << tr_period << "configuration name:" << configuration_name); m_->send_message (out, message); } } diff --git a/MessageClient.hpp b/MessageClient.hpp index 2396a6ad0..20f39b019 100644 --- a/MessageClient.hpp +++ b/MessageClient.hpp @@ -47,12 +47,16 @@ public: // change the server port messages are sent to Q_SLOT void set_server_port (port_type server_port = 0u); + // enable incoming messages + Q_SLOT void enable (bool); + // outgoing messages Q_SLOT void status_update (Frequency, QString const& mode, QString const& dx_call, QString const& report , QString const& tx_mode, bool tx_enabled, bool transmitting, bool decoding - , qint32 rx_df, qint32 tx_df, QString const& de_call, QString const& de_grid + , quint32 rx_df, quint32 tx_df, QString const& de_call, QString const& de_grid , QString const& dx_grid, bool watchdog_timeout, QString const& sub_mode - , bool fast_mode, quint8 special_op_mode, QString const& configuration_name); + , bool fast_mode, quint8 special_op_mode, quint32 frequency_tolerance + , quint32 tr_period, QString const& configuration_name); Q_SLOT void decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency , QString const& mode, QString const& message, bool low_confidence , bool off_air); @@ -89,6 +93,10 @@ public: Q_SIGNAL void reply (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode , QString const& message_text, bool low_confidence, quint8 modifiers); + // this signal is emitted if the server has requested this client to + // close down gracefully + Q_SIGNAL void close (); + // this signal is emitted if the server has requested a replay of // all decodes Q_SIGNAL void replay (); @@ -105,10 +113,16 @@ public: // callsign request for the specified call Q_SIGNAL void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only); - // this signal is emitted if the server has requested a switch to a - // new configuration + // this signal is emitted if the server has requested a + // configuration switch Q_SIGNAL void switch_configuration (QString const& configuration_name); + // this signal is emitted if the server has requested a + // configuration change + Q_SIGNAL void configure (QString const& mode, quint32 frequency_tolerance, QString const& submode + , bool fast_mode, quint32 tr_period, quint32 rx_df, QString const& dx_call + , QString const& dx_grid, bool generate_messages); + // this signal is emitted when network errors occur or if a host // lookup fails Q_SIGNAL void error (QString const&) const; diff --git a/MessageServer.cpp b/MessageServer.cpp index 02d23e460..07b2fb429 100644 --- a/MessageServer.cpp +++ b/MessageServer.cpp @@ -1,6 +1,7 @@ #include "MessageServer.hpp" #include +#include #include #include @@ -16,6 +17,11 @@ #include "moc_MessageServer.cpp" +namespace +{ + auto quint32_max = std::numeric_limits::max (); +} + class MessageServer::impl : public QUdpSocket { @@ -238,8 +244,8 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s bool tx_enabled {false}; bool transmitting {false}; bool decoding {false}; - qint32 rx_df {-1}; - qint32 tx_df {-1}; + quint32 rx_df {quint32_max}; + quint32 tx_df {quint32_max}; QByteArray de_call; QByteArray de_grid; QByteArray dx_grid; @@ -247,10 +253,12 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s QByteArray sub_mode; bool fast_mode {false}; quint8 special_op_mode {0}; + quint32 frequency_tolerance {quint32_max}; + quint32 tr_period {quint32_max}; QByteArray configuration_name; in >> f >> mode >> dx_call >> report >> tx_mode >> tx_enabled >> transmitting >> decoding >> rx_df >> tx_df >> de_call >> de_grid >> dx_grid >> watchdog_timeout >> sub_mode - >> fast_mode >> special_op_mode >> configuration_name; + >> fast_mode >> special_op_mode >> frequency_tolerance >> tr_period >> configuration_name; if (check_status (in) != Fail) { Q_EMIT self_->status_update (id, f, QString::fromUtf8 (mode), QString::fromUtf8 (dx_call) @@ -259,7 +267,8 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s , QString::fromUtf8 (de_call), QString::fromUtf8 (de_grid) , QString::fromUtf8 (dx_grid), watchdog_timeout , QString::fromUtf8 (sub_mode), fast_mode - , special_op_mode, QString::fromUtf8 (configuration_name)); + , special_op_mode, frequency_tolerance, tr_period + , QString::fromUtf8 (configuration_name)); } } break; @@ -494,6 +503,17 @@ void MessageServer::replay (QString const& id) } } +void MessageServer::close (QString const& id) +{ + auto iter = m_->clients_.find (id); + if (iter != std::end (m_->clients_)) + { + QByteArray message; + NetworkMessage::Builder out {&message, NetworkMessage::Close, id, (*iter).negotiated_schema_number_}; + m_->send_message (out, message, iter.value ().sender_address_, (*iter).sender_port_); + } +} + void MessageServer::halt_tx (QString const& id, bool auto_only) { auto iter = m_->clients_.find (id); @@ -554,3 +574,18 @@ void MessageServer::switch_configuration (QString const& id, QString const& conf m_->send_message (out, message, iter.value ().sender_address_, (*iter).sender_port_); } } + +void MessageServer::configure (QString const& id, QString const& mode, quint32 frequency_tolerance + , QString const& submode, bool fast_mode, quint32 tr_period, quint32 rx_df + , QString const& dx_call, QString const& dx_grid, bool generate_messages) +{ + auto iter = m_->clients_.find (id); + if (iter != std::end (m_->clients_)) + { + QByteArray message; + NetworkMessage::Builder out {&message, NetworkMessage::Configure, id, (*iter).negotiated_schema_number_}; + out << mode.toUtf8 () << frequency_tolerance << submode.toUtf8 () << fast_mode << tr_period << rx_df + << dx_call.toUtf8 () << dx_grid.toUtf8 () << generate_messages; + m_->send_message (out, message, iter.value ().sender_address_, (*iter).sender_port_); + } +} diff --git a/MessageServer.hpp b/MessageServer.hpp index 2764889cf..f59c21fe0 100644 --- a/MessageServer.hpp +++ b/MessageServer.hpp @@ -52,6 +52,9 @@ public: Q_SLOT void reply (QString const& id, QTime time, qint32 snr, float delta_time, quint32 delta_frequency , QString const& mode, QString const& message, bool low_confidence, quint8 modifiers); + // ask the client with identification 'id' to close down gracefully + Q_SLOT void close (QString const& id); + // ask the client with identification 'id' to replay all decodes Q_SLOT void replay (QString const& id); @@ -72,18 +75,25 @@ public: , QColor const& bg = QColor {}, QColor const& fg = QColor {} , bool last_only = false); - // ask the client with identification 'id' to switch configuration + // ask the client with identification 'id' to switch to + // configuration 'configuration_name' Q_SLOT void switch_configuration (QString const& id, QString const& configuration_name); + // ask the client with identification 'id' to change configuration + Q_SLOT void configure (QString const& id, QString const& mode, quint32 frequency_tolerance + , QString const& submode, bool fast_mode, quint32 tr_period, quint32 rx_df + , QString const& dx_call, QString const& dx_grid, bool generate_messages); + // the following signals are emitted when a client broadcasts the // matching message Q_SIGNAL void client_opened (QString const& id, QString const& version, QString const& revision); Q_SIGNAL void status_update (QString const& id, Frequency, QString const& mode, QString const& dx_call , QString const& report, QString const& tx_mode, bool tx_enabled - , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df + , bool transmitting, bool decoding, quint32 rx_df, quint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode, bool fast_mode - , quint8 special_op_mode, QString const& configuration_name); + , quint8 special_op_mode, quint32 frequency_tolerance, quint32 tr_period + , QString const& configuration_name); Q_SIGNAL void client_closed (QString const& id); Q_SIGNAL void decode (bool is_new, QString const& id, QTime time, qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode, QString const& message diff --git a/NetworkMessage.hpp b/NetworkMessage.hpp index be85d63ee..4628c29b8 100644 --- a/NetworkMessage.hpp +++ b/NetworkMessage.hpp @@ -116,8 +116,8 @@ * Tx Enabled bool * Transmitting bool * Decoding bool - * Rx DF qint32 - * Tx DF qint32 + * Rx DF quint32 + * Tx DF quint32 * DE call utf8 * DE grid utf8 * DX grid utf8 @@ -125,6 +125,8 @@ * Sub-mode utf8 * Fast mode bool * Special Operation Mode quint8 + * Frequency Tolerance quint32 + * T/R Period quint32 * Configuration Name utf8 * * WSJT-X sends this status message when various internal state @@ -134,20 +136,22 @@ * * Application start up, * "Enable Tx" button status changes, - * Dial frequency changes, - * Changes to the "DX Call" field, - * Operating mode, sub-mode or fast mode changes, - * Transmit mode changed (in dual JT9+JT65 mode), - * Changes to the "Rpt" spinner, - * After an old decodes replay sequence (see Replay below), - * When switching between Tx and Rx mode, - * At the start and end of decoding, - * When the Rx DF changes, - * When the Tx DF changes, - * When settings are exited, - * When the DX call or grid changes, - * When the Tx watchdog is set or reset, - * When the configuration name changes. + * dial frequency changes, + * changes to the "DX Call" field, + * operating mode, sub-mode or fast mode changes, + * transmit mode changed (in dual JT9+JT65 mode), + * changes to the "Rpt" spinner, + * after an old decodes replay sequence (see Replay below), + * when switching between Tx and Rx mode, + * at the start and end of decoding, + * when the Rx DF changes, + * when the Tx DF changes, + * when settings are exited, + * when the DX call or grid changes, + * when the Tx watchdog is set or reset, + * when the frequency tolerance is changed, + * when the T/R period is changed, + * when the configuration name changes. * * The Special operation mode is an enumeration that indicates the * setting selected in the WSJT-X "Settings->Advanced->Special @@ -161,6 +165,10 @@ * 5 -> FOX * 6 -> HOUND * + * The Frequency Tolerance and T/R period fields may have a value + * of the maximum quint32 value which implies the field is not + * applicable. + * * * Decode Out 2 quint32 * Id (unique key) utf8 @@ -273,11 +281,12 @@ * button. * * - * Close Out 6 quint32 + * Close Out/In 6 quint32 * Id (unique key) utf8 * - * Close is sent by a client immediately prior to it shutting - * down gracefully. + * Close is sent by a client immediately prior to it shutting + * down gracefully. When sent by a server it requests the target + * client to close down gracefully. * * * Replay In 7 quint32 @@ -418,13 +427,33 @@ * cleared. * * - * Switch Configuration In 14 quint32 + * SwitchConfiguration In 14 quint32 * Id (unique key) utf8 * Configuration Name utf8 * * The server may send this message at any time. The message * specifies the name of the configuration to switch to. The new * configuration must exist. + * + * + * Configure In 15 quint32 + * Id (unique key) utf8 + * Mode utf8 + * Frequency Tolerance quint32 + * Submode utf8 + * Fast Mode bool + * T/R Period quint32 + * Rx DF quint32 + * DX Call utf8 + * DX Grid utf8 + * Generate Messages bool + * + * The server may send this message at any time. The message + * specifies various configuration options. For utf8 string + * fields an empty value implies no change, for the quint32 Rx DF + * and Frequency Tolerance fields the maximum quint32 value + * implies no change. Invalid or unrecognized values will be + * silently ignored. */ #include @@ -455,6 +484,7 @@ namespace NetworkMessage LoggedADIF, HighlightCallsign, SwitchConfiguration, + Configure, maximum_message_type_ // ONLY add new message types // immediately before here }; diff --git a/UDPExamples/ClientWidget.cpp b/UDPExamples/ClientWidget.cpp index 7d1601938..ecf0b54fe 100644 --- a/UDPExamples/ClientWidget.cpp +++ b/UDPExamples/ClientWidget.cpp @@ -1,8 +1,11 @@ #include "ClientWidget.hpp" +#include #include #include +#include #include +#include #include "validators/MaidenheadLocatorValidator.hpp" @@ -11,6 +14,9 @@ namespace //QRegExp message_alphabet {"[- A-Za-z0-9+./?]*"}; QRegExp message_alphabet {"[- @A-Za-z0-9+./?#<>]*"}; QRegularExpression cq_re {"(CQ|CQDX|QRZ)[^A-Z0-9/]+"}; + QRegExpValidator message_validator {message_alphabet}; + MaidenheadLocatorValidator locator_validator; + quint32 quint32_max {std::numeric_limits::max ()}; void update_dynamic_property (QWidget * widget, char const * property, QVariant const& value) { @@ -21,9 +27,10 @@ namespace } } -ClientWidget::IdFilterModel::IdFilterModel (QString const& client_id) - : client_id_ {client_id} - , rx_df_ (-1) +ClientWidget::IdFilterModel::IdFilterModel (QString const& client_id, QObject * parent) + : QSortFilterProxyModel {parent} + , client_id_ {client_id} + , rx_df_ (quint32_max) { } @@ -49,7 +56,7 @@ QVariant ClientWidget::IdFilterModel::data (QModelIndex const& proxy_index, int break; case 4: // DF - if (qAbs (QSortFilterProxyModel::data (proxy_index).toInt () - rx_df_) <= 10) + if (qAbs (QSortFilterProxyModel::data (proxy_index).toUInt () - rx_df_) <= 10) { return QColor {255, 200, 200}; } @@ -87,7 +94,7 @@ void ClientWidget::IdFilterModel::de_call (QString const& call) } } -void ClientWidget::IdFilterModel::rx_df (int df) +void ClientWidget::IdFilterModel::rx_df (quint32 df) { if (df != rx_df_) { @@ -119,27 +126,48 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod , QListWidget const * calls_of_interest, QWidget * parent) : QDockWidget {make_title (id, version, revision), parent} , id_ {id} + , done_ {false} , calls_of_interest_ {calls_of_interest} - , decodes_proxy_model_ {id_} + , decodes_proxy_model_ {id} + , beacons_proxy_model_ {id} , erase_action_ {new QAction {tr ("&Erase Band Activity"), this}} , erase_rx_frequency_action_ {new QAction {tr ("Erase &Rx Frequency"), this}} , erase_both_action_ {new QAction {tr ("Erase &Both"), this}} - , decodes_table_view_ {new QTableView} - , beacons_table_view_ {new QTableView} - , message_line_edit_ {new QLineEdit} - , grid_line_edit_ {new QLineEdit} + , decodes_table_view_ {new QTableView {this}} + , beacons_table_view_ {new QTableView {this}} + , message_line_edit_ {new QLineEdit {this}} + , grid_line_edit_ {new QLineEdit {this}} + , generate_messages_push_button_ {new QPushButton {tr ("&Gen Msgs"), this}} + , auto_off_button_ {nullptr} + , halt_tx_button_ {nullptr} + , de_label_ {new QLabel {this}} + , frequency_label_ {new QLabel {this}} + , tx_df_label_ {new QLabel {this}} + , report_label_ {new QLabel {this}} + , configuration_line_edit_ {new QLineEdit {this}} + , mode_line_edit_ {new QLineEdit {this}} + , frequency_tolerance_spin_box_ {new QSpinBox {this}} + , tx_mode_label_ {new QLabel {this}} + , submode_line_edit_ {new QLineEdit {this}} + , fast_mode_check_box_ {new QCheckBox {this}} + , tr_period_spin_box_ {new QSpinBox {this}} + , rx_df_spin_box_ {new QSpinBox {this}} + , dx_call_line_edit_ {new QLineEdit {this}} + , dx_grid_line_edit_ {new QLineEdit {this}} + , decodes_page_ {new QWidget {this}} + , beacons_page_ {new QWidget {this}} + , content_widget_ {new QFrame {this}} + , status_bar_ {new QStatusBar {this}} + , control_button_box_ {new QDialogButtonBox {this}} + , form_layout_ {new QFormLayout} + , horizontal_layout_ {new QHBoxLayout} + , subform1_layout_ {new QFormLayout} + , subform2_layout_ {new QFormLayout} + , subform3_layout_ {new QFormLayout} + , decodes_layout_ {new QVBoxLayout {decodes_page_}} + , beacons_layout_ {new QVBoxLayout {beacons_page_}} + , content_layout_ {new QVBoxLayout {content_widget_}} , decodes_stack_ {new QStackedLayout} - , auto_off_button_ {new QPushButton {tr ("&Auto Off")}} - , halt_tx_button_ {new QPushButton {tr ("&Halt Tx")}} - , de_label_ {new QLabel} - , mode_label_ {new QLabel} - , fast_mode_ {false} - , frequency_label_ {new QLabel} - , dx_label_ {new QLabel} - , rx_df_label_ {new QLabel} - , tx_df_label_ {new QLabel} - , report_label_ {new QLabel} - , configuration_line_edit_ {new QLineEdit} , columns_resized_ {false} { // set up widgets @@ -153,12 +181,33 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod decodes_table_view_->insertAction (nullptr, erase_rx_frequency_action_); decodes_table_view_->insertAction (nullptr, erase_both_action_); - auto form_layout = new QFormLayout; - form_layout->addRow (tr ("Free text:"), message_line_edit_); - form_layout->addRow (tr ("Temporary grid:"), grid_line_edit_); - form_layout->addRow (tr ("Configuration name:"), configuration_line_edit_); - message_line_edit_->setValidator (new QRegExpValidator {message_alphabet, this}); - grid_line_edit_->setValidator (new MaidenheadLocatorValidator {this}); + message_line_edit_->setValidator (&message_validator); + grid_line_edit_->setValidator (&locator_validator); + dx_grid_line_edit_->setValidator (&locator_validator); + tr_period_spin_box_->setRange (5, 30); + tr_period_spin_box_->setSuffix (" s"); + rx_df_spin_box_->setRange (200, 5000); + frequency_tolerance_spin_box_->setRange (10, 1000); + frequency_tolerance_spin_box_->setPrefix ("\u00b1"); + frequency_tolerance_spin_box_->setSuffix (" Hz"); + + form_layout_->addRow (tr ("Free text:"), message_line_edit_); + form_layout_->addRow (tr ("Temporary grid:"), grid_line_edit_); + form_layout_->addRow (tr ("Configuration name:"), configuration_line_edit_); + form_layout_->addRow (horizontal_layout_); + subform1_layout_->addRow (tr ("Mode:"), mode_line_edit_); + subform2_layout_->addRow (tr ("Submode:"), submode_line_edit_); + subform3_layout_->addRow (tr ("Fast mode:"), fast_mode_check_box_); + subform1_layout_->addRow (tr ("T/R period:"), tr_period_spin_box_); + subform2_layout_->addRow (tr ("Rx DF:"), rx_df_spin_box_); + subform3_layout_->addRow (tr ("Freq. Tol:"), frequency_tolerance_spin_box_); + subform1_layout_->addRow (tr ("DX call:"), dx_call_line_edit_); + subform2_layout_->addRow (tr ("DX grid:"), dx_grid_line_edit_); + subform3_layout_->addRow (generate_messages_push_button_); + horizontal_layout_->addLayout (subform1_layout_); + horizontal_layout_->addLayout (subform2_layout_); + horizontal_layout_->addLayout (subform3_layout_); + connect (message_line_edit_, &QLineEdit::textEdited, [this] (QString const& text) { Q_EMIT do_free_text (id_, text, false); }); @@ -171,66 +220,99 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod connect (configuration_line_edit_, &QLineEdit::editingFinished, [this] () { Q_EMIT switch_configuration (id_, configuration_line_edit_->text ()); }); + connect (mode_line_edit_, &QLineEdit::editingFinished, [this] () { + QString empty; + Q_EMIT configure (id_, mode_line_edit_->text (), quint32_max, empty, fast_mode () + , quint32_max, quint32_max, empty, empty, false); + }); + connect (frequency_tolerance_spin_box_, static_cast (&QSpinBox::valueChanged), [this] (int i) { + QString empty; + auto f = frequency_tolerance_spin_box_->specialValueText ().size () ? quint32_max : i; + Q_EMIT configure (id_, empty, f, empty, fast_mode () + , quint32_max, quint32_max, empty, empty, false); + }); + connect (submode_line_edit_, &QLineEdit::editingFinished, [this] () { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, submode_line_edit_->text (), fast_mode () + , quint32_max, quint32_max, empty, empty, false); + }); + connect (fast_mode_check_box_, &QCheckBox::stateChanged, [this] (int state) { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, empty, Qt::Checked == state + , quint32_max, quint32_max, empty, empty, false); + }); + connect (tr_period_spin_box_, static_cast (&QSpinBox::valueChanged), [this] (int i) { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, empty, fast_mode () + , i, quint32_max, empty, empty, false); + }); + connect (rx_df_spin_box_, static_cast (&QSpinBox::valueChanged), [this] (int i) { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, empty, fast_mode () + , quint32_max, i, empty, empty, false); + }); + connect (dx_call_line_edit_, &QLineEdit::editingFinished, [this] () { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, empty, fast_mode () + , quint32_max, quint32_max, dx_call_line_edit_->text (), empty, false); + }); + connect (dx_grid_line_edit_, &QLineEdit::editingFinished, [this] () { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, empty, fast_mode () + , quint32_max, quint32_max, empty, dx_grid_line_edit_->text (), false); + }); - auto decodes_page = new QWidget; - auto decodes_layout = new QVBoxLayout {decodes_page}; - decodes_layout->setContentsMargins (QMargins {2, 2, 2, 2}); - decodes_layout->addWidget (decodes_table_view_); - decodes_layout->addLayout (form_layout); + decodes_layout_->setContentsMargins (QMargins {2, 2, 2, 2}); + decodes_layout_->addWidget (decodes_table_view_); + decodes_layout_->addLayout (form_layout_); - auto beacons_proxy_model = new IdFilterModel {id_}; - beacons_proxy_model->setSourceModel (beacons_model); - beacons_table_view_->setModel (beacons_proxy_model); + beacons_proxy_model_.setSourceModel (beacons_model); + beacons_table_view_->setModel (&beacons_proxy_model_); beacons_table_view_->verticalHeader ()->hide (); beacons_table_view_->hideColumn (0); beacons_table_view_->horizontalHeader ()->setStretchLastSection (true); beacons_table_view_->setContextMenuPolicy (Qt::ActionsContextMenu); beacons_table_view_->insertAction (nullptr, erase_action_); - auto beacons_page = new QWidget; - auto beacons_layout = new QVBoxLayout {beacons_page}; - beacons_layout->setContentsMargins (QMargins {2, 2, 2, 2}); - beacons_layout->addWidget (beacons_table_view_); + beacons_layout_->setContentsMargins (QMargins {2, 2, 2, 2}); + beacons_layout_->addWidget (beacons_table_view_); - decodes_stack_->addWidget (decodes_page); - decodes_stack_->addWidget (beacons_page); + decodes_stack_->addWidget (decodes_page_); + decodes_stack_->addWidget (beacons_page_); // stack alternative views - auto content_layout = new QVBoxLayout; - content_layout->setContentsMargins (QMargins {2, 2, 2, 2}); - content_layout->addLayout (decodes_stack_); + content_layout_->setContentsMargins (QMargins {2, 2, 2, 2}); + content_layout_->addLayout (decodes_stack_); // set up controls - auto control_button_box = new QDialogButtonBox; - control_button_box->addButton (auto_off_button_, QDialogButtonBox::ActionRole); - control_button_box->addButton (halt_tx_button_, QDialogButtonBox::ActionRole); + auto_off_button_ = control_button_box_->addButton (tr ("&Auto Off"), QDialogButtonBox::ActionRole); + halt_tx_button_ = control_button_box_->addButton (tr ("&Halt Tx"), QDialogButtonBox::ActionRole); + connect (generate_messages_push_button_, &QAbstractButton::clicked, [this] (bool /*checked*/) { + QString empty; + Q_EMIT configure (id_, empty, quint32_max, empty, fast_mode () + , quint32_max, quint32_max, empty, empty, true); + }); connect (auto_off_button_, &QAbstractButton::clicked, [this] (bool /* checked */) { Q_EMIT do_halt_tx (id_, true); }); connect (halt_tx_button_, &QAbstractButton::clicked, [this] (bool /* checked */) { Q_EMIT do_halt_tx (id_, false); }); - content_layout->addWidget (control_button_box); + content_layout_->addWidget (control_button_box_); // set up status area - auto status_bar = new QStatusBar; - status_bar->addPermanentWidget (de_label_); - status_bar->addPermanentWidget (mode_label_); - status_bar->addPermanentWidget (frequency_label_); - status_bar->addPermanentWidget (dx_label_); - status_bar->addPermanentWidget (rx_df_label_); - status_bar->addPermanentWidget (tx_df_label_); - status_bar->addPermanentWidget (report_label_); - content_layout->addWidget (status_bar); - connect (this, &ClientWidget::topLevelChanged, status_bar, &QStatusBar::setSizeGripEnabled); + status_bar_->addPermanentWidget (de_label_); + status_bar_->addPermanentWidget (tx_mode_label_); + status_bar_->addPermanentWidget (frequency_label_); + status_bar_->addPermanentWidget (tx_df_label_); + status_bar_->addPermanentWidget (report_label_); + content_layout_->addWidget (status_bar_); + connect (this, &ClientWidget::topLevelChanged, status_bar_, &QStatusBar::setSizeGripEnabled); // set up central widget - auto content_widget = new QFrame; - content_widget->setFrameStyle (QFrame::StyledPanel | QFrame::Sunken); - content_widget->setLayout (content_layout); - setWidget (content_widget); + content_widget_->setFrameStyle (QFrame::StyledPanel | QFrame::Sunken); + setWidget (content_widget_); // setMinimumSize (QSize {550, 0}); - setFeatures (DockWidgetMovable | DockWidgetFloatable); setAllowedAreas (Qt::BottomDockWidgetArea); setFloating (true); @@ -257,6 +339,25 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod } } +void ClientWidget::dispose () +{ + done_ = true; + close (); +} + +void ClientWidget::closeEvent (QCloseEvent *e) +{ + if (!done_) + { + Q_EMIT do_close (id_); + e->ignore (); // defer closure until client actually closes + } + else + { + QDockWidget::closeEvent (e); + } +} + ClientWidget::~ClientWidget () { for (int row = 0; row < calls_of_interest_->count (); ++row) @@ -266,16 +367,45 @@ ClientWidget::~ClientWidget () } } +bool ClientWidget::fast_mode () const +{ + return fast_mode_check_box_->isChecked (); +} + +namespace +{ + void update_line_edit (QLineEdit * le, QString const& value, bool allow_empty = true) + { + le->setEnabled (value.size () || allow_empty); + if (!(le->hasFocus () && le->isModified ())) + { + le->setText (value); + } + } + + void update_spin_box (QSpinBox * sb, int value, QString const& special_value = QString {}) + { + sb->setSpecialValueText (special_value); + bool enable {0 == special_value.size ()}; + sb->setEnabled (enable); + if (!sb->hasFocus () && enable) + { + sb->setValue (value); + } + } +} + void ClientWidget::update_status (QString const& id, Frequency f, QString const& mode, QString const& dx_call , QString const& report, QString const& tx_mode, bool tx_enabled - , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df + , bool transmitting, bool decoding, quint32 rx_df, quint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid - , bool watchdog_timeout, QString const& sub_mode, bool fast_mode - , quint8 special_op_mode, QString const& configuration_name) + , bool watchdog_timeout, QString const& submode, bool fast_mode + , quint8 special_op_mode, quint32 frequency_tolerance, quint32 tr_period + , QString const& configuration_name) { - if (id == id_) + if (id == id_) { - fast_mode_ = fast_mode; + fast_mode_check_box_->setChecked (fast_mode); decodes_proxy_model_.de_call (de_call); decodes_proxy_model_.rx_df (rx_df); QString special; @@ -293,26 +423,26 @@ void ClientWidget::update_status (QString const& id, Frequency f, QString const& .arg (de_grid.size () ? '(' + de_grid + ')' : QString {}) .arg (special) : QString {}); - mode_label_->setText (QString {"Mode: %1%2%3%4"} - .arg (mode) - .arg (sub_mode) - .arg (fast_mode && !mode.contains (QRegularExpression {R"(ISCAT|MSK144)"}) ? "fast" : "") + update_line_edit (mode_line_edit_, mode); + update_spin_box (frequency_tolerance_spin_box_, frequency_tolerance + , quint32_max == frequency_tolerance ? QString {"n/a"} : QString {}); + update_line_edit (submode_line_edit_, submode, false); + tx_mode_label_->setText (QString {"Tx Mode: %1"} .arg (tx_mode.isEmpty () || tx_mode == mode ? "" : '(' + tx_mode + ')')); frequency_label_->setText ("QRG: " + Radio::pretty_frequency_MHz_string (f)); - dx_label_->setText (dx_call.size () >= 0 ? QString {"DX: %1%2"}.arg (dx_call) - .arg (dx_grid.size () ? '(' + dx_grid + ')' : QString {}) : QString {}); - rx_df_label_->setText (rx_df >= 0 ? QString {"Rx: %1"}.arg (rx_df) : ""); - tx_df_label_->setText (tx_df >= 0 ? QString {"Tx: %1"}.arg (tx_df) : ""); + update_line_edit (dx_call_line_edit_, dx_call); + update_line_edit (dx_grid_line_edit_, dx_grid); + if (rx_df != quint32_max) update_spin_box (rx_df_spin_box_, rx_df); + update_spin_box (tr_period_spin_box_, tr_period + , quint32_max == tr_period ? QString {"n/a"} : QString {}); + tx_df_label_->setText (QString {"Tx: %1"}.arg (tx_df)); report_label_->setText ("SNR: " + report); update_dynamic_property (frequency_label_, "transmitting", transmitting); auto_off_button_->setEnabled (tx_enabled); halt_tx_button_->setEnabled (transmitting); - update_dynamic_property (mode_label_, "decoding", decoding); + update_line_edit (configuration_line_edit_, configuration_name); + update_dynamic_property (mode_line_edit_, "decoding", decoding); update_dynamic_property (tx_df_label_, "watchdog_timeout", watchdog_timeout); - if (!configuration_line_edit_->hasFocus ()) - { - configuration_line_edit_->setText (configuration_name); - } } } diff --git a/UDPExamples/ClientWidget.hpp b/UDPExamples/ClientWidget.hpp index 9aa8d35a0..983ddd874 100644 --- a/UDPExamples/ClientWidget.hpp +++ b/UDPExamples/ClientWidget.hpp @@ -1,11 +1,11 @@ #ifndef WSJTX_UDP_CLIENT_WIDGET_MODEL_HPP__ #define WSJTX_UDP_CLIENT_WIDGET_MODEL_HPP__ +#include #include #include #include #include -#include #include "MessageServer.hpp" @@ -13,6 +13,20 @@ class QAbstractItemModel; class QModelIndex; class QColor; class QAction; +class QListWidget; +class QFormLayout; +class QVBoxLayout; +class QHBoxLayout; +class QStackedLayout; +class QTableView; +class QLineEdit; +class QAbstractButton; +class QLabel; +class QCheckBox; +class QSpinBox; +class QFrame; +class QStatusBar; +class QDialogButtonBox; using Frequency = MessageServer::Frequency; @@ -25,16 +39,18 @@ public: explicit ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemModel * beacons_model , QString const& id, QString const& version, QString const& revision , QListWidget const * calls_of_interest, QWidget * parent = nullptr); + void dispose (); ~ClientWidget (); - bool fast_mode () const {return fast_mode_;} + bool fast_mode () const; Q_SLOT void update_status (QString const& id, Frequency f, QString const& mode, QString const& dx_call , QString const& report, QString const& tx_mode, bool tx_enabled - , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df + , bool transmitting, bool decoding, quint32 rx_df, quint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid , bool watchdog_timeout, QString const& sub_mode, bool fast_mode - , quint8 special_op_mode, QString const& configuration_name); + , quint8 special_op_mode, quint32 frequency_tolerance, quint32 tr_period + , QString const& configuration_name); Q_SLOT void decode_added (bool is_new, QString const& client_id, QTime, qint32 snr , float delta_time, quint32 delta_frequency, QString const& mode , QString const& message, bool low_confidence, bool off_air); @@ -45,6 +61,7 @@ public: Q_SLOT void decodes_cleared (QString const& client_id); Q_SIGNAL void do_clear_decodes (QString const& id, quint8 window = 0); + Q_SIGNAL void do_close (QString const& id); Q_SIGNAL void do_reply (QModelIndex const&, quint8 modifier); Q_SIGNAL void do_halt_tx (QString const& id, bool auto_only); Q_SIGNAL void do_free_text (QString const& id, QString const& text, bool); @@ -53,31 +70,38 @@ public: , QColor const& bg = QColor {}, QColor const& fg = QColor {} , bool last_only = false); Q_SIGNAL void switch_configuration (QString const& id, QString const& configuration_name); + Q_SIGNAL void configure (QString const& id, QString const& mode, quint32 frequency_tolerance + , QString const& submode, bool fast_mode, quint32 tr_period, quint32 rx_df + , QString const& dx_call, QString const& dx_grid, bool generate_messages); private: - - QString id_; - QListWidget const * calls_of_interest_; class IdFilterModel final : public QSortFilterProxyModel { public: - IdFilterModel (QString const& client_id); + IdFilterModel (QString const& client_id, QObject * = nullptr); void de_call (QString const&); - void rx_df (int); + void rx_df (quint32); QVariant data (QModelIndex const& proxy_index, int role = Qt::DisplayRole) const override; - - protected: + private: bool filterAcceptsRow (int source_row, QModelIndex const& source_parent) const override; - private: QString client_id_; QString call_; QRegularExpression base_call_re_; - int rx_df_; - } decodes_proxy_model_; + quint32 rx_df_; + }; + + void closeEvent (QCloseEvent *) override; + + QString id_; + bool done_; + QListWidget const * calls_of_interest_; + IdFilterModel decodes_proxy_model_; + IdFilterModel beacons_proxy_model_; + QAction * erase_action_; QAction * erase_rx_frequency_action_; QAction * erase_both_action_; @@ -85,18 +109,39 @@ private: QTableView * beacons_table_view_; QLineEdit * message_line_edit_; QLineEdit * grid_line_edit_; - QStackedLayout * decodes_stack_; + QAbstractButton * generate_messages_push_button_; QAbstractButton * auto_off_button_; QAbstractButton * halt_tx_button_; QLabel * de_label_; - QLabel * mode_label_; - bool fast_mode_; QLabel * frequency_label_; - QLabel * dx_label_; - QLabel * rx_df_label_; QLabel * tx_df_label_; QLabel * report_label_; QLineEdit * configuration_line_edit_; + QLineEdit * mode_line_edit_; + QSpinBox * frequency_tolerance_spin_box_; + QLabel * tx_mode_label_; + QLineEdit * submode_line_edit_; + QCheckBox * fast_mode_check_box_; + QSpinBox * tr_period_spin_box_; + QSpinBox * rx_df_spin_box_; + QLineEdit * dx_call_line_edit_; + QLineEdit * dx_grid_line_edit_; + QWidget * decodes_page_; + QWidget * beacons_page_; + QFrame * content_widget_; + QStatusBar * status_bar_; + QDialogButtonBox * control_button_box_; + + QFormLayout * form_layout_; + QHBoxLayout * horizontal_layout_; + QFormLayout * subform1_layout_; + QFormLayout * subform2_layout_; + QFormLayout * subform3_layout_; + QVBoxLayout * decodes_layout_; + QVBoxLayout * beacons_layout_; + QVBoxLayout * content_layout_; + QStackedLayout * decodes_stack_; + bool columns_resized_; }; diff --git a/UDPExamples/MessageAggregatorMainWindow.cpp b/UDPExamples/MessageAggregatorMainWindow.cpp index 34c674f2c..6245918a9 100644 --- a/UDPExamples/MessageAggregatorMainWindow.cpp +++ b/UDPExamples/MessageAggregatorMainWindow.cpp @@ -250,6 +250,7 @@ void MessageAggregatorMainWindow::add_client (QString const& id, QString const& connect (server_, &MessageServer::WSPR_decode, dock, &ClientWidget::beacon_spot_added); connect (server_, &MessageServer::decodes_cleared, dock, &ClientWidget::decodes_cleared); connect (dock, &ClientWidget::do_clear_decodes, server_, &MessageServer::clear_decodes); + connect (dock, &ClientWidget::do_close, server_, &MessageServer::close); connect (dock, &ClientWidget::do_reply, decodes_model_, &DecodesModel::do_reply); connect (dock, &ClientWidget::do_halt_tx, server_, &MessageServer::halt_tx); connect (dock, &ClientWidget::do_free_text, server_, &MessageServer::free_text); @@ -257,6 +258,7 @@ void MessageAggregatorMainWindow::add_client (QString const& id, QString const& connect (view_action, &QAction::toggled, dock, &ClientWidget::setVisible); connect (dock, &ClientWidget::highlight_callsign, server_, &MessageServer::highlight_callsign); connect (dock, &ClientWidget::switch_configuration, server_, &MessageServer::switch_configuration); + connect (dock, &ClientWidget::configure, server_, &MessageServer::configure); dock_widgets_[id] = dock; server_->replay (id); // request decodes and status } @@ -266,7 +268,7 @@ void MessageAggregatorMainWindow::remove_client (QString const& id) auto iter = dock_widgets_.find (id); if (iter != std::end (dock_widgets_)) { - (*iter)->close (); + (*iter)->dispose (); dock_widgets_.erase (iter); } } diff --git a/UDPExamples/UDPDaemon.cpp b/UDPExamples/UDPDaemon.cpp index 98ff49e6e..7caeb3038 100644 --- a/UDPExamples/UDPDaemon.cpp +++ b/UDPExamples/UDPDaemon.cpp @@ -51,7 +51,8 @@ public: , bool /*transmitting*/, bool /*decoding*/, qint32 /*rx_df*/, qint32 /*tx_df*/ , QString const& /*de_call*/, QString const& /*de_grid*/, QString const& /*dx_grid*/ , bool /* watchdog_timeout */, QString const& sub_mode, bool /*fast_mode*/ - , quint8 /*special_op_mode*/, QString const& /*configuration_name*/) + , quint8 /*special_op_mode*/, quint32 /*frequency_tolerance*/, quint32 /*tr_period*/ + , QString const& /*configuration_name*/) { if (id == id_) { diff --git a/widgets/RestrictedSpinBox.cpp b/widgets/RestrictedSpinBox.cpp index d3201b331..3d18ce488 100644 --- a/widgets/RestrictedSpinBox.cpp +++ b/widgets/RestrictedSpinBox.cpp @@ -17,3 +17,17 @@ QValidator::State RestrictedSpinBox::validate (QString& input, int& pos) const } return valid; } + +void RestrictedSpinBox::fixup (QString& input) const +{ + auto iter = std::lower_bound (values ().begin (), values ().end (), valueFromText (input)); + HintedSpinBox::fixup (input); + if (iter != values ().end ()) + { + input = textFromValue (*iter); + } + else + { + input = textFromValue (values ().back ()); + } +} diff --git a/widgets/RestrictedSpinBox.hpp b/widgets/RestrictedSpinBox.hpp index f856e90ce..e984c3770 100644 --- a/widgets/RestrictedSpinBox.hpp +++ b/widgets/RestrictedSpinBox.hpp @@ -20,6 +20,7 @@ public: protected: // override the base class validation QValidator::State validate (QString& input, int& pos) const override; + void fixup (QString& input) const override; }; #endif diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 529dab19d..b11e7f9bb 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -201,6 +202,7 @@ namespace QRegExp message_alphabet {"[- @A-Za-z0-9+./?#<>;]*"}; // grid exact match excluding RR73 QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; + auto quint32_max = std::numeric_limits::max (); bool message_is_73 (int type, QStringList const& msg_parts) { @@ -410,7 +412,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_config.udp_server_name (), m_config.udp_server_port (), this}}, psk_Reporter {new PSK_Reporter {m_messageClient, this}}, - m_manual {&m_network_manager} + m_manual {&m_network_manager}, + m_block_udp_status_updates {false} { ui->setupUi(this); setUnifiedTitleAndToolBarOnMac (true); @@ -501,6 +504,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, }); // Network message handlers + m_messageClient->enable (m_config.accept_udp_requests ()); connect (m_messageClient, &MessageClient::clear_decodes, [this] (quint8 window) { ++window; if (window & 1) @@ -513,54 +517,51 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, } }); connect (m_messageClient, &MessageClient::reply, this, &MainWindow::replyToCQ); + connect (m_messageClient, &MessageClient::close, this, &MainWindow::close); connect (m_messageClient, &MessageClient::replay, this, &MainWindow::replayDecodes); connect (m_messageClient, &MessageClient::location, this, &MainWindow::locationChange); connect (m_messageClient, &MessageClient::halt_tx, [this] (bool auto_only) { - if (m_config.accept_udp_requests ()) { - if (auto_only) { - if (ui->autoButton->isChecked ()) { - ui->autoButton->click(); - } - } else { - ui->stopTxButton->click(); + if (auto_only) { + if (ui->autoButton->isChecked ()) { + ui->autoButton->click(); } + } else { + ui->stopTxButton->click(); } }); connect (m_messageClient, &MessageClient::error, this, &MainWindow::networkError); connect (m_messageClient, &MessageClient::free_text, [this] (QString const& text, bool send) { - if (m_config.accept_udp_requests ()) { - tx_watchdog (false); - // send + non-empty text means set and send the free text - // message, !send + non-empty text means set the current free - // text message, send + empty text means send the current free - // text message without change, !send + empty text means clear - // the current free text message - if (0 == ui->tabWidget->currentIndex ()) { - if (!text.isEmpty ()) { - ui->tx5->setCurrentText (text); - } - if (send) { - ui->txb5->click (); - } else if (text.isEmpty ()) { - ui->tx5->setCurrentText (text); - } - } else if (1 == ui->tabWidget->currentIndex ()) { - if (!text.isEmpty ()) { - ui->freeTextMsg->setCurrentText (text); - } - if (send) { - ui->rbFreeText->click (); - } else if (text.isEmpty ()) { - ui->freeTextMsg->setCurrentText (text); - } + tx_watchdog (false); + // send + non-empty text means set and send the free text + // message, !send + non-empty text means set the current free + // text message, send + empty text means send the current free + // text message without change, !send + empty text means clear + // the current free text message + if (0 == ui->tabWidget->currentIndex ()) { + if (!text.isEmpty ()) { + ui->tx5->setCurrentText (text); + } + if (send) { + ui->txb5->click (); + } else if (text.isEmpty ()) { + ui->tx5->setCurrentText (text); + } + } else if (1 == ui->tabWidget->currentIndex ()) { + if (!text.isEmpty ()) { + ui->freeTextMsg->setCurrentText (text); + } + if (send) { + ui->rbFreeText->click (); + } else if (text.isEmpty ()) { + ui->freeTextMsg->setCurrentText (text); } - QApplication::alert (this); } + QApplication::alert (this); }); connect (m_messageClient, &MessageClient::highlight_callsign, ui->decodedTextBrowser, &DisplayText::highlight_callsign); - connect (m_messageClient, &MessageClient::switch_configuration, m_multi_settings, &MultiSettings::select_configuration); + connect (m_messageClient, &MessageClient::configure, this, &MainWindow::remote_configure); // Hook up WSPR band hopping connect (ui->band_hopping_schedule_push_button, &QPushButton::clicked @@ -711,6 +712,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, connect (&m_config, &Configuration::transceiver_failure, this, &MainWindow::handle_transceiver_failure); connect (&m_config, &Configuration::udp_server_changed, m_messageClient, &MessageClient::set_server); connect (&m_config, &Configuration::udp_server_port_changed, m_messageClient, &MessageClient::set_server_port); + connect (&m_config, &Configuration::accept_udp_requests_changed, m_messageClient, &MessageClient::enable); // set up configurations menu connect (m_multi_settings, &MultiSettings::configurationNameChanged, [this] (QString const& name) { @@ -905,20 +907,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, if(m_bFast9) m_bFastMode=true; ui->cbFast9->setChecked(m_bFast9 or m_bFastMode); - if(m_mode=="FT4") on_actionFT4_triggered(); - if(m_mode=="FT8") on_actionFT8_triggered(); - if(m_mode=="JT4") on_actionJT4_triggered(); - if(m_mode=="JT9") on_actionJT9_triggered(); - if(m_mode=="JT65") on_actionJT65_triggered(); - if(m_mode=="JT9+JT65") on_actionJT9_JT65_triggered(); - if(m_mode=="WSPR") on_actionWSPR_triggered(); - if(m_mode=="WSPR-LF") on_actionWSPR_LF_triggered(); - if(m_mode=="ISCAT") on_actionISCAT_triggered(); - if(m_mode=="MSK144") on_actionMSK144_triggered(); - if(m_mode=="QRA64") on_actionQRA64_triggered(); - if(m_mode=="Echo") on_actionEcho_triggered(); + set_mode (m_mode); if(m_mode=="Echo") monitor(false); //Don't auto-start Monitor in Echo mode. - if(m_mode=="FreqCal") on_actionFreqCal_triggered(); ui->sbSubmode->setValue (vhf ? m_nSubMode : 0); if(m_mode=="MSK144") { @@ -1762,19 +1752,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog bool b = vhf && (m_mode=="JT4" or m_mode=="JT65" or m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="MSK144" or m_mode=="QRA64"); if(b) VHF_features_enabled(b); - if(m_mode=="FT4") on_actionFT4_triggered(); - if(m_mode=="FT8") on_actionFT8_triggered(); - if(m_mode=="JT4") on_actionJT4_triggered(); - if(m_mode=="JT9") on_actionJT9_triggered(); - if(m_mode=="JT9+JT65") on_actionJT9_JT65_triggered(); - if(m_mode=="JT65") on_actionJT65_triggered(); - if(m_mode=="QRA64") on_actionQRA64_triggered(); - if(m_mode=="FreqCal") on_actionFreqCal_triggered(); - if(m_mode=="ISCAT") on_actionISCAT_triggered(); - if(m_mode=="MSK144") on_actionMSK144_triggered(); - if(m_mode=="WSPR") on_actionWSPR_triggered(); - if(m_mode=="WSPR-LF") on_actionWSPR_LF_triggered(); - if(m_mode=="Echo") on_actionEcho_triggered(); + set_mode (m_mode); if(b) VHF_features_enabled(b); m_config.transceiver_online (); @@ -7190,6 +7168,7 @@ void MainWindow::transmitDisplay (bool transmitting) void MainWindow::on_sbFtol_valueChanged(int value) { m_wideGraph->setTol (value); + statusUpdate (); } void::MainWindow::VHF_features_enabled(bool b) @@ -7227,6 +7206,7 @@ void MainWindow::on_sbTR_valueChanged(int value) if(m_transmitting) { on_stopTxButton_clicked(); } + statusUpdate (); } QChar MainWindow::current_submode () const @@ -7328,11 +7308,6 @@ void MainWindow::replyToCQ (QTime time, qint32 snr, float delta_time, quint32 de , QString const& mode, QString const& message_text , bool /*low_confidence*/, quint8 modifiers) { - if (!m_config.accept_udp_requests ()) - { - return; - } - QString format_string {"%1 %2 %3 %4 %5 %6"}; auto const& time_string = time.toString ("~" == mode || "&" == mode || "+" == mode ? "hhmmss" : "hhmm"); @@ -7901,8 +7876,18 @@ void MainWindow::on_cbCQTx_toggled(bool b) void MainWindow::statusUpdate () const { - if (!ui) return; + if (!ui || m_block_udp_status_updates) return; auto submode = current_submode (); + auto ftol = ui->sbFtol->value (); + if (!(ui->sbFtol->isVisible () && ui->sbFtol->isEnabled ())) + { + ftol = quint32_max; + } + auto tr_period = ui->sbTR->value (); + if (!(ui->sbTR->isVisible () && ui->sbTR->isEnabled ())) + { + tr_period = quint32_max; + } m_messageClient->status_update (m_freqNominal, m_mode, m_hisCall, QString::number (ui->rptSpinBox->value ()), m_modeTx, ui->autoButton->isChecked (), @@ -7912,7 +7897,7 @@ void MainWindow::statusUpdate () const m_hisGrid, m_tx_watchdog, submode != QChar::Null ? QString {submode} : QString {}, m_bFastMode, static_cast (m_config.special_op_id ()), - m_multi_settings->configuration_name ()); + ftol, tr_period, m_multi_settings->configuration_name ()); } void MainWindow::childEvent (QChildEvent * e) @@ -8754,3 +8739,79 @@ void MainWindow::on_pbBestSP_clicked() if(!m_bBestSPArmed) ui->pbBestSP->setStyleSheet (""); if(m_bBestSPArmed) m_dateTimeBestSP=QDateTime::currentDateTimeUtc(); } + +void MainWindow::set_mode (QString const& mode) +{ + if ("FT4" == mode) on_actionFT4_triggered (); + else if ("FT8" == mode) on_actionFT8_triggered (); + else if ("JT4" == mode) on_actionJT4_triggered (); + else if ("JT9" == mode) on_actionJT9_triggered (); + else if ("JT9+JT65" == mode) on_actionJT9_JT65_triggered (); + else if ("JT65" == mode) on_actionJT65_triggered (); + else if ("QRA64" == mode) on_actionQRA64_triggered (); + else if ("FreqCal" == mode) on_actionFreqCal_triggered (); + else if ("ISCAT" == mode) on_actionISCAT_triggered (); + else if ("MSK144" == mode) on_actionMSK144_triggered (); + else if ("WSPR" == mode) on_actionWSPR_triggered (); + else if ("WSPR-LF" == mode) on_actionWSPR_LF_triggered (); + else if ("Echo" == mode) on_actionEcho_triggered (); +} + +void MainWindow::remote_configure (QString const& mode, quint32 frequency_tolerance + , QString const& submode, bool fast_mode, quint32 tr_period, quint32 rx_df + , QString const& dx_call, QString const& dx_grid, bool generate_messages) +{ + if (mode.size ()) + { + set_mode (mode); + } + if (frequency_tolerance != quint32_max && ui->sbFtol->isVisible ()) + { + ui->sbFtol->setValue (frequency_tolerance); + } + if (submode.size () && ui->sbSubmode->isVisible ()) + { + ui->sbSubmode->setValue (submode.toUpper ().at (0).toLatin1 () - 'A'); + } + if (ui->cbFast9->isVisible () && ui->cbFast9->isChecked () != fast_mode) + { + ui->cbFast9->click (); + } + if (tr_period != quint32_max && ui->sbTR->isVisible ()) + { + ui->sbTR->setValue (tr_period); + ui->sbTR->interpretText (); + } + if (rx_df != quint32_max && ui->RxFreqSpinBox->isVisible ()) + { + m_block_udp_status_updates = true; + ui->RxFreqSpinBox->setValue (rx_df); + ui->RxFreqSpinBox->interpretText (); + m_block_udp_status_updates = false; + } + if (dx_call.size () && ui->dxCallEntry->isVisible ()) + { + ui->dxCallEntry->setText (dx_call); + } + if (dx_grid.size () && ui->dxGridEntry->isVisible ()) + { + ui->dxGridEntry->setText (dx_grid); + } + if (generate_messages && ui->genStdMsgsPushButton->isVisible ()) + { + ui->genStdMsgsPushButton->click (); + } + if (m_config.udpWindowToFront ()) + { + show (); + raise (); + activateWindow (); + } + if (m_config.udpWindowRestore () && isMinimized ()) + { + showNormal (); + raise (); + } + tx_watchdog (false); + QApplication::alert (this); +} diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index ca545ec35..514dbb30a 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -313,6 +313,9 @@ private slots: void on_pbBestSP_clicked(); int setTxMsg(int n); bool stdCall(QString const& w); + void remote_configure (QString const& mode, quint32 frequency_tolerance, QString const& submode + , bool fast_mode, quint32 tr_period, quint32 rx_df, QString const& dx_call + , QString const& dx_grid, bool generate_messages); private: Q_SIGNAL void initializeAudioOutputStream (QAudioDeviceInfo, @@ -339,6 +342,7 @@ private: Q_SIGNAL void toggleShorthand () const; private: + void set_mode (QString const& mode); void astroUpdate (); void writeAllTxt(QString message); void auto_sequence (DecodedText const& message, unsigned start_tolerance, unsigned stop_tolerance); @@ -680,6 +684,7 @@ private: QHash m_pwrBandTuneMemory; // Remembers power level by band for tuning QByteArray m_geometryNoControls; QVector m_phaseEqCoefficients; + bool m_block_udp_status_updates; //---------------------------------------------------- private functions void readSettings(); From adcf202637b36c19dbd9f989067d8fef175d4015 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 30 Jun 2019 12:17:17 +0100 Subject: [PATCH 356/367] Repair a crash when decoding ISCAT Passing a auto stack variable to a future is not a good idea as it will almost certainly go out of scope before the future has finished executing. --- lib/fast_decode.f90 | 7 ++++--- widgets/mainwindow.cpp | 5 ++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/fast_decode.f90 b/lib/fast_decode.f90 index eebb73108..c3cadb6a7 100644 --- a/lib/fast_decode.f90 +++ b/lib/fast_decode.f90 @@ -1,4 +1,4 @@ -subroutine fast_decode(id2,narg,ntrperiod,line,mycall_12, & +subroutine fast_decode(id2,narg,trperiod,line,mycall_12, & hiscall_12) parameter (NMAX=30*12000) @@ -6,6 +6,7 @@ subroutine fast_decode(id2,narg,ntrperiod,line,mycall_12, & integer*2 id2a(NMAX) integer*2 id2b(NMAX) integer narg(0:14) + double precision trperiod real dat(30*12000) complex cdat(262145),cdat2(262145) real psavg(450) @@ -41,7 +42,7 @@ subroutine fast_decode(id2,narg,ntrperiod,line,mycall_12, & nhashcalls=narg(12) line(1:100)(1:1)=char(0) - if(t0.gt.float(ntrperiod)) go to 900 + if(t0.gt.trperiod) go to 900 if(t0.gt.t1) go to 900 if(nmode.eq.102) then @@ -53,7 +54,7 @@ subroutine fast_decode(id2,narg,ntrperiod,line,mycall_12, & cdat2=cdat ndat=ndat0 call wav11(id2,ndat,dat) - nzz=11025*ntrperiod + nzz=11025*int(trperiod) !beware if fractional T/R period ever used here if(ndat.lt.nzz) dat(ndat+1:nzz)=0.0 ndat=min(ndat,30*11025) call ana932(dat,ndat,cdat,npts) !Make downsampled analytic signal diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b11e7f9bb..cf165d0df 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -147,7 +147,7 @@ extern "C" { float* level, float* sigdb, float* snr, float* dfreq, float* width); - void fast_decode_(short id2[], int narg[], int* ntrperiod, + void fast_decode_(short id2[], int narg[], double * trperiod, char msg[], char mycall[], char hiscall[], fortran_charlen_t, fortran_charlen_t, fortran_charlen_t); void degrade_snr_(short d2[], int* n, float* db, float* bandwidth); @@ -2965,10 +2965,9 @@ void MainWindow::decode() //decode() narg[12]=0; narg[13]=-1; narg[14]=m_config.aggressive(); - int nTRperiod=m_TRperiod; memcpy(d2b,dec_data.d2,2*360000); watcher3.setFuture (QtConcurrent::run (std::bind (fast_decode_,&d2b[0], - &narg[0],&nTRperiod,&m_msg[0][0], + &narg[0],&m_TRperiod,&m_msg[0][0], dec_data.params.mycall,dec_data.params.hiscall,8000,12,12))); } else { memcpy(to, from, qMin(mem_jt9->size(), size)); From 86c48cb49f3dfb7752a17b80a3ab06d98cd9878d Mon Sep 17 00:00:00 2001 From: sirhc808 Date: Mon, 1 Jul 2019 14:19:43 -0500 Subject: [PATCH 357/367] Update to use current version of Qt's CMake support --- CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index db716d464..a4511b84d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -860,10 +860,7 @@ message (STATUS "hamlib_LIBRARY_DIRS: ${hamlib_LIBRARY_DIRS}") # # Widgets finds its own dependencies. -find_package (Qt5Widgets 5 REQUIRED) -find_package (Qt5Multimedia 5 REQUIRED) -find_package (Qt5PrintSupport 5 REQUIRED) -find_package (Qt5Sql 5 REQUIRED) +find_package (Qt5 COMPONENTS Widgets Multimedia PrintSupport Sql REQUIRED) if (WIN32) add_definitions (-DQT_NEEDS_QTMAIN) From fa44ed84c52a05560f76deafd8864e43b3ae6966 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 3 Jul 2019 10:55:13 -0500 Subject: [PATCH 358/367] Remove an unused routine. Minor tweaks. --- CMakeLists.txt | 4 --- lib/ft4/averaged_mf.f90 | 64 -------------------------------------- lib/ft4/getcandidates4.f90 | 5 +-- lib/ft4_decode.f90 | 1 - 4 files changed, 1 insertion(+), 73 deletions(-) delete mode 100644 lib/ft4/averaged_mf.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index d5fbfb8f5..8f3cb28db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -391,7 +391,6 @@ set (wsjt_FSRCS lib/astro0.f90 lib/avecho.f90 lib/averms.f90 - lib/ft4/averaged_mf.f90 lib/azdist.f90 lib/badmsg.f90 lib/ft8/baseline.f90 @@ -1319,9 +1318,6 @@ target_link_libraries (msk144sim wsjt_fort wsjt_cxx) add_executable (ft4sim lib/ft4/ft4sim.f90 wsjtx.rc) target_link_libraries (ft4sim wsjt_fort wsjt_cxx) -add_executable (averaged_mf lib/ft4/averaged_mf.f90 wsjtx.rc) -target_link_libraries (averaged_mf wsjt_fort wsjt_cxx) - add_executable (ft4sim_mult lib/ft4/ft4sim_mult.f90 wsjtx.rc) target_link_libraries (ft4sim_mult wsjt_fort wsjt_cxx) diff --git a/lib/ft4/averaged_mf.f90 b/lib/ft4/averaged_mf.f90 deleted file mode 100644 index 2986572b3..000000000 --- a/lib/ft4/averaged_mf.f90 +++ /dev/null @@ -1,64 +0,0 @@ -program averaged_mf - - parameter (nsps=32) - complex cgfsk(3*nsps,64) - complex clin(3*nsps,64) - complex cavg(3*nsps,4) - complex cavl(3*nsps,4) - real pulse(3*nsps) - real dphi(3*nsps) - - do i=1,3*NSPS - t=(i-1.5*nsps)/real(nsps) - pulse(i)=gfsk_pulse(1.0,t) - enddo - - twopi=8.0*atan(1.0) - hmod=1.0 - dphi_peak=twopi*hmod/real(nsps) - - do iwf=1,64 - i0=mod((iwf-1)/16,4) - i1=mod((iwf-1)/4,4) - i2=mod(iwf-1,4) - dphi=0.0 - dphi(1:64)=dphi_peak*pulse(33:96)*i1 - dphi(1:96)=dphi(1:96)+dphi_peak*pulse(1:96)*i0 - dphi(33:96)=dphi(33:96)+dphi_peak*pulse(1:64)*i2 - phi=0.0 - do j=1,96 - cgfsk(j,iwf)=cmplx(cos(phi),sin(phi)) - phi=mod(phi+dphi(j),twopi) - enddo - cgfsk(:,iwf)=cgfsk(:,iwf)*conjg(cgfsk(48,iwf)) - enddo - - do iwf=1,64 - i0=mod((iwf-1)/16,4) - i1=mod((iwf-1)/4,4) - i2=mod(iwf-1,4) - dphi=0.0 - dphi(1:32)=dphi_peak*i1 - dphi(33:64)=dphi_peak*i0 - dphi(65:96)=dphi_peak*i2 - phi=0.0 - do j=1,96 - clin(j,iwf)=cmplx(cos(phi),sin(phi)) - phi=mod(phi+dphi(j),twopi) - enddo - enddo - - - do i=1,4 - ib=(i-1)*16+1 - ie=ib+15 - cavg(:,i)=sum(cgfsk(:,ib:ie),2)/16.0 - cavl(:,i)=sum(clin(:,ib:ie),2)/16.0 - do j=1,96 -write(*,*) j -write(21,*) i,j,real(cavg(j,i)),imag(cavg(j,i)),real(cavl(j,i)),imag(cavl(j,i)) - enddo - enddo - -end program averaged_mf - diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index e9860b7a7..3f62e8141 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -10,7 +10,6 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & complex cx(0:NH1) real candidate(2,maxcand),candidatet(2,maxcand) real dd(NMAX) - integer ipk(1) equivalence (x,cx) logical first data first/.true./ @@ -33,9 +32,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & if(ib.gt.NMAX) exit x=fac*dd(ia:ib)*window call four2a(x,NFFT1,1,-1,0) !r2c FFT - do i=1,NH1 - s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 - enddo + s(1:NH1,j)=abs(cx(1:NH1))**2 savg=savg + s(1:NH1,j) !Average spectrum enddo savg=savg/NHSYM diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index 1fd60efa6..c60ee179a 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -34,7 +34,6 @@ contains character message*37,msgsent*37 character c77*77 character*37 decodes(100) - character*512 data_dir,fname character*17 cdatetime0 character*12 mycall,hiscall character*12 mycall0,hiscall0 From ced74644fdb75d262e44a1241c14c8059eda887a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 9 Jul 2019 14:59:34 -0400 Subject: [PATCH 359/367] On startup or switching to QRA64 mode, set Tx and Rx audio freqs to 1000 Hz. --- widgets/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index cf165d0df..ec591ff86 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5983,6 +5983,8 @@ void MainWindow::on_actionQRA64_triggered() ui->sbSubmode->setValue(m_nSubMode); ui->actionInclude_averaging->setVisible (false); ui->actionInclude_correlation->setVisible (false); + ui->RxFreqSpinBox->setValue(1000); + ui->TxFreqSpinBox->setValue(1000); QString fname {QDir::toNativeSeparators(m_config.temp_dir ().absoluteFilePath ("red.dat"))}; m_wideGraph->setRedFile(fname); displayWidgets(nWidgets("111110010010111110000000001000000")); From 2d3952073cfe99d4344a73587822985064af6355 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 12 Jul 2019 10:45:25 -0400 Subject: [PATCH 360/367] Additions to "New in Version 2.1.0" in the User Guide. --- doc/user_guide/en/new_features.adoc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index de5c34ff0..8a638b9a9 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -4,8 +4,12 @@ The most important feature added to _WSJT-X_ since Version 2.0.1 is the new *FT4 protocol*, designed especially for radio contesting. It has T/R sequence length 7.5 s, bandwidth 80 Hz, and threshold sensitivity -17.5 dB. Version 2.1.0 also has improvements to FT8 -waveform generation, contest logging, rig control, the user interface, -and accessibility, as well as a number of bug fixes. +waveform generation, waterfall and spectrum display, contest logging, +rig control, the user interface, UDP messaging for inter-program +communication, and accessibility, as well as a number of more minor +enhancements and bug fixes. We now provide a separate installation +package for 64-bit Windows 7 and later, offering significant +improvements in decoding speed. === Documentation Conventions From 5b34a6f46be57b46206113a3e041364271cf74ae Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 12 Jul 2019 10:49:23 -0400 Subject: [PATCH 361/367] Tweak User guide wording. --- doc/user_guide/en/new_features.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index 8a638b9a9..5f7b9ac1a 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -5,7 +5,7 @@ the new *FT4 protocol*, designed especially for radio contesting. It has T/R sequence length 7.5 s, bandwidth 80 Hz, and threshold sensitivity -17.5 dB. Version 2.1.0 also has improvements to FT8 waveform generation, waterfall and spectrum display, contest logging, -rig control, the user interface, UDP messaging for inter-program +rig control, user interface, UDP messaging for inter-program communication, and accessibility, as well as a number of more minor enhancements and bug fixes. We now provide a separate installation package for 64-bit Windows 7 and later, offering significant From 69dd0f4c906ab86a94450a2e9b4e9d7bbfdf2601 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 12 Jul 2019 11:07:29 -0400 Subject: [PATCH 362/367] Another User Guide tweak. --- doc/user_guide/en/new_features.adoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index 5f7b9ac1a..10f7ca9fb 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -5,11 +5,11 @@ the new *FT4 protocol*, designed especially for radio contesting. It has T/R sequence length 7.5 s, bandwidth 80 Hz, and threshold sensitivity -17.5 dB. Version 2.1.0 also has improvements to FT8 waveform generation, waterfall and spectrum display, contest logging, -rig control, user interface, UDP messaging for inter-program -communication, and accessibility, as well as a number of more minor -enhancements and bug fixes. We now provide a separate installation -package for 64-bit Windows 7 and later, offering significant -improvements in decoding speed. +rig control, the user interface, keyboard shortcuts, UDP messaging for +inter-program communication, and accessibility, as well as a number of +more minor enhancements and bug fixes. We now provide a separate +installation package for 64-bit Windows 7 and later, offering +significant improvements in decoding speed. === Documentation Conventions From fb6e2861c09e97c706d5ba58c14ff2d8f88e814f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 12 Jul 2019 11:19:23 -0400 Subject: [PATCH 363/367] Windows Vista and later, for 64-bit package. --- Release_Notes.txt | 21 +++++++++++++++++++++ doc/user_guide/en/new_features.adoc | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Release_Notes.txt b/Release_Notes.txt index ed4ab7d92..0484dd604 100644 --- a/Release_Notes.txt +++ b/Release_Notes.txt @@ -12,6 +12,27 @@ Copyright 2001 - 2019 by Joe Taylor, K1JT. + Release: WSJT-X 2.1 + July 15, 2019 + ------------------- + +WSJT-X 2.1 is a major update that introduces FT4, a new protocol +targeted at HF contesting. Other improvements have been made in the +following areas: + + - FT8 waveform generated with GMSK, fully backward compatible + - user options for waterfall and spectrum display + - contest logging + - rig control + - user interface + - UDP messaging for inter-program communication + - accessibility + +There are numerous minor enhancements and bug fixes. + +We now provide a separate installation package for 64-bit Windows 7 +and later, with significant improvements in decoding speed. + Release: WSJT-X 2.1.0-rc7 June 3, 2019 ------------------------- diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index 10f7ca9fb..d940c1cc3 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -8,7 +8,7 @@ waveform generation, waterfall and spectrum display, contest logging, rig control, the user interface, keyboard shortcuts, UDP messaging for inter-program communication, and accessibility, as well as a number of more minor enhancements and bug fixes. We now provide a separate -installation package for 64-bit Windows 7 and later, offering +installation package for 64-bit Windows Vista and later, offering significant improvements in decoding speed. === Documentation Conventions From f224790569cabec8479ed0d2e49052b0fa7110ac Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Fri, 12 Jul 2019 10:41:09 -0500 Subject: [PATCH 364/367] Tweak for consistency. --- lib/ft8/subtractft8.f90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ft8/subtractft8.f90 b/lib/ft8/subtractft8.f90 index 200139a2b..ec0beea9a 100644 --- a/lib/ft8/subtractft8.f90 +++ b/lib/ft8/subtractft8.f90 @@ -20,12 +20,11 @@ subroutine subtractft8(dd,itone,f0,dt) save first nstart=dt*12000+1 -! call genft8refsig(itone,cref,f0) nsym=79 nsps=1920 fs=12000.0 icmplx=1 - bt=4.0 ! Temporary compromise? + bt=2.0 call gen_ft8wave(itone,nsym,nsps,bt,fs,f0,cref,xjunk,icmplx,NFRAME) camp=0. do i=1,nframe From 69bd2e1256a0f97af1c0be99ba91ecfd831d85ff Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 13 Jul 2019 22:37:10 +0100 Subject: [PATCH 365/367] Updated AD1C cty.dat, Big CTY June 30th 2019 --- cty.dat | 1380 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 697 insertions(+), 683 deletions(-) diff --git a/cty.dat b/cty.dat index b1b8c2789..12882421d 100644 --- a/cty.dat +++ b/cty.dat @@ -640,9 +640,9 @@ Fed. Rep. of Germany: 14: 28: EU: 51.00: -10.00: -1.0: DL: =DL0MCM/LH,=DL0MFH/LGT,=DL0MFH/LH,=DL0MFK/LGT,=DL0MFK/LH,=DL0MFN/LH,=DL0MHR/LH,=DL0NH/LH, =DL0PAS/LH,=DL0PBS/LH,=DL0PJ/LH,=DL0RSH/LH,=DL0RUG/LGT,=DL0RUG/LH,=DL0RWE/LH,=DL0SH/LH,=DL0SY/LH, =DL0TO/LH,=DL0UEM/LH,=DL0YLM/LH,=DL1BSN/LH,=DL1DUT/LH,=DL1ELU/LH,=DL1HZM/YL,=DL1SKK/LH,=DL2FCA/YL, - =DL2RPS/LH,=DL3ANK/LH,=DL3KWR/YL,=DL3KZA/LH,=DL3RNZ/LH,=DL4ABB/LH,=DL5CX/LH,=DL5KUA/LH,=DL5SE/LH, - =DL65DARC/LH,=DL6ABN/LH,=DL6AP/LH,=DL6KWN/LH,=DL7ANC/LH,=DL7BMG/LH,=DL7MFK/LH,=DL7UVO/LH, - =DL7VDX/LH,=DL8HK/YL,=DL8MTG/LH,=DL8TG/LV,=DL8UAA/FF,=DL9CU/LH,=DL9NEI/ND2N,=DL9OE/LH, + =DL2RPS/LH,=DL3ANK/LH,=DL3JJ/LH,=DL3KWR/YL,=DL3KZA/LH,=DL3RNZ/LH,=DL4ABB/LH,=DL5CX/LH,=DL5KUA/LH, + =DL5SE/LH,=DL65DARC/LH,=DL6ABN/LH,=DL6AP/LH,=DL6KWN/LH,=DL7ANC/LH,=DL7BMG/LH,=DL7MFK/LH, + =DL7UVO/LH,=DL7VDX/LH,=DL8HK/YL,=DL8MTG/LH,=DL8TG/LV,=DL8UAA/FF,=DL9CU/LH,=DL9NEI/ND2N,=DL9OE/LH, =DL9SEP/P/LH,=DM2C/LH,=DM3B/LH,=DM3G/LH,=DM3KF/LH,=DM5C/LH,=DM5JBN/LH,=DN0AWG/LH,=DN4MB/LH, =DN8RLS/YL,=DO1EEW/YL,=DO1OMA/LH,=DO5MCL/LH,=DO5MCL/YL,=DO6KDS/LH,=DO6UVM/LH,=DO7DC/LH,=DO7RKL/LH, =DQ4M/LH,=DQ4M/LT,=DR100MF/LS,=DR3M/LH,=DR4W/FF,=DR4X/LH,=DR9Z/LH; @@ -669,14 +669,15 @@ Spain: 14: 37: EU: 40.37: 4.88: -1.0: EA: AM,AN,AO,EA,EB,EC,ED,EE,EF,EG,EH,=AN92EXPO,=EF6,=EG90IARU, =AM1TDH/LH,=EA1APV/LH,=EA1BEY/Y,=EA1EEY/L,=EA1EEY/LGT,=EA1EEY/LH,=EA1EK/ZAP,=EA1FGS/LH,=EA1HLW/YL, =EA1RCG/CPV,=EA1RCG/SEU,=EA1RCG/YOA,=EA1RCI/CA,=EA1RCI/CR,=EA1RCI/CVG,=EA1RCI/ESM,=EA1RCI/IA, - =EA1RCI/ICA,=EA1RCI/JBN,=EA1RCI/PAZ,=EA1RCI/PCV,=EA1RCI/RSM,=EA1RCI/YOA,=EA1URL/CVL,=EA1URO/D, - =EA5AER/P,=EA6QB/1,=EA8BFH/1,=EA8CZT/1,=EA8FC/1,=EA8RV/P,=EA9CD/1,=EA9CI/1,=EA9CP/1,=EA9PD/1, - =EB1DH/LH,=ED1IRM/LH,=EG1ILW/LH,=EG1LWC/LH,=EG1LWI/LH,=EG1LWN/LH,=EG1TDH/LH,=EG90IARU/1, + =EA1RCI/ICA,=EA1RCI/JBN,=EA1RCI/KD,=EA1RCI/PAZ,=EA1RCI/PCV,=EA1RCI/RSM,=EA1RCI/YOA,=EA1URL/CVL, + =EA1URO/D,=EA1URO/KD,=EA5AER/P,=EA6QB/1,=EA8BFH/1,=EA8CZT/1,=EA8FC/1,=EA8RV/P,=EA9CD/1,=EA9CI/1, + =EA9CP/1,=EA9PD/1,=EB1DH/LH,=ED1IRM/LH,=EG1ILW/LH,=EG1LWC/LH,=EG1LWI/LH,=EG1LWN/LH,=EG1TDH/LH, + =EG90IARU/1, =AM08ATU/H,=AM08CAZ/H,=AM08CYQ/H,=AM08EIE/Z,=AM08FAC/H,=AN08ADE/H,=AO08BQH/Z,=AO08BTM/Z, =AO08CIK/H,=AO08CVV/Z,=AO08CXK/H,=AO08CYL/H,=AO08DI/Z,=AO08EIE/Z,=AO08HV/Z,=AO08ICA/Z,=AO08ID/Z, =AO08KJ/Z,=AO08KV/Z,=AO08OK/H,=AO08PB/Z,=AO08RKO/H,=AO08VK/Z,=AO2016DSS/LH,=EA2/ON7RU/LH, - =EA2CRX/LH,=EA2EZ/P,=EA2SPS/LH,=EA2URI/O,=EA6SK/2,=EA9CP/2,=EG90IARU/2, - =EA3ESZ/Z,=EA3EVR/R,=EA3HSD/P,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3, + =EA2CRX/LH,=EA2SPS/LH,=EA2URI/O,=EA6SK/2,=EA9CP/2,=EG90IARU/2, + =EA2EZ/P,=EA3ESZ/Z,=EA3EVR/R,=EA3HSD/P,=EA3LD/D,=EA3RCV/PAZ,=EA6LU/3,=EA8TL/3,=EA9CI/3,=EA9CP/3, =EG90IARU/3, =EA4AAQ/O,=EA4RCH/CIE,=EA6AFU/4,=EA6RC/4,=EA8BFH/4,=EA8BY/4,=EA9CI/4,=EA9CP/4,=EG8AOP/4, =EG90IARU/4, @@ -779,7 +780,7 @@ Marquesas Islands: 31: 63: OC: -8.92: 140.07: 9.5: FO/m: =FO/AC4LN/M,=FO/DJ7RJ,=FO/DL5XU,=FO/F6BFH/P,=FO/F6COW,=FO/F6EPY,=FO/F6GNZ,=FO/HA9G,=FO/IZ2ZTQ, =FO/JA0SC,=FO/JI1WTF,=FO/KA7OQQ,=FO/N7WLR,=FO/OH1RX,=FO/ON4AXU,=FO/ON4AXU/M,=FO/SP9FIH,=FO/W6TLD, =FO0ELY,=FO0POM,=FO0TOH,=FO5QS/M,=FO8RZ/P,=K7ST/FO,=TX0SIX,=TX4PG,=TX5A,=TX5SPM,=TX5VT,=TX7EU, - =TX7G,=TX7M; + =TX7G,=TX7M,=TX7T; St. Pierre & Miquelon: 05: 09: NA: 46.77: 56.20: 3.0: FP: FP,=TO200SPM,=TO2U,=TO5FP; Reunion Island: 39: 53: AF: -21.12: -55.48: -4.0: FR: @@ -823,50 +824,50 @@ Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI: 2I,GI,GN,MI,MN,=2O0BAD,=2O0HBO,=2O0HRV,=2O0MFB,=2O0TWA,=2O0VEP,=2O0VGW,=2O0VIM,=2O0WAI,=2O0ZXM, =2Q0BSA,=2Q0ETB,=2Q0HRV,=2Q0MFB,=2Q0NIE,=2Q0SXG,=2Q0TWA,=2Q0VEP,=2Q0VIM,=2Q0ZXM,=2R0IRZ,=2R0IRZ/P, =2R0KPY,=2R0KYE,=2R0MFB,=2R0PTX,=2R0RMD,=2R0RVH,=2R0TCA,=2R0TMR,=2R0VAX,=2R0VEP,=2R0VIM,=2R0WAI, - =2R0WMN,=2V0CSB,=GB0ARM,=GB0AS,=GB0ATM,=GB0AVB,=GB0BIG,=GB0BMS,=GB0BPM,=GB0BTC,=GB0BVC,=GB0C, - =GB0CAS,=GB0CBS,=GB0COA,=GB0CSC,=GB0DDF,=GB0EBG,=GB0EG,=GB0FMF,=GB0FMH,=GB0GDI,=GB0GLS,=GB0GPF, - =GB0KKM,=GB0LNR,=GB0LSP,=GB0LVA,=GB0MAH,=GB0MAR,=GB0MFD,=GB0PAT,=GB0PSM,=GB0REL,=GB0RSL,=GB0SBG, - =GB0SPD,=GB0TCH,=GB0TGN,=GB0USR,=GB0VC,=GB0WOA,=GB100BOS,=GB100RNR,=GB106TBC,=GB150WCB,=GB16SW, - =GB1918EKN,=GB19CGI,=GB19CNI,=GB1AFP,=GB1BPM,=GB1DDG,=GB1IMD,=GB1RM,=GB1ROC,=GB1SPD,=GB1SRI, - =GB1UAS,=GB1WWC,=GB2AD,=GB2AD/P,=GB2AS,=GB2BCW,=GB2BDS,=GB2BOA,=GB2CA,=GB2CRU,=GB2DCI,=GB2DMR, - =GB2DPC,=GB2IL,=GB2LL,=GB2LOL,=GB2MAC,=GB2MRI,=GB2PP,=GB2PSW,=GB2REL,=GB2SDD,=GB2SPD,=GB2SPR, - =GB2STI,=GB2STP,=GB2SW,=GB2UAS,=GB3NGI,=GB4CSC,=GB4CTL,=GB4ONI,=GB4PS,=GB4SOS,=GB4SPD,=GB4UAS, - =GB50AAD,=GB50CSC,=GB5BIG,=GB5BL,=GB5BL/LH,=GB5DPR,=GB5OMU,=GB5SPD,=GB6EPC,=GB6VCB,=GB8BKY, - =GB8BRM,=GB8DS,=GB8EGT,=GB8GLM,=GB8ROC,=GB8SPD,=GB90RSGB/82,=GB90SOM,=GB9RAF,=GB9SPD,=GN0LIX/LH, - =GN4GTY/LH,=GO0AQD,=GO0BJH,=GO0DUP,=GO3KVD,=GO3MMF,=GO3SG,=GO4DOH,=GO4GID,=GO4GUH,=GO4LKG,=GO4NKB, - =GO4ONL,=GO4OYM,=GO4SRQ,=GO4SZW,=GO6MTL,=GO7AXB,=GO7KMC,=GO8YYM,=GQ0AQD,=GQ0BJG,=GQ0NCA,=GQ0RQK, - =GQ0TJV,=GQ0UVD,=GQ1CET,=GQ3KVD,=GQ3MMF,=GQ3SG,=GQ3UZJ,=GQ3XRQ,=GQ4DOH,=GQ4GID,=GQ4GUH,=GQ4JTF, - =GQ4LKG,=GQ4LXL,=GQ4NKB,=GQ4ONL,=GQ4OYM,=GQ4SZW,=GQ6JPO,=GQ6MTL,=GQ7AXB,=GQ7JYK,=GQ7KMC,=GQ8RQI, - =GQ8YYM,=GR0BJH,=GR0BRO,=GR0DVU,=GR0RQK,=GR0RWO,=GR0UVD,=GR1CET,=GR3GTR,=GR3KDR,=GR3SG,=GR3WEM, - =GR4AAM,=GR4DHW,=GR4DOH,=GR4FUE,=GR4FUM,=GR4GID,=GR4GOS,=GR4GUH,=GR4KQU,=GR4LXL,=GR4NKB,=GR6JPO, - =GR7AXB,=GR7KMC,=GR8RKC,=GR8RQI,=GR8YYM,=GV1BZT,=GV3KVD,=GV3SG,=GV4FUE,=GV4GUH,=GV4JTF,=GV4LXL, - =GV4SRQ,=GV4WVN,=GV7AXB,=GV7THH,=MI5AFK/2K,=MN0NID/LH,=MO0ALS,=MO0BDZ,=MO0CBH,=MO0IOU,=MO0IRZ, - =MO0JFC,=MO0JFC/P,=MO0JML,=MO0JST,=MO0KYE,=MO0LPO,=MO0MOD,=MO0MOD/P,=MO0MSR,=MO0MVP,=MO0RRE, - =MO0RUC,=MO0RYL,=MO0TGO,=MO0VAX,=MO0ZXZ,=MO3RLA,=MO6AOX,=MO6NIR,=MO6TUM,=MO6WAG,=MO6WDB,=MO6YDR, - =MQ0ALS,=MQ0BDZ,=MQ0BPB,=MQ0GGB,=MQ0IRZ,=MQ0JFC,=MQ0JST,=MQ0KAM,=MQ0KYE,=MQ0MOD,=MQ0MSR,=MQ0MVP, - =MQ0RMD,=MQ0RRE,=MQ0RUC,=MQ0RYL,=MQ0TGO,=MQ0VAX,=MQ0ZXZ,=MQ3GHW,=MQ3RLA,=MQ3STV,=MQ5AFK,=MQ6AOX, - =MQ6BJG,=MQ6GDN,=MQ6WAG,=MQ6WDB,=MQ6WGM,=MR0GDO,=MR0GGB,=MR0JFC,=MR0KQU,=MR0LPO,=MR0MOD,=MR0MSR, - =MR0MVP,=MR0RUC,=MR0SAI,=MR0SMK,=MR0TFK,=MR0TLG,=MR0TMW,=MR0VAX,=MR0WWB,=MR1CCU,=MR3RLA,=MR3TFF, - =MR3WHM,=MR5AMO,=MR6CCU,=MR6CWC,=MR6GDN,=MR6MME,=MR6MRJ,=MR6OKS,=MR6OLA,=MR6PUX,=MR6WAG,=MR6XGZ, - =MV0ALS,=MV0GGB,=MV0IOU,=MV0JFC,=MV0JLC,=MV0MOD,=MV0MSR,=MV0MVP,=MV0TGO,=MV0VAX,=MV0WGM,=MV0ZAO, - =MV1VOX,=MV6DTE,=MV6GTY,=MV6NIR,=MV6TLG; + =2R0WMN,=2V0CSB,=GB0ARM,=GB0AS,=GB0AVB,=GB0BIG,=GB0BMS,=GB0BPM,=GB0BTC,=GB0BVC,=GB0C,=GB0CAS, + =GB0CBS,=GB0COA,=GB0CSC,=GB0DDF,=GB0EBG,=GB0EG,=GB0FMF,=GB0FMH,=GB0GDI,=GB0GLS,=GB0GPF,=GB0KKM, + =GB0LNR,=GB0LSP,=GB0LVA,=GB0MAH,=GB0MAR,=GB0MFD,=GB0PAT,=GB0PSM,=GB0REL,=GB0RSL,=GB0SBG,=GB0SPD, + =GB0TCH,=GB0TGN,=GB0USR,=GB0VC,=GB0WOA,=GB100BOS,=GB100RNR,=GB106TBC,=GB150WCB,=GB16SW,=GB1918EKN, + =GB19CGI,=GB19CNI,=GB1AFP,=GB1BPM,=GB1DDG,=GB1IMD,=GB1RM,=GB1ROC,=GB1SPD,=GB1SRI,=GB1UAS,=GB1WWC, + =GB2AD,=GB2AD/P,=GB2AS,=GB2BCW,=GB2BDS,=GB2BOA,=GB2CA,=GB2CRU,=GB2DCI,=GB2DMR,=GB2DPC,=GB2IL, + =GB2LL,=GB2LOL,=GB2MAC,=GB2MRI,=GB2PP,=GB2PSW,=GB2REL,=GB2SDD,=GB2SPD,=GB2SPR,=GB2STI,=GB2STP, + =GB2SW,=GB2UAS,=GB3NGI,=GB4CSC,=GB4CTL,=GB4ONI,=GB4PS,=GB4SOS,=GB4SPD,=GB4UAS,=GB50AAD,=GB50CSC, + =GB5BIG,=GB5BL,=GB5BL/LH,=GB5DPR,=GB5OMU,=GB5SPD,=GB6EPC,=GB6VCB,=GB8BKY,=GB8BRM,=GB8DS,=GB8EGT, + =GB8GLM,=GB8ROC,=GB8SPD,=GB90RSGB/82,=GB90SOM,=GB9RAF,=GB9SPD,=GN0LIX/LH,=GN4GTY/LH,=GO0AQD, + =GO0BJH,=GO0DUP,=GO3KVD,=GO3MMF,=GO3SG,=GO4DOH,=GO4GID,=GO4GUH,=GO4LKG,=GO4NKB,=GO4ONL,=GO4OYM, + =GO4SRQ,=GO4SZW,=GO6MTL,=GO7AXB,=GO7KMC,=GO8YYM,=GQ0AQD,=GQ0BJG,=GQ0NCA,=GQ0RQK,=GQ0TJV,=GQ0UVD, + =GQ1CET,=GQ3KVD,=GQ3MMF,=GQ3SG,=GQ3UZJ,=GQ3XRQ,=GQ4DOH,=GQ4GID,=GQ4GUH,=GQ4JTF,=GQ4LKG,=GQ4LXL, + =GQ4NKB,=GQ4ONL,=GQ4OYM,=GQ4SZW,=GQ6JPO,=GQ6MTL,=GQ7AXB,=GQ7JYK,=GQ7KMC,=GQ8RQI,=GQ8YYM,=GR0BJH, + =GR0BRO,=GR0DVU,=GR0RQK,=GR0RWO,=GR0UVD,=GR1CET,=GR3GTR,=GR3KDR,=GR3SG,=GR3WEM,=GR4AAM,=GR4DHW, + =GR4DOH,=GR4FUE,=GR4FUM,=GR4GID,=GR4GOS,=GR4GUH,=GR4KQU,=GR4LXL,=GR4NKB,=GR6JPO,=GR7AXB,=GR7KMC, + =GR8RKC,=GR8RQI,=GR8YYM,=GV1BZT,=GV3KVD,=GV3SG,=GV4FUE,=GV4GUH,=GV4JTF,=GV4LXL,=GV4SRQ,=GV4WVN, + =GV7AXB,=GV7THH,=MI5AFK/2K,=MN0NID/LH,=MO0ALS,=MO0BDZ,=MO0CBH,=MO0IOU,=MO0IRZ,=MO0JFC,=MO0JFC/P, + =MO0JML,=MO0JST,=MO0KYE,=MO0LPO,=MO0MOD,=MO0MOD/P,=MO0MSR,=MO0MVP,=MO0RRE,=MO0RUC,=MO0RYL,=MO0TGO, + =MO0VAX,=MO0ZXZ,=MO3RLA,=MO6AOX,=MO6NIR,=MO6TUM,=MO6WAG,=MO6WDB,=MO6YDR,=MQ0ALS,=MQ0BDZ,=MQ0BPB, + =MQ0GGB,=MQ0IRZ,=MQ0JFC,=MQ0JST,=MQ0KAM,=MQ0KYE,=MQ0MOD,=MQ0MSR,=MQ0MVP,=MQ0RMD,=MQ0RRE,=MQ0RUC, + =MQ0RYL,=MQ0TGO,=MQ0VAX,=MQ0ZXZ,=MQ3GHW,=MQ3RLA,=MQ3STV,=MQ5AFK,=MQ6AOX,=MQ6BJG,=MQ6GDN,=MQ6WAG, + =MQ6WDB,=MQ6WGM,=MR0GDO,=MR0GGB,=MR0JFC,=MR0KQU,=MR0LPO,=MR0MOD,=MR0MSR,=MR0MVP,=MR0RUC,=MR0SAI, + =MR0SMK,=MR0TFK,=MR0TLG,=MR0TMW,=MR0VAX,=MR0WWB,=MR1CCU,=MR3RLA,=MR3TFF,=MR3WHM,=MR5AMO,=MR6CCU, + =MR6CWC,=MR6GDN,=MR6MME,=MR6MRJ,=MR6OKS,=MR6OLA,=MR6PUX,=MR6WAG,=MR6XGZ,=MV0ALS,=MV0GGB,=MV0IOU, + =MV0JFC,=MV0JLC,=MV0MOD,=MV0MSR,=MV0MVP,=MV0TGO,=MV0VAX,=MV0WGM,=MV0ZAO,=MV1VOX,=MV6DTE,=MV6GTY, + =MV6NIR,=MV6TLG; Jersey: 14: 27: EU: 49.22: 2.18: 0.0: GJ: 2J,GH,GJ,MH,MJ,=2R0ODX,=GB0JSA,=GB19CJ,=GB2BYL,=GB2JSA,=GB50JSA,=GB5OJR,=GB8LMI,=GJ3DVC/L, =GJ6WRI/LH,=GJ8PVL/LH,=GO8PVL,=GQ8PVL,=GR6TMM,=MO0ASP,=MQ0ASP,=MR0ASP,=MR0RZD,=MV0ASP; Shetland Islands: 14: 27: EU: 60.50: 1.50: 0.0: *GM/s: =2M0BDR,=2M0BDT,=2M0CPN,=2M0GFC,=2M0SEG,=2M0SPX,=2M0VIK,=2M0ZET,=2M1ANT,=2M1ASQ,=2M1ODL,=G0FBJ, - =GB0BL,=GB100ZET,=GB2AES,=GB2CAS,=GB2ELH,=GB2ELH/LH,=GB2HMC,=GB2IGS,=GB2LHI,=GB2NBC,=GB2QM,=GB2SB, - =GB2SLH,=GB2SR,=GB2SUM,=GB2WG,=GB3LER,=GB3LER/B,=GB4LER,=GM0AVR,=GM0CXQ,=GM0CYJ,=GM0DJI,=GM0EKM, - =GM0GFL,=GM0GFL/P,=GM0ILB,=GM0JDB,=GM0VFA,=GM1BYL,=GM1CBQ,=GM1FGN,=GM1KKI,=GM1MXN,=GM1ZNR,=GM3KLA, - =GM3KZH,=GM3RFR,=GM3SJA,=GM3SKN,=GM3TXF/P,=GM3WCH,=GM3WHT,=GM3ZET,=GM3ZXH,=GM4AFF/P,=GM4AGX, - =GM4CHX/P,=GM4ENK,=GM4FNE,=GM4GPN,=GM4GPP,=GM4GQD,=GM4GQM,=GM4IPK,=GM4JPI,=GM4LBE,=GM4LER,=GM4PXG, - =GM4S,=GM4SLV,=GM4SSA,=GM4WXQ,=GM4ZHL,=GM6RQW,=GM6RTO,=GM6VZB,=GM6WVI,=GM6YQA,=GM7AFE,=GM7GWW, - =GM7RKD,=GM8LNH,=GM8MMA,=GM8YEC,=GS0AAA,=GS0GRC,=GS3BSQ,=GS3ZET,=GS7V,=GS8YL,=MA0XAU,=MA1FJM, - =MA6PTE,=MM/DJ6OZ,=MM/OK1HDU,=MM/OK7U,=MM/PA9D,=MM/PF9DC,=MM/W5ZE/P,=MM0/DJ6AU,=MM0/PA8MO,=MM0ECG, - =MM0KAL,=MM0LON,=MM0LON/M,=MM0LSM,=MM0NQY,=MM0SHF/P,=MM0VIK,=MM0XAU,=MM0ZAL,=MM0ZCG,=MM0ZRC, - =MM1FJM,=MM3VQO,=MM3ZET,=MM5PSL,=MM5PSL/P,=MM5YLO,=MM5YLO/P,=MM6ACW,=MM6BDU,=MM6BZQ,=MM6IKB, - =MM6IMB,=MM6MFA,=MM6PTE,=MM6SJK,=MM6YLO,=MM6ZBG,=MM6ZDW,=MM8A,=MO5PSL,=MQ5PSL,=MR5PSL,=MS0OXE, - =MS0ZCG,=MS0ZET; + =GB0BL,=GB0DAW,=GB100ZET,=GB2AES,=GB2CAS,=GB2DAW,=GB2ELH,=GB2ELH/LH,=GB2HMC,=GB2IGS,=GB2LHI, + =GB2NBC,=GB2QM,=GB2SB,=GB2SLH,=GB2SR,=GB2SUM,=GB2WG,=GB3LER,=GB3LER/B,=GB4LER,=GM0AVR,=GM0CXQ, + =GM0CYJ,=GM0DJI,=GM0EKM,=GM0GFL,=GM0GFL/P,=GM0ILB,=GM0JDB,=GM0VFA,=GM1BYL,=GM1CBQ,=GM1FGN,=GM1KKI, + =GM1MXN,=GM1ZNR,=GM3KLA,=GM3KZH,=GM3RFR,=GM3SJA,=GM3SKN,=GM3TXF/P,=GM3WCH,=GM3WHT,=GM3ZET,=GM3ZXH, + =GM4AFF/P,=GM4AGX,=GM4CHX/P,=GM4ENK,=GM4FNE,=GM4GPN,=GM4GPP,=GM4GQD,=GM4GQM,=GM4IPK,=GM4JPI, + =GM4LBE,=GM4LER,=GM4PXG,=GM4S,=GM4SLV,=GM4SSA,=GM4WXQ,=GM4ZHL,=GM6RQW,=GM6RTO,=GM6VZB,=GM6WVI, + =GM6YQA,=GM7AFE,=GM7GWW,=GM7RKD,=GM8LNH,=GM8MMA,=GM8YEC,=GS0AAA,=GS0GRC,=GS3BSQ,=GS3ZET,=GS7V, + =GS8YL,=MA0XAU,=MA1FJM,=MA6PTE,=MM/DJ6OZ,=MM/OK1HDU,=MM/OK7U,=MM/PA9D,=MM/PF9DC,=MM/W5ZE/P, + =MM0/DJ6AU,=MM0/PA8MO,=MM0ECG,=MM0KAL,=MM0LON,=MM0LON/M,=MM0LSM,=MM0NQY,=MM0SHF/P,=MM0VIK,=MM0XAU, + =MM0ZAL,=MM0ZCG,=MM0ZRC,=MM1FJM,=MM3VQO,=MM3ZET,=MM5PSL,=MM5PSL/P,=MM5YLO,=MM5YLO/P,=MM6ACW, + =MM6BDU,=MM6BZQ,=MM6IKB,=MM6IMB,=MM6MFA,=MM6PTE,=MM6SJK,=MM6YLO,=MM6ZBG,=MM6ZDW,=MM8A,=MO5PSL, + =MQ5PSL,=MR5PSL,=MS0OXE,=MS0ZCG,=MS0ZET; Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: 2A,2M,GM,GS,MA,MM,MS,=2O0BSE,=2O0BZB,=2O0HJS,=2O0IMP,=2O0IOB,=2O0IVG,=2O0LIM,=2O0LJM,=2O0TOK, =2O1MIC,=2O1SJB,=2Q0BSE,=2Q0BZB,=2Q0FYG,=2Q0HJS,=2Q0IMP,=2Q0IOB,=2Q0JOK,=2Q0LDO,=2Q0TAX,=2Q0TOK, @@ -874,71 +875,72 @@ Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: =2R0IMP,=2R0IOB,=2R0ISM,=2R0JVR,=2R0KAU,=2R0KAU/P,=2R0NCM,=2R0OXX,=2R0YCG,=2R0ZPS,=2R1MIC,=2R1SJB, =2V0GUL,=2V0IVG,=2V0JCH,=2V0KAU,=2V0TAX,=2V1HFE,=2V1MIC,=2V1SJB,=G0FBJ,=GA6NX/LH,=GB0AYR,=GB0BAJ, =GB0BCG,=GB0BCK,=GB0BD,=GB0BDC,=GB0BL,=GB0BNA,=GB0BNC,=GB0BOC,=GB0BOL,=GB0BSS,=GB0BWT,=GB0CCF, - =GB0CHL,=GB0CLH,=GB0CML,=GB0CNL,=GB0CWF,=GB0CWS,=GB0DBS,=GB0DHL,=GB0DPK,=GB0EPC,=GB0FFS,=GB0FSG, - =GB0GDS,=GB0GDS/J,=GB0GGR,=GB0GRN,=GB0HHW,=GB0HLD,=GB0JOG,=GB0KEY,=GB0KGS,=GB0KKS,=GB0KLT,=GB0LCS, - =GB0LCW,=GB0LTM,=GB0MLH,=GB0MLM,=GB0MOG,=GB0MOL,=GB0MSL,=GB0MUL,=GB0NGG,=GB0NHL,=GB0NHL/LH, - =GB0NRL,=GB0OYT,=GB0PLS,=GB0POS,=GB0PPE,=GB0PSW,=GB0RGC,=GB0SAA,=GB0SBC,=GB0SCD,=GB0SFM,=GB0SHP, - =GB0SI,=GB0SK,=GB0SKG,=GB0SKY,=GB0SRC,=GB0SSB,=GB0TH,=GB0THL,=GB0TNL,=GB0TTS,=GB0WRH,=GB100MAS, - =GB100MUC,=GB100ZET,=GB10SP,=GB150NRL,=GB18FIFA,=GB19CGM,=GB19CS,=GB1AJ,=GB1ASC,=GB1ASH,=GB1BD, - =GB1BOL,=GB1CFL,=GB1DHL,=GB1FB,=GB1FRS,=GB1FS,=GB1FVS,=GB1FVT,=GB1GEO,=GB1HRS,=GB1KGG,=GB1KLD, - =GB1LAY,=GB1LGG,=GB1LL,=GB1MAY,=GB1NHL,=GB1OL,=GB1OL/LH,=GB1PC,=GB1RB,=GB1RHU,=GB1SLH,=GB1TAY, - =GB1WLG,=GB250RB,=GB2AES,=GB2AGG,=GB2AL,=GB2AST,=GB2ATC,=GB2AYR,=GB2BAJ,=GB2BHM,=GB2BHS,=GB2BMJ, - =GB2BOL,=GB2CAS,=GB2CHC,=GB2CM,=GB2CMA,=GB2CVL,=GB2DAS,=GB2DHS,=GB2DL,=GB2DRC,=GB2DT,=GB2DTM, - =GB2ELH,=GB2ELH/LH,=GB2EPC,=GB2FBM,=GB2FSM,=GB2FSW,=GB2GEO,=GB2GKR,=GB2GNL,=GB2GNL/LH,=GB2GTM, - =GB2HLB,=GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT,=GB2JCM,=GB2KDR,=GB2KGB, - =GB2KW,=GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB,=GB2LHI,=GB2LK,=GB2LK/LH, - =GB2LMG,=GB2LP,=GB2LS,=GB2LS/LH,=GB2LSS,=GB2LT,=GB2LT/LH,=GB2LXX,=GB2M,=GB2MAS,=GB2MBB,=GB2MDG, - =GB2MN,=GB2MOF,=GB2MSL,=GB2MUC,=GB2MUL,=GB2NBC,=GB2NEF,=GB2NL,=GB2NMM,=GB2OL,=GB2OWM,=GB2PBF, - =GB2PG,=GB2QM,=GB2RB,=GB2RDR,=GB2RRL,=GB2RWW,=GB2SAA,=GB2SAM,=GB2SAS,=GB2SB,=GB2SBG,=GB2SHL/LH, - =GB2SKG,=GB2SLH,=GB2SMM,=GB2SOH,=GB2SQN,=GB2SR,=GB2SSB,=GB2SUM,=GB2SWF,=GB2TDS,=GB2THL,=GB2TNL, - =GB2VCB,=GB2VEF,=GB2WBF,=GB2WG,=GB2WLS,=GB2YLS,=GB2ZE,=GB3ANG,=GB3GKR,=GB3LER,=GB3LER/B,=GB3ORK, - =GB3ORK/B,=GB3SWF,=GB3WOI,=GB4AAS,=GB4AST,=GB4BBR,=GB4BG,=GB4CGS,=GB4CMA,=GB4DAS,=GB4DHX,=GB4DTD, - =GB4DUK,=GB4EPC,=GB4GD,=GB4GDS,=GB4GS,=GB4IE,=GB4JCM,=GB4JPJ,=GB4JYS,=GB4LER,=GB4MSE,=GB4NFE, - =GB4OL,=GB4PAS,=GB4SK,=GB4SKO,=GB4SLH,=GB4SMM,=GB4SRO,=GB4SWF,=GB50FVS,=GB50GDS,=GB50JS,=GB50WAB, - =GB5AG,=GB5AST,=GB5BBS,=GB5BOH,=GB5C,=GB5CCC,=GB5CS,=GB5DHL,=GB5DX,=GB5EMF,=GB5FHC,=GB5FLM,=GB5JS, - =GB5LTH,=GB5RO,=GB5RO/LH,=GB5RR,=GB5SI,=GB5TAM,=GB5TI,=GB60CRB,=GB6BEN,=GB6TAA,=GB6WW,=GB75CC, - =GB75GD,=GB80GD,=GB8AYR,=GB8CSL,=GB8FSG,=GB8RU,=GB8RUM,=GB90RSGB/11,=GB90RSGB/12,=GB90RSGB/21, - =GB90RSGB/22,=GB90RSGB/23,=GB999SPC,=GG100AGG,=GG100GA,=GG100GCC,=GG100GGP,=GG100GGR,=GG100GLD, - =GG100SBG,=GM/DL5SE/LH,=GM0AZC/2K,=GM0DHZ/P,=GM0GFL/P,=GM0KTO/2K,=GM0MUN/2K,=GM0SGB/P,=GM0WUX/2K, - =GM3JIJ/2K,=GM3OFT/P,=GM3TKV/LH,=GM3TTC/P,=GM3TXF/P,=GM3USR/P,=GM3VLB/P,=GM4AFF/P,=GM4CHX/2K, - =GM4CHX/P,=GM4WSB/M,=GM4WSB/P,=GM4ZVD/P,=GM6WRW/P,=GO0AEG,=GO0AIR,=GO0BKC,=GO0DBW,=GO0DBW/M, - =GO0DEQ,=GO0GMN,=GO0OGN,=GO0SYY,=GO0TUB,=GO0VRP,=GO0WEZ,=GO1BAN,=GO1BKF,=GO1MQE,=GO1TBW,=GO2MP, - =GO3HVK,=GO3JIJ,=GO3NIG,=GO3VTB,=GO4BLO,=GO4CAU,=GO4CFS,=GO4CHX,=GO4CXM,=GO4DLG,=GO4EMX,=GO4FAM, - =GO4FAU,=GO4JOJ,=GO4JPZ,=GO4JR,=GO4MOX,=GO4MSL,=GO4PRB,=GO4UBJ,=GO4VTB,=GO4WZG,=GO4XQJ,=GO6JEP, - =GO6JRX,=GO6KON,=GO6LYJ,=GO6VCV,=GO7GAX,=GO7GDE,=GO7HUD,=GO7TUD,=GO7WEF,=GO8CBQ,=GO8MHU,=GO8SVB, - =GO8TTD,=GQ0AEG,=GQ0AIR,=GQ0BKC,=GQ0BWR,=GQ0DBW,=GQ0DEQ,=GQ0DUX,=GQ0FNE,=GQ0GMN,=GQ0HUO,=GQ0KWL, - =GQ0MUN,=GQ0NTL,=GQ0OGN,=GQ0RNR,=GQ0TKV/P,=GQ0VRP,=GQ0WEZ,=GQ0WNR,=GQ1BAN,=GQ1BKF,=GQ1MQE,=GQ1TBW, - =GQ3JIJ,=GQ3JQJ,=GQ3NIG,=GQ3NTL,=GQ3TKP,=GQ3TKP/P,=GQ3TKV,=GQ3TKV/P,=GQ3VTB,=GQ3WUX,=GQ3ZBE, - =GQ4AGG,=GQ4BAE,=GQ4BLO,=GQ4CAU,=GQ4CFS,=GQ4CHX,=GQ4CHX/P,=GQ4CXM,=GQ4DLG,=GQ4ELV,=GQ4EMX,=GQ4FAU, - =GQ4JOJ,=GQ4JPZ,=GQ4JR,=GQ4MSL,=GQ4OBG,=GQ4PRB,=GQ4UIB,=GQ4UPL,=GQ4VTB,=GQ4WZG,=GQ4XQJ,=GQ4YMM, - =GQ6JEP,=GQ6JRX,=GQ6KON,=GQ6LYJ,=GQ7GAX,=GQ7GDE,=GQ7HUD,=GQ7TUD,=GQ7UED,=GQ7WEF,=GQ8CBQ,=GQ8MHU, - =GQ8PLR,=GQ8SVB,=GQ8TTD,=GR0AXY,=GR0CDV,=GR0DBW,=GR0EKM,=GR0GMN,=GR0GRD,=GR0HPK,=GR0HPL,=GR0HUO, - =GR0OGN,=GR0PNS,=GR0SYV,=GR0TTV,=GR0TUB,=GR0UKZ,=GR0VRP,=GR0WED,=GR0WNR,=GR150NIB,=GR1BAN,=GR1MWK, - =GR1TBW,=GR1ZIV,=GR3JFG,=GR3MZX,=GR3NIG,=GR3OFT,=GR3PPE,=GR3PYU,=GR3VAL,=GR3VTB,=GR3WFJ,=GR3YXJ, - =GR3ZDH,=GR4BDJ,=GR4BLO,=GR4CAU,=GR4CCN,=GR4CFS,=GR4CMI,=GR4CXM,=GR4DLG,=GR4EMX,=GR4EOU,=GR4FQE, - =GR4GIF,=GR4JOJ,=GR4NSZ,=GR4PRB,=GR4SQM,=GR4VTB,=GR4XAW,=GR4XMD,=GR4XQJ,=GR4YMM,=GR6JEP,=GR6JNJ, - =GR7AAJ,=GR7GAX,=GR7GDE,=GR7GMC,=GR7HHB,=GR7HUD,=GR7LNO,=GR7NZI,=GR7TUD,=GR7USC,=GR7VSB,=GR8CBQ, - =GR8KJO,=GR8KPH,=GR8MHU,=GR8OFQ,=GR8SVB,=GS4WAB/P,=GV0DBW,=GV0GMN,=GV0GRD,=GV0LZE,=GV0OBX,=GV0OGN, - =GV0SYV,=GV0VRP,=GV1BAN,=GV3EEW,=GV3JIJ,=GV3NHQ,=GV3NIG,=GV3NKG,=GV3NNZ,=GV3PIP,=GV3ULP,=GV3VTB, - =GV4BLO,=GV4EMX,=GV4HRJ,=GV4ILS,=GV4JOJ,=GV4KLN,=GV4LVW,=GV4PRB,=GV4VTB,=GV4XQJ,=GV6KON,=GV7DHA, - =GV7GDE,=GV7GMC,=GV8AVM,=GV8DPV,=GV8LYS,=MB18FIFA,=MM/DH5JBR/P,=MM/DJ4OK/M,=MM/DJ8OK/M, - =MM/DL5SE/LH,=MM/F5BLC/P,=MM/F5LMJ/P,=MM/HB9IAB/P,=MM/KE5TF/P,=MM/N5ET/P,=MM/OK1FZM/P,=MM/W5ZE/P, - =MM0BNN/LH,=MM0BQI/2K,=MM0BQN/2K,=MM0BYE/2K,=MM0DFV/P,=MM0LON/M,=MM0SHF/P,=MM0YHB/P,=MM0ZOL/LH, - =MM5PSL/P,=MM5YLO/P,=MO0BFF,=MO0CWJ,=MO0CYR,=MO0DBC,=MO0DNX,=MO0FMF,=MO0GXQ,=MO0HZT,=MO0JST/P, - =MO0KJG,=MO0KSS,=MO0NFC,=MO0SGQ,=MO0SJT,=MO0TGB,=MO0TSG,=MO0WKC,=MO0XXW,=MO0ZBH,=MO1AWV,=MO1HMV, - =MO3BCA,=MO3BRR,=MO3GPL,=MO3OQR,=MO3TUP,=MO3UVL,=MO3YHA,=MO3YMU,=MO3ZRF,=MO5PSL,=MO6BJJ,=MO6CCS, - =MO6CHM,=MO6CRQ,=MO6CRQ/M,=MO6DGZ,=MO6HUT,=MO6KAU,=MO6KAU/M,=MO6KSJ,=MO6MCV,=MO6SRL,=MO6TEW, - =MQ0BNN/P,=MQ0BQM,=MQ0BRG,=MQ0CIN,=MQ0CXA,=MQ0CYR,=MQ0DNX,=MQ0DXD,=MQ0EQE,=MQ0FMF,=MQ0GXQ,=MQ0GYX, - =MQ0GYX/P,=MQ0KJG,=MQ0KSS,=MQ0LEN,=MQ0NFC,=MQ0NJC,=MQ0SJT,=MQ0TSG,=MQ0WKC,=MQ0XXW,=MQ0ZBH,=MQ1AWV, - =MQ1HMV,=MQ1JWF,=MQ3BCA,=MQ3BRR,=MQ3ERZ,=MQ3FET,=MQ3OVK,=MQ3SVK,=MQ3UIX,=MQ3UVL,=MQ3YHA,=MQ3YMU, - =MQ3ZRF,=MQ5PSL,=MQ6AQM,=MQ6BJJ,=MQ6CCS,=MQ6CHM,=MQ6CRQ,=MQ6DGZ,=MQ6HUT,=MQ6KAJ,=MQ6KAU,=MQ6KSJ, - =MQ6KUA,=MQ6LMP,=MQ6MCV,=MR0BQN,=MR0CWB,=MR0CXA,=MR0DHQ,=MR0DWF,=MR0DXD,=MR0DXH,=MR0EPC,=MR0EQE, - =MR0FME,=MR0FMF,=MR0GCF,=MR0GGG,=MR0GGI,=MR0GOR,=MR0HAI,=MR0HVU,=MR0OIL,=MR0POD,=MR0PSL,=MR0RDM, - =MR0SGQ,=MR0SJT,=MR0TAI,=MR0TSG,=MR0TSS,=MR0VTV,=MR0WEI,=MR0XAF,=MR0XXP,=MR0XXW,=MR1AWV,=MR1HMV, - =MR1JWF,=MR1VTB,=MR3AWA,=MR3AWD,=MR3BRR,=MR3PTS,=MR3UIX,=MR3UVL,=MR3WJZ,=MR3XGP,=MR3YHA,=MR3YPH, - =MR3ZCS,=MR5PSL,=MR6AHB,=MR6ARN,=MR6ATU,=MR6CHM,=MR6CTH,=MR6CTL,=MR6HFC,=MR6MCV,=MR6RLL,=MR6SSI, - =MR6TMS,=MV0DXH,=MV0FME,=MV0FMF,=MV0GHM,=MV0HAR,=MV0LGS,=MV0NFC,=MV0NJS,=MV0SGQ,=MV0SJT,=MV0XXW, - =MV1VTB,=MV3BRR,=MV3CVB,=MV3YHA,=MV3YMU,=MV5PSL,=MV6BJJ,=MV6KSJ,=MV6NRQ; + =GB0CHL,=GB0CLH,=GB0CML,=GB0CNL,=GB0CWF,=GB0CWS,=GB0DAW,=GB0DBS,=GB0DHL,=GB0DPK,=GB0EPC,=GB0FFS, + =GB0FSG,=GB0GDS,=GB0GDS/J,=GB0GGR,=GB0GRN,=GB0HHW,=GB0HLD,=GB0JOG,=GB0KEY,=GB0KGS,=GB0KKS,=GB0KLT, + =GB0LCS,=GB0LCW,=GB0LTM,=GB0MLH,=GB0MLM,=GB0MOG,=GB0MOL,=GB0MSL,=GB0MUL,=GB0NGG,=GB0NHL, + =GB0NHL/LH,=GB0NRL,=GB0OYT,=GB0PLS,=GB0POS,=GB0PPE,=GB0PSW,=GB0RGC,=GB0SAA,=GB0SBC,=GB0SCD, + =GB0SFM,=GB0SHP,=GB0SI,=GB0SK,=GB0SKG,=GB0SKY,=GB0SRC,=GB0SSB,=GB0TH,=GB0THL,=GB0TNL,=GB0TTS, + =GB0WRH,=GB100MAS,=GB100MUC,=GB100ZET,=GB10SP,=GB150NRL,=GB18FIFA,=GB19CGM,=GB19CS,=GB1AJ,=GB1ASC, + =GB1ASH,=GB1BD,=GB1BOL,=GB1CFL,=GB1DHL,=GB1FB,=GB1FRS,=GB1FS,=GB1FVS,=GB1FVT,=GB1GEO,=GB1HRS, + =GB1KGG,=GB1KLD,=GB1LAY,=GB1LGG,=GB1LL,=GB1MAY,=GB1NHL,=GB1OL,=GB1OL/LH,=GB1PC,=GB1RB,=GB1RHU, + =GB1SLH,=GB1TAY,=GB1WLG,=GB250RB,=GB2AES,=GB2AGG,=GB2AL,=GB2AST,=GB2ATC,=GB2AYR,=GB2BAJ,=GB2BHM, + =GB2BHS,=GB2BMJ,=GB2BOL,=GB2CAS,=GB2CHC,=GB2CM,=GB2CMA,=GB2CVL,=GB2DAS,=GB2DAW,=GB2DHS,=GB2DL, + =GB2DRC,=GB2DT,=GB2DTM,=GB2ELH,=GB2ELH/LH,=GB2EPC,=GB2FBM,=GB2FSM,=GB2FSW,=GB2GEO,=GB2GKR,=GB2GNL, + =GB2GNL/LH,=GB2GTM,=GB2HLB,=GB2HMC,=GB2HRH,=GB2IGB,=GB2IGS,=GB2IMG,=GB2IMM,=GB2INV,=GB2IOT, + =GB2JCM,=GB2KDR,=GB2KGB,=GB2KW,=GB2LBN,=GB2LBN/LH,=GB2LCL,=GB2LCP,=GB2LCT,=GB2LDG,=GB2LG,=GB2LGB, + =GB2LHI,=GB2LK,=GB2LK/LH,=GB2LMG,=GB2LP,=GB2LS,=GB2LS/LH,=GB2LSS,=GB2LT,=GB2LT/LH,=GB2LXX,=GB2M, + =GB2MAS,=GB2MBB,=GB2MDG,=GB2MN,=GB2MOF,=GB2MSL,=GB2MUC,=GB2MUL,=GB2NBC,=GB2NEF,=GB2NL,=GB2NMM, + =GB2OL,=GB2OWM,=GB2PBF,=GB2PG,=GB2QM,=GB2RB,=GB2RDR,=GB2RRL,=GB2RWW,=GB2SAA,=GB2SAM,=GB2SAS, + =GB2SB,=GB2SBG,=GB2SHL/LH,=GB2SKG,=GB2SLH,=GB2SMM,=GB2SOH,=GB2SQN,=GB2SR,=GB2SSB,=GB2SUM,=GB2SWF, + =GB2TDS,=GB2THL,=GB2TNL,=GB2VCB,=GB2VEF,=GB2WBF,=GB2WG,=GB2WLS,=GB2YLS,=GB2ZE,=GB3ANG,=GB3GKR, + =GB3LER,=GB3LER/B,=GB3ORK,=GB3ORK/B,=GB3SWF,=GB3WOI,=GB4AAS,=GB4AST,=GB4BBR,=GB4BG,=GB4CGS, + =GB4CMA,=GB4DAS,=GB4DHX,=GB4DTD,=GB4DUK,=GB4EPC,=GB4GD,=GB4GDS,=GB4GS,=GB4IE,=GB4JCM,=GB4JPJ, + =GB4JYS,=GB4LER,=GB4MSE,=GB4NFE,=GB4OL,=GB4PAS,=GB4SK,=GB4SKO,=GB4SLH,=GB4SMM,=GB4SRO,=GB4SWF, + =GB50FVS,=GB50GDS,=GB50JS,=GB50WAB,=GB5AG,=GB5AST,=GB5BBS,=GB5BOH,=GB5C,=GB5CCC,=GB5CS,=GB5DHL, + =GB5DX,=GB5EMF,=GB5FHC,=GB5FLM,=GB5JS,=GB5LTH,=GB5RO,=GB5RO/LH,=GB5RR,=GB5SI,=GB5TAM,=GB5TI, + =GB60CRB,=GB6BEN,=GB6TAA,=GB6WW,=GB75CC,=GB75GD,=GB80GD,=GB8AYR,=GB8CSL,=GB8FSG,=GB8RU,=GB8RUM, + =GB90RSGB/11,=GB90RSGB/12,=GB90RSGB/21,=GB90RSGB/22,=GB90RSGB/23,=GB999SPC,=GG100AGG,=GG100GA, + =GG100GCC,=GG100GGP,=GG100GGR,=GG100GLD,=GG100SBG,=GM/DL5SE/LH,=GM0AZC/2K,=GM0DHZ/P,=GM0GFL/P, + =GM0KTO/2K,=GM0MUN/2K,=GM0SGB/P,=GM0WUX/2K,=GM3JIJ/2K,=GM3OFT/P,=GM3TKV/LH,=GM3TTC/P,=GM3TXF/P, + =GM3USR/P,=GM3VLB/P,=GM4AFF/P,=GM4CHX/2K,=GM4CHX/P,=GM4WSB/M,=GM4WSB/P,=GM4ZVD/P,=GM6WRW/P, + =GO0AEG,=GO0AIR,=GO0BKC,=GO0DBW,=GO0DBW/M,=GO0DEQ,=GO0GMN,=GO0OGN,=GO0SYY,=GO0TUB,=GO0VRP,=GO0WEZ, + =GO1BAN,=GO1BKF,=GO1MQE,=GO1TBW,=GO2MP,=GO3HVK,=GO3JIJ,=GO3NIG,=GO3VTB,=GO4BLO,=GO4CAU,=GO4CFS, + =GO4CHX,=GO4CXM,=GO4DLG,=GO4EMX,=GO4FAM,=GO4FAU,=GO4JOJ,=GO4JPZ,=GO4JR,=GO4MOX,=GO4MSL,=GO4PRB, + =GO4UBJ,=GO4VTB,=GO4WZG,=GO4XQJ,=GO6JEP,=GO6JRX,=GO6KON,=GO6LYJ,=GO6VCV,=GO7GAX,=GO7GDE,=GO7HUD, + =GO7TUD,=GO7WEF,=GO8CBQ,=GO8MHU,=GO8SVB,=GO8TTD,=GQ0AEG,=GQ0AIR,=GQ0BKC,=GQ0BWR,=GQ0DBW,=GQ0DEQ, + =GQ0DUX,=GQ0FNE,=GQ0GMN,=GQ0HUO,=GQ0KWL,=GQ0MUN,=GQ0NTL,=GQ0OGN,=GQ0RNR,=GQ0TKV/P,=GQ0VRP,=GQ0WEZ, + =GQ0WNR,=GQ1BAN,=GQ1BKF,=GQ1MQE,=GQ1TBW,=GQ3JIJ,=GQ3JQJ,=GQ3NIG,=GQ3NTL,=GQ3TKP,=GQ3TKP/P,=GQ3TKV, + =GQ3TKV/P,=GQ3VTB,=GQ3WUX,=GQ3ZBE,=GQ4AGG,=GQ4BAE,=GQ4BLO,=GQ4CAU,=GQ4CFS,=GQ4CHX,=GQ4CHX/P, + =GQ4CXM,=GQ4DLG,=GQ4ELV,=GQ4EMX,=GQ4FAU,=GQ4JOJ,=GQ4JPZ,=GQ4JR,=GQ4MSL,=GQ4OBG,=GQ4PRB,=GQ4UIB, + =GQ4UPL,=GQ4VTB,=GQ4WZG,=GQ4XQJ,=GQ4YMM,=GQ6JEP,=GQ6JRX,=GQ6KON,=GQ6LYJ,=GQ7GAX,=GQ7GDE,=GQ7HUD, + =GQ7TUD,=GQ7UED,=GQ7WEF,=GQ8CBQ,=GQ8MHU,=GQ8PLR,=GQ8SVB,=GQ8TTD,=GR0AXY,=GR0CDV,=GR0DBW,=GR0EKM, + =GR0GMN,=GR0GRD,=GR0HPK,=GR0HPL,=GR0HUO,=GR0OGN,=GR0PNS,=GR0SYV,=GR0TTV,=GR0TUB,=GR0UKZ,=GR0VRP, + =GR0WED,=GR0WNR,=GR150NIB,=GR1BAN,=GR1MWK,=GR1TBW,=GR1ZIV,=GR3JFG,=GR3MZX,=GR3NIG,=GR3OFT,=GR3PPE, + =GR3PYU,=GR3VAL,=GR3VTB,=GR3WFJ,=GR3YXJ,=GR3ZDH,=GR4BDJ,=GR4BLO,=GR4CAU,=GR4CCN,=GR4CFS,=GR4CMI, + =GR4CXM,=GR4DLG,=GR4EMX,=GR4EOU,=GR4FQE,=GR4GIF,=GR4JOJ,=GR4NSZ,=GR4PRB,=GR4SQM,=GR4VTB,=GR4XAW, + =GR4XMD,=GR4XQJ,=GR4YMM,=GR6JEP,=GR6JNJ,=GR7AAJ,=GR7GAX,=GR7GDE,=GR7GMC,=GR7HHB,=GR7HUD,=GR7LNO, + =GR7NZI,=GR7TUD,=GR7USC,=GR7VSB,=GR8CBQ,=GR8KJO,=GR8KPH,=GR8MHU,=GR8OFQ,=GR8SVB,=GS4WAB/P,=GV0DBW, + =GV0GMN,=GV0GRD,=GV0LZE,=GV0OBX,=GV0OGN,=GV0SYV,=GV0VRP,=GV1BAN,=GV3EEW,=GV3JIJ,=GV3NHQ,=GV3NIG, + =GV3NKG,=GV3NNZ,=GV3PIP,=GV3ULP,=GV3VTB,=GV4BLO,=GV4EMX,=GV4HRJ,=GV4ILS,=GV4JOJ,=GV4KLN,=GV4LVW, + =GV4PRB,=GV4VTB,=GV4XQJ,=GV6KON,=GV7DHA,=GV7GDE,=GV7GMC,=GV8AVM,=GV8DPV,=GV8LYS,=MB18FIFA, + =MM/DH5JBR/P,=MM/DJ4OK/M,=MM/DJ8OK/M,=MM/DL5SE/LH,=MM/F5BLC/P,=MM/F5LMJ/P,=MM/HB9IAB/P, + =MM/KE5TF/P,=MM/N5ET/P,=MM/OK1FZM/P,=MM/W5ZE/P,=MM0BNN/LH,=MM0BQI/2K,=MM0BQN/2K,=MM0BYE/2K, + =MM0DFV/P,=MM0LON/M,=MM0SHF/P,=MM0YHB/P,=MM0ZOL/LH,=MM5PSL/P,=MM5YLO/P,=MO0BFF,=MO0CWJ,=MO0CYR, + =MO0DBC,=MO0DNX,=MO0FMF,=MO0GXQ,=MO0HZT,=MO0JST/P,=MO0KJG,=MO0KSS,=MO0NFC,=MO0SGQ,=MO0SJT,=MO0TGB, + =MO0TSG,=MO0WKC,=MO0XXW,=MO0ZBH,=MO1AWV,=MO1HMV,=MO3BCA,=MO3BRR,=MO3GPL,=MO3OQR,=MO3TUP,=MO3UVL, + =MO3YHA,=MO3YMU,=MO3ZRF,=MO5PSL,=MO6BJJ,=MO6CCS,=MO6CHM,=MO6CRQ,=MO6CRQ/M,=MO6DGZ,=MO6HUT,=MO6KAU, + =MO6KAU/M,=MO6KSJ,=MO6MCV,=MO6SRL,=MO6TEW,=MQ0BNN/P,=MQ0BQM,=MQ0BRG,=MQ0CIN,=MQ0CXA,=MQ0CYR, + =MQ0DNX,=MQ0DXD,=MQ0EQE,=MQ0FMF,=MQ0GXQ,=MQ0GYX,=MQ0GYX/P,=MQ0KJG,=MQ0KSS,=MQ0LEN,=MQ0NFC,=MQ0NJC, + =MQ0SJT,=MQ0TSG,=MQ0WKC,=MQ0XXW,=MQ0ZBH,=MQ1AWV,=MQ1HMV,=MQ1JWF,=MQ3BCA,=MQ3BRR,=MQ3ERZ,=MQ3FET, + =MQ3OVK,=MQ3SVK,=MQ3UIX,=MQ3UVL,=MQ3YHA,=MQ3YMU,=MQ3ZRF,=MQ5PSL,=MQ6AQM,=MQ6BJJ,=MQ6CCS,=MQ6CHM, + =MQ6CRQ,=MQ6DGZ,=MQ6HUT,=MQ6KAJ,=MQ6KAU,=MQ6KSJ,=MQ6KUA,=MQ6LMP,=MQ6MCV,=MR0BQN,=MR0CWB,=MR0CXA, + =MR0DHQ,=MR0DWF,=MR0DXD,=MR0DXH,=MR0EPC,=MR0EQE,=MR0FME,=MR0FMF,=MR0GCF,=MR0GGG,=MR0GGI,=MR0GOR, + =MR0HAI,=MR0HVU,=MR0OIL,=MR0POD,=MR0PSL,=MR0RDM,=MR0SGQ,=MR0SJT,=MR0TAI,=MR0TSG,=MR0TSS,=MR0VTV, + =MR0WEI,=MR0XAF,=MR0XXP,=MR0XXW,=MR1AWV,=MR1HMV,=MR1JWF,=MR1VTB,=MR3AWA,=MR3AWD,=MR3BRR,=MR3PTS, + =MR3UIX,=MR3UVL,=MR3WJZ,=MR3XGP,=MR3YHA,=MR3YPH,=MR3ZCS,=MR5PSL,=MR6AHB,=MR6ARN,=MR6ATU,=MR6CHM, + =MR6CTH,=MR6CTL,=MR6HFC,=MR6MCV,=MR6RLL,=MR6SSI,=MR6TMS,=MV0DXH,=MV0FME,=MV0FMF,=MV0GHM,=MV0HAR, + =MV0LGS,=MV0NFC,=MV0NJS,=MV0SGQ,=MV0SJT,=MV0XXW,=MV1VTB,=MV3BRR,=MV3CVB,=MV3YHA,=MV3YMU,=MV5PSL, + =MV6BJJ,=MV6KSJ,=MV6NRQ; Guernsey: 14: 27: EU: 49.45: 2.58: 0.0: GU: 2U,GP,GU,MP,MU,=2O0FER,=2Q0ARE,=2Q0FER,=2U0ARE/2K,=GB0HAM,=GB0U,=GB19CG,=GB2AFG,=GB2FG,=GB2GU, =GB2JTA,=GB4SGG,=GB50GSY,=GO8FBO,=GQ8FBO,=GU0DXX/2K,=GU4GG/2K,=MO0FAL,=MO0KWD,=MQ0FAL,=MR0FAL, @@ -949,66 +951,66 @@ Wales: 14: 27: EU: 52.28: 3.73: 0.0: GW: =2Q0DAA/M,=2Q0IDT,=2Q0MKG,=2Q0OJA,=2Q0OTL,=2Q0RMR,=2Q0RWF,=2Q0SVW,=2Q0TRR,=2Q0UAA,=2Q0VAY,=2Q0WDS, =2R0BRR,=2R0CDY,=2R0CDZ,=2R0CSS,=2R0CVE,=2R0DRB,=2R0IDT,=2R0OJA,=2R0PHP,=2R0PJP,=2R0REX,=2R0RWF, =2R0TRR,=2R0TYG,=2R0XTP,=2R0YKK,=2R3SFC,=2V0CDY,=2V0CGM,=2V0CLJ,=2V0CVL,=2V0DAA,=2V0DUN,=2V0GME, - =2V0GNG,=2V0KED,=2V0WDS,=2V1EPO,=GB0AAW,=GB0AD,=GB0AWE,=GB0AWS,=GB0BHR,=GB0BP,=GB0BRE,=GB0BTB, - =GB0BVL,=GB0BYL,=GB0CAC,=GB0CCE,=GB0CEW,=GB0CFD,=GB0CGG,=GB0CLC,=GB0CQD,=GB0CSA,=GB0CSR,=GB0CVA, - =GB0DFD,=GB0DMT,=GB0DS,=GB0DVP,=GB0FHD,=GB0FHI,=GB0GDD,=GB0GIW,=GB0GLV,=GB0GMD,=GB0GRM,=GB0HEL, - =GB0HGC,=GB0HLT,=GB0HMM,=GB0HMT,=GB0KF,=GB0L,=GB0LBG,=GB0LM,=GB0LVF,=GB0MFH,=GB0MIW,=GB0ML, - =GB0MPA,=GB0MUU,=GB0MWL,=GB0NAW,=GB0NEW,=GB0NG,=GB0NLC,=GB0PBR,=GB0PEM,=GB0PGG,=GB0PLB,=GB0PLL, - =GB0PSG,=GB0RME,=GB0ROC,=GB0RPO,=GB0RS,=GB0RSC,=GB0RSF,=GB0RWM,=GB0SDD,=GB0SGC,=GB0SH,=GB0SH/LH, - =GB0SOA,=GB0SPE,=GB0SPS,=GB0TD,=GB0TPR,=GB0TS,=GB0TTT,=GB0VCA,=GB0VK,=GB0WHH,=GB0WHR,=GB0WIW, - =GB0WUL,=GB0YG,=GB100AB,=GB100BP,=GB100CSW,=GB100GGC,=GB100GGM,=GB100HD,=GB100LB,=GB100LSG, - =GB100MCV,=GB100TMD,=GB10SOTA,=GB19CGW,=GB19CW,=GB19SG,=GB1AD,=GB1ATC,=GB1BAF,=GB1BGS,=GB1BPL, - =GB1BSW,=GB1BW,=GB1CCC,=GB1CDS,=GB1CPG,=GB1DS,=GB1FHS,=GB1HAS,=GB1HTW,=GB1JC,=GB1LSG,=GB1LW, - =GB1OOC,=GB1PCA,=GB1PCS,=GB1PD,=GB1PGW,=GB1PJ,=GB1PLL,=GB1SEA,=GB1SL,=GB1SPN,=GB1SSL,=GB1TDS, - =GB1WAA,=GB1WIW,=GB1WSM,=GB2000SET,=GB2003SET,=GB200HNT,=GB250TMB,=GB250TT,=GB2ADU,=GB2BEF, - =GB2BGG,=GB2BOM,=GB2BOW,=GB2BPM,=GB2BYF,=GB2CC,=GB2CI,=GB2COB,=GB2CR,=GB2CRS,=GB2DWR,=GB2EI, - =GB2FC,=GB2FLB,=GB2GGM,=GB2GLS,=GB2GOL,=GB2GSG,=GB2GVA,=GB2HDG,=GB2IMD,=GB2LBR,=GB2LM,=GB2LNP, - =GB2LSA,=GB2LSA/LH,=GB2LSH,=GB2MD,=GB2MGY,=GB2MIL,=GB2MLM,=GB2MMC,=GB2MOP,=GB2NF,=GB2NPH,=GB2NPL, - =GB2OOA,=GB2ORM,=GB2PRC,=GB2RFS,=GB2RTB,=GB2SAC,=GB2SCD,=GB2SCP,=GB2SFM,=GB2SIP,=GB2SLA,=GB2TD, - =GB2TD/LH,=GB2TTA,=GB2VK,=GB2WAA,=GB2WHO,=GB2WNA,=GB2WSF,=GB2WT,=GB3HLS,=GB3LMW,=GB4ADU,=GB4AFS, - =GB4AOS,=GB4BB,=GB4BOJ,=GB4BPL,=GB4BPL/LH,=GB4BPL/P,=GB4BPR,=GB4BRS/P,=GB4BSG,=GB4CI,=GB4CTC, - =GB4EUL,=GB4FAA,=GB4GM,=GB4GSS,=GB4HFH,=GB4HI,=GB4HLB,=GB4HMD,=GB4HMM,=GB4MBC,=GB4MD,=GB4MDH, - =GB4MDI,=GB4MJS,=GB4MPI,=GB4MUU,=GB4NDG,=GB4NPL,=GB4NTB,=GB4ON,=GB4OST,=GB4PAT,=GB4PCS,=GB4PD, - =GB4POW,=GB4RC,=GB4RME,=GB4RSL,=GB4SDD,=GB4SLC,=GB4SSP,=GB4SUB,=GB4TMS,=GB4UKG,=GB4VJD,=GB4WT, - =GB4WWI,=GB4XT,=GB50ABS,=GB50EVS,=GB50RSC,=GB50SGP,=GB5AC,=GB5FI,=GB5GEO,=GB5IMD,=GB5MD,=GB5ONG, - =GB5PSJ,=GB5SIP,=GB5WT,=GB60DITP,=GB60ER,=GB60PW,=GB60SPS,=GB60VLY,=GB65BTF,=GB6AC,=GB6BLB, - =GB6CRI,=GB6GGM,=GB6OQA,=GB6ORA,=GB6PLB,=GB6RNLI,=GB6SPD,=GB6TS,=GB6TSG,=GB6WT,=GB6WWT,=GB70BTF, - =GB750CC,=GB75ATC,=GB75BB,=GB8CCC,=GB8HI,=GB8MD,=GB8MG,=GB8ND,=GB8OAE,=GB8OQE,=GB8RAF,=GB8WOW, - =GB8WT,=GB90RSGB/62,=GB90RSGB/72,=GB9GGM,=GC4BRS/LH,=GG100ACD,=GG100ANG,=GG100CPG,=GG100RGG, - =GG100SG,=GO0DIV,=GO0EZQ,=GO0EZY,=GO0JEQ,=GO0MNP,=GO0MNP/P,=GO0NPL,=GO0PLB,=GO0PNI,=GO0PUP, - =GO0VKW,=GO0VML,=GO0VSW,=GO1DPL,=GO1IOT,=GO1JFV,=GO1MVL,=GO1PKM,=GO3PLB,=GO3UOF,=GO3UOF/M,=GO3XJQ, - =GO4BKG,=GO4BLE,=GO4CQZ,=GO4DTQ,=GO4GTI,=GO4JKR,=GO4JUN,=GO4JUW,=GO4MVA,=GO4NOO,=GO4OKT,=GO4SUE, - =GO4SUE/P,=GO4TNZ,=GO4WXM,=GO6IMS,=GO6NKG,=GO6UKO,=GO7DWR,=GO7SBO,=GO7VJK,=GO7VQD,=GO8BQK,=GO8IQC, - =GO8JOY,=GO8OKR,=GQ0ANA,=GQ0DIV,=GQ0JEQ,=GQ0JRF,=GQ0MNO,=GQ0MNP,=GQ0NPL,=GQ0PUP,=GQ0RYT,=GQ0SLM, - =GQ0TQM,=GQ0VKW,=GQ0VML,=GQ0VSW,=GQ0WVL,=GQ1FKY,=GQ1FOA/P,=GQ1IOT,=GQ1JFV,=GQ1MVL,=GQ1NRS,=GQ1WRV, - =GQ1ZKN,=GQ3IRK,=GQ3PLB,=GQ3SB,=GQ3UOF,=GQ3VEN,=GQ3VKL,=GQ3WSU,=GQ3XJA,=GQ3XJQ,=GQ4BKG,=GQ4BLE, - =GQ4CQZ,=GQ4EZW,=GQ4GSH,=GQ4GTI,=GQ4IIL,=GQ4JKR,=GQ4JUN,=GQ4JUW,=GQ4LZP,=GQ4MVA,=GQ4NOO,=GQ4OKT, - =GQ4SUE,=GQ4VNS,=GQ4VZJ,=GQ4WXM,=GQ4WXM/P,=GQ6IMS,=GQ6ITJ,=GQ6NKG,=GQ6UKO,=GQ7BQK,=GQ7DWR,=GQ7FBV, - =GQ7SBO,=GQ7UNJ,=GQ7UNV,=GQ7VJK,=GQ7VQD,=GQ8BQK,=GQ8IQC,=GQ8JOY,=GQ8OKR,=GR0ANA,=GR0DIV,=GR0DSP, - =GR0HUS,=GR0JEQ,=GR0MYY,=GR0NPL,=GR0PSV,=GR0RYT,=GR0SYN,=GR0TKX,=GR0VKW,=GR0WGK,=GR1FJI,=GR1HNG, - =GR1LFX,=GR1LHV,=GR1MCD,=GR1SGG,=GR1WVY,=GR1YQM,=GR3SB,=GR3SFC,=GR3TKH,=GR3UOF,=GR3XJQ,=GR4BKG, - =GR4BLE,=GR4CQZ,=GR4GNY,=GR4GTI,=GR4HZA,=GR4JUN,=GR4JUW,=GR4OGO,=GR4SUE,=GR4VSS/P,=GR4XXJ,=GR4ZOM, - =GR5PH,=GR6NKG,=GR6SIX,=GR6STK,=GR6UKO,=GR6ZDH,=GR7AAV,=GR7HOC,=GR7NAU,=GR7TKZ,=GR7UNV,=GR7VQD, - =GR8BQK,=GR8IQC,=GR8OGI,=GR8TRO,=GV0ANA,=GV0DCK,=GV0DIV,=GV0EME,=GV0FRE,=GV0MNP,=GV0NPL,=GV1FKY, - =GV1IOT,=GV1JFV,=GV1NBW,=GV1YQM,=GV3ATZ,=GV3TJE/P,=GV3UOF,=GV3WEZ,=GV3XJQ,=GV4BKG,=GV4BRS,=GV4CQZ, - =GV4JKR,=GV4JQP,=GV4NQJ,=GV4PUC,=GV6BRC,=GV6JPC,=GV6NKG,=GV7UNV,=GV7VJK,=GV8IQC,=GW0AWT/2K, - =GW0GEI/2K,=GW0GIH/2K,=GW0MNO/2K,=GW0VSW/2K,=GW3JXN/2K,=GW3KJN/2K,=GW4IIL/2K,=GW4VHP/2K, - =M2000Y/97A,=MO0AQZ,=MO0ATI,=MO0COE,=MO0CVT,=MO0EQL,=MO0EZQ,=MO0GXE,=MO0HCX,=MO0IBZ,=MO0IML, - =MO0KLW,=MO0LDJ,=MO0LLK,=MO0LUK,=MO0LZZ,=MO0MAU,=MO0MUM,=MO0MWZ,=MO0OWW,=MO0SGD,=MO0SGR,=MO0TBB, - =MO0TMI,=MO0TTU,=MO0UPH,=MO0VVO,=MO1CFA,=MO1CFN,=MO3DAO,=MO3DQB,=MO3GKI,=MO3OJA,=MO3PUU,=MO3RNI, - =MO3UEZ,=MO3WPH,=MO3YVO,=MO3ZCO,=MO6DVP,=MO6GWK,=MO6GWR,=MO6GWR/P,=MO6MAU,=MO6PAM,=MO6PLC,=MO6PUT, - =MO6SEF,=MO6TBD,=MO6TBP,=MO6WLB,=MQ0AQZ,=MQ0ATI,=MQ0AWW,=MQ0CDO,=MQ0CNA,=MQ0CVT,=MQ0DHF,=MQ0EQL, - =MQ0GXE,=MQ0GYV,=MQ0HCX,=MQ0IBZ,=MQ0IML,=MQ0LDJ,=MQ0LLK,=MQ0LUK,=MQ0LZZ,=MQ0MAU,=MQ0MUM,=MQ0MWA, - =MQ0MWZ,=MQ0OWW,=MQ0PAD,=MQ0RHD,=MQ0SGD,=MQ0SGR,=MQ0TBB,=MQ0TMI,=MQ0TTU,=MQ0UPH,=MQ0UPH/P,=MQ0VVO, - =MQ0XMC/P,=MQ1CFA,=MQ1CFN,=MQ1EYO/P,=MQ1LCR,=MQ3DAO,=MQ3EPA,=MQ3GKI,=MQ3JAT,=MQ3NDB,=MQ3OJA, - =MQ3USK,=MQ3WPH,=MQ3ZCB/P,=MQ5AND,=MQ5EPA,=MQ5VZW,=MQ6DVP,=MQ6KLL,=MQ6MAU,=MQ6PAM,=MQ6PLC,=MQ6RHD, - =MQ6SEF,=MQ6TBD,=MQ6TBP,=MR0AQZ,=MR0BXJ,=MR0CVT,=MR0GUK,=MR0GXE,=MR0IDX,=MR0JGE,=MR0LAO,=MR0LDJ, - =MR0MAU,=MR0RLD,=MR0TTR,=MR0TTU,=MR0YAD,=MR0ZAP,=MR1CFN,=MR1EAA,=MR1LCR,=MR1MAJ/P,=MR1MDH,=MR3AVB, - =MR3AVC,=MR3CBF,=MR3NYR,=MR3OBL,=MR3SET/P,=MR3UFN,=MR3XZP,=MR3YKL,=MR3YLO,=MR3YVO,=MR3ZCB/P, - =MR5HOC,=MR6ADZ,=MR6KDA,=MR6VHF,=MR6YDP,=MV0AEL,=MV0BLM,=MV0EDX,=MV0GWT,=MV0GXE,=MV0HGY/P,=MV0IML, - =MV0LLK,=MV0PJJ,=MV0PJJ/P,=MV0RRD,=MV0SGD,=MV0SGR,=MV0TBB,=MV0TDQ,=MV0UAA,=MV0USK,=MV0VRQ,=MV0WYN, - =MV1CFA,=MV1CFN,=MV1EYP/P,=MV3RNI,=MV6CQN,=MV6GWR,=MV6GWR/P,=MV6URC,=MV6ZOL,=MW0CND/2K,=MW0DHF/LH, - =MW5AAM/2K,=MW5GOL/LH; + =2V0GNG,=2V0KED,=2V0WDS,=2V1EPO,=GB0AAW,=GB0AD,=GB0ATM,=GB0AWE,=GB0AWS,=GB0BHR,=GB0BP,=GB0BRE, + =GB0BTB,=GB0BVL,=GB0BYL,=GB0CAC,=GB0CCE,=GB0CEW,=GB0CFD,=GB0CGG,=GB0CLC,=GB0CQD,=GB0CSA,=GB0CSR, + =GB0CVA,=GB0DFD,=GB0DMT,=GB0DS,=GB0DVP,=GB0FHD,=GB0FHI,=GB0GDD,=GB0GIW,=GB0GLV,=GB0GMD,=GB0GRM, + =GB0HEL,=GB0HGC,=GB0HLT,=GB0HMM,=GB0HMT,=GB0KF,=GB0L,=GB0LBG,=GB0LM,=GB0LVF,=GB0MFH,=GB0MIW, + =GB0ML,=GB0MPA,=GB0MUU,=GB0MWL,=GB0NAW,=GB0NEW,=GB0NG,=GB0NLC,=GB0PBR,=GB0PEM,=GB0PGG,=GB0PLB, + =GB0PLL,=GB0PSG,=GB0RME,=GB0ROC,=GB0RPO,=GB0RS,=GB0RSC,=GB0RSF,=GB0RWM,=GB0SDD,=GB0SGC,=GB0SH, + =GB0SH/LH,=GB0SOA,=GB0SPE,=GB0SPS,=GB0TD,=GB0TPR,=GB0TS,=GB0TTT,=GB0VCA,=GB0VK,=GB0WHH,=GB0WHR, + =GB0WIW,=GB0WUL,=GB0YG,=GB100AB,=GB100BP,=GB100CSW,=GB100GGC,=GB100GGM,=GB100HD,=GB100LB, + =GB100LSG,=GB100MCV,=GB100TMD,=GB10SOTA,=GB19CGW,=GB19CW,=GB19SG,=GB1AD,=GB1ATC,=GB1BAF,=GB1BGS, + =GB1BPL,=GB1BSW,=GB1BW,=GB1CCC,=GB1CDS,=GB1CPG,=GB1DS,=GB1FHS,=GB1HAS,=GB1HTW,=GB1JC,=GB1LSG, + =GB1LW,=GB1OOC,=GB1PCA,=GB1PCS,=GB1PD,=GB1PGW,=GB1PJ,=GB1PLL,=GB1SEA,=GB1SL,=GB1SPN,=GB1SSL, + =GB1TDS,=GB1WAA,=GB1WIW,=GB1WSM,=GB2000SET,=GB2003SET,=GB200HNT,=GB250TMB,=GB250TT,=GB2ADU, + =GB2BEF,=GB2BGG,=GB2BOM,=GB2BOW,=GB2BPM,=GB2BYF,=GB2CC,=GB2CI,=GB2COB,=GB2CR,=GB2CRS,=GB2DWR, + =GB2EI,=GB2FC,=GB2FLB,=GB2GGM,=GB2GLS,=GB2GOL,=GB2GSG,=GB2GVA,=GB2HDG,=GB2HMM,=GB2IMD,=GB2LBR, + =GB2LM,=GB2LNP,=GB2LSA,=GB2LSA/LH,=GB2LSH,=GB2MD,=GB2MGY,=GB2MIL,=GB2MLM,=GB2MMC,=GB2MOP,=GB2NF, + =GB2NPH,=GB2NPL,=GB2OOA,=GB2ORM,=GB2PRC,=GB2RFS,=GB2RTB,=GB2SAC,=GB2SCD,=GB2SCP,=GB2SFM,=GB2SIP, + =GB2SLA,=GB2TD,=GB2TD/LH,=GB2TTA,=GB2VK,=GB2WAA,=GB2WHO,=GB2WNA,=GB2WSF,=GB2WT,=GB3HLS,=GB3LMW, + =GB4ADU,=GB4AFS,=GB4AOS,=GB4BB,=GB4BOJ,=GB4BPL,=GB4BPL/LH,=GB4BPL/P,=GB4BPR,=GB4BRS/P,=GB4BSG, + =GB4CI,=GB4CTC,=GB4EUL,=GB4FAA,=GB4GM,=GB4GSS,=GB4HFH,=GB4HI,=GB4HLB,=GB4HMD,=GB4HMM,=GB4MBC, + =GB4MD,=GB4MDH,=GB4MDI,=GB4MJS,=GB4MPI,=GB4MUU,=GB4NDG,=GB4NPL,=GB4NTB,=GB4ON,=GB4OST,=GB4PAT, + =GB4PCS,=GB4PD,=GB4POW,=GB4RC,=GB4RME,=GB4RSL,=GB4SDD,=GB4SLC,=GB4SSP,=GB4SUB,=GB4TMS,=GB4UKG, + =GB4VJD,=GB4WT,=GB4WWI,=GB4XT,=GB50ABS,=GB50EVS,=GB50RSC,=GB50SGP,=GB5AC,=GB5FI,=GB5GEO,=GB5IMD, + =GB5MD,=GB5ONG,=GB5PSJ,=GB5SIP,=GB5WT,=GB60DITP,=GB60ER,=GB60PW,=GB60SPS,=GB60VLY,=GB65BTF,=GB6AC, + =GB6BLB,=GB6CRI,=GB6GGM,=GB6OQA,=GB6ORA,=GB6PLB,=GB6RNLI,=GB6SPD,=GB6TS,=GB6TSG,=GB6WT,=GB6WWT, + =GB70BTF,=GB750CC,=GB75ATC,=GB75BB,=GB8CCC,=GB8HI,=GB8MD,=GB8MG,=GB8ND,=GB8OAE,=GB8OQE,=GB8RAF, + =GB8WOW,=GB8WT,=GB90RSGB/62,=GB90RSGB/72,=GB9GGM,=GC4BRS/LH,=GG100ACD,=GG100ANG,=GG100CPG, + =GG100RGG,=GG100SG,=GO0DIV,=GO0EZQ,=GO0EZY,=GO0JEQ,=GO0MNP,=GO0MNP/P,=GO0NPL,=GO0PLB,=GO0PNI, + =GO0PUP,=GO0VKW,=GO0VML,=GO0VSW,=GO1DPL,=GO1IOT,=GO1JFV,=GO1MVL,=GO1PKM,=GO3PLB,=GO3UOF,=GO3UOF/M, + =GO3XJQ,=GO4BKG,=GO4BLE,=GO4CQZ,=GO4DTQ,=GO4GTI,=GO4JKR,=GO4JUN,=GO4JUW,=GO4MVA,=GO4NOO,=GO4OKT, + =GO4SUE,=GO4SUE/P,=GO4TNZ,=GO4WXM,=GO6IMS,=GO6NKG,=GO6UKO,=GO7DWR,=GO7SBO,=GO7VJK,=GO7VQD,=GO8BQK, + =GO8IQC,=GO8JOY,=GO8OKR,=GQ0ANA,=GQ0DIV,=GQ0JEQ,=GQ0JRF,=GQ0MNO,=GQ0MNP,=GQ0NPL,=GQ0PUP,=GQ0RYT, + =GQ0SLM,=GQ0TQM,=GQ0VKW,=GQ0VML,=GQ0VSW,=GQ0WVL,=GQ1FKY,=GQ1FOA/P,=GQ1IOT,=GQ1JFV,=GQ1MVL,=GQ1NRS, + =GQ1WRV,=GQ1ZKN,=GQ3IRK,=GQ3PLB,=GQ3SB,=GQ3UOF,=GQ3VEN,=GQ3VKL,=GQ3WSU,=GQ3XJA,=GQ3XJQ,=GQ4BKG, + =GQ4BLE,=GQ4CQZ,=GQ4EZW,=GQ4GSH,=GQ4GTI,=GQ4IIL,=GQ4JKR,=GQ4JUN,=GQ4JUW,=GQ4LZP,=GQ4MVA,=GQ4NOO, + =GQ4OKT,=GQ4SUE,=GQ4VNS,=GQ4VZJ,=GQ4WXM,=GQ4WXM/P,=GQ6IMS,=GQ6ITJ,=GQ6NKG,=GQ6UKO,=GQ7BQK,=GQ7DWR, + =GQ7FBV,=GQ7SBO,=GQ7UNJ,=GQ7UNV,=GQ7VJK,=GQ7VQD,=GQ8BQK,=GQ8IQC,=GQ8JOY,=GQ8OKR,=GR0ANA,=GR0DIV, + =GR0DSP,=GR0HUS,=GR0JEQ,=GR0MYY,=GR0NPL,=GR0PSV,=GR0RYT,=GR0SYN,=GR0TKX,=GR0VKW,=GR0WGK,=GR1FJI, + =GR1HNG,=GR1LFX,=GR1LHV,=GR1MCD,=GR1SGG,=GR1WVY,=GR1YQM,=GR3SB,=GR3SFC,=GR3TKH,=GR3UOF,=GR3XJQ, + =GR4BKG,=GR4BLE,=GR4CQZ,=GR4GNY,=GR4GTI,=GR4HZA,=GR4JUN,=GR4JUW,=GR4OGO,=GR4SUE,=GR4VSS/P,=GR4XXJ, + =GR4ZOM,=GR5PH,=GR6NKG,=GR6SIX,=GR6STK,=GR6UKO,=GR6ZDH,=GR7AAV,=GR7HOC,=GR7NAU,=GR7TKZ,=GR7UNV, + =GR7VQD,=GR8BQK,=GR8IQC,=GR8OGI,=GR8TRO,=GV0ANA,=GV0DCK,=GV0DIV,=GV0EME,=GV0FRE,=GV0MNP,=GV0NPL, + =GV1FKY,=GV1IOT,=GV1JFV,=GV1NBW,=GV1YQM,=GV3ATZ,=GV3TJE/P,=GV3UOF,=GV3WEZ,=GV3XJQ,=GV4BKG,=GV4BRS, + =GV4CQZ,=GV4JKR,=GV4JQP,=GV4NQJ,=GV4PUC,=GV6BRC,=GV6JPC,=GV6NKG,=GV7UNV,=GV7VJK,=GV8IQC, + =GW0AWT/2K,=GW0GEI/2K,=GW0GIH/2K,=GW0MNO/2K,=GW0VSW/2K,=GW3JXN/2K,=GW3KJN/2K,=GW4IIL/2K, + =GW4VHP/2K,=M2000Y/97A,=MO0AQZ,=MO0ATI,=MO0COE,=MO0CVT,=MO0EQL,=MO0EZQ,=MO0GXE,=MO0HCX,=MO0IBZ, + =MO0IML,=MO0KLW,=MO0LDJ,=MO0LLK,=MO0LUK,=MO0LZZ,=MO0MAU,=MO0MUM,=MO0MWZ,=MO0OWW,=MO0SGD,=MO0SGR, + =MO0TBB,=MO0TMI,=MO0TTU,=MO0UPH,=MO0VVO,=MO1CFA,=MO1CFN,=MO3DAO,=MO3DQB,=MO3GKI,=MO3OJA,=MO3PUU, + =MO3RNI,=MO3UEZ,=MO3WPH,=MO3YVO,=MO3ZCO,=MO6DVP,=MO6GWK,=MO6GWR,=MO6GWR/P,=MO6MAU,=MO6PAM,=MO6PLC, + =MO6PUT,=MO6SEF,=MO6TBD,=MO6TBP,=MO6WLB,=MQ0AQZ,=MQ0ATI,=MQ0AWW,=MQ0CDO,=MQ0CNA,=MQ0CVT,=MQ0DHF, + =MQ0EQL,=MQ0GXE,=MQ0GYV,=MQ0HCX,=MQ0IBZ,=MQ0IML,=MQ0LDJ,=MQ0LLK,=MQ0LUK,=MQ0LZZ,=MQ0MAU,=MQ0MUM, + =MQ0MWA,=MQ0MWZ,=MQ0OWW,=MQ0PAD,=MQ0RHD,=MQ0SGD,=MQ0SGR,=MQ0TBB,=MQ0TMI,=MQ0TTU,=MQ0UPH,=MQ0UPH/P, + =MQ0VVO,=MQ0XMC/P,=MQ1CFA,=MQ1CFN,=MQ1EYO/P,=MQ1LCR,=MQ3DAO,=MQ3EPA,=MQ3GKI,=MQ3JAT,=MQ3NDB, + =MQ3OJA,=MQ3USK,=MQ3WPH,=MQ3ZCB/P,=MQ5AND,=MQ5EPA,=MQ5VZW,=MQ6DVP,=MQ6KLL,=MQ6MAU,=MQ6PAM,=MQ6PLC, + =MQ6RHD,=MQ6SEF,=MQ6TBD,=MQ6TBP,=MR0AQZ,=MR0BXJ,=MR0CVT,=MR0GUK,=MR0GXE,=MR0IDX,=MR0JGE,=MR0LAO, + =MR0LDJ,=MR0MAU,=MR0RLD,=MR0TTR,=MR0TTU,=MR0YAD,=MR0ZAP,=MR1CFN,=MR1EAA,=MR1LCR,=MR1MAJ/P,=MR1MDH, + =MR3AVB,=MR3AVC,=MR3CBF,=MR3NYR,=MR3OBL,=MR3SET/P,=MR3UFN,=MR3XZP,=MR3YKL,=MR3YLO,=MR3YVO, + =MR3ZCB/P,=MR5HOC,=MR6ADZ,=MR6KDA,=MR6VHF,=MR6YDP,=MV0AEL,=MV0BLM,=MV0EDX,=MV0GWT,=MV0GXE, + =MV0HGY/P,=MV0IML,=MV0LLK,=MV0PJJ,=MV0PJJ/P,=MV0RRD,=MV0SGD,=MV0SGR,=MV0TBB,=MV0TDQ,=MV0UAA, + =MV0USK,=MV0VRQ,=MV0WYN,=MV1CFA,=MV1CFN,=MV1EYP/P,=MV3RNI,=MV6CQN,=MV6GWR,=MV6GWR/P,=MV6URC, + =MV6ZOL,=MW0CND/2K,=MW0DHF/LH,=MW5AAM/2K,=MW5GOL/LH; Solomon Islands: 28: 51: OC: -9.00: -160.00: -11.0: H4: H4,=H40/H44RK; Temotu Province: 32: 51: OC: -10.72: -165.80: -11.0: H40: @@ -1089,15 +1091,15 @@ African Italy: 33: 37: AF: 35.67: -12.67: -1.0: *IG9: IG9,IH9,=IO9Y,=IY9A; Sardinia: 15: 28: EU: 40.15: -9.27: -1.0: IS: IM0,IS,IW0U,IW0V,IW0W,IW0X,IW0Y,IW0Z,=II0C,=II0EUDX,=II0FDR,=II0IAML,=II0ICH,=II0IDP,=II0M,=II0P, - =II0PAX,=II0RSB,=II0SB,=II0SB/MM,=II0SRT/P,=II3EUDX,=IQ0AG,=IQ0AG/P,=IQ0AH,=IQ0AH/P,=IQ0AI, - =IQ0AI/P,=IQ0AK,=IQ0AK/P,=IQ0AL,=IQ0AL/P,=IQ0AM,=IQ0AM/P,=IQ0EH,=IQ0EH/P,=IQ0HO,=IQ0ID,=IQ0ID/P, - =IQ0NU,=IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0QP/LH,=IQ0QP/P,=IQ0SS,=IQ0SS/P,=IQ0US, - =IQ0UT,=IQ0XP,=IR0EO,=IR0FOC,=IR0IDP,=IR0IDP/1,=IR0IDP/2,=IR0IDP/3,=IR0LVC,=IR0MDC,=IS0/4Z5KJ/LH, - =IS0/DL5SE/LH,=IS0ICE/N,=IS0IGV/N,=IS0PGF/N,=IS0SDX/N,=IW0HRI,=IY0GA,=IY0NV; + =II0PAX,=II0RSB,=II0SB,=II0SB/MM,=II0SRE,=II0SRT/P,=II3EUDX,=IQ0AG,=IQ0AG/P,=IQ0AH,=IQ0AH/P, + =IQ0AI,=IQ0AI/P,=IQ0AK,=IQ0AK/P,=IQ0AL,=IQ0AL/P,=IQ0AM,=IQ0AM/P,=IQ0EH,=IQ0EH/P,=IQ0HO,=IQ0ID, + =IQ0ID/P,=IQ0NU,=IQ0NU/P,=IQ0NV,=IQ0NV/P,=IQ0OG,=IQ0OH,=IQ0QP,=IQ0QP/LH,=IQ0QP/P,=IQ0SS,=IQ0SS/P, + =IQ0US,=IQ0UT,=IQ0XP,=IR0EO,=IR0FOC,=IR0IDP,=IR0IDP/1,=IR0IDP/2,=IR0IDP/3,=IR0LVC,=IR0MDC, + =IS0/4Z5KJ/LH,=IS0/DL5SE/LH,=IS0ICE/N,=IS0IGV/N,=IS0PGF/N,=IS0SDX/N,=IW0HRI,=IY0GA,=IY0NV; Sicily: 15: 28: EU: 37.50: -14.00: -1.0: *IT9: - IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=IQ1QQ/9,=IT9CHU/J,=IT9CKA/CA,=IT9CLY/JZK, - =IT9DSA/CA,=IT9DTU/N,=IT9GDS/WLK,=IT9HBS/LH,=IT9JZK/WLK,=IT9KKE/JZK,=IT9MRM/N,=IT9MRZ/LH, - =IT9NCO/LH,=IT9NCO/N,=IT9OTF/JZK,=IT9RRU/LH,=IT9RYH/J,=IT9RYH/N,=IT9ZSB/LH,=IW0HBY/9; + IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=II0GDF/9,=IQ1QQ/9,=IT9CHU/J,=IT9CKA/CA, + =IT9CLY/JZK,=IT9DSA/CA,=IT9DTU/N,=IT9GDS/WLK,=IT9HBS/LH,=IT9JZK/WLK,=IT9KKE/JZK,=IT9MRM/N, + =IT9MRZ/LH,=IT9NCO/LH,=IT9NCO/N,=IT9OTF/JZK,=IT9RRU/LH,=IT9RYH/J,=IT9RYH/N,=IT9ZSB/LH,=IW0HBY/9; Djibouti: 37: 48: AF: 11.75: -42.35: -3.0: J2: J2; Grenada: 08: 11: NA: 12.13: 61.68: 4.0: J3: @@ -1147,39 +1149,39 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: WE0(4)[7],WF0(4)[7],WG0(4)[7],WI0(4)[7],WJ0(4)[7],WK0(4)[7],WM0(4)[7],WN0(4)[7],WO0(4)[7], WQ0(4)[7],WR0(4)[7],WS0(4)[7],WT0(4)[7],WU0(4)[7],WV0(4)[7],WW0(4)[7],WX0(4)[7],WY0(4)[7], WZ0(4)[7],=AH2BW(4)[7],=AH2BY(4)[7],=AH6ES/0(4)[7],=AH6FY(4)[7],=AH6MD(4)[7],=AH6N(4)[7], - =AH6N/0(4)[7],=AH6O(4)[7],=AH6OS(4)[7],=AH6PC(4)[7],=AH6RS(4)[7],=AL0G(4)[7],=AL3E(4)[7], - =AL6E(4)[7],=AL7BX(4)[7],=AL7EK(4)[7],=AL7FU(4)[7],=AL7GQ(4)[7],=AL7NY(4)[7],=AL7O/0(4)[7], - =AL7OC(4)[7],=AL7QQ(4)[7],=AL7QQ/P(4)[7],=AL9DB(4)[7],=KH0EX(4)[7],=KH2CZ(4)[7],=KH2JK(4)[7], - =KH2OP(4)[7],=KH2OP/0(4)[7],=KH2SL(4)[7],=KH6DM(4)[7],=KH6GN(4)[7],=KH6HNL(4)[7],=KH6HTV/0(4)[7], - =KH6JEM(4)[7],=KH6JFH(4)[7],=KH6NM(4)[7],=KH6NR(4)[7],=KH6RON(4)[7],=KH6SB(4)[7],=KH6TL(4)[7], - =KH6UC(4)[7],=KH6VHF(4)[7],=KH6VO(4)[7],=KH7AL/M(4)[7],=KH7AL/P(4)[7],=KH7BU(4)[7],=KH7GF(4)[7], - =KH7HA(4)[7],=KH7HY(4)[7],=KH7QI(4)[7],=KH7QJ(4)[7],=KH7QT(4)[7],=KH8CW(4)[7],=KL0DW(4)[7], - =KL0EQ(4)[7],=KL0FOX(4)[7],=KL0GP(4)[7],=KL0GQ(4)[7],=KL0MW(4)[7],=KL0N(4)[7],=KL0SV(4)[7], - =KL0UP(4)[7],=KL0WIZ(4)[7],=KL1HT(4)[7],=KL1IF(4)[7],=KL1IF/M(4)[7],=KL1J(4)[7],=KL1LD(4)[7], - =KL1PV(4)[7],=KL1TU(4)[7],=KL1V/M(4)[7],=KL1VN(4)[7],=KL2A/0(4)[7],=KL2FU(4)[7],=KL2GR(4)[7], - =KL2QO(4)[7],=KL2SX(4)[7],=KL3LY(4)[7],=KL3MA(4)[7],=KL3MB(4)[7],=KL3MC(4)[7],=KL3QS(4)[7], - =KL3SM(4)[7],=KL3VN(4)[7],=KL4IY(4)[7],=KL4JN(4)[7],=KL7DE(4)[7],=KL7DTJ(4)[7],=KL7ED(4)[7], - =KL7EP(4)[7],=KL7EP/0(4)[7],=KL7GKY/0(4)[7],=KL7GLK(4)[7],=KL7GLK/0(4)[7],=KL7GLK/B(4)[7], - =KL7IXI(4)[7],=KL7JGJ(4)[7],=KL7JIE(4)[7],=KL7JIM(4)[7],=KL7JR/0(4)[7],=KL7MH(4)[7],=KL7MV(4)[7], - =KL7NW(4)[7],=KL7PE/M(4)[7],=KL7QW(4)[7],=KL7QW/0(4)[7],=KL7RH(4)[7],=KL7RZ(4)[7],=KL7SB/0(4)[7], - =KL7SFD(4)[7],=KL7UV(4)[7],=KL7XH(4)[7],=KL7YL(4)[7],=KL7YY/0(4)[7],=KL7ZD(4)[7],=KL7ZT(4)[7], - =KP4ATV(4)[7],=KP4MLF(4)[7],=KP4XZ(4)[7],=NH2LH(4)[7],=NH6CF(4)[7],=NH6WF(4)[7],=NH7CY(4)[7], - =NH7FI(4)[7],=NH7XM(4)[7],=NH7ZH(4)[7],=NL7AS(4)[7],=NL7BU(4)[7],=NL7CQ(4)[7],=NL7CQ/0(4)[7], - =NL7FF(4)[7],=NL7FU(4)[7],=NL7XT(4)[7],=NL7XU(4)[7],=NP4AI(4)[7],=NP4AI/0(4)[7],=VE4AGT/M(4)[7], - =VE4XC/M(4)[7],=WH2S(4)[7],=WH6AKZ(4)[7],=WH6ANH(4)[7],=WH6BLT(4)[7],=WH6BUL(4)[7],=WH6BXD(4)[7], - =WH6CTU(4)[7],=WH6CUE(4)[7],=WH6CYM(4)[7],=WH6CZI(4)[7],=WH6CZU(4)[7],=WH6DCJ(4)[7],=WH6DUV(4)[7], - =WH6EAE(4)[7],=WH6ENX(4)[7],=WH6LR(4)[7],=WH6MS(4)[7],=WH6QS(4)[7],=WH7DA(4)[7],=WH7IR(4)[7], - =WH7MZ(4)[7],=WH7PV(4)[7],=WH9AAH(4)[7],=WL0JF(4)[7],=WL1ON(4)[7],=WL7AEC(4)[7],=WL7AJA(4)[7], - =WL7ANY(4)[7],=WL7ATK(4)[7],=WL7BRV(4)[7],=WL7BT(4)[7],=WL7CEG(4)[7],=WL7CLI(4)[7],=WL7CPW(4)[7], - =WL7CQF(4)[7],=WL7CRT(4)[7],=WL7CY(4)[7],=WL7JB(4)[7],=WL7LZ(4)[7],=WL7LZ/M(4)[7],=WL7RV(4)[7], - =WL7YM(4)[7],=WP2B/0(4)[7],=WP3QH(4)[7],=WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4LC(4)[7], - =WP4NPV(4)[7], - =AH2V(5)[8],=AH2W(5)[8],=AH6BV(5)[8],=AL0A(5)[8],=AL1O(5)[8],=AL4V(5)[8],=AL6L(5)[8],=AL6M(5)[8], - =AL7EL(5)[8],=AL7LV(5)[8],=AL7QS(5)[8],=AL8E(5)[8],=KH2AB(5)[8],=KH2EH(5)[8],=KH6GR(5)[8], - =KH6HZ(5)[8],=KH6IKI(5)[8],=KH6JKQ(5)[8],=KH6JUK(5)[8],=KH6RF(5)[8],=KH6RF/1(5)[8],=KH6RF/M(5)[8], - =KH7CD(5)[8],=KH7CD/1(5)[8],=KH8AC(5)[8],=KH8AC/1(5)[8],=KL1OC(5)[8],=KL1T(5)[8],=KL1WD(5)[8], - =KL2A/1(5)[8],=KL2DM(5)[8],=KL2GA(5)[8],=KL2IC(5)[8],=KL2KL(5)[8],=KL7CE/1(5)[8],=KL7IOP(5)[8], - =KL7IXX(5)[8],=KL7JHM(5)[8],=KL7JJN(5)[8],=KL7JR/1(5)[8],=KL7JT(5)[8],=KL7LK(5)[8], + =AH6N/0(4)[7],=AH6O(4)[7],=AH6OS(4)[7],=AH6PC(4)[7],=AH6RS(4)[7],=AL0G(4)[7],=AL1VE/R(4)[7], + =AL3E(4)[7],=AL6E(4)[7],=AL7BX(4)[7],=AL7EK(4)[7],=AL7FU(4)[7],=AL7GQ(4)[7],=AL7NY(4)[7], + =AL7O/0(4)[7],=AL7OC(4)[7],=AL7QQ(4)[7],=AL7QQ/P(4)[7],=AL9DB(4)[7],=KH0EX(4)[7],=KH2CZ(4)[7], + =KH2JK(4)[7],=KH2OP(4)[7],=KH2OP/0(4)[7],=KH2SL(4)[7],=KH6DM(4)[7],=KH6GN(4)[7],=KH6HNL(4)[7], + =KH6HTV/0(4)[7],=KH6JEM(4)[7],=KH6JFH(4)[7],=KH6NM(4)[7],=KH6NR(4)[7],=KH6RON(4)[7],=KH6SB(4)[7], + =KH6TL(4)[7],=KH6UC(4)[7],=KH6VHF(4)[7],=KH6VO(4)[7],=KH7AL/M(4)[7],=KH7AL/P(4)[7],=KH7BU(4)[7], + =KH7GF(4)[7],=KH7HA(4)[7],=KH7HY(4)[7],=KH7QI(4)[7],=KH7QJ(4)[7],=KH7QT(4)[7],=KH8CW(4)[7], + =KL0DW(4)[7],=KL0EQ(4)[7],=KL0FOX(4)[7],=KL0GP(4)[7],=KL0GQ(4)[7],=KL0MW(4)[7],=KL0N(4)[7], + =KL0SV(4)[7],=KL0UP(4)[7],=KL0WIZ(4)[7],=KL1HT(4)[7],=KL1IF(4)[7],=KL1IF/M(4)[7],=KL1J(4)[7], + =KL1LD(4)[7],=KL1PV(4)[7],=KL1TU(4)[7],=KL1V/M(4)[7],=KL1VN(4)[7],=KL2A/0(4)[7],=KL2FU(4)[7], + =KL2GR(4)[7],=KL2QO(4)[7],=KL2SX(4)[7],=KL3LY(4)[7],=KL3MA(4)[7],=KL3MB(4)[7],=KL3MC(4)[7], + =KL3MW(4)[7],=KL3QS(4)[7],=KL3SM(4)[7],=KL3VN(4)[7],=KL4IY(4)[7],=KL4JN(4)[7],=KL7DE(4)[7], + =KL7DTJ(4)[7],=KL7ED(4)[7],=KL7EP(4)[7],=KL7EP/0(4)[7],=KL7GKY/0(4)[7],=KL7GLK(4)[7], + =KL7GLK/0(4)[7],=KL7GLK/B(4)[7],=KL7IXI(4)[7],=KL7JGJ(4)[7],=KL7JIE(4)[7],=KL7JIM(4)[7], + =KL7JR/0(4)[7],=KL7MH(4)[7],=KL7MV(4)[7],=KL7NW(4)[7],=KL7PE/M(4)[7],=KL7QW(4)[7],=KL7QW/0(4)[7], + =KL7RH(4)[7],=KL7RZ(4)[7],=KL7SB/0(4)[7],=KL7SFD(4)[7],=KL7UV(4)[7],=KL7XH(4)[7],=KL7YL(4)[7], + =KL7YY/0(4)[7],=KL7ZD(4)[7],=KL7ZT(4)[7],=KP4ATV(4)[7],=KP4MLF(4)[7],=KP4XZ(4)[7],=NH2LH(4)[7], + =NH6CF(4)[7],=NH6WF(4)[7],=NH7CY(4)[7],=NH7FI(4)[7],=NH7XM(4)[7],=NH7ZH(4)[7],=NL7AS(4)[7], + =NL7BU(4)[7],=NL7CQ(4)[7],=NL7CQ/0(4)[7],=NL7FF(4)[7],=NL7FU(4)[7],=NL7XT(4)[7],=NL7XU(4)[7], + =NP4AI(4)[7],=NP4AI/0(4)[7],=VE4AGT/M(4)[7],=VE4XC/M(4)[7],=WH2S(4)[7],=WH6AKZ(4)[7], + =WH6ANH(4)[7],=WH6BLT(4)[7],=WH6BUL(4)[7],=WH6BXD(4)[7],=WH6CTU(4)[7],=WH6CUE(4)[7],=WH6CYM(4)[7], + =WH6CZI(4)[7],=WH6CZU(4)[7],=WH6DCJ(4)[7],=WH6DUV(4)[7],=WH6EAE(4)[7],=WH6ENX(4)[7],=WH6LR(4)[7], + =WH6MS(4)[7],=WH6QS(4)[7],=WH7DA(4)[7],=WH7IR(4)[7],=WH7MZ(4)[7],=WH7PV(4)[7],=WH9AAH(4)[7], + =WL0JF(4)[7],=WL1ON(4)[7],=WL7AEC(4)[7],=WL7AJA(4)[7],=WL7ANY(4)[7],=WL7ATK(4)[7],=WL7BRV(4)[7], + =WL7BT(4)[7],=WL7CEG(4)[7],=WL7CLI(4)[7],=WL7CPW(4)[7],=WL7CQF(4)[7],=WL7CRT(4)[7],=WL7CY(4)[7], + =WL7JB(4)[7],=WL7LZ(4)[7],=WL7LZ/M(4)[7],=WL7RV(4)[7],=WL7YM(4)[7],=WP2B/0(4)[7],=WP3QH(4)[7], + =WP3Y(4)[7],=WP4BTQ(4)[7],=WP4GQR(4)[7],=WP4LC(4)[7],=WP4NPV(4)[7], + =AH2V(5)[8],=AH2W(5)[8],=AH6BV(5)[8],=AL0A(5)[8],=AL1O(5)[8],=AL4V(5)[8],=AL6I(5)[8],=AL6L(5)[8], + =AL6M(5)[8],=AL7EL(5)[8],=AL7LV(5)[8],=AL7QS(5)[8],=AL8E(5)[8],=KH2AB(5)[8],=KH2EH(5)[8], + =KH6GR(5)[8],=KH6HZ(5)[8],=KH6IKI(5)[8],=KH6JKQ(5)[8],=KH6JUK(5)[8],=KH6RF(5)[8],=KH6RF/1(5)[8], + =KH6RF/M(5)[8],=KH7CD(5)[8],=KH7CD/1(5)[8],=KH8AC(5)[8],=KH8AC/1(5)[8],=KL1OC(5)[8],=KL1T(5)[8], + =KL1WD(5)[8],=KL2A/1(5)[8],=KL2DM(5)[8],=KL2GA(5)[8],=KL2IC(5)[8],=KL2KL(5)[8],=KL7CE/1(5)[8], + =KL7IOP(5)[8],=KL7IXX(5)[8],=KL7JHM(5)[8],=KL7JJN(5)[8],=KL7JR/1(5)[8],=KL7JT(5)[8],=KL7LK(5)[8], =KL7USI/1(5)[8],=KL8DX(5)[8],=KP4ANG(5)[8],=KP4BLS(5)[8],=KP4BPR(5)[8],=KP4DGF(5)[8], =KP4EC/1(5)[8],=KP4G(5)[8],=KP4GVT(5)[8],=KP4MR(5)[8],=KP4NPL(5)[8],=KP4NW(5)[8],=KP4R(5)[8], =KP4RCD(5)[8],=KP4ZEM(5)[8],=NH0H(5)[8],=NH6IH(5)[8],=NH6XW(5)[8],=NH6ZB(5)[8],=NL7AK(5)[8], @@ -1189,9 +1191,9 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =WH6CT(5)[8],=WH6DSN(5)[8],=WH6EI(5)[8],=WH6FBH(5)[8],=WH6MY(5)[8],=WH6SW(5)[8],=WH6SW/1(5)[8], =WH7TP(5)[8],=WL1B(5)[8],=WL7B(5)[8],=WL7CC(5)[8],=WL7CUP(5)[8],=WL7CVD(5)[8],=WL7WO(5)[8], =WL7WO/1(5)[8],=WL7Z/1(5)[8],=WP2MG(5)[8],=WP3NN(5)[8],=WP3QV(5)[8],=WP3QV/1(5)[8],=WP3WV(5)[8], - =WP4AKE(5)[8],=WP4AZJ(5)[8],=WP4BC(5)[8],=WP4BF(5)[8],=WP4CJH(5)[8],=WP4JF(5)[8],=WP4KQ(5)[8], - =WP4MKJ(5)[8],=WP4MMV(5)[8],=WP4MOC(5)[8],=WP4NKW(5)[8],=WP4NUV(5)[8],=WP4NYY(5)[8],=WP4OIG(5)[8], - =WP4OJK(5)[8], + =WP4AKE(5)[8],=WP4AZJ(5)[8],=WP4BC(5)[8],=WP4BF(5)[8],=WP4CGI(5)[8],=WP4CJH(5)[8],=WP4JF(5)[8], + =WP4KQ(5)[8],=WP4MKJ(5)[8],=WP4MMV(5)[8],=WP4MOC(5)[8],=WP4NKW(5)[8],=WP4NUV(5)[8],=WP4NYY(5)[8], + =WP4OIG(5)[8],=WP4OJK(5)[8], =AH0BR(5)[8],=AH2AL(5)[8],=AH2O(5)[8],=AH6K(5)[8],=AL0Q(5)[8],=AL0Y(5)[8],=AL2O(5)[8], =AL7RG(5)[8],=KH2CW(5)[8],=KH2P(5)[8],=KH2R(5)[8],=KH4AG(5)[8],=KH6ALN(5)[8],=KH6HO(5)[8], =KH7GA(5)[8],=KH7JO(5)[8],=KH7JO/2(5)[8],=KH7MX(5)[8],=KH7NE(5)[8],=KH8ZK(5)[8],=KL0TV(5)[8], @@ -1219,11 +1221,11 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =NP2EP(5)[8],=NP2G(5)[8],=NP2NC(5)[8],=NP3ES(5)[8],=NP3IP(5)[8],=NP3YN(5)[8],=NP4RH(5)[8], =NP4YZ(5)[8],=WH6ADS(5)[8],=WH6AWO(5)[8],=WH6AZN(5)[8],=WH6CE(5)[8],=WH6CTO(5)[8],=WH6DOA(5)[8], =WH6ECO(5)[8],=WH6EEL(5)[8],=WH6EEN(5)[8],=WH6EIJ(5)[8],=WH6IO(5)[8],=WH6OB(5)[8],=WH7F(5)[8], - =WH7USA(5)[8],=WL7AF(5)[8],=WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8],=WP3EC(5)[8], - =WP3FK(5)[8],=WP4DA(5)[8],=WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HRK(5)[8],=WP4HSZ(5)[8], - =WP4KDN(5)[8],=WP4KKX(5)[8],=WP4LEM(5)[8],=WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8],=WP4MYN(5)[8], - =WP4OSQ(5)[8],=WP4PPH(5)[8],=WP4PQN(5)[8],=WP4PUR(5)[8],=WP4PYL(5)[8],=WP4PYM(5)[8],=WP4PYN(5)[8], - =WP4PYT(5)[8],=WP4PYU(5)[8],=WP4PYV(5)[8],=WP4PYZ(5)[8],=WP4PZA(5)[8], + =WH7USA(5)[8],=WL7AF(5)[8],=WL7AQ(5)[8],=WL7L(5)[8],=WP2XX(5)[8],=WP3BX(5)[8],=WP3CC(5)[8], + =WP3EC(5)[8],=WP3FK(5)[8],=WP4DA(5)[8],=WP4DCK(5)[8],=WP4EDM(5)[8],=WP4GJL(5)[8],=WP4HRK(5)[8], + =WP4HSZ(5)[8],=WP4KDN(5)[8],=WP4KKX(5)[8],=WP4LEM(5)[8],=WP4LNP(5)[8],=WP4MNV(5)[8],=WP4MSX(5)[8], + =WP4MYN(5)[8],=WP4NXG(5)[8],=WP4OSQ(5)[8],=WP4PPH(5)[8],=WP4PQN(5)[8],=WP4PUR(5)[8],=WP4PYL(5)[8], + =WP4PYM(5)[8],=WP4PYN(5)[8],=WP4PYT(5)[8],=WP4PYU(5)[8],=WP4PYV(5)[8],=WP4PYZ(5)[8],=WP4PZA(5)[8], =AH0BV(5)[8],=AH0BZ(5)[8],=AH0G(5)[8],=AH2AJ(5)[8],=AH2AM(5)[8],=AH2AV/4(5)[8],=AH2DF(5)[8], =AH2EB(5)[8],=AH2X(5)[8],=AH3B(5)[8],=AH6AL(5)[8],=AH6AT(5)[8],=AH6AU(5)[8],=AH6BJ(5)[8], =AH6C(5)[8],=AH6EZ/4(5)[8],=AH6FX(5)[8],=AH6FX/4(5)[8],=AH6IC(5)[8],=AH6IJ(5)[8],=AH6IW(5)[8], @@ -1236,85 +1238,86 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AL7RE(5)[8],=AL7RL(5)[8],=G8ERJ(5)[8],=GO4AZM(5)[8],=GQ4AZM(5)[8],=GR4AZM(5)[8],=KH0CW(5)[8], =KH0HR(5)[8],=KH0NI(5)[8],=KH0ZZ(5)[8],=KH2BX(5)[8],=KH2D(5)[8],=KH2D/4(5)[8],=KH2GUM/P(5)[8], =KH2HB(5)[8],=KH2KD(5)[8],=KH2N(5)[8],=KH2NC(5)[8],=KH2PM(5)[8],=KH2RL(5)[8],=KH2TI(5)[8], - =KH2UV(5)[8],=KH2VM(5)[8],=KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8],=KH6CG/4(5)[8], - =KH6CT(5)[8],=KH6ED(5)[8],=KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8],=KH6ILR(5)[8], - =KH6ILR/4(5)[8],=KH6ITI(5)[8],=KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8],=KH6JNW(5)[8], - =KH6JUA(5)[8],=KH6KZ(5)[8],=KH6M(5)[8],=KH6M/4(5)[8],=KH6M/M(5)[8],=KH6MT(5)[8],=KH6MT/4(5)[8], - =KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8],=KH6PU(5)[8],=KH6RP(5)[8],=KH6TY(5)[8], - =KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8],=KH7DY(5)[8],=KH7FC(5)[8],=KH7GZ(5)[8], - =KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8],=KH7XS/4(5)[8],=KH7XT(5)[8],=KH7ZC(5)[8], - =KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8],=KL0KC(5)[8],=KL0KE/4(5)[8],=KL0L(5)[8], - =KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8],=KL0TY(5)[8],=KL0VU(5)[8],=KL0WF(5)[8], - =KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8],=KL1PA(5)[8],=KL1SS(5)[8],=KL2AK(5)[8], - =KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8],=KL2HV(5)[8],=KL2MQ(5)[8],=KL2NN(5)[8], - =KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8],=KL3KB(5)[8],=KL3KG(5)[8], - =KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8],=KL4DD(5)[8],=KL4H(5)[8], - =KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8],=KL7DA/4(5)[8],=KL7FO(5)[8], - =KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8],=KL7HQW(5)[8],=KL7HX(5)[8], - =KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8],=KL7IWF(5)[8],=KL7JDS(5)[8],=KL7JR(5)[8], - =KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8],=KL7NL/4(5)[8],=KL7NT(5)[8],=KL7P/4(5)[8], - =KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8],=KL7XA(5)[8],=KL9A/1(5)[8],=KP2AF(5)[8], - =KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8],=KP2L(5)[8],=KP2L/4(5)[8],=KP2N(5)[8], - =KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8],=KP3AMG(5)[8],=KP3BL(5)[8],=KP3BP(5)[8], - =KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8],=KP4AOD(5)[8],=KP4AOD/4(5)[8],=KP4BBN(5)[8], - =KP4BEC(5)[8],=KP4BM(5)[8],=KP4BOB(5)[8],=KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8],=KP4CPP(5)[8], - =KP4CSJ(5)[8],=KP4CSZ(5)[8],=KP4CW(5)[8],=KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8],=KP4DPQ(5)[8], - =KP4DQS(5)[8],=KP4EDL(5)[8],=KP4EIA(5)[8],=KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8], - =KP4EOR/4(5)[8],=KP4ERT(5)[8],=KP4ESC(5)[8],=KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8], - =KP4FJE(5)[8],=KP4FLP(5)[8],=KP4FOF(5)[8],=KP4HE(5)[8],=KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8], - =KP4IRI(5)[8],=KP4IT(5)[8],=KP4JC(5)[8],=KP4JCC(5)[8],=KP4JOS(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8], - =KP4KD(5)[8],=KP4KD/4(5)[8],=KP4KE/4(5)[8],=KP4LEU(5)[8],=KP4LF(5)[8],=KP4LUV(5)[8],=KP4LX(5)[8], - =KP4MA(5)[8],=KP4MPR(5)[8],=KP4MSP(5)[8],=KP4NI(5)[8],=KP4OO(5)[8],=KP4PC(5)[8],=KP4PF(5)[8], - =KP4PMD(5)[8],=KP4Q(5)[8],=KP4QT(5)[8],=KP4QT/4(5)[8],=KP4REY(5)[8],=KP4RGT(5)[8],=KP4ROP(5)[8], - =KP4RRC(5)[8],=KP4RT(5)[8],=KP4RZ(5)[8],=KP4SU(5)[8],=KP4TL(5)[8],=KP4TR(5)[8],=KP4UFO(5)[8], - =KP4USA(5)[8],=KP4WK(5)[8],=KP4WW(5)[8],=KP4WY(5)[8],=KP4XP(5)[8],=KP4Y(5)[8],=KP4YLV(5)[8], - =KP4ZV(5)[8],=KP4ZX(5)[8],=NH2A(5)[8],=NH2BQ(5)[8],=NH2DB(5)[8],=NH2F(5)[8],=NH6AU(5)[8], - =NH6BD/4(5)[8],=NH6E(5)[8],=NH6GE(5)[8],=NH6GR(5)[8],=NH6HX(5)[8],=NH6HX/4(5)[8],=NH6JX(5)[8], - =NH6KI(5)[8],=NH6QR(5)[8],=NH6SR(5)[8],=NH6T(5)[8],=NH6TL(5)[8],=NH7AA(5)[8],=NH7AQ(5)[8], - =NH7AR(5)[8],=NH7FG(5)[8],=NH7OI(5)[8],=NH7T/4(5)[8],=NH7UN(5)[8],=NH7XN(5)[8],=NL5L(5)[8], - =NL7AJ(5)[8],=NL7AU(5)[8],=NL7AU/4(5)[8],=NL7BV(5)[8],=NL7KL(5)[8],=NL7KX(5)[8],=NL7LO(5)[8], - =NL7LR(5)[8],=NL7LY(5)[8],=NL7MD(5)[8],=NL7MR(5)[8],=NL7OB(5)[8],=NL7OS(5)[8],=NL7P(5)[8], - =NL7PV(5)[8],=NL7U(5)[8],=NL7VV(5)[8],=NL7VX(5)[8],=NL7VX/4(5)[8],=NL7VX/M(5)[8],=NL7YZ(5)[8], - =NP2B(5)[8],=NP2B/4(5)[8],=NP2BB(5)[8],=NP2BW(5)[8],=NP2C(5)[8],=NP2C/4(5)[8],=NP2CB(5)[8], - =NP2D(5)[8],=NP2DJ(5)[8],=NP2EI(5)[8],=NP2FT(5)[8],=NP2GN(5)[8],=NP2GW(5)[8],=NP2HQ(5)[8], - =NP2HS(5)[8],=NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8],=NP2IJ(5)[8],=NP2IS(5)[8],=NP2IW(5)[8], - =NP2IX(5)[8],=NP2JA(5)[8],=NP2JS(5)[8],=NP2L(5)[8],=NP2LC(5)[8],=NP2MM(5)[8],=NP2MN(5)[8], - =NP2MP(5)[8],=NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8],=NP2OL(5)[8],=NP2OO(5)[8],=NP2OR(5)[8], - =NP2PA(5)[8],=NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8],=NP3AX(5)[8],=NP3BL(5)[8],=NP3CC(5)[8], - =NP3CI(5)[8],=NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8],=NP3G(5)[8],=NP3HD(5)[8],=NP3HG(5)[8], - =NP3HN(5)[8],=NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8],=NP3IU(5)[8],=NP3K(5)[8],=NP3KM(5)[8], - =NP3MM(5)[8],=NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8],=NP3QT(5)[8],=NP3R(5)[8],=NP3ST(5)[8], - =NP3TM(5)[8],=NP3UM(5)[8],=NP3VJ(5)[8],=NP3WX(5)[8],=NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8], - =NP4CK(5)[8],=NP4CV(5)[8],=NP4DM(5)[8],=NP4EM(5)[8],=NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8], - =NP4JL(5)[8],=NP4JU(5)[8],=NP4KV(5)[8],=NP4M(5)[8],=NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8], - =NP4SY(5)[8],=NP4TR(5)[8],=NP4WT(5)[8],=NP4XB(5)[8],=WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8], - =WH6A(5)[8],=WH6ACF(5)[8],=WH6AJS(5)[8],=WH6AQ(5)[8],=WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8], - =WH6CEF(5)[8],=WH6CMT(5)[8],=WH6CNC(5)[8],=WH6CTC(5)[8],=WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8], - =WH6DMJ(5)[8],=WH6DNF(5)[8],=WH6DOL(5)[8],=WH6DUJ(5)[8],=WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8], - =WH6EKW(5)[8],=WH6ELG(5)[8],=WH6ELM(5)[8],=WH6ETE(5)[8],=WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8], - =WH6HA(5)[8],=WH6IF(5)[8],=WH6IZ(5)[8],=WH6J(5)[8],=WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8], - =WH6LE/M(5)[8],=WH6LE/P(5)[8],=WH6NE(5)[8],=WH6WX(5)[8],=WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8], - =WH6ZF(5)[8],=WH7GD(5)[8],=WH7HX(5)[8],=WH7NI(5)[8],=WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8], - =WH7YV(5)[8],=WH7ZM(5)[8],=WH9AAF(5)[8],=WL7AUL(5)[8],=WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8], - =WL7CIB(5)[8],=WL7CKJ(5)[8],=WL7COL(5)[8],=WL7CQT(5)[8],=WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8], - =WL7SR(5)[8],=WL7UN(5)[8],=WL7WN(5)[8],=WL7YX(5)[8],=WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8], - =WP2AIG(5)[8],=WP2BB(5)[8],=WP2C(5)[8],=WP2L(5)[8],=WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8], - =WP3BC(5)[8],=WP3JE(5)[8],=WP3JQ(5)[8],=WP3JU(5)[8],=WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8], - =WP3ME(5)[8],=WP3NIS(5)[8],=WP3O(5)[8],=WP3TQ(5)[8],=WP3ZA(5)[8],=WP3ZP(5)[8],=WP4AIE(5)[8], - =WP4AIL(5)[8],=WP4AIZ(5)[8],=WP4ALH(5)[8],=WP4AQK(5)[8],=WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8], - =WP4BIN(5)[8],=WP4BJS(5)[8],=WP4BK(5)[8],=WP4BOC(5)[8],=WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8], - =WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8],=WP4DCB(5)[8],=WP4DFK(5)[8],=WP4DNE(5)[8],=WP4DPX(5)[8], - =WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8],=WP4FRK(5)[8],=WP4FS(5)[8],=WP4GAK(5)[8],=WP4GFH(5)[8], - =WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8],=WP4HNN(5)[8],=WP4HOX(5)[8],=WP4IF(5)[8],=WP4IJ(5)[8], - =WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8],=WP4JT(5)[8],=WP4KCJ(5)[8],=WP4KDH(5)[8],=WP4KFP(5)[8], - =WP4KGI(5)[8],=WP4KI(5)[8],=WP4KJV(5)[8],=WP4KSK(5)[8],=WP4KTD(5)[8],=WP4LBK(5)[8],=WP4LDG(5)[8], - =WP4LDL(5)[8],=WP4LDP(5)[8],=WP4LHA(5)[8],=WP4MAE(5)[8],=WP4MD(5)[8],=WP4MO(5)[8],=WP4MQF(5)[8], - =WP4MWE(5)[8],=WP4MXE(5)[8],=WP4MYG(5)[8],=WP4MYK(5)[8],=WP4NAI(5)[8],=WP4NAQ(5)[8],=WP4NBF(5)[8], - =WP4NBG(5)[8],=WP4NFU(5)[8],=WP4NKU(5)[8],=WP4NLQ(5)[8],=WP4NQA(5)[8],=WP4NVL(5)[8],=WP4NWW(5)[8], - =WP4O/4(5)[8],=WP4O/M(5)[8],=WP4ODR(5)[8],=WP4OFA(5)[8],=WP4OHJ(5)[8],=WP4OLM(5)[8],=WP4OMG(5)[8], - =WP4OMV(5)[8],=WP4ONR(5)[8],=WP4OOI(5)[8],=WP4OPD(5)[8],=WP4OPF(5)[8],=WP4OPG(5)[8],=WP4OTP(5)[8], - =WP4OXA(5)[8],=WP4P(5)[8],=WP4PR(5)[8],=WP4PUV(5)[8],=WP4PWV(5)[8],=WP4PXG(5)[8],=WP4QHU(5)[8], - =WP4SW(5)[8],=WP4TD(5)[8],=WP4TX(5)[8],=WP4UC(5)[8],=WP4UM(5)[8], + =KH2UG(5)[8],=KH2UV(5)[8],=KH2VM(5)[8],=KH3AC(5)[8],=KH3AG(5)[8],=KH6AME(5)[8],=KH6CG(5)[8], + =KH6CG/4(5)[8],=KH6CT(5)[8],=KH6ED(5)[8],=KH6HHS(5)[8],=KH6HHS/4(5)[8],=KH6HOW(5)[8], + =KH6ILR(5)[8],=KH6ILR/4(5)[8],=KH6ITI(5)[8],=KH6JAU(5)[8],=KH6JIM(5)[8],=KH6JJD(5)[8], + =KH6JNW(5)[8],=KH6JUA(5)[8],=KH6KZ(5)[8],=KH6M(5)[8],=KH6M/4(5)[8],=KH6M/M(5)[8],=KH6MT(5)[8], + =KH6MT/4(5)[8],=KH6NC(5)[8],=KH6NI(5)[8],=KH6OU(5)[8],=KH6POI(5)[8],=KH6PU(5)[8],=KH6RP(5)[8], + =KH6TY(5)[8],=KH6TY/R(5)[8],=KH6UN(5)[8],=KH6XH(5)[8],=KH7DM(5)[8],=KH7DY(5)[8],=KH7FC(5)[8], + =KH7GM(5)[8],=KH7GZ(5)[8],=KH7HJ/4(5)[8],=KH7OC(5)[8],=KH7OV(5)[8],=KH7WK(5)[8],=KH7XS/4(5)[8], + =KH7XT(5)[8],=KH7ZC(5)[8],=KH8BB(5)[8],=KH8DO(5)[8],=KL0AG(5)[8],=KL0IP(5)[8],=KL0KC(5)[8], + =KL0KE/4(5)[8],=KL0L(5)[8],=KL0MG(5)[8],=KL0MP(5)[8],=KL0S(5)[8],=KL0SS(5)[8],=KL0TY(5)[8], + =KL0VU(5)[8],=KL0WF(5)[8],=KL1KP(5)[8],=KL1NK(5)[8],=KL1NS(5)[8],=KL1OK(5)[8],=KL1PA(5)[8], + =KL1SS(5)[8],=KL2AK(5)[8],=KL2CX(5)[8],=KL2EY(5)[8],=KL2GG(5)[8],=KL2GP(5)[8],=KL2HV(5)[8], + =KL2MQ(5)[8],=KL2NN(5)[8],=KL2UQ(5)[8],=KL2XI(5)[8],=KL3EV(5)[8],=KL3HG(5)[8],=KL3IA(5)[8], + =KL3KB(5)[8],=KL3KG(5)[8],=KL3NR(5)[8],=KL3WM(5)[8],=KL3X(5)[8],=KL3XB(5)[8],=KL4CO(5)[8], + =KL4DD(5)[8],=KL4H(5)[8],=KL4J(5)[8],=KL5X(5)[8],=KL5YJ(5)[8],=KL7A(5)[8],=KL7DA(5)[8], + =KL7DA/4(5)[8],=KL7FO(5)[8],=KL7GLL(5)[8],=KL7H(5)[8],=KL7HIM(5)[8],=KL7HNY(5)[8],=KL7HOT(5)[8], + =KL7HQW(5)[8],=KL7HX(5)[8],=KL7I(5)[8],=KL7IEK(5)[8],=KL7IKZ(5)[8],=KL7IV(5)[8],=KL7IVY(5)[8], + =KL7IWF(5)[8],=KL7JDS(5)[8],=KL7JR(5)[8],=KL7LS(5)[8],=KL7MJ(5)[8],=KL7NCO(5)[8],=KL7NL(5)[8], + =KL7NL/4(5)[8],=KL7NT(5)[8],=KL7P/4(5)[8],=KL7QH(5)[8],=KL7QU(5)[8],=KL7SR(5)[8],=KL7USI/4(5)[8], + =KL7XA(5)[8],=KL9A/1(5)[8],=KP2AF(5)[8],=KP2AV(5)[8],=KP2AV/4(5)[8],=KP2CH(5)[8],=KP2CR(5)[8], + =KP2L(5)[8],=KP2L/4(5)[8],=KP2N(5)[8],=KP2R(5)[8],=KP2U(5)[8],=KP2US(5)[8],=KP2V(5)[8], + =KP3AMG(5)[8],=KP3BL(5)[8],=KP3BP(5)[8],=KP3J(5)[8],=KP3SK(5)[8],=KP3U(5)[8],=KP4AD(5)[8], + =KP4AOD(5)[8],=KP4AOD/4(5)[8],=KP4BBN(5)[8],=KP4BEC(5)[8],=KP4BM(5)[8],=KP4BOB(5)[8], + =KP4CBP(5)[8],=KP4CEL(5)[8],=KP4CH(5)[8],=KP4CPP(5)[8],=KP4CSJ(5)[8],=KP4CSZ(5)[8],=KP4CW(5)[8], + =KP4CZ(5)[8],=KP4DAC(5)[8],=KP4DDS(5)[8],=KP4DPQ(5)[8],=KP4DQS(5)[8],=KP4EDL(5)[8],=KP4EIA(5)[8], + =KP4EMY(5)[8],=KP4ENK(5)[8],=KP4EOR(5)[8],=KP4EOR/4(5)[8],=KP4ERT(5)[8],=KP4ESC(5)[8], + =KP4FBS(5)[8],=KP4FGI(5)[8],=KP4FIR(5)[8],=KP4FJE(5)[8],=KP4FLP(5)[8],=KP4FOF(5)[8],=KP4HE(5)[8], + =KP4HF(5)[8],=KP4HN(5)[8],=KP4II(5)[8],=KP4IRI(5)[8],=KP4IT(5)[8],=KP4JC(5)[8],=KP4JCC(5)[8], + =KP4JOS(5)[8],=KP4JWR(5)[8],=KP4KA(5)[8],=KP4KD(5)[8],=KP4KD/4(5)[8],=KP4KE/4(5)[8],=KP4LEU(5)[8], + =KP4LF(5)[8],=KP4LUV(5)[8],=KP4LX(5)[8],=KP4MA(5)[8],=KP4MPR(5)[8],=KP4MSP(5)[8],=KP4NI(5)[8], + =KP4OO(5)[8],=KP4PC(5)[8],=KP4PF(5)[8],=KP4PMD(5)[8],=KP4Q(5)[8],=KP4QT(5)[8],=KP4QT/4(5)[8], + =KP4REY(5)[8],=KP4RGT(5)[8],=KP4ROP(5)[8],=KP4RRC(5)[8],=KP4RT(5)[8],=KP4RZ(5)[8],=KP4SU(5)[8], + =KP4TL(5)[8],=KP4TR(5)[8],=KP4UFO(5)[8],=KP4USA(5)[8],=KP4WK(5)[8],=KP4WW(5)[8],=KP4WY(5)[8], + =KP4XP(5)[8],=KP4Y(5)[8],=KP4YLV(5)[8],=KP4ZV(5)[8],=KP4ZX(5)[8],=NH2A(5)[8],=NH2BQ(5)[8], + =NH2DB(5)[8],=NH2F(5)[8],=NH6AU(5)[8],=NH6BD/4(5)[8],=NH6E(5)[8],=NH6GE(5)[8],=NH6GR(5)[8], + =NH6HX(5)[8],=NH6HX/4(5)[8],=NH6JX(5)[8],=NH6KI(5)[8],=NH6QR(5)[8],=NH6SR(5)[8],=NH6T(5)[8], + =NH6TL(5)[8],=NH7AA(5)[8],=NH7AQ(5)[8],=NH7AR(5)[8],=NH7FG(5)[8],=NH7OI(5)[8],=NH7T/4(5)[8], + =NH7UN(5)[8],=NH7XN(5)[8],=NL5L(5)[8],=NL7AJ(5)[8],=NL7AU(5)[8],=NL7AU/4(5)[8],=NL7BV(5)[8], + =NL7KL(5)[8],=NL7KX(5)[8],=NL7LO(5)[8],=NL7LR(5)[8],=NL7LY(5)[8],=NL7MD(5)[8],=NL7MR(5)[8], + =NL7OB(5)[8],=NL7OS(5)[8],=NL7P(5)[8],=NL7PV(5)[8],=NL7U(5)[8],=NL7VV(5)[8],=NL7VX(5)[8], + =NL7VX/4(5)[8],=NL7VX/M(5)[8],=NL7YZ(5)[8],=NP2B(5)[8],=NP2B/4(5)[8],=NP2BB(5)[8],=NP2BW(5)[8], + =NP2C(5)[8],=NP2C/4(5)[8],=NP2CB(5)[8],=NP2D(5)[8],=NP2DJ(5)[8],=NP2EI(5)[8],=NP2FT(5)[8], + =NP2GN(5)[8],=NP2GW(5)[8],=NP2HQ(5)[8],=NP2HS(5)[8],=NP2HW(5)[8],=NP2IE(5)[8],=NP2IF(5)[8], + =NP2IJ(5)[8],=NP2IS(5)[8],=NP2IW(5)[8],=NP2IX(5)[8],=NP2JA(5)[8],=NP2JS(5)[8],=NP2L(5)[8], + =NP2LC(5)[8],=NP2MM(5)[8],=NP2MN(5)[8],=NP2MP(5)[8],=NP2MR(5)[8],=NP2MR/4(5)[8],=NP2O(5)[8], + =NP2OL(5)[8],=NP2OO(5)[8],=NP2OR(5)[8],=NP2PA(5)[8],=NP2R(5)[8],=NP2T(5)[8],=NP2W(5)[8], + =NP3AX(5)[8],=NP3BL(5)[8],=NP3CC(5)[8],=NP3CI(5)[8],=NP3CM(5)[8],=NP3CT(5)[8],=NP3FR(5)[8], + =NP3G(5)[8],=NP3HD(5)[8],=NP3HG(5)[8],=NP3HN(5)[8],=NP3HP(5)[8],=NP3HU(5)[8],=NP3IL(5)[8], + =NP3IU(5)[8],=NP3K(5)[8],=NP3KM(5)[8],=NP3MM(5)[8],=NP3MX(5)[8],=NP3NC(5)[8],=NP3OW(5)[8], + =NP3QT(5)[8],=NP3R(5)[8],=NP3ST(5)[8],=NP3TM(5)[8],=NP3UM(5)[8],=NP3VJ(5)[8],=NP3WX(5)[8], + =NP4AS(5)[8],=NP4AV(5)[8],=NP4CC(5)[8],=NP4CK(5)[8],=NP4CV(5)[8],=NP4DM(5)[8],=NP4EM(5)[8], + =NP4GH(5)[8],=NP4GW(5)[8],=NP4J(5)[8],=NP4JL(5)[8],=NP4JU(5)[8],=NP4KV(5)[8],=NP4M(5)[8], + =NP4ND(5)[8],=NP4PF(5)[8],=NP4RJ(5)[8],=NP4SY(5)[8],=NP4TR(5)[8],=NP4WT(5)[8],=NP4XB(5)[8], + =WH2AAT(5)[8],=WH2ABJ(5)[8],=WH2G(5)[8],=WH6A(5)[8],=WH6ACF(5)[8],=WH6AJS(5)[8],=WH6AQ(5)[8], + =WH6AVU(5)[8],=WH6AX(5)[8],=WH6BRQ(5)[8],=WH6CEF(5)[8],=WH6CMT(5)[8],=WH6CNC(5)[8],=WH6CTC(5)[8], + =WH6CXA(5)[8],=WH6CXT(5)[8],=WH6DBX(5)[8],=WH6DMJ(5)[8],=WH6DNF(5)[8],=WH6DOL(5)[8],=WH6DUJ(5)[8], + =WH6DXT(5)[8],=WH6EFI(5)[8],=WH6EIK(5)[8],=WH6EKW(5)[8],=WH6ELG(5)[8],=WH6ELM(5)[8],=WH6ETE(5)[8], + =WH6ETF(5)[8],=WH6FCP(5)[8],=WH6FGK(5)[8],=WH6HA(5)[8],=WH6IF(5)[8],=WH6IZ(5)[8],=WH6J(5)[8], + =WH6L(5)[8],=WH6LE(5)[8],=WH6LE/4(5)[8],=WH6LE/M(5)[8],=WH6LE/P(5)[8],=WH6NE(5)[8],=WH6WX(5)[8], + =WH6YH(5)[8],=WH6YH/4(5)[8],=WH6YM(5)[8],=WH6ZF(5)[8],=WH7GD(5)[8],=WH7HX(5)[8],=WH7NI(5)[8], + =WH7XK(5)[8],=WH7XU(5)[8],=WH7YL(5)[8],=WH7YV(5)[8],=WH7ZM(5)[8],=WH9AAF(5)[8],=WL7AUL(5)[8], + =WL7AX(5)[8],=WL7BAL(5)[8],=WL7CHA(5)[8],=WL7CIB(5)[8],=WL7CKJ(5)[8],=WL7COL(5)[8],=WL7CQT(5)[8], + =WL7CUY(5)[8],=WL7E/4(5)[8],=WL7GV(5)[8],=WL7SR(5)[8],=WL7UN(5)[8],=WL7WN(5)[8],=WL7YX(5)[8], + =WP2AGD(5)[8],=WP2AGO(5)[8],=WP2AHC(5)[8],=WP2AIG(5)[8],=WP2BB(5)[8],=WP2C(5)[8],=WP2L(5)[8], + =WP2MA(5)[8],=WP2P(5)[8],=WP3AY(5)[8],=WP3BC(5)[8],=WP3JE(5)[8],=WP3JQ(5)[8],=WP3JU(5)[8], + =WP3K(5)[8],=WP3LE(5)[8],=WP3MB(5)[8],=WP3ME(5)[8],=WP3NIS(5)[8],=WP3O(5)[8],=WP3ZA(5)[8], + =WP3ZP(5)[8],=WP4AIE(5)[8],=WP4AIL(5)[8],=WP4AIZ(5)[8],=WP4ALH(5)[8],=WP4AQK(5)[8],=WP4AVW(5)[8], + =WP4B(5)[8],=WP4BFP(5)[8],=WP4BGM(5)[8],=WP4BIN(5)[8],=WP4BJS(5)[8],=WP4BK(5)[8],=WP4BOC(5)[8], + =WP4BQV(5)[8],=WP4BXS(5)[8],=WP4CKW(5)[8],=WP4CLS(5)[8],=WP4CMH(5)[8],=WP4DC(5)[8],=WP4DCB(5)[8], + =WP4DFK(5)[8],=WP4DNE(5)[8],=WP4DPX(5)[8],=WP4ENX(5)[8],=WP4EXH(5)[8],=WP4FEI(5)[8],=WP4FRK(5)[8], + =WP4FS(5)[8],=WP4GAK(5)[8],=WP4GFH(5)[8],=WP4GX(5)[8],=WP4GYA(5)[8],=WP4HFZ(5)[8],=WP4HNN(5)[8], + =WP4HOX(5)[8],=WP4IF(5)[8],=WP4IJ(5)[8],=WP4ILP(5)[8],=WP4JKO(5)[8],=WP4JQJ(5)[8],=WP4JSR(5)[8], + =WP4JT(5)[8],=WP4KCJ(5)[8],=WP4KDH(5)[8],=WP4KFP(5)[8],=WP4KGI(5)[8],=WP4KI(5)[8],=WP4KJV(5)[8], + =WP4KSK(5)[8],=WP4KTD(5)[8],=WP4LBK(5)[8],=WP4LDG(5)[8],=WP4LDL(5)[8],=WP4LDP(5)[8],=WP4LHA(5)[8], + =WP4MAE(5)[8],=WP4MD(5)[8],=WP4MO(5)[8],=WP4MQF(5)[8],=WP4MWE(5)[8],=WP4MXE(5)[8],=WP4MYG(5)[8], + =WP4MYK(5)[8],=WP4NAI(5)[8],=WP4NAQ(5)[8],=WP4NBF(5)[8],=WP4NBG(5)[8],=WP4NFU(5)[8],=WP4NKU(5)[8], + =WP4NLQ(5)[8],=WP4NQA(5)[8],=WP4NVL(5)[8],=WP4NWW(5)[8],=WP4O/4(5)[8],=WP4O/M(5)[8],=WP4ODR(5)[8], + =WP4OFA(5)[8],=WP4OHJ(5)[8],=WP4OLM(5)[8],=WP4OMG(5)[8],=WP4OMV(5)[8],=WP4ONR(5)[8],=WP4OOI(5)[8], + =WP4OPD(5)[8],=WP4OPF(5)[8],=WP4OPG(5)[8],=WP4OTP(5)[8],=WP4OXA(5)[8],=WP4P(5)[8],=WP4PR(5)[8], + =WP4PUV(5)[8],=WP4PWV(5)[8],=WP4PXG(5)[8],=WP4QHU(5)[8],=WP4SW(5)[8],=WP4TD(5)[8],=WP4TX(5)[8], + =WP4UC(5)[8],=WP4UM(5)[8], AA5(4)[7],AB5(4)[7],AC5(4)[7],AD5(4)[7],AE5(4)[7],AF5(4)[7],AG5(4)[7],AI5(4)[7],AJ5(4)[7], AK5(4)[7],K5(4)[7],KA5(4)[7],KB5(4)[7],KC5(4)[7],KD5(4)[7],KE5(4)[7],KF5(4)[7],KG5(4)[7], KI5(4)[7],KJ5(4)[7],KK5(4)[7],KM5(4)[7],KN5(4)[7],KO5(4)[7],KQ5(4)[7],KR5(4)[7],KS5(4)[7], @@ -1328,45 +1331,46 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AH2T(4)[7],=AH6AF(4)[7],=AH6DZ(4)[7],=AH6FV(4)[7],=AH6HT(4)[7],=AH6OU(4)[7],=AH6RB(4)[7], =AH6TD(4)[7],=AH6UD(4)[7],=AH8O(4)[7],=AH9B(4)[7],=AL1F(4)[7],=AL2K(4)[7],=AL2S(4)[7],=AL4F(4)[7], =AL5J(4)[7],=AL7C(4)[7],=AL7CJ(4)[7],=AL7CQ(4)[7],=AL7DF(4)[7],=AL7DR(4)[7],=AL7GY(4)[7], - =AL7HH(4)[7],=AL7HU(4)[7],=AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7],=AL7L/5(4)[7], - =AL7PB(4)[7],=AL7RD(4)[7],=AL7RI(4)[7],=AL7V(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7],=KH0CU(4)[7], - =KH0DW(4)[7],=KH2AI(4)[7],=KH2BH(4)[7],=KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7],=KH2XD(4)[7], - =KH2XO(4)[7],=KH2YO(4)[7],=KH6ABA(4)[7],=KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7],=KH6II(4)[7], - =KH6ITY/M(4)[7],=KH6JIQ(4)[7],=KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7],=KH6LL(4)[7], - =KH6LX(4)[7],=KH6MB/5(4)[7],=KH6SP/5(4)[7],=KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7],=KH7FB(4)[7], - =KH7IC(4)[7],=KH7JE(4)[7],=KH7QL(4)[7],=KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7],=KL0EX(4)[7], - =KL0HU(4)[7],=KL0PG(4)[7],=KL1DA(4)[7],=KL1DJ(4)[7],=KL1RX(4)[7],=KL1TS(4)[7],=KL1UR(4)[7], - =KL1WG(4)[7],=KL1WO(4)[7],=KL1XK(4)[7],=KL1Y(4)[7],=KL1ZW(4)[7],=KL2AX(4)[7],=KL2AX/5(4)[7], - =KL2CD(4)[7],=KL2HC(4)[7],=KL2HN(4)[7],=KL2MI(4)[7],=KL2RA(4)[7],=KL2RB(4)[7],=KL2TV(4)[7], - =KL2VA(4)[7],=KL3DB(4)[7],=KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7],=KL3JL(4)[7],=KL3KH(4)[7], - =KL3KI(4)[7],=KL3TB(4)[7],=KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7],=KL7AH(4)[7],=KL7AU(4)[7], - =KL7AX(4)[7],=KL7BCD(4)[7],=KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7],=KL7BZL(4)[7],=KL7CD(4)[7], - =KL7DB(4)[7],=KL7EBE(4)[7],=KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7],=KL7F(4)[7],=KL7FB(4)[7], - =KL7FHX(4)[7],=KL7FLY(4)[7],=KL7FQR(4)[7],=KL7GNW(4)[7],=KL7HH(4)[7],=KL7HJZ(4)[7],=KL7IDM(4)[7], - =KL7IK(4)[7],=KL7ITF(4)[7],=KL7IWU(4)[7],=KL7IZW(4)[7],=KL7JAR(4)[7],=KL7JEX(4)[7],=KL7JIU(4)[7], - =KL7JR/5(4)[7],=KL7JW(4)[7],=KL7LJ(4)[7],=KL7LY(4)[7],=KL7MA(4)[7],=KL7ME(4)[7],=KL7ML(4)[7], - =KL7NE(4)[7],=KL7NI(4)[7],=KL7OI(4)[7],=KL7PZ(4)[7],=KL7QC(4)[7],=KL7SG(4)[7],=KL7TN/5(4)[7], - =KL7UHF(4)[7],=KL7USI/5(4)[7],=KL7XP(4)[7],=KL7XS(4)[7],=KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7], - =KP4DJT(4)[7],=KP4FF(4)[7],=KP4FFW(4)[7],=KP4GMC(4)[7],=KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7], - =KP4YP(4)[7],=NH0V/5(4)[7],=NH2LP(4)[7],=NH6AZ(4)[7],=NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7], - =NH6L(4)[7],=NH6VB(4)[7],=NH6VJ(4)[7],=NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7], - =NH7PZ(4)[7],=NH7R(4)[7],=NH7RO(4)[7],=NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7], - =NL7AX(4)[7],=NL7C(4)[7],=NL7CO(4)[7],=NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7], - =NL7IE(4)[7],=NL7JH(4)[7],=NL7JI(4)[7],=NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7], - =NL7PD(4)[7],=NL7RQ(4)[7],=NL7RQ/5(4)[7],=NL7SI(4)[7],=NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7], - =NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7],=NP3CV(4)[7],=NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7], - =NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7],=NP4NQ(4)[7],=NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7], - =WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7],=WH6BYJ(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7], - =WH6CUL(4)[7],=WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7],=WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7], - =WH6EXQ(4)[7],=WH6FAD(4)[7],=WH6FGM(4)[7],=WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH7DC(4)[7],=WH7DW(4)[7], - =WH7OK(4)[7],=WH7R(4)[7],=WH7YQ(4)[7],=WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7], - =WL7AWC(4)[7],=WL7BBV(4)[7],=WL7BKF(4)[7],=WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7], - =WL7CQE(4)[7],=WL7CTP(4)[7],=WL7CTQ(4)[7],=WL7D(4)[7],=WL7FE(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7], - =WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7],=WL7OP(4)[7],=WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7], - =WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7],=WP2WP(4)[7],=WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7], - =WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7],=WP4CJY(4)[7],=WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7], - =WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7],=WP4MJP(4)[7],=WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7], - =WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7],=WP4OUE(4)[7],=WP4RON(4)[7], + =AL7HH(4)[7],=AL7HU(4)[7],=AL7IH(4)[7],=AL7II/5(4)[7],=AL7IM(4)[7],=AL7J(4)[7],=AL7JP(4)[7], + =AL7L/5(4)[7],=AL7PB(4)[7],=AL7RD(4)[7],=AL7RI(4)[7],=AL7V(4)[7],=KH0BZ(4)[7],=KH0CE(4)[7], + =KH0CU(4)[7],=KH0DW(4)[7],=KH2AI(4)[7],=KH2BH(4)[7],=KH2DF(4)[7],=KH2DF/5(4)[7],=KH2TB(4)[7], + =KH2XD(4)[7],=KH2XO(4)[7],=KH2YO(4)[7],=KH6ABA(4)[7],=KH6DAN(4)[7],=KH6GGC(4)[7],=KH6HPQ(4)[7], + =KH6II(4)[7],=KH6ITY/M(4)[7],=KH6JIQ(4)[7],=KH6JTM(4)[7],=KH6JVL(4)[7],=KH6KG/5(4)[7], + =KH6LL(4)[7],=KH6LX(4)[7],=KH6MB/5(4)[7],=KH6SP/5(4)[7],=KH6SZ(4)[7],=KH6UW(4)[7],=KH7CF(4)[7], + =KH7FB(4)[7],=KH7IC(4)[7],=KH7JE(4)[7],=KH7QL(4)[7],=KH7QO(4)[7],=KH8CG(4)[7],=KH9AE(4)[7], + =KL0EX(4)[7],=KL0HU(4)[7],=KL0PG(4)[7],=KL1DA(4)[7],=KL1DJ(4)[7],=KL1MM(4)[7],=KL1RX(4)[7], + =KL1TS(4)[7],=KL1UR(4)[7],=KL1WG(4)[7],=KL1WO(4)[7],=KL1XK(4)[7],=KL1Y(4)[7],=KL1ZW(4)[7], + =KL2AX(4)[7],=KL2AX/5(4)[7],=KL2CD(4)[7],=KL2HC(4)[7],=KL2HN(4)[7],=KL2MI(4)[7],=KL2RA(4)[7], + =KL2RB(4)[7],=KL2TV(4)[7],=KL2VA(4)[7],=KL3DB(4)[7],=KL3DP(4)[7],=KL3HK(4)[7],=KL3HZ(4)[7], + =KL3JL(4)[7],=KL3KH(4)[7],=KL3KI(4)[7],=KL3TB(4)[7],=KL4JQ(4)[7],=KL5L(4)[7],=KL5Z(4)[7], + =KL7AH(4)[7],=KL7AU(4)[7],=KL7AX(4)[7],=KL7BCD(4)[7],=KL7BL(4)[7],=KL7BX(4)[7],=KL7BZ/5(4)[7], + =KL7BZL(4)[7],=KL7CD(4)[7],=KL7DB(4)[7],=KL7EBE(4)[7],=KL7EMH(4)[7],=KL7EMH/M(4)[7],=KL7EQQ(4)[7], + =KL7F(4)[7],=KL7FB(4)[7],=KL7FHX(4)[7],=KL7FLY(4)[7],=KL7FQR(4)[7],=KL7GNW(4)[7],=KL7HH(4)[7], + =KL7HJZ(4)[7],=KL7IDM(4)[7],=KL7IK(4)[7],=KL7ITF(4)[7],=KL7IWU(4)[7],=KL7IZW(4)[7],=KL7JAR(4)[7], + =KL7JEX(4)[7],=KL7JIU(4)[7],=KL7JR/5(4)[7],=KL7JW(4)[7],=KL7LJ(4)[7],=KL7LY(4)[7],=KL7MA(4)[7], + =KL7ME(4)[7],=KL7ML(4)[7],=KL7NE(4)[7],=KL7NI(4)[7],=KL7OI(4)[7],=KL7PZ(4)[7],=KL7QC(4)[7], + =KL7SG(4)[7],=KL7TN/5(4)[7],=KL7UHF(4)[7],=KL7USI/5(4)[7],=KL7XP(4)[7],=KL7XS(4)[7], + =KL7YY/5(4)[7],=KP2AZ(4)[7],=KP4CV(4)[7],=KP4DJT(4)[7],=KP4FF(4)[7],=KP4FFW(4)[7],=KP4GMC(4)[7], + =KP4JE(4)[7],=KP4JG(4)[7],=KP4JY(4)[7],=KP4YP(4)[7],=NH0V/5(4)[7],=NH2LP(4)[7],=NH6AZ(4)[7], + =NH6CJ(4)[7],=NH6EF(4)[7],=NH6FA(4)[7],=NH6L(4)[7],=NH6MG(4)[7],=NH6VB(4)[7],=NH6VJ(4)[7], + =NH6WL(4)[7],=NH6WL/5(4)[7],=NH7FO(4)[7],=NH7MV(4)[7],=NH7PZ(4)[7],=NH7R(4)[7],=NH7RO(4)[7], + =NH7RO/5(4)[7],=NH7TR(4)[7],=NH7VA(4)[7],=NL5J(4)[7],=NL7AX(4)[7],=NL7C(4)[7],=NL7CO(4)[7], + =NL7CO/5(4)[7],=NL7CO/M(4)[7],=NL7DC(4)[7],=NL7HB(4)[7],=NL7IE(4)[7],=NL7JH(4)[7],=NL7JI(4)[7], + =NL7K/5(4)[7],=NL7KB(4)[7],=NL7NP(4)[7],=NL7OM(4)[7],=NL7PD(4)[7],=NL7RQ(4)[7],=NL7RQ/5(4)[7], + =NL7SI(4)[7],=NL7TO(4)[7],=NL7ZL(4)[7],=NP2EE(4)[7],=NP2PR(4)[7],=NP2RA(4)[7],=NP3BA(4)[7], + =NP3CV(4)[7],=NP3NT(4)[7],=NP3PG(4)[7],=NP3RG(4)[7],=NP3SU(4)[7],=NP3TY(4)[7],=NP4EA(4)[7], + =NP4NQ(4)[7],=NP4NQ/5(4)[7],=NP4RW(4)[7],=NP4RZ(4)[7],=WH2ACT(4)[7],=WH2ACT/5(4)[7],=WH6ARN(4)[7], + =WH6BYJ(4)[7],=WH6BYP(4)[7],=WH6CDU(4)[7],=WH6CUL(4)[7],=WH6DZU(4)[7],=WH6ECJ(4)[7],=WH6EMW(4)[7], + =WH6EOF(4)[7],=WH6ERS(4)[7],=WH6EUA(4)[7],=WH6EXQ(4)[7],=WH6FAD(4)[7],=WH6FGM(4)[7], + =WH6FZ/5(4)[7],=WH6L/5(4)[7],=WH7DC(4)[7],=WH7DW(4)[7],=WH7OK(4)[7],=WH7R(4)[7],=WH7YQ(4)[7], + =WH7YR(4)[7],=WL3WX(4)[7],=WL5H(4)[7],=WL7AIU(4)[7],=WL7AWC(4)[7],=WL7BBV(4)[7],=WL7BKF(4)[7], + =WL7BPY(4)[7],=WL7CA(4)[7],=WL7CJA(4)[7],=WL7CJC(4)[7],=WL7CQE(4)[7],=WL7CTP(4)[7],=WL7CTQ(4)[7], + =WL7D(4)[7],=WL7FE(4)[7],=WL7FT(4)[7],=WL7FT/5(4)[7],=WL7K/5(4)[7],=WL7ME(4)[7],=WL7MQ/5(4)[7], + =WL7OP(4)[7],=WL7OU(4)[7],=WL7SG(4)[7],=WL7W(4)[7],=WL7XI(4)[7],=WL7XR(4)[7],=WP2AHG(4)[7], + =WP2WP(4)[7],=WP3AL(4)[7],=WP4A(4)[7],=WP4ADA(4)[7],=WP4APJ(4)[7],=WP4BAB(4)[7],=WP4BAT(4)[7], + =WP4CJY(4)[7],=WP4EVA(4)[7],=WP4EVL(4)[7],=WP4KSP(4)[7],=WP4KTF(4)[7],=WP4KUW(4)[7],=WP4LKA(4)[7], + =WP4MJP(4)[7],=WP4MWS(4)[7],=WP4MYI(4)[7],=WP4MZR(4)[7],=WP4NAK(4)[7],=WP4NEP(4)[7],=WP4NQL(4)[7], + =WP4OUE(4)[7],=WP4RON(4)[7], AA6(3)[6],AB6(3)[6],AC6(3)[6],AD6(3)[6],AE6(3)[6],AF6(3)[6],AG6(3)[6],AI6(3)[6],AJ6(3)[6], AK6(3)[6],K6(3)[6],KA6(3)[6],KB6(3)[6],KC6(3)[6],KD6(3)[6],KE6(3)[6],KF6(3)[6],KG6(3)[6], KI6(3)[6],KJ6(3)[6],KK6(3)[6],KM6(3)[6],KN6(3)[6],KO6(3)[6],KQ6(3)[6],KR6(3)[6],KS6(3)[6], @@ -1396,35 +1400,36 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KH6O(3)[6],=KH6PGA/6(3)[6],=KH6PM(3)[6],=KH6PW(3)[6],=KH6SC(3)[6],=KH6TO(3)[6],=KH6UQ(3)[6], =KH6USA(3)[6],=KH6VC(3)[6],=KH6VC/6(3)[6],=KH6VZ(3)[6],=KH6WL(3)[6],=KH6WZ(3)[6],=KH7CD/6(3)[6], =KH7CO(3)[6],=KH7CS(3)[6],=KH7EM(3)[6],=KH7I(3)[6],=KH7IZ(3)[6],=KH7JR(3)[6],=KH7NS(3)[6], - =KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6],=KH7TW(3)[6],=KH7XX/6(3)[6], - =KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6],=KL0AF(3)[6], - =KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6],=KL3JY/6(3)[6],=KL3YH(3)[6], - =KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6],=KL4UZ(3)[6],=KL7AK(3)[6],=KL7CE/6(3)[6], - =KL7CM(3)[6],=KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6],=KL7DJ(3)[6],=KL7EAE(3)[6],=KL7EAL(3)[6], - =KL7HQR(3)[6],=KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6],=KL7IDY/6(3)[6],=KL7ISN(3)[6], - =KL7JBE(3)[6],=KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6],=KL7MF/6(3)[6],=KL7MF/M(3)[6],=KL7OO(3)[6], - =KL7RT(3)[6],=KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6],=KL7VU/6(3)[6],=KP2BK(3)[6],=KP3BN(3)[6], - =KP3YL(3)[6],=KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6],=KP4ENM(3)[6],=KP4ERR(3)[6],=KP4FBT(3)[6], - =KP4MD(3)[6],=KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6],=NH2AR(3)[6],=NH2BD(3)[6],=NH2BV(3)[6], - =NH2CM(3)[6],=NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6],=NH2S(3)[6],=NH6AC(3)[6],=NH6AE(3)[6], - =NH6AF(3)[6],=NH6FV(3)[6],=NH6FX(3)[6],=NH6NG(3)[6],=NH6RG(3)[6],=NH6ST(3)[6],=NH6WR(3)[6], - =NH7AG(3)[6],=NH7EM(3)[6],=NH7FW(3)[6],=NH7G(3)[6],=NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6], - =NH7QV(3)[6],=NH7RT(3)[6],=NH7ST(3)[6],=NH7SU(3)[6],=NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6], - =NL7GE(3)[6],=NL7IB(3)[6],=NL7LC(3)[6],=NL7OP(3)[6],=NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6], - =NP4AB(3)[6],=NP4AI/6(3)[6],=NP4IW(3)[6],=NP4IW/6(3)[6],=NP4MV(3)[6],=NP4XE(3)[6],=WH0AAZ(3)[6], - =WH0M(3)[6],=WH2ABS(3)[6],=WH2ALN(3)[6],=WH6AAJ(3)[6],=WH6AFM(3)[6],=WH6ANA(3)[6],=WH6ASW/M(3)[6], - =WH6BYT(3)[6],=WH6CIL(3)[6],=WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6],=WH6CPT(3)[6],=WH6CRE(3)[6], - =WH6CSG(3)[6],=WH6CUF(3)[6],=WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6],=WH6CWS(3)[6],=WH6CZF(3)[6], - =WH6CZH(3)[6],=WH6DHN(3)[6],=WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6],=WH6DVX(3)[6],=WH6DYA(3)[6], - =WH6DZV(3)[6],=WH6DZY(3)[6],=WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6],=WH6EKB(3)[6],=WH6ENG(3)[6], - =WH6EUH(3)[6],=WH6EZW(3)[6],=WH6JO(3)[6],=WH6LZ(3)[6],=WH6MC(3)[6],=WH6OI(3)[6],=WH6PX(3)[6], - =WH6QA(3)[6],=WH6RF(3)[6],=WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6],=WH6VN(3)[6], - =WH6XI(3)[6],=WH6XX(3)[6],=WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6],=WH7IN(3)[6], - =WH7IV(3)[6],=WH7IZ(3)[6],=WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6],=WH7RU(3)[6], - =WH7TT(3)[6],=WH7VM(3)[6],=WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6],=WL7ACO(3)[6], - =WL7BA(3)[6],=WL7BGF(3)[6],=WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6],=WL7EKK(3)[6], - =WL7RA(3)[6],=WL7SE(3)[6],=WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6],=WP2N(3)[6], - =WP4CUJ(3)[6],=WP4CW(3)[6],=WP4KSU(3)[6],=WP4MVE(3)[6],=WP4OBB(3)[6], + =KH7QS(3)[6],=KH7QU(3)[6],=KH7RB(3)[6],=KH7TJ(3)[6],=KH7TJ/6(3)[6],=KH7TR(3)[6],=KH7TW(3)[6], + =KH7XX/6(3)[6],=KH7Y(3)[6],=KH7Y/6(3)[6],=KH8A(3)[6],=KH8AF(3)[6],=KH8FL(3)[6],=KL0AA(3)[6], + =KL0AF(3)[6],=KL0AL(3)[6],=KL0HZ(3)[6],=KL0IF(3)[6],=KL1NER(3)[6],=KL1WE/6(3)[6],=KL2CQ(3)[6], + =KL3IM(3)[6],=KL3JY/6(3)[6],=KL3YH(3)[6],=KL4GW(3)[6],=KL4LV(3)[6],=KL4NZ(3)[6],=KL4QW(3)[6], + =KL4UZ(3)[6],=KL7AK(3)[6],=KL7CE/6(3)[6],=KL7CM(3)[6],=KL7CN(3)[6],=KL7CW/6(3)[6],=KL7CX(3)[6], + =KL7DJ(3)[6],=KL7EAE(3)[6],=KL7EAL(3)[6],=KL7HQR(3)[6],=KL7HQR/6(3)[6],=KL7HSY(3)[6],=KL7ID(3)[6], + =KL7IDY/6(3)[6],=KL7ISB(3)[6],=KL7ISN(3)[6],=KL7JBE(3)[6],=KL7KNP(3)[6],=KL7KX(3)[6],=KL7MF(3)[6], + =KL7MF/6(3)[6],=KL7MF/M(3)[6],=KL7OO(3)[6],=KL7RT(3)[6],=KL7SL(3)[6],=KL7SY(3)[6],=KL7VU(3)[6], + =KL7VU/6(3)[6],=KP2BK(3)[6],=KP3BN(3)[6],=KP3YL(3)[6],=KP4BR(3)[6],=KP4DSO(3)[6],=KP4DX/6(3)[6], + =KP4ENM(3)[6],=KP4ERR(3)[6],=KP4FBT(3)[6],=KP4MD(3)[6],=KP4UB(3)[6],=NH0C(3)[6],=NH0X(3)[6], + =NH2AR(3)[6],=NH2BD(3)[6],=NH2BV(3)[6],=NH2CM(3)[6],=NH2FT(3)[6],=NH2FX(3)[6],=NH2R(3)[6], + =NH2S(3)[6],=NH6AC(3)[6],=NH6AE(3)[6],=NH6AF(3)[6],=NH6FV(3)[6],=NH6FX(3)[6],=NH6NG(3)[6], + =NH6RG(3)[6],=NH6ST(3)[6],=NH6WR(3)[6],=NH7AG(3)[6],=NH7EM(3)[6],=NH7FW(3)[6],=NH7G(3)[6], + =NH7IG(3)[6],=NH7IH(3)[6],=NH7PM(3)[6],=NH7QV(3)[6],=NH7RT(3)[6],=NH7ST(3)[6],=NH7SU(3)[6], + =NH7WE(3)[6],=NH7WG(3)[6],=NH7ZE(3)[6],=NL7GE(3)[6],=NL7IB(3)[6],=NL7LC(3)[6],=NL7OP(3)[6], + =NL7RO(3)[6],=NL7YB(3)[6],=NP2KY(3)[6],=NP4AB(3)[6],=NP4AI/6(3)[6],=NP4IW(3)[6],=NP4IW/6(3)[6], + =NP4MV(3)[6],=NP4XE(3)[6],=WH0AAZ(3)[6],=WH0M(3)[6],=WH2ABS(3)[6],=WH2ALN(3)[6],=WH2K(3)[6], + =WH6AAJ(3)[6],=WH6AFM(3)[6],=WH6ANA(3)[6],=WH6ASW/M(3)[6],=WH6BYT(3)[6],=WH6CIL(3)[6], + =WH6CK(3)[6],=WH6CO(3)[6],=WH6CPO(3)[6],=WH6CPT(3)[6],=WH6CRE(3)[6],=WH6CSG(3)[6],=WH6CUF(3)[6], + =WH6CUU(3)[6],=WH6CUX(3)[6],=WH6CVJ(3)[6],=WH6CWS(3)[6],=WH6CZF(3)[6],=WH6CZH(3)[6],=WH6DHN(3)[6], + =WH6DSK(3)[6],=WH6DVM(3)[6],=WH6DVN(3)[6],=WH6DVX(3)[6],=WH6DYA(3)[6],=WH6DZV(3)[6],=WH6DZY(3)[6], + =WH6EAR(3)[6],=WH6EEZ(3)[6],=WH6EHY(3)[6],=WH6EKB(3)[6],=WH6ENG(3)[6],=WH6EUH(3)[6],=WH6EZW(3)[6], + =WH6JO(3)[6],=WH6LZ(3)[6],=WH6MC(3)[6],=WH6OI(3)[6],=WH6PX(3)[6],=WH6QA(3)[6],=WH6RF(3)[6], + =WH6TD(3)[6],=WH6TK(3)[6],=WH6USA(3)[6],=WH6VM(3)[6],=WH6VN(3)[6],=WH6XI(3)[6],=WH6XX(3)[6], + =WH6YJ(3)[6],=WH7DG(3)[6],=WH7DH(3)[6],=WH7HQ(3)[6],=WH7IN(3)[6],=WH7IV(3)[6],=WH7IZ(3)[6], + =WH7LP(3)[6],=WH7OO(3)[6],=WH7PM(3)[6],=WH7QC(3)[6],=WH7RU(3)[6],=WH7TT(3)[6],=WH7VM(3)[6], + =WH7XR(3)[6],=WL3AF(3)[6],=WL3DZ(3)[6],=WL4JC(3)[6],=WL7ACO(3)[6],=WL7BA(3)[6],=WL7BGF(3)[6], + =WL7CPL(3)[6],=WL7CSD(3)[6],=WL7DN/6(3)[6],=WL7EA(3)[6],=WL7EKK(3)[6],=WL7RA(3)[6],=WL7SE(3)[6], + =WL7TG(3)[6],=WL7WL(3)[6],=WL7YQ(3)[6],=WL7YQ/6(3)[6],=WP2N(3)[6],=WP4CUJ(3)[6],=WP4CW(3)[6], + =WP4KSU(3)[6],=WP4MVE(3)[6],=WP4OBB(3)[6], AA7(3)[6],AB7(3)[6],AC7(3)[6],AD7(3)[6],AE7(3)[6],AF7(3)[6],AG7(3)[6],AI7(3)[6],AJ7(3)[6], AK7(3)[6],K7(3)[6],KA7(3)[6],KB7(3)[6],KC7(3)[6],KD7(3)[6],KE7(3)[6],KF7(3)[6],KG7(3)[6], KI7(3)[6],KJ7(3)[6],KK7(3)[6],KM7(3)[6],KN7(3)[6],KO7(3)[6],KQ7(3)[6],KR7(3)[6],KS7(3)[6], @@ -1441,98 +1446,99 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =AH6PW(3)[6],=AH6QW(3)[6],=AH6RI/7(3)[6],=AH6SV(3)[6],=AH6VM(3)[6],=AH6VP(3)[6],=AH6Y(3)[6], =AH7MP(3)[6],=AH8AC(3)[6],=AH8DX(3)[6],=AH8K(3)[6],=AH9A(3)[6],=AH9AC(3)[6],=AH9C(3)[6], =AL0AA(3)[6],=AL0F(3)[6],=AL0FT(3)[6],=AL0H(3)[6],=AL0X(3)[6],=AL1N(3)[6],=AL1P(3)[6], - =AL1VE(3)[6],=AL1VE/R(3)[6],=AL2B(3)[6],=AL2N(3)[6],=AL3L(3)[6],=AL4Q/7(3)[6],=AL5B(3)[6], - =AL5W(3)[6],=AL7A(3)[6],=AL7AA(3)[6],=AL7AN(3)[6],=AL7AW(3)[6],=AL7BN(3)[6],=AL7BQ(3)[6], - =AL7CC(3)[6],=AL7CG(3)[6],=AL7CM(3)[6],=AL7CM/7(3)[6],=AL7CR(3)[6],=AL7CS(3)[6],=AL7D(3)[6], - =AL7D/7(3)[6],=AL7D/P(3)[6],=AL7D/R(3)[6],=AL7DD(3)[6],=AL7DU(3)[6],=AL7EI(3)[6],=AL7EJ(3)[6], - =AL7FA(3)[6],=AL7FB(3)[6],=AL7HS(3)[6],=AL7HY(3)[6],=AL7IG(3)[6],=AL7IT(3)[6],=AL7JF(3)[6], - =AL7JJ(3)[6],=AL7JS(3)[6],=AL7JW(3)[6],=AL7JY(3)[6],=AL7KE(3)[6],=AL7KF(3)[6],=AL7KG(3)[6], - =AL7KK(3)[6],=AL7KL(3)[6],=AL7KV(3)[6],=AL7L/7(3)[6],=AL7LI(3)[6],=AL7LL(3)[6],=AL7MH(3)[6], - =AL7MQ(3)[6],=AL7ND(3)[6],=AL7NK(3)[6],=AL7NZ(3)[6],=AL7OK(3)[6],=AL7OW(3)[6],=AL7PR(3)[6], - =AL7PV(3)[6],=AL7QL(3)[6],=AL7R(3)[6],=AL7R/7(3)[6],=AL7RF(3)[6],=AL7RF/7(3)[6],=AL7RM(3)[6], - =AL7RR(3)[6],=AL7W(3)[6],=G4KHG/M(3)[6],=KH0AS(3)[6],=KH0H(3)[6],=KH0K(3)[6],=KH0SH(3)[6], - =KH0TL(3)[6],=KH0X(3)[6],=KH2CH(3)[6],=KH2G(3)[6],=KH2GG(3)[6],=KH2JA(3)[6],=KH2QH(3)[6], - =KH2RK(3)[6],=KH2SK(3)[6],=KH2SR(3)[6],=KH2TJ/7(3)[6],=KH2TJ/P(3)[6],=KH2XP(3)[6],=KH2YL(3)[6], - =KH3AD(3)[6],=KH6AB(3)[6],=KH6AHQ(3)[6],=KH6BXZ(3)[6],=KH6CN(3)[6],=KH6CN/7(3)[6],=KH6COY(3)[6], - =KH6CQG(3)[6],=KH6CQH(3)[6],=KH6CQH/7(3)[6],=KH6DB(3)[6],=KH6DE(3)[6],=KH6DOT(3)[6],=KH6DUT(3)[6], - =KH6EE(3)[6],=KH6EE/7(3)[6],=KH6FKA/7(3)[6],=KH6FU(3)[6],=KH6GB(3)[6],=KH6GDN(3)[6],=KH6HU(3)[6], - =KH6HWK(3)[6],=KH6IA(3)[6],=KH6ICQ(3)[6],=KH6IKC(3)[6],=KH6IMN(3)[6],=KH6IQX(3)[6],=KH6ITY(3)[6], - =KH6JFL(3)[6],=KH6JIM/7(3)[6],=KH6JJS(3)[6],=KH6JPJ(3)[6],=KH6JPO(3)[6],=KH6JRW(3)[6], - =KH6JT(3)[6],=KH6JUQ(3)[6],=KH6KS(3)[6],=KH6KW(3)[6],=KH6LEM(3)[6],=KH6ME(3)[6],=KH6MF(3)[6], - =KH6NA(3)[6],=KH6NO/7(3)[6],=KH6NO/M(3)[6],=KH6NU(3)[6],=KH6OV(3)[6],=KH6PG(3)[6],=KH6PR(3)[6], - =KH6QAI(3)[6],=KH6QAI/7(3)[6],=KH6QAJ(3)[6],=KH6RW(3)[6],=KH6RY(3)[6],=KH6SAT(3)[6],=KH6SS(3)[6], - =KH6TG(3)[6],=KH6TX(3)[6],=KH6VM(3)[6],=KH6VM/7(3)[6],=KH6VT(3)[6],=KH6WX(3)[6],=KH6XG(3)[6], - =KH6XS(3)[6],=KH6XT(3)[6],=KH6YL(3)[6],=KH7AL(3)[6],=KH7AR(3)[6],=KH7AX(3)[6],=KH7CB(3)[6], - =KH7CM(3)[6],=KH7CZ(3)[6],=KH7FJ(3)[6],=KH7FR(3)[6],=KH7HH(3)[6],=KH7HWK(3)[6],=KH7IP(3)[6], - =KH7LE(3)[6],=KH7ME(3)[6],=KH7MR(3)[6],=KH7NP(3)[6],=KH7R(3)[6],=KH7RD(3)[6],=KH7RT(3)[6], - =KH7SQ(3)[6],=KH7SR(3)[6],=KH7WW(3)[6],=KH7WW/7(3)[6],=KH7X/7(3)[6],=KH7YD(3)[6],=KH7YD/7(3)[6], - =KH8AB(3)[6],=KH8AH(3)[6],=KH8AZ(3)[6],=KH8BG(3)[6],=KH8D(3)[6],=KH8E(3)[6],=KH8K(3)[6], - =KH9AA(3)[6],=KL0AI(3)[6],=KL0AN(3)[6],=KL0AP(3)[6],=KL0CA(3)[6],=KL0CM(3)[6],=KL0CW(3)[6], - =KL0DF(3)[6],=KL0DG(3)[6],=KL0DR(3)[6],=KL0DT(3)[6],=KL0EU(3)[6],=KL0IR(3)[6],=KL0IS(3)[6], - =KL0IW(3)[6],=KL0IX(3)[6],=KL0LF(3)[6],=KL0MO(3)[6],=KL0NM(3)[6],=KL0NP(3)[6],=KL0PP(3)[6], - =KL0QD(3)[6],=KL0RA(3)[6],=KL0SZ(3)[6],=KL0TR(3)[6],=KL0TU(3)[6],=KL1AA(3)[6],=KL1AE(3)[6], - =KL1DO(3)[6],=KL1DW(3)[6],=KL1ED(3)[6],=KL1JF(3)[6],=KL1K(3)[6],=KL1LE(3)[6],=KL1LZ(3)[6], - =KL1MF(3)[6],=KL1OH(3)[6],=KL1QL(3)[6],=KL1RH(3)[6],=KL1RV(3)[6],=KL1SF/7(3)[6],=KL1SO(3)[6], - =KL1U(3)[6],=KL1UA(3)[6],=KL1UM(3)[6],=KL1XI(3)[6],=KL1YO(3)[6],=KL1YY/7(3)[6],=KL1ZN(3)[6], - =KL1ZP(3)[6],=KL1ZR(3)[6],=KL2A/7(3)[6],=KL2BG(3)[6],=KL2BO(3)[6],=KL2BW(3)[6],=KL2BY(3)[6], - =KL2BZ(3)[6],=KL2FD(3)[6],=KL2FL(3)[6],=KL2JY(3)[6],=KL2K(3)[6],=KL2KY(3)[6],=KL2LA(3)[6], - =KL2LN(3)[6],=KL2LT(3)[6],=KL2MA(3)[6],=KL2MP(3)[6],=KL2NJ(3)[6],=KL2NU(3)[6],=KL2NW(3)[6], - =KL2OH(3)[6],=KL2OJ(3)[6],=KL2P(3)[6],=KL2QE(3)[6],=KL2VK(3)[6],=KL2YH(3)[6],=KL3EZ(3)[6], - =KL3FE(3)[6],=KL3IC(3)[6],=KL3IO(3)[6],=KL3IW(3)[6],=KL3MZ(3)[6],=KL3NE(3)[6],=KL3NO(3)[6], - =KL3OQ(3)[6],=KL3PD(3)[6],=KL3TW(3)[6],=KL3TY(3)[6],=KL3VJ(3)[6],=KL3XS(3)[6],=KL4BS(3)[6], - =KL4E(3)[6],=KL4RKH(3)[6],=KL4YFD(3)[6],=KL7AB(3)[6],=KL7AD(3)[6],=KL7AW(3)[6],=KL7BD(3)[6], - =KL7BDC(3)[6],=KL7BH(3)[6],=KL7BR(3)[6],=KL7BS(3)[6],=KL7BT(3)[6],=KL7BUR(3)[6],=KL7BXP(3)[6], - =KL7C(3)[6],=KL7CPO(3)[6],=KL7CT(3)[6],=KL7CY(3)[6],=KL7DC(3)[6],=KL7DF(3)[6],=KL7DI(3)[6], - =KL7DK(3)[6],=KL7DLG(3)[6],=KL7EF(3)[6],=KL7EFL(3)[6],=KL7EH(3)[6],=KL7EIN(3)[6],=KL7EU(3)[6], - =KL7FDQ(3)[6],=KL7FDQ/7(3)[6],=KL7FOZ(3)[6],=KL7FRQ(3)[6],=KL7FS(3)[6],=KL7GA(3)[6],=KL7GCS(3)[6], - =KL7GKY(3)[6],=KL7GRF(3)[6],=KL7GT(3)[6],=KL7HB(3)[6],=KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6], - =KL7HI(3)[6],=KL7HJR(3)[6],=KL7HLF(3)[6],=KL7HM(3)[6],=KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6], - =KL7IAL(3)[6],=KL7IBT(3)[6],=KL7IDY(3)[6],=KL7IEI(3)[6],=KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6], - =KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6],=KL7IME(3)[6],=KL7IOW(3)[6],=KL7IPV(3)[6],=KL7ISE(3)[6], - =KL7IUX(3)[6],=KL7IWC/7(3)[6],=KL7IZC(3)[6],=KL7IZH(3)[6],=KL7JBB(3)[6],=KL7JDQ(3)[6], - =KL7JES(3)[6],=KL7JIJ(3)[6],=KL7JJE(3)[6],=KL7JKV(3)[6],=KL7KA(3)[6],=KL7KG/7(3)[6],=KL7LG(3)[6], - =KL7LI(3)[6],=KL7LX(3)[6],=KL7LZ(3)[6],=KL7M(3)[6],=KL7MY(3)[6],=KL7MZ(3)[6],=KL7NA(3)[6], - =KL7NP(3)[6],=KL7NP/7(3)[6],=KL7OA(3)[6],=KL7OF(3)[6],=KL7OL(3)[6],=KL7OR(3)[6],=KL7OR/7(3)[6], - =KL7OS(3)[6],=KL7OY(3)[6],=KL7PO(3)[6],=KL7QA(3)[6],=KL7QK(3)[6],=KL7QK/140(3)[6],=KL7QK/7(3)[6], - =KL7QR(3)[6],=KL7QR/7(3)[6],=KL7R(3)[6],=KL7RC(3)[6],=KL7RK(3)[6],=KL7RM(3)[6],=KL7RS(3)[6], - =KL7S(3)[6],=KL7SK(3)[6],=KL7SP(3)[6],=KL7T(3)[6],=KL7TU(3)[6],=KL7UP(3)[6],=KL7UT(3)[6], - =KL7VK(3)[6],=KL7VL(3)[6],=KL7VN(3)[6],=KL7VQ(3)[6],=KL7W(3)[6],=KL7WC(3)[6],=KL7WM(3)[6], - =KL7WN(3)[6],=KL7WP(3)[6],=KL7WP/7(3)[6],=KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6],=KL7YY/M(3)[6], - =KL7ZH(3)[6],=KL7ZW(3)[6],=KL8RV(3)[6],=KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6],=KP2CB(3)[6], - =KP2CT(3)[6],=KP2X(3)[6],=KP2Y(3)[6],=KP4EFZ(3)[6],=KP4ND(3)[6],=KP4UZ(3)[6],=KP4X(3)[6], - =NH0F(3)[6],=NH0K(3)[6],=NH0O(3)[6],=NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6],=NH6B(3)[6], - =NH6BF(3)[6],=NH6CI(3)[6],=NH6DQ(3)[6],=NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6],=NH6HE(3)[6], - =NH6HZ(3)[6],=NH6LF(3)[6],=NH6LM(3)[6],=NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6], - =NH6Z(3)[6],=NH6ZA(3)[6],=NH6ZE(3)[6],=NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6], - =NH7N(3)[6],=NH7ND(3)[6],=NH7NJ/7(3)[6],=NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6], - =NH7SH(3)[6],=NH7TG(3)[6],=NH7VZ(3)[6],=NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6], - =NH7YI(3)[6],=NL7AH(3)[6],=NL7AR(3)[6],=NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6], - =NL7DH(3)[6],=NL7DY(3)[6],=NL7EO(3)[6],=NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6], - =NL7GW(3)[6],=NL7HH(3)[6],=NL7HK(3)[6],=NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6], - =NL7JN(3)[6],=NL7KV(3)[6],=NL7LI(3)[6],=NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6], - =NL7PN(3)[6],=NL7QI(3)[6],=NL7RL(3)[6],=NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6], - =NL7WJ(3)[6],=NL7XX(3)[6],=NL7ZM(3)[6],=NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2X/7(3)[6], - =NP3PH(3)[6],=NP4AI/M(3)[6],=NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6], - =VA2GLB/P(3)[6],=WH0AAM(3)[6],=WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6], - =WH6B(3)[6],=WH6BDR(3)[6],=WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6], - =WH6CUS(3)[6],=WH6CWD(3)[6],=WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6], - =WH6DAY(3)[6],=WH6DJO(3)[6],=WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6], - =WH6EEC(3)[6],=WH6EEG(3)[6],=WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6], - =WH6ETO(3)[6],=WH6EWE(3)[6],=WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6], - =WH6OY(3)[6],=WH6QV(3)[6],=WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6], - =WH6YT(3)[6],=WH6ZR(3)[6],=WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6], - =WH7G(3)[6],=WH7GC(3)[6],=WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6], - =WH7RG(3)[6],=WH7TC(3)[6],=WH7U(3)[6],=WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6], - =WL7AAW(3)[6],=WL7AL(3)[6],=WL7AP(3)[6],=WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6], - =WL7BHR(3)[6],=WL7BLM(3)[6],=WL7BM(3)[6],=WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6], - =WL7BUI(3)[6],=WL7BVN(3)[6],=WL7BVS(3)[6],=WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6], - =WL7CPE(3)[6],=WL7CPI(3)[6],=WL7CQX(3)[6],=WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6], - =WL7CTE(3)[6],=WL7DD(3)[6],=WL7FA(3)[6],=WL7FR(3)[6],=WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6], - =WL7HK(3)[6],=WL7HL(3)[6],=WL7IQ(3)[6],=WL7IS(3)[6],=WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6], - =WL7K/M(3)[6],=WL7LB(3)[6],=WL7LK(3)[6],=WL7OA(3)[6],=WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6], - =WL7QX(3)[6],=WL7RV/140(3)[6],=WL7SD(3)[6],=WL7SO(3)[6],=WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6], - =WL7WB(3)[6],=WL7WF(3)[6],=WL7WG(3)[6],=WL7WU(3)[6],=WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6], - =WL7XW(3)[6],=WL7Z(3)[6],=WL7ZM(3)[6],=WP2ADG(3)[6],=WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], + =AL1VE(3)[6],=AL2B(3)[6],=AL2N(3)[6],=AL3L(3)[6],=AL4Q/7(3)[6],=AL5B(3)[6],=AL5W(3)[6], + =AL7A(3)[6],=AL7AA(3)[6],=AL7AN(3)[6],=AL7AW(3)[6],=AL7BN(3)[6],=AL7BQ(3)[6],=AL7CC(3)[6], + =AL7CG(3)[6],=AL7CM(3)[6],=AL7CM/7(3)[6],=AL7CR(3)[6],=AL7CS(3)[6],=AL7D(3)[6],=AL7D/7(3)[6], + =AL7D/P(3)[6],=AL7D/R(3)[6],=AL7DD(3)[6],=AL7DU(3)[6],=AL7EI(3)[6],=AL7EJ(3)[6],=AL7FA(3)[6], + =AL7FB(3)[6],=AL7HS(3)[6],=AL7HY(3)[6],=AL7IG(3)[6],=AL7IT(3)[6],=AL7JF(3)[6],=AL7JJ(3)[6], + =AL7JS(3)[6],=AL7JW(3)[6],=AL7JY(3)[6],=AL7KE(3)[6],=AL7KF(3)[6],=AL7KG(3)[6],=AL7KK(3)[6], + =AL7KL(3)[6],=AL7KV(3)[6],=AL7L/7(3)[6],=AL7LI(3)[6],=AL7LL(3)[6],=AL7MH(3)[6],=AL7MQ(3)[6], + =AL7ND(3)[6],=AL7NK(3)[6],=AL7NZ(3)[6],=AL7OK(3)[6],=AL7OW(3)[6],=AL7PR(3)[6],=AL7PV(3)[6], + =AL7QL(3)[6],=AL7R(3)[6],=AL7R/7(3)[6],=AL7RF(3)[6],=AL7RF/7(3)[6],=AL7RM(3)[6],=AL7RR(3)[6], + =AL7W(3)[6],=G4KHG/M(3)[6],=KH0AS(3)[6],=KH0H(3)[6],=KH0K(3)[6],=KH0SH(3)[6],=KH0TL(3)[6], + =KH0X(3)[6],=KH2CH(3)[6],=KH2G(3)[6],=KH2GG(3)[6],=KH2JA(3)[6],=KH2QH(3)[6],=KH2RK(3)[6], + =KH2SK(3)[6],=KH2SR(3)[6],=KH2TJ/7(3)[6],=KH2TJ/P(3)[6],=KH2XP(3)[6],=KH2YL(3)[6],=KH3AD(3)[6], + =KH6AB(3)[6],=KH6AHQ(3)[6],=KH6BXZ(3)[6],=KH6CN(3)[6],=KH6CN/7(3)[6],=KH6COY(3)[6],=KH6CQG(3)[6], + =KH6CQH(3)[6],=KH6CQH/7(3)[6],=KH6DB(3)[6],=KH6DE(3)[6],=KH6DOT(3)[6],=KH6DUT(3)[6],=KH6EE(3)[6], + =KH6EE/7(3)[6],=KH6FKA/7(3)[6],=KH6FU(3)[6],=KH6GB(3)[6],=KH6GDN(3)[6],=KH6HU(3)[6],=KH6HWK(3)[6], + =KH6IA(3)[6],=KH6ICQ(3)[6],=KH6IKC(3)[6],=KH6IMN(3)[6],=KH6IQX(3)[6],=KH6ITY(3)[6],=KH6JFL(3)[6], + =KH6JIM/7(3)[6],=KH6JJS(3)[6],=KH6JPJ(3)[6],=KH6JPO(3)[6],=KH6JRW(3)[6],=KH6JT(3)[6], + =KH6JUQ(3)[6],=KH6KS(3)[6],=KH6KW(3)[6],=KH6LEM(3)[6],=KH6ME(3)[6],=KH6MF(3)[6],=KH6NA(3)[6], + =KH6NO/7(3)[6],=KH6NO/M(3)[6],=KH6NU(3)[6],=KH6OV(3)[6],=KH6PG(3)[6],=KH6PR(3)[6],=KH6QAI(3)[6], + =KH6QAI/7(3)[6],=KH6QAJ(3)[6],=KH6RW(3)[6],=KH6RY(3)[6],=KH6SAT(3)[6],=KH6SS(3)[6],=KH6TG(3)[6], + =KH6TX(3)[6],=KH6VM(3)[6],=KH6VM/7(3)[6],=KH6VT(3)[6],=KH6WX(3)[6],=KH6XG(3)[6],=KH6XS(3)[6], + =KH6XT(3)[6],=KH6YL(3)[6],=KH7AL(3)[6],=KH7AR(3)[6],=KH7AX(3)[6],=KH7CB(3)[6],=KH7CM(3)[6], + =KH7CZ(3)[6],=KH7FJ(3)[6],=KH7FR(3)[6],=KH7HH(3)[6],=KH7HWK(3)[6],=KH7IP(3)[6],=KH7LE(3)[6], + =KH7ME(3)[6],=KH7MR(3)[6],=KH7NP(3)[6],=KH7R(3)[6],=KH7RD(3)[6],=KH7RT(3)[6],=KH7SQ(3)[6], + =KH7SR(3)[6],=KH7VB(3)[6],=KH7VC(3)[6],=KH7WW(3)[6],=KH7WW/7(3)[6],=KH7X/7(3)[6],=KH7YD(3)[6], + =KH7YD/7(3)[6],=KH8AB(3)[6],=KH8AH(3)[6],=KH8AZ(3)[6],=KH8BG(3)[6],=KH8D(3)[6],=KH8E(3)[6], + =KH8K(3)[6],=KH9AA(3)[6],=KL0AI(3)[6],=KL0AN(3)[6],=KL0AP(3)[6],=KL0CA(3)[6],=KL0CM(3)[6], + =KL0CW(3)[6],=KL0DF(3)[6],=KL0DG(3)[6],=KL0DR(3)[6],=KL0DT(3)[6],=KL0EU(3)[6],=KL0IR(3)[6], + =KL0IS(3)[6],=KL0IW(3)[6],=KL0IX(3)[6],=KL0LF(3)[6],=KL0MO(3)[6],=KL0NM(3)[6],=KL0NP(3)[6], + =KL0PC(3)[6],=KL0PP(3)[6],=KL0QD(3)[6],=KL0RA(3)[6],=KL0SA(3)[6],=KL0SZ(3)[6],=KL0TR(3)[6], + =KL0TU(3)[6],=KL1AA(3)[6],=KL1AE(3)[6],=KL1DO(3)[6],=KL1DW(3)[6],=KL1ED(3)[6],=KL1JF(3)[6], + =KL1K(3)[6],=KL1LE(3)[6],=KL1LZ(3)[6],=KL1MF(3)[6],=KL1OH(3)[6],=KL1QL(3)[6],=KL1RH(3)[6], + =KL1RV(3)[6],=KL1SF/7(3)[6],=KL1SO(3)[6],=KL1U(3)[6],=KL1UA(3)[6],=KL1UM(3)[6],=KL1XI(3)[6], + =KL1YO(3)[6],=KL1YY/7(3)[6],=KL1ZN(3)[6],=KL1ZP(3)[6],=KL1ZR(3)[6],=KL2A/7(3)[6],=KL2BG(3)[6], + =KL2BO(3)[6],=KL2BW(3)[6],=KL2BY(3)[6],=KL2BZ(3)[6],=KL2FD(3)[6],=KL2FL(3)[6],=KL2JY(3)[6], + =KL2K(3)[6],=KL2KY(3)[6],=KL2LA(3)[6],=KL2LN(3)[6],=KL2LT(3)[6],=KL2MA(3)[6],=KL2MP(3)[6], + =KL2NJ(3)[6],=KL2NU(3)[6],=KL2NW(3)[6],=KL2OH(3)[6],=KL2OJ(3)[6],=KL2P(3)[6],=KL2QE(3)[6], + =KL2VK(3)[6],=KL2YH(3)[6],=KL3EZ(3)[6],=KL3FE(3)[6],=KL3IC(3)[6],=KL3IO(3)[6],=KL3IW(3)[6], + =KL3MZ(3)[6],=KL3NE(3)[6],=KL3NO(3)[6],=KL3OQ(3)[6],=KL3PD(3)[6],=KL3TW(3)[6],=KL3TY(3)[6], + =KL3VJ(3)[6],=KL3XS(3)[6],=KL4BQ(3)[6],=KL4BS(3)[6],=KL4E(3)[6],=KL4RKH(3)[6],=KL4YFD(3)[6], + =KL7AB(3)[6],=KL7AD(3)[6],=KL7AW(3)[6],=KL7BD(3)[6],=KL7BDC(3)[6],=KL7BH(3)[6],=KL7BR(3)[6], + =KL7BS(3)[6],=KL7BT(3)[6],=KL7BUR(3)[6],=KL7BXP(3)[6],=KL7C(3)[6],=KL7CPO(3)[6],=KL7CT(3)[6], + =KL7CY(3)[6],=KL7DC(3)[6],=KL7DF(3)[6],=KL7DI(3)[6],=KL7DK(3)[6],=KL7DLG(3)[6],=KL7EF(3)[6], + =KL7EFL(3)[6],=KL7EH(3)[6],=KL7EIN(3)[6],=KL7EU(3)[6],=KL7FDQ(3)[6],=KL7FDQ/7(3)[6],=KL7FOZ(3)[6], + =KL7FRQ(3)[6],=KL7FS(3)[6],=KL7GA(3)[6],=KL7GCS(3)[6],=KL7GKY(3)[6],=KL7GRF(3)[6],=KL7GT(3)[6], + =KL7HB(3)[6],=KL7HBV(3)[6],=KL7HFI/7(3)[6],=KL7HFV(3)[6],=KL7HI(3)[6],=KL7HJR(3)[6],=KL7HLF(3)[6], + =KL7HM(3)[6],=KL7HMK(3)[6],=KL7HQL(3)[6],=KL7HSR(3)[6],=KL7IAL(3)[6],=KL7IBT(3)[6],=KL7IDY(3)[6], + =KL7IEI(3)[6],=KL7IFK(3)[6],=KL7IGB(3)[6],=KL7IHK(3)[6],=KL7IIK(3)[6],=KL7IKV(3)[6],=KL7IL(3)[6], + =KL7IME(3)[6],=KL7IOW(3)[6],=KL7IPV(3)[6],=KL7ISE(3)[6],=KL7IUX(3)[6],=KL7IWC/7(3)[6], + =KL7IZC(3)[6],=KL7IZH(3)[6],=KL7JBB(3)[6],=KL7JDQ(3)[6],=KL7JES(3)[6],=KL7JIJ(3)[6],=KL7JJE(3)[6], + =KL7JKV(3)[6],=KL7KA(3)[6],=KL7KG/7(3)[6],=KL7LG(3)[6],=KL7LI(3)[6],=KL7LX(3)[6],=KL7LZ(3)[6], + =KL7M(3)[6],=KL7MY(3)[6],=KL7MZ(3)[6],=KL7NA(3)[6],=KL7NP(3)[6],=KL7NP/7(3)[6],=KL7OA(3)[6], + =KL7OF(3)[6],=KL7OL(3)[6],=KL7OR(3)[6],=KL7OR/7(3)[6],=KL7OS(3)[6],=KL7OY(3)[6],=KL7PO(3)[6], + =KL7QA(3)[6],=KL7QK(3)[6],=KL7QK/140(3)[6],=KL7QK/7(3)[6],=KL7QR(3)[6],=KL7QR/7(3)[6],=KL7R(3)[6], + =KL7RC(3)[6],=KL7RK(3)[6],=KL7RM(3)[6],=KL7RS(3)[6],=KL7S(3)[6],=KL7SK(3)[6],=KL7SP(3)[6], + =KL7T(3)[6],=KL7TU(3)[6],=KL7UP(3)[6],=KL7UT(3)[6],=KL7VK(3)[6],=KL7VL(3)[6],=KL7VN(3)[6], + =KL7VQ(3)[6],=KL7W(3)[6],=KL7WC(3)[6],=KL7WM(3)[6],=KL7WN(3)[6],=KL7WP(3)[6],=KL7WP/7(3)[6], + =KL7WT(3)[6],=KL7YJ(3)[6],=KL7YQ(3)[6],=KL7YY/M(3)[6],=KL7ZH(3)[6],=KL7ZW(3)[6],=KL8RV(3)[6], + =KL8SU(3)[6],=KL9PC(3)[6],=KP2BX(3)[6],=KP2CB(3)[6],=KP2CT(3)[6],=KP2X(3)[6],=KP2Y(3)[6], + =KP4EFZ(3)[6],=KP4ND(3)[6],=KP4UZ(3)[6],=KP4X(3)[6],=NH0F(3)[6],=NH0K(3)[6],=NH0O(3)[6], + =NH2DM(3)[6],=NH2JE(3)[6],=NH2KR(3)[6],=NH6B(3)[6],=NH6BF(3)[6],=NH6CI(3)[6],=NH6DQ(3)[6], + =NH6DX(3)[6],=NH6FF(3)[6],=NH6GZ(3)[6],=NH6HE(3)[6],=NH6HZ(3)[6],=NH6LF(3)[6],=NH6LM(3)[6], + =NH6NS(3)[6],=NH6U(3)[6],=NH6XN(3)[6],=NH6XP(3)[6],=NH6Z(3)[6],=NH6ZA(3)[6],=NH6ZE(3)[6], + =NH7FZ(3)[6],=NH7L(3)[6],=NH7M(3)[6],=NH7MY(3)[6],=NH7N(3)[6],=NH7ND(3)[6],=NH7NJ/7(3)[6], + =NH7OC(3)[6],=NH7PL(3)[6],=NH7RS(3)[6],=NH7S(3)[6],=NH7SH(3)[6],=NH7TG(3)[6],=NH7VZ(3)[6], + =NH7W(3)[6],=NH7WT(3)[6],=NH7WU(3)[6],=NH7YE(3)[6],=NH7YI(3)[6],=NL7AH(3)[6],=NL7AR(3)[6], + =NL7AZ(3)[6],=NL7CH(3)[6],=NL7D(3)[6],=NL7D/7(3)[6],=NL7DH(3)[6],=NL7DY(3)[6],=NL7EO(3)[6], + =NL7FQ(3)[6],=NL7FX(3)[6],=NL7GM(3)[6],=NL7GO(3)[6],=NL7GW(3)[6],=NL7HH(3)[6],=NL7HK(3)[6], + =NL7HQ(3)[6],=NL7HU(3)[6],=NL7IN(3)[6],=NL7JJ(3)[6],=NL7JN(3)[6],=NL7KV(3)[6],=NL7LI(3)[6], + =NL7MS(3)[6],=NL7MT(3)[6],=NL7NL(3)[6],=NL7OF(3)[6],=NL7PN(3)[6],=NL7QI(3)[6],=NL7RL(3)[6], + =NL7TK(3)[6],=NL7UE(3)[6],=NL7US(3)[6],=NL7WD(3)[6],=NL7WJ(3)[6],=NL7XX(3)[6],=NL7ZM(3)[6], + =NL7ZN(3)[6],=NL7ZP(3)[6],=NP2CT(3)[6],=NP2KL(3)[6],=NP2X/7(3)[6],=NP3PH(3)[6],=NP4AI/M(3)[6], + =NP4ES(3)[6],=NP4FP(3)[6],=NP4I(3)[6],=NP4JV(3)[6],=NP4JV/7(3)[6],=VA2GLB/P(3)[6],=WH0AAM(3)[6], + =WH0J(3)[6],=WH2ACV(3)[6],=WH2AJF(3)[6],=WH6ARU(3)[6],=WH6ASB(3)[6],=WH6B(3)[6],=WH6BDR(3)[6], + =WH6BLM(3)[6],=WH6BPU(3)[6],=WH6CF(3)[6],=WH6CMS(3)[6],=WH6CN(3)[6],=WH6CUS(3)[6],=WH6CWD(3)[6], + =WH6CXB(3)[6],=WH6CXE(3)[6],=WH6CXN(3)[6],=WH6CYB(3)[6],=WH6CZ(3)[6],=WH6DAY(3)[6],=WH6DJO(3)[6], + =WH6DKC(3)[6],=WH6DLQ(3)[6],=WH6DMP(3)[6],=WH6DQ(3)[6],=WH6DST(3)[6],=WH6EEC(3)[6],=WH6EEG(3)[6], + =WH6EGM(3)[6],=WH6EHW(3)[6],=WH6EJV(3)[6],=WH6EQB(3)[6],=WH6ESS(3)[6],=WH6ETO(3)[6],=WH6EWE(3)[6], + =WH6FCT(3)[6],=WH6FEU(3)[6],=WH6FL(3)[6],=WH6FOJ(3)[6],=WH6OL(3)[6],=WH6OY(3)[6],=WH6QV(3)[6], + =WH6SD(3)[6],=WH6SR(3)[6],=WH6TI(3)[6],=WH6U(3)[6],=WH6XV(3)[6],=WH6YT(3)[6],=WH6ZR(3)[6], + =WH6ZV(3)[6],=WH7A(3)[6],=WH7CY(3)[6],=WH7DB(3)[6],=WH7DE(3)[6],=WH7G(3)[6],=WH7GC(3)[6], + =WH7GY(3)[6],=WH7HU(3)[6],=WH7LB(3)[6],=WH7NS(3)[6],=WH7P(3)[6],=WH7RG(3)[6],=WH7TC(3)[6], + =WH7U(3)[6],=WH7UP(3)[6],=WH7WP(3)[6],=WH7WT(3)[6],=WH7XP(3)[6],=WL7AAW(3)[6],=WL7AL(3)[6], + =WL7AP(3)[6],=WL7AUY(3)[6],=WL7AZG(3)[6],=WL7AZL(3)[6],=WL7BCR(3)[6],=WL7BHR(3)[6],=WL7BLM(3)[6], + =WL7BM(3)[6],=WL7BNQ(3)[6],=WL7BON(3)[6],=WL7BOO(3)[6],=WL7BSW(3)[6],=WL7BUI(3)[6],=WL7BVN(3)[6], + =WL7BVS(3)[6],=WL7CAZ(3)[6],=WL7CBF(3)[6],=WL7CES(3)[6],=WL7COQ(3)[6],=WL7CPE(3)[6],=WL7CPI(3)[6], + =WL7CQX(3)[6],=WL7CRJ(3)[6],=WL7CSL(3)[6],=WL7CTB(3)[6],=WL7CTC(3)[6],=WL7CTE(3)[6],=WL7DD(3)[6], + =WL7FA(3)[6],=WL7FR(3)[6],=WL7FU(3)[6],=WL7H(3)[6],=WL7HE(3)[6],=WL7HK(3)[6],=WL7HL(3)[6], + =WL7IQ(3)[6],=WL7IS(3)[6],=WL7JM(3)[6],=WL7K(3)[6],=WL7K/7(3)[6],=WL7K/M(3)[6],=WL7LB(3)[6], + =WL7LK(3)[6],=WL7OA(3)[6],=WL7P(3)[6],=WL7PJ(3)[6],=WL7QC(3)[6],=WL7QX(3)[6],=WL7RV/140(3)[6], + =WL7SD(3)[6],=WL7SO(3)[6],=WL7SV(3)[6],=WL7T(3)[6],=WL7VK(3)[6],=WL7WB(3)[6],=WL7WF(3)[6], + =WL7WG(3)[6],=WL7WU(3)[6],=WL7XE(3)[6],=WL7XJ(3)[6],=WL7XN(3)[6],=WL7XW(3)[6],=WL7Z(3)[6], + =WL7ZM(3)[6],=WP2ADG(3)[6],=WP4BZG(3)[6],=WP4DYP(3)[6],=WP4NBP(3)[6], AA8(4)[8],AB8(4)[8],AC8(4)[8],AD8(4)[8],AE8(4)[8],AF8(4)[8],AG8(4)[8],AI8(4)[8],AJ8(4)[8], AK8(4)[8],K8(4)[8],KA8(4)[8],KB8(4)[8],KC8(4)[8],KD8(4)[8],KE8(4)[8],KF8(4)[8],KG8(4)[8], KI8(4)[8],KJ8(4)[8],KK8(4)[8],KM8(4)[8],KN8(4)[8],KO8(4)[8],KQ8(4)[8],KR8(4)[8],KS8(4)[8], @@ -1551,8 +1557,9 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KP2RF(4)[8],=KP4AKB(4)[8],=KP4AMZ(4)[8],=KP4AQI(4)[8],=KP4E(4)[8],=KP4MAS(4)[8],=KP4VZ(4)[8], =KP4ZD(4)[8],=NH6CN(4)[8],=NH6CN/8(4)[8],=NL7CF(4)[8],=NL7FK(4)[8],=NP2AK(4)[8],=NP2F(4)[8], =NP3NA(4)[8],=VE3ACW/M(4)[8],=WH2U(4)[8],=WH6CYR(4)[8],=WH6E(4)[8],=WH6E/8(4)[8],=WH6EBA(4)[8], - =WH6EJD(4)[8],=WH6TB(4)[8],=WL7AM(4)[8],=WL7BKR(4)[8],=WL7CMV(4)[8],=WL7OS(4)[8],=WL7OT(4)[8], - =WP3KU(4)[8],=WP3S(4)[8],=WP4HJF(4)[8],=WP4MWB(4)[8],=WP4NAE(4)[8],=WP4NYQ(4)[8],=WP4PLR(4)[8], + =WH6EJD(4)[8],=WH6EWB(4)[8],=WH6TB(4)[8],=WL7AGO(4)[8],=WL7AM(4)[8],=WL7BKR(4)[8],=WL7CMV(4)[8], + =WL7OS(4)[8],=WL7OT(4)[8],=WP3KU(4)[8],=WP3S(4)[8],=WP4HJF(4)[8],=WP4MWB(4)[8],=WP4NAE(4)[8], + =WP4NYQ(4)[8],=WP4PLR(4)[8], AA9(4)[8],AB9(4)[8],AC9(4)[8],AD9(4)[8],AE9(4)[8],AF9(4)[8],AG9(4)[8],AI9(4)[8],AJ9(4)[8], AK9(4)[8],K9(4)[8],KA9(4)[8],KB9(4)[8],KC9(4)[8],KD9(4)[8],KE9(4)[8],KF9(4)[8],KG9(4)[8], KI9(4)[8],KJ9(4)[8],KK9(4)[8],KM9(4)[8],KN9(4)[8],KO9(4)[8],KQ9(4)[8],KR9(4)[8],KS9(4)[8], @@ -1587,15 +1594,15 @@ United States: 05: 08: NA: 37.53: 91.67: 5.0: K: =KL7LT(4)[8],=KL7WW(4)[8],=KL7YN(4)[8],=KL7YT(4)[8],=KL9MEK(4)[8],=KP3RC(4)[8],=KP4TOM(4)[8], =NH2E(4)[8],=NH6T/4(4)[8],=NH7FK(4)[8],=NH7FL(4)[8],=NH7H(4)[8],=NL7OE(4)[8],=NL7YU(4)[8], =NP3FB(4)[8],=NP4AC(4)[8],=NP4AC/4(4)[8],=WH6AUL(4)[8],=WH6BPL(4)[8],=WH6BPL/4(4)[8],=WH6DM(4)[8], - =WH6EOG(4)[8],=WH6EQW(4)[8],=WH6FEJ(4)[8],=WH6LAK(4)[8],=WL4B(4)[8],=WL7BHI(4)[8],=WL7BHJ(4)[8], - =WL7CQH(4)[8],=WL7CQK(4)[8],=WL7IP(4)[8],=WL7PC(4)[8],=WL7SF(4)[8],=WL7TD(4)[8],=WL7XZ(4)[8], - =WP4CNA(4)[8], + =WH6EOG(4)[8],=WH6EQW(4)[8],=WH6FEJ(4)[8],=WH6LAK(4)[8],=WH6Q/4(4)[8],=WL4B(4)[8],=WL7BHI(4)[8], + =WL7BHJ(4)[8],=WL7CQH(4)[8],=WL7CQK(4)[8],=WL7IP(4)[8],=WL7PC(4)[8],=WL7SF(4)[8],=WL7TD(4)[8], + =WL7XZ(4)[8],=WP4CNA(4)[8], =AL7AU(4)[7],=AL7NI(4)[7],=AL7RT(4)[7],=AL7RT/7(4)[7],=KH2BR/7(4)[7],=KH6JVF(4)[7],=KH6OZ(4)[7], =KH7SS(4)[7],=KL0NT(4)[7],=KL0NV(4)[7],=KL0RN(4)[7],=KL0TF(4)[7],=KL1HE(4)[7],=KL1MW(4)[7], =KL1TV(4)[7],=KL2NZ(4)[7],=KL4CZ(4)[7],=KL7AR(4)[7],=KL7HF(4)[7],=KL7JGS(4)[7],=KL7JGS/M(4)[7], =KL7JM(4)[7],=KL7JUL(4)[7],=KL7LH(4)[7],=KL7MVX(4)[7],=KL7YY/7(4)[7],=KL9A(4)[7],=KL9A/7(4)[7], - =NH0E(4)[7],=NH6HW(4)[7],=NL7IH(4)[7],=NL7MW(4)[7],=WH2M(4)[7],=WH6COM(4)[7],=WH6ETU(4)[7], - =WH6EVP(4)[7],=WL7A(4)[7],=WL7DP(4)[7],=WL7HP/7(4)[7],=WL7I(4)[7], + =NH0E(4)[7],=NH6HW(4)[7],=NL7IH(4)[7],=NL7MW(4)[7],=NL7UI(4)[7],=WH2M(4)[7],=WH6COM(4)[7], + =WH6ETU(4)[7],=WH6EVP(4)[7],=WL7A(4)[7],=WL7DP(4)[7],=WL7HP/7(4)[7],=WL7I(4)[7], =AL7LU(5)[8],=KL7JFR(5)[8],=WL7HC(5)[8],=WP4GR(5)[8]; Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: KG4,=KG44WW,=KG4AC,=KG4AS,=KG4AW,=KG4AY,=KG4BP,=KG4DY,=KG4EM,=KG4EU,=KG4HF,=KG4HH,=KG4LA,=KG4LB, @@ -1603,8 +1610,9 @@ Guantanamo Bay: 08: 11: NA: 20.00: 75.00: 5.0: KG4: Mariana Islands: 27: 64: OC: 15.18: -145.72: -10.0: KH0: AH0,KH0,NH0,WH0,=AB2HV,=AB2QH,=AB9HF,=AB9OQ,=AC8CP,=AD5KT,=AD6YP,=AE6OG,=AF4IN,=AF4KH,=AF6EO, =AH2U,=AJ6K,=AK1JA,=K0FRI,=K8KH,=K8RN,=KB5UAB,=KB9LQG,=KC2WIK,=KC5SPG,=KC7SDC,=KC9GQX,=KD7GJX, - =KG2QH,=KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O,=KH2VL,=KL7QOL,=KW2X,=N0J,=N3QD,=N6EAX,=N7NVX, - =N8CS,=NA1M,=NH2B,=NH2FG,=NO3V,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC,=WE1J,=WH6ZW,=WO2G; + =KF7COQ,=KG2QH,=KG6GQ,=KG6SB,=KG7DCN,=KH0EN/KT,=KH2GV,=KH2O,=KH2VL,=KL7QOL,=KW2X,=N0J,=N3QD, + =N6EAX,=N7NVX,=N8CS,=NA1M,=NH2B,=NH2FG,=NO3V,=NS0C,=NU2A,=W1FPU,=W3FM,=W3NL,=W3STX,=W7KFS,=WA6AC, + =WE1J,=WH6ZW,=WO2G; Baker & Howland Islands: 31: 61: OC: 0.00: 176.00: 12.0: KH1: AH1,KH1,NH1,WH1; Guam: 27: 64: OC: 13.37: -144.70: -10.0: KH2: @@ -1627,41 +1635,41 @@ Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: =K3NW,=K3QHP,=K3UNS,=K4EVR,=K4RAC,=K4UAI,=K4UHL,=K4XS,=K4XSS,=K4XV,=K5HQM,=K5UN,=K5ZAI,=K5ZYO, =K6AMA,=K6APP,=K6ATF,=K6BU,=K6CEE,=K6GJS,=K6GUY,=K6HI,=K6JAE,=K6MIO,=K6NLF,=K6RSB,=K7ALH,=K7ASH, =K7FAR,=K7FR,=K7NRJ,=K7QAS,=K8EUT,=K9AGI,=K9FD,=K9UBS,=KA0FOR,=KA0VHP,=KA1ICJ,=KA1YJ,=KA2IXG, - =KA2WXU,=KA3HIZ,=KA3TUA,=KA4INK,=KA6QOD,=KA7APU,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR,=KB0PXK, - =KB0ZKZ,=KB1EUJ,=KB1GC,=KB1PCX,=KB1UHL,=KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV,=KB4NGN, - =KB5HVJ,=KB5NNY,=KB5OWT,=KB6CNU,=KB6EGA,=KB6INB,=KB6PKF,=KB7AKH,=KB7DDX,=KB7EA,=KB7G,=KB7JB, - =KB7MEU,=KB7QKJ,=KB7UQH,=KB7UVR,=KB7WDC,=KB7WUP,=KB8SKX,=KC0WQU,=KC0YIH,=KC0ZER,=KC1DBY,=KC2GSU, - =KC2HL,=KC2MIU,=KC2PGW,=KC2SRW,=KC2YL,=KC2ZSG,=KC2ZSH,=KC2ZSI,=KC3GZT,=KC4HHS,=KC5GAX,=KC6HOX, - =KC6QQI,=KC6RYQ,=KC6SHT,=KC6SWR,=KC6YIO,=KC7ASJ,=KC7AXX,=KC7DUT,=KC7EJC,=KC7HNC,=KC7KAT,=KC7KAW, - =KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG,=KC7USA,=KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI,=KC8EJ, - =KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ,=KD0QLR,=KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ,=KD4GW, - =KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX,=KD5TBQ,=KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX,=KD6LRA, - =KD6NVX,=KD6VTU,=KD7GWM,=KD7HTG,=KD7KFT,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ,=KD7UV,=KD7UZG,=KD7WJM, - =KD8GVO,=KE0TU,=KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM,=KE5UZN,=KE6AXN,=KE6AXP, - =KE6AYZ,=KE6CQE,=KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ,=KE7FJA,=KE7FSK,=KE7HEW, - =KE7IZS,=KE7JTX,=KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT,=KE7UAJ,=KE7UV,=KE7UW, - =KF4DWA,=KF4FQR,=KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ,=KF5MXM,=KF5MXP,=KF6BS, - =KF6FDG,=KF6IVV,=KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD,=KF6RLP,=KF6YZR,=KF6ZAL, - =KF6ZVS,=KF7GNP,=KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC,=KG4SGV,=KG6DV, - =KG6EFD,=KG6HRX,=KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI,=KG6SDD,=KG6TFI, - =KG6WZD,=KG7AYU,=KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE,=KH2YI,=KH3AE, - =KH3AE/M,=KH3AF,=KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ,=KI6EFY,=KI6FTE, - =KI6HBZ,=KI6JEC,=KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV,=KI7EZG,=KI7FJW, - =KI7FJX,=KI7FUT,=KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW,=KJ6LAX,=KJ6LBI, - =KJ6NZH,=KJ6QQT,=KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX,=KK6PGA,=KK6QAI, - =KK6RM,=KK6VJN,=KK6ZQ,=KK6ZZE,=KK7WR,=KL0TK,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK,=KM6RM, - =KN6BE,=KN6ZU,=KN8AQR,=KO6KW,=KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0KXY,=N0PJV, - =N0RMC,=N0ZSJ,=N1CBF,=N1CFD,=N1CNQ,=N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU,=N2KLQ, - =N3DJT,=N3FUR,=N3GWR,=N3HQW,=N3RWD,=N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA,=N6DXW, - =N6GOZ,=N6IKX,=N6KB,=N6NCT,=N6PJQ,=N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV,=N7WBX, - =N9CRQ,=N9GFL,=N9SBL,=NB6R,=NE7SO,=NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF,=NH2II, - =NH2IJ,=NH2IO,=NH2JO,=NH2KF,=NH2KH,=NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA,=NZ2F, - =W0UNX,=W1BMB,=W2UNS,=W3ZRT,=W4YQS,=W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB,=W6MRJ, - =W6NBK,=W6ROM,=W6SHH,=W6UNX,=W7EHP,=W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH,=WA0FUR, - =WA0NHD,=WA2AUI,=WA3ZEM,=WA6ECX,=WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO,=WA7TFE, - =WA7ZK,=WA8JQP,=WB0RUA,=WB0TZQ,=WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ,=WB6PIO, - =WB6PJT,=WB6SAA,=WB8NCD,=WB9SMM,=WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO,=WH2Y,=WH7K, - =WU0H,=WV0Z,=WV6K,=WX7G,=WY6F; + =KA2WXU,=KA3HIZ,=KA3TUA,=KA4INK,=KA6QOD,=KA7APU,=KA7BSK,=KA7RKW,=KA8EBL,=KA8KND,=KA9DMP,=KB0DJR, + =KB0PXK,=KB0ZKZ,=KB1EUJ,=KB1GC,=KB1PCX,=KB1UHL,=KB2MRY,=KB3DMT,=KB3IOC,=KB3OXU,=KB3PJS,=KB3SEV, + =KB4NGN,=KB5HVJ,=KB5NNY,=KB5OWT,=KB6CNU,=KB6EGA,=KB6INB,=KB6PKF,=KB7AKH,=KB7DDX,=KB7EA,=KB7G, + =KB7JB,=KB7MEU,=KB7QKJ,=KB7UQH,=KB7UVR,=KB7WDC,=KB7WUP,=KB8SKX,=KC0WQU,=KC0YIH,=KC0ZER,=KC1DBY, + =KC2GSU,=KC2HL,=KC2MIU,=KC2PGW,=KC2SRW,=KC2YL,=KC2ZSG,=KC2ZSH,=KC2ZSI,=KC3GZT,=KC4HHS,=KC5GAX, + =KC6HOX,=KC6QQI,=KC6RYQ,=KC6SHT,=KC6SWR,=KC6YIO,=KC7ASJ,=KC7AXX,=KC7DUT,=KC7EJC,=KC7HNC,=KC7KAT, + =KC7KAW,=KC7KBA,=KC7KHW,=KC7KJT,=KC7LFM,=KC7NZ,=KC7PLG,=KC7USA,=KC7VHF,=KC7VWU,=KC7YXO,=KC8EFI, + =KC8EJ,=KC9AUA,=KC9EQS,=KC9KEX,=KC9NJG,=KC9SBG,=KD0QLQ,=KD0QLR,=KD0RPD,=KD0WVZ,=KD0ZSP,=KD3FZ, + =KD4GW,=KD4ML,=KD4QWO,=KD5ACN,=KD5BSK,=KD5HDA,=KD5HX,=KD5TBQ,=KD6CVU,=KD6CWF,=KD6EPD,=KD6IPX, + =KD6LRA,=KD6NVX,=KD6VTU,=KD7GWM,=KD7HTG,=KD7KFT,=KD7LMP,=KD7SME,=KD7SMV,=KD7TZ,=KD7UV,=KD7UZG, + =KD7WJM,=KD8GVO,=KE0TU,=KE2CX,=KE4DYE,=KE4RNU,=KE4UXQ,=KE4ZXQ,=KE5CGA,=KE5FJM,=KE5UZN,=KE6AXN, + =KE6AXP,=KE6AYZ,=KE6CQE,=KE6EDJ,=KE6EVT,=KE6JXO,=KE6RAW,=KE6TFR,=KE6TIS,=KE6TKQ,=KE7FJA,=KE7FSK, + =KE7HEW,=KE7IZS,=KE7JTX,=KE7KRQ,=KE7LWN,=KE7MW,=KE7PEQ,=KE7PIZ,=KE7QML,=KE7RCT,=KE7UAJ,=KE7UV, + =KE7UW,=KF4DWA,=KF4FQR,=KF4IBW,=KF4JLZ,=KF4OOB,=KF4URD,=KF4VHS,=KF5AHW,=KF5LBQ,=KF5MXM,=KF5MXP, + =KF6BS,=KF6FDG,=KF6IVV,=KF6LWN,=KF6LYU,=KF6MQT,=KF6OSA,=KF6PJ,=KF6PQE,=KF6QZD,=KF6RLP,=KF6YZR, + =KF6ZAL,=KF6ZVS,=KF7GNP,=KF7IJL,=KF7LRS,=KF7OJR,=KF7TUU,=KF7VUK,=KG0XR,=KG4HZF,=KG4SGC,=KG4SGV, + =KG6DV,=KG6EFD,=KG6HRX,=KG6IGY,=KG6JJP,=KG6LFX,=KG6MZJ,=KG6NNF,=KG6NQI,=KG6OOB,=KG6RJI,=KG6SDD, + =KG6TFI,=KG6WZD,=KG7AYU,=KG7CJI,=KG7CVR,=KG7EUP,=KH0AI,=KH0HL,=KH0WJ,=KH2MD,=KH2TD,=KH2TE,=KH2YI, + =KH3AE,=KH3AE/M,=KH3AF,=KH8Z,=KI4CAU,=KI4HCZ,=KI4NOH,=KI4YAF,=KI4YOG,=KI6CRL,=KI6DVJ,=KI6EFY, + =KI6FTE,=KI6HBZ,=KI6JEC,=KI6LPT,=KI6NOC,=KI6QDQ,=KI6QQJ,=KI6SNP,=KI6VYB,=KI6WOJ,=KI6ZRV,=KI7EZG, + =KI7FJW,=KI7FJX,=KI7FUT,=KI7OS,=KI7QZQ,=KJ4BHO,=KJ4EYV,=KJ4KND,=KJ4WOI,=KJ6GYD,=KJ6LAW,=KJ6LAX, + =KJ6LBI,=KJ6NZH,=KJ6QQT,=KJ6RGW,=KJ6SKC,=KJ6TJZ,=KK4EEC,=KK6BRW,=KK6EJ,=KK6GM,=KK6OMX,=KK6PGA, + =KK6QAI,=KK6RM,=KK6VJN,=KK6ZQ,=KK6ZZE,=KK7WR,=KL0TK,=KL1TP,=KL3FN,=KL7PN,=KL7UB,=KM6BOQ,=KM6IK, + =KM6RM,=KN6BE,=KN6ZU,=KN8AQR,=KO6KW,=KO6QT,=KQ6CD,=KQ6M,=KU4OY,=KW4JC,=KY1I,=N0CAN,=N0DQD,=N0KXY, + =N0PJV,=N0RMC,=N0ZSJ,=N1CBF,=N1CFD,=N1CNQ,=N1IDP,=N1SHV,=N1TEE,=N1TLE,=N1VOP,=N1YLH,=N2AL,=N2KJU, + =N2KLQ,=N3DJT,=N3FUR,=N3GWR,=N3HQW,=N3RWD,=N3VDM,=N3ZFY,=N4ERA,=N4ZIW,=N5IWF,=N5JKJ,=N6AI,=N6CGA, + =N6DXW,=N6GOZ,=N6IKX,=N6KB,=N6NCT,=N6PJQ,=N6QBK,=N6ZAB,=N7AMY,=N7BLC,=N7KZB,=N7NYY,=N7ODC,=N7TSV, + =N7WBX,=N9CRQ,=N9GFL,=N9SBL,=NB6R,=NE7SO,=NG1T,=NH2CC,=NH2CD,=NH2CF,=NH2CQ,=NH2CR,=NH2IB,=NH2IF, + =NH2II,=NH2IJ,=NH2IO,=NH2JO,=NH2KF,=NH2KH,=NH2YL,=NH2Z,=NI1J,=NL7UW,=NM2B,=NO0H,=NT0DA,=NT4AA, + =NZ2F,=W0UNX,=W1BMB,=W2UNS,=W3ZRT,=W4YQS,=W5FJG,=W6AUS,=W6CAG,=W6CWJ,=W6KEV,=W6KIT,=W6KPI,=W6MQB, + =W6MRJ,=W6NBK,=W6ROM,=W6SHH,=W6UNX,=W7EHP,=W7NVQ,=W7NX,=W7OO,=W7RCR,=W7UEA,=W8AYD,=W8JAY,=W8WH, + =WA0FUR,=WA0NHD,=WA2AUI,=WA3ZEM,=WA6ECX,=WA6IIQ,=WA6JDA,=WA6JJQ,=WA6QDQ,=WA6UVF,=WA7ESE,=WA7HEO, + =WA7TFE,=WA7ZK,=WA8JQP,=WB0RUA,=WB0TZQ,=WB2AHM,=WB2SQW,=WB4JTT,=WB4MNF,=WB5ZDH,=WB5ZOV,=WB6CVJ, + =WB6PIO,=WB6PJT,=WB6SAA,=WB8NCD,=WB9SMM,=WC6B,=WD0FTF,=WD0LFN,=WD6EZL,=WD6GHJ,=WD8LIB,=WD8OBO, + =WH2Y,=WH7K,=WU0H,=WV0Z,=WV6K,=WX7G,=WY6F; Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K: AH7K,KH7K,NH7K,WH7K; American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8: @@ -1682,38 +1690,39 @@ Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: =KB5HEV,=KB5UWU,=KB6DKJ,=KB7AMA,=KB7BNG,=KB7DEL,=KB7FXJ,=KB7IBI,=KB7JA,=KB7LJZ,=KB7LON,=KB7PHT, =KB7QLB,=KB7RXZ,=KB7SIQ,=KB7UBH,=KB7VFZ,=KB7YEC,=KB7ZVZ,=KB8QKR,=KB8SBG,=KB8TEW,=KB8VYJ,=KB9MWG, =KB9RWE,=KB9RWJ,=KB9YGR,=KC0ATI,=KC0CWG,=KC0CYR,=KC0EF,=KC0GHH,=KC0LLL,=KC0NSV,=KC0OKQ,=KC0PSZ, - =KC0TK,=KC0TZL,=KC0UYK,=KC0VDN,=KC0WSG,=KC0YSW,=KC1DL,=KC2BYX,=KC2GVS,=KC2HRV,=KC2KMU,=KC2OJP, - =KC2PCV,=KC2PIO,=KC3DBK,=KC4MXQ,=KC4MXR,=KC5BNN,=KC5CHO,=KC5DJA,=KC5KIG,=KC5LKF,=KC5LKG,=KC5QPJ, - =KC5THY,=KC5YIB,=KC5YOX,=KC5ZAA,=KC6RJW,=KC7BUL,=KC7COW,=KC7ENM,=KC7FWK,=KC7GSO,=KC7HJM,=KC7HPF, - =KC7IKE,=KC7IKF,=KC7INC,=KC7MIJ,=KC7MPY,=KC7MRO,=KC7OQZ,=KC7PLJ,=KC7PLQ,=KC7RCP,=KC7TYT,=KC7UZY, - =KC7WOA,=KC7YZR,=KC8GKK,=KC8NMN,=KC8NOY,=KC8WWS,=KC8YIV,=KC9CMY,=KC9HIK,=KC9VLD,=KD0CLU,=KD0CZC, - =KD0DHU,=KD0FJG,=KD0JJB,=KD0NSG,=KD0VAK,=KD0VAL,=KD0VGF,=KD0ZOD,=KD2CTE,=KD2GKT,=KD4EYW,=KD4MEY, - =KD4QJL,=KD5DNA,=KD5DWV,=KD5GAL,=KD5QPD,=KD5RVD,=KD5WCF,=KD5WEV,=KD5WYP,=KD6DLB,=KD6RVY,=KD6YKS, - =KD7APU,=KD7AWK,=KD7BBX,=KD7BGP,=KD7DIG,=KD7DUQ,=KD7FGL,=KD7FUL,=KD7GFG,=KD7HXF,=KD7KRK,=KD7MGO, - =KD7QAR,=KD7SIX,=KD7TWB,=KD7UAG,=KD7VOI,=KD7VXE,=KD7ZTJ,=KD8BVD,=KD8DDY,=KD8GEL,=KD8GMS,=KD8JOU, - =KD8LNA,=KD8WMX,=KD9TK,=KE0DYM,=KE0KKI,=KE4DGR,=KE4MQD,=KE4YEI,=KE4YLG,=KE5CVD,=KE5CVT,=KE5DQV, - =KE5FOC,=KE5GEB,=KE5HHR,=KE5JHS,=KE5JTB,=KE5NLG,=KE5QDI,=KE5QDJ,=KE5QDK,=KE5VPO,=KE5ZRK,=KE5ZUM, - =KE6DLM,=KE6DUJ,=KE6DXH,=KE6IPM,=KE6SYD,=KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL,=KE7EOP,=KE7EPZ,=KE7FNC, - =KE7FXM,=KE7GOE,=KE7HMJ,=KE7KYU,=KE7TRX,=KE8RO,=KF4JET,=KF4PLR,=KF4TBD,=KF4YFD,=KF5CVM,=KF5FJQ, - =KF5HFB,=KF5HJC,=KF5NDT,=KF5NHR,=KF5YYK,=KF6AWG,=KF6AXS,=KF6BMF,=KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO, - =KF6ILC,=KF6IOT,=KF6LGK,=KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS,=KF6TGR,=KF6UWT,=KF7CXJ,=KF7GKY, - =KF7LEX,=KF7LUA,=KF7PCJ,=KF7PFT,=KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO,=KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P, - =KG4TJS,=KG4WNZ,=KG5EQN,=KG5GDF,=KG5GTD,=KG5JQC,=KG5MIB,=KG5MIO,=KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL, - =KG7CUR,=KG7DVI,=KG7GJL,=KG7JVJ,=KG7OQC,=KG7SEQ,=KG7TGE,=KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA, - =KI4COG,=KI4ERC,=KI4GAG,=KI4GCF,=KI4GDI,=KI4NGY,=KI4NVI,=KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW, - =KI6YXZ,=KI7COR,=KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ,=KJ4PSV,=KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6DCH,=KJ6KRG, - =KJ6ZSX,=KJ7IR,=KK4AMV,=KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG,=KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I, - =KK7IV,=KK7STL,=KL7D/M,=KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX,=KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KN8IVE, - =KR4WV,=KV3X,=KW1W,=KY7J,=KZ6HJC,=N0GDT,=N0GDU,=N0GLI,=N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN, - =N0SUB,=N0WXJ,=N0XKY,=N0XS,=N0ZKV,=N1HEN,=N1HUT,=N1KDQ,=N1KTI,=N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH, - =N2SHO,=N2TJY,=N2YZW,=N3QEH,=N4AVX,=N4CM,=N4HCJ,=N4HZU,=N4NAV,=N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV, - =N6CZU,=N6JM,=N6ZZX,=N7BUO,=N7DBN,=N7FCT,=N7HER,=N7HQK,=N7IA,=N7JUX,=N7MGT,=N7MTG,=N7PHB,=N7QAN, - =N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY,=N7YQS,=N8DDY,=N8EX,=N8JKB,=N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD, - =NA7WM,=NC4OI,=NE7EK,=NH2GZ,=NH7UO,=NJ7H,=NM0H,=NN4NN,=NP4FU,=NW4G,=NW7F,=W0EZM,=W0FJN,=W0RWS, - =W0UZJ,=W1LYD,=W1RSC,=W1ZKA,=W2DLS,=W2KRZ,=W3JPN,=W3MKG,=W4AUL,=W4BMR,=W4RSB,=W5JKT,=W6DDP,=W6GTE, - =W6ROW,=W7APM,=W7DDG,=W7EIK,=W7JMR,=W7PWA,=W7RAZ,=W7ROS,=W7WEZ,=W7ZWT,=W8MDD,=W8PVZ,=W8TCX,=W9ITU, - =W9JMC,=WA0JS,=WA1FVJ,=WA2BGL,=WA2BIW,=WA6GFS,=WA7B,=WA7PXH,=WA7USX,=WA7YXF,=WB0CMZ,=WB1GZL, - =WB1ILS,=WB6COP,=WB7TYK,=WB9JZL,=WD6CET,=WH6CYY,=WH6DPL,=WH6DX,=WH7AK,=WJ8M,=WP4IYI,=WT5T,=WX1NCC; + =KC0TK,=KC0TZL,=KC0UYK,=KC0VDN,=KC0WSG,=KC0YSW,=KC1DL,=KC1KPL,=KC2BYX,=KC2GVS,=KC2HRV,=KC2KMU, + =KC2OJP,=KC2PCV,=KC2PIO,=KC3DBK,=KC4MXQ,=KC4MXR,=KC5BNN,=KC5CHO,=KC5DJA,=KC5KIG,=KC5LKF,=KC5LKG, + =KC5QPJ,=KC5THY,=KC5YIB,=KC5YOX,=KC5ZAA,=KC6RJW,=KC7BUL,=KC7COW,=KC7ENM,=KC7FWK,=KC7GSO,=KC7HJM, + =KC7HPF,=KC7IKE,=KC7IKF,=KC7INC,=KC7MIJ,=KC7MPY,=KC7MRO,=KC7OQZ,=KC7PLJ,=KC7PLQ,=KC7RCP,=KC7TYT, + =KC7UZY,=KC7WOA,=KC7YZR,=KC8GKK,=KC8MVW,=KC8NMN,=KC8NOY,=KC8WWS,=KC8YIV,=KC9CMY,=KC9HIK,=KC9VLD, + =KD0CLU,=KD0CZC,=KD0DHU,=KD0FJG,=KD0IXU,=KD0JJB,=KD0NSG,=KD0VAK,=KD0VAL,=KD0VGF,=KD0ZOD,=KD2CTE, + =KD2GKT,=KD4EYW,=KD4MEY,=KD4QJL,=KD5DNA,=KD5DWV,=KD5GAL,=KD5QPD,=KD5RVD,=KD5WCF,=KD5WEV,=KD5WYP, + =KD6DLB,=KD6RVY,=KD6YKS,=KD7APU,=KD7AWK,=KD7BBX,=KD7BGP,=KD7DIG,=KD7DUQ,=KD7FGL,=KD7FUL,=KD7GFG, + =KD7HXF,=KD7KRK,=KD7MGO,=KD7QAR,=KD7SIX,=KD7TWB,=KD7UAG,=KD7VOI,=KD7VXE,=KD7ZTJ,=KD8BVD,=KD8DDY, + =KD8GEL,=KD8GMS,=KD8JOU,=KD8LNA,=KD8WMX,=KD9TK,=KE0DYM,=KE0KKI,=KE4DGR,=KE4MQD,=KE4YEI,=KE4YLG, + =KE5CVD,=KE5CVT,=KE5DQV,=KE5FOC,=KE5GEB,=KE5HHR,=KE5JHS,=KE5JTB,=KE5NLG,=KE5QDI,=KE5QDJ,=KE5QDK, + =KE5VPO,=KE5ZRK,=KE5ZUM,=KE6DLM,=KE6DUJ,=KE6DXH,=KE6IPM,=KE6SYD,=KE6TCE,=KE6VUB,=KE7DFO,=KE7ELL, + =KE7EOP,=KE7EPZ,=KE7FNC,=KE7FXM,=KE7GOE,=KE7HMJ,=KE7KYU,=KE7TRX,=KE8RO,=KF3L,=KF4JET,=KF4PLR, + =KF4TBD,=KF4YFD,=KF5CVM,=KF5FJQ,=KF5HFB,=KF5HJC,=KF5NDT,=KF5NHR,=KF5YYK,=KF6AWG,=KF6AXS,=KF6BMF, + =KF6BOV,=KF6EJR,=KF6GNM,=KF6IAO,=KF6ILC,=KF6IOT,=KF6LGK,=KF6MFK,=KF6QOJ,=KF6RMG,=KF6RPC,=KF6SHS, + =KF6TGR,=KF6UWT,=KF7CXJ,=KF7GKY,=KF7LEX,=KF7LUA,=KF7PCJ,=KF7PFT,=KF7PSS,=KF7PUQ,=KF7UFY,=KF7VBO, + =KF8ZB,=KG2IA,=KG4BBX,=KG4NBL/P,=KG4TJS,=KG4WNZ,=KG5EQN,=KG5GDF,=KG5GTD,=KG5JQC,=KG5MIB,=KG5MIO, + =KG6DTI,=KG6MBC,=KG6RJE,=KG6TAL,=KG7CUR,=KG7DVI,=KG7GJL,=KG7JVJ,=KG7OQC,=KG7OUF,=KG7SEQ,=KG7TGE, + =KH0NF,=KH0NG,=KH0RF,=KH2YN,=KH7BW,=KH7DA,=KI4COG,=KI4ERC,=KI4GAG,=KI4GCF,=KI4GDI,=KI4NGY,=KI4NVI, + =KI4SET,=KI4SOM,=KI6BGR,=KI6DES,=KI6HGW,=KI6YXZ,=KI7COR,=KI7PZ,=KI8JT,=KJ4HEW,=KJ4IAQ,=KJ4PSV, + =KJ4WDI,=KJ4WIQ,=KJ4ZWI,=KJ6DCH,=KJ6KRG,=KJ6ZSX,=KJ7IR,=KK4AMV,=KK4CLS,=KK4LRE,=KK4QXE,=KK4RYG, + =KK4WWH,=KK4WWI,=KK6IUY,=KK6PGV,=KK7I,=KK7IV,=KK7STL,=KL7D/M,=KL7NC/IMD,=KM4AGL,=KM4KWS,=KM4KX, + =KM4NIC,=KM4OE,=KM4PJH,=KM4TJI,=KM6NOL,=KN4HGD,=KN8IVE,=KR4WV,=KV3X,=KW1W,=KY7J,=KZ6HJC,=N0GDT, + =N0GDU,=N0GLI,=N0HJT,=N0HYI,=N0HZF,=N0JEN,=N0LHN,=N0SN,=N0SUB,=N0WXJ,=N0XKY,=N0XS,=N0ZKV,=N1HEN, + =N1HUT,=N1KDQ,=N1KTI,=N1NDA,=N1NJS,=N1QFE,=N1TX,=N2CXH,=N2SHO,=N2TJY,=N2YZW,=N3QEH,=N4AVX,=N4CM, + =N4HCJ,=N4HZU,=N4NAV,=N5CSO,=N5UKX,=N5WPR,=N6BSC,=N6CVV,=N6CZU,=N6JM,=N6ZZX,=N7BUO,=N7DBN,=N7FCT, + =N7HER,=N7HQK,=N7IA,=N7JUX,=N7MGT,=N7MTG,=N7PHB,=N7QAN,=N7TBU,=N7UTV,=N7UWT,=N7XNM,=N7YKY,=N7YQS, + =N8DDY,=N8EX,=N8JKB,=N8KCJ,=N8SUG,=N9AIG,=N9FB,=N9YD,=NA7WM,=NC4OI,=NE7EK,=NH2GZ,=NH7UO,=NJ7H, + =NM0H,=NN4NN,=NP4FU,=NW4G,=NW7F,=W0EZM,=W0FJN,=W0RWS,=W0UZJ,=W1LYD,=W1RSC,=W1ZKA,=W2DLS,=W2KRZ, + =W3JPN,=W3MKG,=W4AUL,=W4BMR,=W4RSB,=W5JKT,=W6DDP,=W6GTE,=W6ROW,=W7APM,=W7DDG,=W7EIK,=W7JMR,=W7PWA, + =W7RAZ,=W7ROS,=W7WEZ,=W7ZWT,=W8MDD,=W8PVZ,=W8TCX,=W9ITU,=W9JMC,=WA0JS,=WA1FVJ,=WA2BGL,=WA2BIW, + =WA6GFS,=WA7B,=WA7PXH,=WA7USX,=WA7YXF,=WB0CMZ,=WB1GZL,=WB1ILS,=WB6COP,=WB7TYK,=WB9JZL,=WD6CET, + =WH6CYY,=WH6DPL,=WH6DX,=WH7AK,=WJ8M,=WP4IYI,=WT5T,=WX1NCC; Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: KP1,NP1,WP1; US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: @@ -1724,21 +1733,21 @@ US Virgin Islands: 08: 11: NA: 17.73: 64.80: 4.0: KP2: =WA4HLB,=WB2KQW,=WB4WFU,=WD8AHQ,=WI7C; Puerto Rico: 08: 11: NA: 18.18: 66.55: 4.0: KP4: KP3,KP4,NP3,NP4,WP3,WP4,=AA0WX,=AA2ZN,=AB2DR,=AF4OU,=AF5IZ,=AG4CD,=AI4EZ,=K1NDN,=K4C/LH,=K4LCR, - =K4PFH,=K5YJR,=K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA3ZGQ,=KA7URH,=KA9UTY,=KB0AQB,=KB0TEP, - =KB1IJU,=KB1KDP,=KB1RUQ,=KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX,=KB2NMT, - =KB2NYN,=KB2OIF,=KB2OMN,=KB2OPM,=KB2QQK,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK,=KB3BTN, - =KB3LUV,=KB3SBO,=KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB,=KC1IHO, - =KC1JLY,=KC1KZI,=KC2BZZ,=KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP,=KC2VCR, - =KC3GEO,=KC5DKT,=KC8BFN,=KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KD9MRY,=KE0AYJ, - =KE0GFK,=KE0SH,=KE1MA,=KE3WW,=KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO,=KF4ZDB, - =KF6OGJ,=KG4GYO,=KG4IRC,=KG4IVO,=KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB,=KJ4KZN, - =KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ,=KK4DCX,=KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR,=KM4ZJW, - =KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD,=KN4IDV,=KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY,=KN4MNT, - =KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ,=KN4REC,=KN4SKZ,=KN4TNC,=KN4UAN,=KP2H,=KP2Z,=KP3CW/SKP,=KP3RE/LGT, - =KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT,=KP4ES/LH,=KP4FD/IARU,=KP4FRD/LH,=KP4MD/P,=KP4VP/LH, - =N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD,=N1SZM,=N1VCW,=N1YAY,=N1ZJC,=N2KKN,=N2KUE,=N2PGO,=N3JAM, - =N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER,=N4UK,=N6NVD,=N6RHF,=NB0G,=NP3M/LH,=NP4VO/LH,=W1AW/PR, - =W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF,=WB7ADC,=WB7VVV,=WD4LOL,=WP4L/TP,=WR8Z; + =K4PFH,=K5YJR,=K6BOT,=K9JOS,=KA2GNG,=KA2MBR,=KA2YGB,=KA3ZGQ,=KA7URH,=KA9UTY,=KB0AQB,=KB0JRR, + =KB0TEP,=KB1IJU,=KB1KDP,=KB1RUQ,=KB1TUA,=KB1UEK,=KB1UZV,=KB1ZKF,=KB2ALR,=KB2CIE,=KB2KWB,=KB2MMX, + =KB2NMT,=KB2NYN,=KB2OIF,=KB2OMN,=KB2OPM,=KB2QQK,=KB2RYP,=KB2TID,=KB2VHY,=KB2WKT,=KB2YKJ,=KB3BPK, + =KB3BTN,=KB3LUV,=KB3SBO,=KB8ZVP,=KB9OWX,=KB9RZD,=KB9YVE,=KB9YVF,=KC1CRV,=KC1CUF,=KC1DRV,=KC1IHB, + =KC1IHO,=KC1JLY,=KC1KZI,=KC2BZZ,=KC2CJL,=KC2CTM,=KC2EMM,=KC2ERU,=KC2JNE,=KC2LET,=KC2TE,=KC2UXP, + =KC2VCR,=KC3GEO,=KC5DKT,=KC8BFN,=KC8IRI,=KD2KPC,=KD2VQ,=KD4TVS,=KD5DVV,=KD5PKH,=KD9GIZ,=KD9MRY, + =KE0AYJ,=KE0GFK,=KE0SH,=KE1MA,=KE3WW,=KE4GGD,=KE4GYA,=KE4SKH,=KE4THL,=KE4WUE,=KE5LNG,=KF4KPO, + =KF4ZDB,=KF6OGJ,=KG4GYO,=KG4IRC,=KG4IVO,=KG4VCC,=KG5AFY,=KH2RU,=KH4AA,=KI4LRJ,=KI4WOA,=KI4WOB, + =KJ4KZN,=KJ4LOZ,=KJ4UPN,=KJ6OV,=KK4AOZ,=KK4DCX,=KK4EBE,=KK4PHB,=KM4VDZ,=KM4WGI,=KM4YBN,=KM4YSR, + =KM4ZJW,=KM6CTO,=KN4AWH,=KN4GNO,=KN4IBD,=KN4IDV,=KN4IGP,=KN4ILO,=KN4INP,=KN4JCC,=KN4KPX,=KN4KPY, + =KN4MNT,=KN4NLZ,=KN4ODN,=KN4QBT,=KN4QZZ,=KN4REC,=KN4SKZ,=KN4TNC,=KN4UAN,=KP2H,=KP2Z,=KP3CW/SKP, + =KP3RE/LGT,=KP3RE/LH,=KP3RE/LT,=KP4ES/L,=KP4ES/LGT,=KP4ES/LH,=KP4FD/IARU,=KP4FRD/LH,=KP4MD/P, + =KP4VP/LH,=N0XAR,=N1CN,=N1HRV,=N1JFL,=N1QVU,=N1SCD,=N1SZM,=N1VCW,=N1YAY,=N1ZJC,=N2KKN,=N2KUE, + =N2PGO,=N3JAM,=N3VIJ,=N3YUB,=N3ZII,=N4CIE,=N4JZD,=N4LER,=N4UK,=N6NVD,=N6RHF,=NB0G,=NP3M/LH, + =NP4VO/LH,=W1AW/PR,=W6WAW,=W9JS,=WA2RVA,=WB2HMY,=WB5YOF,=WB7ADC,=WB7VVV,=WD4LOL,=WP4L/TP,=WR8Z; Desecheo Island: 08: 11: NA: 18.08: 67.88: 4.0: KP5: KP5,NP5,WP5; Norway: 14: 18: EU: 61.00: -9.00: -1.0: LA: @@ -1837,13 +1846,13 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LU1XZ/H,=LU2DVI/H,=LU2HAE/H,=LU2HC/H,=LU2HCG/H,=LU2HEA/H,=LU2HEQ/H,=LU2HJ/H,=LU2HNV/H,=LU2MAA/H, =LU3AJL/H,=LU3FCR/H,=LU3FN/H,=LU3HAT/H,=LU3HAZ/H,=LU3HE/H,=LU3HKA/H,=LU3HL/H,=LU3HPW/H,=LU3HU/H, =LU3HZK/H,=LU4AA/H,=LU4DPL/H,=LU4ETN/H,=LU4FM/H,=LU4HAP/H,=LU4HK/H,=LU4HOQ/H,=LU4HSA/H, - =LU4HSA/LGH,=LU4HTD/H,=LU4MA/H,=LU5DGG/H,=LU5DX/H,=LU5DZ/H,=LU5HA/H,=LU5HAZ/H,=LU5HCB/H,=LU5HCW/H, - =LU5HFW/H,=LU5HGR/H,=LU5HIO/H,=LU5HR/H,=LU5HTA/H,=LU5WTE/H,=LU5YUS/H,=LU6FE/H,=LU6HAS/H,=LU6HBB/H, - =LU6HCA/H,=LU6HGH/H,=LU6HQH/H,=LU6HTR/H,=LU6XQ/H,=LU7ADC/H,=LU7DZ/H,=LU7FBG/H,=LU7FTF/H,=LU7HA/H, - =LU7HBC/H,=LU7HBL/H,=LU7HBV/H,=LU7HCS/H,=LU7HEO/H,=LU7HOM/H,=LU7HOS/H,=LU7HSG/H,=LU7HW/H, - =LU7HWB/H,=LU7HZ/H,=LU8FF/H,=LU8HAR/H,=LU8HBX/H,=LU8HJ/H,=LU8HOR/H,=LU9BSA/H,=LU9DPD/H,=LU9ERA/H, - =LU9HCF/H,=LU9HJV/H,=LU9HVR/H,=LW1HBD/H,=LW1HCM/H,=LW1HDI/H,=LW2EIY/H,=LW3HBS/H,=LW3HOH/H, - =LW4HCL/H,=LW4HTA/H,=LW4HTD/H,=LW6ENV/H,=LW6HAM/H,=LW7EIY/H,=LW7HA/H,=LW9HCF/H, + =LU4HSA/LGH,=LU4HTD/H,=LU4MA/H,=LU5DGG/H,=LU5DX/H,=LU5DZ/H,=LU5FYX/H,=LU5HA/H,=LU5HAZ/H,=LU5HCB/H, + =LU5HCW/H,=LU5HFW/H,=LU5HGR/H,=LU5HIO/H,=LU5HR/H,=LU5HTA/H,=LU5WTE/H,=LU5YUS/H,=LU6FE/H,=LU6HAS/H, + =LU6HBB/H,=LU6HCA/H,=LU6HGH/H,=LU6HQH/H,=LU6HTR/H,=LU6XQ/H,=LU7ADC/H,=LU7DZ/H,=LU7FBG/H,=LU7FTF/H, + =LU7HA/H,=LU7HBC/H,=LU7HBL/H,=LU7HBV/H,=LU7HCS/H,=LU7HEO/H,=LU7HOM/H,=LU7HOS/H,=LU7HSG/H,=LU7HW/H, + =LU7HWB/H,=LU7HZ/H,=LU8FF/H,=LU8HAR/H,=LU8HBX/H,=LU8HH/H,=LU8HJ/H,=LU8HOR/H,=LU9BSA/H,=LU9DPD/H, + =LU9ERA/H,=LU9HCF/H,=LU9HJV/H,=LU9HVR/H,=LW1HBD/H,=LW1HCM/H,=LW1HDI/H,=LW2EIY/H,=LW3HBS/H, + =LW3HOH/H,=LW4HCL/H,=LW4HTA/H,=LW4HTD/H,=LW6ENV/H,=LW6HAM/H,=LW7EIY/H,=LW7HA/H,=LW9HCF/H, =LU1IAL/I,=LU1IBM/I,=LU1IG/I,=LU1II/I,=LU2IP/I,=LU5FZ/I,=LU5IAL/I,=LU5IAO/I,=LU5ILA/I,=LU7IEI/I, =LU7IPI/I,=LU7ITR/I,=LU7IUE/I,=LU8IEZ/I,=LU9IBJ/I, =LU1JAO/J,=LU1JAR/J,=LU1JCE/J,=LU1JCO/J,=LU1JEF/J,=LU1JEO/J,=LU1JES/J,=LU1JHF/J,=LU1JHP/J, @@ -1888,16 +1897,17 @@ Argentina: 13: 14: SA: -34.80: 65.92: 3.0: LU: =LU1VFP/V[16],=LU1VOF/LH[16],=LU1VOF/V[16],=LU1VPH/V[16],=LU1VZ/V[16],=LU1WJV/V[16],=LU1WJY/V[16], =LU1YY/V[16],=LU2DB/V[16],=LU2VA/V[16],=LU2VCD/V[16],=LU2VCR/V[16],=LU2VCS/V[16],=LU2VDV/V[16], =LU2VJU/V[16],=LU2VV/V[16],=LU3AIY/V[16],=LU3DC/V[16],=LU3DR/V[16],=LU3ES/V[16],=LU3VAL/V[16], - =LU3VE/V[16],=LU3VHE/V[16],=LU3VMB/V[16],=LU3VSE/V[16],=LU3VSM/V[16],=LU3XQN/V[16],=LU4AA/V[16], - =LU4DBP/V[16],=LU4DBT/V[16],=LU4DDL/V[16],=LU4EHP/V[16],=LU4EJS/V[16],=LU4VAU/V[16],=LU4VBW/V[16], - =LU4VDG/V[16],=LU4VEN/V[16],=LU4VMB/V[16],=LU4VMG/V[16],=LU4VV/V[16],=LU5AJX/V[16],=LU5BDS/V[16], - =LU5DEM/V[16],=LU5DIT/V[16],=LU5DRV/V[16],=LU5FYX/V[16],=LU5VAI/V[16],=LU5VAS/V[16],=LU5VAT/V[16], - =LU5VFL/V[16],=LU5VIE/V[16],=LU5VLB/V[16],=LU5YBR/V[16],=LU5YF/V[16],=LU6DAI/V[16],=LU6DBL/V[16], - =LU6DKT/V[16],=LU6DO/V[16],=LU6VA/V[16],=LU6VAC/V[16],=LU6VDT/V[16],=LU6VEO/V[16],=LU6VFL/V[16], - =LU6VM/V[16],=LU6VR/V[16],=LU7DSY/V[16],=LU7DW/V[16],=LU7EGH/V[16],=LU7EHL/V[16],=LU7VBT/V[16], - =LU7VFG/V[16],=LU7YZ/V[16],=LU8BV/V[16],=LU8DWR/V[16],=LU8EB/M/V[16],=LU8EHQ/V[16],=LU8VCC/V[16], - =LU8VER/V[16],=LU9AEA/V[16],=LU9DR/V[16],=LU9ESD/V[16],=LU9EY/V[16],=LU9VEA/V[16],=LU9VRC/V[16], - =LUVES/V[16],=LW1ECO/V[16],=LW2DVM/V[16],=LW2DYA/V[16],=LW5EE/V[16],=LW6EQQ/V[16],=LW9EAG/V[16], + =LU3VE/V[16],=LU3VHE/V[16],=LU3VMB/V[16],=LU3VSE/V[16],=LU3VSM/V[16],=LU3XQN/V[16],=LU3YA/V[16], + =LU4AA/V[16],=LU4DBP/V[16],=LU4DBT/V[16],=LU4DDL/V[16],=LU4EHP/V[16],=LU4EJS/V[16],=LU4VAU/V[16], + =LU4VBW/V[16],=LU4VDG/V[16],=LU4VEN/V[16],=LU4VMB/V[16],=LU4VMG/V[16],=LU4VV/V[16],=LU5AJX/V[16], + =LU5BDS/V[16],=LU5DEM/V[16],=LU5DIT/V[16],=LU5DRV/V[16],=LU5FYX/V[16],=LU5VAI/V[16],=LU5VAS/V[16], + =LU5VAT/V[16],=LU5VFL/V[16],=LU5VIE/V[16],=LU5VLB/V[16],=LU5YBR/V[16],=LU5YF/V[16],=LU6DAI/V[16], + =LU6DBL/V[16],=LU6DKT/V[16],=LU6DO/V[16],=LU6VA/V[16],=LU6VAC/V[16],=LU6VDT/V[16],=LU6VEO/V[16], + =LU6VFL/V[16],=LU6VM/V[16],=LU6VR/V[16],=LU7DSY/V[16],=LU7DW/V[16],=LU7EGH/V[16],=LU7EHL/V[16], + =LU7VBT/V[16],=LU7VFG/V[16],=LU7YZ/V[16],=LU8BV/V[16],=LU8DWR/V[16],=LU8EB/M/V[16],=LU8EHQ/V[16], + =LU8VCC/V[16],=LU8VER/V[16],=LU9AEA/V[16],=LU9DR/V[16],=LU9ESD/V[16],=LU9EY/V[16],=LU9VEA/V[16], + =LU9VRC/V[16],=LUVES/V[16],=LW1ECO/V[16],=LW2DVM/V[16],=LW2DYA/V[16],=LW5EE/V[16],=LW6EQQ/V[16], + =LW9EAG/V[16], AY0W[16],AY1W[16],AY2W[16],AY3W[16],AY4W[16],AY5W[16],AY6W[16],AY7W[16],AY8W[16],AY9W[16], AZ0W[16],AZ1W[16],AZ2W[16],AZ3W[16],AZ4W[16],AZ5W[16],AZ6W[16],AZ7W[16],AZ8W[16],AZ9W[16], L20W[16],L21W[16],L22W[16],L23W[16],L24W[16],L25W[16],L26W[16],L27W[16],L28W[16],L29W[16], @@ -2062,7 +2072,7 @@ Denmark: 14: 18: EU: 56.00: -10.00: -1.0: OZ: =OZ2GBW/LH,=OZ2NYB/LGT,=OZ2NYB/LH,=OZ2ZB/LH,=OZ3EDR/LH,=OZ3EVA/LH,=OZ3FYN/LH,=OZ3TL/JOTA, =OZ4EL/LH,=OZ50RN/LH,=OZ5ESB/LH,=OZ7AEI/LH,=OZ7DAL/LH,=OZ7DAL/LS,=OZ7EA/YL,=OZ7HAM/LH,=OZ7LH/LH, =OZ7RJ/LGT,=OZ7RJ/LH,=OZ7SP/JOTA,=OZ7TOM/LH,=OZ8KV/LH,=OZ8SMA/LGT,=OZ8SMA/LH,=OZ9HBO/JOTA, - =OZ9HBO/LH,=OZ9WSR/J,=VERSION; + =OZ9HBO/LH,=OZ9WSR/J; Papua New Guinea: 28: 51: OC: -9.50: -147.12: -10.0: P2: P2; Aruba: 09: 11: SA: 12.53: 69.98: 4.0: P4: @@ -2262,8 +2272,8 @@ Benin: 35: 46: AF: 9.87: -2.25: -1.0: TY: Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ: TZ; European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: - R,U,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF,=R9AV/6, - =R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, + R,U,=R0AGD/6,=R0CAF/1,=R25EMW(17)[19],=R7AB/M,=R80PSP,=R80UPOL,=R8CT/4/P,=R8FF/3/M,=R90DOSAAF, + =R9AV/6,=R9FAZ/6/M,=R9FCH/6,=R9JI/1,=R9KC/6/M,=R9WR/1,=R9XAU/6,=RA0AM/6,=RA0BM/6,=RA0ZZ/3, =RA3CQ/9/M(17)[20],=RA80SP,=RA9JR/3,=RA9JX/3,=RA9P/4,=RA9RT/3,=RA9UUY/6,=RA9YA/6,=RC80SP,=RG0F/5, =RG50P(17),=RG50P/9(17)[30],=RJ80SP,=RK80X(17)[19],=RK8O/4,=RL9AA/6,=RM80SP,=RM8A/4/M,=RM94AE, =RN9M/4,=RN9OI/3,=RO80RO,=RP61XX(17)[19],=RP62X(17)[19],=RP63X(17)[19],=RP63XO(17)[19], @@ -2281,8 +2291,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: R1N[19],RA1N[19],RC1N[19],RD1N[19],RE1N[19],RF1N[19],RG1N[19],RJ1N[19],RK1N[19],RL1N[19],RM1N[19], RN1N[19],RO1N[19],RQ1N[19],RT1N[19],RU1N[19],RV1N[19],RW1N[19],RX1N[19],RY1N[19],RZ1N[19],U1N[19], UA1N[19],UB1N[19],UC1N[19],UD1N[19],UE1N[19],UF1N[19],UG1N[19],UH1N[19],UI1N[19],=R01DTV/1[19], - =R85KFF[19],=R90K[19],=RN1NA/ANT[19],=RO25KL[19],=RP72PT[19],=RP72RK[19],=RP73PT[19],=RP73RK[19], - =RP74PT[19],=RP74RK[19],=RV9JD/1/M[19],=RX3AMI/1/LH[19], + =R85KFF[19],=R90K[19],=RK75OP[19],=RN1NA/ANT[19],=RO25KL[19],=RP72PT[19],=RP72RK[19],=RP73PT[19], + =RP73RK[19],=RP74PT[19],=RP74RK[19],=RV9JD/1/M[19],=RX3AMI/1/LH[19], R1O[19],RA1O[19],RC1O[19],RD1O[19],RE1O[19],RF1O[19],RG1O[19],RJ1O[19],RK1O[19],RL1O[19],RM1O[19], RN1O[19],RO1O[19],RQ1O[19],RT1O[19],RU1O[19],RV1O[19],RW1O[19],RX1O[19],RY1O[19],RZ1O[19],U1O[19], UA1O[19],UB1O[19],UC1O[19],UD1O[19],UE1O[19],UF1O[19],UG1O[19],UH1O[19],UI1O[19],=R0000O[19], @@ -2304,30 +2314,30 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: UA1Z[19],UB1Z[19],UC1Z[19],UD1Z[19],UE1Z[19],UF1Z[19],UG1Z[19],UH1Z[19],UI1Z[19],=R25RRA[19], =RA9CFH/1[19],=RA9CFH/1/P[19],=RK21Z[19],=RK3DZJ/1/LH[19],=RM9WN/1[19],=RP72MU[19],=RP73MU[19], =RP73ZP[19],=RP74ZP[19],=RU1ZC/ANT[19],=RW1ZQ/LH[19],=RY83HN[19],=UB1ZBD/N[19], - =R01DTV/3,=R1712M,=R85PAR,=R870B,=R870C,=R870K,=R870M,=R870O,=R9FM/3,=RA2AT,=RA2FDX/3,=RA9CO/3, - =RA9USU/3,=RC85MP,=RL3AB/FF,=RT2F/3/M,=RT9K/3,=RW0LF/3,=RX9UL/3,=RX9WN/3,=RZ9UA/3,=UA0KCX/3, - =UA3AV/ANT,=UA8AA/3,=UA8AA/5,=UA9KHD/3,=UA9MDU/3,=UA9MRX/3,=UA9QCP/3,=UA9UAX/3,=UE24SU, - =R85QMR,=R85WDW,=R8B,=R8FF/3,=R90DNF,=R99FSB,=RA0BY/3,=RA80KEDR,=RA9KV/3,=RA9SB/3,=RA9XY/3, - =RK3DSW/ANT,=RK3DWA/3/N,=RN9MD/3,=RT80KEDR,=RU0LM/3,=RU2FA/3,=RU3HD/ANT,=RV0AO/3,=RV9LM/3/P, - =RW0IM/3,=RW3DU/N,=RW9UEW/3,=RX9SN/3,=RZ9SZ/3,=RZ9W/3,=UA0JAD/3,=UA0KCL/3,=UA0ZAZ/3,=UA9AJ/3/M, - =UA9DD/3,=UA9HSI/3,=UA9ONJ/3,=UA9XGD/3,=UA9XMC/3,=UE23DSA,=UE25FO,=UE95GA,=UE96WS, + =R01DTV/3,=R85PAR,=R870B,=R870C,=R870K,=R870M,=R870O,=R9FM/3,=RA2AT,=RA2FDX/3,=RA9CO/3,=RA9USU/3, + =RC85MP,=RL3AB/FF,=RT2F/3/M,=RT9K/3,=RW0LF/3,=RX9UL/3,=RX9WN/3,=RZ9UA/3,=UA0KCX/3,=UA3AV/ANT, + =UA8AA/3,=UA8AA/5,=UA9KHD/3,=UA9MDU/3,=UA9MRX/3,=UA9QCP/3,=UA9UAX/3,=UE24SU, + =R85AAL,=R85QMR,=R85WDW,=R8B,=R8FF/3,=R90DNF,=R99FSB,=RA0BY/3,=RA80KEDR,=RA9KV/3,=RA9SB/3, + =RA9XY/3,=RK3DSW/ANT,=RK3DWA/3/N,=RN9MD/3,=RT80KEDR,=RU0LM/3,=RU2FA/3,=RU3HD/ANT,=RV0AO/3, + =RV9LM/3/P,=RW0IM/3,=RW3DU/N,=RW9UEW/3,=RX9SN/3,=RZ9SZ/3,=RZ9W/3,=UA0JAD/3,=UA0KCL/3,=UA0ZAZ/3, + =UA9AJ/3/M,=UA9DD/3,=UA9HSI/3,=UA9ONJ/3,=UA9XGD/3,=UA9XMC/3,=UE23DSA,=UE25FO,=UE95GA,=UE96WS, =R80ORL,=UA0QGM/3,=UE80O,=UE80OL, =R0CAF/3,=R3GO/FF,=RM0L/3,=RN3GL/FF,=RN3GW/FF,=RT5G/P/FF,=RW0IW/3,=UA3GM/ANT,=UE90FL, =RA9KT/3,=RZ9SZ/3/M,=UA0FHC/3,=UF2F/3/M, - =R0IA/3,=R17SMW,=R863LC,=R863LK,=R863LX,=R875R,=R9XZ/3,=RG80KEDR,=RL80KEDR,=RN0CF/3,=RU9QRP/3, - =RZ90W/3,=UA9JFM/3,=UA9XZ/3,=UE80G,=UE80V,=UE80YG, + =R0IA/3,=R863LC,=R863LK,=R863LX,=R875R,=R9XZ/3,=RG80KEDR,=RL80KEDR,=RN0CF/3,=RU9QRP/3,=RZ90W/3, + =UA9JFM/3,=UA9XZ/3,=UE80G,=UE80V,=UE80YG, =RK3MXT/FF,=RV9AZ/3,=UA0AD/3, =R870T,=RT90PK,=RU0ZW/3,=RW0UM/3,=RW9JV/3, - =R17CWB,=RA0CCV/3,=RA0QA/3,=RC9YA/3/P,=RM8X/3,=RV9LC/3,=UA0QJE/3,=UA0QQO/3,=UA9CGL/3,=UA9JLY/3, - =UA9XLE/3,=UB0AJJ/3,=UB5O/M,=UC0LAF/3,=UE25AFG,=UE25R,=UE27AFG,=UE28AFG,=UE96SN, - =R17TCNY,=R80RTL,=R90IARU,=R9CZ/3,=RU80TO,=RZ9HK/3/P, + =RA0CCV/3,=RA0QA/3,=RC9YA/3/P,=RM8X/3,=RV9LC/3,=UA0QJE/3,=UA0QQO/3,=UA9CGL/3,=UA9JLY/3,=UA9XLE/3, + =UB0AJJ/3,=UC0LAF/3,=UE25AFG,=UE25R,=UE27AFG,=UE28AFG,=UE96SN, + =R80RTL,=R90IARU,=R9CZ/3,=RU80TO,=RZ9HK/3/P, =R920RZ,=R95DOD,=RA0QQ/3,=UA0KBA/3,=UE80S,=UE85NKN,=UE85WDW, =R3TT/FF,=R8FF/M,=R8TA/4/P,=R8TR/3,=R90NOR,=R9KW/3,=R9KW/4,=R9PA/4,=RA9AP/3,=RA9CKQ/4,=RA9KW/3, =RA9KW/3/M,=RA9ST/3/P,=RG9A/3/P,=RM9T/4/P,=RN0CT/4,=RT9S/3,=RT9S/3/P,=RT9S/4,=RU9LA/4,=RV9FQ/3, =RV9FQ/3/M,=RV9WB/4,=RV9WLE/3/P,=RV9WZ/3,=RW9KW/3,=RW9WA/3,=RX9SN/P,=UA0ADX/3,=UA0DM/4,=UA0S/4, =UA0SC/4,=UA9APA/3/P,=UA9CTT/4,=UA9PM/4,=UA9SSR/3,=UE200TARS,=UE25TF,=UE9FDA/3,=UE9FDA/3/M, =UE9WDA/3,=UI8W/3/P, - =R170VN,=R5VAJ/N,=R850G,=R850PN,=RT9T/3,=RU0BW/3,=RU9MU/3,=RV80KEDR,=RX9TL/3, + =R5VAJ/N,=R850G,=R850PN,=RT9T/3,=RU0BW/3,=RU9MU/3,=RV80KEDR,=RX9TL/3, =R110A/P,=R80PVB, =RA9XF/3,=RC80KEDR,=RD0L/3,=RK0BWW/3,=RN80KEDR,=RW9XC/3/M,=RX3XX/N,=UA0KBA/3/P,=UA9SIV/3, =UE0ZOO/3, @@ -2336,9 +2346,9 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: =R3ZK/FF,=RA3ZZ/ANT,=RA9AK/3,=RA9KD/3,=RU3ZK/FF,=RW0BG/3,=UA0QBC/3, =RA07DR,=RA9ODR/4/M,=RC4AF/FF,=RN4ACA/FF,=RU9CK/6/M,=UA4ASE/FF,=UA4ATL/FF,=UA8WAA/6,=UA9FGR/4, =UE00S,=UE00S/P,=UE09VG,=UE80RWW, - =R1747PS,=R4CDX/FF,=R8FF/4,=R8FR/4/M,=RA9KO/4,=RL96WS,=RL97WS,=RU80KEDR,=RU80KEDR/P,=RU9SO/4/M, - =RV4CC/FF,=RV9CX/4/M,=RW0UZ/4,=RW9AW/4/M,=RZ0SB/4,=UA0KAT/4,=UA8WAA/4,=UA9AGR/4/M,=UA9JPX/4, - =UA9OC/4,=UE23DZO,=UE95MS,=UE95WS,=UE98WS,=UE99PW, + =R4CDX/FF,=R8FF/4,=R8FR/4/M,=RA9KO/4,=RL96WS,=RL97WS,=RU80KEDR,=RU80KEDR/P,=RU9SO/4/M,=RV4CC/FF, + =RV9CX/4/M,=RW0UZ/4,=RW9AW/4/M,=RZ0SB/4,=UA0KAT/4,=UA8WAA/4,=UA9AGR/4/M,=UA9JPX/4,=UA9OC/4, + =UE23DZO,=UE95MS,=UE95WS,=UE98WS,=UE99PW, =R9CMA/4,=R9JBN/4, R4H[30],R4I[30],RA4H[30],RA4I[30],RC4H[30],RC4I[30],RD4H[30],RD4I[30],RE4H[30],RE4I[30],RF4H[30], RF4I[30],RG4H[30],RG4I[30],RJ4H[30],RJ4I[30],RK4H[30],RK4I[30],RL4H[30],RL4I[30],RM4H[30], @@ -2346,17 +2356,17 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: RU4I[30],RV4H[30],RV4I[30],RW4H[30],RW4I[30],RX4H[30],RX4I[30],RY4H[30],RY4I[30],RZ4H[30], RZ4I[30],U4H[30],U4I[30],UA4H[30],UA4I[30],UB4H[30],UB4I[30],UC4H[30],UC4I[30],UD4H[30],UD4I[30], UE4H[30],UE4I[30],UF4H[30],UF4I[30],UG4H[30],UG4I[30],UH4H[30],UH4I[30],UI4H[30],UI4I[30], - =R20SAM[30],=R280TLT[30],=R4HAT[29],=R4HC[29],=R4HCE[29],=R4HCZ[29],=R4HD[29],=R4HDC[29], - =R4HDR[29],=R4HL[29],=R4IC[29],=R4ID[29],=R4II[29],=R4IK[29],=R4IM[29],=R4IN[29],=R4IO[29], - =R4IT[29],=R9DA/4[30],=RA4HL[29],=RA9FAA/4/M[30],=RA9SC/4[30],=RA9SC/4/P[30],=RC18SA[30], - =RC20HZ[30],=RC4HT[29],=RC4I[29],=RC9YA/4/M[30],=RJ4I[29],=RK4HM[29],=RM4I[29],=RN4HFJ[29], - =RN4HIF[29],=RN9S/M[30],=RP72AG[30],=RP72I[30],=RP72MF[30],=RP72WO[30],=RP73DD[30],=RP73I[30], + =R20SAM[30],=R280TLT[30],=R3ARS/4[30],=R4HAT[29],=R4HC[29],=R4HCE[29],=R4HCZ[29],=R4HD[29], + =R4HDC[29],=R4HDR[29],=R4HL[29],=R4IC[29],=R4ID[29],=R4II[29],=R4IK[29],=R4IM[29],=R4IN[29], + =R4IO[29],=R4IT[29],=R9DA/4[30],=RA4HL[29],=RA9FAA/4/M[30],=RA9SC/4[30],=RA9SC/4/P[30], + =RC18SA[30],=RC20HZ[30],=RC4HT[29],=RC4I[29],=RC9YA/4/M[30],=RJ4I[29],=RK4HM[29],=RM4I[29], + =RN4HFJ[29],=RN4HIF[29],=RP72AG[30],=RP72I[30],=RP72MF[30],=RP72WO[30],=RP73DD[30],=RP73I[30], =RP73PM[30],=RP74DD[30],=RP74I[30],=RT9K/4[30],=RU4HD[29],=RU4HP[29],=RU4I[29],=RU9CK/4/M[30], - =RV9JD/4/M[30],=RW4HM[29],=RW4HTK[29],=RW4HW[29],=RW4HZ[29],=RW9SW/4[30],=RW9TP/4[30], - =RW9WJ/4[30],=RW9WJ/4/P[30],=RW9WJ/P[30],=RZ4HWF/LH[30],=RZ4HZW/FF[30],=RZ9WU/4/M[30], + =RU9SO/M[30],=RV9JD/4/M[30],=RW4HM[29],=RW4HTK[29],=RW4HW[29],=RW4HZ[29],=RW9SW/4[30], + =RW9TP/4[30],=RW9WJ/4[30],=RW9WJ/4/P[30],=RZ4HWF/LH[30],=RZ4HZW/FF[30],=RZ9WU/4/M[30], =UA0KAO/4[30],=UA0QJA/4[30],=UA4H[29],=UA4HBM[29],=UA4HGL[29],=UA4HIP[29],=UA4HIP/M[30], - =UA4HRZ[29],=UA4HY[29],=UA9JGX/4[30],=UA9LAO/4[30],=UA9SQG/4/P[30],=UA9SY/4[30],=UC4I[29], - =UI4I[29], + =UA4HRZ[29],=UA4HY[29],=UA9JGX/4[30],=UA9LAO/4[30],=UA9SQG/4/P[30],=UA9SY/4[30],=UB5O/M[30], + =UC4I[29],=UI4I[29], =R01DTV/4,=R9XC/4,=RA9XAF/4,=UA4HIP/4,=UA9JFE/4, =R8XF/4,=RA4NCC[30],=RA9FR/4/P,=RA9XSM/4,=RD9CX/4,=RD9CX/4/P,=RU0LM/4,=RW9XC/4/M,=UA4NE/M, =UA4NF[30],=UA4NF/M,=UA9APA/4/P,=UA9FIT/4,=UA9XI/4,=UE9FDA/4,=UE9FDA/4/M,=UE9GDA/4, @@ -2432,22 +2442,24 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: RQ8X(17)[20],RQ9X(17)[20],RT1I(17)[20],RT8X(17)[20],RT9X(17)[20],RU1I(17)[20],RU8X(17)[20], RU9X(17)[20],RV1I(17)[20],RV8X(17)[20],RV9X(17)[20],RW1I(17)[20],RW8X(17)[20],RW9X(17)[20], RX1I(17)[20],RX8X(17)[20],RX9X(17)[20],RY1I(17)[20],RY8X(17)[20],RY9X(17)[20],RZ1I(17)[20], - RZ8X(17)[20],RZ9X(17)[20],U8X(17)[20],U9X(17)[20],UA8X(17)[20],UA9X(17)[20],UB8X(17)[20], - UB9X(17)[20],UC8X(17)[20],UC9X(17)[20],UD8X(17)[20],UD9X(17)[20],UE8X(17)[20],UE9X(17)[20], - UF8X(17)[20],UF9X(17)[20],UG8X(17)[20],UG9X(17)[20],UH8X(17)[20],UH9X(17)[20],UI8X(17)[20], - UI9X(17)[20],=R100AP(17)[20],=R120RK(17)[20],=R16NOR(17)[20],=R18ISL(17)[20],=R2014I(17)[20], - =R20SZO(17)[20],=R35MWC(17)[20],=R3RRC/9(17)[20],=R5QA/1(17)[20],=R5QQ/1(17)[20], - =R6DGL/9/M(17)[20],=R70SRC(17)[20],=R7BA/1(17)[20],=R7BA/9(17)[20],=R7BA/9/M(17)[20], - =R8FF/P(17)[20],=R8MB/1(17)[20],=R8MB/1/P(17)[20],=R9/UR7IMG(17)[20],=R95KOMI(17)[20], - =R9KD/9(17)[20],=R9XAK/1/P(17)[20],=RA/DK5JI(17)[20],=RA/UR5MKH(17)[20],=RA22KO(17)[20], - =RA22XA(17)[20],=RA22XF(17)[20],=RA22XU(17)[20],=RA3AMG/9/M(17)[20],=RA3OM/9(17)[20], - =RA4NH/9(17)[20],=RA4NV/9(17)[20],=RA6ACI/9(17)[20],=RD4CBQ/9(17)[20],=RK1OWZ/9(17)[20], - =RK1OWZ/9/M(17)[20],=RK6K/9(17)[20],=RK90DR(17)[20],=RN22OG(17)[20],=RN22OV(17)[20], - =RN4ACZ/9(17)[20],=RO25KO(17)[20],=RP67KR(17)[20],=RP68KR(17)[20],=RP70KW(17)[20],=RP71KW(17)[20], - =RP72X(17)[20],=RP73X(17)[20],=RP74X(17)[20],=RT73LF(17)[20],=RV3UI/9(17)[20],=RW1QN/9(17)[20], - =RW1QN/9/M(17)[20],=RW1QN/9/P(17)[20],=RW4NJ/9/M(17)[20],=RY110RAEM(17)[20],=UA1OOX/9(17)[20], - =UA1QV/9(17)[20],=UA4WP/9/M(17)[20],=UA6LTO/9(17)[20],=UB1OAD/1/P(17)[20],=UB1OAD/9/P(17)[20], - =UB5O/1/M(17)[20],=UE16ST(17)[20],=UE1RDA/9(17)[20],=UE85DRK(17)[20],=UE90K(17)[20]; + RZ8X(17)[20],RZ9X(17)[20],U1I(17)[20],U8X(17)[20],U9X(17)[20],UA1I(17)[20],UA8X(17)[20], + UA9X(17)[20],UB1I(17)[20],UB8X(17)[20],UB9X(17)[20],UC1I(17)[20],UC8X(17)[20],UC9X(17)[20], + UD1I(17)[20],UD8X(17)[20],UD9X(17)[20],UE1I(17)[20],UE8X(17)[20],UE9X(17)[20],UF1I(17)[20], + UF8X(17)[20],UF9X(17)[20],UG1I(17)[20],UG8X(17)[20],UG9X(17)[20],UH1I(17)[20],UH8X(17)[20], + UH9X(17)[20],UI1I(17)[20],UI8X(17)[20],UI9X(17)[20],=R100AP(17)[20],=R120RK(17)[20], + =R16NOR(17)[20],=R18ISL(17)[20],=R2014I(17)[20],=R20SZO(17)[20],=R35MWC(17)[20],=R3RRC/9(17)[20], + =R5QA/1(17)[20],=R5QQ/1(17)[20],=R6DGL/9/M(17)[20],=R70SRC(17)[20],=R7BA/1(17)[20], + =R7BA/9(17)[20],=R7BA/9/M(17)[20],=R8FF/P(17)[20],=R8MB/1(17)[20],=R8MB/1/P(17)[20], + =R9/UR7IMG(17)[20],=R95KOMI(17)[20],=R9KD/9(17)[20],=R9XAK/1/P(17)[20],=RA/DK5JI(17)[20], + =RA/UR5MKH(17)[20],=RA22KO(17)[20],=RA22XA(17)[20],=RA22XF(17)[20],=RA22XU(17)[20], + =RA3AMG/9/M(17)[20],=RA3OM/9(17)[20],=RA3X/1(17)[20],=RA4NH/9(17)[20],=RA4NV/9(17)[20], + =RA6ACI/9(17)[20],=RD4CBQ/9(17)[20],=RK1OWZ/9(17)[20],=RK1OWZ/9/M(17)[20],=RK6K/9(17)[20], + =RK90DR(17)[20],=RN22OG(17)[20],=RN22OV(17)[20],=RN4ACZ/9(17)[20],=RO25KO(17)[20],=RP67KR(17)[20], + =RP68KR(17)[20],=RP70KW(17)[20],=RP71KW(17)[20],=RP72X(17)[20],=RP73X(17)[20],=RP74X(17)[20], + =RT73LF(17)[20],=RV3UI/9(17)[20],=RW1QN/9(17)[20],=RW1QN/9/M(17)[20],=RW1QN/9/P(17)[20], + =RW4NJ/9/M(17)[20],=RY110RAEM(17)[20],=UA1OOX/9(17)[20],=UA1QV/9(17)[20],=UA4WP/9/M(17)[20], + =UA6LTO/9(17)[20],=UB1OAD/1/P(17)[20],=UB1OAD/9/P(17)[20],=UB5O/1/M(17)[20],=UE16ST(17)[20], + =UE1RDA/9(17)[20],=UE85DRK(17)[20],=UE90K(17)[20]; Kaliningrad: 15: 29: EU: 54.72: -20.52: -3.0: UA2: R2F,R2K,RA2,RC2F,RC2K,RD2F,RD2K,RE2F,RE2K,RF2F,RF2K,RG2F,RG2K,RJ2F,RJ2K,RK2F,RK2K,RL2F,RL2K,RM2F, RM2K,RN2F,RN2K,RO2F,RO2K,RQ2F,RQ2K,RT2F,RT2K,RU2F,RU2K,RV2F,RV2K,RW2F,RW2K,RX2F,RX2K,RY2F,RY2K, @@ -2492,9 +2504,9 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RP71GR,=RP71LT,=RP71MO,=RP71SA,=RP72DT,=RP72FI,=RP72GB,=RP72GR,=RP72IM,=RP72KB,=RP72SA,=RP73DT, =RP73GB,=RP73GR,=RP73IM,=RP73SA,=RP74DT,=RP74GB,=RP74GR,=RP74IM,=RT4C/8,=RT4W/9,=RT73BR,=RT73EB, =RT73FL,=RT73HE,=RT73KB,=RT73SK,=RU22CR,=RU5D/8,=RU5D/9,=RV6LGY/9,=RV6LGY/9/M,=RV6LGY/9/P, - =RV6MD/9,=RW4NX/9,=RW9C[20],=RX0SD/9,=RX3Q/9,=RX9UL/9,=RY9C/P,=RZ37ZF,=RZ38ZF,=RZ39ZF,=UA0BA/8, - =UA3FQ/8,=UA3IHJ/8,=UA4WHX/9,=UA8WAA/8,=UA9MW/9,=UA9UAX/8,=UA9UAX/8/M,=UE16SR,=UE25F,=UE40CZF, - =UE4NFF/9,=UE56S,=UE64RWA,=UE70SL,=UE75DT, + =RV6MD/9,=RW4NX/9,=RW9C[20],=RX0SD/9,=RX3Q/9,=RX9UL/9,=RY9C/P,=RZ1CWC/8,=RZ37ZF,=RZ38ZF,=RZ39ZF, + =UA0BA/8,=UA3FQ/8,=UA3IHJ/8,=UA4WHX/9,=UA8WAA/8,=UA9MW/9,=UA9UAX/8,=UA9UAX/8/M,=UE16SR,=UE25F, + =UE40CZF,=UE4NFF/9,=UE56S,=UE64RWA,=UE70SL,=UE75DT, R8H(18)[31],R8I(18)[31],R9H(18)[31],R9I(18)[31],RA8H(18)[31],RA8I(18)[31],RA9H(18)[31], RA9I(18)[31],RC8H(18)[31],RC8I(18)[31],RC9H(18)[31],RC9I(18)[31],RD8H(18)[31],RD8I(18)[31], RD9H(18)[31],RD9I(18)[31],RE8H(18)[31],RE8I(18)[31],RE9H(18)[31],RE9I(18)[31],RF8H(18)[31], @@ -2518,21 +2530,21 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RQ9I(18)[31],=RU9AZ/9(18)[31],=RV3LO/9(18)[31],=RZ9HK/FF(18)[31],=RZ9HX/FF(18)[31], =UA9JFN/9/M(18)[31],=UA9MUY/9(18)[31],=UA9OAP/9/P(18)[31],=UA9UAX/9/M(18)[31],=UE14TS(18)[31], =UE9FDA/9(18)[31], - R17[20],R8J[20],R9J[20],RA8J[20],RA9J[20],RC8J[20],RC9J[20],RD8J[20],RD9J[20],RE8J[20],RE9J[20], - RF8J[20],RF9J[20],RG8J[20],RG9J[20],RJ8J[20],RJ9J[20],RK8J[20],RK9J[20],RL8J[20],RL9J[20], - RM8J[20],RM9J[20],RN8J[20],RN9J[20],RO8J[20],RO9J[20],RQ8J[20],RQ9J[20],RT8J[20],RT9J[20], - RU8J[20],RU9J[20],RV8J[20],RV9J[20],RW8J[20],RW9J[20],RX8J[20],RX9J[20],RY8J[20],RY9J[20], - RZ8J[20],RZ9J[20],U8J[20],U9J[20],UA8J[20],UA9J[20],UB8J[20],UB9J[20],UC8J[20],UC9J[20],UD8J[20], - UD9J[20],UE8J[20],UE9J[20],UF8J[20],UF9J[20],UG8J[20],UG9J[20],UH8J[20],UH9J[20],UI8J[20], - UI9J[20],=R11UND[20],=R120RJ[20],=R123JDR[20],=R15UGRA[20],=R16UGRA[20],=R18KSA[20], - =R25ARCK/8[20],=R2AEA/9[20],=R4YAC/9[20],=R8JAJ/M[20],=RA/UR8IF[20],=RA/UT2LA[20],=RA1QBH/9[20], - =RA3ARS/9[20],=RA3ARS/9/M[20],=RA3QQI/8[20],=RA4FCJ/9[20],=RA4HRM/9[20],=RA60PD[20],=RA9WN/9[20], - =RD4HM/9[20],=RJ9J[20],=RK4PA/9[20],=RK6ANP/9[20],=RK6YM/8[20],=RK6YM/9[20],=RP67GS[20], - =RP68GS[20],=RP68J[20],=RP68LK[20],=RP69GS[20],=RP69SF[20],=RP70GS[20],=RP70LF[20],=RP70SF[20], - =RP70SU[20],=RP70YF[20],=RP71GS[20],=RP71LF[20],=RP71SF[20],=RP72DS[20],=RP72GS[20],=RP72SF[20], - =RP72YF[20],=RP73GS[20],=RP73SF[20],=RP74GS[20],=RQ0C/8[20],=RU6YD/9[20],=RV6YM/9[20], - =RW4HOH/9[20],=RW4LX/9[20],=RW6AHV/9[20],=RW9WX/9[20],=RX3BP/9[20],=RX3BP/9/MM[20],=RZ5D/8[20], - =RZ9WF/8[20],=RZ9WF/9[20],=UA3ZAF/9[20],=UA6WIO/9[20],=UA9JFN/M[20], + R8J[20],R9J[20],RA8J[20],RA9J[20],RC8J[20],RC9J[20],RD8J[20],RD9J[20],RE8J[20],RE9J[20],RF8J[20], + RF9J[20],RG8J[20],RG9J[20],RJ8J[20],RJ9J[20],RK8J[20],RK9J[20],RL8J[20],RL9J[20],RM8J[20], + RM9J[20],RN8J[20],RN9J[20],RO8J[20],RO9J[20],RQ8J[20],RQ9J[20],RT8J[20],RT9J[20],RU8J[20], + RU9J[20],RV8J[20],RV9J[20],RW8J[20],RW9J[20],RX8J[20],RX9J[20],RY8J[20],RY9J[20],RZ8J[20], + RZ9J[20],U8J[20],U9J[20],UA8J[20],UA9J[20],UB8J[20],UB9J[20],UC8J[20],UC9J[20],UD8J[20],UD9J[20], + UE8J[20],UE9J[20],UF8J[20],UF9J[20],UG8J[20],UG9J[20],UH8J[20],UH9J[20],UI8J[20],UI9J[20], + =R11UND[20],=R120RJ[20],=R123JDR[20],=R15UGRA[20],=R16UGRA[20],=R18KSA[20],=R25ARCK/8[20], + =R2AEA/9[20],=R4YAC/9[20],=R8JAJ/M[20],=RA/UR8IF[20],=RA/UT2LA[20],=RA1QBH/9[20],=RA3ARS/9[20], + =RA3ARS/9/M[20],=RA3QQI/8[20],=RA4FCJ/9[20],=RA4HRM/9[20],=RA60PD[20],=RA9WN/9[20],=RD4HM/9[20], + =RJ9J[20],=RK4PA/9[20],=RK6ANP/9[20],=RK6YM/8[20],=RK6YM/9[20],=RP67GS[20],=RP68GS[20],=RP68J[20], + =RP68LK[20],=RP69GS[20],=RP69SF[20],=RP70GS[20],=RP70LF[20],=RP70SF[20],=RP70SU[20],=RP70YF[20], + =RP71GS[20],=RP71LF[20],=RP71SF[20],=RP72DS[20],=RP72GS[20],=RP72SF[20],=RP72YF[20],=RP73GS[20], + =RP73SF[20],=RP74GS[20],=RQ0C/8[20],=RU6YD/9[20],=RV6YM/9[20],=RW4HOH/9[20],=RW4LX/9[20], + =RW6AHV/9[20],=RW9WX/9[20],=RX3BP/9[20],=RX3BP/9/MM[20],=RZ5D/8[20],=RZ9WF/8[20],=RZ9WF/9[20], + =UA3ZAF/9[20],=UA6WIO/9[20],=UA9JFN/M[20], R8K[20],R9K[20],RA8K[20],RA9K[20],RC8K[20],RC9K[20],RD8K[20],RD9K[20],RE8K[20],RE9K[20],RF8K[20], RF9K[20],RG8K[20],RG9K[20],RI9K[20],RJ8K[20],RJ9K[20],RK8K[20],RK9K[20],RL8K[20],RL9K[20], RM8K[20],RM9K[20],RN8K[20],RN9K[20],RO8K[20],RO9K[20],RQ8K[20],RQ9K[20],RT8K[20],RT9K[20], @@ -2609,7 +2621,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: =RA9CS/P(16),=RC20OB(16),=RC20TT(16),=RN3DHB/9(16),=RN3DHB/9/P(16),=RN3GW/8(16),=RN3GW/8/QRP(16), =RN3GW/9(16),=RN3GW/9/QRP(16),=RN3QOP/9(16),=RN9S(16),=RN9SM/P(16),=RN9WWW/9(16),=RO9S(16), =RP65TT(16),=RP68GR(16),=RP69NB(16),=RP71TK(16),=RP9SBO(16),=RP9SBR(16),=RP9SNK(16),=RT22TK(16), - =RT73OA(16),=RT8T(16),=RT9S(16),=RT9T(16),=RU22TU(16),=RU9SO/M(16),=RV1CC/4/M(16),=RV9WGF/4/M(16), + =RT73OA(16),=RT8T(16),=RT9S(16),=RT9T(16),=RU22TU(16),=RV1CC/4/M(16),=RV9WGF/4/M(16), =RV9WMZ/9/M(16),=RW4PJZ/9(16),=RW4PJZ/9/M(16),=RW4PP/9(16),=RW9WA/9(16),=RW9WA/9/M(16), =RY4W/9(16),=RZ4HZW/9/M(16),=UA0AGA/9/P(16),=UA0KBA/9(16),=UA3WB/9(16),=UA4LCQ/9(16), =UA9SIV/9(16),=UB5O/4(16),=UB9JBN/9/M(16),=UE1RFF/9(16),=UE25ST(16),=UE55OB(16),=UE60TDP(16), @@ -2633,11 +2645,10 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: UG8U(18)[31],UG8V(18)[31],UG9U(18)[31],UG9V(18)[31],UH8U(18)[31],UH8V(18)[31],UH9U(18)[31], UH9V(18)[31],UI8U(18)[31],UI8V(18)[31],UI9U(18)[31],UI9V(18)[31],=R10NRC(18)[31],=R1991A(18)[31], =R22ULM(18)[31],=R400N(18)[31],=R70B(18)[31],=R9/EW1TM(18)[31],=R9UAG/N(18)[31],=RA4CQ/9(18)[31], - =RC4W/9(18)[31],=RD0L/9(18)[31],=RK6CG/9(18)[31],=RP65UMF(18)[31],=RP67KM(18)[31],=RP68KM(18)[31], - =RP69KM(18)[31],=RP70KM(18)[31],=RP70NM(18)[31],=RP70UK(18)[31],=RP70ZF(18)[31],=RP71KM(18)[31], - =RP72KM(18)[31],=RP72NM(18)[31],=RP73KM(18)[31],=RP73NZ(18)[31],=RP73ZF(18)[31],=RP74KM(18)[31], - =RT22UA(18)[31],=RT77VV(18)[31],=RW4CG/9(18)[31],=RZ5D/9(18)[31],=UA9JFE/9/P(18)[31], - =UA9UAX/M(18)[31],=UE3ATV/9(18)[31], + =RC4W/9(18)[31],=RK6CG/9(18)[31],=RP65UMF(18)[31],=RP67KM(18)[31],=RP68KM(18)[31],=RP69KM(18)[31], + =RP70KM(18)[31],=RP70NM(18)[31],=RP70UK(18)[31],=RP70ZF(18)[31],=RP71KM(18)[31],=RP72KM(18)[31], + =RP72NM(18)[31],=RP73KM(18)[31],=RP73NZ(18)[31],=RP73ZF(18)[31],=RP74KM(18)[31],=RT22UA(18)[31], + =RT77VV(18)[31],=RW4CG/9(18)[31],=UA9JFE/9/P(18)[31],=UA9UAX/M(18)[31],=UE3ATV/9(18)[31], R8W(16),R9W(16),RA8W(16),RA9W(16),RC8W(16),RC9W(16),RD8W(16),RD9W(16),RE8W(16),RE9W(16),RF8W(16), RF9W(16),RG8W(16),RG9W(16),RJ8W(16),RJ9W(16),RK8W(16),RK9W(16),RL8W(16),RL9W(16),RM8W(16), RM9W(16),RN8W(16),RN9W(16),RO8W(16),RO9W(16),RQ8W(16),RQ9W(16),RT8W(16),RT9W(16),RU8W(16), @@ -2645,23 +2656,24 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: RZ9W(16),U8W(16),U9W(16),UA8W(16),UA9W(16),UB8W(16),UB9W(16),UC8W(16),UC9W(16),UD8W(16),UD9W(16), UE8W(16),UE9W(16),UF8W(16),UF9W(16),UG8W(16),UG9W(16),UH8W(16),UH9W(16),UI8W(16),UI9W(16), =R100W(16),=R10RTRS/9(16),=R18KDR/4(16),=R2013CG(16),=R2015AS(16),=R2015DS(16),=R2015KM(16), - =R2017F/P(16),=R20BIS(16),=R20UFA(16),=R25ARCK/4(16),=R25MSB(16),=R25WPW(16),=R27UFA(16), - =R3XX/9(16),=R44WFF(16),=R7378TM(16),=R8JAJ/4(16),=R8JAJ/9(16),=R90WGM(16),=R90WJV(16), - =R90WOB(16),=R90WXK(16),=R9LY/4(16),=RA0R/4(16),=RA1ZPC/9(16),=RA3AUU/9(16),=RA4POX/9(16), - =RA9KDX/8/M(16),=RF9W(16),=RG5A/8(16),=RK3PWJ/9(16),=RK6YYA/9/M(16),=RK9KWI/9(16),=RK9KWI/9/P(16), - =RL3DX/9(16),=RM90WF(16),=RM9RZ/9/P(16),=RN9WWW/9/M(16),=RN9WWW/P(16),=RO17CW(16),=RP67GI(16), - =RP67MG(16),=RP67NG(16),=RP67RK(16),=RP67SW(16),=RP67UF(16),=RP68GM(16),=RP68NK(16),=RP68UF(16), - =RP69GI(16),=RP69PW(16),=RP69UF(16),=RP70GI(16),=RP70GM(16),=RP70LS(16),=RP70NK(16),=RP70UF(16), - =RP70ZO(16),=RP71GI(16),=RP71GM(16),=RP71UF(16),=RP72AR(16),=RP72GI(16),=RP72GM(16),=RP72UF(16), - =RP72WU(16),=RP73AR(16),=RP73GI(16),=RP73UF(16),=RP73WU(16),=RP74GI(16),=RP74UF(16),=RT22WF(16), - =RT2F/4(16),=RT2F/4/M(16),=RT2F/9/M(16),=RT73EA(16),=RT73EL(16),=RT8A/4(16),=RT9W(16),=RT9W/P(16), - =RU110RAEM(16),=RU20WC(16),=RU22WZ(16),=RU27WB(16),=RU27WF(16),=RU27WN(16),=RU27WO(16), - =RU3HD/9/P(16),=RU90WZ(16),=RU9KC/4/M(16),=RU9SO/4(16),=RU9SO/4/P(16),=RV22WB(16),=RV2FZ/9(16), - =RV90WB(16),=RV9CHB/4(16),=RW3SN/9(16),=RW3XX/9(16),=RW4WA/9/P(16),=RW90WC(16),=RW9FWR/9/M(16), - =RW9JZ/4(16),=RW9JZ/9(16),=RX22WN(16),=RZ16WF(16),=RZ90W(16),=RZ90WU(16),=UA0AZA/9(16), - =UA1AAE/9(16),=UA1ZPC/9(16),=UA4LU/9/P(16),=UA4PIE/9(16),=UA4PIE/9/M(16),=UA4PIE/9/P(16), - =UA4PJM/9(16),=UA4PJM/9/M(16),=UA4PJM/9/P(16),=UA4PXR/9/M(16),=UA9KAA/4(16),=UA9KAA/9(16), - =UB5O/4/M(16),=UE10RFF/4(16),=UE90W(16), + =R2017F/P(16),=R2019CG(16),=R20BIS(16),=R20UFA(16),=R25ARCK/4(16),=R25MSB(16),=R25WPW(16), + =R27UFA(16),=R3XX/9(16),=R44WFF(16),=R53ICGA(16),=R53ICGB(16),=R53ICGC(16),=R53ICGF(16), + =R53ICGJ(16),=R53ICGS(16),=R53ICGV(16),=R53ICGW(16),=R7378TM(16),=R8JAJ/4(16),=R8JAJ/9(16), + =R90WGM(16),=R90WJV(16),=R90WOB(16),=R90WXK(16),=R9LY/4(16),=RA0R/4(16),=RA1ZPC/9(16), + =RA3AUU/9(16),=RA4POX/9(16),=RA9KDX/8/M(16),=RF9W(16),=RG5A/8(16),=RK3PWJ/9(16),=RK6YYA/9/M(16), + =RK9KWI/9(16),=RK9KWI/9/P(16),=RL3DX/9(16),=RM90WF(16),=RM9RZ/9/P(16),=RN9S/M(16),=RN9WWW/9/M(16), + =RN9WWW/P(16),=RO17CW(16),=RP67GI(16),=RP67MG(16),=RP67NG(16),=RP67RK(16),=RP67SW(16),=RP67UF(16), + =RP68GM(16),=RP68NK(16),=RP68UF(16),=RP69GI(16),=RP69PW(16),=RP69UF(16),=RP70GI(16),=RP70GM(16), + =RP70LS(16),=RP70NK(16),=RP70UF(16),=RP70ZO(16),=RP71GI(16),=RP71GM(16),=RP71UF(16),=RP72AR(16), + =RP72GI(16),=RP72GM(16),=RP72UF(16),=RP72WU(16),=RP73AR(16),=RP73GI(16),=RP73UF(16),=RP73WU(16), + =RP74GI(16),=RP74UF(16),=RT22WF(16),=RT2F/4(16),=RT2F/4/M(16),=RT2F/9/M(16),=RT73EA(16), + =RT73EL(16),=RT8A/4(16),=RT9W(16),=RT9W/P(16),=RU110RAEM(16),=RU20WC(16),=RU22WZ(16),=RU27WB(16), + =RU27WF(16),=RU27WN(16),=RU27WO(16),=RU3HD/9/P(16),=RU90WZ(16),=RU9KC/4/M(16),=RU9SO/4(16), + =RU9SO/4/P(16),=RV22WB(16),=RV2FZ/9(16),=RV90WB(16),=RV9CHB/4(16),=RW3SN/9(16),=RW3XX/9(16), + =RW4WA/9/P(16),=RW90WC(16),=RW9FWR/9/M(16),=RW9JZ/4(16),=RW9JZ/9(16),=RW9WJ/P(16),=RX22WN(16), + =RZ16WF(16),=RZ90W(16),=RZ90WU(16),=UA0AZA/9(16),=UA1AAE/9(16),=UA1ZPC/9(16),=UA4LU/9/P(16), + =UA4PIE/9(16),=UA4PIE/9/M(16),=UA4PIE/9/P(16),=UA4PJM/9(16),=UA4PJM/9/M(16),=UA4PJM/9/P(16), + =UA4PXR/9/M(16),=UA9KAA/4(16),=UA9KAA/9(16),=UB5O/4/M(16),=UE10RFF/4(16),=UE90W(16), R8Y(18)[31],R9Y(18)[31],RA8Y(18)[31],RA9Y(18)[31],RC8Y(18)[31],RC9Y(18)[31],RD8Y(18)[31], RD9Y(18)[31],RE8Y(18)[31],RE9Y(18)[31],RF8Y(18)[31],RF9Y(18)[31],RG8Y(18)[31],RG9Y(18)[31], RJ8Y(18)[31],RJ9Y(18)[31],RK8Y(18)[31],RK9Y(18)[31],RL8Y(18)[31],RL9Y(18)[31],RM8Y(18)[31], @@ -2672,11 +2684,11 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: UC9Y(18)[31],UD8Y(18)[31],UD9Y(18)[31],UE8Y(18)[31],UE9Y(18)[31],UF8Y(18)[31],UF9Y(18)[31], UG8Y(18)[31],UG9Y(18)[31],UH8Y(18)[31],UH9Y(18)[31],UI8Y(18)[31],UI9Y(18)[31],=R2015RR(18)[31], =R2015SV(18)[31],=R6XBA/9(18)[31],=R9/UN7JHC(18)[31],=R9/UN7JMO(18)[31],=RA/IK5MIC(18)[31], - =RA/IK5MIC/M(18)[31],=RA0CCJ/9(18)[31],=RA50VT(18)[31],=RK1B/9(18)[31],=RP68BP(18)[31], - =RP68TZ(18)[31],=RP70AF(18)[31],=RP70BP(18)[31],=RP70GA(18)[31],=RP71BP(18)[31],=RP72BP(18)[31], - =RP73BP(18)[31],=RP9Y(18)[31],=RP9YAF(18)[31],=RP9YTZ(18)[31],=RT73GM(18)[31],=RW22WG(18)[31], - =RX6AY/9(18)[31],=UA0LLW/9(18)[31],=UA0ZDY/9(18)[31],=UA9UAX/9/P(18)[31],=UE0ZOO/9(18)[31], - =UE44R/9(18)[31],=UE80AL(18)[31], + =RA/IK5MIC/M(18)[31],=RA0CCJ/9(18)[31],=RA50VT(18)[31],=RD0L/9(18)[31],=RK1B/9(18)[31], + =RP68BP(18)[31],=RP68TZ(18)[31],=RP70AF(18)[31],=RP70BP(18)[31],=RP70GA(18)[31],=RP71BP(18)[31], + =RP72BP(18)[31],=RP73BP(18)[31],=RP9Y(18)[31],=RP9YAF(18)[31],=RP9YTZ(18)[31],=RT73GM(18)[31], + =RW22WG(18)[31],=RX6AY/9(18)[31],=UA0LLW/9(18)[31],=UA0ZDY/9(18)[31],=UA9UAX/9/P(18)[31], + =UE0ZOO/9(18)[31],=UE44R/9(18)[31],=UE80AL(18)[31], R8Z(18)[31],R9Z(18)[31],RA8Z(18)[31],RA9Z(18)[31],RC8Z(18)[31],RC9Z(18)[31],RD8Z(18)[31], RD9Z(18)[31],RE8Z(18)[31],RE9Z(18)[31],RF8Z(18)[31],RF9Z(18)[31],RG8Z(18)[31],RG9Z(18)[31], RJ8Z(18)[31],RJ9Z(18)[31],RK8Z(18)[31],RK9Z(18)[31],RL8Z(18)[31],RL9Z(18)[31],RM8Z(18)[31], @@ -2685,8 +2697,9 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: RW9Z(18)[31],RX8Z(18)[31],RX9Z(18)[31],RY8Z(18)[31],RY9Z(18)[31],RZ8Z(18)[31],RZ9Z(18)[31], U8Z(18)[31],U9Z(18)[31],UA8Z(18)[31],UA9Z(18)[31],UB8Z(18)[31],UB9Z(18)[31],UC8Z(18)[31], UC9Z(18)[31],UD8Z(18)[31],UD9Z(18)[31],UE8Z(18)[31],UE9Z(18)[31],UF8Z(18)[31],UF9Z(18)[31], - UG8Z(18)[31],UG9Z(18)[31],UH8Z(18)[31],UH9Z(18)[31],UI8Z(18)[31],UI9Z(18)[31], - =RA/IK5MIC/P(18)[31],=RC9YA/9/M(18)[31],=RW9MD/9/P(18)[31],=UA0KBG/9/P(18)[31],=UA9MAC/9(18)[31], + UG8Z(18)[31],UG9Z(18)[31],UH8Z(18)[31],UH9Z(18)[31],UI8Z(18)[31],UI9Z(18)[31],=RA/DJ8QP(18)[31], + =RA/IK5MIC/P(18)[31],=RA3DS/P(18)[31],=RC9YA/9/M(18)[31],=RW9MD/9/P(18)[31],=UA0KBG/9/P(18)[31], + =UA3A/P(18)[31],=UA9MAC/9(18)[31], R0A(18)[32],R0B(18)[32],R0H(18)[32],RA0A(18)[32],RA0B(18)[32],RA0H(18)[32],RC0A(18)[32], RC0B(18)[32],RC0H(18)[32],RD0A(18)[32],RD0B(18)[32],RD0H(18)[32],RE0A(18)[32],RE0B(18)[32], RE0H(18)[32],RF0A(18)[32],RF0B(18)[32],RF0H(18)[32],RG0A(18)[32],RG0B(18)[32],RG0H(18)[32], @@ -2842,8 +2855,9 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9: U0W(18)[31],UA0W(18)[31],UB0W(18)[31],UC0W(18)[31],UD0W(18)[31],UE0W(18)[31],UF0W(18)[31], UG0W(18)[31],UH0W(18)[31],UI0W(18)[31],=R01DTV/9(18)[31],=R10RTRS/0(18)[31],=RA0AM/0(18)[31], =RP0W(18)[31],=RP0W/P(18)[31],=RP0WWS(18)[31],=RP70SL(18)[31],=RP72SL(18)[31],=RV0AE/0/FF(18)[31], - =RZ0AM/0(18)[31],=RZ22WW(18)[31],=UA0FCB/P(18)[31],=UA9UAX/0/M(18)[31],=UB5O/9(18)[31], - =UE0ARD/0(18)[31],=UE10RFF/9(18)[31],=UE1RFF/0/P(18)[31],=UE9FDA/0(18)[31],=UE9FDA/0/M(18)[31], + =RZ0AM/0(18)[31],=RZ22WW(18)[31],=RZ5D/9(18)[31],=UA0FCB/P(18)[31],=UA9UAX/0/M(18)[31], + =UB5O/9(18)[31],=UE0ARD/0(18)[31],=UE10RFF/9(18)[31],=UE1RFF/0/P(18)[31],=UE9FDA/0(18)[31], + =UE9FDA/0/M(18)[31], =R205NEW(19)[25],=R23RRC(19)[25],=UA6HMC/0(19)[25], R0Y(23)[32],RA0Y(23)[32],RC0Y(23)[32],RD0Y(23)[32],RE0Y(23)[32],RF0Y(23)[32],RG0Y(23)[32], RJ0Y(23)[32],RK0Y(23)[32],RL0Y(23)[32],RM0Y(23)[32],RN0Y(23)[32],RO0Y(23)[32],RQ0Y(23)[32], @@ -2937,7 +2951,7 @@ Marshall Islands: 31: 65: OC: 9.08: -167.33: -12.0: V7: Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8: V8; Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: - CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190523, + CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VE2EM/M,=VER20190630, =CF7AAW/1,=CK7IG/1,=VA3QSL/1,=VA3WR/1,=VE1REC/LH,=VE1REC/M/LH,=VE3RSA/1,=VE7IG/1, CF2[4],CG2[4],CJ2[4],CK2[4],VA2[4],VB2[4],VC2[4],VE2[4],VG2[4],VX2[4],XL2[4],XM2[4],=4Y1CAO[4], =CY2ZT/2[4],=VA3MPM/2[4],=VA7AQ/P[4],=VE2/G3ZAY/P[4],=VE2/M0BLF/P[4],=VE2FK[9],=VE2HAY/P[4], @@ -2971,23 +2985,23 @@ Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: CI2,CZ2,VF2,VY2,XK2,XO2, =CF2RC(2)[4],=CF2VVV(2)[4],=CJ2BY(2)[4],=CJ2KCE(2)[4],=K3FMQ/VE2(2)[4],=K5YG/VE2(2)[4], =KD3RF/VE2(2)[4],=KD3TB/VE2(2)[4],=N5ZO/VE2(2)[4],=VA1CN/2(2)[4],=VA2BK(2)[4],=VA2BY(2)[4], - =VA2KCE(2)[4],=VA2MCJ/VE2(2)[4],=VA2RAG(2)[4],=VA2RC(2)[4],=VA2VFT(2)[4],=VA2VVV(2)[4], - =VA3ELE/2(2)[4],=VA3NA/2(2)[4],=VA7XW/VE2(2)[4],=VB2C(2)[4],=VB2R(2)[4],=VB2T(2)[4],=VB2V(2)[4], - =VB2W(2)[4],=VC2C(2)[4],=VC2EME(2)[4],=VC2Q(2)[4],=VC2R(2)[4],=VC2X(2)[4],=VC3W/2(2)[4], - =VE2/JA8BMK(2)[4],=VE2/K5YG(2)[4],=VE2/KD3RF(2)[4],=VE2/KD3RF/M(2)[4],=VE2/N1NK(2)[4], - =VE2/UT3UA(2)[4],=VE2/W2NTJ(2)[4],=VE2/W5GED(2)[4],=VE2A(2)[4],=VE2ACP/P(2)[4],=VE2AE(2)[4], - =VE2CSI(2)[4],=VE2CVI(2)[4],=VE2DXY(2)[4],=VE2EKA(2)[4],=VE2EW(2)[4],=VE2FDJ/2(2)[4], - =VE2GHZ/2(2)[4],=VE2HRI(2)[4],=VE2IDX(2)[4],=VE2III(2)[4],=VE2IM(2)[4],=VE2KK(2)[4],=VE2NN(2)[4], - =VE2OTT(2)[4],=VE2PR(2)[4],=VE2PRG(2)[4],=VE2QIP/2(2)[4],=VE2TWO(2)[4],=VE2WDX(2)[4], - =VE2XAA/2(2)[4],=VE2XB/2(2)[4],=VE2Z(2)[4],=VE3AXC/2(2)[4],=VE3CWU/2(2)[4],=VE3EY/2(2)[4], - =VE3FDX/2(2)[4],=VE3JM/2(2)[4],=VE3NE/2(2)[4],=VE3NWA/2(2)[4],=VE3RHJ/2(2)[4],=VE3ZF/2(2)[4], - =VE7ACN/VE2(2)[4],=VE7MID/VE2(2)[4],=VE8DX/2(2)[4],=W0SD/VE2(2)[4],=W2NTJ/VE2(2)[4], - =W4TMO/VE2(2)[4],=W5GED/VE2(2)[4],=WB8YTZ/VE2(2)[4],=XM3NE/2(2)[4], + =VA2KCE(2)[4],=VA2MCJ/VE2(2)[4],=VA2RAG(2)[4],=VA2VFT(2)[4],=VA2VVV(2)[4],=VA3ELE/2(2)[4], + =VA3NA/2(2)[4],=VA7XW/VE2(2)[4],=VB2C(2)[4],=VB2R(2)[4],=VB2T(2)[4],=VB2V(2)[4],=VB2W(2)[4], + =VC2C(2)[4],=VC2EME(2)[4],=VC2Q(2)[4],=VC2R(2)[4],=VC2X(2)[4],=VC3W/2(2)[4],=VE2/JA8BMK(2)[4], + =VE2/K5YG(2)[4],=VE2/KD3RF(2)[4],=VE2/KD3RF/M(2)[4],=VE2/N1NK(2)[4],=VE2/UT3UA(2)[4], + =VE2/W2NTJ(2)[4],=VE2/W5GED(2)[4],=VE2A(2)[4],=VE2ACP/P(2)[4],=VE2AE(2)[4],=VE2CSI(2)[4], + =VE2CVI(2)[4],=VE2DXY(2)[4],=VE2EKA(2)[4],=VE2FDJ/2(2)[4],=VE2GHZ/2(2)[4],=VE2HRI(2)[4], + =VE2IDX(2)[4],=VE2III(2)[4],=VE2IM(2)[4],=VE2KK(2)[4],=VE2NN(2)[4],=VE2OTT(2)[4],=VE2PRG(2)[4], + =VE2QIP/2(2)[4],=VE2TKH(2)[4],=VE2TWO(2)[4],=VE2WDX(2)[4],=VE2XAA/2(2)[4],=VE2XB/2(2)[4], + =VE2Z(2)[4],=VE3AXC/2(2)[4],=VE3CWU/2(2)[4],=VE3EY/2(2)[4],=VE3FDX/2(2)[4],=VE3JM/2(2)[4], + =VE3NE/2(2)[4],=VE3NWA/2(2)[4],=VE3RHJ/2(2)[4],=VE3ZF/2(2)[4],=VE7ACN/VE2(2)[4],=VE7MID/VE2(2)[4], + =VE8DX/2(2)[4],=W0SD/VE2(2)[4],=W2NTJ/VE2(2)[4],=W4TMO/VE2(2)[4],=W5GED/VE2(2)[4], + =WB8YTZ/VE2(2)[4],=XM3NE/2(2)[4], =K8JJ/VY0(4)[4],=K9AJ/VY0(4)[4],=KD6WW/VY0(4)[4],=VY0A(4)[4],=VY0V(4)[4]; Australia: 30: 59: OC: -23.70: -132.33: -10.0: VK: AX,VH,VI,VJ,VK,VL,VM,VN,VZ,=VK9MAV, =VK6MB/1, - =AX2000/IMD,=AX2000/LH,=VI90IARU,=VK6AV/2,=VK6AXB/2,=VK6DXI/2,=VK6MB/2,=VK6YB/2,=VK6ZOA/2, + =AX2000/IMD,=AX2000/LH,=VI90IARU,=VK4VXX,=VK6AV/2,=VK6AXB/2,=VK6DXI/2,=VK6MB/2,=VK6YB/2,=VK6ZOA/2, =VK8GMT/2,=VK9LX/2, =AX8AA,=VK3DK/LH,=VK6FMON/3,=VK6JON/3,=VK6MB/3,=VK6NX/3,=VK6SX/3,=VK9LA/3,=VK9ZLH/3, AX4[55],VH4[55],VI4[55],VJ4[55],VK4[55],VL4[55],VM4[55],VN4[55],VZ4[55],=VK100WIA[55], @@ -3001,9 +3015,9 @@ Australia: 30: 59: OC: -23.70: -132.33: -10.0: VK: =VK2IA/6(29)[58],=VK2RAS/6(29)[58],=VK3DP/6(29)[58],=VK3DXI/6(29)[58],=VK3FPF/6(29)[58], =VK3FPIL/6(29)[58],=VK3JBL/6(29)[58],=VK3KG/6(29)[58],=VK3MCD/6(29)[58],=VK3NUT/6(29)[58], =VK3OHM/6(29)[58],=VK3TWO/6(29)[58],=VK3YQS/6(29)[58],=VK4IXU/6(29)[58],=VK4JWG/6(29)[58], - =VK4NAI/6(29)[58],=VK4NH/6(29)[58],=VK4SN/6(29)[58],=VK4VXX(29)[58],=VK4VXX/6(29)[58], - =VK5CC/6(29)[58],=VK5CE/6(29)[58],=VK5CE/9(29)[58],=VK5MAV/6(29)[58],=VK5NHG/6(29)[58], - =VK5PAS/6(29)[58],=VK6BV/AF(29)[58],=VK9AR(29)[58],=VK9AR/6(29)[58],=VK9ZLH/6(29)[58], + =VK4NAI/6(29)[58],=VK4NH/6(29)[58],=VK4SN/6(29)[58],=VK4VXX/6(29)[58],=VK5CC/6(29)[58], + =VK5CE/6(29)[58],=VK5CE/9(29)[58],=VK5MAV/6(29)[58],=VK5NHG/6(29)[58],=VK5PAS/6(29)[58], + =VK6BV/AF(29)[58],=VK9AR(29)[58],=VK9AR/6(29)[58],=VK9ZLH/6(29)[58], =VK6JON/7,=VK6KSJ/7,=VK6ZN/7,=VK7NWT/LH,=VK8XX/7, AX8(29)[55],VH8(29)[55],VI8(29)[55],VJ8(29)[55],VK8(29)[55],VL8(29)[55],VM8(29)[55],VN8(29)[55], VZ8(29)[55],=VI5RAS/8(29)[55],=VK1AHS/8(29)[55],=VK1FOC/8(29)[55],=VK2CBD/8(29)[55], @@ -3166,7 +3180,7 @@ Kermadec Islands: 32: 60: OC: -29.25: 177.92: -12.0: ZL8: N.Z. Subantarctic Is.: 32: 60: OC: -51.62: -167.62: -12.0: ZL9: ZL9; Paraguay: 11: 14: SA: -25.27: 57.67: 4.0: ZP: - ZP; + ZP,=VERSION; South Africa: 38: 57: AF: -29.07: -22.63: -2.0: ZS: H5,S4,S8,V9,ZR,ZS,ZT,ZU,=ZS70BAK/L,=ZS71SIG,=ZS75PTA,=ZS85SARL, =ZS1BAK/L,=ZS1CT/L,=ZS1CT/LH,=ZS1ESC/L,=ZS1ESC/LH,=ZS1FRC/L,=ZS1FRC/LH,=ZS1OAK/LH,=ZS1OAR/LH, From 8c27b1411f81f51ed6e39b9fc7519fc07d7caf66 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 13 Jul 2019 22:38:58 +0100 Subject: [PATCH 366/367] WSJT-X v2.1.0 GA release --- Versions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.cmake b/Versions.cmake index 3e2fc87cd..f9e94c26c 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -3,4 +3,4 @@ set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MINOR 1) set (WSJTX_VERSION_PATCH 0) set (WSJTX_RC 8) # release candidate number, comment out or zero for development versions -set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build +set (WSJTX_VERSION_IS_RELEASE 1) # set to 1 for final release build From 1e10ceebd6e0cb9e0622c1550355e72259ad569a Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 13 Jul 2019 23:42:09 +0100 Subject: [PATCH 367/367] Updated NEWS file to reflect latest release --- NEWS | 126 +++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 52 deletions(-) diff --git a/NEWS b/NEWS index 79ec823de..4d9f14e3d 100644 --- a/NEWS +++ b/NEWS @@ -13,9 +13,31 @@ Copyright 2001 - 2019 by Joe Taylor, K1JT. - Release: WSJT-X 2.0.1 - February 25, 2019 - --------------------- + Release: WSJT-X 2.1 + July 15, 2019 + ------------------- + +WSJT-X 2.1 is a major update that introduces FT4, a new protocol +targeted at HF contesting. Other improvements have been made in the +following areas: + + - FT8 waveform generated with GMSK, fully backward compatible + - user options for waterfall and spectrum display + - contest logging + - rig control + - user interface + - UDP messaging for inter-program communication + - accessibility + +There are numerous minor enhancements and bug fixes. + +We now provide a separate installation package for 64-bit Windows 7 +and later, with significant improvements in decoding speed. + + + Release: WSJT-X 2.0.1 + February 25, 2019 + --------------------- WSJT-X 2.0.1 is a bug fix release including the following defect repairs reported since the v2.0.0 GA release. @@ -67,9 +89,9 @@ repairs reported since the v2.0.0 GA release. than one Hound in the same Tx sequence. - Release: WSJT-X 2.0 - December 10, 2018 - ----------------------- + Release: WSJT-X 2.0 + December 10, 2018 + ----------------------- WSJT-X 2.0 is a major update that introduces new protocols for FT8 and MSK144. The new protocols become the world-wide standards on December @@ -125,9 +147,9 @@ Some details of changes since WSJT-X-rc5 include the following: - Update the WSJT-X User Guide to v2.0 (more to come...) - Update cty.dat - Release: WSJT-X 2.0-rc5 - November 26, 2018 - ----------------------- + Release: WSJT-X 2.0-rc5 + November 26, 2018 + ----------------------- Release Candidate 5 ("RC5") is stable, works well, and fixes the known problems in RC4. It is likely that the General Availability (GA) @@ -158,9 +180,9 @@ not be realized until most signals on a crowded band are using the new FT8 protocol. - Release: WSJT-X 2.0-rc4 - November 12, 2018 - ----------------------- + Release: WSJT-X 2.0-rc4 + November 12, 2018 + ----------------------- Changes from WSJT-X Version 2.0.0-rc3 include the following: @@ -184,9 +206,9 @@ Changes from WSJT-X Version 2.0.0-rc3 include the following: - New facilities for Contest and Fox-mode logging - Release: WSJT-X 2.0-rc3 - October 15, 2018 - ----------------------- + Release: WSJT-X 2.0-rc3 + October 15, 2018 + ----------------------- Changes from WSJT-X Version 2.0.0-rc2 include the following: @@ -210,9 +232,9 @@ Changes from WSJT-X Version 2.0.0-rc2 include the following: - Auto update of LoTW info, and faster program startup - Release: WSJT-X 2.0-rc2 - September 25, 2018 - ----------------------- + Release: WSJT-X 2.0-rc2 + September 25, 2018 + ----------------------- Changes from WSJT-X Version 2.0.0-rc1 include the following: - Corrected a flaw that encoded a message's first callsign as @@ -238,9 +260,9 @@ Changes from WSJT-X Version 2.0.0-rc1 include the following: - Suppressed the display of certain illogical false decodes. - Release: WSJT-X 2.0-rc1 - September 17, 2018 - ----------------------- + Release: WSJT-X 2.0-rc1 + September 17, 2018 + ----------------------- This is the first candidate release on WSJT-X 2.0, intended for beta-level testing. For details see: @@ -250,18 +272,18 @@ http://physics.princeton.edu/pulsar/k1jt/Quick_Start_WSJT-X_2.0.pdf http://physics.princeton.edu/pulsar/k1jt/77bit.txt - Release: WSJT-X Version 1.9.1 - June 1, 2018 - ----------------------------- + Release: WSJT-X Version 1.9.1 + June 1, 2018 + ----------------------------- This critical bug fix release repairs an unintended restriction in the FT8 DXpedition mode. It supersedes v1.9.0 and must be used for DXpedition Fox operators. - Release: WSJT-X Version 1.9.0 - May 28, 2018 - ----------------------------- + Release: WSJT-X Version 1.9.0 + May 28, 2018 + ----------------------------- Changes from WSJT-X Version 1.9.0-rc4 include the following: - Display in the right text window of MSK144 messages addressed to @@ -289,9 +311,9 @@ Changes from WSJT-X Version 1.9.0-rc4 include the following: - Hamlib, improved support for flrig. - Release: WSJT-X Version 1.9.0-rc4 - April 30, 2018 - --------------------------------- + Release: WSJT-X Version 1.9.0-rc4 + April 30, 2018 + --------------------------------- Changes from WSJT-X Version 1.9.0-rc3 include the following: @@ -321,9 +343,9 @@ Changes from WSJT-X Version 1.9.0-rc3 include the following: - Updated copy of cty.dat - Release: WSJT-X Version 1.9.0-rc3 - March 18, 2018 - --------------------------------- + Release: WSJT-X Version 1.9.0-rc3 + March 18, 2018 + --------------------------------- Changes from WSJT-X Version 1.9.0-rc2 include the following: @@ -357,9 +379,9 @@ Changes from WSJT-X Version 1.9.0-rc2 include the following: - Release: WSJT-X Version 1.9.0-rc2 - February 26, 2018 - --------------------------------- + Release: WSJT-X Version 1.9.0-rc2 + February 26, 2018 + --------------------------------- Changes from WSJT-X Version 1.8.0 include the following: @@ -401,9 +423,9 @@ wsjt-devel@lists.sourceforge.net. You must be a subscriber in order to post there. - Release: WSJT-X Version 1.8.0 - October 27, 2017 - ----------------------------- + Release: WSJT-X Version 1.8.0 + October 27, 2017 + ----------------------------- This is the full General Availability release of WSJT-X Version 1.8.0. @@ -424,9 +446,9 @@ reset of the default list of suggested operating frequencies. Go to *Reset*. - Release: WSJT-X Version 1.8.0-rc3 - October 16, 2017 - --------------------------------- + Release: WSJT-X Version 1.8.0-rc3 + October 16, 2017 + --------------------------------- Most (but not all) changes since Version 1.8.0-rc2 involve user control of the increasingly popular FT8 mode. The "RC3" release also @@ -528,9 +550,9 @@ message from populating the Tx message boxes. - Release: WSJT-X Version 1.8.0-rc2 - September 2, 2017 - --------------------------------- + Release: WSJT-X Version 1.8.0-rc2 + September 2, 2017 + --------------------------------- Implementation of FT8 and its auto-sequencing feature is now more capable and more polished. The decoder is faster and better: it now @@ -552,8 +574,8 @@ frequencies. Go to *File->Settings->Frequencies*, right click on the table and select *Reset*. - Release: WSJT-X Version 1.8.0 - ----------------------------- + Release: WSJT-X Version 1.8.0 + ----------------------------- NEW FEATURES IN WSJT-X Version 1.8.0 ------------------------------------ @@ -606,8 +628,8 @@ prescription of steps to reproduce the undesired behavior. You must be a subscriber to post to either of these lists. - Brief Description of the FT8 Protocol - ------------------------------------- + Brief Description of the FT8 Protocol + ------------------------------------- WSJT-X Version 1.8.0 includes a new mode called FT8, developed by K9AN and K1JT. The mode name "FT8" stands for "Franke and Taylor, 8-FSK @@ -641,8 +663,8 @@ activated in v1.8.0. We haven't yet finalized what the three extra bits in the message payload will be used for. Suggestions are welcome! - -- Joe, K1JT, for the WSJT Development Team - + -- Joe, K1JT, for the WSJT Development Team + WSJT-X v1.6.0 Release Notice ============================ @@ -923,7 +945,7 @@ defect is resolved in the next release (v1.5). - WSJT-X ChangeLog + WSJT-X ChangeLog ------------------------------------------------------------------ October 7, 2013: Version 1.2.1, r3590

" "This is a pre-release version of WSJT-X 2.1.0 made " @@ -997,6 +998,7 @@ void MainWindow::not_GA_warning_message () QDateTime now=QDateTime::currentDateTime(); QDateTime timeout=QDateTime(QDate(2019,6,7)); if(now.daysTo(timeout) < 0) Q_EMIT finished(); + */ } void MainWindow::initialize_fonts () @@ -3945,7 +3947,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { -// qDebug() << "cc onesec" << (SpecOp::RTTY == m_config.special_op_id()); +// qDebug() << "cc onesec" << m_bBestSPArmed; // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { From 7bfbca4532a658042111411739b39c51bec2a3d7 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 22 May 2019 15:10:14 -0400 Subject: [PATCH 272/367] Increase the FT4 received record length to 21*3456 = 72576 ==> 6.048 s. --- widgets/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b7a600bd8..0242d570f 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1466,7 +1466,7 @@ void MainWindow::dataSink(qint64 frames) } m_fileToSave.clear (); int samples=m_TRperiod*12000; - if(m_mode=="FT4") samples=18*3456; + if(m_mode=="FT4") samples=21*3456; // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread From 80307b64ad026070c0615d85428141747b263bb3 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 22 May 2019 17:01:06 -0500 Subject: [PATCH 273/367] Add a temporary research tool. --- CMakeLists.txt | 4 +++ lib/ft4/averaged_mf.f90 | 64 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 lib/ft4/averaged_mf.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index eb8ece5ac..787ac38e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -383,6 +383,7 @@ set (wsjt_FSRCS lib/astro0.f90 lib/avecho.f90 lib/averms.f90 + lib/ft4/averaged_mf.f90 lib/azdist.f90 lib/badmsg.f90 lib/ft8/baseline.f90 @@ -1283,6 +1284,9 @@ target_link_libraries (msk144sim wsjt_fort wsjt_cxx) add_executable (ft4sim lib/ft4/ft4sim.f90 wsjtx.rc) target_link_libraries (ft4sim wsjt_fort wsjt_cxx) +add_executable (averaged_mf lib/ft4/averaged_mf.f90 wsjtx.rc) +target_link_libraries (averaged_mf wsjt_fort wsjt_cxx) + add_executable (ft4sim_mult lib/ft4/ft4sim_mult.f90 wsjtx.rc) target_link_libraries (ft4sim_mult wsjt_fort wsjt_cxx) diff --git a/lib/ft4/averaged_mf.f90 b/lib/ft4/averaged_mf.f90 new file mode 100644 index 000000000..2986572b3 --- /dev/null +++ b/lib/ft4/averaged_mf.f90 @@ -0,0 +1,64 @@ +program averaged_mf + + parameter (nsps=32) + complex cgfsk(3*nsps,64) + complex clin(3*nsps,64) + complex cavg(3*nsps,4) + complex cavl(3*nsps,4) + real pulse(3*nsps) + real dphi(3*nsps) + + do i=1,3*NSPS + t=(i-1.5*nsps)/real(nsps) + pulse(i)=gfsk_pulse(1.0,t) + enddo + + twopi=8.0*atan(1.0) + hmod=1.0 + dphi_peak=twopi*hmod/real(nsps) + + do iwf=1,64 + i0=mod((iwf-1)/16,4) + i1=mod((iwf-1)/4,4) + i2=mod(iwf-1,4) + dphi=0.0 + dphi(1:64)=dphi_peak*pulse(33:96)*i1 + dphi(1:96)=dphi(1:96)+dphi_peak*pulse(1:96)*i0 + dphi(33:96)=dphi(33:96)+dphi_peak*pulse(1:64)*i2 + phi=0.0 + do j=1,96 + cgfsk(j,iwf)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + cgfsk(:,iwf)=cgfsk(:,iwf)*conjg(cgfsk(48,iwf)) + enddo + + do iwf=1,64 + i0=mod((iwf-1)/16,4) + i1=mod((iwf-1)/4,4) + i2=mod(iwf-1,4) + dphi=0.0 + dphi(1:32)=dphi_peak*i1 + dphi(33:64)=dphi_peak*i0 + dphi(65:96)=dphi_peak*i2 + phi=0.0 + do j=1,96 + clin(j,iwf)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi(j),twopi) + enddo + enddo + + + do i=1,4 + ib=(i-1)*16+1 + ie=ib+15 + cavg(:,i)=sum(cgfsk(:,ib:ie),2)/16.0 + cavl(:,i)=sum(clin(:,ib:ie),2)/16.0 + do j=1,96 +write(*,*) j +write(21,*) i,j,real(cavg(j,i)),imag(cavg(j,i)),real(cavl(j,i)),imag(cavl(j,i)) + enddo + enddo + +end program averaged_mf + From a9623703b3ed1bdbe6c7ff06dd33f0d3d72bec57 Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Wed, 22 May 2019 17:02:15 -0500 Subject: [PATCH 274/367] FT4: Change Fortran code to NSPS=576 and make necessary accompanying changes on the C++ side. Basically works except that Tx audio has incorrect DT and audio is truncated at the end. Also, command line decoding using JT9 is not as sensitive as decoding from within WSJT-X. --- Modulator.cpp | 4 ++-- lib/ft4/ft4_downsample.f90 | 2 +- lib/ft4/ft4_params.f90 | 12 ++++++------ lib/ft4/ft4sim.f90 | 5 ++--- lib/ft4/gen_ft4wave.f90 | 4 ++-- lib/ft4/getcandidates4.f90 | 2 +- lib/ft4/subtractft4.f90 | 10 +++++----- lib/ft4_decode.f90 | 12 ++++++------ widgets/mainwindow.cpp | 10 +++++----- widgets/plotter.cpp | 2 +- 10 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Modulator.cpp b/Modulator.cpp index e5587120b..63c4e1ff0 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -91,8 +91,8 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } - if(symbolsLength==105 and framesPerSymbol==512 - and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) { + if(symbolsLength==105 and framesPerSymbol==576 + and (toneSpacing==12000.0/576.0 or toneSpacing==-2.0)) { //### FT4 parameters m_ic=0; m_silentFrames=0; diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index d3760a506..ed55fb9a0 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -4,7 +4,7 @@ subroutine ft4_downsample(dd,newdata,f0,c) ! Output: Complex data in c(), sampled at 1200 Hz include 'ft4_params.f90' - parameter (NFFT2=NMAX/16) + parameter (NFFT2=NMAX/NDOWN) real dd(NMAX) complex c(0:NMAX/NDOWN-1) complex c1(0:NFFT2-1) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 46630cc25..2914260d8 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -6,11 +6,11 @@ parameter (ND=87) !Data symbols parameter (NS=16) !Sync symbols parameter (NN=NS+ND) !Sync and data symbols (103) parameter (NN2=NS+ND+2) !Total channel symbols (105) -parameter (NSPS=512) !Samples per symbol at 12000 S/s -parameter (NZ=NSPS*NN) !Sync and Data samples (52736) -parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) -parameter (NMAX=18*3456) !Samples in iwave -parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSPS=576) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Sync and Data samples (59328) +parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (60480) +parameter (NMAX=21*3456) !Samples in iwave (72576) +parameter (NFFT1=2304, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS) !Coarse time-sync step size parameter (NHSYM=(NMAX-NFFT1)/NSTEP) !Number of symbol spectra (1/4-sym steps) -parameter (NDOWN=16) !Downsample factor +parameter (NDOWN=18) !Downsample factor diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 94ab8218f..e35e5ad8a 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -6,7 +6,7 @@ program ft4sim use packjt77 include 'ft4_params.f90' !Set various constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=18*3456) !62208 + parameter (NZZ=21*3456) !72576 type(hdr) h !Header for .wav file character arg*12,fname*17 character msg37*37,msgsent37*37 @@ -51,12 +51,11 @@ program ft4sim hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) tt=NSPS*dt !Duration of symbols (s) baud=1.0/tt !Keying rate (baud) - txt=NZ*dt !Transmission length (s) + txt=NZ2*dt !Transmission length (s) bandwidth_ratio=2500.0/(fs/2.0) sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) if(snrdb.gt.90.0) sig=1.0 - txt=NN*NSPS/12000.0 ! Source-encode, then get itone() i3=-1 diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 index c4cd2eafb..823993612 100644 --- a/lib/ft4/gen_ft4wave.f90 +++ b/lib/ft4/gen_ft4wave.f90 @@ -2,8 +2,8 @@ subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) real wave(nwave) complex cwave(nwave) - real pulse(6144) !512*4*3 - real dphi(0:240000-1) + real pulse(6912) !576*4*3 + real dphi(0:250000-1) integer itone(nsym) logical first data first/.true./ diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index badbbcfb5..97aeb54bf 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -61,7 +61,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! call ft4_baseline(savg,nfa,nfb,sbase) ! savsm=savsm/sbase - f_offset = -1.5*12000/512 + f_offset = -1.5*12000.0/NSPS do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. & savsm(i).ge.syncmin) then diff --git a/lib/ft4/subtractft4.f90 b/lib/ft4/subtractft4.f90 index 83470d7ea..ae104ddb3 100644 --- a/lib/ft4/subtractft4.f90 +++ b/lib/ft4/subtractft4.f90 @@ -9,8 +9,8 @@ subroutine subtractft4(dd,itone,f0,dt) use timer_module, only: timer - parameter (NMAX=18*3456,NFRAME=(103+2)*512) - parameter (NFFT=NMAX,NFILT=1400) + parameter (NMAX=21*3456,NSPS=576,NFFT=NMAX,NFILT=1400) + parameter (NFRAME=(103+2)*NSPS) real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk complex cref,camp,cfilt,cw integer itone(103) @@ -19,13 +19,13 @@ subroutine subtractft4(dd,itone,f0,dt) common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX),xjunk(NFRAME) save first - nstart=dt*12000+1-512 + nstart=dt*12000+1-NSPS nsym=103 - nsps=512 fs=12000.0 icmplx=1 bt=1.0 - call gen_ft4wave(itone,nsym,nsps,fs,f0,cref,xjunk,icmplx,NFRAME) + nss=NSPS + call gen_ft4wave(itone,nsym,nss,fs,f0,cref,xjunk,icmplx,NFRAME) camp=0. do i=1,nframe id=nstart-1+i diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index aa27387ce..cf4acaab7 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -249,14 +249,14 @@ contains if(dobigfft) dobigfft=.false. sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) -! Sample rate is now 12000/16 = 750 samples/second +! Sample rate is now 12000/18 = 666.67 samples/second do isync=1,2 if(isync.eq.1) then idfmin=-12 idfmax=12 idfstp=3 - ibmin=-200 - ibmax=950 + ibmin=-333 + ibmax=1000 ibstp=4 else idfmin=idfbest-4 @@ -493,7 +493,7 @@ contains call unpack77(c77,1,message,unpk77_success) if(unpk77_success.and.dosubtract) then call get_ft4_tones_from_77bits(message77,i4tone) - dt=real(ibest)/750.0 + dt=real(ibest)/666.67 call timer('subtract',0) call subtractft4(dd,i4tone,f0,dt) call timer('subtract',1) @@ -506,12 +506,12 @@ contains ndecodes=ndecodes+1 decodes(ndecodes)=message if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.0 + xsnr=10*log10(snr)-14.8 else xsnr=-20.0 endif nsnr=nint(max(-20.0,xsnr)) - xdt=ibest/750.0 - 0.5 + xdt=ibest/666.67 - 0.5 !write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b7a600bd8..0676e89be 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1466,7 +1466,7 @@ void MainWindow::dataSink(qint64 frames) } m_fileToSave.clear (); int samples=m_TRperiod*12000; - if(m_mode=="FT4") samples=18*3456; + if(m_mode=="FT4") samples=21*3456; // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread @@ -3428,7 +3428,7 @@ void MainWindow::guiUpdate() if(m_TRperiod==0) m_TRperiod=60.0; txDuration=0.0; - if(m_modeTx=="FT4") txDuration=0.35 + 105*512/12000.0; // FT4 + if(m_modeTx=="FT4") txDuration=1.0 + 105*576/12000.0; // FT4 if(m_modeTx=="FT8") txDuration=1.0 + 79*1920/12000.0; // FT8 if(m_modeTx=="JT4") txDuration=1.0 + 207.0*2520/11025.0; // JT4 if(m_modeTx=="JT9") txDuration=1.0 + 85.0*m_nsps/12000.0; // JT9 @@ -3748,7 +3748,7 @@ void MainWindow::guiUpdate() genft4_(message, &ichk, msgsent, const_cast (ft4msgbits), const_cast(itone), 37, 37); int nsym=103; - int nsps=4*512; + int nsps=4*576; float fsample=48000.0; float f0=ui->TxFreqSpinBox->value() - m_XIT; int nwave=(nsym+2)*nsps; @@ -5652,7 +5652,7 @@ void MainWindow::on_actionFT4_triggered() Q_EMIT FFTSize (m_FFTSize); m_hsymStop=18; setup_status_bar (bVHF); - m_toneSpacing=12000.0/512.0; + m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); @@ -6949,7 +6949,7 @@ void MainWindow::transmit (double snr) m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform. Q_EMIT sendMessage (NUM_FT4_SYMBOLS, - 512.0, ui->TxFreqSpinBox->value() - m_XIT, + 576.0, ui->TxFreqSpinBox->value() - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel(), true, false, snr, m_TRperiod); } diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 85c662a7a..badeff57b 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -411,7 +411,7 @@ void CPlotter::DrawOverlay() //DrawOverlay() } float bw=9.0*12000.0/m_nsps; //JT9 - if(m_mode=="FT4") bw=3*12000.0/512.0; //FT4 ### (3x, or 4x???) ### + if(m_mode=="FT4") bw=3*12000.0/576.0; //FT4 ### (3x, or 4x???) ### if(m_mode=="FT8") bw=7*12000.0/1920.0; //FT8 if(m_mode=="JT4") { //JT4 From 8761ccef9b55d6dc3d7eb1c978a477c3c408d376 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 09:23:58 -0400 Subject: [PATCH 275/367] Received data length for FT4 should be 21*3456 = 72576 samples = 6.048 s. --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0676e89be..494607fbf 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1324,7 +1324,7 @@ void MainWindow::fixStop() } else if (m_mode=="FT8") { m_hsymStop=50; } else if (m_mode=="FT4") { - m_hsymStop=18; + m_hsymStop=21; } } @@ -5650,7 +5650,7 @@ void MainWindow::on_actionFT4_triggered() m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=18; + m_hsymStop=21; setup_status_bar (bVHF); m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); From 53c6b50d900cde51973252170e8ac916f83d4dfa Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 23 May 2019 09:17:00 -0500 Subject: [PATCH 276/367] FT4: change m_hsymStop from 18 to 21 --- widgets/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 0676e89be..494607fbf 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1324,7 +1324,7 @@ void MainWindow::fixStop() } else if (m_mode=="FT8") { m_hsymStop=50; } else if (m_mode=="FT4") { - m_hsymStop=18; + m_hsymStop=21; } } @@ -5650,7 +5650,7 @@ void MainWindow::on_actionFT4_triggered() m_nsps=6912; m_FFTSize = m_nsps/2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=18; + m_hsymStop=21; setup_status_bar (bVHF); m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); From 932e100a2cba479a6b64e7c5b98948aab9a6e1ba Mon Sep 17 00:00:00 2001 From: Steve Franke Date: Thu, 23 May 2019 09:55:50 -0500 Subject: [PATCH 277/367] Update jt9.f90 to account for changes to FT4. --- lib/jt9.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 68984e33a..67e7ac319 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -226,7 +226,7 @@ program jt9 endif shared_data%id2=0 !??? Why is this necessary ??? - if(mode.eq.5) npts=62208 + if(mode.eq.5) npts=21*3456 do iblk=1,npts/kstep k=iblk*kstep if(mode.eq.8 .and. k.gt.179712) exit From dfedc40db1569aee2db441f93f18aa19e8518dee Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 13:24:35 -0400 Subject: [PATCH 278/367] Fix some timing issues resulting from non-integral m_TRperiod for FT4. --- Detector.cpp | 21 ++++++--------------- Detector.hpp | 1 - Modulator.cpp | 37 +++++++++++++++---------------------- widgets/mainwindow.cpp | 8 ++++---- 4 files changed, 25 insertions(+), 42 deletions(-) diff --git a/Detector.cpp b/Detector.cpp index 3bf5cf410..05a631b13 100644 --- a/Detector.cpp +++ b/Detector.cpp @@ -55,12 +55,14 @@ void Detector::clear () qint64 Detector::writeData (char const * data, qint64 maxSize) { - int ns=secondInPeriod(); - if(ns < m_ns) { // When ns has wrapped around to zero, restart the buffers + static unsigned mstr0=999999; + qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; + unsigned mstr = ms0 % int(1000.0*m_period); // ms into the nominal Tx start time + if(mstr < mstr0) { //When mstr has wrapped around to 0, restart the buffer dec_data.params.kin = 0; m_bufferPos = 0; } - m_ns=ns; + mstr0=mstr; // no torn frames Q_ASSERT (!(maxSize % static_cast (bytesPerFrame ()))); @@ -73,7 +75,7 @@ qint64 Detector::writeData (char const * data, qint64 maxSize) if (framesAccepted < static_cast (maxSize / bytesPerFrame ())) { qDebug () << "dropped " << maxSize / bytesPerFrame () - framesAccepted << " frames of data on the floor!" - << dec_data.params.kin << ns; + << dec_data.params.kin << mstr; } for (unsigned remaining = framesAccepted; remaining; ) { @@ -121,14 +123,3 @@ qint64 Detector::writeData (char const * data, qint64 maxSize) return maxSize; // we drop any data past the end of the buffer on // the floor until the next period starts } - -unsigned Detector::secondInPeriod () const -{ - // we take the time of the data as the following assuming no latency - // delivering it to us (not true but close enough for us) - qint64 now (QDateTime::currentMSecsSinceEpoch ()); - - unsigned secondInToday ((now % 86400000LL) / 1000); - unsigned secInPeriod = fmod(double(secondInToday),m_period); - return secInPeriod; -} diff --git a/Detector.hpp b/Detector.hpp index 404951a90..4d584c130 100644 --- a/Detector.hpp +++ b/Detector.hpp @@ -41,7 +41,6 @@ protected: private: void clear (); // discard buffer contents - unsigned secondInPeriod () const; unsigned m_frameRate; double m_period; diff --git a/Modulator.cpp b/Modulator.cpp index 63c4e1ff0..4d0171770 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -32,8 +32,8 @@ Modulator::Modulator (unsigned frameRate, double periodLengthInSeconds, , m_phi {0.0} , m_toneSpacing {0.0} , m_fSpread {0.0} - , m_frameRate {frameRate} , m_period {periodLengthInSeconds} + , m_frameRate {frameRate} , m_state {Idle} , m_tuning {false} , m_cwLevel {false} @@ -50,13 +50,10 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, Q_ASSERT (stream); // Time according to this computer which becomes our base time qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000; + unsigned mstr = ms0 % int(1000.0*m_period); // ms into the nominal Tx start time -// qDebug() << "ModStart" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.sss"); - - if(m_state != Idle) stop (); - + if(m_state != Idle) stop(); m_quickClose = false; - m_symbolsLength = symbolsLength; m_isym0 = std::numeric_limits::max (); // big number m_frequency0 = 0.; @@ -68,37 +65,33 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, m_toneSpacing = toneSpacing; m_bFastMode=fastMode; m_TRperiod=TRperiod; - unsigned delay_ms = 1920 == m_nsps && 15 == m_period ? 500 : 1000; + unsigned delay_ms=1000; + if(m_nsps==1920) delay_ms=500; //FT8 + if(m_nsps==576) delay_ms=300; //FT4 - // noise generator parameters +// noise generator parameters if (m_addNoise) { m_snr = qPow (10.0, 0.05 * (dBSNR - 6.0)); m_fac = 3000.0; if (m_snr > 1.0) m_fac = 3000.0 / m_snr; } - unsigned mstr = ms0 % int(1000.0*m_period); // ms in period - - // round up to an exact portion of a second that allows for startup - // delays +// round up to an exact portion of a second that allows for startup delays m_ic = (mstr / delay_ms) * m_frameRate * delay_ms / 1000; if(m_bFastMode) m_ic=0; m_silentFrames = 0; - // calculate number of silent frames to send, so that audio will start at - // the nominal time "delay_ms" into the Tx sequence. +// calculate number of silent frames to send, so that audio will start at +// the nominal time "delay_ms" into the Tx sequence. if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } - if(symbolsLength==105 and framesPerSymbol==576 - and (toneSpacing==12000.0/576.0 or toneSpacing==-2.0)) { -//### FT4 parameters - m_ic=0; - m_silentFrames=0; - } -// qDebug() << "Mod AA" << symbolsLength << framesPerSymbol << toneSpacing; -// qDebug() << "Mod AB" << delay_ms << mstr << m_ic << m_silentFrames; + +// qDebug() << "aa" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.zzz") +// << m_ic << m_silentFrames << m_silentFrames/48000.0 +// << mstr << fmod(double(ms0),1000.0*m_period); + initialize (QIODevice::ReadOnly, channel); Q_EMIT stateChanged ((m_state = (synchronize && m_silentFrames) ? diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 494607fbf..9b8a7b26a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -2838,12 +2838,12 @@ void MainWindow::decode() //decode() dec_data.params.nutc=100*ihr + imin; if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9 or m_mode=="FT8" or m_mode=="FT4") { qint64 ms=1000.0*(2.0-m_TRperiod); - if(m_mode=="FT4") ms=1000.0*(3.0-m_TRperiod); + if(m_mode=="FT4") ms=1000.0*(2.0-m_TRperiod); QDateTime t=QDateTime::currentDateTimeUtc().addMSecs(ms); ihr=t.toString("hh").toInt(); imin=t.toString("mm").toInt(); int isec=t.toString("ss").toInt(); - if(m_mode!="FT4") isec=isec - fmod(double(isec),m_TRperiod); + isec=isec - fmod(double(isec),m_TRperiod); dec_data.params.nutc=10000*ihr + 100*imin + isec; } } @@ -3498,9 +3498,9 @@ void MainWindow::guiUpdate() if(m_transmitting or m_auto or m_tune) { m_dateTimeLastTX = QDateTime::currentDateTimeUtc (); -// Check for "txboth" (testing purposes only) +// Check for "txboth" (FT4 testing purposes only) QFile f(m_appDir + "/txboth"); - if(f.exists() and fmod(tsec,m_TRperiod) < (1.0 + 85.0*m_nsps/12000.0)) m_bTxTime=true; + if(f.exists() and fmod(tsec,m_TRperiod) < (0.5 + 105.0*576.0/12000.0)) m_bTxTime=true; // Don't transmit another mode in the 30 m WSPR sub-band Frequency onAirFreq = m_freqNominal + ui->TxFreqSpinBox->value(); From 2ab4b59d88959a4503dcdae27e2a0db0b3d05a88 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 14:06:00 -0400 Subject: [PATCH 279/367] Fix ft4sim_mult for 7.5 s T/R sequences. --- lib/ft4/ft4sim_mult.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ft4/ft4sim_mult.f90 b/lib/ft4/ft4sim_mult.f90 index 313093289..582a48f77 100644 --- a/lib/ft4/ft4sim_mult.f90 +++ b/lib/ft4/ft4sim_mult.f90 @@ -6,7 +6,7 @@ program ft4sim_mult use packjt77 include 'ft4_params.f90' !FT4 protocol constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=65760) !Length of .wav file (4.48+1.0)*12000 + parameter (NZZ=72576) !Length of .wav file (21*3456) type(hdr) h !Header for .wav file character arg*12,fname*17,cjunk*4 character msg37*37,msgsent37*37,c77*77 @@ -55,8 +55,8 @@ program ft4sim_mult read(10,1003,end=100) cjunk,isnr,xdt0,ifreq,msg37 1003 format(a4,30x,i3,f5.1,i5,1x,a37) if(cjunk.eq.'File') go to 100 - if(isnr.lt.-16) isnr=-16 - f0=ifreq*93.75/50.0 + if(isnr.lt.-17) isnr=-17 + f0=ifreq*960.0/576.0 call random_number(r) xdt=r-0.5 ! Source-encode, then get itone() From 7334ebb20b2f55dbdf045ac1e17cf861dc572fc3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 14:31:08 -0400 Subject: [PATCH 280/367] New user option: "Calling CQ forces Call 1st". --- Configuration.cpp | 6 +++ Configuration.hpp | 1 + Configuration.ui | 117 ++++++++++++++++++++++------------------- widgets/mainwindow.cpp | 3 +- 4 files changed, 71 insertions(+), 56 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index cce8db23c..5526a1ec4 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -609,6 +609,7 @@ private: bool miles_; bool quick_call_; bool disable_TX_on_73_; + bool force_call_1st_; bool alternate_bindings_; int watchdog_; bool TX_messages_; @@ -705,6 +706,7 @@ bool Configuration::clear_DX () const {return m_->clear_DX_;} bool Configuration::miles () const {return m_->miles_;} bool Configuration::quick_call () const {return m_->quick_call_;} bool Configuration::disable_TX_on_73 () const {return m_->disable_TX_on_73_;} +bool Configuration::force_call_1st() const {return m_->force_call_1st_;} bool Configuration::alternate_bindings() const {return m_->alternate_bindings_;} int Configuration::watchdog () const {return m_->watchdog_;} bool Configuration::TX_messages () const {return m_->TX_messages_;} @@ -1242,6 +1244,7 @@ void Configuration::impl::initialize_models () ui_->miles_check_box->setChecked (miles_); ui_->quick_call_check_box->setChecked (quick_call_); ui_->disable_TX_on_73_check_box->setChecked (disable_TX_on_73_); + ui_->force_call_1st_check_box->setChecked (force_call_1st_); ui_->alternate_bindings_check_box->setChecked (alternate_bindings_); ui_->tx_watchdog_spin_box->setValue (watchdog_); ui_->TX_messages_check_box->setChecked (TX_messages_); @@ -1496,6 +1499,7 @@ void Configuration::impl::read_settings () miles_ = settings_->value ("Miles", false).toBool (); quick_call_ = settings_->value ("QuickCall", false).toBool (); disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool (); + force_call_1st_ = settings_->value ("ForceCallFirst", false).toBool (); alternate_bindings_ = settings_->value ("AlternateBindings", false).toBool (); watchdog_ = settings_->value ("TxWatchdog", 6).toInt (); TX_messages_ = settings_->value ("Tx2QSO", true).toBool (); @@ -1598,6 +1602,7 @@ void Configuration::impl::write_settings () settings_->setValue ("Miles", miles_); settings_->setValue ("QuickCall", quick_call_); settings_->setValue ("73TxDisable", disable_TX_on_73_); + settings_->setValue ("ForceCallFirst", force_call_1st_); settings_->setValue ("AlternateBindings", alternate_bindings_); settings_->setValue ("TxWatchdog", watchdog_); settings_->setValue ("Tx2QSO", TX_messages_); @@ -2042,6 +2047,7 @@ void Configuration::impl::accept () miles_ = ui_->miles_check_box->isChecked (); quick_call_ = ui_->quick_call_check_box->isChecked (); disable_TX_on_73_ = ui_->disable_TX_on_73_check_box->isChecked (); + force_call_1st_ = ui_->force_call_1st_check_box->isChecked (); alternate_bindings_ = ui_->alternate_bindings_check_box->isChecked (); watchdog_ = ui_->tx_watchdog_spin_box->value (); TX_messages_ = ui_->TX_messages_check_box->isChecked (); diff --git a/Configuration.hpp b/Configuration.hpp index 991e126fb..0ed7a4057 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -127,6 +127,7 @@ public: bool miles () const; bool quick_call () const; bool disable_TX_on_73 () const; + bool force_call_1st() const; bool alternate_bindings() const; int watchdog () const; bool TX_messages () const; diff --git a/Configuration.ui b/Configuration.ui index 9701fb633..9e36e7ee1 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -301,7 +301,14 @@ Behavior - + + + + Decode after EME delay + + + + @@ -347,10 +354,27 @@ - - + + - Decode after EME delay + Enable VHF/UHF/Microwave features + + + + + + + Single decode + + + + + + + <html><head/><body><p>Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.</p></body></html> + + + Allow Tx frequency changes while transmitting @@ -367,31 +391,35 @@ - - - - Single decode - - - - - - - Enable VHF/UHF/Microwave features - - - - - + + - <html><head/><body><p>Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.</p></body></html> + <html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html> - Allow Tx frequency changes while transmitting + Monitor returns to last used frequency - + + + + Alternate F1-F6 bindings + + + + + + + Turns off automatic transmissions after sending a 73 or any other free +text message. + + + Di&sable Tx after sending 73 + + + + @@ -444,34 +472,6 @@ quiet period when decoding is done. - - - - <html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html> - - - Monitor returns to last used frequency - - - - - - - Alternate F1-F6 bindings - - - - - - - Turns off automatic transmissions after sending a 73 or any other free -text message. - - - Di&sable Tx after sending 73 - - - @@ -482,6 +482,13 @@ text message. + + + + Calling CQ forces Call 1st + + + @@ -3078,13 +3085,13 @@ Right click for insert and delete options. + + - - - - + + diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 9b8a7b26a..23fa97772 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3947,7 +3947,7 @@ void MainWindow::guiUpdate() //Once per second: if(nsec != m_sec0) { -// qDebug() << "cc onesec" << m_bBestSPArmed; +// qDebug() << "onesec" << m_config.force_call_1st(); // if((!m_msgAvgWidget or (m_msgAvgWidget and !m_msgAvgWidget->isVisible())) // and (SpecOp::NONE < m_config.special_op_id()) and (SpecOp::HOUND > m_config.special_op_id())) on_actionFox_Log_triggered(); if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) { @@ -4076,6 +4076,7 @@ void MainWindow::startTx2() t=ui->tx6->text(); if(t.mid(0,1)=="#") snr=t.mid(1,5).toDouble(); if(snr>0.0 or snr < -50.0) snr=99.0; + if((m_ntx==6 or m_ntx==7) and m_config.force_call_1st()) ui->cbFirst->setChecked(true); transmit (snr); ui->signal_meter_widget->setValue(0,0); if(m_mode=="Echo" and !m_tune) m_bTransmittedEcho=true; From 26f7fed8aa50f3b96b036622c0fc8378078a30ca Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 23 May 2019 14:50:17 -0400 Subject: [PATCH 281/367] New FT4 sample file. --- samples/FT4/000000_000002.wav | Bin 0 -> 145196 bytes samples/FT4/190106_000112.wav | Bin 131564 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 samples/FT4/000000_000002.wav delete mode 100644 samples/FT4/190106_000112.wav diff --git a/samples/FT4/000000_000002.wav b/samples/FT4/000000_000002.wav new file mode 100644 index 0000000000000000000000000000000000000000..e5cdc88040b477cad842d51c4dd8e5fb6fdbe803 GIT binary patch literal 145196 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 literal 0 HcmV?d00001 diff --git a/samples/FT4/190106_000112.wav b/samples/FT4/190106_000112.wav deleted file mode 100644 index 2c6e0a9d49a912b80878257a3a16d0577749f30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131564 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%0DZXk>CWQLI&1lzy=CE9hR1!&#int8)fU|>6Zm-27 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