Merge branch 'release-2.5.2'

This commit is contained in:
Bill Somerville 2021-11-03 23:53:01 +00:00
commit 68dc11b291
No known key found for this signature in database
GPG Key ID: D864B06D1E81618F
21 changed files with 1658 additions and 1614 deletions

View File

@ -45,7 +45,7 @@ if (POLICY CMP0075)
endif ()
project (wsjtx
VERSION 2.5.1.0
VERSION 2.5.2.0
LANGUAGES C CXX Fortran
)
set (PROJECT_DESCRIPTION "WSJT-X: Digital Modes for Weak Signal Communications in Amateur Radio")

View File

@ -735,7 +735,7 @@ bool Configuration::monitor_last_used () const {return m_->rig_is_dummy_ || m_->
bool Configuration::log_as_RTTY () const {return m_->log_as_RTTY_;}
bool Configuration::report_in_comments () const {return m_->report_in_comments_;}
bool Configuration::prompt_to_log () const {return m_->prompt_to_log_;}
bool Configuration::autoLog() const {return m_->autoLog_ && m_->bSpecialOp_;}
bool Configuration::autoLog() const {return m_->autoLog_;}
bool Configuration::decodes_from_top () const {return m_->decodes_from_top_;}
bool Configuration::insert_blank () const {return m_->insert_blank_;}
bool Configuration::DXCC () const {return m_->DXCC_;}

View File

@ -11,7 +11,32 @@ extern "C" {
namespace
{
QRegularExpression words_re {R"(^(?:(?<word1>(?:CQ|DE|QRZ)(?:\s?DX|\s(?:[A-Z]{1,4}|\d{3}))|[A-Z0-9/]+|\.{3})\s)(?:(?<word2>[A-Z0-9/]+)(?:\s(?<word3>[-+A-Z0-9]+)(?:\s(?<word4>(?:OOO|(?!RR73)[A-R]{2}[0-9]{2})))?)?)?)"};
QRegularExpression tokens_re {R"(
^
(?:(?<dual>[A-Z0-9/]+)\sRR73;\s)?
(?:
(?<word1>
(?:CQ|DE|QRZ)
(?:\s?DX|\s
(?:[A-Z]{1,4}|\d{3})
)
| [A-Z0-9/]+
|\.{3}
)\s
)
(?:
(?<word2>[A-Z0-9/]+)
(?:\s
(?<word3>[-+A-Z0-9]+)
(?:\s
(?<word4>
(?:OOO | (?!RR73)[A-R]{2}[0-9]{2})
)
)?
)?
)?
)"
, QRegularExpression::ExtendedPatternSyntaxOption};
}
DecodedText::DecodedText (QString const& the_string)
@ -60,7 +85,9 @@ QStringList DecodedText::messageWords () const
// extract up to the first four message words
QString t=message_;
if(t.left(4)=="TU; ") t=message_.mid(4,-1);
return words_re.match(t).capturedTexts();
auto res = tokens_re.match(t).capturedTexts();
qDebug () << "captured texts:" << res;
return res;
}
// simple word split for free text messages
auto words = message_.split (' ', SkipEmptyParts);
@ -128,31 +155,37 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /
if (message_.size () < 1) return false;
QStringList const& w = message_.split(" ", SkipEmptyParts);
if (w.size ()
&& is_standard_ && (w[0] == myBaseCall
|| w[0].endsWith ("/" + myBaseCall)
|| w[0].startsWith (myBaseCall + "/")
|| (w.size () > 1 && !dxBaseCall.isEmpty ()
&& (w[1] == dxBaseCall
|| w[1].endsWith ("/" + dxBaseCall)
|| w[1].startsWith (dxBaseCall + "/")))))
int offset {0};
if (w.size () > 2)
{
QString tt="";
if(w.size() > 2) tt=w[2];
bool ok;
auto i1=tt.toInt(&ok);
if (ok and i1>=-50 and i1<50)
if ("RR73;" == w[1] && w.size () > 3)
{
report = tt;
offset = 2;
}
else
if (is_standard_ && (w[offset] == myBaseCall
|| w[offset].endsWith ("/" + myBaseCall)
|| w[offset].startsWith (myBaseCall + "/")
|| (w.size () > offset + 1 && !dxBaseCall.isEmpty ()
&& (w[offset + 1] == dxBaseCall
|| w[offset + 1].endsWith ("/" + dxBaseCall)
|| w[offset + 1].startsWith (dxBaseCall + "/")))))
{
if (tt.mid(0,1)=="R")
bool ok;
auto tt = w[offset + 2];
auto i1=tt.toInt(&ok);
if (ok and i1>=-50 and i1<50)
{
i1=tt.mid(1).toInt(&ok);
if(ok and i1>=-50 and i1<50)
report = tt;
}
else
{
if (tt.mid(0,1)=="R")
{
report = tt.mid(1);
i1=tt.mid(1).toInt(&ok);
if(ok and i1>=-50 and i1<50)
{
report = tt.mid(1);
}
}
}
}
@ -163,7 +196,7 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /
// get the first text word, usually the call
QString DecodedText::call() const
{
return words_re.match (message_).captured ("word1");
return tokens_re.match (message_).captured ("word1");
}
// get the second word, most likely the de call and the third word, most likely grid
@ -175,7 +208,7 @@ void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
{
msg = msg.mid (p + 2);
}
auto const& match = words_re.match (msg);
auto const& match = tokens_re.match (msg);
call = match.captured ("word2");
grid = match.captured ("word3");
if ("R" == grid) grid = match.captured ("word4");

50
NEWS
View File

@ -11,6 +11,56 @@
Copyright 2001 - 2021 by Joe Taylor, K1JT.
Release: WSJT-X 2.5.2
Nov 4, 2021
----------------------
This is mostly a bug fix release. It has the following changes since
release 2.5.1:
- Repair a longstanding regression that caused signal reports from
tail-ended Tx2 messages to be omitted from logged information
- Parse "dx-call-1 RR73; dx-call-2 <de-call> +nn" messages (i3=0,
n3=1 DXpedition mode) in regular 77-bit modes
- Repair a regression associated with setting the main window width
on program startup.
- Repair a problem with Q65 decodes of type 'q3' for messages of the
form "<Call_1> Call_2"
- Execute code associated with Q65 decodes of type 'q5' only when the
Max Drift control is set to 50. This fix prevents
double-incrementing of the message averaging counter on the first
decoding sequence.
- Polarization offset 'Dpol' from the astronomical data window is now
written to file azel.dat if environment variable
WSJT_AZEL_EXTRA_LINES has been defined as 1 or greater. Dpol is
especially useful for EME on the higher microwave bands.
- The Auto Log QSO option in "Settings->Reporting" now behaves the
same as the Prompt to log QSO option when not in a special
operating context mode.
- The Fast/Normal/Deep setting in Q65 mode is now a sticky setting
and is no longer reset to Fast on program startup or when Settings
has been opened. The user selection is used for automatic decodes,
but Deep is used for any subsequent manual decode attempts.
- New hamlib code to correct minor flaws in controlling several rigs.
- Update the Chinese and Hong Kong translations of the user
interface.
- Note that since the WSJT-X v2.5.0 GA release we have not been
providing pre-built 32-bit packages for Linux on Intel CPUs, this
is due to the mainstream Linux Desktop distributions no longer
providing updates for 32-bit only systems. 32-bit WSJT-X can still
be built for Linux Intel and is supported at least until some
prerequisite package is no longer available.
Release: WSJT-X 2.5.1
Oct 21, 2021
----------------------

View File

@ -11,6 +11,56 @@
Copyright 2001 - 2021 by Joe Taylor, K1JT.
Release: WSJT-X 2.5.2
Nov 4, 2021
----------------------
This is mostly a bug fix release. It has the following changes since
release 2.5.1:
- Repair a longstanding regression that caused signal reports from
tail-ended Tx2 messages to be omitted from logged information
- Parse "dx-call-1 RR73; dx-call-2 <de-call> +nn" messages (i3=0,
n3=1 DXpedition mode) in regular 77-bit modes
- Repair a regression associated with setting the main window width
on program startup.
- Repair a problem with Q65 decodes of type 'q3' for messages of the
form "<Call_1> Call_2"
- Execute code associated with Q65 decodes of type 'q5' only when the
Max Drift control is set to 50. This fix prevents
double-incrementing of the message averaging counter on the first
decoding sequence.
- Polarization offset 'Dpol' from the astronomical data window is now
written to file azel.dat if environment variable
WSJT_AZEL_EXTRA_LINES has been defined as 1 or greater. Dpol is
especially useful for EME on the higher microwave bands.
- The Auto Log QSO option in "Settings->Reporting" now behaves the
same as the Prompt to log QSO option when not in a special
operating context mode.
- The Fast/Normal/Deep setting in Q65 mode is now a sticky setting
and is no longer reset to Fast on program startup or when Settings
has been opened. The user selection is used for automatic decodes,
but Deep is used for any subsequent manual decode attempts.
- New hamlib code to correct minor flaws in controlling several rigs.
- Update the Chinese and Hong Kong translations of the user
interface.
- Note that since the WSJT-X v2.5.0 GA release we have not been
providing pre-built 32-bit packages for Linux on Intel CPUs, this
is due to the mainstream Linux Desktop distributions no longer
providing updates for 32-bit only systems. 32-bit WSJT-X can still
be built for Linux Intel and is supported at least until some
prerequisite package is no longer available.
Release: WSJT-X 2.5.1
Oct 21, 2021
----------------------

View File

@ -385,7 +385,7 @@ auto DXLabSuiteCommanderTransceiver::get_mode () -> MODE
void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
{
Q_ASSERT (commander_);
if (!commander_) return;
CAT_TRACE (cmd);
@ -398,7 +398,7 @@ void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd)
{
Q_ASSERT (commander_);
if (!commander_) return QString {};
if (!write_to_port (cmd))
{

View File

@ -1005,7 +1005,7 @@ void HRDTransceiver::do_poll ()
QString HRDTransceiver::send_command (QString const& cmd, bool prepend_context, bool recurse)
{
Q_ASSERT (hrd_);
if (!hrd_) return QString {};
QString result;

976
cty.dat

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@ been an Open Source project, which now includes the programs _WSJT_,
_MAP65_, _WSPR_, _WSJT-X_, and _WSPR-X_. *G4WJS* (since 2013), *K9AN*
(since 2015), and *IV3NWV* (since 2016) have made major contributions
to _WSJT-X_. Together with K1JT they now form the core development
team. *G4WJS* and *W9MDB* have made major contributiions to _hamlib_,
team. *G4WJS* and *W9MDB* have made major contributions to _hamlib_,
on which _WSJT-X_ depends for rig control.
All code in the _WSJT_ project is licensed under the GNU Public

View File

@ -11,7 +11,9 @@ image::main-ui-controls.png[align="center",width=650,alt="Main UI Controls"]
* *Log QSO* raises a dialog window pre-filled with known information
about a QSO you have nearly completed. You can edit or add to this
information before clicking *OK* to log the QSO. If you check *Prompt
me to log QSO* on the *File -> Settings -> Reporting* tab, the program raises the confirmation screen automatically when you send a message containing +73+. *Start Date* and *Start Time* are set when you click
me to log QSO* on the *File -> Settings -> Reporting* tab, the program
raises the confirmation screen automatically when you send a message
containing +73+. *Start Date* and *Start Time* are set when you click
to send the *Tx 2* or *Tx 3* message, and backed up by one or two
sequence lengths, respectively. (Note that the actual start time may
have been earlier if repeats of early transmissions were required.)

View File

@ -25,7 +25,7 @@ consequences.
The _WSJT-X_ user interface (UI) is now available in many languages.
When a translated UI is available for the computer's default System
Language, it will appear automatically on program startup. The UI
language may be overriden if desired by starting _WSJT-X_ with a
language may be overridden if desired by starting _WSJT-X_ with a
command line option.
=== How You Can Contribute

View File

@ -31,7 +31,7 @@ image::FST4_center.png[align="center"]
It's best to keep the decoding range fairly small, since QRM and
transmissions in other modes or sequence lengths will slow down the
decoding process (and of course will be undecodable). By checking
*Single decode* on the the *File | Settings | General* tab, you can
*Single decode* on the *File | Settings | General* tab, you can
further limit the decoding range to the setting of *F Tol* on
either side of *Rx Freq*.

View File

@ -333,6 +333,27 @@ correlation algorithm. JT65 and Q65 offer _a priori_ (AP)
decoding, which takes advantage of naturally accumulating information
during a QSO.
For CW mode on SHF and microwave EME WSJT-X can be used to do Doppler
shift correction if desired:
- Check the *Settings -> Radio -> Mode -> None* option, this stops _WSJT-X_
from trying to set the mode of your rig.
- Put you rig into CW mode as normal.
- Before transmitting press *Tune* in _WSJT-X_, no tones will be
transmitted as the rig is in CW mode, but importantly WSJT-X knows
your are transmitting and adjusts the Doppler shift correction as
needed for the currently selected Doppler shift correction mode in
transmit.
- When you have finish transmitting CW press *Tune* again to revert to
receive mode and the correct Doppler shift correction for receiving.
NOTE: The above assumes you are already set up for _WSJT-X_
<<VHF_SETUP,Doppler shift correction>> with working CAT control, and
*Monitor* enabled etc..
////
The following tutorial aims to familiarize you with
these program features, all of which are of special interest for EME

View File

@ -4,6 +4,9 @@ module astro_module
private
public :: astrosub
logical :: initialized = .false.
integer :: azel_extra_lines = 0
contains
subroutine astrosub(nyear,month,nday,uth8,freq8,mygrid_cp, &
@ -28,11 +31,18 @@ contains
character(len=6) :: mygrid, hisgrid
character(len=:), allocatable :: AzElFileName
character(len=1) :: c1
integer :: ih, im, imin, is, isec, nfreq, nRx
character(len=32) :: envvar
integer :: ih, im, imin, is, isec, nfreq, env_status
real(dp) :: AzAux, ElAux, dbMoon8, dfdt, dfdt0, doppler, doppler00, HA8, sd8, xlst8
character*256 jpleph_file_name
common/jplcom/jpleph_file_name
if (.not.initialized) then
call get_environment_variable ('WSJT_AZEL_EXTRA_LINES', envvar, status=env_status)
if (env_status.eq.0) read (envvar, *, iostat=env_status) azel_extra_lines
initialized = .true.
end if
mygrid = mygrid_cp
hisgrid = hisgrid_cp
AzElFileName = C_string_value (AzElFileName_cp)
@ -51,10 +61,8 @@ contains
is=mod(isec,60)
open(15,file=AzElFileName,status='unknown',err=900)
c1='R'
nRx=1
if(bTx) then
c1='T'
nRx=0
endif
AzAux=0.
ElAux=0.
@ -65,13 +73,13 @@ contains
ih,im,is,AzSun8,ElSun8, &
ih,im,is,AzAux,ElAux, &
nfreq,doppler,dfdt,doppler00,dfdt0,c1
! TXFirst,TRPeriod,poloffset,Dgrd,xnr,ave,rms,nRx
if (azel_extra_lines.ge.1) write(15, 1020, err=10) poloffset8,xnr8,Dgrd8
1010 format( &
i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/ &
i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/ &
i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/ &
i5,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler, ',a1)
! i1,',',i3,',',f8.1,','f8.1,',',f8.1,',',f12.3,',',f12.3,',',i1,',RPol')
1020 format(f8.1,','f8.1,',',f8.1,',Pol')
10 close(15)
go to 999

View File

@ -75,9 +75,7 @@ contains
logical single_decode,lagain
complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s
complex, allocatable :: c0(:) !Analytic signal, 6000 Sa/s
!w3sz added
integer stageno
integer stageno !Added by W3SZ
stageno=0
! Start by setting some parameters and allocating storage for large arrays
@ -96,7 +94,7 @@ contains
nfft1=ntrperiod*12000
nfft2=ntrperiod*6000
npasses=1
if(lagain) ndepth=ior(ndepth,3) !Use 'Deep' for manual Q65 decodes
dxcall13=hiscall ! initialize for use in packjt77
mycall13=mycall
@ -241,9 +239,8 @@ contains
nused=navg(iseq)
endif
100 stageno = 5
if(idec.lt.0) then
100 if(idec.lt.0 .and. max_drift.eq.50) then
stageno = 5
call timer('q65_dec0',0)
! Call top-level routine in q65 module: establish sync and try for a
! q3 or q0 decode.

View File

@ -268,7 +268,7 @@ subroutine q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
idec=5
endif
endif ! if(idec.lt.0 .and. maxdrift.eq.50 .and. stageno.eq.5)
endif ! if(idec.lt.0 .and. max_drift.eq.50 .and. stageno.eq.5)
return
end subroutine q65_dec0

View File

@ -22,12 +22,8 @@ subroutine q65_set_list(mycall,hiscall,hisgrid,codewords,ncw)
if(i.eq.1 .or. i.ge.6) msg='<'//trim(mycall)//'> '//trim(hiscall)
if(i.ge.2 .and. i.le.4) msg=trim(mycall)//' <'//trim(hiscall)//'>'
else if(.not.his_std) then
if(i.le.4) msg='<'//trim(mycall)//'> '//trim(hiscall)
if(i.le.4 .or. i.eq.6) msg='<'//trim(mycall)//'> '//trim(hiscall)
if(i.ge.7) msg=trim(mycall)//' <'//trim(hiscall)//'>'
if(i.eq.6) then
msg='TNX 73 GL'
go to 10
endif
endif
j0=len(trim(msg))+2
if(i.eq.2) msg(j0:j0+2)='RRR'

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3643,7 +3643,7 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
auto is_73 = message_words.filter (QRegularExpression {"^(73|RR73)$"}).size();
bool is_OK=false;
if(m_mode=="MSK144" and message.clean_string ().indexOf(ui->dxCallEntry->text()+" R ")>0) is_OK=true;
if (message_words.size () > 2 && (message.isStandardMessage() || (is_73 or is_OK))) {
if (message_words.size () > 3 && (message.isStandardMessage() || (is_73 or is_OK))) {
auto df = message.frequencyOffset ();
auto within_tolerance = (qAbs (ui->RxFreqSpinBox->value () - df) <= int (start_tolerance)
|| qAbs (ui->TxFreqSpinBox->value () - df) <= int (start_tolerance));
@ -3675,27 +3675,29 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
if (m_auto
&& (m_QSOProgress==REPLYING or (!ui->tx1->isEnabled () and m_QSOProgress==REPORT))
&& qAbs (ui->TxFreqSpinBox->value () - df) <= int (stop_tolerance)
&& message_words.at (1) != "DE"
&& !message_words.at (1).contains (QRegularExpression {"(^(CQ|QRZ))|" + m_baseCall})
&& message_words.at (2).contains (Radio::base_callsign (ui->dxCallEntry->text ()))) {
&& message_words.at (2) != "DE"
&& !message_words.at (2).contains (QRegularExpression {"(^(CQ|QRZ))|" + m_baseCall})
&& message_words.at (3).contains (Radio::base_callsign (ui->dxCallEntry->text ()))) {
// auto stop to avoid accidental QRM
ui->stopTxButton->click (); // halt any transmission
} else if (m_auto // transmit allowed
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked () // auto-sequencing allowed
&& ((!m_bCallingCQ // not calling CQ/QRZ
&& !m_sentFirst73 // not finished QSO
&& ((message_words.at (1).contains (m_baseCall)
// being called and not already in a QSO
&& (message_words.at(2).contains(Radio::base_callsign(ui->dxCallEntry->text())) or bEU_VHF))
// type 2 compound replies
|| (within_tolerance &&
(acceptable_73 ||
("DE" == message_words.at (1) &&
w2.contains(Radio::base_callsign (m_hisCall)))))))
|| (m_bCallingCQ && m_bAutoReply
// look for type 2 compound call replies on our Tx and Rx offsets
&& ((within_tolerance && "DE" == message_words.at (1))
|| message_words.at (1).contains (m_baseCall))))) {
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked () // auto-sequencing allowed
&& ((!m_bCallingCQ // not calling CQ/QRZ
&& !m_sentFirst73 // not finished QSO
&& ((message_words.at (2).contains (m_baseCall)
// being called and not already in a QSO
&& (message_words.at(3).contains(Radio::base_callsign(ui->dxCallEntry->text()))
or bEU_VHF))
|| message_words.at(1) == m_baseCall // <de-call> RR73; ...
// type 2 compound replies
|| (within_tolerance &&
(acceptable_73 ||
("DE" == message_words.at (2) &&
w2.contains(Radio::base_callsign (m_hisCall)))))))
|| (m_bCallingCQ && m_bAutoReply
// look for type 2 compound call replies on our Tx and Rx offsets
&& ((within_tolerance && "DE" == message_words.at (2))
|| message_words.at (2).contains (m_baseCall))))) {
if(SpecOp::FOX != m_config.special_op_id()) processMessage (message);
}
}
@ -4806,7 +4808,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
ui->txFirstCheckBox->setChecked(m_txFirst);
auto const& message_words = message.messageWords ();
if (message_words.size () < 2) return;
if (message_words.size () < 3) return;
QString hiscall;
QString hisgrid;
@ -4824,7 +4826,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
QStringList w=message.clean_string ().mid(22).remove("<").remove(">").split(" ",SkipEmptyParts);
int nw=w.size();
if(nw>=4) {
if(message_words.size()<3) return;
if(message_words.size()<4) return;
int n=w.at(nw-2).toInt();
if(n>=520001 and n<=592047) {
hiscall=w.at(1);
@ -4847,7 +4849,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
// ignore calls by other hounds
if (SpecOp::HOUND == m_config.special_op_id()
&& message.messageWords ().indexOf (QRegularExpression {R"(R\+-[0-9]+)"}) >= 0)
&& message.messageWords ().indexOf (QRegularExpression {R"(R\+-[0-9]+)"}) >= 1)
{
return;
}
@ -4926,22 +4928,22 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?"));
}
if(SpecOp::EU_VHF==m_config.special_op_id() and message_words.at(1).contains(m_baseCall) and
(!message_words.at(2).contains(qso_partner_base_call)) and (!m_bDoubleClicked)) {
if(SpecOp::EU_VHF==m_config.special_op_id() and message_words.at(2).contains(m_baseCall) and
(!message_words.at(3).contains(qso_partner_base_call)) and (!m_bDoubleClicked)) {
return;
}
bool bContestOK=(m_mode=="FT4" or m_mode=="FT8" or m_mode=="Q65" or m_mode=="MSK144");
if(message_words.size () > 3 // enough fields for a normal message
&& (message_words.at(1).contains(m_baseCall) || "DE" == message_words.at(1))
&& (message_words.at(2).contains(qso_partner_base_call) or m_bDoubleClicked
if(message_words.size () > 4 // enough fields for a normal message
&& (message_words.at(2).contains(m_baseCall) || "DE" == message_words.at(2))
&& (message_words.at(3).contains(qso_partner_base_call) or m_bDoubleClicked
or bEU_VHF_w2 or (m_QSOProgress==CALLING))) {
if(message_words.at(3).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) {
if(message_words.at(4).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) {
if((SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id()) and bContestOK){
setTxMsg(3);
m_QSOProgress=ROGER_REPORT;
} else {
if(m_mode=="JT65" and message_words.size()>4 and message_words.at(4)=="OOO") {
if(m_mode=="JT65" and message_words.size()>5 and message_words.at(5)=="OOO") {
setTxMsg(3);
m_QSOProgress=ROGER_REPORT;
} else {
@ -4981,7 +4983,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
m_QSOProgress=ROGER_REPORT;
}
} else { // no grid on end of msg
auto const& word_3 = message_words.at (3);
auto const& word_3 = message_words.at (4);
auto word_3_as_number = word_3.toInt ();
if (("RRR" == word_3
|| (word_3_as_number == 73 && ROGERS == m_QSOProgress)
@ -5103,17 +5105,29 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
}
}
}
else if (5 == message_words.size ()
&& m_baseCall == message_words.at (1)) {
// dual Fox style message, possibly from MSHV
if (m_config.prompt_to_log() || m_config.autoLog()) {
logQSOTimer.start(0);
}
else {
cease_auto_Tx_after_QSO ();
}
m_ntx=6;
ui->txrb6->setChecked(true);
}
else if (m_QSOProgress >= ROGERS
&& message_words.size () > 2 && message_words.at (1).contains (m_baseCall)
&& message_words.at (2) == "73") {
&& message_words.size () > 3 && message_words.at (2).contains (m_baseCall)
&& message_words.at (3) == "73") {
// 73 back to compound call holder
m_ntx=5;
ui->txrb5->setChecked(true);
m_QSOProgress = SIGNOFF;
}
else if (!(m_bAutoReply && (m_QSOProgress > CALLING))) {
if ((message_words.size () > 4 && message_words.at (1).contains (m_baseCall)
&& message_words.at (4) == "OOO")) {
if ((message_words.size () > 5 && message_words.at (2).contains (m_baseCall)
&& message_words.at (5) == "OOO")) {
// EME short code report or MSK144/FT8 contest mode reply, send back Tx3
m_ntx=3;
m_QSOProgress = ROGER_REPORT;
@ -5136,7 +5150,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
return;
}
}
else if (firstcall == "DE" && message_words.size () > 3 && message_words.at (3) == "73") {
else if (firstcall == "DE" && message_words.size () > 4 && message_words.at (4) == "73") {
if (m_QSOProgress >= ROGERS && base_call == qso_partner_base_call && m_currentMessageType) {
// 73 back to compound call holder
m_ntx=5;
@ -5204,6 +5218,12 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
lookup();
m_hisGrid = ui->dxGridEntry->text();
if (m_bDoubleClicked)
{
// extract our report if present
message.report (m_baseCall, Radio::base_callsign(ui->dxCallEntry->text()), m_rptRcvd);
}
if (!m_bSentReport || base_call != qso_partner_base_call) // Don't change report within a QSO
{
auto n = message.report ().toInt ();
@ -6445,7 +6465,7 @@ void MainWindow::on_actionQ65_triggered()
fast_config(false);
WSPR_config(false);
setup_status_bar(true);
ui->actionQuickDecode->setChecked(true);
// ui->actionQuickDecode->setChecked(true);
m_nsps=6912; //For symspec only
m_FFTSize = m_nsps / 2;
Q_EMIT FFTSize(m_FFTSize);

View File

@ -552,7 +552,7 @@
</layout>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_5" rowstretch="1,0,0" columnstretch="0,0,1,5,0">
<layout class="QGridLayout" name="gridLayout_5" rowstretch="1,0,0" columnstretch="0,0,1,4,0">
<item row="0" column="1" alignment="Qt::AlignHCenter|Qt::AlignVCenter">
<widget class="QPushButton" name="readFreq">
<property name="enabled">
@ -1276,23 +1276,17 @@ When not checked you can view the calibration results.</string>
<item>
<widget class="QPushButton" name="pbR2T">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>20</width>
<width>35</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>20</height>
</size>
</property>
<property name="toolTip">
<string>Set Tx frequency to Rx Frequency</string>
</property>
@ -1329,23 +1323,17 @@ When not checked you can view the calibration results.</string>
<item>
<widget class="QPushButton" name="pbT2R">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>20</width>
<width>35</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>20</height>
</size>
</property>
<property name="toolTip">
<string>Set Rx frequency to Tx Frequency</string>
</property>
@ -1713,9 +1701,6 @@ When not checked you can view the calibration results.</string>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxLength">
<number>30</number>
</property>
</widget>
</item>
<item row="4" column="1">
@ -1767,9 +1752,6 @@ Double click to toggle the use of the Tx1 message to start a QSO with a station
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxLength">
<number>30</number>
</property>
</widget>
</item>
<item row="5" column="2">
@ -1816,9 +1798,6 @@ Double-click to reset to the standard 73 message</string>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxLength">
<number>30</number>
</property>
</widget>
</item>
<item row="0" column="2">
@ -1858,9 +1837,6 @@ Double-click to reset to the standard 73 message</string>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxLength">
<number>30</number>
</property>
</widget>
</item>
<item row="3" column="0">
@ -1871,9 +1847,6 @@ Double-click to reset to the standard 73 message</string>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxLength">
<number>30</number>
</property>
</widget>
</item>
<item row="0" column="0">
@ -1980,12 +1953,6 @@ Double click to toggle the use of the Tx1 message to start a QSO with a station
</item>
<item row="5" column="0">
<widget class="QComboBox" name="tx5">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Enter a free text message (maximum 13 characters)
or select a predefined macro from the dropdown list.
@ -1998,6 +1965,9 @@ list. The list can be maintained in Settings (F2).</string>
<property name="insertPolicy">
<enum>QComboBox::InsertAtBottom</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToMinimumContentsLength</enum>
</property>
</widget>
</item>
<item row="5" column="1">
@ -2028,7 +1998,7 @@ Double-click to reset to the standard 73 message</string>
<attribute name="title">
<string>2</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_11">
<layout class="QGridLayout" name="gridLayout_11" columnstretch="1,0">
<item row="0" column="1" rowspan="2">
<layout class="QGridLayout" name="gridLayout_10">
<item row="2" column="0">
@ -2308,6 +2278,9 @@ Double-click to reset to the standard 73 message</string>
<height>16777215</height>
</size>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContentsOnFirstShow</enum>
</property>
</widget>
</item>
</layout>
@ -2879,7 +2852,7 @@ Yellow when too low</string>
<rect>
<x>0</x>
<y>0</y>
<width>968</width>
<width>842</width>
<height>21</height>
</rect>
</property>