Merge branch 'develop' into qmap

This commit is contained in:
Joe Taylor 2023-12-23 14:13:08 -05:00
commit e0078bf01e
12 changed files with 2139 additions and 1849 deletions

33
INSTALL
View File

@ -27,7 +27,7 @@ the Boost C++ libraries. For MS Windows see the section "Building
from Source on MS Windows" below. For Apple Mac see the section
"Building from Source on Apple Mac".
Qt v5, preferably v5.9 or later is required to build WSJT-X.
Qt v5, preferably v5.12 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
@ -50,15 +50,13 @@ normally you can choose not to install libusb-1.0-dev but if you have
a SoftRock USB or similar SDR that uses a custom USB interface then it
is required.
The Hamlib library is required. Currently WSJT-X needs to be built
using a forked version of the Hamlib git master. This fork contains
patches not yet accepted by the Hamlib development team which are
essential for correct operation of WSJT-X. To build the Hamlib fork
from sources something like the following recipe should suffice:
The Hamlib library is required. WSJT-X can be built with any version
of the Hamlib git master. To build Hamlib from sources something
like the following recipe should suffice:
$ mkdir ~/hamlib-prefix
$ cd ~/hamlib-prefix
$ git clone git://git.code.sf.net/u/bsomervi/hamlib src
$ git clone https://github.com/Hamlib/Hamlib src
$ cd src
$ git checkout integration
$ ./bootstrap
@ -113,13 +111,13 @@ Building from Source on MS Windows
Because building on MS Windows is quite complicated there is an
Software Development Kit available that provides all the prerequisite
libraries and tools for building WSJT-X. This SDK is called JT-SDK-QT
libraries and tools for building WSJT-X. This SDK is called HAMLIB SDK
which is documented here:
http://physics.princeton.edu/pulsar/K1JT/wsjtx-doc/dev-guide-main.html
https://sourceforge.net/projects/hamlib-sdk/
If you need to build Hamlib rather than use the Hamlib kit included in
the JT-SDK the following recipe should help. Reasons for building
the HAMLIB SDK the following recipe should help. Reasons for building
Hamlib from source might include picking up the very latest patches or
building a different branch that you wish to contribute to.
@ -143,7 +141,7 @@ In an MSYS shell:-
$ mkdir ~/hamib-prefix
$ cd ~/hamlib-prefix
$ git clone git://git.code.sf.net/u/bsomervi/hamlib src
$ git clone https://github.com/Hamlib/Hamlib src
$ cd src
$ git checkout integration
$ ./bootstrap
@ -178,10 +176,6 @@ Hamlib binary location as one of the paths in CMAKE_PREFIX_PATH.
Building from Source on Apple Mac
=================================
These instructions are adapted from my Evernote page at:
https://www.evernote.com/pub/bsomervi/wsjt-xmacbuilds
There are several ways to get the required GNU and other open source
tools and libraries installed, my preference is MacPorts because it is
easy to use and does everything we need.
@ -228,12 +222,11 @@ instructions are here:
Hamlib
------
First fetch hamlib from the repository, in this case my fork of Hamlib
3 until the official repository has all the fixes we need:
First fetch hamlib from the git master repository:
$ mkdir -p ~/hamlib-prefix/build
$ cd ~/hamlib-prefix
$ git clone git://git.code.sf.net/u/bsomervi/hamlib src
$ git clone https://github.com/Hamlib/Hamlib src
$ cd src
$ git checkout integration
$ ./bootstrap
@ -352,8 +345,8 @@ which installs the WSJT-X application bundle into ~/wsjtx-prefix
Updating and Rebuilding Hamlib
==============================
From time to time new fixes will be pushed to the Hamlib fork
repository integration branch. To pick them up type:
From time to time new fixes will be pushed to the Hamlib git
master repository. To pick them up type:
$ cd ~/hamlib-prefix/src
$ git pull

2
NEWS
View File

