mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-03-28 15:09:02 -04:00
Merge branch 'develop' of bitbucket.org:k1jt/wsjtx into develop
This commit is contained in:
commit
65dd843bfb
@ -107,6 +107,12 @@ OmniRigTransceiver::OmniRigTransceiver (std::unique_ptr<TransceiverBase> wrapped
|
|||||||
, send_update_signal_ {false}
|
, send_update_signal_ {false}
|
||||||
, reversed_ {false}
|
, reversed_ {false}
|
||||||
{
|
{
|
||||||
|
CoInitializeEx (nullptr, 0 /*COINIT_APARTMENTTHREADED*/); // required because Qt only does this for GUI thread
|
||||||
|
}
|
||||||
|
|
||||||
|
OmniRigTransceiver::~OmniRigTransceiver ()
|
||||||
|
{
|
||||||
|
CoUninitialize ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns false on time out
|
// returns false on time out
|
||||||
@ -121,9 +127,8 @@ bool OmniRigTransceiver::await_notification_with_timeout (int timeout)
|
|||||||
int OmniRigTransceiver::do_start ()
|
int OmniRigTransceiver::do_start ()
|
||||||
{
|
{
|
||||||
TRACE_CAT ("OmniRigTransceiver", "starting");
|
TRACE_CAT ("OmniRigTransceiver", "starting");
|
||||||
if (wrapped_) wrapped_->start (0);
|
|
||||||
|
|
||||||
CoInitializeEx (nullptr, 0 /*COINIT_APARTMENTTHREADED*/); // required because Qt only does this for GUI thread
|
if (wrapped_) wrapped_->start (0);
|
||||||
|
|
||||||
omni_rig_.reset (new OmniRig::OmniRigX {this});
|
omni_rig_.reset (new OmniRig::OmniRigX {this});
|
||||||
if (omni_rig_->isNull ())
|
if (omni_rig_->isNull ())
|
||||||
@ -315,18 +320,19 @@ void OmniRigTransceiver::do_stop ()
|
|||||||
port_->clear ();
|
port_->clear ();
|
||||||
port_.reset ();
|
port_.reset ();
|
||||||
}
|
}
|
||||||
if (omni_rig_)
|
if (omni_rig_ && !omni_rig_->isNull ())
|
||||||
{
|
{
|
||||||
if (rig_)
|
if (rig_ && !rig_->isNull ())
|
||||||
{
|
{
|
||||||
rig_->clear ();
|
rig_->clear ();
|
||||||
rig_.reset ();
|
rig_.reset ();
|
||||||
}
|
}
|
||||||
omni_rig_->clear ();
|
omni_rig_->clear ();
|
||||||
omni_rig_.reset ();
|
omni_rig_.reset ();
|
||||||
CoUninitialize ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wrapped_) wrapped_->stop ();
|
if (wrapped_) wrapped_->stop ();
|
||||||
|
|
||||||
TRACE_CAT ("OmniRigTransceiver", "stopped");
|
TRACE_CAT ("OmniRigTransceiver", "stopped");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,7 +350,6 @@ void OmniRigTransceiver::handle_visible_change ()
|
|||||||
|
|
||||||
void OmniRigTransceiver::handle_rig_type_change (int rig_number)
|
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);
|
TRACE_CAT ("OmniRigTransceiver", "rig type change: rig =" << rig_number);
|
||||||
if (rig_number_ == rig_number)
|
if (rig_number_ == rig_number)
|
||||||
{
|
{
|
||||||
@ -361,7 +366,6 @@ void OmniRigTransceiver::handle_rig_type_change (int rig_number)
|
|||||||
|
|
||||||
void OmniRigTransceiver::handle_status_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 ());
|
TRACE_CAT ("OmniRigTransceiver", QString {"status change for rig %1"}.arg (rig_number).toLocal8Bit ());
|
||||||
if (rig_number_ == rig_number)
|
if (rig_number_ == rig_number)
|
||||||
{
|
{
|
||||||
@ -394,7 +398,6 @@ void OmniRigTransceiver::handle_status_change (int rig_number)
|
|||||||
|
|
||||||
void OmniRigTransceiver::handle_params_change (int rig_number, int params)
|
void OmniRigTransceiver::handle_params_change (int rig_number, int params)
|
||||||
{
|
{
|
||||||
if (!omni_rig_ || omni_rig_->isNull ()) return;
|
|
||||||
TRACE_CAT ("OmniRigTransceiver", QString {"params change: params = 0x%1 for rig %2"}
|
TRACE_CAT ("OmniRigTransceiver", QString {"params change: params = 0x%1 for rig %2"}
|
||||||
.arg (params, 8, 16, QChar ('0'))
|
.arg (params, 8, 16, QChar ('0'))
|
||||||
.arg (rig_number).toLocal8Bit ()
|
.arg (rig_number).toLocal8Bit ()
|
||||||
@ -647,7 +650,6 @@ void OmniRigTransceiver::handle_custom_reply (int rig_number, QVariant const& co
|
|||||||
(void)command;
|
(void)command;
|
||||||
(void)reply;
|
(void)reply;
|
||||||
|
|
||||||
if (!omni_rig_ || omni_rig_->isNull ()) return;
|
|
||||||
if (rig_number_ == rig_number)
|
if (rig_number_ == rig_number)
|
||||||
{
|
{
|
||||||
if (!rig_ || rig_->isNull ()) return;
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
@ -664,11 +666,14 @@ void OmniRigTransceiver::do_ptt (bool on)
|
|||||||
if (use_for_ptt_ && TransceiverFactory::PTT_method_CAT == ptt_type_)
|
if (use_for_ptt_ && TransceiverFactory::PTT_method_CAT == ptt_type_)
|
||||||
{
|
{
|
||||||
TRACE_CAT ("OmniRigTransceiver", "set PTT");
|
TRACE_CAT ("OmniRigTransceiver", "set PTT");
|
||||||
rig_->SetTx (on ? OmniRig::PM_TX : OmniRig::PM_RX);
|
if (rig_ && !rig_->isNull ())
|
||||||
|
{
|
||||||
|
rig_->SetTx (on ? OmniRig::PM_TX : OmniRig::PM_RX);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (port_)
|
if (port_ && !port_->isNull ())
|
||||||
{
|
{
|
||||||
if (TransceiverFactory::PTT_method_RTS == ptt_type_)
|
if (TransceiverFactory::PTT_method_RTS == ptt_type_)
|
||||||
{
|
{
|
||||||
@ -695,6 +700,7 @@ void OmniRigTransceiver::do_ptt (bool on)
|
|||||||
void OmniRigTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/)
|
void OmniRigTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/)
|
||||||
{
|
{
|
||||||
TRACE_CAT ("OmniRigTransceiver", f << state ());
|
TRACE_CAT ("OmniRigTransceiver", f << state ());
|
||||||
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
if (UNK != m)
|
if (UNK != m)
|
||||||
{
|
{
|
||||||
do_mode (m);
|
do_mode (m);
|
||||||
@ -723,6 +729,7 @@ void OmniRigTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/)
|
|||||||
void OmniRigTransceiver::do_tx_frequency (Frequency tx, MODE m, bool /*no_ignore*/)
|
void OmniRigTransceiver::do_tx_frequency (Frequency tx, MODE m, bool /*no_ignore*/)
|
||||||
{
|
{
|
||||||
TRACE_CAT ("OmniRigTransceiver", tx << state ());
|
TRACE_CAT ("OmniRigTransceiver", tx << state ());
|
||||||
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
bool split {tx != 0};
|
bool split {tx != 0};
|
||||||
if (split)
|
if (split)
|
||||||
{
|
{
|
||||||
@ -787,6 +794,7 @@ void OmniRigTransceiver::do_tx_frequency (Frequency tx, MODE m, bool /*no_ignore
|
|||||||
void OmniRigTransceiver::do_mode (MODE mode)
|
void OmniRigTransceiver::do_mode (MODE mode)
|
||||||
{
|
{
|
||||||
TRACE_CAT ("OmniRigTransceiver", mode << state ());
|
TRACE_CAT ("OmniRigTransceiver", mode << state ());
|
||||||
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
// TODO: G4WJS OmniRig doesn't seem to have any capability of tracking/setting VFO B mode
|
// TODO: G4WJS OmniRig doesn't seem to have any capability of tracking/setting VFO B mode
|
||||||
auto mapped = map_mode (mode);
|
auto mapped = map_mode (mode);
|
||||||
if (mapped & writable_params_)
|
if (mapped & writable_params_)
|
||||||
|
@ -32,6 +32,7 @@ public:
|
|||||||
|
|
||||||
// takes ownership of wrapped Transceiver
|
// takes ownership of wrapped Transceiver
|
||||||
explicit OmniRigTransceiver (std::unique_ptr<TransceiverBase> wrapped, RigNumber, TransceiverFactory::PTTMethod ptt_type, QString const& ptt_port, QObject * parent = nullptr);
|
explicit OmniRigTransceiver (std::unique_ptr<TransceiverBase> wrapped, RigNumber, TransceiverFactory::PTTMethod ptt_type, QString const& ptt_port, QObject * parent = nullptr);
|
||||||
|
~OmniRigTransceiver ();
|
||||||
|
|
||||||
int do_start () override;
|
int do_start () override;
|
||||||
void do_stop () override;
|
void do_stop () override;
|
||||||
|
@ -59,8 +59,10 @@ be attempted in each state.
|
|||||||
|CALLING CQ | 1, 2
|
|CALLING CQ | 1, 2
|
||||||
|===========================================
|
|===========================================
|
||||||
|
|
||||||
Decoding with _a priori_ information behaves slightly differently
|
Decoding with _a priori_ information behaves slightly differently in
|
||||||
in JT65. Some details are provided in Tables 3 and 4.
|
JT65. Some details are provided in Tables 3 and 4. Notations such as
|
||||||
|
`a63`, use a second digit to indicate the number of Rx intervals
|
||||||
|
averaged to obtain the decode.
|
||||||
|
|
||||||
[[JT65_AP_INFO_TABLE]]
|
[[JT65_AP_INFO_TABLE]]
|
||||||
.JT65 AP information types
|
.JT65 AP information types
|
||||||
|
@ -93,6 +93,7 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
|||||||
|
|
||||||
call timer('dec65b ',0)
|
call timer('dec65b ',0)
|
||||||
qualbest=0.
|
qualbest=0.
|
||||||
|
nftbest=0
|
||||||
qual0=-1.e30
|
qual0=-1.e30
|
||||||
minsmo=0
|
minsmo=0
|
||||||
maxsmo=0
|
maxsmo=0
|
||||||
@ -126,7 +127,6 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
|||||||
call decode65b(s2,nflip,nadd,mode65,ntrials,naggressive,ndepth, &
|
call decode65b(s2,nflip,nadd,mode65,ntrials,naggressive,ndepth, &
|
||||||
mycall,hiscall,hisgrid,nQSOProgress,ljt65apon,nqd,nft,qual, &
|
mycall,hiscall,hisgrid,nQSOProgress,ljt65apon,nqd,nft,qual, &
|
||||||
nhist,decoded)
|
nhist,decoded)
|
||||||
|
|
||||||
if(nft.eq.1) then
|
if(nft.eq.1) then
|
||||||
nsmo=ismo
|
nsmo=ismo
|
||||||
param(9)=nsmo
|
param(9)=nsmo
|
||||||
@ -138,18 +138,20 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
|||||||
qualbest=qual
|
qualbest=qual
|
||||||
nnbest=nn
|
nnbest=nn
|
||||||
nsmobest=ismo
|
nsmobest=ismo
|
||||||
|
nftbest=nft
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if(qual.lt.qual0) exit
|
if(qual.lt.qual0) exit
|
||||||
qual0=qual
|
qual0=qual
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if(nft.eq.2) then
|
if(nftbest.eq.2) then
|
||||||
decoded=decoded_best
|
decoded=decoded_best
|
||||||
qual=qualbest
|
qual=qualbest
|
||||||
nsmo=nsmobest
|
nsmo=nsmobest
|
||||||
param(9)=nsmo
|
param(9)=nsmo
|
||||||
nn=nnbest
|
nn=nnbest
|
||||||
|
nft=nftbest
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call timer('dec65b ',1)
|
call timer('dec65b ',1)
|
||||||
|
@ -21,7 +21,7 @@ subroutine decode65b(s2,nflip,nadd,mode65,ntrials,naggressive,ndepth, &
|
|||||||
|
|
||||||
call extract(s3,nadd,mode65,ntrials,naggressive,ndepth,nflip,mycall, &
|
call extract(s3,nadd,mode65,ntrials,naggressive,ndepth,nflip,mycall, &
|
||||||
hiscall,hisgrid,nQSOProgress,ljt65apon,ncount, &
|
hiscall,hisgrid,nQSOProgress,ljt65apon,ncount, &
|
||||||
nhist,decoded,ltext,nft,qual)
|
nhist,decoded,ltext,nft,qual)
|
||||||
|
|
||||||
! Suppress "birdie messages" and other garbage decodes:
|
! Suppress "birdie messages" and other garbage decodes:
|
||||||
if(decoded(1:7).eq.'000AAA ') ncount=-1
|
if(decoded(1:7).eq.'000AAA ') ncount=-1
|
||||||
|
@ -407,7 +407,9 @@ contains
|
|||||||
1011 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' QRA64',i3)
|
1011 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' QRA64',i3)
|
||||||
go to 100
|
go to 100
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
! write(*,3001) ft,nsum,qual,sync,bVHF
|
||||||
|
!3001 format('a',3i3,f5.1,L3)
|
||||||
if(ft.eq.0 .and. minsync.ge.0 .and. int(sync).lt.minsync) then
|
if(ft.eq.0 .and. minsync.ge.0 .and. int(sync).lt.minsync) then
|
||||||
write(*,1010) params%nutc,snr,dt,freq
|
write(*,1010) params%nutc,snr,dt,freq
|
||||||
else
|
else
|
||||||
@ -415,18 +417,19 @@ contains
|
|||||||
if(bVHF .and. ft.gt.0) then
|
if(bVHF .and. ft.gt.0) then
|
||||||
cflags='f '
|
cflags='f '
|
||||||
if(is_deep) then
|
if(is_deep) then
|
||||||
cflags(1:2)='d1'
|
cflags='d '
|
||||||
write(cflags(3:3),'(i1)') min(qual,9)
|
write(cflags(2:2),'(i1)') min(qual,9)
|
||||||
if(qual.ge.10) cflags(3:3)='*'
|
if(qual.ge.10) cflags(2:2)='*'
|
||||||
if(qual.lt.3) decoded(22:22)='?'
|
if(qual.lt.3) decoded(22:22)='?'
|
||||||
endif
|
endif
|
||||||
if(is_average) then
|
if(is_average) then
|
||||||
write(cflags(2:2),'(i1)') min(nsum,9)
|
write(cflags(3:3),'(i1)') min(nsum,9)
|
||||||
if(nsum.ge.10) cflags(2:2)='*'
|
if(nsum.ge.10) cflags(3:3)='*'
|
||||||
endif
|
endif
|
||||||
nap=ishft(ft,-2)
|
nap=ishft(ft,-2)
|
||||||
if(nap.ne.0) then
|
if(nap.ne.0) then
|
||||||
write(cflags(1:3),'(a1,i1)') 'a',nap
|
if(nsum.lt.2) write(cflags(1:3),'(a1,i1," ")') 'a',nap
|
||||||
|
if(nsum.ge.2) write(cflags(1:3),'(a1,2i1)') 'a',nap,min(nsum,9)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
csync='# '
|
csync='# '
|
||||||
@ -445,6 +448,12 @@ contains
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
n=len(trim(decoded))
|
||||||
|
if(n.eq.2 .or. n.eq.3) csync='# '
|
||||||
|
if(cflags(1:1).eq.'f') then
|
||||||
|
cflags(2:2)=cflags(3:3)
|
||||||
|
cflags(3:3)=' '
|
||||||
|
endif
|
||||||
write(*,1010) params%nutc,snr,dt,freq,csync,decoded,cflags
|
write(*,1010) params%nutc,snr,dt,freq,csync,decoded,cflags
|
||||||
1010 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,1x,a3)
|
1010 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,1x,a3)
|
||||||
endif
|
endif
|
||||||
|
@ -179,7 +179,6 @@ subroutine extract(s3,nadd,mode65,ntrials,naggressive,ndepth,nflip, &
|
|||||||
|
|
||||||
if(nft.gt.0) exit
|
if(nft.gt.0) exit
|
||||||
enddo
|
enddo
|
||||||
!write(*,*) nft
|
|
||||||
if(nft.eq.0 .and. iand(ndepth,32).eq.32) then
|
if(nft.eq.0 .and. iand(ndepth,32).eq.32) then
|
||||||
qmin=2.0 - 0.1*naggressive
|
qmin=2.0 - 0.1*naggressive
|
||||||
call timer('hint65 ',0)
|
call timer('hint65 ',0)
|
||||||
|
@ -76,7 +76,7 @@ contains
|
|||||||
character*22 decoded
|
character*22 decoded
|
||||||
end type accepted_decode
|
end type accepted_decode
|
||||||
type(accepted_decode) dec(50)
|
type(accepted_decode) dec(50)
|
||||||
logical :: first_time,prtavg,single_decode,bVHF
|
logical :: first_time,prtavg,single_decode,bVHF,clear_avg65
|
||||||
|
|
||||||
integer h0(0:11),d0(0:11)
|
integer h0(0:11),d0(0:11)
|
||||||
real r0(0:11)
|
real r0(0:11)
|
||||||
@ -90,7 +90,7 @@ contains
|
|||||||
|
|
||||||
! 0 1 2 3 4 5 6 7 8 9 10 11
|
! 0 1 2 3 4 5 6 7 8 9 10 11
|
||||||
data r0/0.70,0.72,0.74,0.76,0.78,0.80,0.82,0.84,0.86,0.88,0.90,0.90/
|
data r0/0.70,0.72,0.74,0.76,0.78,0.80,0.82,0.84,0.86,0.88,0.90,0.90/
|
||||||
data nutc0/-999/,nfreq0/-999/,nsave/0/
|
data nutc0/-999/,nfreq0/-999/,nsave/0/,clear_avg65/.true./
|
||||||
save
|
save
|
||||||
|
|
||||||
this%callback => callback
|
this%callback => callback
|
||||||
@ -208,6 +208,7 @@ contains
|
|||||||
if(clearave) then
|
if(clearave) then
|
||||||
nsum=0
|
nsum=0
|
||||||
nsave=0
|
nsave=0
|
||||||
|
clear_avg65=.true.
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(bVHF) then
|
if(bVHF) then
|
||||||
@ -235,19 +236,20 @@ contains
|
|||||||
naggressive,ndepth,ntol,mycall,hiscall,hisgrid,nQSOProgress, &
|
naggressive,ndepth,ntol,mycall,hiscall,hisgrid,nQSOProgress, &
|
||||||
ljt65apon,bVHF,sync2,a,dtx,nft,nspecial,qual, &
|
ljt65apon,bVHF,sync2,a,dtx,nft,nspecial,qual, &
|
||||||
nhist,nsmo,decoded)
|
nhist,nsmo,decoded)
|
||||||
|
call timer('decod65a',1)
|
||||||
|
if(nspecial.eq.0 .and. sync1.eq.5.0 .and. dtx.eq.2.5) cycle
|
||||||
if(nspecial.eq.2) decoded='RO'
|
if(nspecial.eq.2) decoded='RO'
|
||||||
if(nspecial.eq.3) decoded='RRR'
|
if(nspecial.eq.3) decoded='RRR'
|
||||||
if(nspecial.eq.4) decoded='73'
|
if(nspecial.eq.4) decoded='73'
|
||||||
call timer('decod65a',1)
|
|
||||||
if(sync1.lt.float(minsync) .and. &
|
if(sync1.lt.float(minsync) .and. &
|
||||||
decoded.eq.' ') nflip=0
|
decoded.eq.' ') nflip=0
|
||||||
if(nft.ne.0) nsum=1
|
if(nft.ne.0) nsum=1
|
||||||
|
|
||||||
nhard_min=param(1)
|
nhard_min=param(1)
|
||||||
nrtt1000=param(4)
|
nrtt1000=param(4)
|
||||||
ntotal_min=param(5)
|
ntotal_min=param(5)
|
||||||
nsmo=param(9)
|
nsmo=param(9)
|
||||||
|
|
||||||
nfreq=nint(freq+a(1))
|
nfreq=nint(freq+a(1))
|
||||||
ndrift=nint(2.0*a(2))
|
ndrift=nint(2.0*a(2))
|
||||||
if(bVHF) then
|
if(bVHF) then
|
||||||
@ -262,9 +264,9 @@ contains
|
|||||||
if(nsnr.lt.-30) nsnr=-30
|
if(nsnr.lt.-30) nsnr=-30
|
||||||
if(nsnr.gt.-1) nsnr=-1
|
if(nsnr.gt.-1) nsnr=-1
|
||||||
nftt=0
|
nftt=0
|
||||||
|
|
||||||
!********* DOES THIS STILL WORK WHEN NFT INCLUDES # OF AP SYMBOLS USED??
|
!********* DOES THIS STILL WORK WHEN NFT INCLUDES # OF AP SYMBOLS USED??
|
||||||
if(nft.ne.1 .and. iand(ndepth,16).eq.16 .and. (.not.prtavg)) then
|
if(nft.ne.1 .and. iand(ndepth,16).eq.16 .and. &
|
||||||
|
sync1.ge.float(minsync) .and. (.not.prtavg)) then
|
||||||
! Single-sequence FT decode failed, so try for an average FT decode.
|
! Single-sequence FT decode failed, so try for an average FT decode.
|
||||||
if(nutc.ne.nutc0 .or. abs(nfreq-nfreq0).gt.ntol) then
|
if(nutc.ne.nutc0 .or. abs(nfreq-nfreq0).gt.ntol) then
|
||||||
! This is a new minute or a new frequency, so call avg65.
|
! This is a new minute or a new frequency, so call avg65.
|
||||||
@ -273,13 +275,14 @@ contains
|
|||||||
nsave=nsave+1
|
nsave=nsave+1
|
||||||
nsave=mod(nsave-1,64)+1
|
nsave=mod(nsave-1,64)+1
|
||||||
call avg65(nutc,nsave,sync1,dtx,nflip,nfreq,mode65,ntol, &
|
call avg65(nutc,nsave,sync1,dtx,nflip,nfreq,mode65,ntol, &
|
||||||
ndepth,nagain,ntrials,naggressive,clearave,neme,mycall, &
|
ndepth,nagain,ntrials,naggressive,clear_avg65,neme, &
|
||||||
hiscall,hisgrid,nftt,avemsg,qave,deepave,nsum,ndeepave, &
|
mycall,hiscall,hisgrid,nftt,avemsg,qave,deepave,nsum, &
|
||||||
nQSOProgress,ljt65apon)
|
ndeepave,nQSOProgress,ljt65apon)
|
||||||
nsmo=param(9)
|
nsmo=param(9)
|
||||||
nqave=int(qave)
|
nqave=int(qave)
|
||||||
|
|
||||||
if (associated(this%callback) .and. nsum.ge.2) then
|
if (associated(this%callback) .and.nftt.ge.1 .and. nsum.ge.2) then
|
||||||
|
! Display a decoded message obtained by averaging 2 or more transmissions
|
||||||
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
||||||
nflip,width,avemsg,nftt,nqave,nsmo,nsum,minsync)
|
nflip,width,avemsg,nftt,nqave,nsmo,nsum,minsync)
|
||||||
prtavg=.true.
|
prtavg=.true.
|
||||||
@ -288,14 +291,15 @@ contains
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(nftt.eq.1) then
|
if(nftt.eq.0) go to 5
|
||||||
! nft=1
|
! if(nftt.eq.1) then
|
||||||
decoded=avemsg
|
!! nft=1
|
||||||
go to 5
|
! decoded=avemsg
|
||||||
endif
|
! go to 5
|
||||||
|
! endif
|
||||||
n=naggressive
|
n=naggressive
|
||||||
rtt=0.001*nrtt1000
|
rtt=0.001*nrtt1000
|
||||||
if(nft.lt.2 .and. minsync.ge.0 .and. nspecial.eq.0) then
|
if(nft.lt.2 .and. minsync.ge.0 .and. nspecial.eq.0 .and. .not.bVHF) then
|
||||||
if(nhard_min.gt.50) cycle
|
if(nhard_min.gt.50) cycle
|
||||||
if(nhard_min.gt.h0(n)) cycle
|
if(nhard_min.gt.h0(n)) cycle
|
||||||
if(ntotal_min.gt.d0(n)) cycle
|
if(ntotal_min.gt.d0(n)) cycle
|
||||||
@ -305,7 +309,8 @@ contains
|
|||||||
5 continue
|
5 continue
|
||||||
if(decoded.eq.decoded0 .and. abs(freq-freq0).lt. 3.0 .and. &
|
if(decoded.eq.decoded0 .and. abs(freq-freq0).lt. 3.0 .and. &
|
||||||
minsync.ge.0) cycle !Don't display dupes
|
minsync.ge.0) cycle !Don't display dupes
|
||||||
if(decoded.ne.' ' .or. minsync.lt.0) then
|
! if(decoded.ne.' ' .or. minsync.lt.0) then
|
||||||
|
if(decoded.ne.' ' .or. bVHF) then
|
||||||
if(nsubtract.eq.1) then
|
if(nsubtract.eq.1) then
|
||||||
call timer('subtr65 ',0)
|
call timer('subtr65 ',0)
|
||||||
call subtract65(dd,npts,freq,dtx)
|
call subtract65(dd,npts,freq,dtx)
|
||||||
@ -319,7 +324,7 @@ contains
|
|||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
if(ndupe.ne.1 .and. sync1.ge.float(minsync)) then
|
if(ndupe.ne.1 .and. ((sync1.ge.float(minsync)) .or. bVHF)) then
|
||||||
if(ipass.eq.1) n65a=n65a + 1
|
if(ipass.eq.1) n65a=n65a + 1
|
||||||
if(ipass.eq.2) n65b=n65b + 1
|
if(ipass.eq.2) n65b=n65b + 1
|
||||||
if(ndecoded.lt.50) ndecoded=ndecoded+1
|
if(ndecoded.lt.50) ndecoded=ndecoded+1
|
||||||
@ -329,7 +334,7 @@ contains
|
|||||||
dec(ndecoded)%decoded=decoded
|
dec(ndecoded)%decoded=decoded
|
||||||
nqual=min(int(qual),9999)
|
nqual=min(int(qual),9999)
|
||||||
|
|
||||||
if (associated(this%callback)) then
|
if(associated(this%callback)) then
|
||||||
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
||||||
nflip,width,decoded,nft,nqual,nsmo,1,minsync)
|
nflip,width,decoded,nft,nqual,nsmo,1,minsync)
|
||||||
end if
|
end if
|
||||||
@ -345,8 +350,8 @@ contains
|
|||||||
end subroutine decode
|
end subroutine decode
|
||||||
|
|
||||||
subroutine avg65(nutc,nsave,snrsync,dtxx,nflip,nfreq,mode65,ntol,ndepth, &
|
subroutine avg65(nutc,nsave,snrsync,dtxx,nflip,nfreq,mode65,ntol,ndepth, &
|
||||||
nagain, ntrials,naggressive,clearave,neme,mycall,hiscall,hisgrid,nftt, &
|
nagain, ntrials,naggressive,clear_avg65,neme,mycall,hiscall,hisgrid, &
|
||||||
avemsg,qave,deepave,nsum,ndeepave,nQSOProgress,ljt65apon)
|
nftt,avemsg,qave,deepave,nsum,ndeepave,nQSOProgress,ljt65apon)
|
||||||
|
|
||||||
! Decodes averaged JT65 data
|
! Decodes averaged JT65 data
|
||||||
|
|
||||||
@ -369,20 +374,21 @@ contains
|
|||||||
real s3c(64,63)
|
real s3c(64,63)
|
||||||
real dtsave(MAXAVE)
|
real dtsave(MAXAVE)
|
||||||
real syncsave(MAXAVE)
|
real syncsave(MAXAVE)
|
||||||
logical first,clearave,ljt65apon
|
logical first,clear_avg65,ljt65apon
|
||||||
data first/.true./
|
data first/.true./
|
||||||
save
|
save
|
||||||
|
|
||||||
if(first .or. clearave) then
|
if(first .or. clear_avg65) then
|
||||||
iutc=-1
|
iutc=-1
|
||||||
nfsave=0
|
nfsave=0
|
||||||
dtdiff=0.2
|
dtdiff=0.2
|
||||||
first=.false.
|
|
||||||
s3save=0.
|
s3save=0.
|
||||||
s1save=0.
|
s1save=0.
|
||||||
nsave=1 !### ???
|
nsave=1 !### ???
|
||||||
! Silence compiler warnings
|
! Silence compiler warnings
|
||||||
if(nagain .and. ndeepave.eq.-99 .and. neme.eq.-99) stop
|
if(nagain .and. ndeepave.eq.-99 .and. neme.eq.-99) stop
|
||||||
|
first=.false.
|
||||||
|
clear_avg65=.false.
|
||||||
endif
|
endif
|
||||||
|
|
||||||
do i=1,64
|
do i=1,64
|
||||||
@ -398,7 +404,10 @@ contains
|
|||||||
nflipsave(nsave)=nflip
|
nflipsave(nsave)=nflip
|
||||||
s1save(-255:256,1:126,nsave)=s1
|
s1save(-255:256,1:126,nsave)=s1
|
||||||
s3save(1:64,1:63,nsave)=s3a
|
s3save(1:64,1:63,nsave)=s3a
|
||||||
|
avemsg=' '
|
||||||
|
deepbest=' '
|
||||||
|
nfttbest=0
|
||||||
|
|
||||||
10 syncsum=0.
|
10 syncsum=0.
|
||||||
dtsum=0.
|
dtsum=0.
|
||||||
nfsum=0
|
nfsum=0
|
||||||
@ -409,7 +418,7 @@ contains
|
|||||||
|
|
||||||
do i=1,MAXAVE !Consider all saved spectra
|
do i=1,MAXAVE !Consider all saved spectra
|
||||||
cused(i)='.'
|
cused(i)='.'
|
||||||
if(iutc(i).lt.0) cycle
|
if(iutc(i).lt.0) exit
|
||||||
if(mod(iutc(i),2).ne.mod(nutc,2)) cycle !Use only same (odd/even) seq
|
if(mod(iutc(i),2).ne.mod(nutc,2)) cycle !Use only same (odd/even) seq
|
||||||
if(abs(dtxx-dtsave(i)).gt.dtdiff) cycle !DT must match
|
if(abs(dtxx-dtsave(i)).gt.dtdiff) cycle !DT must match
|
||||||
if(abs(nfreq-nfsave(i)).gt.ntol) cycle !Freq must match
|
if(abs(nfreq-nfsave(i)).gt.ntol) cycle !Freq must match
|
||||||
@ -442,7 +451,6 @@ contains
|
|||||||
enddo
|
enddo
|
||||||
if(nsum.lt.2) go to 900
|
if(nsum.lt.2) go to 900
|
||||||
|
|
||||||
nftt=0
|
|
||||||
df=1378.125/512.0
|
df=1378.125/512.0
|
||||||
|
|
||||||
! Do the smoothing loop
|
! Do the smoothing loop
|
||||||
@ -455,6 +463,7 @@ contains
|
|||||||
endif
|
endif
|
||||||
nn=0
|
nn=0
|
||||||
do ismo=minsmo,maxsmo
|
do ismo=minsmo,maxsmo
|
||||||
|
nftt=0
|
||||||
if(ismo.gt.0) then
|
if(ismo.gt.0) then
|
||||||
do j=1,126
|
do j=1,126
|
||||||
call smo121(s1b(-255,j),512)
|
call smo121(s1b(-255,j),512)
|
||||||
@ -492,7 +501,7 @@ contains
|
|||||||
nsmo=ismo
|
nsmo=ismo
|
||||||
param(9)=nsmo
|
param(9)=nsmo
|
||||||
go to 900
|
go to 900
|
||||||
else if(nftt.eq.2) then
|
else if(nftt.ge.2) then
|
||||||
if(qual.gt.qualbest) then
|
if(qual.gt.qualbest) then
|
||||||
deepbest=avemsg
|
deepbest=avemsg
|
||||||
qualbest=qual
|
qualbest=qual
|
||||||
@ -502,7 +511,6 @@ contains
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if(nfttbest.eq.2) then
|
if(nfttbest.eq.2) then
|
||||||
avemsg=deepbest !### ???
|
avemsg=deepbest !### ???
|
||||||
deepave=deepbest
|
deepave=deepbest
|
||||||
@ -512,7 +520,7 @@ contains
|
|||||||
nftt=nfttbest
|
nftt=nfttbest
|
||||||
endif
|
endif
|
||||||
900 continue
|
900 continue
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine avg65
|
end subroutine avg65
|
||||||
|
|
||||||
|
@ -169,23 +169,19 @@ program jt65sim
|
|||||||
if(csubmode.eq.'B' .and. snrdb.eq.0.0) xsnr=-21 - isig
|
if(csubmode.eq.'B' .and. snrdb.eq.0.0) xsnr=-21 - isig
|
||||||
if(csubmode.eq.'C' .and. snrdb.eq.0.0) xsnr=-21 - isig
|
if(csubmode.eq.'C' .and. snrdb.eq.0.0) xsnr=-21 - isig
|
||||||
|
|
||||||
!###
|
|
||||||
! call1="K1ABC"
|
|
||||||
! ic3=65+mod(isig-1,26)
|
|
||||||
! ic2=65+mod((isig-1)/26,26)
|
|
||||||
! ic1=65
|
|
||||||
! call2="W9"//char(ic1)//char(ic2)//char(ic3)
|
|
||||||
! write(msg,1010) call1,call2,nint(xsnr)
|
|
||||||
!1010 format(a5,1x,a5,1x,i3.2)
|
|
||||||
!###
|
|
||||||
call packmsg(msg,dgen,itype) !Pack message into 12 six-bit bytes
|
call packmsg(msg,dgen,itype) !Pack message into 12 six-bit bytes
|
||||||
call rs_encode(dgen,sent) !Encode using RS(63,12)
|
call rs_encode(dgen,sent) !Encode using RS(63,12)
|
||||||
call interleave63(sent,1) !Interleave channel symbols
|
call interleave63(sent,1) !Interleave channel symbols
|
||||||
call graycode65(sent,63,1) !Apply Gray code
|
call graycode65(sent,63,1) !Apply Gray code
|
||||||
|
|
||||||
|
nprc_test=0
|
||||||
|
i1=len(trim(msg))
|
||||||
|
if(i1.gt.10) then
|
||||||
|
if(msg(i1-3:i1).eq.' OOO') nprc_test=1
|
||||||
|
endif
|
||||||
k=0
|
k=0
|
||||||
do j=1,nsym !Insert sync and data into itone()
|
do j=1,nsym !Insert sync and data into itone()
|
||||||
if(nprc(j).eq.0) then
|
if(nprc(j).eq.nprc_test) then
|
||||||
k=k+1
|
k=k+1
|
||||||
itone(j)=sent(k)+2
|
itone(j)=sent(k)+2
|
||||||
else
|
else
|
||||||
|
@ -2468,7 +2468,7 @@ void MainWindow::on_actionCopyright_Notice_triggered()
|
|||||||
"\"The algorithms, source code, look-and-feel of WSJT-X and related "
|
"\"The algorithms, source code, look-and-feel of WSJT-X and related "
|
||||||
"programs, and protocol specifications for the modes FSK441, FT8, JT4, "
|
"programs, and protocol specifications for the modes FSK441, FT8, JT4, "
|
||||||
"JT6M, JT9, JT65, JTMS, QRA64, ISCAT, MSK144 are Copyright (C) "
|
"JT6M, JT9, JT65, JTMS, QRA64, ISCAT, MSK144 are Copyright (C) "
|
||||||
"2001-2019 by one or more of the following authors: Joseph Taylor, "
|
"2001-2020 by one or more of the following authors: Joseph Taylor, "
|
||||||
"K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, "
|
"K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, "
|
||||||
"IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; "
|
"IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; "
|
||||||
"Philip Karn, KA9Q; and other members of the WSJT Development Group.\"");
|
"Philip Karn, KA9Q; and other members of the WSJT Development Group.\"");
|
||||||
@ -2593,15 +2593,15 @@ void MainWindow::on_actionColors_triggered()
|
|||||||
|
|
||||||
void MainWindow::on_actionMessage_averaging_triggered()
|
void MainWindow::on_actionMessage_averaging_triggered()
|
||||||
{
|
{
|
||||||
if(!m_msgAvgWidget) {
|
if(m_msgAvgWidget == NULL) {
|
||||||
m_msgAvgWidget.reset (new MessageAveraging {m_settings, m_config.decoded_text_font ()});
|
m_msgAvgWidget.reset (new MessageAveraging {m_settings, m_config.decoded_text_font ()});
|
||||||
|
|
||||||
// Connect signals from Message Averaging window
|
// Connect signals from Message Averaging window
|
||||||
connect (this, &MainWindow::finished, m_msgAvgWidget.data (), &MessageAveraging::close);
|
connect (this, &MainWindow::finished, m_msgAvgWidget.data (), &MessageAveraging::close);
|
||||||
}
|
}
|
||||||
m_msgAvgWidget->showNormal();
|
m_msgAvgWidget->showNormal();
|
||||||
m_msgAvgWidget->raise ();
|
m_msgAvgWidget->raise();
|
||||||
m_msgAvgWidget->activateWindow ();
|
m_msgAvgWidget->activateWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionOpen_triggered() //Open File
|
void MainWindow::on_actionOpen_triggered() //Open File
|
||||||
@ -3086,17 +3086,6 @@ void MainWindow::decodeDone ()
|
|||||||
if(dec_data.params.nzhsym==m_earlyDecode2) m_blankLine=false;
|
if(dec_data.params.nzhsym==m_earlyDecode2) m_blankLine=false;
|
||||||
}
|
}
|
||||||
if(SpecOp::FOX == m_config.special_op_id()) houndCallers();
|
if(SpecOp::FOX == m_config.special_op_id()) houndCallers();
|
||||||
|
|
||||||
/*
|
|
||||||
auto now = QDateTime::currentDateTimeUtc();
|
|
||||||
double tsec = fmod(double(now.toMSecsSinceEpoch()),86400000.0)/1000.0;
|
|
||||||
double tseq = fmod(double(now.toMSecsSinceEpoch() ),1000.0*m_TRperiod)/1000.0;
|
|
||||||
if(tseq < 0.5*m_TRperiod) tseq+= m_TRperiod;
|
|
||||||
QString t="";
|
|
||||||
t.sprintf("ee decodeDone %11.3f %5d %5d %7.3f ",tsec,m_ihsym,m_ihsym,tseq);
|
|
||||||
qDebug().noquote() << t << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.zzz");
|
|
||||||
*/
|
|
||||||
|
|
||||||
to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished
|
to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3104,19 +3093,18 @@ void MainWindow::readFromStdout() //readFromStdout
|
|||||||
{
|
{
|
||||||
while(proc_jt9.canReadLine()) {
|
while(proc_jt9.canReadLine()) {
|
||||||
auto line_read = proc_jt9.readLine ();
|
auto line_read = proc_jt9.readLine ();
|
||||||
if (auto p = std::strpbrk (line_read.constData (), "\n\r"))
|
if (auto p = std::strpbrk (line_read.constData (), "\n\r")) {
|
||||||
{
|
// truncate before line ending chars
|
||||||
// truncate before line ending chars
|
line_read = line_read.left (p - line_read.constData ());
|
||||||
line_read = line_read.left (p - line_read.constData ());
|
}
|
||||||
}
|
|
||||||
if(m_mode!="FT8" and m_mode!="FT4") {
|
if(m_mode!="FT8" and m_mode!="FT4") {
|
||||||
//Pad 22-char msg to at least 37 chars
|
//Pad 22-char msg to at least 37 chars
|
||||||
line_read = line_read.left(43) + " " + line_read.mid(43);
|
line_read = line_read.left(44) + " " + line_read.mid(44);
|
||||||
}
|
}
|
||||||
bool bAvgMsg=false;
|
bool bAvgMsg=false;
|
||||||
int navg=0;
|
int navg=0;
|
||||||
|
|
||||||
if(line_read.indexOf("<DecodeFinished>") >= 0) {
|
if(line_read.indexOf("<DecodeFinished>") >= 0) {
|
||||||
// qDebug() << "bb" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.zzz") << line_read;
|
|
||||||
if(m_mode!="FT8" or dec_data.params.nzhsym==50) m_nDecodes=0;
|
if(m_mode!="FT8" or dec_data.params.nzhsym==50) m_nDecodes=0;
|
||||||
if(m_mode=="QRA64") m_wideGraph->drawRed(0,0);
|
if(m_mode=="QRA64") m_wideGraph->drawRed(0,0);
|
||||||
m_bDecoded = line_read.mid(20).trimmed().toInt() > 0;
|
m_bDecoded = line_read.mid(20).trimmed().toInt() > 0;
|
||||||
@ -3140,17 +3128,26 @@ void MainWindow::readFromStdout() //readFromStdout
|
|||||||
m_nDecodes+=1;
|
m_nDecodes+=1;
|
||||||
ndecodes_label.setText(QString::number(m_nDecodes));
|
ndecodes_label.setText(QString::number(m_nDecodes));
|
||||||
if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64") {
|
if(m_mode=="JT4" or m_mode=="JT65" or m_mode=="QRA64") {
|
||||||
int n=line_read.indexOf("f");
|
int nf=line_read.indexOf("f");
|
||||||
if(n<0) n=line_read.indexOf("d");
|
if(nf>0) {
|
||||||
if(n>0) {
|
navg=line_read.mid(nf+1,1).toInt();
|
||||||
QString tt=line_read.mid(n+1,1);
|
if(line_read.indexOf("f*")>0) navg=10;
|
||||||
navg=tt.toInt();
|
|
||||||
if(navg==0) {
|
|
||||||
char c = tt.data()->toLatin1();
|
|
||||||
if(int(c)>=65 and int(c)<=90) navg=int(c)-54;
|
|
||||||
}
|
|
||||||
if(navg>1 or line_read.indexOf("f*")>0) bAvgMsg=true;
|
|
||||||
}
|
}
|
||||||
|
int nd=-1;
|
||||||
|
if(nf<0) nd=line_read.indexOf("d");
|
||||||
|
if(nd>0) {
|
||||||
|
navg=line_read.mid(nd+2,1).toInt();
|
||||||
|
if(line_read.mid(nd+2,1)=="*") navg=10;
|
||||||
|
}
|
||||||
|
if(m_mode=="JT65") {
|
||||||
|
int na=-1;
|
||||||
|
if(nf<0 and nd<0) na=line_read.indexOf("a");
|
||||||
|
if(na>0) {
|
||||||
|
navg=line_read.mid(na+2,1).toInt();
|
||||||
|
if(line_read.mid(na+2,1)=="*") navg=10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(navg>=2) bAvgMsg=true;
|
||||||
}
|
}
|
||||||
write_all("Rx",line_read.trimmed());
|
write_all("Rx",line_read.trimmed());
|
||||||
if (m_config.insert_blank () && m_blankLine && SpecOp::FOX != m_config.special_op_id()) {
|
if (m_config.insert_blank () && m_blankLine && SpecOp::FOX != m_config.special_op_id()) {
|
||||||
@ -3237,7 +3234,8 @@ void MainWindow::readFromStdout() //readFromStdout
|
|||||||
if(SpecOp::FOX!=m_config.special_op_id() and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
|
if(SpecOp::FOX!=m_config.special_op_id() and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(abs(audioFreq - m_wideGraph->rxFreq()) <= 10) bDisplayRight=true;
|
if((abs(audioFreq - m_wideGraph->rxFreq()) <= 10) and
|
||||||
|
!m_config.enable_VHF_features()) bDisplayRight=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bDisplayRight) {
|
if (bDisplayRight) {
|
||||||
@ -4025,9 +4023,7 @@ void MainWindow::guiUpdate()
|
|||||||
|
|
||||||
//Once per second:
|
//Once per second:
|
||||||
if(nsec != m_sec0) {
|
if(nsec != m_sec0) {
|
||||||
// qDebug() << "onesec" << m_config.force_call_1st();
|
// qDebug() << "onesec" << m_mode;
|
||||||
// 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()) {
|
if(m_freqNominal!=0 and m_freqNominal<50000000 and m_config.enable_VHF_features()) {
|
||||||
if(!m_bVHFwarned) vhfWarning();
|
if(!m_bVHFwarned) vhfWarning();
|
||||||
} else {
|
} else {
|
||||||
@ -7293,8 +7289,11 @@ void::MainWindow::VHF_features_enabled(bool b)
|
|||||||
ui->actionMessage_averaging->setEnabled(b);
|
ui->actionMessage_averaging->setEnabled(b);
|
||||||
ui->actionEnable_AP_DXcall->setVisible (m_mode=="QRA64");
|
ui->actionEnable_AP_DXcall->setVisible (m_mode=="QRA64");
|
||||||
ui->actionEnable_AP_JT65->setVisible (b && m_mode=="JT65");
|
ui->actionEnable_AP_JT65->setVisible (b && m_mode=="JT65");
|
||||||
|
|
||||||
if(!b && m_msgAvgWidget and (SpecOp::FOX != m_config.special_op_id()) and !m_config.autoLog()) {
|
if(!b && m_msgAvgWidget and (SpecOp::FOX != m_config.special_op_id()) and !m_config.autoLog()) {
|
||||||
if(m_msgAvgWidget->isVisible()) m_msgAvgWidget->close();
|
if(m_msgAvgWidget->isVisible() and m_mode!="JT4" and m_mode!="JT9" and m_mode!="JT65") {
|
||||||
|
m_msgAvgWidget->close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user