From 70b84478f023a038d6cbc46bd45e7942526d7513 Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Fri, 24 Jan 2020 11:26:36 -0600 Subject: [PATCH] Add WW_DIGI to the special activities section. Make necessary changes to the decoders. Also, an experimental change to the FT4 decoder to base AP decoding passes on 4-symbol block detection instead of single symbol detection. This provides about 1 dB improvement on the AWGN channel. Sensitivity changes on other channels are TBD. --- Configuration.cpp | 1 + Configuration.hpp | 2 +- Configuration.ui | 64 ++++++++++++++++++++++++++---------------- commons.h | 1 - lib/decoder.f90 | 12 ++++---- lib/ft4_decode.f90 | 45 +++++++++++++++-------------- lib/ft8/ft8b.f90 | 32 ++++++++++++--------- lib/hspec.f90 | 2 +- lib/jt9com.f90 | 1 - widgets/logqso.cpp | 2 +- widgets/mainwindow.cpp | 34 ++++++++++++---------- 11 files changed, 108 insertions(+), 88 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 230d05373..4afa9dfe7 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -1084,6 +1084,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network ui_->special_op_activity_button_group->setId (ui_->rbEU_VHF_Contest, static_cast (SpecialOperatingActivity::EU_VHF)); ui_->special_op_activity_button_group->setId (ui_->rbField_Day, static_cast (SpecialOperatingActivity::FIELD_DAY)); ui_->special_op_activity_button_group->setId (ui_->rbRTTY_Roundup, static_cast (SpecialOperatingActivity::RTTY)); + ui_->special_op_activity_button_group->setId (ui_->rbWW_DIGI, static_cast (SpecialOperatingActivity::WW_DIGI)); ui_->special_op_activity_button_group->setId (ui_->rbFox, static_cast (SpecialOperatingActivity::FOX)); ui_->special_op_activity_button_group->setId (ui_->rbHound, static_cast (SpecialOperatingActivity::HOUND)); diff --git a/Configuration.hpp b/Configuration.hpp index 78c80c812..43267d6ce 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -180,7 +180,7 @@ public: bool highlight_only_fields () const; bool include_WAE_entities () const; - enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND}; + enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND}; SpecialOperatingActivity special_op_id () const; struct CalibrationParams diff --git a/Configuration.ui b/Configuration.ui index e86fe984a..7b44857d2 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -6,8 +6,8 @@ 0 0 - 554 - 563 + 670 + 617 @@ -559,7 +559,7 @@ quiet period when decoding is done. true - + @@ -1021,7 +1021,7 @@ other hardware interface for PTT. true - + @@ -2261,9 +2261,6 @@ Right click for insert and delete options. <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> - - QAbstractScrollArea::AdjustToContents - QAbstractItemView::NoEditTriggers @@ -2572,6 +2569,19 @@ Right click for insert and delete options. + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -2635,19 +2645,6 @@ Right click for insert and delete options. - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -2711,6 +2708,25 @@ Right click for insert and delete options. + + + + + 0 + 18 + + + + <html><head/><body><p>World-Wide Digi-mode contest</p><p><br/></p></body></html> + + + WW Digi Contest + + + special_op_activity_button_group + + + @@ -3093,12 +3109,12 @@ Right click for insert and delete options. - + + + - + - - diff --git a/commons.h b/commons.h index b095ec957..4083bb22f 100644 --- a/commons.h +++ b/commons.h @@ -65,7 +65,6 @@ extern struct dec_data { char mygrid[6]; char hiscall[12]; char hisgrid[6]; - char cqstr[4]; } params; } dec_data; diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 0d6a16061..e53ad0437 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -40,7 +40,6 @@ subroutine multimode_decoder(ss,id2,params,nfsample) character(len=20) :: datetime character(len=12) :: mycall, hiscall character(len=6) :: mygrid, hisgrid - character(len=4) :: cqstr save type(counting_jt4_decoder) :: my_jt4 type(counting_jt65_decoder) :: my_jt65 @@ -54,7 +53,6 @@ subroutine multimode_decoder(ss,id2,params,nfsample) hiscall=transfer(params%hiscall,hiscall) mygrid=transfer(params%mygrid,mygrid) hisgrid=transfer(params%hisgrid,hisgrid) - cqstr=transfer(params%cqstr,cqstr) ! initialize decode counts my_jt4%decoded = 0 @@ -88,7 +86,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) if(params%nmode.eq.8) then ! We're in FT8 mode - if(ncontest.eq.5) then + if(ncontest.eq.6) then ! Fox mode: initialize and open houndcallers.txt inquire(file=trim(temp_dir)//'/houndcallers.txt',exist=ex) if(.not.ex) then @@ -117,7 +115,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) endif j=0 - if(ncontest.eq.5) then + if(ncontest.eq.6) then ! Fox mode: save decoded Hound calls for possible selection by FoxOp rewind 19 if(nfox.eq.0) then @@ -155,7 +153,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) call timer('decft4 ',0) call my_ft4%decode(ft4_decoded,id2,params%nQSOProgress,params%nfqso, & params%nutc,params%nfa,params%nfb,params%ndepth, & - logical(params%lapcqonly),ncontest,cqstr,mycall,hiscall) + logical(params%lapcqonly),ncontest,mycall,hiscall) call timer('decft4 ',1) go to 800 endif @@ -282,7 +280,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) 1010 format('',2i4) call flush(6) close(13) - if(ncontest.eq.5) close(19) + if(ncontest.eq.6) close(19) if(params%nmode.eq.4 .or. params%nmode.eq.65) close(14) return @@ -536,7 +534,7 @@ contains 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') - if(ncontest.eq.5) then + if(ncontest.eq.6) then i1=index(decoded0,' ') i2=i1 + index(decoded0(i1+1:),' ') i3=i2 + index(decoded0(i2+1:),' ') diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index d45b4df9c..cbfb0b1b9 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,lapcqonly,ncontest,cqstr,mycall,hiscall) + nutc,nfa,nfb,ndepth,lapcqonly,ncontest,mycall,hiscall) use timer_module, only: timer use packjt77 include 'ft4/ft4_params.f90' @@ -39,7 +39,6 @@ contains character*12 mycall,hiscall character*12 mycall0,hiscall0 character*6 hhmmss - character*4 cqstr,cqstr0 complex cd2(0:NDMAX-1) !Complex waveform complex cb(0:NDMAX-1) @@ -61,7 +60,7 @@ contains integer i4tone(103) 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),mcqscc(29) + integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29),mcqww(29) integer mrrr(19),m73(19),mrr73(19) logical nohiscall,unpk77_success @@ -75,7 +74,7 @@ contains 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 mcqscc/0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0/ + data mcqww/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,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/ @@ -83,7 +82,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,first,apbits,nappasses,naptypes, & - mycall0,hiscall0,cqstr0,ctwk2 + mycall0,hiscall0,ctwk2 this%callback => callback hhmmss=cdatetime0(8:13) @@ -107,7 +106,7 @@ contains mcqru=2*mod(mcqru+rvec(1:29),2)-1 mcqfd=2*mod(mcqfd+rvec(1:29),2)-1 mcqtest=2*mod(mcqtest+rvec(1:29),2)-1 - mcqscc=2*mod(mcqscc+rvec(1:29),2)-1 + mcqww=2*mod(mcqww+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 @@ -136,7 +135,6 @@ contains mycall0='' hiscall0='' - cqstr0='' first=.false. endif @@ -320,7 +318,7 @@ contains 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 + if(ncontest.ge.6) npasses=3 ! Don't support Fox and Hound do ipass=1,npasses if(ipass.eq.1) llr=llra if(ipass.eq.2) llr=llrb @@ -331,7 +329,7 @@ contains endif if(ipass .gt. 3) then - llrd=llra + llrd=llrc iaptype=naptypes(nQSOProgress,ipass-3) if(lapcqonly) iaptype=1 @@ -340,29 +338,30 @@ contains ! 2 : EU_VHF ! 3 : FIELD DAY ! 4 : RTTY -! 5 : FOX -! 6 : HOUND +! 5 : WW_DIGI +! 6 : FOX +! 7 : HOUND ! ! Conditions that cause us to bail out of AP decoding napwid=80 - if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f1-nfqso).gt.napwid) ) cycle + if(ncontest.le.5 .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 + if(iaptype.eq.1) then ! CQ or CQ TEST or CQ FD or CQ RU or CQ WW 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 .and. cqstr(1:2)=='RU') llrd(1:29)=apmag*mcqru(1:29) - if( ncontest.eq.4 .and. cqstr(1:3)=='SCC') llrd(1:29)=apmag*mcqscc(1:29) + if( ncontest.eq.4 ) llrd(1:29)=apmag*mcqru(1:29) + if( ncontest.eq.5 ) llrd(1:29)=apmag*mcqww(1:29) endif if(iaptype.eq.2) then ! MyCall,???,??? apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1) then + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.5) then apmask(1:29)=1 llrd(1:29)=apmag*apbits(1:29) else if(ncontest.eq.2) then @@ -379,14 +378,14 @@ contains if(iaptype.eq.3) then ! MyCall,DxCall,??? apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2) then + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.2.or.ncontest.eq.5) 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 + else if(ncontest.eq.4) then apmask(2:57)=1 llrd(2:29)=apmag*apmy_ru(1:28) llrd(30:57)=apmag*apbits(30:57) @@ -395,7 +394,7 @@ contains if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then apmask=0 - if(ncontest.le.4) then + if(ncontest.le.5) then apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 if(iaptype.eq.6) llrd(1:77)=apmag*apbits(1:77) endif @@ -452,11 +451,11 @@ contains call this%callback(smax,nsnr,xdt,f1,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 + enddo !3 DT segments + enddo !Candidate list + enddo !Subtraction loop return end subroutine decode diff --git a/lib/ft8/ft8b.f90 b/lib/ft8/ft8b.f90 index 0376311f2..72c82a6dc 100644 --- a/lib/ft8/ft8b.f90 +++ b/lib/ft8/ft8b.f90 @@ -18,7 +18,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & real dd0(15*12000) integer*1 message77(77),apmask(174),cw(174) integer apsym(58) - integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29) + integer mcq(29),mcqru(29),mcqfd(29),mcqtest(29),mcqww(29) integer mrrr(19),m73(19),mrr73(19) integer itone(NN) integer icos7(0:6),ip(1) @@ -37,6 +37,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & 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 mcqww/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,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/ @@ -50,6 +51,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & mcqfd=2*mcqfd-1 mcqru=2*mcqru-1 mcqtest=2*mcqtest-1 + mcqww=2*mcqww-1 mrrr=2*mrrr-1 m73=2*m73-1 mrr73=2*mrr73-1 @@ -226,7 +228,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & ! 6 ap pass 3 ! 7 ap pass 4 - if(lapon.or.ncontest.eq.6) then !Hounds always use AP + if(lapon.or.ncontest.eq.7) then !Hounds always use AP if(.not.lapcqonly) then npasses=3+nappasses(nQSOProgress) else @@ -258,13 +260,14 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & ! 2 : EU_VHF ! 3 : FIELD DAY ! 4 : RTTY -! 5 : FOX -! 6 : HOUND +! 5 : WW_DIGI +! 6 : FOX +! 7 : HOUND ! ! Conditions that cause us to bail out of AP decoding - if(ncontest.le.4 .and. iaptype.ge.3 .and. (abs(f1-nfqso).gt.napwid .and. abs(f1-nftx).gt.napwid) ) cycle - if(ncontest.eq.5) cycle ! No AP for Foxes - if(ncontest.eq.6.and.f1.gt.950.0) cycle ! Hounds use AP only for signals below 950 Hz + if(ncontest.le.5 .and. iaptype.ge.3 .and. (abs(f1-nfqso).gt.napwid .and. abs(f1-nftx).gt.napwid) ) cycle + if(ncontest.eq.6) cycle ! No AP for Foxes + if(ncontest.eq.7.and.f1.gt.950.0) cycle ! Hounds use AP only for signals below 950 Hz if(iaptype.ge.2 .and. apsym(1).gt.1) cycle ! No, or nonstandard, mycall if(iaptype.ge.3 .and. apsym(30).gt.1) cycle ! No, or nonstandard, dxcall @@ -276,7 +279,8 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & 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) + if(ncontest.eq.5) llrd(1:29)=apmag*mcqww(1:29) + if(ncontest.eq.7) llrd(1:29)=apmag*mcq(1:29) apmask(75:77)=1 llrd(75:76)=apmag*(-1) llrd(77)=apmag*(+1) @@ -284,7 +288,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & if(iaptype.eq.2) then ! MyCall,???,??? apmask=0 - if(ncontest.eq.0.or.ncontest.eq.1) then + if(ncontest.eq.0.or.ncontest.eq.1.or.ncontest.eq.5) then apmask(1:29)=1 llrd(1:29)=apmag*apsym(1:29) apmask(75:77)=1 @@ -322,7 +326,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & 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.or.ncontest.eq.5.or.ncontest.eq.7) then apmask(1:58)=1 llrd(1:58)=apmag*apsym apmask(75:77)=1 @@ -335,7 +339,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & apmask(72:74)=1 apmask(75:77)=1 llrd(75:77)=apmag*(-1) - else if(ncontest.eq.4) then ! RTTY RU + else if(ncontest.eq.4) then apmask(2:57)=1 llrd(2:29)=apmag*apsym(1:28) llrd(30:57)=apmag*apsym(30:57) @@ -345,16 +349,16 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & endif endif - if(iaptype.eq.5.and.ncontest.eq.6) cycle !Hound + if(iaptype.eq.5.and.ncontest.eq.7) 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 + if(ncontest.le.5 .or. (ncontest.eq.7.and.iaptype.eq.6)) then apmask(1:77)=1 ! mycall, hiscall, RRR|73|RR73 llrd(1:58)=apmag*apsym 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;... + else if(ncontest.eq.7.and.iaptype.eq.4) then ! Hound listens for MyCall RR73;... apmask(1:28)=1 llrd(1:28)=apmag*apsym(1:28) apmask(72:77)=1 diff --git a/lib/hspec.f90 b/lib/hspec.f90 index da30e0211..d041ba77a 100644 --- a/lib/hspec.f90 +++ b/lib/hspec.f90 @@ -8,7 +8,7 @@ subroutine hspec(id2,k,nutc0,ntrpdepth,nrxfreq,ntol,ncontest,bmsk144, & ! ntrpdepth TR period and 1000*ndepth ! nrxfreq Rx audio center frequency ! ntol Decoding range is +/- ntol -! ncontest Contest type (0=NONE 1=NA_VHF 2=EU_VHF 3=FIELD_DAY 4=RTTY) +! ncontest Contest type (0=NONE 1=NA_VHF 2=EU_VHF 3=FIELD_DAY 4=RTTY 5=WW_DIGI) ! bmsk144 Boolean, true if in MSK144 mode ! btrain Boolean, turns on training in MSK144 mode ! ingain Relative gain for spectra diff --git a/lib/jt9com.f90 b/lib/jt9com.f90 index 46829f09c..c595582d6 100644 --- a/lib/jt9com.f90 +++ b/lib/jt9com.f90 @@ -46,7 +46,6 @@ character(kind=c_char) :: mygrid(6) character(kind=c_char) :: hiscall(12) character(kind=c_char) :: hisgrid(6) - character(kind=c_char) :: cqstr(4) end type params_block type, bind(C) :: dec_data diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index 14c92358b..c79133677 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -137,7 +137,7 @@ void LogQSO::accept() using SpOp = Configuration::SpecialOperatingActivity; auto special_op = m_config->special_op_id (); - if (special_op == SpOp::NA_VHF) { + if (special_op == SpOp::NA_VHF or special_op == SpOp::WW_DIGI) { if(xrcvd!="" and hisGrid!=xrcvd) hisGrid=xrcvd; } diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index f1d240723..b9aa79e53 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1247,7 +1247,7 @@ void MainWindow::checkMSK144ContestType() if(m_mode=="MSK144" && SpecOp::EU_VHF < m_config.special_op_id()) { MessageBox::warning_message (this, tr ("Improper mode"), - "Mode will be changed to FT8. MSK144 not available if Fox, Hound, Field Day, or RTTY contest is selected."); + "Mode will be changed to FT8. MSK144 not available if Field Day, WW Digi, RTTY or Fox/Hound is selected."); on_actionFT8_triggered(); } } @@ -2933,7 +2933,6 @@ void MainWindow::decode() //decode() QString hisGrid {ui->dxGridEntry->text ()}; memcpy(dec_data.params.hiscall,(hisCall + " ").toLatin1 ().constData (), sizeof dec_data.params.hiscall); memcpy(dec_data.params.hisgrid,(hisGrid + " ").toLatin1 ().constData (), sizeof dec_data.params.hisgrid); - memcpy(dec_data.params.cqstr,(m_cqStr + " ").toLatin1 ().constData (), sizeof dec_data.params.cqstr); //newdat=1 ==> this is new data, must do the big FFT //nagain=1 ==> decode only at fQSO +/- Tol @@ -3961,7 +3960,8 @@ void MainWindow::guiUpdate() if(ui->txrb1->isEnabled() and (SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::FIELD_DAY==m_config.special_op_id() or - SpecOp::RTTY==m_config.special_op_id()) ) { + SpecOp::RTTY==m_config.special_op_id() or + SpecOp::WW_DIGI==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); @@ -4576,7 +4576,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie 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()){ + if(SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id()){ gen_msg=setTxMsg(3); m_QSOProgress=ROGER_REPORT; } else { @@ -4667,7 +4667,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie ((r.toInt()>=-50 && r.toInt()<=49) or (r.toInt()>=529 && r.toInt()<=599))) { if(SpecOp::EU_VHF==m_config.special_op_id() or SpecOp::FIELD_DAY==m_config.special_op_id() or - SpecOp::RTTY==m_config.special_op_id()) { + SpecOp::RTTY==m_config.special_op_id()) { gen_msg=setTxMsg(2); m_QSOProgress=REPORT; } else { @@ -4940,10 +4940,8 @@ void MainWindow::genCQMsg () if(SpecOp::NA_VHF == m_config.special_op_id()) m_cqStr="TEST"; if(SpecOp::EU_VHF == m_config.special_op_id()) m_cqStr="TEST"; if(SpecOp::FIELD_DAY == m_config.special_op_id()) m_cqStr="FD"; - if(SpecOp::RTTY == m_config.special_op_id()) { - if(m_config.RTTY_Exchange()!="SCC") m_cqStr="RU"; - if(m_config.RTTY_Exchange()=="SCC") m_cqStr="SCC"; - } + if(SpecOp::RTTY == m_config.special_op_id()) m_cqStr="RU"; + if(SpecOp::WW_DIGI == m_config.special_op_id()) m_cqStr="WW"; if( tlist.at(1)==m_config.my_callsign() ) { t="CQ " + m_cqStr + " " + tlist.at(1) + " " + tlist.at(2); } else { @@ -5044,8 +5042,9 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) msgtype(t0a + my_grid, ui->tx1); } if(SpecOp::NA_VHF==m_config.special_op_id()) sent=my_grid; + if(SpecOp::WW_DIGI==m_config.special_op_id()) sent=my_grid; if(SpecOp::FIELD_DAY==m_config.special_op_id()) sent=m_config.Field_Day_Exchange(); - if(SpecOp::RTTY==m_config.special_op_id()) { + if(SpecOp::RTTY==m_config.special_op_id()) { sent=rst + m_config.RTTY_Exchange(); QString t1=m_config.RTTY_Exchange(); if(t1=="DX" or t1=="#") { @@ -5547,6 +5546,10 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button m_rptSent=m_xSent.split(" ").at(0); m_rptRcvd=m_xRcvd.split(" ").at(0); break; + case SpecOp::WW_DIGI: + m_xSent=m_config.my_grid().left(4); + m_xRcvd=m_hisGrid; + break; default: break; } @@ -5593,8 +5596,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 (); m_dateTimeQSOOn = QDateTime {}; auto special_op = m_config.special_op_id (); - if (SpecOp::NONE < special_op && special_op < SpecOp::FOX && - m_config.RTTY_Exchange()!="SCC") { + if (SpecOp::NONE < special_op && special_op < SpecOp::FOX) { ui->sbSerialNumber->setValue(ui->sbSerialNumber->value() + 1); } @@ -5667,9 +5669,9 @@ void MainWindow::displayWidgets(qint64 n) 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()=="#" or - m_config.RTTY_Exchange()=="SCC")); + 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()=="#") ); } if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_config.special_op_id(); ui->sbSerialNumber->setVisible(b); @@ -5804,6 +5806,7 @@ void MainWindow::on_actionFT8_triggered() 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(SpecOp::WW_DIGI==m_config.special_op_id()) t0+="WW_DIGI"; if(t0=="") { ui->labDXped->setVisible(false); } else { @@ -8780,6 +8783,7 @@ void MainWindow::chkFT4() 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(SpecOp::WW_DIGI==m_config.special_op_id()) t0+="WW_DIGI"; if(t0=="") { ui->labDXped->setVisible(false); } else {