@ -9,7 +9,7 @@
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
Copyright 2001 - 2023 by Joe Taylor, K1JT, and the WSJT Development Team
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
Release: WSJT-X 2.7.0-rc2
July 7, 2023

View File

@ -9,9 +9,83 @@
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
Copyright 2001 - 2023 by Joe Taylor, K1JT, and the WSJT Development Team
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
Release: WSJT-X 2.7.0-rc2
Release: WSJT-X 2.7.0-rc3
January 1, 2024
-------------------------
WSJT-X 2.7.0 Release Candidate 3 brings some new features, as well as
numerous detail improvements and bug fixes, such as:
- Added a new "Update Hamlib" function. On Windows, it allows the user to
update Hamlib directly from the program. The previously used version is
backed up, so the user can easily revert a hamlib update.
- The Hamlib version in use is now displayed (also on Linux and macOS).
- The FT Roundup Messages protocol has been enhanced. It now allows also
the exchange of static 4-digit numbers instead of serial numbers. This
extends the usability of the FT RU protocol for other contest types.
- Improved direct switching between modes. Submode, as well as the status
of the "Sh" and "Fast" checkboxes are now saved and restored by mode.
- Some right-click events were made more intuitive and consistent.
- Right-clicking the Q65 button enables Q65 Pileup mode, a left-click
brings you back to the normal Q65 mode.
- Right-click the JT65 button to switch to JT9 mode.
- For Q65, all messages for us are now displayed in the right window.
- Message averaging is now allowed only when VHF features are
enabled, and label texts are changed to "Single Period Decodes" and
"Average Decodes" only if averaging is enabled.
- Some improvements to the Hamlib Transceiver code. Behavior is now
more stable when Rig Split has been selected.
- Prevented redundant network communication between WSJT-X and DX Lab
Suite Commander.
- Download of the LotW file now works without OpenSSL libraries.
- Made the spot counter work for WSPR.
- Prevented insertion of an individual contest name when in Fox mode.
- WAE entities are now assigned to the correct DXCC when "Include
extra WAE entities" is not selected.
- Added a utility program 'cablog' which can be used to convert the
wsjtx.log file to Cabrillo format for the ARRL EME contest.
- Minor improvements to the Active Stations window.
- The Rx/Tx frequency for Echo mode has been fixed at 1500 Hz.
- Some corrections and updates to the INSTALL instructions for Linux.
- Updated CTY.DAT file.
/////// NOT YET USED TEXT MODULES
QMAP:
- Use AlignCenter for Max Age and Max N controls in Active Stations window.
- Must define 'offset' as a Fortran integer. Increase NJUNK by 1.
- Protect against wacky settings of nfa, nfb, in Q65 mode.
WSJT-X:
- ldpcsim174_91: Add the option to simulate the (174,91) code with noncoherent 8FSK on AWGN and block Rayleigh channels.
- protect against invalid argument in pctile().
- Change the label texts to "Single Period Decodes" and "Average Decodes" only if averaging is enabled.
////////
Release: WSJT-X 2.7.0-rc2
July 7, 2023
-------------------------

3474
cty.dat

File diff suppressed because it is too large Load Diff

View File

