mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-02-03 09:44:24 -05:00
Merge branch 'release-2.5.2'
This commit is contained in:
commit
68dc11b291
@ -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")
|
||||
|
@ -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_;}
|
||||
|
@ -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
50
NEWS
@ -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
|
||||
----------------------
|
||||
|
@ -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
|
||||
----------------------
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.)
|
||||
|
@ -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
|
||||
|
@ -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*.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
@ -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);
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user