mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-21 11:31:51 -05:00
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.
This commit is contained in:
parent
9aaffb9252
commit
70b84478f0
@ -1084,6 +1084,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
|
||||
ui_->special_op_activity_button_group->setId (ui_->rbEU_VHF_Contest, static_cast<int> (SpecialOperatingActivity::EU_VHF));
|
||||
ui_->special_op_activity_button_group->setId (ui_->rbField_Day, static_cast<int> (SpecialOperatingActivity::FIELD_DAY));
|
||||
ui_->special_op_activity_button_group->setId (ui_->rbRTTY_Roundup, static_cast<int> (SpecialOperatingActivity::RTTY));
|
||||
ui_->special_op_activity_button_group->setId (ui_->rbWW_DIGI, static_cast<int> (SpecialOperatingActivity::WW_DIGI));
|
||||
ui_->special_op_activity_button_group->setId (ui_->rbFox, static_cast<int> (SpecialOperatingActivity::FOX));
|
||||
ui_->special_op_activity_button_group->setId (ui_->rbHound, static_cast<int> (SpecialOperatingActivity::HOUND));
|
||||
|
||||
|
@ -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
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>554</width>
|
||||
<height>563</height>
|
||||
<width>670</width>
|
||||
<height>617</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -559,7 +559,7 @@ quiet period when decoding is done.</string>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="currentText">
|
||||
<property name="currentText" stdset="0">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="insertPolicy">
|
||||
@ -1021,7 +1021,7 @@ other hardware interface for PTT.</string>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="currentText">
|
||||
<property name="currentText" stdset="0">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
@ -2261,9 +2261,6 @@ Right click for insert and delete options.</string>
|
||||
<property name="toolTip">
|
||||
<string><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></string>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
@ -2572,6 +2569,19 @@ Right click for insert and delete options.</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" rowspan="3">
|
||||
<spacer name="horizontalSpacer_11">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="3">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_18" stretch="2,1,1">
|
||||
<item>
|
||||
@ -2635,19 +2645,6 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1" rowspan="3">
|
||||
<spacer name="horizontalSpacer_11">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_17" stretch="2,1,1">
|
||||
<item>
|
||||
@ -2711,6 +2708,25 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QRadioButton" name="rbWW_DIGI">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>18</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>World-Wide Digi-mode contest</p><p><br/></p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>WW Digi Contest</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">special_op_activity_button_group</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -3093,12 +3109,12 @@ Right click for insert and delete options.</string>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="split_mode_button_group"/>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="special_op_activity_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
@ -65,7 +65,6 @@ extern struct dec_data {
|
||||
char mygrid[6];
|
||||
char hiscall[12];
|
||||
char hisgrid[6];
|
||||
char cqstr[4];
|
||||
} params;
|
||||
} dec_data;
|
||||
|
||||
|
@ -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('<DecodeFinished>',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:),' ')
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
@ -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,6 +5042,7 @@ 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()) {
|
||||
sent=rst + m_config.RTTY_Exchange();
|
||||
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user