@ -1,68 +1,60 @@
[[NEW_FEATURES]]
=== New in Version {VERSION_MAJOR}.{VERSION_MINOR}
- _WSJT-X 2.6_ implements new features supporting the ARRL
International Digital Contest and its distance based scoring. The
*Call 1st* checkbox has been replaced by a drop-down control offering
*CQ Max Dist* as an alternative. A new window labeled *Active
Stations* displays a list of received but unworked callsigns, sorted
in decreasing order of potential contest points. With option *CQ Max
Dist* selected, the program will select the reply to your CQ that
yields the most contest points. You can click on a line in the Active
Stations window to call that station.
_WSJT-X 2.7_ introduces a new program called *QMAP*, a new Special
Operating Activity *Q65 Pileup*, an option to *Update Hamlib* at the
click of a button, and a number of other enhancements and bug fixes.
- Decoding performance for FT8 and Q65 has been improved in a variety
of situations with available _a priori_ (AP) information.
- QMAP and Q65 Pileup mode are of particular interest to those engaged
in Earth-Moon-Earth (EME) communication, but other applications may
be found for them as well. QMAP is currently available for Windows
only; it is derived from MAP65, an older program used since 2007 for
EME. QMAP provides single-polarization receive-only capabilities for
any one of the 60-second submodes of Q65. It allows you to monitor
all traffic in a 90 kHz sub-band while conducting EME QSOs in the
usual way with _WSJT-X_. Q65 Pileup mode helps DX operators using
Q65 in pileup circumstances with many simultaneous callers and very
weak signals, such as those experienced by 6-meter EME DXpeditions.
Further details on QMAP and Q65 Pileup mode are available in a
Quick-Start guide posted here:
https://wsjt.sourceforge.io/Quick_Start_WSJT-X_2.7_QMAP.pdf
- *Echo* mode now offers a *Clear Avg* button and produces reliable
measurements of SNR even when Doppler spread is large. Its *Monitor*
function can be used to measure SNR for a received unmodulated carrier
such as a key-down test signal emitted by another station and
reflected from the Moon, and also to measure Sun, Moon, and ground
noise as aids for optimizing an EME station's performance.
- A button *Update Hamlib* now appears on the *Settings -> Radio* tab.
On Windows it allows the user to automatically download and install
the latest version of the rig-control features in Hamlib. The
previously used version is backed up, so you can easily revert the
procedure if necessary. Names and dates of the active and backup
versions are clearly displayed.
- New buttons on the main window allow quick changes between modes
FT4, FT8, MSK144, Q65, and JT65, and toggling FT8 Hound mode ON/OFF.
- Spotting to *PSK Reporter* has been made more efficient. Redundant
spots are omitted, and all posts are spread more widely in time. If
your station locator is changed, for example during portable
operations, your new locator will be sent automatically to PSK
Reporter.
- New convenience features allow Fox operators to react more quickly
to particular QSO situations. A two-column table in Tab 2 provides an
overview of the queue and of callsigns with QSOs in progress. Fox
operator can change the ordering of callsigns in the queue, allowing
reaction to changes in propagation. Fox now responds automatically
for another two cycles to stations whose report has not been received,
increasing the success rate for difficult QSOs.
- *Fox* mode now provides more convenient handling of the two callsign
queues, and Fox's Log window displays statistical data on recent QSO
rate. Multi-streamed messages transmitted by _MSHV_ are now handled
properly when _WSJT-X_ is in *Hound* mode.
- The Working frequency table now offers save/restore capability and
better handling of more than one frequency per mode-band
combination. You can set preferred frequencies, and WSJT-X will select
these when you change band or mode. You can label a tabled frequency
with a description, for example a DXpedition callsign, and set Start
and End date and time so the frequencies automatically appear and
disappear from the displayed options. You can load a publicly
available frequency table from a file, to easily make such DXpedition
data available to the program.
- The cty.dat file can now be updated by clicking a button on the
*Settings -> Colors* tab.
- Optional color highlighting is provided for specified DX Call and DX
Grid, and for messages containing RR73 or 73.
- The FT Roundup message protocol now allows the exchange of static
4-digit numbers in place of serial numbers. This extends the
usability of the FT RU protocol for other contest types.
- New options are provided for writing to file ALL.TXT. You can
request automatic starting of a new file every month or every year,
and you can disable writing altogether.
- Features for main-window switching between modes have been enhanced
so that submode and status of the *Sh* and *Fast* checkboxes are
saved and restored by mode. Right-click events were made more
intuitive and consistent. Right-clicking the Q65 button enables Q65
Pileup mode, and a left-click brings you back to the normal Q65
mode. Right-click on the JT65 button switches to JT9 mode.
- Settings for T/R period and Submode are remembered by mode when you
switch directly between modes: for example, MSK144-15, Q65-60A, or
FST4-120.
- Message averaging is now allowed only when *VHF features* are
enabled. Main window text box labels are changed to read "`Single
Period Decodes`" and "`Average Decodes`" when averaging is enabled.
- Tx and Rx audio frequencies are remembered and restored when you
return from a mode that sets a default frequency 1500 Hz (MSK144,
FST4W, Echo, WSPR, FreqCal), then switching back to FT4, FT8, Q65,
FST4, or JT65.
Further details on minor changes can be found in the Release Notes,
accessible from the _WSJT-X_ *Help* menu.
- Rig control is provided for some new radios, and bug fixes for
controlling others.
- New features in _MAP65_ (available for Windows only) include an aid
for measuring antenna pointing errors and an ability to read the file
wsjtx.log (kept by _WSJT-X_) to recognize EME contest dupes. In
addition, _MAP65_ now sends additional information to file azel.dat
and offers optional digital scaling of input I/Q data.

View File

@ -2,38 +2,50 @@ program ldpcsim174_91
! End to end test of the (174,91)/crc14 encoder and decoder.
use packjt77
integer, parameter:: N=174, K=91, M=N-K
character*37 msg,msgsent,msgreceived
integer, parameter:: N=174, K=91, M=N-K, NN=58
character*37 msg,msgsent
character*77 c77
character*8 arg
character*6 grid
character*96 tmpchar
integer*1, allocatable :: codeword(:), decoded(:), message(:)
integer*1 msgbits(77)
integer*1 message77(77),message91(91)
integer*1 message91(91)
integer*1 apmask(N), cw(N)
integer lmax(1)
integer modtype, itone(79), itonecw(58), graymap(0:7)
integer nerrtot(0:N),nerrdec(0:N)
integer channeltype
logical unpk77_success
logical one(0:511,0:8)
real*8, allocatable :: rxdata(:)
real, allocatable :: llr(:)
real llr(174),llra(174),llrb(174),llrc(174),llrd(174)
real bmeta(174),bmetb(174),bmetc(174),bmetd(174)
complex cs(0:7,NN)
real s2(0:511)
data graymap/0,1,3,2,5,6,4,7/
nerrtot=0
nerrdec=0
!
nargs=iargc()
if(nargs.ne.6) then
print*,'Usage: ldpcsim niter ndepth #trials s Keff nbposd'
print*,'eg: ldpcsim 10 2 1000 0.84 91 1'
print*,'niter: max BP iterations'
print*,'ndepth: OSD order'
print*,'s: noise sigma; if negative value is ignored and sigma is calculated from SNR.'
print*,'nbposd=0, no coupling. nbposd>0, maxsuper=nbposd; nbposd<0, no OSD'
if(nargs.ne.7) then
print*,'Usage: ldpcsim maxosd norder #trials s Keff modtype channel'
print*,'eg: ldpcsim 10 2 1000 0.84 91 1 0'
print*,' maxosd<0: do bp only'
print*,' maxosd=0: do bp and then call osd once with channel llrs'
print*,' maxosd>1: do bp and then call osd maxosd times with saved bp outputs'
print*,' norder : osd decoding depth'
print*,' s : BPSK only, noise sigma, if s<0 value is ignored and sigma is calculated from SNR.'
print*,' Keff : Keff must be in the range [77,91]; Keff-77 is the # of bits to use as CRC.'
print*,' modtype : 0, coherent BPSK; 1 noncoherent 8FSK'
print*,' channel : 0, AWGN; 1, block Rayleigh (Rayleigh only works with 8FSK!)'
return
endif
call getarg(1,arg)
read(arg,*) max_iterations
read(arg,*) maxosd
call getarg(2,arg)
read(arg,*) ndepth
read(arg,*) norder
call getarg(3,arg)
read(arg,*) ntrials
call getarg(4,arg)
@ -41,16 +53,24 @@ program ldpcsim174_91
call getarg(5,arg)
read(arg,*) Keff
call getarg(6,arg)
read(arg,*) nbposd
read(arg,*) modtype
call getarg(7,arg)
read(arg,*) channeltype
! scale Eb/No for a (174,91) code
rate=real(K)/real(N)
write(*,*) "rate: ",rate
write(*,*) "niter= ",max_iterations," s= ",s
allocate ( codeword(N), decoded(K), message(K) )
allocate ( rxdata(N), llr(N) )
allocate ( rxdata(N) )
one=.false.
do i=0,511
do j=0,8
if(iand(i,2**j).ne.0) one(i,j)=.true.
enddo
enddo
msg="K9ABC K1ABC FN20"
i3=0
@ -65,47 +85,144 @@ program ldpcsim174_91
call init_random_seed()
iq=1
if(modtype.gt.0) then ! MFSK - get tones
i3=-1
n3=-1
call genft8(msg,i3,n3,msgsent,msgbits,itone)
write(*,*) 'message tones'
write(*,'(79(i1,1x))') itone
itonecw(1:29)=itone(8:36)
itonecw(30:58)=itone(44:72)
iq=3 ! bits per symbol
endif
call encode174_91(msgbits,codeword)
write(*,*) 'crc14'
write(*,'(14i1)') codeword(78:91)
write(*,*) 'codeword'
write(*,'(22(8i1,1x))') codeword
write(*,*) "Eb/N0 Es/N0 ngood nundetected sigma psymerr"
do idb = 10,-4,-1
write(*,*) 'Eb/N0 Es/N0 SNR2500 ngood nundetected sigma psymerr pbiterr'
do idb = 20,-4,-1
nsymerr=0
nbiterr=0
db=idb/2.0-1.0
sigma=1/sqrt( 2*rate*(10**(db/10.0)) )
sigma=1/sqrt( 2*rate*iq*(10**(db/10.0)) )
ngood=0
nue=0
nsumerr=0
do itrial=1, ntrials
! Create a realization of a noisy received word
do i=1,N
rxdata(i) = 2.0*codeword(i)-1.0 + sigma*gran()
enddo
nerr=0
do i=1,N
if( rxdata(i)*(2*codeword(i)-1.0) .lt. 0 ) nerr=nerr+1
enddo
if(nerr.ge.1) nerrtot(nerr)=nerrtot(nerr)+1
if(modtype.eq.0) then
do i=1,N
rxdata(i) = 2.0*codeword(i)-1.0 + sigma*gran()
enddo
nerr=0
do i=1,N
if( rxdata(i)*(2*codeword(i)-1.0) .lt. 0 ) nerr=nerr+1
enddo
if(nerr.ge.1) nerrtot(nerr)=nerrtot(nerr)+1
rxav=sum(rxdata)/N
rx2av=sum(rxdata*rxdata)/N
rxsig=sqrt(rx2av-rxav*rxav)
rxdata=rxdata/rxsig
if( s .lt. 0 ) then
ss=sigma
rxav=sum(rxdata)/N
rx2av=sum(rxdata*rxdata)/N
rxsig=sqrt(rx2av-rxav*rxav)
rxdata=rxdata/rxsig
if( s .lt. 0 ) then
ss=sigma
else
ss=s
endif
llr=2.0*rxdata/(ss*ss)
else
ss=s
! noncoherent MFSK
do i=1,58
do j=0,7
if(j.eq.itonecw(i)) then
if(channeltype.eq.0) then
A=1.0
elseif(channeltype.eq.1) then
xI=gran()**2 + gran()**2
A=sqrt(xI/2)
endif
cs(j,i)= A + sigma*gran() + cmplx(0,1)*sigma*gran()
elseif(j.ne.itonecw(i)) then
cs(j,i)= sigma*gran() + cmplx(0,1)*sigma*gran()
endif
enddo
lmax=maxloc(abs(cs(:,i)))
if(lmax(1)-1.ne.itonecw(i) ) nsymerr=nsymerr+1
enddo
do nsym=1,3
nt=2**(3*nsym)
do ks=1,58,nsym
amax=-1.0
do i=0,nt-1
i1=i/64
i2=iand(i,63)/8
i3=iand(i,7)
if(nsym.eq.1) then
s2(i)=abs(cs(graymap(i3),ks))
elseif(nsym.eq.2) then
s2(i)=abs(cs(graymap(i2),ks)+cs(graymap(i3),ks+1))
elseif(nsym.eq.3) then
if(ks.ne.58) then
s2(i)=abs(cs(graymap(i1),ks)+cs(graymap(i2),ks+1)+cs(graymap(i3),ks+2))
else
s2(i)=abs(cs(graymap(i1),ks))
endif
else
print*,"Error - nsym must be 1, 2, or 3."
endif
enddo
i32=1+(ks-1)*3
if(nsym.eq.1) ibmax=2
if(nsym.eq.2) ibmax=5
if(nsym.eq.3) ibmax=8
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(i32+ib .gt.174) cycle
if(nsym.eq.1) then
bmeta(i32+ib)=bm
den=max(maxval(s2(0:nt-1),one(0:nt-1,ibmax-ib)), &
maxval(s2(0:nt-1),.not.one(0:nt-1,ibmax-ib)))
if(den.gt.0.0) then
cm=bm/den
else ! erase it
cm=0.0
endif
bmetd(i32+ib)=cm
elseif(nsym.eq.2) then
bmetb(i32+ib)=bm
elseif(nsym.eq.3) then
bmetc(i32+ib)=bm
endif
enddo
enddo
enddo
call normalizebmet(bmeta,174)
call normalizebmet(bmetb,174)
call normalizebmet(bmetc,174)
call normalizebmet(bmetd,174)
scalefac=2.83
llra=scalefac*bmeta
llrb=scalefac*bmetb
llrc=scalefac*bmetc
llrd=scalefac*bmetd
llr=llrc
endif
llr=2.0*rxdata/(ss*ss)
do i=1, 174
if(llr(i)*(codeword(i)-0.5).lt.0) nbiterr=nbiterr+1
enddo
nap=0 ! number of AP bits
llr(1:nap)=5*(2.0*msgbits(1:nap)-1.0)
apmask=0
apmask(1:nap)=1
call decode174_91(llr,Keff,nbposd,ndepth,apmask,message91,cw,ntype,nharderrors,dmin)
call decode174_91(llr,Keff,maxosd,norder,apmask,message91,cw,ntype,nharderrors,dmin)
! If the decoder finds a valid codeword, nharderrors will be .ge. 0.
if( nharderrors.ge.0 ) then
nhw=count(cw.ne.codeword)
@ -119,9 +236,12 @@ program ldpcsim174_91
nsumerr=nsumerr+nerr
enddo
esn0=db+10.0*log10(rate)
pberr=real(nsumerr)/(real(ntrials*N))
write(*,"(f4.1,4x,f5.1,1x,i8,1x,i8,8x,f5.2,8x,e10.3)") db,esn0,ngood,nue,ss,pberr
esn0=db+10.0*log10(iq*rate) ! iq=3 bits per symbol for 8FSK
snr2500=esn0-10.0*log10(2500/6.25)
! pberr=real(nsumerr)/(real(ntrials*N))
psymerr=real(nsymerr)/(ntrials*174.0/iq)
pbiterr=real(nbiterr)/(ntrials*174.0)
write(*,"(f4.1,4x,f5.1,4x,f5.1,1x,i8,1x,i8,8x,f5.2,8x,e10.3,8x,e10.3)") db,esn0,snr2500,ngood,nue,ss,psymerr,pbiterr
enddo
@ -132,3 +252,18 @@ program ldpcsim174_91
close(23)
end program ldpcsim174_91
subroutine normalizebmet(bmet,n)
real bmet(n)
bmetav=sum(bmet)/real(n)
bmet2av=sum(bmet*bmet)/real(n)
var=bmet2av-bmetav*bmetav
if( var .gt. 0.0 ) then
bmetsig=sqrt(var)
else
bmetsig=sqrt(bmet2av)
endif
bmet=bmet/bmetsig
return
end subroutine normalizebmet

View File

@ -50,7 +50,7 @@ subroutine sun(y,m,DD,UT,lon,lat,RA,Dec,LST,Az,El,mjd,day)
MM = mod(356.0470d0 + 0.9856002585d0 * d + 360000.d0,360.d0)
Ls = mod(w+MM+720.0,360.0)
EE = MM + e*rad*sin(MM/rad) * (1.0 + e*cos(M/rad))
EE = MM + e*rad*sin(MM/rad) * (1.0 + e*cos(MM/rad))
EE = EE - (EE - e*rad*sin(EE/rad)-MM) / (1.0 - e*cos(EE/rad))
xv = cos(EE/rad) - e

View File

@ -446,8 +446,8 @@ auto AD1CCty::lookup (QString const& call) const -> Record
if (p != m_->prefixes_.end ())
{
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 ()))
// always lookup WAE entities, we substitute them later in displaytext.cpp if "Include extra WAE entites" is not selected
if (!p->exact_ || call.size () == search_prefix.size ())
{
return m_->fixup (*p, *e);
}

View File

@ -21,7 +21,7 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
"WSJT-X implements a number of digital modes designed for <br />"
"weak-signal Amateur Radio communication. <br /><br />"
"&copy; 2001-2023 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
"&copy; 2001-2024 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
"Steve Franke, K9AN, Nico Palermo, IV3NWV, <br />"
"Uwe Risse, DG2YCB, and Brian Moran, N9ADG <br /><br />"
"We gratefully acknowledge contributions from AC6SL, AE4JY,<br />"

View File

@ -387,6 +387,17 @@ QString DisplayText::appendWorkedB4 (QString message, QString call, QString cons
countryName.replace ("European", "EU");
countryName.replace ("African", "AF");
// assign WAE entities to the correct DXCC when "Include extra WAE entities" is not selected
if (!(m_config->include_WAE_entities())) {
countryName.replace ("Bear Is.", "Svalbard");
countryName.replace ("Shetland Is.", "Scotland");
countryName.replace ("AF Italy", "Italy");
countryName.replace ("Sicily", "Italy");
countryName.replace ("Vienna Intl Ctr", "Austria");
countryName.replace ("AF Turkey", "Turkey");
countryName.replace ("EU Turkey", "Turkey");
}
extra += countryName;
}
}

View File

@ -1110,9 +1110,9 @@ void MainWindow::not_GA_warning_message ()
MessageBox::critical_message (this,
"This is a pre-release version of WSJT-X " + version (false) + " made\n"
"available for testing purposes. By design it will\n"
"be nonfunctional after July 1, 2024.");
"be nonfunctional after September 30, 2024.");
auto now = QDateTime::currentDateTimeUtc ();
if (now >= QDateTime {{2024, 07, 1}, {23, 59, 59, 999}, Qt::UTC}) {
if (now >= QDateTime {{2024, 9, 30}, {23, 59, 59, 999}, Qt::UTC}) {
Q_EMIT finished ();
}
}
@ -2881,7 +2881,7 @@ void MainWindow::on_actionCopyright_Notice_triggered()
"\"The algorithms, source code, look-and-feel of WSJT-X and related "
"programs, and protocol specifications for the modes FSK441, FST4, FT8, "
"JT4, JT6M, JT9, JT65, JTMS, QRA64, Q65, MSK144 are Copyright (C) "
"2001-2023 by one or more of the following authors: Joseph Taylor, "
"2001-2024 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; Uwe Risse, DG2YCB; Brian Moran, N9ADG; "
@ -3304,7 +3304,7 @@ void MainWindow::on_actionSpecial_mouse_commands_triggered()
<td><b>Click</b> to set Rx frequency.<br/>
<b>Shift-click</b> to set Tx frequency.<br/>
<b>Ctrl-click</b> or <b>Right-click</b> to set Rx and Tx frequencies.<br/>
<b>Double-click</b> to also decode at Rx frequency.<br/>
<b>Double-click</b> to also decode at Rx frequency.
</td>
</tr>
<tr>
@ -3315,7 +3315,7 @@ void MainWindow::on_actionSpecial_mouse_commands_triggered()
messages.<br/>
If <b>Hold Tx Freq</b> is checked or first callsign in message<br/>
is your own call, Tx frequency is not changed unless <br/>
<b>Ctrl</b> is held down.<br/>
<b>Ctrl</b> is held down.
</td>
</tr>
<tr>
@ -3324,6 +3324,18 @@ void MainWindow::on_actionSpecial_mouse_commands_triggered()
<b>Double-click</b> to erase QSO and Band Activity windows.
</td>
</tr>
<tr>
<td align="right">Q65 Button:</td>
<td><b>Click</b> to switch to Q65 Mode.<br/>
<b>Right-click</b> to switch to Q65 Pileup Mode.
</td>
</tr>
<tr>
<td align="right">JT65 Button:</td>
<td><b>Click</b> to switch to JT65 Mode.<br/>
<b>Right-click</b> to switch to JT9 Mode.
</td>
</tr>
</table>)"), font});
}
m_mouseCmnds->showNormal ();
@ -6614,18 +6626,14 @@ void MainWindow::on_RoundRobin_currentTextChanged(QString text)
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if(ui->q65Button->hasFocus() && (event->button() & Qt::RightButton)) {
m_specOp=m_config.special_op_id();
if (m_specOp==SpecOp::Q65_PILEUP) {
m_config.setSpecial_None();
ui->tx1->setEnabled(true);
ui->txb1->setEnabled(true);
} else {
m_config.setSpecial_Q65_Pileup();
}
if(ui->q65Button->hasFocus() && (event->button() & Qt::RightButton)) { // switch to Q65_Pileup mode
m_config.setSpecial_Q65_Pileup();
m_specOp=m_config.special_op_id();
on_actionQ65_triggered();
}
if(ui->jt65Button->hasFocus() && (event->button() & Qt::RightButton)) { // switch to JT9 mode
on_actionJT9_triggered();
}
}
void MainWindow::on_dxCallEntry_textChanged (QString const& call)
@ -10800,29 +10808,33 @@ void MainWindow::on_houndButton_clicked (bool checked)
void MainWindow::on_ft8Button_clicked()
{
if(m_specOp==SpecOp::HOUND) {
if (m_specOp==SpecOp::HOUND) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionFT8_triggered();
on_actionFT8_triggered();
}
void MainWindow::on_ft4Button_clicked()
{
on_actionFT4_triggered();
on_actionFT4_triggered();
}
void MainWindow::on_msk144Button_clicked()
{
on_actionMSK144_triggered();
on_actionMSK144_triggered();
}
void MainWindow::on_q65Button_clicked()
{
on_actionQ65_triggered();
if (m_specOp==SpecOp::Q65_PILEUP) {
m_config.setSpecial_None();
m_specOp=m_config.special_op_id();
}
on_actionQ65_triggered();
}
void MainWindow::on_jt65Button_clicked()
{
on_actionJT65_triggered();
on_actionJT65_triggered();
}

View File

@ -3017,7 +3017,7 @@ QLabel[oob=&quot;true&quot;] {
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Switch to Q65 mode. Right-click to toggle Q65 Pileup mode On/Off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Switch to Q65 mode.&lt;br&gt; Right-click to switch to Q65 Pileup mode.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Q65</string>
@ -3038,8 +3038,11 @@ QLabel[oob=&quot;true&quot;] {
<height>16777215</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>Switch to JT65 mode</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Switch to JT65 mode. &lt;br&gt;Right-click to switch to JT9 mode.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>JT65</string>