mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-21 19:55:20 -05:00
Merge branch 'develop' into feat-ft8-q3
This commit is contained in:
commit
6b2df37137
@ -45,7 +45,7 @@ if (POLICY CMP0075)
|
||||
endif ()
|
||||
|
||||
project (wsjtx
|
||||
VERSION 2.5.2.0
|
||||
VERSION 2.6.0
|
||||
LANGUAGES C CXX Fortran
|
||||
)
|
||||
set (PROJECT_DESCRIPTION "WSJT-X: Digital Modes for Weak Signal Communications in Amateur Radio")
|
||||
@ -71,7 +71,7 @@ message (STATUS "******************************************************")
|
||||
|
||||
include (set_build_type)
|
||||
# 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}")
|
||||
|
||||
#
|
||||
@ -506,6 +506,7 @@ set (wsjt_FSRCS
|
||||
lib/qra/q65/q65_set_list.f90
|
||||
lib/refspectrum.f90
|
||||
lib/savec2.f90
|
||||
lib/save_dxbase.f90
|
||||
lib/sec0.f90
|
||||
lib/sec_midn.f90
|
||||
lib/setup65.f90
|
||||
|
@ -208,7 +208,7 @@ namespace
|
||||
int const combo_box_item_disabled (0);
|
||||
|
||||
// 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 {
|
||||
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::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,39 @@ 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)? # 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)
|
||||
@ -23,13 +55,13 @@ DecodedText::DecodedText (QString const& the_string)
|
||||
, is_standard_ {false}
|
||||
{
|
||||
// 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);
|
||||
if (message_.length() >= 1)
|
||||
{
|
||||
message0_ = message_.left(36);
|
||||
message_ = message_.left(36).remove (QRegularExpression {"[<>]"});
|
||||
message0_ = message_.left(37);
|
||||
message_ = message_.left(37).remove (QRegularExpression {"[<>]"});
|
||||
int i1 = message_.indexOf ('\r');
|
||||
if (i1 > 0)
|
||||
{
|
||||
@ -60,11 +92,13 @@ 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();
|
||||
return tokens_re.match(t).capturedTexts();
|
||||
}
|
||||
// simple word split for free text messages
|
||||
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_);
|
||||
return words;
|
||||
}
|
||||
@ -94,7 +128,7 @@ bool DecodedText::isTX() 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
|
||||
@ -128,31 +162,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 +203,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 +215,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,90 @@
|
||||
|
||||
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
|
||||
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;
|
||||
|
||||
|
@ -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
|
||||
// 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);
|
||||
|
||||
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;
|
||||
pbwidth_t current_width;
|
||||
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);
|
||||
|
||||
if (new_mode != current_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
|
||||
// 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
|
||||
// to frequency such as the TS-2000 auto mode setting
|
||||
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);
|
||||
}
|
||||
@ -1037,16 +1042,22 @@ void HamlibTransceiver::do_mode (MODE mode)
|
||||
pbwidth_t current_width;
|
||||
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
|
||||
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);
|
||||
|
||||
if (new_mode != current_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
|
||||
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.)
|
||||
|
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"]
|
||||
|
||||
- To add a new message to the list, enter the desired text (up to 13
|
||||
characters) in the entry field at top, then click *Add*.
|
||||
- To add a new message to the list, enter the desired text in the
|
||||
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
|
||||
*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*
|
||||
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
|
||||
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
|
||||
|
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) :: mycall13=''
|
||||
character (len=13) :: dxcall13=''
|
||||
character (len=6) :: dxbase=''
|
||||
integer, dimension(1:MAXHASH) :: ihash22=-1
|
||||
integer :: nzhash=0
|
||||
integer n28a,n28b
|
||||
@ -124,6 +125,11 @@ subroutine pack77(msg0,i3,n3,c77)
|
||||
integer ntel(3)
|
||||
|
||||
msg=msg0
|
||||
if(msg(1:3).eq.'$DX') then
|
||||
i1=index(msg,' ')
|
||||
msg=trim(dxbase)//' '//msg(i1+1:)
|
||||
endif
|
||||
|
||||
i3_hint=i3
|
||||
n3_hint=n3
|
||||
i3=-1
|
||||
|
@ -9,7 +9,7 @@ module q65
|
||||
integer apmask(13),apsymbols(13)
|
||||
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/)
|
||||
integer codewords(63,207)
|
||||
integer codewords(63,206)
|
||||
integer ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb,nqd
|
||||
integer idfbest,idtbest,ibw,ndistbest,maxiters,max_drift
|
||||
integer istep,nsmo,lag1,lag2,npasses,nused,iseq,ncand,nrc
|
||||
|
@ -1,6 +1,6 @@
|
||||
subroutine q65_set_list(mycall,hiscall,hisgrid,codewords,ncw)
|
||||
|
||||
parameter (MAX_NCW=207)
|
||||
parameter (MAX_NCW=206)
|
||||
character*12 mycall,hiscall
|
||||
character*6 hisgrid
|
||||
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)='+'
|
||||
endif
|
||||
endif
|
||||
if(i.eq.207) msg='TNX 73 GL'
|
||||
|
||||
10 call genq65(msg,0,msgsent,itone,i3,n3)
|
||||
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
|
||||
m=3;
|
||||
#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();
|
||||
ui->decodedTextBrowser->verticalScrollBar()->setValue(n);
|
||||
m_messagesText="";
|
||||
@ -1439,7 +1439,6 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
int n=t.size();
|
||||
qDebug() << t.mid(1,n-3).trimmed();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,10 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
|
||||
|
||||
ui->labelTxt->setText ("<h2>" + QString {"WSJT-X v"
|
||||
+ 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 />"
|
||||
"weak-signal Amateur Radio communication. <br /><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 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
|
||||
@ -210,7 +212,7 @@ using SpecOp = Configuration::SpecialOperatingActivity;
|
||||
namespace
|
||||
{
|
||||
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
|
||||
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 ();
|
||||
@ -3641,9 +3643,11 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
|
||||
{
|
||||
auto const& message_words = message.messageWords ();
|
||||
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;
|
||||
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(m_mode=="MSK144" && msg_no_hash.indexOf(ui->dxCallEntry->text()+" R ")>0) is_OK=true;
|
||||
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));
|
||||
@ -3657,7 +3661,7 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
|
||||
|| message_words.contains ("DE")))
|
||||
|| !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;
|
||||
int nrpt=0;
|
||||
if (w.size () > 2)
|
||||
@ -3675,27 +3679,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 +4812,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 +4830,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 +4853,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 +4932,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 +4987,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 +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
|
||||
&& 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 +5154,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;
|
||||
@ -5356,6 +5374,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
|
||||
auto is_type_one = !is77BitMode () && is_compound && shortList (my_callsign);
|
||||
auto const& my_grid = m_config.my_grid ().left (4);
|
||||
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 ()
|
||||
&& m_mode == "JT65";
|
||||
|
||||
@ -5837,6 +5856,13 @@ void MainWindow::on_dxCallEntry_textChanged (QString const& call)
|
||||
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 ()
|
||||
{
|
||||
on_lookupButton_clicked();
|
||||
@ -7743,10 +7769,11 @@ void MainWindow::replyToCQ (QTime time, qint32 snr, float delta_time, quint32 de
|
||||
, bool /*low_confidence*/, quint8 modifiers)
|
||||
{
|
||||
QString format_string {"%1 %2 %3 %4 %5 %6"};
|
||||
auto const& time_string = time.toString ("~" == mode || "&" == mode
|
||||
|| "+" == mode ? "hhmmss" : "hhmm");
|
||||
auto const& time_string = time.toString ("~" == mode || "&" == mode || "+" == mode
|
||||
|| (m_TRperiod < 60. && ("`" == mode || ":" == mode))
|
||||
? "hhmmss" : "hhmm");
|
||||
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)
|
||||
{
|
||||
// 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[2].toFloat (), parts[3].toUInt (), parts[4]
|
||||
, 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);
|
||||
}
|
||||
}
|
||||
|
@ -204,6 +204,7 @@ private slots:
|
||||
void on_addButton_clicked();
|
||||
void on_dxCallEntry_textChanged (QString const&);
|
||||
void on_dxGridEntry_textChanged (QString const&);
|
||||
void on_dxCallEntry_editingFinished();
|
||||
void on_dxCallEntry_returnPressed ();
|
||||
void on_genStdMsgsPushButton_clicked();
|
||||
void on_logQSOButton_clicked();
|
||||
|
@ -1701,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">
|
||||
@ -1755,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">
|
||||
@ -1804,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">
|
||||
@ -1846,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">
|
||||
@ -1859,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">
|
||||
@ -2863,6 +2848,14 @@ Yellow when too low</string>
|
||||
</layout>
|
||||
</widget>
|
||||
<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">
|
||||
<property name="title">
|
||||
<string>File</string>
|
||||
|
Loading…
Reference in New Issue
Block a user