mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -05:00
Merge branch 'develop' into feat-ft8-q3
This commit is contained in:
commit
6b2df37137
@ -45,7 +45,7 @@ if (POLICY CMP0075)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
project (wsjtx
|
project (wsjtx
|
||||||
VERSION 2.5.2.0
|
VERSION 2.6.0
|
||||||
LANGUAGES C CXX Fortran
|
LANGUAGES C CXX Fortran
|
||||||
)
|
)
|
||||||
set (PROJECT_DESCRIPTION "WSJT-X: Digital Modes for Weak Signal Communications in Amateur Radio")
|
set (PROJECT_DESCRIPTION "WSJT-X: Digital Modes for Weak Signal Communications in Amateur Radio")
|
||||||
@ -71,7 +71,7 @@ message (STATUS "******************************************************")
|
|||||||
|
|
||||||
include (set_build_type)
|
include (set_build_type)
|
||||||
# RC 0 or omitted is a development build, GA is a General Availability release build
|
# RC 0 or omitted is a development build, GA is a General Availability release build
|
||||||
set_build_type (RC GA)
|
set_build_type (RC 1)
|
||||||
set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}")
|
set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}")
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -506,6 +506,7 @@ set (wsjt_FSRCS
|
|||||||
lib/qra/q65/q65_set_list.f90
|
lib/qra/q65/q65_set_list.f90
|
||||||
lib/refspectrum.f90
|
lib/refspectrum.f90
|
||||||
lib/savec2.f90
|
lib/savec2.f90
|
||||||
|
lib/save_dxbase.f90
|
||||||
lib/sec0.f90
|
lib/sec0.f90
|
||||||
lib/sec_midn.f90
|
lib/sec_midn.f90
|
||||||
lib/setup65.f90
|
lib/setup65.f90
|
||||||
|
@ -208,7 +208,7 @@ namespace
|
|||||||
int const combo_box_item_disabled (0);
|
int const combo_box_item_disabled (0);
|
||||||
|
|
||||||
// QRegExp message_alphabet {"[- A-Za-z0-9+./?]*"};
|
// QRegExp message_alphabet {"[- A-Za-z0-9+./?]*"};
|
||||||
QRegularExpression message_alphabet {"[- @A-Za-z0-9+./?#<>]*"};
|
QRegularExpression message_alphabet {"[- @A-Za-z0-9+./?#<>;$]*"};
|
||||||
QRegularExpression RTTY_roundup_exchange_re {
|
QRegularExpression RTTY_roundup_exchange_re {
|
||||||
R"(
|
R"(
|
||||||
(
|
(
|
||||||
@ -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::log_as_RTTY () const {return m_->log_as_RTTY_;}
|
||||||
bool Configuration::report_in_comments () const {return m_->report_in_comments_;}
|
bool Configuration::report_in_comments () const {return m_->report_in_comments_;}
|
||||||
bool Configuration::prompt_to_log () const {return m_->prompt_to_log_;}
|
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::decodes_from_top () const {return m_->decodes_from_top_;}
|
||||||
bool Configuration::insert_blank () const {return m_->insert_blank_;}
|
bool Configuration::insert_blank () const {return m_->insert_blank_;}
|
||||||
bool Configuration::DXCC () const {return m_->DXCC_;}
|
bool Configuration::DXCC () const {return m_->DXCC_;}
|
||||||
|
@ -11,7 +11,39 @@ extern "C" {
|
|||||||
|
|
||||||
namespace
|
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)? # dual reply DXpedition message
|
||||||
|
(?:
|
||||||
|
(?<word1>
|
||||||
|
(?:CQ|DE|QRZ)
|
||||||
|
(?:\s?DX|\s
|
||||||
|
(?:[A-Z]{1,4}|\d{3}) # directional CQ
|
||||||
|
)
|
||||||
|
| [A-Z0-9/]+ # DX call
|
||||||
|
|\.{3} # unknown hash code
|
||||||
|
)\s
|
||||||
|
)
|
||||||
|
(?:
|
||||||
|
(?<word2>[A-Z0-9/]+) # DE call
|
||||||
|
(?:\s
|
||||||
|
(?<word3>[-+A-Z0-9]+) # report
|
||||||
|
(?:\s
|
||||||
|
(?<word4>
|
||||||
|
(?:
|
||||||
|
OOO # EME
|
||||||
|
| (?!RR73)[A-R]{2}[0-9]{2} # grid square (not RR73)
|
||||||
|
| 5[0-9]{5} # EU VHF Contest report & serial
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(?:\s
|
||||||
|
(?<word5>[A-R]{2}[0-9]{2}[A-X]{2}) # EU VHF Contest grid locator
|
||||||
|
)?
|
||||||
|
)?
|
||||||
|
)?
|
||||||
|
)?
|
||||||
|
)"
|
||||||
|
, QRegularExpression::ExtendedPatternSyntaxOption};
|
||||||
}
|
}
|
||||||
|
|
||||||
DecodedText::DecodedText (QString const& the_string)
|
DecodedText::DecodedText (QString const& the_string)
|
||||||
@ -23,13 +55,13 @@ DecodedText::DecodedText (QString const& the_string)
|
|||||||
, is_standard_ {false}
|
, is_standard_ {false}
|
||||||
{
|
{
|
||||||
// discard appended AP info
|
// discard appended AP info
|
||||||
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?(?:a|q)[0-9].*$)"}, "\\1");
|
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?[aq][0-9].*$)"}, "\\1");
|
||||||
|
|
||||||
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
||||||
if (message_.length() >= 1)
|
if (message_.length() >= 1)
|
||||||
{
|
{
|
||||||
message0_ = message_.left(36);
|
message0_ = message_.left(37);
|
||||||
message_ = message_.left(36).remove (QRegularExpression {"[<>]"});
|
message_ = message_.left(37).remove (QRegularExpression {"[<>]"});
|
||||||
int i1 = message_.indexOf ('\r');
|
int i1 = message_.indexOf ('\r');
|
||||||
if (i1 > 0)
|
if (i1 > 0)
|
||||||
{
|
{
|
||||||
@ -60,11 +92,13 @@ QStringList DecodedText::messageWords () const
|
|||||||
// extract up to the first four message words
|
// extract up to the first four message words
|
||||||
QString t=message_;
|
QString t=message_;
|
||||||
if(t.left(4)=="TU; ") t=message_.mid(4,-1);
|
if(t.left(4)=="TU; ") t=message_.mid(4,-1);
|
||||||
return words_re.match(t).capturedTexts();
|
return tokens_re.match(t).capturedTexts();
|
||||||
}
|
}
|
||||||
// simple word split for free text messages
|
// simple word split for free text messages
|
||||||
auto words = message_.split (' ', SkipEmptyParts);
|
auto words = message_.split (' ', SkipEmptyParts);
|
||||||
// add whole message as item 0 to mimic RE capture list
|
// add whole message and two empty strings as item 0 & 1 to mimic RE
|
||||||
|
// capture list
|
||||||
|
words.prepend (QString {});
|
||||||
words.prepend (message_);
|
words.prepend (message_);
|
||||||
return words;
|
return words;
|
||||||
}
|
}
|
||||||
@ -94,7 +128,7 @@ bool DecodedText::isTX() const
|
|||||||
|
|
||||||
bool DecodedText::isLowConfidence () const
|
bool DecodedText::isLowConfidence () const
|
||||||
{
|
{
|
||||||
return QChar {'?'} == string_.mid (padding_ + column_qsoText + 21, 1);
|
return QChar {'?'} == string_.mid (padding_ + column_qsoText + 36, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DecodedText::frequencyOffset() const
|
int DecodedText::frequencyOffset() const
|
||||||
@ -128,31 +162,37 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /
|
|||||||
if (message_.size () < 1) return false;
|
if (message_.size () < 1) return false;
|
||||||
|
|
||||||
QStringList const& w = message_.split(" ", SkipEmptyParts);
|
QStringList const& w = message_.split(" ", SkipEmptyParts);
|
||||||
if (w.size ()
|
int offset {0};
|
||||||
&& is_standard_ && (w[0] == myBaseCall
|
if (w.size () > 2)
|
||||||
|| w[0].endsWith ("/" + myBaseCall)
|
|
||||||
|| w[0].startsWith (myBaseCall + "/")
|
|
||||||
|| (w.size () > 1 && !dxBaseCall.isEmpty ()
|
|
||||||
&& (w[1] == dxBaseCall
|
|
||||||
|| w[1].endsWith ("/" + dxBaseCall)
|
|
||||||
|| w[1].startsWith (dxBaseCall + "/")))))
|
|
||||||
{
|
{
|
||||||
QString tt="";
|
if ("RR73;" == w[1] && w.size () > 3)
|
||||||
if(w.size() > 2) tt=w[2];
|
|
||||||
bool ok;
|
|
||||||
auto i1=tt.toInt(&ok);
|
|
||||||
if (ok and i1>=-50 and i1<50)
|
|
||||||
{
|
{
|
||||||
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);
|
report = tt;
|
||||||
if(ok and i1>=-50 and i1<50)
|
}
|
||||||
|
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 +203,7 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /
|
|||||||
// get the first text word, usually the call
|
// get the first text word, usually the call
|
||||||
QString DecodedText::call() const
|
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
|
// get the second word, most likely the de call and the third word, most likely grid
|
||||||
@ -175,7 +215,7 @@ void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
|
|||||||
{
|
{
|
||||||
msg = msg.mid (p + 2);
|
msg = msg.mid (p + 2);
|
||||||
}
|
}
|
||||||
auto const& match = words_re.match (msg);
|
auto const& match = tokens_re.match (msg);
|
||||||
call = match.captured ("word2");
|
call = match.captured ("word2");
|
||||||
grid = match.captured ("word3");
|
grid = match.captured ("word3");
|
||||||
if ("R" == grid) grid = match.captured ("word4");
|
if ("R" == grid) grid = match.captured ("word4");
|
||||||
|
50
NEWS
50
NEWS
@ -11,6 +11,56 @@
|
|||||||
|
|
||||||
Copyright 2001 - 2021 by Joe Taylor, K1JT.
|
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
|
Release: WSJT-X 2.5.1
|
||||||
Oct 21, 2021
|
Oct 21, 2021
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -11,6 +11,90 @@
|
|||||||
|
|
||||||
Copyright 2001 - 2021 by Joe Taylor, K1JT.
|
Copyright 2001 - 2021 by Joe Taylor, K1JT.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.4
|
||||||
|
Dec 28, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This is mostly a bug fix release. It has the following changes since
|
||||||
|
release 2.5.3:
|
||||||
|
|
||||||
|
WSJTX:
|
||||||
|
- Repair a defect that caused occasional crashes when in QSO with
|
||||||
|
stations using nonstandard callsigns.
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Allowing MAP65 "Best-fit Delta phi" solution to be displayed to the
|
||||||
|
user.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.3
|
||||||
|
Dec 7, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This release has the following changes since release 2.5.2:
|
||||||
|
|
||||||
|
- Add a note in memory of G4WJS to the About window
|
||||||
|
|
||||||
|
- Add a simple $DXCALL macro capability for Tx messages, and update
|
||||||
|
the User Guide accordingly
|
||||||
|
|
||||||
|
- Ensure that MAIN VFO is used for receiving on rigs that require it
|
||||||
|
|
||||||
|
- Repair a defect in reporting low-confidence decodes to PskReporter
|
||||||
|
|
||||||
|
- Updated CTY.DAT database, tnx to Jim AD1C
|
||||||
|
|
||||||
|
|
||||||
|
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
|
Release: WSJT-X 2.5.1
|
||||||
Oct 21, 2021
|
Oct 21, 2021
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -385,7 +385,7 @@ auto DXLabSuiteCommanderTransceiver::get_mode () -> MODE
|
|||||||
|
|
||||||
void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
|
void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
|
||||||
{
|
{
|
||||||
Q_ASSERT (commander_);
|
if (!commander_) return;
|
||||||
|
|
||||||
CAT_TRACE (cmd);
|
CAT_TRACE (cmd);
|
||||||
|
|
||||||
@ -398,7 +398,7 @@ void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
|
|||||||
|
|
||||||
QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd)
|
QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd)
|
||||||
{
|
{
|
||||||
Q_ASSERT (commander_);
|
if (!commander_) return QString {};
|
||||||
|
|
||||||
if (!write_to_port (cmd))
|
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)
|
QString HRDTransceiver::send_command (QString const& cmd, bool prepend_context, bool recurse)
|
||||||
{
|
{
|
||||||
Q_ASSERT (hrd_);
|
if (!hrd_) return QString {};
|
||||||
|
|
||||||
QString result;
|
QString result;
|
||||||
|
|
||||||
|
@ -882,7 +882,12 @@ void HamlibTransceiver::do_frequency (Frequency f, MODE m, bool no_ignore)
|
|||||||
{
|
{
|
||||||
// for the 1st time as a band change may cause a recalled mode to be
|
// for the 1st time as a band change may cause a recalled mode to be
|
||||||
// set
|
// set
|
||||||
m_->error_check (rig_set_freq (m_->rig_.data (), RIG_VFO_CURR, f), tr ("setting frequency"));
|
vfo_t target_vfo = RIG_VFO_CURR;
|
||||||
|
if (!(m_->rig_->state.vfo_list & RIG_VFO_B))
|
||||||
|
{
|
||||||
|
target_vfo = RIG_VFO_MAIN; // no VFO A/B so force to Rx on MAIN
|
||||||
|
}
|
||||||
|
m_->error_check (rig_set_freq (m_->rig_.data (), target_vfo, f), tr ("setting frequency"));
|
||||||
update_rx_frequency (f);
|
update_rx_frequency (f);
|
||||||
|
|
||||||
if (m_->mode_query_works_ && UNK != m)
|
if (m_->mode_query_works_ && UNK != m)
|
||||||
@ -890,13 +895,13 @@ void HamlibTransceiver::do_frequency (Frequency f, MODE m, bool no_ignore)
|
|||||||
rmode_t current_mode;
|
rmode_t current_mode;
|
||||||
pbwidth_t current_width;
|
pbwidth_t current_width;
|
||||||
auto new_mode = m_->map_mode (m);
|
auto new_mode = m_->map_mode (m);
|
||||||
m_->error_check (rig_get_mode (m_->rig_.data (), RIG_VFO_CURR, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
m_->error_check (rig_get_mode (m_->rig_.data (), target_vfo, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
||||||
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
||||||
|
|
||||||
if (new_mode != current_mode)
|
if (new_mode != current_mode)
|
||||||
{
|
{
|
||||||
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
||||||
m_->error_check (rig_set_mode (m_->rig_.data (), RIG_VFO_CURR, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
m_->error_check (rig_set_mode (m_->rig_.data (), target_vfo, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
||||||
|
|
||||||
// for the 2nd time because a mode change may have caused a
|
// for the 2nd time because a mode change may have caused a
|
||||||
// frequency change
|
// frequency change
|
||||||
@ -905,7 +910,7 @@ void HamlibTransceiver::do_frequency (Frequency f, MODE m, bool no_ignore)
|
|||||||
// for the second time because some rigs change mode according
|
// for the second time because some rigs change mode according
|
||||||
// to frequency such as the TS-2000 auto mode setting
|
// to frequency such as the TS-2000 auto mode setting
|
||||||
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
||||||
m_->error_check (rig_set_mode (m_->rig_.data (), RIG_VFO_CURR, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
m_->error_check (rig_set_mode (m_->rig_.data (), target_vfo, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
||||||
}
|
}
|
||||||
update_mode (m);
|
update_mode (m);
|
||||||
}
|
}
|
||||||
@ -1037,16 +1042,22 @@ void HamlibTransceiver::do_mode (MODE mode)
|
|||||||
pbwidth_t current_width;
|
pbwidth_t current_width;
|
||||||
auto new_mode = m_->map_mode (mode);
|
auto new_mode = m_->map_mode (mode);
|
||||||
|
|
||||||
|
vfo_t target_vfo = RIG_VFO_CURR;
|
||||||
|
if (!(m_->rig_->state.vfo_list & RIG_VFO_B))
|
||||||
|
{
|
||||||
|
target_vfo = RIG_VFO_MAIN; // no VFO A/B so force to Rx on MAIN
|
||||||
|
}
|
||||||
|
|
||||||
// only change when receiving or simplex if direct VFO addressing unavailable
|
// only change when receiving or simplex if direct VFO addressing unavailable
|
||||||
if (!(state ().ptt () && state ().split () && m_->one_VFO_))
|
if (!(state ().ptt () && state ().split () && m_->one_VFO_))
|
||||||
{
|
{
|
||||||
m_->error_check (rig_get_mode (m_->rig_.data (), RIG_VFO_CURR, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
m_->error_check (rig_get_mode (m_->rig_.data (), target_vfo, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
||||||
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
||||||
|
|
||||||
if (new_mode != current_mode)
|
if (new_mode != current_mode)
|
||||||
{
|
{
|
||||||
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
||||||
m_->error_check (rig_set_mode (m_->rig_.data (), RIG_VFO_CURR, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
m_->error_check (rig_set_mode (m_->rig_.data (), target_vfo, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
* *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
|
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
|
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
|
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
|
sequence lengths, respectively. (Note that the actual start time may
|
||||||
have been earlier if repeats of early transmissions were required.)
|
have been earlier if repeats of early transmissions were required.)
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 7.0 KiB |
@ -7,8 +7,11 @@ messages such as the examples shown below.
|
|||||||
|
|
||||||
image::tx-macros.png[align="center",alt="Tx Macros Screen"]
|
image::tx-macros.png[align="center",alt="Tx Macros Screen"]
|
||||||
|
|
||||||
- To add a new message to the list, enter the desired text (up to 13
|
- To add a new message to the list, enter the desired text in the
|
||||||
characters) in the entry field at top, then click *Add*.
|
entry field at top, then click *Add*.
|
||||||
|
|
||||||
|
- Remember that a transmitted free-text message is limited to 13
|
||||||
|
characters, including blanks.
|
||||||
|
|
||||||
- To remove an unwanted message, click on the message and then on
|
- To remove an unwanted message, click on the message and then on
|
||||||
*Delete*.
|
*Delete*.
|
||||||
@ -18,3 +21,7 @@ new order will be preserved when _WSJT-X_ is restarted.
|
|||||||
|
|
||||||
- Messages can also be added from the main window's *Tx5*
|
- Messages can also be added from the main window's *Tx5*
|
||||||
field. Simply hit [Enter] after the message has been entered.
|
field. Simply hit [Enter] after the message has been entered.
|
||||||
|
|
||||||
|
- If the first word of a message is $DXCALL (or the shortened form
|
||||||
|
$DX), that word will be replaced on transmission by the base callsign
|
||||||
|
in the *DxCall* field.
|
||||||
|
@ -333,6 +333,27 @@ correlation algorithm. JT65 and Q65 offer _a priori_ (AP)
|
|||||||
decoding, which takes advantage of naturally accumulating information
|
decoding, which takes advantage of naturally accumulating information
|
||||||
during a QSO.
|
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
|
The following tutorial aims to familiarize you with
|
||||||
these program features, all of which are of special interest for EME
|
these program features, all of which are of special interest for EME
|
||||||
|
569
g4wjs.txt
Normal file
569
g4wjs.txt
Normal file
@ -0,0 +1,569 @@
|
|||||||
|
Joe Taylor, K1JT:
|
||||||
|
|
||||||
|
I am very sorry to convey the sad news that Bill Somerville,
|
||||||
|
G4WJS, died suddenly and unexpectedly a few days ago. He was only
|
||||||
|
about 65 years old.
|
||||||
|
|
||||||
|
Bill was a dear friend and very close colleague, though (as is often
|
||||||
|
the case with worldwide ham radio friendships) we had met in person
|
||||||
|
only a few times. In 2013 he was the first to join me in forming a
|
||||||
|
core development group for WSJT-X, which at that time was at program
|
||||||
|
version 0.99. Bill has been closely involved with WSJT-X and related
|
||||||
|
software projects ever since.
|
||||||
|
|
||||||
|
Our free, open-source software could not have achieved its extensive
|
||||||
|
worldwide popularity and influence in ham radio without Bill's
|
||||||
|
essential contributions. In addition to writing code for important
|
||||||
|
portions of the Qt-based user interface for WSJT-X, Bill helped to
|
||||||
|
bring the overall program structure more nearly up to professional
|
||||||
|
standards. Moreover, he devoted countless hours to program support,
|
||||||
|
patiently answering user's questions on WSJT-related forums.
|
||||||
|
|
||||||
|
I have only started to think about the many ways in which I will miss
|
||||||
|
Bill -- not no mention how we all will miss his immense and positive
|
||||||
|
impact on WSJT-X and related projects. For more than eight years Bill
|
||||||
|
and I communicated closely and regularly on ham radio topics,
|
||||||
|
sometimes many times per day. Perhaps I will be able to write more
|
||||||
|
about it in the near future.
|
||||||
|
|
||||||
|
Rest in peace, dear friend G4WJS.
|
||||||
|
|
||||||
|
|
||||||
|
Stan Gammons, KM4HQE:
|
||||||
|
|
||||||
|
So sad to hear that Joe. Bill will be greatly missed.
|
||||||
|
|
||||||
|
Prayers for his family and friends.
|
||||||
|
|
||||||
|
Rest in peace Bill
|
||||||
|
|
||||||
|
Colin Haig, VE3MSC:
|
||||||
|
|
||||||
|
Joe, this is truly sad news. Bill has been a wonderful resource and
|
||||||
|
supported all of us. Please pass condolences to his family.
|
||||||
|
|
||||||
|
PA3GCU:
|
||||||
|
|
||||||
|
May he rest in peace.
|
||||||
|
|
||||||
|
Philip Hazelton, G8PJH
|
||||||
|
|
||||||
|
This is shocking news, he was such talent, he will be sorely missed,
|
||||||
|
condolences to his family.
|
||||||
|
|
||||||
|
Philip Rose, GM3ZZA
|
||||||
|
|
||||||
|
You have provided an excellent service to the WSJT-X community. I
|
||||||
|
think your last post was a couple of days ago. We will all miss you,
|
||||||
|
and your incisive resolution of all our problems.
|
||||||
|
|
||||||
|
Requiescat in pace.
|
||||||
|
Dave, AA6YQ:
|
||||||
|
|
||||||
|
A huge loss for all of us. Bill always took the time to provide a
|
||||||
|
friendly, accurate, and helpful answer to any question that came his
|
||||||
|
way. He set one good example after another.
|
||||||
|
|
||||||
|
Reino Talarmo, OH3MA:
|
||||||
|
|
||||||
|
RIP Bill, We will miss your kind advice.
|
||||||
|
|
||||||
|
Tom V. Segalstad, LA4LN:
|
||||||
|
|
||||||
|
The silent key of Bill is very sad news.
|
||||||
|
|
||||||
|
Bill has been extremely helpful for radio amateurs to make WSJT-X fit
|
||||||
|
their different radios and computers. We have seen E-mail answers from
|
||||||
|
him coming at all times during borh day and night. And we wonder if he
|
||||||
|
ever got time to sleep or eat, in-between his good answers and advices
|
||||||
|
to radio amateurs world wide.
|
||||||
|
|
||||||
|
So rest in peace Bill, and thank you very much for all the help you
|
||||||
|
have provided to radio amateurs world wide, for making their digital
|
||||||
|
radio amateur activity very successful.
|
||||||
|
|
||||||
|
John, VE7KKQ:
|
||||||
|
|
||||||
|
So long, Bill, condolences to his family.
|
||||||
|
|
||||||
|
Tom, M0LTE:
|
||||||
|
|
||||||
|
Unreal. Deeply shocking.
|
||||||
|
|
||||||
|
Heartfelt condolences from us all at the Reading club, where Bill was
|
||||||
|
a member.
|
||||||
|
|
||||||
|
Борис Романов (Boris Romanov), UX8IW:
|
||||||
|
|
||||||
|
Sad news. Condolences to Bill's family and friends.
|
||||||
|
|
||||||
|
Ken Cox, WA8OMR:
|
||||||
|
|
||||||
|
Sorry to hear about Bill's passing. I will miss reading his answers to
|
||||||
|
the many questions posted. I have learned a lot from them.Ken WA8OMR.
|
||||||
|
|
||||||
|
Gary Trock:
|
||||||
|
|
||||||
|
Very Sad.
|
||||||
|
I’ve been reading his posts since I joined.
|
||||||
|
RIP.
|
||||||
|
|
||||||
|
Dave Sellars, KB4JB:
|
||||||
|
|
||||||
|
Very sad news indeed. Amateur Radio worldwide has lost a tremendous
|
||||||
|
ham and friend. His contributions to WSJT-X and this group will never
|
||||||
|
be forgotten.
|
||||||
|
|
||||||
|
Lynn Mears, K0CLM:
|
||||||
|
|
||||||
|
Extremely sad news. I haven’t been involved with WSJT that long, but
|
||||||
|
it was obvious that Bill donated a lot of time and effort towards WSJT
|
||||||
|
and helping in many different ways. He will be missed greatly.
|
||||||
|
|
||||||
|
Peter, M0PWX:
|
||||||
|
|
||||||
|
Sad news indeed, Bill was a great resource and font of so much
|
||||||
|
knowledge, as well as having the patience of a saint when dealing with
|
||||||
|
some members / questions
|
||||||
|
|
||||||
|
Will be greatly missed on here
|
||||||
|
|
||||||
|
|
||||||
|
Russ Ravella:
|
||||||
|
|
||||||
|
Incredibly sad news. What a wonderful, valuable and kind man Bill
|
||||||
|
was. How much better the world would be with more Bill’s in it.
|
||||||
|
Thank you and Rest In Peace Bill Somerville.
|
||||||
|
|
||||||
|
Sam Birnbaum, W2JDB:
|
||||||
|
|
||||||
|
So very sorry to hear this sad news. Bill has been very extremely
|
||||||
|
helpful to me in providing the information that allowed me to provide
|
||||||
|
a complimentary program for WSJT-X so that visually impaired/blind
|
||||||
|
hams can also partake in this fantastic program and its modes.
|
||||||
|
|
||||||
|
Rest In Peace Bill, you will be sorely missed by all.
|
||||||
|
|
||||||
|
Jack Trampler, N2JT
|
||||||
|
|
||||||
|
I never worked Bill. Did he even have time to operate? I never met
|
||||||
|
Bill. But I would have liked to. I never sent him an email, either
|
||||||
|
personal or on this group. I wish I had.
|
||||||
|
|
||||||
|
I enjoyed my daily (actually several times a day) reading of the
|
||||||
|
messages posted in this group and his replies. I learned a lot from
|
||||||
|
them. This man had so much knowledge and the fact that he took the
|
||||||
|
time to deal with almost every post in this group and share that
|
||||||
|
knowledge, its truly a testament to this man. I for one will surely
|
||||||
|
miss him.
|
||||||
|
|
||||||
|
I wish I knew him better. Rest in Peace, Bill.
|
||||||
|
|
||||||
|
Pete Smith, N4ZR:
|
||||||
|
|
||||||
|
Terrible news. Though I'm not a great devotee of the digital modes
|
||||||
|
(except CW), without Bill I'm convinced I would not have made a single
|
||||||
|
QSO using WSJT-X. My sympathy to his family and friends.
|
||||||
|
|
||||||
|
Neil Zampella, KN3ILZ:
|
||||||
|
|
||||||
|
I agree. Bill was patient with everyone, even me when I replied to a
|
||||||
|
post and chewed my foot up to the ankle.
|
||||||
|
|
||||||
|
His passing will affect much done within WSJT-X, as well as Hamlib.
|
||||||
|
He was a font of knowledge and 'corporate' memory.
|
||||||
|
|
||||||
|
We may not see his like again.
|
||||||
|
|
||||||
|
Jim Brown, K9YC:
|
||||||
|
|
||||||
|
If Bill had done nothing more than provide what seemed like 24/7
|
||||||
|
support here, his contribution would have been monumental. Thanks
|
||||||
|
Bill, RIP.
|
||||||
|
|
||||||
|
Jeff, K3JRZ:
|
||||||
|
|
||||||
|
Wow. Very sad to hear.
|
||||||
|
|
||||||
|
I had sent many emails to him looking for help with WSJT-X when I
|
||||||
|
first started having my first issues with it when I started with the
|
||||||
|
software and then again after several macOS updates. Always a great
|
||||||
|
guy to get help from. He will surely be missed. My condolences to his
|
||||||
|
family and to all that knew him.
|
||||||
|
|
||||||
|
Lance Collister, W7GJ:
|
||||||
|
|
||||||
|
Our heart-felt condolences to you, Joe, and to all the folks like me
|
||||||
|
whom he so patiently helped over the years. He was an amazing member
|
||||||
|
of the WSJT-X team, and I found myself always amazed at how in the
|
||||||
|
world he was able to answer all the questions posed to him by users of
|
||||||
|
WSJT-X on such a myriad of different rigs with different software. His
|
||||||
|
contributions will be long remembered, and very much appreciated. So
|
||||||
|
sad to see someone go who gave so much so freely to our
|
||||||
|
community. RIP, Bill.
|
||||||
|
|
||||||
|
Klaus Werner, G7RTI:
|
||||||
|
|
||||||
|
Thanks to Bill’s helpful explanations I was able to get going on
|
||||||
|
WSJTX.
|
||||||
|
|
||||||
|
I didn’t know him or anything about him except what has been written
|
||||||
|
in previous comments.
|
||||||
|
|
||||||
|
May he rest in peace.
|
||||||
|
|
||||||
|
Wayne Rash, N4HCR:
|
||||||
|
|
||||||
|
This is so sad. Bill always showed great patience with my dumb
|
||||||
|
questions. He played a big role in making WSJTX a joy to use. Ham
|
||||||
|
radio owes him a huge debt.
|
||||||
|
|
||||||
|
Rest In Peace, Bill.
|
||||||
|
|
||||||
|
Dave:
|
||||||
|
|
||||||
|
Very sad to hear. He will live in our memories and our operating.
|
||||||
|
|
||||||
|
Ed Radlo, AJ6V:
|
||||||
|
|
||||||
|
Bill always answered the various online queries vey quickly, and his
|
||||||
|
vast knowledge helped many of us get on track with all of these new
|
||||||
|
digital modes.
|
||||||
|
|
||||||
|
A great loss to ham radio.
|
||||||
|
|
||||||
|
Bob Bownes: (?)
|
||||||
|
|
||||||
|
Very sad to hear. May his memory be a blessing to his family and all
|
||||||
|
who knew him.
|
||||||
|
|
||||||
|
In the Law Enforcement, Fire and Emergency Medical Services, the
|
||||||
|
passing on of one such is often marked with a 'Last Call' or 'Final
|
||||||
|
Dispatch' in which the departed's call sign is requested thrice for
|
||||||
|
one last time. Usually at a pre-arranged or significant time. Seems
|
||||||
|
appropriate in this case as well. Perhaps you could do that for us
|
||||||
|
Joe.
|
||||||
|
|
||||||
|
Rick, I2BRT:
|
||||||
|
|
||||||
|
Very sad news and a great loss for our cumunity. Thanks for all the
|
||||||
|
effort and friendship Bill. Rest in peace.
|
||||||
|
|
||||||
|
Andy, GD0TEP:
|
||||||
|
|
||||||
|
I never worked Bill. Did he even have time to operate?
|
||||||
|
|
||||||
|
Yes, I worked him on 15m in August just gone, and on 6m back in
|
||||||
|
May. Both on FT8 of course.
|
||||||
|
|
||||||
|
Gwen, KI5PXQ:
|
||||||
|
|
||||||
|
I also worked him, 1600Z on the 24th of October, 15 meters, FT8.
|
||||||
|
|
||||||
|
Ria, N2RJ:
|
||||||
|
|
||||||
|
This is truly awful news. Bill will certainly be missed.
|
||||||
|
|
||||||
|
Walter, OE6IWG:
|
||||||
|
|
||||||
|
VY sad News :-(
|
||||||
|
|
||||||
|
Bill was a GREAT helper - also for me. My condolences to his family
|
||||||
|
and friends.
|
||||||
|
|
||||||
|
Ed Wilson, K0KC:
|
||||||
|
|
||||||
|
This is a tremendous loss to the amateur radio community, but as
|
||||||
|
someone who lost his brother only a few weeks ago, I know that the
|
||||||
|
loss is much greater to his family and close friends...my condolences
|
||||||
|
to each of them. RIP, Bill...
|
||||||
|
|
||||||
|
Amos Sobel, 4X4MF:
|
||||||
|
|
||||||
|
Me and the WSJT-X community mourn the departure of Bill Somerville
|
||||||
|
|
||||||
|
Bob, K4RCG:
|
||||||
|
|
||||||
|
I deeply regret not sending Bill a "personal thank you" e-mail for his
|
||||||
|
support of our hobby. I had planned on doing so, but didn't want to
|
||||||
|
add traffic to his in-box admin! He will be missed, but fondly
|
||||||
|
remembered.
|
||||||
|
|
||||||
|
Hamish, G0GLG:
|
||||||
|
|
||||||
|
Very sad day for amateur radio.
|
||||||
|
|
||||||
|
Paul Welford, G4YKQ:
|
||||||
|
|
||||||
|
A Tribute to my dearest friend Bill Somerville G4WJS.
|
||||||
|
|
||||||
|
I apologize for length of this post. This might answer a few previous
|
||||||
|
posts Knowing Bill he will be still reading all these posts from a
|
||||||
|
better place.
|
||||||
|
|
||||||
|
I thank you for your speedy post Joe.
|
||||||
|
|
||||||
|
Bill G4WJS was one of my dearest friends living just 4 miles apart.We
|
||||||
|
spoke 2/3 times a week and at times several times a day.
|
||||||
|
|
||||||
|
After a 20 year plus break Bill spurred me on to come back into the
|
||||||
|
radio family. I OWE HIM A LOT. Thanks to him my major interest in the
|
||||||
|
last 10 years has been WSJT-X. Bill also had a passion for Photography
|
||||||
|
and me being a Photographer for The Sun Newspaper In London before I
|
||||||
|
retired had another common interest we liked to have a good natter but
|
||||||
|
I often came off the worst.Bill lived on his own so we kept a close
|
||||||
|
eye on each other.
|
||||||
|
|
||||||
|
Bill had a degree in Chemistry but as I understand was self taught in
|
||||||
|
computing and electronics.Please see his QRZ page.
|
||||||
|
|
||||||
|
He was a whizz. He was a great natural teacher and Joe I think this was
|
||||||
|
one of the reasons he got on so well with you and the group.He
|
||||||
|
remarked to me many times "I never mind helping anyone provided they
|
||||||
|
help themselves" At times glaring at me muttering under his breath
|
||||||
|
"Read the notes and the posts" Sometimes it so annoyed him when I
|
||||||
|
could not keep a straight face..we all know the story.Bill always
|
||||||
|
willing to help with a computer grafted to his hand. Over the last
|
||||||
|
ten years he has like others in the group spent hours and hours
|
||||||
|
involved with WSJX-X.He had a great admiration for open source
|
||||||
|
programs.Made many friends within the digital community and a big
|
||||||
|
respect for Dxlabs {Dave] JTalert [Laurie] among others. I was always
|
||||||
|
giving him praise for taking a break and TXing winding up this 4 ele
|
||||||
|
,of late not often[Bill head in PC} every day I would have a crafty
|
||||||
|
check on his PSK. Bill was very much in favour of Using L.O.T.W but
|
||||||
|
never collected awards,but on receiving a trophy for technical
|
||||||
|
achievement announced at Dayton when he told me there was no emotion
|
||||||
|
but I knew Bill just to well he was chuffed !
|
||||||
|
|
||||||
|
Sadly last Friday after never responding to my calls I found Bill
|
||||||
|
seated in his shack at peace surrounded by the things he loved most.
|
||||||
|
|
||||||
|
I am still total shock!!!
|
||||||
|
|
||||||
|
Such a loss of a talented and loyal friend and as I have said he shall
|
||||||
|
be greatly missed by many in our radio family.
|
||||||
|
|
||||||
|
R.I.P.William [Bill ] G4WJS.
|
||||||
|
|
||||||
|
God Bless you and till we meet again 73.................. Cheers mate!
|
||||||
|
|
||||||
|
Ronnie Hull:
|
||||||
|
|
||||||
|
I am greatly saddened to hear this news.
|
||||||
|
|
||||||
|
Keith Wood, W4RPE:
|
||||||
|
|
||||||
|
Great tribute to a wonderful man.
|
||||||
|
|
||||||
|
Carlos, OE3JAG:
|
||||||
|
|
||||||
|
May I also do my sadly condolences to his family and his friends ! He
|
||||||
|
will surely be missed by all the hams. Thanks for got in touch with
|
||||||
|
you, dear Bill.
|
||||||
|
|
||||||
|
Good luck in your new place, Bill, I miss you,
|
||||||
|
|
||||||
|
William Hensley, WG8S:
|
||||||
|
|
||||||
|
A great tribute, Paul! I'm sorry you were the one to find him, yet I
|
||||||
|
sense you would both want it that way. I did not know Bill, but he
|
||||||
|
made a tremendous contribution to the WSJT-X community. He will be
|
||||||
|
missed.
|
||||||
|
|
||||||
|
RIP, Bill. Thank you, Paul.
|
||||||
|
|
||||||
|
Bernd, KB7AK:
|
||||||
|
|
||||||
|
Thank you for your tribute Paul, we will all miss Bill dearly.
|
||||||
|
|
||||||
|
Philip Rose, GM3ZZA:
|
||||||
|
|
||||||
|
As far as I can see we as amateurs who have been helped by Bill,
|
||||||
|
should keep up his good work. I know I can’t alone.
|
||||||
|
|
||||||
|
His advice was definitive. Others not so.
|
||||||
|
|
||||||
|
Jim Brown, K9YC:
|
||||||
|
|
||||||
|
Thanks very much, Paul, for this lovely and loving post. As you and
|
||||||
|
Joe have so eloquently written, Bill exemplified the best of the ham
|
||||||
|
spirit, by giving and sharing far more than he received.
|
||||||
|
|
||||||
|
Erik, VA7QI:
|
||||||
|
|
||||||
|
Very sorry to hear about Bill. I enjoyed reading his comments and
|
||||||
|
very much appreciate his contribution for WSTJ-X.
|
||||||
|
|
||||||
|
His name and callsign will be remembered for a long time as a shining
|
||||||
|
light of the ham radio community.
|
||||||
|
|
||||||
|
73 de va7qi, ....Erik.
|
||||||
|
|
||||||
|
Marco, PY1ZRJ:
|
||||||
|
My God! Whats terrible news is this!
|
||||||
|
|
||||||
|
Bill helped me in many occasions with WSJT-X always with a very pure
|
||||||
|
"ham-spirit" and availability.
|
||||||
|
|
||||||
|
My very sincere condolence to all his family and friends, I will miss
|
||||||
|
him a lot despite I never had the pleasure to meet him.
|
||||||
|
|
||||||
|
Martin Davies, G0HDB:
|
||||||
|
|
||||||
|
That is truly unwelcome and most distressing news, Joe; I'm sure the
|
||||||
|
vast amounts of time and effort that Bill devoted to the development
|
||||||
|
and support of WSJT-X will be very sorely missed by everyone in the
|
||||||
|
community, whether or not they had ever had any direct dealings with
|
||||||
|
Bill.
|
||||||
|
|
||||||
|
Please convey all our sympathies and our deepest condolences to Bill's
|
||||||
|
relatives and friends.
|
||||||
|
|
||||||
|
John Nelson, G4KLA:
|
||||||
|
|
||||||
|
I am saddened to learn of your news. This is blow to the WSJT-X
|
||||||
|
community.
|
||||||
|
|
||||||
|
In the early days of Bill’s involvement with WSJT he often logged into
|
||||||
|
my Macs at home to test his software modifications on a Mac until he
|
||||||
|
got a VM working. He and I had numerous discussions while testing new
|
||||||
|
versions on various Mac OS. He was generous with his time in helping
|
||||||
|
folks with problems either running the codes or attempting to build
|
||||||
|
the software on various platforms. The multitude of emails to the
|
||||||
|
development list is a tribute to his commitment to ensure that the
|
||||||
|
various programs operated flawlessly.
|
||||||
|
|
||||||
|
His involvement with the development of WSJT-X code especially with
|
||||||
|
modernising the structure of the whole program has been immense. I
|
||||||
|
will certainly miss his advice.
|
||||||
|
|
||||||
|
A sad day…
|
||||||
|
|
||||||
|
Alan, G0TLK:
|
||||||
|
|
||||||
|
Shocking and saddening news, he will be greatly missed.
|
||||||
|
|
||||||
|
My condolences to his family and friends, and RIP Bill.
|
||||||
|
|
||||||
|
Robin, G8DQX:
|
||||||
|
|
||||||
|
I only knew Bill through his contributions to the WSJT lists. Those
|
||||||
|
contributions were sharp, radical, and usually encouraging. He was a
|
||||||
|
clearly essential part of a team that is helping Amateur Radio to
|
||||||
|
grow, expand and develop, far beyond what you and I knew when,
|
||||||
|
soldering iron in hand, we first played with radio, all those years
|
||||||
|
ago.
|
||||||
|
|
||||||
|
My condolences to his family and friends. We shall all miss him.
|
||||||
|
|
||||||
|
Robin, G8DQX
|
||||||
|
|
||||||
|
Charlie Suckling, G3WDG/DL3WDG:
|
||||||
|
|
||||||
|
We were also shocked and very sorry to hear of Bill's sudden
|
||||||
|
passing. I never had the pleasure of meeting him in person. Like Bob,
|
||||||
|
he attended the same University and read the same degree.
|
||||||
|
|
||||||
|
We are so grateful for his contributions over many years to
|
||||||
|
WSJT-X. His support for users was first class, and he even joined the
|
||||||
|
EME reflectors to give support to EME users during the roll-out of
|
||||||
|
Q65, despite not being active himself on EME. He was contributing
|
||||||
|
there regularly, and some of his last efforts were to support the use
|
||||||
|
of WSJT-X for Doppler control on CW on the microwave bands.
|
||||||
|
|
||||||
|
He was also a very patient and diligent teacher, tutoring and helping
|
||||||
|
those who wished to make small contributions to the project. I am very
|
||||||
|
grateful for the time he spent in such ways.
|
||||||
|
|
||||||
|
Bill will surely be greatly missed, and sincere condolences to his
|
||||||
|
family and many friends.
|
||||||
|
|
||||||
|
RIP Bill.
|
||||||
|
|
||||||
|
James Shaver, N2ADV:
|
||||||
|
|
||||||
|
I had the pleasure of talking to Bill over Skype a few times during
|
||||||
|
the development of 1.7 and later 1.8 to chase down some CAT control
|
||||||
|
gremlins with several radios I happen to own. His patience and
|
||||||
|
intelligence was incredible. Such a huge loss to us all.
|
||||||
|
|
||||||
|
My sincerest condolences to his family and friends.
|
||||||
|
|
||||||
|
He will definitely be missed but his contributions to the advancement
|
||||||
|
of amateur radio will live on indefinitely.
|
||||||
|
|
||||||
|
Alessandro Gorobey, IK2
|
||||||
|
|
||||||
|
Very sad news and a great loss.
|
||||||
|
|
||||||
|
A great teacher.
|
||||||
|
|
||||||
|
My sincerest condolences to his family and friends.
|
||||||
|
|
||||||
|
Jim Preston, N6VH:
|
||||||
|
|
||||||
|
This is definitely very sad news. Bill was a very important part of
|
||||||
|
the WSJT team. He will be missed very much.
|
||||||
|
|
||||||
|
My condolences to his family.
|
||||||
|
|
||||||
|
Gary Lane, VK4OO
|
||||||
|
|
||||||
|
Very sad news, my condolences to Bills friends and family….
|
||||||
|
|
||||||
|
Bob Atkins, KA1GT:
|
||||||
|
|
||||||
|
I was shocked and saddened by the news of Bill's passing. We chatted
|
||||||
|
on line quite often though we never met in person. He attended the
|
||||||
|
same university as I didn't, reading the same subjects, but was a hear
|
||||||
|
of two behind me, so we never met their either. Bill will be greatly
|
||||||
|
missed and I send my condolences to his friends and family.
|
||||||
|
|
||||||
|
RIP Bill.
|
||||||
|
|
||||||
|
Dave Schmocker, KJ9I:
|
||||||
|
|
||||||
|
This is incredibly sad news. Bill was always so helpful, highly
|
||||||
|
responsive, and on-target with deep technical solutions.
|
||||||
|
|
||||||
|
What a wonderful asset Bill was to the hobby and to all with whom he
|
||||||
|
interfaced.
|
||||||
|
|
||||||
|
Jim, WB4CGS:
|
||||||
|
|
||||||
|
I am very sorry for this loss.
|
||||||
|
|
||||||
|
Conrad Farlow, Jim WB4GCS
|
||||||
|
|
||||||
|
Joe I am absolutely lost for words. What a terrible shock. I cannot
|
||||||
|
imagine him not being there. My condolences to you, Bill's family and
|
||||||
|
well the whole dev team. We will all miss him Most of all I am sorry
|
||||||
|
that you lost such a good friend.
|
||||||
|
|
||||||
|
Sam Jewell, G4DDK:
|
||||||
|
|
||||||
|
So sad to hear this news. One of the team who have revolutionised ham
|
||||||
|
radio operation, popularised digital and helped realise what we
|
||||||
|
thought should be possible.
|
||||||
|
|
||||||
|
Vale Bill.
|
||||||
|
|
||||||
|
|
||||||
|
Nick, NN3Y:
|
||||||
|
|
||||||
|
R I. P. Bill. He'll be missed. My sincere condolences to his family
|
||||||
|
and friends.
|
||||||
|
|
||||||
|
|
||||||
|
Jay, KA9CFD:
|
||||||
|
|
||||||
|
Shocking and very sorry news. RIP Bill.
|
||||||
|
|
||||||
|
Mirek, OK2AQ:
|
||||||
|
|
||||||
|
Very sad news for us WSJT-X users. R.I.P. Bill
|
||||||
|
|
||||||
|
OH6KTL, Lasse:
|
||||||
|
|
||||||
|
ge and sad to hear about Bill
|
||||||
|
|
@ -8,6 +8,7 @@ module packjt77
|
|||||||
character (len=13), dimension(1:MAXRECENT) :: recent_calls=''
|
character (len=13), dimension(1:MAXRECENT) :: recent_calls=''
|
||||||
character (len=13) :: mycall13=''
|
character (len=13) :: mycall13=''
|
||||||
character (len=13) :: dxcall13=''
|
character (len=13) :: dxcall13=''
|
||||||
|
character (len=6) :: dxbase=''
|
||||||
integer, dimension(1:MAXHASH) :: ihash22=-1
|
integer, dimension(1:MAXHASH) :: ihash22=-1
|
||||||
integer :: nzhash=0
|
integer :: nzhash=0
|
||||||
integer n28a,n28b
|
integer n28a,n28b
|
||||||
@ -124,6 +125,11 @@ subroutine pack77(msg0,i3,n3,c77)
|
|||||||
integer ntel(3)
|
integer ntel(3)
|
||||||
|
|
||||||
msg=msg0
|
msg=msg0
|
||||||
|
if(msg(1:3).eq.'$DX') then
|
||||||
|
i1=index(msg,' ')
|
||||||
|
msg=trim(dxbase)//' '//msg(i1+1:)
|
||||||
|
endif
|
||||||
|
|
||||||
i3_hint=i3
|
i3_hint=i3
|
||||||
n3_hint=n3
|
n3_hint=n3
|
||||||
i3=-1
|
i3=-1
|
||||||
|
@ -9,7 +9,7 @@ module q65
|
|||||||
integer apmask(13),apsymbols(13)
|
integer apmask(13),apsymbols(13)
|
||||||
integer,dimension(22) :: isync = (/1,9,12,13,15,22,23,26,27,33,35, &
|
integer,dimension(22) :: isync = (/1,9,12,13,15,22,23,26,27,33,35, &
|
||||||
38,46,50,55,60,62,66,69,74,76,85/)
|
38,46,50,55,60,62,66,69,74,76,85/)
|
||||||
integer codewords(63,207)
|
integer codewords(63,206)
|
||||||
integer ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb,nqd
|
integer ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb,nqd
|
||||||
integer idfbest,idtbest,ibw,ndistbest,maxiters,max_drift
|
integer idfbest,idtbest,ibw,ndistbest,maxiters,max_drift
|
||||||
integer istep,nsmo,lag1,lag2,npasses,nused,iseq,ncand,nrc
|
integer istep,nsmo,lag1,lag2,npasses,nused,iseq,ncand,nrc
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
subroutine q65_set_list(mycall,hiscall,hisgrid,codewords,ncw)
|
subroutine q65_set_list(mycall,hiscall,hisgrid,codewords,ncw)
|
||||||
|
|
||||||
parameter (MAX_NCW=207)
|
parameter (MAX_NCW=206)
|
||||||
character*12 mycall,hiscall
|
character*12 mycall,hiscall
|
||||||
character*6 hisgrid
|
character*6 hisgrid
|
||||||
character*37 msg0,msg,msgsent
|
character*37 msg0,msg,msgsent
|
||||||
@ -44,7 +44,6 @@ subroutine q65_set_list(mycall,hiscall,hisgrid,codewords,ncw)
|
|||||||
if(msg(j0+1:j0+1).eq.' ') msg(j0+1:j0+1)='+'
|
if(msg(j0+1:j0+1).eq.' ') msg(j0+1:j0+1)='+'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if(i.eq.207) msg='TNX 73 GL'
|
|
||||||
|
|
||||||
10 call genq65(msg,0,msgsent,itone,i3,n3)
|
10 call genq65(msg,0,msgsent,itone,i3,n3)
|
||||||
i0=1
|
i0=1
|
||||||
|
9
lib/save_dxbase.f90
Normal file
9
lib/save_dxbase.f90
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
subroutine save_dxbase(dxbase0)
|
||||||
|
|
||||||
|
use packjt77
|
||||||
|
character*6 dxbase0
|
||||||
|
|
||||||
|
dxbase=dxbase0
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine save_dxbase
|
@ -1410,7 +1410,7 @@ void MainWindow::readFromStdout() //readFromStdout
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
m=3;
|
m=3;
|
||||||
#endif
|
#endif
|
||||||
if(n>=30) ui->decodedTextBrowser->append(t.mid(1,n-m));
|
if(n>=30 or t.indexOf("Best-fit")>=0) ui->decodedTextBrowser->append(t.mid(1,n-m));
|
||||||
n=ui->decodedTextBrowser->verticalScrollBar()->maximum();
|
n=ui->decodedTextBrowser->verticalScrollBar()->maximum();
|
||||||
ui->decodedTextBrowser->verticalScrollBar()->setValue(n);
|
ui->decodedTextBrowser->verticalScrollBar()->setValue(n);
|
||||||
m_messagesText="";
|
m_messagesText="";
|
||||||
@ -1439,7 +1439,6 @@ void MainWindow::readFromStdout() //readFromStdout
|
|||||||
int n=t.size();
|
int n=t.size();
|
||||||
qDebug() << t.mid(1,n-3).trimmed();
|
qDebug() << t.mid(1,n-3).trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,10 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
|
|||||||
|
|
||||||
ui->labelTxt->setText ("<h2>" + QString {"WSJT-X v"
|
ui->labelTxt->setText ("<h2>" + QString {"WSJT-X v"
|
||||||
+ QCoreApplication::applicationVersion ()
|
+ QCoreApplication::applicationVersion ()
|
||||||
+ " " + revision ()}.simplified () + "</h2><br />"
|
+ " " + revision ()}.simplified () + "</h2>"
|
||||||
|
"<h3> In memory of G4WJS, Bill Somerville (1956-2021),<br />"
|
||||||
|
"who gave so much of himself to the WSJT project. </h3>"
|
||||||
|
|
||||||
"WSJT-X implements a number of digital modes designed for <br />"
|
"WSJT-X implements a number of digital modes designed for <br />"
|
||||||
"weak-signal Amateur Radio communication. <br /><br />"
|
"weak-signal Amateur Radio communication. <br /><br />"
|
||||||
"© 2001-2021 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
|
"© 2001-2021 by Joe Taylor, K1JT, Bill Somerville, G4WJS, <br />"
|
||||||
|
@ -184,6 +184,8 @@ extern "C" {
|
|||||||
void get_ft4msg_(int* idecode, char* line, int len);
|
void get_ft4msg_(int* idecode, char* line, int len);
|
||||||
|
|
||||||
void chk_samples_(int* m_ihsym,int* k, int* m_hsymStop);
|
void chk_samples_(int* m_ihsym,int* k, int* m_hsymStop);
|
||||||
|
|
||||||
|
void save_dxbase_(char* dxbase, int len);
|
||||||
}
|
}
|
||||||
|
|
||||||
int volatile itone[MAX_NUM_SYMBOLS]; //Audio tones for all Tx symbols
|
int volatile itone[MAX_NUM_SYMBOLS]; //Audio tones for all Tx symbols
|
||||||
@ -210,7 +212,7 @@ using SpecOp = Configuration::SpecialOperatingActivity;
|
|||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
Radio::Frequency constexpr default_frequency {14076000};
|
Radio::Frequency constexpr default_frequency {14076000};
|
||||||
QRegExp message_alphabet {"[- @A-Za-z0-9+./?#<>;]*"};
|
QRegExp message_alphabet {"[- @A-Za-z0-9+./?#<>;$]*"};
|
||||||
// grid exact match excluding RR73
|
// grid exact match excluding RR73
|
||||||
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
|
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
|
||||||
auto quint32_max = std::numeric_limits<quint32>::max ();
|
auto quint32_max = std::numeric_limits<quint32>::max ();
|
||||||
@ -3641,9 +3643,11 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
|
|||||||
{
|
{
|
||||||
auto const& message_words = message.messageWords ();
|
auto const& message_words = message.messageWords ();
|
||||||
auto is_73 = message_words.filter (QRegularExpression {"^(73|RR73)$"}).size();
|
auto is_73 = message_words.filter (QRegularExpression {"^(73|RR73)$"}).size();
|
||||||
|
auto msg_no_hash = message.clean_string();
|
||||||
|
msg_no_hash = msg_no_hash.mid(22).remove("<").remove(">");
|
||||||
bool is_OK=false;
|
bool is_OK=false;
|
||||||
if(m_mode=="MSK144" and message.clean_string ().indexOf(ui->dxCallEntry->text()+" R ")>0) is_OK=true;
|
if(m_mode=="MSK144" && msg_no_hash.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 df = message.frequencyOffset ();
|
||||||
auto within_tolerance = (qAbs (ui->RxFreqSpinBox->value () - df) <= int (start_tolerance)
|
auto within_tolerance = (qAbs (ui->RxFreqSpinBox->value () - df) <= int (start_tolerance)
|
||||||
|| qAbs (ui->TxFreqSpinBox->value () - df) <= int (start_tolerance));
|
|| qAbs (ui->TxFreqSpinBox->value () - df) <= int (start_tolerance));
|
||||||
@ -3657,7 +3661,7 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
|
|||||||
|| message_words.contains ("DE")))
|
|| message_words.contains ("DE")))
|
||||||
|| !message.isStandardMessage ()); // free text 73/RR73
|
|| !message.isStandardMessage ()); // free text 73/RR73
|
||||||
|
|
||||||
QStringList w=message.clean_string ().mid(22).remove("<").remove(">").split(" ",SkipEmptyParts);
|
auto const& w = msg_no_hash.split(" ",SkipEmptyParts);
|
||||||
QString w2;
|
QString w2;
|
||||||
int nrpt=0;
|
int nrpt=0;
|
||||||
if (w.size () > 2)
|
if (w.size () > 2)
|
||||||
@ -3675,27 +3679,29 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
|
|||||||
if (m_auto
|
if (m_auto
|
||||||
&& (m_QSOProgress==REPLYING or (!ui->tx1->isEnabled () and m_QSOProgress==REPORT))
|
&& (m_QSOProgress==REPLYING or (!ui->tx1->isEnabled () and m_QSOProgress==REPORT))
|
||||||
&& qAbs (ui->TxFreqSpinBox->value () - df) <= int (stop_tolerance)
|
&& qAbs (ui->TxFreqSpinBox->value () - df) <= int (stop_tolerance)
|
||||||
&& message_words.at (1) != "DE"
|
&& message_words.at (2) != "DE"
|
||||||
&& !message_words.at (1).contains (QRegularExpression {"(^(CQ|QRZ))|" + m_baseCall})
|
&& !message_words.at (2).contains (QRegularExpression {"(^(CQ|QRZ))|" + m_baseCall})
|
||||||
&& message_words.at (2).contains (Radio::base_callsign (ui->dxCallEntry->text ()))) {
|
&& message_words.at (3).contains (Radio::base_callsign (ui->dxCallEntry->text ()))) {
|
||||||
// auto stop to avoid accidental QRM
|
// auto stop to avoid accidental QRM
|
||||||
ui->stopTxButton->click (); // halt any transmission
|
ui->stopTxButton->click (); // halt any transmission
|
||||||
} else if (m_auto // transmit allowed
|
} else if (m_auto // transmit allowed
|
||||||
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked () // auto-sequencing allowed
|
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked () // auto-sequencing allowed
|
||||||
&& ((!m_bCallingCQ // not calling CQ/QRZ
|
&& ((!m_bCallingCQ // not calling CQ/QRZ
|
||||||
&& !m_sentFirst73 // not finished QSO
|
&& !m_sentFirst73 // not finished QSO
|
||||||
&& ((message_words.at (1).contains (m_baseCall)
|
&& ((message_words.at (2).contains (m_baseCall)
|
||||||
// being called and not already in a QSO
|
// being called and not already in a QSO
|
||||||
&& (message_words.at(2).contains(Radio::base_callsign(ui->dxCallEntry->text())) or bEU_VHF))
|
&& (message_words.at(3).contains(Radio::base_callsign(ui->dxCallEntry->text()))
|
||||||
// type 2 compound replies
|
or bEU_VHF))
|
||||||
|| (within_tolerance &&
|
|| message_words.at(1) == m_baseCall // <de-call> RR73; ...
|
||||||
(acceptable_73 ||
|
// type 2 compound replies
|
||||||
("DE" == message_words.at (1) &&
|
|| (within_tolerance &&
|
||||||
w2.contains(Radio::base_callsign (m_hisCall)))))))
|
(acceptable_73 ||
|
||||||
|| (m_bCallingCQ && m_bAutoReply
|
("DE" == message_words.at (2) &&
|
||||||
// look for type 2 compound call replies on our Tx and Rx offsets
|
w2.contains(Radio::base_callsign (m_hisCall)))))))
|
||||||
&& ((within_tolerance && "DE" == message_words.at (1))
|
|| (m_bCallingCQ && m_bAutoReply
|
||||||
|| message_words.at (1).contains (m_baseCall))))) {
|
// 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);
|
if(SpecOp::FOX != m_config.special_op_id()) processMessage (message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4806,7 +4812,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
ui->txFirstCheckBox->setChecked(m_txFirst);
|
ui->txFirstCheckBox->setChecked(m_txFirst);
|
||||||
|
|
||||||
auto const& message_words = message.messageWords ();
|
auto const& message_words = message.messageWords ();
|
||||||
if (message_words.size () < 2) return;
|
if (message_words.size () < 3) return;
|
||||||
|
|
||||||
QString hiscall;
|
QString hiscall;
|
||||||
QString hisgrid;
|
QString hisgrid;
|
||||||
@ -4824,7 +4830,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
QStringList w=message.clean_string ().mid(22).remove("<").remove(">").split(" ",SkipEmptyParts);
|
QStringList w=message.clean_string ().mid(22).remove("<").remove(">").split(" ",SkipEmptyParts);
|
||||||
int nw=w.size();
|
int nw=w.size();
|
||||||
if(nw>=4) {
|
if(nw>=4) {
|
||||||
if(message_words.size()<3) return;
|
if(message_words.size()<4) return;
|
||||||
int n=w.at(nw-2).toInt();
|
int n=w.at(nw-2).toInt();
|
||||||
if(n>=520001 and n<=592047) {
|
if(n>=520001 and n<=592047) {
|
||||||
hiscall=w.at(1);
|
hiscall=w.at(1);
|
||||||
@ -4847,7 +4853,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
|
|
||||||
// ignore calls by other hounds
|
// ignore calls by other hounds
|
||||||
if (SpecOp::HOUND == m_config.special_op_id()
|
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;
|
return;
|
||||||
}
|
}
|
||||||
@ -4926,22 +4932,22 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?"));
|
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
|
if(SpecOp::EU_VHF==m_config.special_op_id() and message_words.at(2).contains(m_baseCall) and
|
||||||
(!message_words.at(2).contains(qso_partner_base_call)) and (!m_bDoubleClicked)) {
|
(!message_words.at(3).contains(qso_partner_base_call)) and (!m_bDoubleClicked)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bContestOK=(m_mode=="FT4" or m_mode=="FT8" or m_mode=="Q65" or m_mode=="MSK144");
|
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
|
if(message_words.size () > 4 // enough fields for a normal message
|
||||||
&& (message_words.at(1).contains(m_baseCall) || "DE" == message_words.at(1))
|
&& (message_words.at(2).contains(m_baseCall) || "DE" == message_words.at(2))
|
||||||
&& (message_words.at(2).contains(qso_partner_base_call) or m_bDoubleClicked
|
&& (message_words.at(3).contains(qso_partner_base_call) or m_bDoubleClicked
|
||||||
or bEU_VHF_w2 or (m_QSOProgress==CALLING))) {
|
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){
|
if((SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id()) and bContestOK){
|
||||||
setTxMsg(3);
|
setTxMsg(3);
|
||||||
m_QSOProgress=ROGER_REPORT;
|
m_QSOProgress=ROGER_REPORT;
|
||||||
} else {
|
} 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);
|
setTxMsg(3);
|
||||||
m_QSOProgress=ROGER_REPORT;
|
m_QSOProgress=ROGER_REPORT;
|
||||||
} else {
|
} else {
|
||||||
@ -4981,7 +4987,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
m_QSOProgress=ROGER_REPORT;
|
m_QSOProgress=ROGER_REPORT;
|
||||||
}
|
}
|
||||||
} else { // no grid on end of msg
|
} 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 ();
|
auto word_3_as_number = word_3.toInt ();
|
||||||
if (("RRR" == word_3
|
if (("RRR" == word_3
|
||||||
|| (word_3_as_number == 73 && ROGERS == m_QSOProgress)
|
|| (word_3_as_number == 73 && ROGERS == m_QSOProgress)
|
||||||
@ -5103,17 +5109,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
|
else if (m_QSOProgress >= ROGERS
|
||||||
&& message_words.size () > 2 && message_words.at (1).contains (m_baseCall)
|
&& message_words.size () > 3 && message_words.at (2).contains (m_baseCall)
|
||||||
&& message_words.at (2) == "73") {
|
&& message_words.at (3) == "73") {
|
||||||
// 73 back to compound call holder
|
// 73 back to compound call holder
|
||||||
m_ntx=5;
|
m_ntx=5;
|
||||||
ui->txrb5->setChecked(true);
|
ui->txrb5->setChecked(true);
|
||||||
m_QSOProgress = SIGNOFF;
|
m_QSOProgress = SIGNOFF;
|
||||||
}
|
}
|
||||||
else if (!(m_bAutoReply && (m_QSOProgress > CALLING))) {
|
else if (!(m_bAutoReply && (m_QSOProgress > CALLING))) {
|
||||||
if ((message_words.size () > 4 && message_words.at (1).contains (m_baseCall)
|
if ((message_words.size () > 5 && message_words.at (2).contains (m_baseCall)
|
||||||
&& message_words.at (4) == "OOO")) {
|
&& message_words.at (5) == "OOO")) {
|
||||||
// EME short code report or MSK144/FT8 contest mode reply, send back Tx3
|
// EME short code report or MSK144/FT8 contest mode reply, send back Tx3
|
||||||
m_ntx=3;
|
m_ntx=3;
|
||||||
m_QSOProgress = ROGER_REPORT;
|
m_QSOProgress = ROGER_REPORT;
|
||||||
@ -5136,7 +5154,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
return;
|
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) {
|
if (m_QSOProgress >= ROGERS && base_call == qso_partner_base_call && m_currentMessageType) {
|
||||||
// 73 back to compound call holder
|
// 73 back to compound call holder
|
||||||
m_ntx=5;
|
m_ntx=5;
|
||||||
@ -5356,6 +5374,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
|
|||||||
auto is_type_one = !is77BitMode () && is_compound && shortList (my_callsign);
|
auto is_type_one = !is77BitMode () && is_compound && shortList (my_callsign);
|
||||||
auto const& my_grid = m_config.my_grid ().left (4);
|
auto const& my_grid = m_config.my_grid ().left (4);
|
||||||
auto const& hisBase = Radio::base_callsign (hisCall);
|
auto const& hisBase = Radio::base_callsign (hisCall);
|
||||||
|
save_dxbase_(const_cast <char *> ((hisBase + " ").left (6).toLatin1().constData()),6);
|
||||||
auto eme_short_codes = m_config.enable_VHF_features () && ui->cbShMsgs->isChecked ()
|
auto eme_short_codes = m_config.enable_VHF_features () && ui->cbShMsgs->isChecked ()
|
||||||
&& m_mode == "JT65";
|
&& m_mode == "JT65";
|
||||||
|
|
||||||
@ -5837,6 +5856,13 @@ void MainWindow::on_dxCallEntry_textChanged (QString const& call)
|
|||||||
statusUpdate ();
|
statusUpdate ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_dxCallEntry_editingFinished()
|
||||||
|
{
|
||||||
|
auto const& dxBase = Radio::base_callsign (m_hisCall);
|
||||||
|
save_dxbase_(const_cast <char *> ((dxBase + " ").left (6).toLatin1().constData()),6);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::on_dxCallEntry_returnPressed ()
|
void MainWindow::on_dxCallEntry_returnPressed ()
|
||||||
{
|
{
|
||||||
on_lookupButton_clicked();
|
on_lookupButton_clicked();
|
||||||
@ -7743,10 +7769,11 @@ void MainWindow::replyToCQ (QTime time, qint32 snr, float delta_time, quint32 de
|
|||||||
, bool /*low_confidence*/, quint8 modifiers)
|
, bool /*low_confidence*/, quint8 modifiers)
|
||||||
{
|
{
|
||||||
QString format_string {"%1 %2 %3 %4 %5 %6"};
|
QString format_string {"%1 %2 %3 %4 %5 %6"};
|
||||||
auto const& time_string = time.toString ("~" == mode || "&" == mode
|
auto const& time_string = time.toString ("~" == mode || "&" == mode || "+" == mode
|
||||||
|| "+" == mode ? "hhmmss" : "hhmm");
|
|| (m_TRperiod < 60. && ("`" == mode || ":" == mode))
|
||||||
|
? "hhmmss" : "hhmm");
|
||||||
auto text = message_text;
|
auto text = message_text;
|
||||||
auto ap_pos = text.lastIndexOf (QRegularExpression {R"((?:\?\s)?a[0-9]$)"});
|
auto ap_pos = text.lastIndexOf (QRegularExpression {R"((?:\?\s)?(?:a[0-9]|q[0-9][0-9]?)$)"});
|
||||||
if (ap_pos >= 0)
|
if (ap_pos >= 0)
|
||||||
{
|
{
|
||||||
// beware of decodes ending on shorter version of wanted call so
|
// beware of decodes ending on shorter version of wanted call so
|
||||||
@ -7867,7 +7894,7 @@ void MainWindow::postDecode (bool is_new, QString const& message)
|
|||||||
, parts[1].toInt ()
|
, parts[1].toInt ()
|
||||||
, parts[2].toFloat (), parts[3].toUInt (), parts[4]
|
, parts[2].toFloat (), parts[3].toUInt (), parts[4]
|
||||||
, decode.mid (has_seconds ? 24 : 22)
|
, decode.mid (has_seconds ? 24 : 22)
|
||||||
, QChar {'?'} == decode.mid (has_seconds ? 24 + 21 : 22 + 21, 1)
|
, QChar {'?'} == decode.mid (has_seconds ? 24 + 36 : 22 + 36, 1)
|
||||||
, m_diskData);
|
, m_diskData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,6 +204,7 @@ private slots:
|
|||||||
void on_addButton_clicked();
|
void on_addButton_clicked();
|
||||||
void on_dxCallEntry_textChanged (QString const&);
|
void on_dxCallEntry_textChanged (QString const&);
|
||||||
void on_dxGridEntry_textChanged (QString const&);
|
void on_dxGridEntry_textChanged (QString const&);
|
||||||
|
void on_dxCallEntry_editingFinished();
|
||||||
void on_dxCallEntry_returnPressed ();
|
void on_dxCallEntry_returnPressed ();
|
||||||
void on_genStdMsgsPushButton_clicked();
|
void on_genStdMsgsPushButton_clicked();
|
||||||
void on_logQSOButton_clicked();
|
void on_logQSOButton_clicked();
|
||||||
|
@ -1701,9 +1701,6 @@ When not checked you can view the calibration results.</string>
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxLength">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
@ -1755,9 +1752,6 @@ Double click to toggle the use of the Tx1 message to start a QSO with a station
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxLength">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="2">
|
<item row="5" column="2">
|
||||||
@ -1804,9 +1798,6 @@ Double-click to reset to the standard 73 message</string>
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxLength">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
@ -1846,9 +1837,6 @@ Double-click to reset to the standard 73 message</string>
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxLength">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
@ -1859,9 +1847,6 @@ Double-click to reset to the standard 73 message</string>
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="maxLength">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
@ -2863,6 +2848,14 @@ Yellow when too low</string>
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenuBar" name="menuBar">
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>842</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>File</string>
|
<string>File</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user