mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-12-25 20:33:08 -05:00
Merge branch 'hotfix-2.1.1'
This commit is contained in:
commit
9c331103fe
@ -571,6 +571,7 @@ private:
|
||||
DecodeHighlightingModel decode_highlighing_model_;
|
||||
DecodeHighlightingModel next_decode_highlighing_model_;
|
||||
bool highlight_by_mode_;
|
||||
bool highlight_only_fields_;
|
||||
bool include_WAE_entities_;
|
||||
int LotW_days_since_upload_;
|
||||
|
||||
@ -753,6 +754,7 @@ bool Configuration::pwrBandTuneMemory () const {return m_->pwrBandTuneMemory_;}
|
||||
LotWUsers const& Configuration::lotw_users () const {return m_->lotw_users_;}
|
||||
DecodeHighlightingModel const& Configuration::decode_highlighting () const {return m_->decode_highlighing_model_;}
|
||||
bool Configuration::highlight_by_mode () const {return m_->highlight_by_mode_;}
|
||||
bool Configuration::highlight_only_fields () const {return m_->highlight_only_fields_;}
|
||||
bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;}
|
||||
|
||||
void Configuration::set_calibration (CalibrationParams params)
|
||||
@ -959,6 +961,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
|
||||
, station_insert_action_ {tr ("&Insert ..."), nullptr}
|
||||
, station_dialog_ {new StationDialog {&next_stations_, &bands_, this}}
|
||||
, highlight_by_mode_ {false}
|
||||
, highlight_only_fields_ {false}
|
||||
, include_WAE_entities_ {false}
|
||||
, LotW_days_since_upload_ {0}
|
||||
, last_port_type_ {TransceiverFactory::Capabilities::none}
|
||||
@ -1325,6 +1328,7 @@ void Configuration::impl::initialize_models ()
|
||||
|
||||
next_decode_highlighing_model_.items (decode_highlighing_model_.items ());
|
||||
ui_->highlight_by_mode_check_box->setChecked (highlight_by_mode_);
|
||||
ui_->only_fields_check_box->setChecked (highlight_only_fields_);
|
||||
ui_->include_WAE_check_box->setChecked (include_WAE_entities_);
|
||||
ui_->LotW_days_since_upload_spin_box->setValue (LotW_days_since_upload_);
|
||||
|
||||
@ -1474,6 +1478,7 @@ void Configuration::impl::read_settings ()
|
||||
if (!highlight_items.size ()) highlight_items = DecodeHighlightingModel::default_items ();
|
||||
decode_highlighing_model_.items (highlight_items);
|
||||
highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool ();
|
||||
highlight_only_fields_ = settings_->value("OnlyFieldsSought", false).toBool ();
|
||||
include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool ();
|
||||
LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt ();
|
||||
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
||||
@ -1588,6 +1593,7 @@ void Configuration::impl::write_settings ()
|
||||
settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ()));
|
||||
settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ()));
|
||||
settings_->setValue ("HighlightByMode", highlight_by_mode_);
|
||||
settings_->setValue ("OnlyFieldsSought", highlight_only_fields_);
|
||||
settings_->setValue ("IncludeWAEEntities", include_WAE_entities_);
|
||||
settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_);
|
||||
settings_->setValue ("toRTTY", log_as_RTTY_);
|
||||
@ -2130,6 +2136,7 @@ void Configuration::impl::accept ()
|
||||
Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_);
|
||||
}
|
||||
highlight_by_mode_ = ui_->highlight_by_mode_check_box->isChecked ();
|
||||
highlight_only_fields_ = ui_->only_fields_check_box->isChecked ();
|
||||
include_WAE_entities_ = ui_->include_WAE_check_box->isChecked ();
|
||||
LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value ();
|
||||
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
||||
|
@ -177,6 +177,7 @@ public:
|
||||
LotWUsers const& lotw_users () const;
|
||||
DecodeHighlightingModel const& decode_highlighting () const;
|
||||
bool highlight_by_mode () const;
|
||||
bool highlight_only_fields () const;
|
||||
bool include_WAE_entities () const;
|
||||
|
||||
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND};
|
||||
|
128
Configuration.ui
128
Configuration.ui
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>546</width>
|
||||
<height>553</height>
|
||||
<width>554</width>
|
||||
<height>563</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -2206,8 +2206,45 @@ Right click for insert and delete options.</string>
|
||||
<property name="title">
|
||||
<string>Decode Highlightling</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="rescan_log_push_button">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rescan ADIF Log</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="reset_highlighting_to_defaults_push_button">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reset Highlighting</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="DecodeHighlightingListView" name="highlighting_list_view">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
@ -2247,69 +2284,32 @@ Right click for insert and delete options.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="reset_highlighting_to_defaults_push_button">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="highlight_by_mode_check_box">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html></string>
|
||||
<string><html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reset Highlighting</string>
|
||||
<string>Highlight by Mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="highlight_by_mode_check_box">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Highlight by Mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="rescan_log_push_button">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rescan ADIF Log</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="include_WAE_check_box">
|
||||
<property name="text">
|
||||
<string>Include extra WAE entities</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_20">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="include_WAE_check_box"/>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="includeExtraWAEEntitiesLabel">
|
||||
<property name="text">
|
||||
<string>Include extra WAE entities</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>include_WAE_check_box</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="only_fields_check_box">
|
||||
<property name="toolTip">
|
||||
<string>Check to for grid highlighting to only apply to unworked grid fields</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Only grid Fields sought</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -3102,13 +3102,13 @@ Right click for insert and delete options.</string>
|
||||
</connection>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="special_op_activity_button_group"/>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="split_mode_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="special_op_activity_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
@ -37,7 +37,7 @@ alterations. Otherwise you must edit the file to increase shmall according to t
|
||||
Now move this file into place for the system to use by typing: (Note this assumes that
|
||||
you really did drag this file to your Desktop as required earlier.)
|
||||
|
||||
sudo cp $HOME/Desktop/sysctl.conf /etc/
|
||||
sudo cp "$HOME/Desktop/sysctl.conf" /etc/
|
||||
sudo chmod 664 /etc/sysctl.conf
|
||||
sudo chown root:wheel /etc/sysctl.conf
|
||||
|
||||
|
@ -1023,6 +1023,7 @@ QString HRDTransceiver::send_command (QString const& cmd, bool no_debug, bool pr
|
||||
if (!recurse && prepend_context)
|
||||
{
|
||||
auto radio_name = send_command ("get radio", true, current_radio_, true);
|
||||
qDebug () << "HRDTransceiver::send_command: radio_name:" << radio_name;
|
||||
auto radio_iter = std::find_if (radios_.begin (), radios_.end (), [this, &radio_name] (RadioMap::value_type const& radio)
|
||||
{
|
||||
return std::get<1> (radio) == radio_name;
|
||||
|
26
NEWS
26
NEWS
@ -13,6 +13,32 @@
|
||||
Copyright 2001 - 2019 by Joe Taylor, K1JT.
|
||||
|
||||
|
||||
Release: WSJT-X 2.1.1
|
||||
November 25, 2019
|
||||
---------------------
|
||||
|
||||
WSJT-X 2.1.1 is a bug fix only release addressing regressions in the
|
||||
prior v2.1.0 release.
|
||||
|
||||
- Document rules for the UDP message protocol.
|
||||
- Fix bug that could cause display of a blank Settings window.
|
||||
- Fix message parsing to properly handle 4-character directed CQs
|
||||
- Fix a potential crash in the interface to Omni-Rig.
|
||||
- Improve handling of unexpected rig off line status changes from
|
||||
Omni-Rig.
|
||||
- Add an option to highlight unworked 2-character grid fields rather
|
||||
than 4-character grid squares.
|
||||
- Fix bug that caused unwanted disabling of "Enable Tx" in Fox mode.
|
||||
- Log duplicate contacts in FT8 DXpedition Fox mode.
|
||||
- Regenerate the GFSK Tx waveform if Tx audio frequency is changed.
|
||||
- Fix the behavior of double-clicking on a decoded message with first
|
||||
callsign displayed as an unresolved hash code <...>.
|
||||
- Fix a problem with determining "worked before" status after a band
|
||||
change.
|
||||
- Updates to the WSJT-X 2.1 User Guide.
|
||||
- Fix a production issue with the macOS tool chain that generated
|
||||
broken executables.
|
||||
|
||||
Release: WSJT-X 2.1
|
||||
July 15, 2019
|
||||
-------------------
|
||||
|
@ -6,8 +6,8 @@
|
||||
* ======================
|
||||
*
|
||||
* All messages are written or read using the QDataStream derivatives
|
||||
* defined below, note that we are using the default for floating
|
||||
* point precision which means all are double precision i.e. 64-bit
|
||||
* defined below, note that we are using the default for floating
|
||||
* point precision which means all are double precision i.e. 64-bit
|
||||
* IEEE format.
|
||||
*
|
||||
* Message is big endian format
|
||||
@ -19,12 +19,12 @@
|
||||
*
|
||||
* Payload format:
|
||||
*
|
||||
* As per the QDataStream format, see below for version used and
|
||||
* As per the QDataStream format, see below for version used and
|
||||
* here:
|
||||
*
|
||||
* http://doc.qt.io/qt-5/datastreamformat.html
|
||||
*
|
||||
* for the serialization details for each type, at the time of
|
||||
* for the serialization details for each type, at the time of
|
||||
* writing the above document is for Qt_5_0 format which is buggy
|
||||
* so we use Qt_5_4 format, differences are:
|
||||
*
|
||||
@ -37,18 +37,20 @@
|
||||
* offset qint32 only present if timespec=2
|
||||
* timezone several-fields only present if timespec=3
|
||||
*
|
||||
* we will avoid using QDateTime fields with time zones for simplicity.
|
||||
* we will avoid using QDateTime fields with time zones for
|
||||
* simplicity.
|
||||
*
|
||||
* Type utf8 is a utf-8 byte string formatted as a QByteArray for
|
||||
* serialization purposes (currently a quint32 size followed by size
|
||||
* bytes, no terminator is present or counted).
|
||||
*
|
||||
* The QDataStream format document linked above is not complete for
|
||||
* the QByteArray serialization format, it is similar to the QString
|
||||
* serialization format in that it differentiates between empty
|
||||
* strings and null strings. Empty strings have a length of zero
|
||||
* The QDataStream format document linked above is not complete for
|
||||
* the QByteArray serialization format, it is similar to the QString
|
||||
* serialization format in that it differentiates between empty
|
||||
* strings and null strings. Empty strings have a length of zero
|
||||
* whereas null strings have a length field of 0xffffffff.
|
||||
*
|
||||
*
|
||||
* Schema Negotiation
|
||||
* ------------------
|
||||
*
|
||||
@ -72,6 +74,36 @@
|
||||
* Schema Version 3:- this schema uses the QDataStream::Qt_5_4 version.
|
||||
*
|
||||
*
|
||||
* Backward Compatibility
|
||||
* ----------------------
|
||||
*
|
||||
* It is important that applications developed at different times
|
||||
* remain compatible with this protocol and with older or newer
|
||||
* versions of WSJT-X. This is achieved by both third-party
|
||||
* applications and WSJT-X honouring two basic rules.
|
||||
*
|
||||
* 1. New message types may be added to the protocol in the future,
|
||||
* third-party applications and WSJT-X shall ignore silently any
|
||||
* message types they do not recognize.
|
||||
*
|
||||
* 2. New fields may be added to existing message types, they will
|
||||
* always be added to the end of the existing fields and the number
|
||||
* and type of existing fields shall not change. If a field type
|
||||
* must be changed; a new field will be added and the existing
|
||||
* field will remain. The originator of such a message shall
|
||||
* populate both the new and old field with reasonable
|
||||
* values. Third-party applications and WSJT-X shall ignore
|
||||
* silently any extra data received in datagrams after the fields
|
||||
* they know about.
|
||||
*
|
||||
* Note that these rules are unrelated to the schema number above
|
||||
* whose purpose is to distinguish between non-compatible encodings of
|
||||
* field data types. New message types and extra fields in existing
|
||||
* messages can and will be added without any change in schema number.
|
||||
*
|
||||
*
|
||||
* Message Types
|
||||
* -------------
|
||||
*
|
||||
* Message Direction Value Type
|
||||
* ------------- --------- ---------------------- -----------
|
||||
|
@ -1,6 +1,5 @@
|
||||
#include "OmniRigTransceiver.hpp"
|
||||
|
||||
#include <QTimer>
|
||||
#include <QDebug>
|
||||
#include <objbase.h>
|
||||
#include <QThread>
|
||||
@ -158,6 +157,12 @@ int OmniRigTransceiver::do_start ()
|
||||
Q_ASSERT (rig_);
|
||||
Q_ASSERT (!rig_->isNull ());
|
||||
|
||||
offline_timer_.reset (new QTimer); // instantiate here as
|
||||
// constructor runs in wrong
|
||||
// thread
|
||||
offline_timer_->setSingleShot (true);
|
||||
connect (offline_timer_.data (), &QTimer::timeout, [this] () {offline ("Rig went offline");});
|
||||
|
||||
if (use_for_ptt_ && (TransceiverFactory::PTT_method_DTR == ptt_type_ || TransceiverFactory::PTT_method_RTS == ptt_type_))
|
||||
{
|
||||
// fetch the interface for the serial port if we need it for PTT
|
||||
@ -204,6 +209,8 @@ int OmniRigTransceiver::do_start ()
|
||||
{
|
||||
throw_qstring ("OmniRig: " + rig_->StatusStr ());
|
||||
}
|
||||
QThread::msleep (500); // leave some time for Omni-Rig to get
|
||||
// the rig status for the 1st. time
|
||||
auto f = rig_->GetRxFrequency ();
|
||||
for (int i = 0; (f == 0) && (i < 5); ++i)
|
||||
{
|
||||
@ -297,6 +304,11 @@ void OmniRigTransceiver::do_stop ()
|
||||
{
|
||||
QThread::msleep (200); // leave some time for pending
|
||||
// commands at the server end
|
||||
|
||||
offline_timer_.reset (); // destroy here rather than in
|
||||
// destructor as destructor runs in
|
||||
// wrong thread
|
||||
|
||||
if (port_)
|
||||
{
|
||||
port_->Unlock (); // release serial port
|
||||
@ -358,10 +370,17 @@ void OmniRigTransceiver::handle_status_change (int rig_number)
|
||||
TRACE_CAT ("OmniRigTransceiver", "OmniRig status change: new status = " << status);
|
||||
if (OmniRig::ST_ONLINE != rig_->Status ())
|
||||
{
|
||||
offline ("Rig went offline");
|
||||
if (!offline_timer_->isActive ())
|
||||
{
|
||||
// Omni-Rig is prone to reporting the rig offline and
|
||||
// then recovering autonomously, so we will give it a
|
||||
// few seconds to make its mind up
|
||||
offline_timer_->start (10000);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
offline_timer_->stop (); // good to go again
|
||||
Q_EMIT notified ();
|
||||
}
|
||||
// else
|
||||
@ -662,10 +681,9 @@ void OmniRigTransceiver::do_ptt (bool on)
|
||||
port_->SetDtr (on);
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (wrapped_)
|
||||
{
|
||||
TRACE_CAT ("OmniRigTransceiver", "set PTT using basic transceiver");
|
||||
Q_ASSERT (wrapped_);
|
||||
TransceiverState new_state {wrapped_->state ()};
|
||||
new_state.ptt (on);
|
||||
wrapped_->set (new_state, 0);
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include <QScopedPointer>
|
||||
#include <QString>
|
||||
#include <QTimer>
|
||||
|
||||
#include "TransceiverFactory.hpp"
|
||||
#include "TransceiverBase.hpp"
|
||||
@ -63,7 +64,7 @@ private:
|
||||
QString rig_type_;
|
||||
int readable_params_;
|
||||
int writable_params_;
|
||||
// QScopedPointer<QTimer> offline_timer_;
|
||||
QScopedPointer<QTimer> offline_timer_;
|
||||
bool send_update_signal_;
|
||||
bool reversed_; // some rigs can reverse VFOs
|
||||
};
|
||||
|
117
README
117
README
@ -11,70 +11,85 @@
|
||||
|
||||
|
||||
|
||||
Copyright (C) 2001 - 2018 by Joe Taylor, K1JT.
|
||||
Copyright (C) 2001 - 2019 by Joe Taylor, K1JT.
|
||||
|
||||
WSJT-X is a computer program designed to facilitate basic amateur
|
||||
radio communication using very weak signals. The first four letters in
|
||||
the program name stand for “Weak Signal communication by K1JT,” while
|
||||
the suffix “-X” indicates that WSJT-X started as an extended (and
|
||||
experimental) branch of the program WSJT.
|
||||
WSJT-X Version 2.1 offers ten different protocols or modes: FT4, FT8,
|
||||
JT4, JT9, JT65, QRA64, ISCAT, MSK144, WSPR, and Echo. The first six
|
||||
are designed for making reliable QSOs under weak-signal
|
||||
conditions. They use nearly identical message structure and source
|
||||
encoding. JT65 and QRA64 were designed for EME (“moonbounce”) on the
|
||||
VHF/UHF bands and have also proven very effective for worldwide QRP
|
||||
communication on the HF bands. QRA64 has a number of advantages over
|
||||
JT65, including better performance on the very weakest signals. We
|
||||
imagine that over time it may replace JT65 for EME use. JT9 was
|
||||
originally designed for the LF, MF, and lower HF bands. Its submode
|
||||
JT9A is 2 dB more sensitive than JT65 while using less than 10% of the
|
||||
bandwidth. JT4 offers a wide variety of tone spacings and has proven
|
||||
highly effective for EME on microwave bands up to 24 GHz. These four
|
||||
“slow” modes use one-minute timed sequences of alternating
|
||||
transmission and reception, so a minimal QSO takes four to six minutes
|
||||
— two or three transmissions by each station, one sending in odd UTC
|
||||
minutes and the other even. FT8 is operationally similar but four
|
||||
times faster (15-second T/R sequences) and less sensitive by a few
|
||||
dB. FT4 is faster still (7.5 s T/R sequences) and especially well
|
||||
suited for radio contesting. On the HF bands, world-wide QSOs are
|
||||
possible with any of these modes using power levels of a few watts (or
|
||||
even milliwatts) and compromise antennas. QSOs are possible at signal
|
||||
levels 10 to 15 dB below those required for CW.
|
||||
|
||||
WSJT-X Version 1.6 offers five protocols or “modes”: JT4, JT9, JT65
|
||||
WSPR, and Echo. The first three are designed for making reliable QSOs
|
||||
under extreme weak-signal conditions. They use nearly identical
|
||||
message structure and source encoding. JT65 was designed for EME
|
||||
(“moonbounce”) on the VHF/UHF bands and has also proven very effective
|
||||
for worldwide QRP communication on the HF bands. JT9 is optimized for
|
||||
the LF, MF, and lower HF bands. It is 2 dB more sensitive than JT65
|
||||
while using less than 10% of the bandwidth. JT4 offers a wide variety
|
||||
of tone spacings and has proved very effective for EME on microwave
|
||||
bands up to 24 GHz. All three of these modes use one-minute timed
|
||||
sequences of alternating transmission and reception, so a minimal QSO
|
||||
takes four to six minutes — two or three transmissions by each
|
||||
station, one sending in odd UTC minutes and the other even. On the HF
|
||||
bands, world-wide QSOs are possible using power levels of a few watts
|
||||
and compromise antennas. On VHF bands and higher, QSOs are possible
|
||||
(by EME and other propagation types) at signal levels 10 to 15 dB
|
||||
below those required for CW.
|
||||
Note that even though their T/R sequences are short, FT4 and FT8 are
|
||||
classified as slow modes because their message frames are sent only
|
||||
once per transmission. All fast modes in WSJT-X send their message
|
||||
frames repeatedly, as many times as will fit into the Tx sequence
|
||||
length.
|
||||
|
||||
WSPR (pronounced “whisper”) stands for Weak Signal Propagation
|
||||
Reporter. The WSPR protocol was designed for probing potential
|
||||
propagation paths using low-power transmissions. WSPR messages
|
||||
normally carry the transmitting station’s callsign, grid locator, and
|
||||
transmitter power in dBm, and they can be decoded at signal-to-noise
|
||||
ratios as low as -28 dB in a 2500 Hz bandwidth. WSPR users with
|
||||
internet access can automatically upload their reception reports to a
|
||||
central database called {wsprnet} that provides a mapping facility,
|
||||
ISCAT, MSK144, and optionally submodes JT9E-H are “fast” protocols
|
||||
designed to take advantage of brief signal enhancements from ionized
|
||||
meteor trails, aircraft scatter, and other types of scatter
|
||||
propagation. These modes use timed sequences of 5, 10, 15, or 30 s
|
||||
duration. User messages are transmitted repeatedly at high rate (up to
|
||||
250 characters per second, for MSK144) to make good use of the
|
||||
shortest meteor-trail reflections or “pings”. ISCAT uses free-form
|
||||
messages up to 28 characters long, while MSK144 uses the same
|
||||
structured messages as the slow modes and optionally an abbreviated
|
||||
format with hashed callsigns.
|
||||
|
||||
WSPR (pronounced “whisper”) stands for Weak Signal Propagation
|
||||
Reporter. The WSPR protocol was designed for probing potential
|
||||
propagation paths using low-power transmissions. WSPR messages
|
||||
normally carry the transmitting station’s callsign, grid locator, and
|
||||
transmitter power in dBm, and they can be decoded at signal-to-noise
|
||||
ratios as low as -31 dB in a 2500 Hz bandwidth. WSPR users with
|
||||
internet access can automatically upload reception reports to a
|
||||
central database called WSPRnet that provides a mapping facility,
|
||||
archival storage, and many other features.
|
||||
|
||||
Echo mode allows you to detect and measure your own lunar echoes, even
|
||||
if they are far below the audible threshold.
|
||||
Echo mode allows you to detect and measure your own station’s echoes
|
||||
from the moon, even if they are far below the audible threshold.
|
||||
|
||||
WSJT-X provides spectral displays for passbands up to 5 kHz, flexible
|
||||
rig control for nearly all modern radios used by amateurs, and a wide
|
||||
variety of special aids such as automatic Doppler tracking for EME
|
||||
QSOs and Echo testing. The program runs equally well on Windows,
|
||||
Macintosh, and Linux systems, and installation packages are available
|
||||
for all three platforms.
|
||||
WSJT-X provides spectral displays for receiver passbands as wide as 5
|
||||
kHz, flexible rig control for nearly all modern radios used by
|
||||
amateurs, and a wide variety of special aids such as automatic Doppler
|
||||
tracking for EME QSOs and Echo testing. The program runs equally well
|
||||
on Windows, Macintosh, and Linux systems, and installation packages
|
||||
are available for all three platforms.
|
||||
|
||||
WSJT-X is an open-source project released under the GPLv3 license (See
|
||||
COPYING). If you have programming or documentation skills or would
|
||||
like to contribute to the project in other ways, please make your
|
||||
interests known to the development team. The project’s source-code
|
||||
repository can be found at https://sourceforge.net/projects/wsjt, and
|
||||
most communication among the developers takes place on the email
|
||||
reflector https://sourceforge.net/p/wsjt/mailman. User-level
|
||||
questions and answers, and general communication among users is found
|
||||
on the https://groups.yahoo.com/neo/groups/wsjtgroup/info email
|
||||
reflector.
|
||||
COPYING). If you have programming or documentation skills or would
|
||||
like to contribute to the project in other ways, please make your
|
||||
interests known to the development team. The project’s source-code
|
||||
repository can be found at https://sourceforge.net/projects/wsjt, and
|
||||
communication among the developers takes place on the email reflector
|
||||
https://sourceforge.net/p/wsjt/mailman. User-level questions and
|
||||
answers, and general communication among users is found on the
|
||||
https://groups.yahoo.com/neo/groups/wsjtgroup/info email reflector.
|
||||
|
||||
|
||||
Project web site:
|
||||
|
||||
http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html
|
||||
https://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html
|
||||
|
||||
Project mailing list (shared with other applications from the same
|
||||
Project mailing list (shared with other applications from the same
|
||||
team):
|
||||
|
||||
https://groups.yahoo.com/neo/groups/wsjtgroup
|
||||
|
||||
|
@ -12,6 +12,32 @@
|
||||
|
||||
Copyright 2001 - 2019 by Joe Taylor, K1JT.
|
||||
|
||||
Release: WSJT-X 2.1.1
|
||||
November 25, 2019
|
||||
---------------------
|
||||
|
||||
WSJT-X 2.1.1 is a bug fix only release addressing regressions in the
|
||||
prior v2.1.0 release.
|
||||
|
||||
- Document rules for the UDP message protocol.
|
||||
- Fix bug that could cause display of a blank Settings window.
|
||||
- Fix message parsing to properly handle 4-character directed CQs
|
||||
- Fix a potential crash in the interface to Omni-Rig.
|
||||
- Improve handling of unexpected rig off line status changes from
|
||||
Omni-Rig.
|
||||
- Add an option to highlight unworked 2-character grid fields rather
|
||||
than 4-character grid squares.
|
||||
- Fix bug that caused unwanted disabling of "Enable Tx" in Fox mode.
|
||||
- Log duplicate contacts in FT8 DXpedition Fox mode.
|
||||
- Regenerate the GFSK Tx waveform if Tx audio frequency is changed.
|
||||
- Fix the behavior of double-clicking on a decoded message with first
|
||||
callsign displayed as an unresolved hash code <...>.
|
||||
- Fix a problem with determining "worked before" status after a band
|
||||
change.
|
||||
- Updates to the WSJT-X 2.1 User Guide.
|
||||
- Fix a production issue with the macOS tool chain that generated
|
||||
broken executables.
|
||||
|
||||
Release: WSJT-X 2.1
|
||||
July 15, 2019
|
||||
-------------------
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Version number components
|
||||
set (WSJTX_VERSION_MAJOR 2)
|
||||
set (WSJTX_VERSION_MINOR 1)
|
||||
set (WSJTX_VERSION_PATCH 0)
|
||||
set (WSJTX_RC 8) # release candidate number, comment out or zero for development versions
|
||||
set (WSJTX_VERSION_PATCH 1)
|
||||
set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions
|
||||
set (WSJTX_VERSION_IS_RELEASE 1) # set to 1 for final release build
|
||||
|
@ -10,7 +10,7 @@ extern "C" {
|
||||
|
||||
namespace
|
||||
{
|
||||
QRegularExpression words_re {R"(^(?:(?<word1>(?:CQ|DE|QRZ)(?:\s?DX|\s(?:[A-Z]{2}|\d{3}))|[A-Z0-9/]+)\s)(?:(?<word2>[A-Z0-9/]+)(?:\s(?<word3>[-+A-Z0-9]+)(?:\s(?<word4>(?:OOO|(?!RR73)[A-R]{2}[0-9]{2})))?)?)?)"};
|
||||
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})))?)?)?)"};
|
||||
}
|
||||
|
||||
DecodedText::DecodedText (QString const& the_string)
|
||||
@ -168,11 +168,6 @@ void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
|
||||
call = match.captured ("word2");
|
||||
grid = match.captured ("word3");
|
||||
if ("R" == grid) grid = match.captured ("word4");
|
||||
if(match.captured("word1")=="CQ" and call.length()<=4 and !call.contains(QRegExp("[0-9]"))) {
|
||||
//Second word has length 1-4 and contains no digits
|
||||
call = match.captured ("word3");
|
||||
grid = match.captured ("word4");
|
||||
}
|
||||
}
|
||||
|
||||
unsigned DecodedText::timeInSeconds() const
|
||||
|
@ -67,6 +67,7 @@ set (UG_IMGS
|
||||
images/Astronomical_data.png
|
||||
images/auto-seq.png
|
||||
images/band-settings.png
|
||||
images/Best_S+P.png
|
||||
images/colors.png
|
||||
images/config-menu.png
|
||||
images/decode-menu.png
|
||||
|
@ -12,6 +12,12 @@ GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this documentation. If not, see {gnu_gpl}.
|
||||
|
||||
Development _{prog}_ is a cooperative project to which many authors
|
||||
have contributed. If you use our source code, please have the
|
||||
courtesy to let us know about it. If you find bugs or make
|
||||
improvements to the code, please report them to us in a timely
|
||||
fashion.
|
||||
|
||||
Except where otherwise noted, all algorithms, protocol designs, source
|
||||
code, and supporting files contained in the _{prog}_ package are the
|
||||
intellectual property of the program's authors. The authors assert
|
||||
@ -21,9 +27,9 @@ our work under terms of the GNU General Public License must display
|
||||
the following copyright notice prominently:
|
||||
|
||||
*The algorithms, source code, look-and-feel of _{prog}_ and related
|
||||
programs, and protocol specifications for the modes FSK441, FT8, JT4,
|
||||
JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C)
|
||||
2001-2018 by one or more of the following authors: Joseph Taylor,
|
||||
programs, and protocol specifications for the modes FSK441, FT4, FT8,
|
||||
JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C)
|
||||
2001-2019 by one or more of the following authors: Joseph Taylor,
|
||||
K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo,
|
||||
IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR;
|
||||
Philip Karn, KA9Q; and other members of the WSJT Development Group.*
|
||||
|
@ -91,8 +91,8 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
|
||||
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
|
||||
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
|
||||
:win_openssl_packages: https://slproweb.com/products/Win32OpenSSL.html[Windows OpenSSL Packages]
|
||||
:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2r.exe[Win32 OpenSSL Lite Package]
|
||||
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_0_2r.exe[Win64 OpenSSL Lite Package]
|
||||
:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2t.exe[Win32 OpenSSL Light Package]
|
||||
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_0L.exe[Win64 OpenSSL Light Package]
|
||||
:writelog: https://writelog.com/[Writelog]
|
||||
:wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group]
|
||||
:wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X]
|
||||
|
@ -28,7 +28,7 @@ decoded text or a signal in the waterfall.
|
||||
|
||||
* For modes lacking a multi-decode feature, or when *Enable
|
||||
VHF/UHF/Microwave features* has been checked on the *Settings ->
|
||||
General* tab, the *F Tol* control sets a frequency toilerance range
|
||||
General* tab, the *F Tol* control sets a frequency tolerance range
|
||||
over which decoding will be attempted, centered on the Rx frequency.
|
||||
|
||||
* The *Report* control lets you change a signal report that has been
|
||||
|
@ -30,7 +30,7 @@ Pressing *Enter* on a modified message #5 automatically adds that
|
||||
message to the stored macros.
|
||||
|
||||
* In some circumstances it may be desirable to make your QSOs as
|
||||
shiort as possible. To configure the program to start contacts with
|
||||
short as possible. To configure the program to start contacts with
|
||||
message #2, disable message #1 by double-clicking on its round
|
||||
radio-button or rectangular *Tx 1* button. Similarly, to send RR73
|
||||
rather than RRR for message #4, double-click on one of its buttons.
|
||||
|
@ -17,7 +17,7 @@ displayed exactly as it will be decoded by receiving stations. The
|
||||
second label (as shown above) will be absent if you are using the
|
||||
*Default* setting on the *Configurations* menu. A progress bar shows
|
||||
the elapsed fraction of a Tx or Rx sequence. Finally, if the Watchdog
|
||||
(WD) timer was enabled on the *settings | General* tab, a label in the
|
||||
(WD) timer was enabled on the *Settings | General* tab, a label in the
|
||||
lower right-hand corner displays the number of minutes remaining
|
||||
before timeout.
|
||||
|
||||
|
@ -53,7 +53,7 @@ You need to install suitable _OpenSSL_ libraries - see <<OPENSSL,Instructions to
|
||||
|
||||
I occasionally get Rig Control Errors if I adjust my Icom rig's VFO. What's wrong?::
|
||||
|
||||
By default most Icom transceivers have *CI-V Tranceive Mode" enabled,
|
||||
By default, most Icom transceivers have *CI-V Tranceive Mode" enabled,
|
||||
this will cause unsolicited CAT traffic from the rig that disrupts CAT
|
||||
control by a PC. Disable this option in the rig's menu.
|
||||
|
||||
|
BIN
doc/user_guide/en/images/Best_S+P.png
Normal file
BIN
doc/user_guide/en/images/Best_S+P.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 22 KiB |
@ -29,7 +29,7 @@ sudo dpkg -P wsjtx
|
||||
[example]
|
||||
sudo dpkg -i wsjtx_{VERSION}_amd64.deb
|
||||
|
||||
* 64-bit: {raspbian}
|
||||
* 32-bit: {raspbian}
|
||||
- To install:
|
||||
+
|
||||
[example]
|
||||
|
@ -34,15 +34,16 @@ TIP: Your computer may be configured so that this directory is
|
||||
role="right"] _WSJT-X_ requires the _OpenSSL_ libraries to be
|
||||
installed. Suitable libraries may already be installed on your
|
||||
system, if they are not you will see this error shortly after
|
||||
startup. To fix this you need to install the _OpenSSL_ libraries.
|
||||
requesting a fetch of the latest LoTW users database. To fix this
|
||||
you need to install the _OpenSSL_ libraries.
|
||||
|
||||
** You can download a suitable _OpenSSL_ package for from
|
||||
{win_openssl_packages}, you need the latest *Windows v1.0.2 Lite*
|
||||
version. For the 32-bit _WSJT-X_ build use the Win32 version of the
|
||||
_OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the Win64 version
|
||||
of the _OpenSSL_ libraries (Note it is OK to install both versions
|
||||
on a 64-bit system) which at the time of writing were
|
||||
{win32_openssl} and {win64_openssl} respectively.
|
||||
{win_openssl_packages}, you need the latest *Windows Light*
|
||||
version. For the 32-bit _WSJT-X_ build use the latest Win32 v1.0.2
|
||||
version of the _OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the
|
||||
latest Win64 v1.1.0 version of the _OpenSSL_ libraries (Note it is
|
||||
OK to install both versions on a 64-bit system) which at the time
|
||||
of writing were {win32_openssl} and {win64_openssl} respectively.
|
||||
|
||||
** Install the package and accept the default options, including the
|
||||
option to copy the _OpenSSL_ DLLs to the Windows system
|
||||
@ -69,7 +70,7 @@ TIP: If you cannot install the _OpenSSL_ libraries or do not have an
|
||||
To ensure that this will be so when running under recent versions of
|
||||
Windows, open the system's *Sound* control panel and select in turn
|
||||
the *Recording* and *Playback* tabs. Click on *Properties*, then
|
||||
*Advanced*, and select *16 bit, 48000 Hz (DVD Quality)*. Switch of
|
||||
*Advanced*, and select *16 bit, 48000 Hz (DVD Quality)*. Switch off
|
||||
all audio enhancement features for these devices.
|
||||
|
||||
* You can uninstall _WSJT-X_ by clicking its *Uninstall* link in the
|
||||
|
@ -20,7 +20,7 @@ signal report, R plus a signal report, or the final acknowledgements
|
||||
RRR or 73. These messages are compressed and encoded in a highly
|
||||
efficient and reliable way. In uncompressed form (as displayed
|
||||
on-screen) they may contain as many as 22 characters. Some operators
|
||||
prefer ro send RR73 rather than RRR. This is workable because RR73 is
|
||||
prefer to send RR73 rather than RRR. This is workable because RR73 is
|
||||
encoded as a valid grid locator, one unlikely ever to be occupied by
|
||||
an amateur station.
|
||||
|
||||
@ -81,7 +81,7 @@ fully automated QSOs.
|
||||
|
||||
=== Contest Messages
|
||||
|
||||
The new FT8 and MSK144 protocols support special messages optimized
|
||||
The new FT4, FT8, and MSK144 protocols support special messages optimized
|
||||
for *NA VHF* and *EU VHF* contests. FT8 also supports messages for
|
||||
*ARRL Field Day* and the *ARRL RTTY Roundup*. The decoders recognize
|
||||
and decode these messages at any time. Configure the program to
|
||||
@ -128,7 +128,7 @@ Either callsign (or both) may have /P appended.
|
||||
[[COMP-CALL]]
|
||||
=== Nonstandard Callsigns
|
||||
|
||||
*FT8 and MSK144*
|
||||
*FT4, FT8, and MSK144*
|
||||
|
||||
Compound callsigns like xx/K1ABC or K1ABC/x and special event
|
||||
callsigns like YW18FIFA are supported for normal QSOs but not for
|
||||
|
@ -36,7 +36,7 @@ in other parts of the world.
|
||||
frequencies, check *Execute frequency calibration cycle* on the
|
||||
*Tools* menu. _WSJT-X_ will spend 30 seconds at each
|
||||
frequency. Initially no measurement data is saved to the `fmt.all`
|
||||
file although it is displayed on screen, this allows you to check you
|
||||
file although it is displayed on screen, this allows you to check your
|
||||
current calibration parameters.
|
||||
|
||||
- During the calibration procedure, the radio's USB dial frequency is
|
||||
@ -44,11 +44,11 @@ offset 1500 Hz below each *FreqCal* entry in the default frequencies
|
||||
list. As shown in the screen shot below, detected signal carriers
|
||||
therefore appear at about 1500 Hz in the _WSJT-X_ waterfall.
|
||||
|
||||
- To start a measurement session check the *Measure* option and let
|
||||
- To start a measurement session, check the *Measure* option and let
|
||||
the calibration cycle run for at least one complete sequence. Note
|
||||
that, while measuring, any existing calibration parameters are
|
||||
automatically disabled so you may have to increase the *FTol* range if
|
||||
your rig is off freqeuncy by more than a few Hertz in order to capture
|
||||
your rig is off frequency by more than a few Hertz in order to capture
|
||||
valid measurements.
|
||||
|
||||
image::FreqCal.png[align="left",alt="FreqCal"]
|
||||
|
@ -17,7 +17,7 @@ In this manual the following icons call attention to particular types
|
||||
of information:
|
||||
|
||||
NOTE: *Notes* containing information that may be of interest to
|
||||
particuar classes of users.
|
||||
particular classes of users.
|
||||
|
||||
TIP: *Tips* on program features or capabilities that might otherwise be
|
||||
overlooked.
|
||||
|
@ -52,9 +52,10 @@ were the callsigns `E9AA` through `E9ZZ`. Upon reception they are
|
||||
converted back to the form `CQ AA` through `CQ ZZ`, for display to the
|
||||
user.
|
||||
|
||||
The new FT8 and MSK144 protocols use a different lossless compression
|
||||
algorithm with features to generate and recognize the special messages
|
||||
used for contesting and the like. (More to come, here ...)
|
||||
The new FT4, FT8, and MSK144 protocols use a different lossless
|
||||
compression algorithm with features to generate and recognize the
|
||||
special messages used for contesting and the like. (More to come,
|
||||
here ...)
|
||||
|
||||
To be useful on channels with low signal-to-noise ratio, this kind of
|
||||
lossless message compression requires use of a strong forward error
|
||||
@ -224,7 +225,7 @@ the sync bit.
|
||||
[[SLOW_SUMMARY]]
|
||||
==== Summary
|
||||
|
||||
Table 2 provides a brief summary parameters for the slow modes in
|
||||
Table 7 provides a brief summary parameters for the slow modes in
|
||||
_WSJT-X_. Parameters K and r specify the constraint length and rate
|
||||
of the convolutional codes; n and k specify the sizes of the
|
||||
(equivalent) block codes; Q is the alphabet size for the
|
||||
@ -250,7 +251,7 @@ which the probability of decoding is 50% or higher.
|
||||
|
||||
Submodes of JT4, JT9, JT65, and QRA64 offer wider tone spacings for
|
||||
circumstances that may require them, such significant Doppler spread.
|
||||
Table 3 summarizes the tone spacings, bandwidths, and approximate
|
||||
Table 8 summarizes the tone spacings, bandwidths, and approximate
|
||||
threshold sensitivities of the various submodes when spreading is
|
||||
comparable to tone spacing.
|
||||
|
||||
@ -335,7 +336,7 @@ The JT9 slow modes all use keying rate 12000/6912 = 1.736 baud. By contrast, wi
|
||||
the *Fast* setting submodes JT9E-H adjust the keying rate to match the
|
||||
increased tone spacings. Message durations are therefore much
|
||||
shorter, and they are sent repeatedly throughout each Tx sequence.
|
||||
For details see Table 4, below.
|
||||
For details see Table 9, below.
|
||||
|
||||
==== MSK144
|
||||
|
||||
|
@ -38,7 +38,7 @@ with twice or four times the normal tone spacing. This feature is
|
||||
intended for use with specialized LF/MF transmitters that divide
|
||||
generated frequencies by 2 or 4 as part of the transmission process.
|
||||
|
||||
_Special Operating Activity: Generation of FT8 and MSk144 messages_
|
||||
_Special Operating Activity: Generation of FT8 and MSK144 messages_
|
||||
|
||||
- Check this box and select the type of activity to enable
|
||||
auto-generation of special message formats for contesting and
|
||||
|
@ -37,11 +37,11 @@ TIP: The _WSJT-X_ ADIF file records must contain the "CALL" field.
|
||||
|
||||
Stations who are known to have uploaded their logs to the ARRL LoTW
|
||||
QSL matching service can be highlighted. The data used to determine
|
||||
this is available on line.
|
||||
this is available online.
|
||||
|
||||
* *Fetch Now* will download a fresh dataset from the *Users CSV file
|
||||
URL*. The LoTW team normally update this data weekly.
|
||||
|
||||
* Adjust *Age of of last upload less than* to set the period within
|
||||
* Adjust *Age of last upload less than* to set the period within
|
||||
which a station must have uploaded their log to LoTW to trigger
|
||||
highlighting.
|
||||
|
@ -3,7 +3,7 @@
|
||||
[[FIG_BAND_SETTINGS]]
|
||||
image::settings-frequencies.png[align="center",alt="Frequency Screen"]
|
||||
|
||||
_Working Frequencies_: By default the *Working Frequencies* table
|
||||
_Working Frequencies_: By default, the *Working Frequencies* table
|
||||
contains a list of frequencies conventionally used for modes FT8, JT4,
|
||||
JT9, JT65, MSK144, WSPR, and Echo. Conventions may change with time
|
||||
or by user preference; you can modify the frequency table as desired.
|
||||
|
@ -42,7 +42,7 @@ NOTE: _Omni-Rig_ is available only under Windows.
|
||||
|
||||
NOTE: A special value of *USB* is available for custom USB devices
|
||||
like those used by some SDR kits. This is not the same a virtual
|
||||
serial port provided by USB connected transcivers and CAT
|
||||
serial port provided by USB connected transceivers and CAT
|
||||
interfaces, for those use the COM or serial port name that
|
||||
refers to them.
|
||||
|
||||
@ -69,7 +69,7 @@ NOTE: CAT interfaces that require handshaking will be non-responsive
|
||||
|
||||
NOTE: When using a proxy application for rig control, *CAT* is usually
|
||||
the correct option for _PTT Method_ assuming the proxy
|
||||
application is capable of keying your transceiver idependently.
|
||||
application is capable of keying your transceiver independently.
|
||||
|
||||
* _Transmit Audio Source_: some radios permit you to choose the
|
||||
connector that will accept Tx audio. If this choice is enabled,
|
||||
|
@ -10,12 +10,15 @@ Call*.
|
||||
reception reports to the {pskreporter} mapping facility.
|
||||
|
||||
- _UDP Server_: This group of options controls the network name or
|
||||
address and port number used by a program that will receive status
|
||||
updates from _WSJT-X_. Cooperating applications like _JTAlert_ use
|
||||
this feature to obtain information about a running _WSJT-X_ instance.
|
||||
If you are using _JTAlert_, be sure to check the three boxes at lower
|
||||
right.
|
||||
address and port number used to exchange information with a third
|
||||
party application that interoperates with _WSJT-X_. Exchanged
|
||||
information includes decoded messages, general program status, QSOs
|
||||
logged, highlighting of callsigns in the _WSJT-X_ band activity
|
||||
window, and limited facilities to initiate QSOs in response to CQ or
|
||||
QRZ messages. Full details of the protocol can be found in comments
|
||||
at the top of this file in our source code repository:
|
||||
https://sourceforge.net/p/wsjt/wsjtx/ci/master/tree/NetworkMessage.hpp
|
||||
|
||||
- _N1MM Logger+ Broadcasts_: To send information on logged QSOs
|
||||
directly to _N1MM Logger+_, check the box and enter the IP address and
|
||||
port number for _N1MM_.
|
||||
Programs like _JTAlert_ use the _UDP Server_ feature to obtain
|
||||
information about a running _WSJT-X_ instance. If you are using
|
||||
_JTAlert_, be sure to check the three boxes at lower right.
|
||||
|
@ -28,7 +28,7 @@ When this file was recorded KF4RWA was finishing a QSO with K1JT.
|
||||
Since the green marker was placed at his audio frequency, 1224 Hz, his
|
||||
message `K1JT KF4RWA 73` is decoded first and appears in the *Rx
|
||||
Frequency* window. The *Band Activity* window shows this message plus
|
||||
all decodes at other frequencies. By default lines containing `CQ`
|
||||
all decodes at other frequencies. By default, lines containing `CQ`
|
||||
are highlighted in green, and lines with *My Call* (in this case K1JT)
|
||||
in red.
|
||||
|
||||
|
@ -39,7 +39,7 @@ things just described and also invokes the decoder in a small range
|
||||
around the Rx frequency. To decode a particular signal, double-click
|
||||
near the left edge of its waterfall trace.
|
||||
|
||||
- Now double-click on any of the the lines of decoded text in the Band
|
||||
- Now double-click on any of the lines of decoded text in the Band
|
||||
Activity window. Any line will show the same behavior, setting
|
||||
Rx frequency to that of the selected message and leaving Tx frequency
|
||||
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
|
||||
|
@ -1,4 +1,8 @@
|
||||
// Status=review
|
||||
FT4 is designed for contesting, particularly on the HF bands.
|
||||
Compared with FT8 it is 3.5 dB less sensitive and requires 1.6 times
|
||||
the bandwidth, but it offers the potential for twice the QSO rate.
|
||||
FT4 is not recommended for everyday use.
|
||||
|
||||
.Main Window:
|
||||
- Select *FT4* on the *Mode* menu.
|
||||
- Double-click on *Erase* to clear both text windows.
|
||||
@ -33,17 +37,38 @@ follow your frequency selections.
|
||||
- Do the same thing with the *Ctrl* key held down. Now the both colored
|
||||
markers and both spinner controls will follow your selections.
|
||||
|
||||
- Now double-click on any of the the lines of decoded text in the Band
|
||||
- Now double-click on any of the lines of decoded text in the Band
|
||||
Activity window. Any line will show similar behavior, setting
|
||||
Rx frequency to that of the selected message and leaving Tx frequency
|
||||
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
|
||||
when double-clicking.
|
||||
|
||||
TIP: To avoid QRM from competing callers, it is frequently desirable
|
||||
to answer a CQ on a different frequency from that of the CQing
|
||||
station. The same is true when you tail-end another QSO. Choose a Tx
|
||||
frequency that appears to be not in use. You might want to check the
|
||||
box *Hold Tx Freq*.
|
||||
.Best S+P Button
|
||||
|
||||
The FT4 user interface includes a new button labeled *Best S+P*.
|
||||
|
||||
image::Best_S+P.png[align="center"]
|
||||
|
||||
Clicking *Best S+P* during an Rx cycle arms the program to examine all
|
||||
CQ messages decoded at the end of the Rx sequence. The program will
|
||||
select the best potential QSO partner (from a contesting perspective),
|
||||
and treat it as if you had double-clicked on that line of decoded
|
||||
text. Here "best potential QSO partner" means "New Multiplier" (1st
|
||||
priority) or "New Call on Band" (2nd priority). "New Multiplier" is
|
||||
currently interpreted to mean "New DXCC"; a more broadly defined
|
||||
multiplier category (for the ARRL RTTY Roundup rules) will be
|
||||
implemented in due course. We may provide additional priority
|
||||
rankings, for example “New Grid on Band” (useful for North American
|
||||
VHF contests), sorting by signal strength, etc.
|
||||
|
||||
*Best S+P* is a useful feature only if you have defined what "best" is
|
||||
supposed to mean. This is done by configuring suitable options on the
|
||||
*Settings | Colors* tab. Selection and ordering of color-highlighting
|
||||
options determines what potential QSO partners will be chosen by the
|
||||
"Best S+P" feature. Optimum choices will be different for different
|
||||
contests. In a contest using RTTY Roundup rules we recommend
|
||||
activating *My Call in message*, *New DXCC*, *New Call on Band*, *CQ
|
||||
in message* and *Transmitted message*, reading from top to bottom.
|
||||
|
||||
TIP: Keyboard shortcuts *Shift+F11* and *Shift+F12* provide an easy
|
||||
way to move your FT4 Tx frequency down or up in 90 Hz steps.
|
||||
|
@ -1,4 +1,4 @@
|
||||
_WSJT-X_ v{VERSION_MAJOR}.{VERSION_MINOR} suppports a number of
|
||||
_WSJT-X_ v{VERSION_MAJOR}.{VERSION_MINOR} supports a number of
|
||||
features designed for use on the VHF and higher bands. These features
|
||||
include:
|
||||
|
||||
@ -111,7 +111,7 @@ retune their receiver as the Doppler changes. Sked frequency in this
|
||||
case is set to that announced by your QSO partner.
|
||||
|
||||
- Select *Call DX* after tuning the radio manually to find a station,
|
||||
with the Doppler mode initally set to *None*. You may be tuning the band
|
||||
with the Doppler mode initially set to *None*. You may be tuning the band
|
||||
looking for random stations, or to a frequency where a station has been
|
||||
seen on an SDR display. It is usually necessary to hold down the Ctrl key
|
||||
while tuning the radio. From the moment *Call DX* is pressed, your
|
||||
@ -221,7 +221,7 @@ to indicate to the other station that you are ready to receive messages.
|
||||
|
||||
TIP: QRA64 is different from JT65 in that the decoder attempts to find
|
||||
and decode only a single signal in the receiver passband. If many
|
||||
signals are present you may be able to decode them by double-clicking
|
||||
signals are present, you may be able to decode them by double-clicking
|
||||
on the lowest tone of each one in the waterfall.
|
||||
|
||||
TIP: G3WDG has prepared a more detailed tutorial on using {QRA64_EME}.
|
||||
@ -236,11 +236,11 @@ error-correction facility.
|
||||
|
||||
=== MSK144
|
||||
|
||||
Meteor-scatter QSOs can be made any time on the VHF bands at distances
|
||||
Meteor scatter QSOs can be made any time on the VHF bands at distances
|
||||
up to about 2100 km (1300 miles). Completing a QSO takes longer in
|
||||
the evening than in the morning, longer at higher frequencies, and
|
||||
longer at distances close to the upper limit. But with patience, 100
|
||||
Watts or more, and a single yagi it can usually be done. The
|
||||
W or more, and a single yagi it can usually be done. The
|
||||
following screen shot shows two 15-second reception intervals
|
||||
containing MSK144 signals from three different stations.
|
||||
|
||||
@ -271,7 +271,7 @@ image::Rx_pct_MSK144.png[align="center",alt="MSK144 Percent CPU"]
|
||||
|
||||
- The displayed number (here 17%) indicates the fraction of available
|
||||
time being used for execution of the MSK144 real-time decoder. If
|
||||
this number is well below 100% you may increase the decoding depth
|
||||
this number is well below 100%, you may increase the decoding depth
|
||||
from *Fast* to *Normal* or *Deep*, and increase *F Tol* from 100 to
|
||||
200 Hz.
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <boost/multi_index/hashed_index.hpp>
|
||||
#include <boost/multi_index/ordered_index.hpp>
|
||||
#include <boost/multi_index/key_extractors.hpp>
|
||||
#include <boost/range/iterator_range.hpp>
|
||||
#include <QtConcurrent/QtConcurrentRun>
|
||||
#include <QFuture>
|
||||
#include <QFutureWatcher>
|
||||
@ -362,7 +363,8 @@ class WorkedBefore::impl final
|
||||
{
|
||||
public:
|
||||
impl (Configuration const * configuration)
|
||||
: path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
|
||||
: configuration_ {configuration}
|
||||
, path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
|
||||
, prefixes_ {configuration}
|
||||
{
|
||||
}
|
||||
@ -373,6 +375,7 @@ public:
|
||||
loader_watcher_.setFuture (async_loader_);
|
||||
}
|
||||
|
||||
Configuration const * configuration_;
|
||||
QString path_;
|
||||
AD1CCty prefixes_;
|
||||
QFutureWatcher<worked_before_database_type> loader_watcher_;
|
||||
@ -491,34 +494,56 @@ bool WorkedBefore::country_worked (QString const& country, QString const& mode,
|
||||
|
||||
bool WorkedBefore::grid_worked (QString const& grid, QString const& mode, QString const& band) const
|
||||
{
|
||||
if (mode.size ())
|
||||
auto gridsquare = grid.left (4).toUpper ();
|
||||
if (m_->configuration_->highlight_only_fields ())
|
||||
{
|
||||
if (band.size ())
|
||||
// can't use a direct set find operation or a set operation with
|
||||
// a (CompatibleKey, CompatibleCompare) concept so we must
|
||||
// partially scan the index
|
||||
auto range = boost::make_iterator_range (
|
||||
m_->worked_.get<grid_mode_band> ().lower_bound (gridsquare.left (2))
|
||||
, m_->worked_.get<grid_mode_band> ().upper_bound (gridsquare.left (2) + "99"));
|
||||
for (worked_entry const& worked : range)
|
||||
{
|
||||
return m_->worked_.get<grid_mode_band> ().end ()
|
||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper (), band.toUpper ()));
|
||||
}
|
||||
else
|
||||
{
|
||||
// partial key lookup
|
||||
return m_->worked_.get<grid_mode_band> ().end ()
|
||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper ()));
|
||||
if ((!mode.size () || mode.toUpper () == worked.mode_)
|
||||
&& (!band.size () || worked.band_ == band.toUpper ()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (band.size ())
|
||||
if (mode.size ())
|
||||
{
|
||||
return m_->worked_.get<grid_band> ().end ()
|
||||
!= m_->worked_.get<grid_band> ().find (std::make_tuple (grid.left (4).toUpper (), band.toUpper ()));
|
||||
if (band.size ())
|
||||
{
|
||||
return m_->worked_.get<grid_mode_band> ().end ()
|
||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (gridsquare, mode.toUpper (), band.toUpper ()));
|
||||
}
|
||||
else
|
||||
{
|
||||
// partial key lookup
|
||||
return m_->worked_.get<grid_mode_band> ().end ()
|
||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (gridsquare, mode.toUpper ()));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// partial key lookup
|
||||
return m_->worked_.get<grid_band> ().end ()
|
||||
!= m_->worked_.get<grid_band> ().find (grid.left (4).toUpper ());
|
||||
if (band.size ())
|
||||
{
|
||||
return m_->worked_.get<grid_band> ().end ()
|
||||
!= m_->worked_.get<grid_band> ().find (std::make_tuple (gridsquare, band.toUpper ()));
|
||||
}
|
||||
else
|
||||
{
|
||||
// partial key lookup
|
||||
return m_->worked_.get<grid_band> ().end ()
|
||||
!= m_->worked_.get<grid_band> ().find (gridsquare);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool WorkedBefore::call_worked (QString const& call, QString const& mode, QString const& band) const
|
||||
|
@ -47,6 +47,21 @@ public:
|
||||
|
||||
#include "FoxLog.moc"
|
||||
|
||||
namespace
|
||||
{
|
||||
QString const fox_log_ddl {
|
||||
"CREATE %1 TABLE fox_log%2 ("
|
||||
" id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
|
||||
" \"when\" DATETIME NOT NULL,"
|
||||
" call VARCHAR(20) NOT NULL,"
|
||||
" grid VARCHAR(4),"
|
||||
" report_sent VARCHAR(3),"
|
||||
" report_rcvd VARCHAR(3),"
|
||||
" band VARCHAR(6) NOT NULL"
|
||||
")"
|
||||
};
|
||||
}
|
||||
|
||||
FoxLog::impl::impl (Configuration const * configuration)
|
||||
: configuration_ {configuration}
|
||||
{
|
||||
@ -54,16 +69,37 @@ FoxLog::impl::impl (Configuration const * configuration)
|
||||
{
|
||||
QSqlQuery query;
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
"CREATE TABLE fox_log ("
|
||||
" id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
|
||||
" \"when\" DATETIME NOT NULL,"
|
||||
" call VARCHAR(20) NOT NULL,"
|
||||
" grid VARCHAR(4),"
|
||||
" report_sent VARCHAR(3),"
|
||||
" report_rcvd VARCHAR(3),"
|
||||
" band VARCHAR(6) NOT NULL,"
|
||||
" CONSTRAINT no_dupes UNIQUE (call, band)"
|
||||
")");
|
||||
fox_log_ddl.arg ("").arg (""));
|
||||
}
|
||||
else
|
||||
{
|
||||
QSqlQuery query;
|
||||
// query to check if table has a unique constraint
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
"SELECT COUNT(*)"
|
||||
" FROM sqlite_master"
|
||||
" WHERE"
|
||||
" type = 'index' AND tbl_name = 'fox_log'");
|
||||
query.next ();
|
||||
if (query.value (0).toInt ())
|
||||
{
|
||||
// update to new schema with no dupe disallowing unique
|
||||
// constraint
|
||||
database ().transaction ();
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
fox_log_ddl.arg ("TEMPORARY").arg ("_backup"));
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
"INSERT INTO fox_log_backup SELECT * from fox_log");
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
"DROP TABLE fox_log");
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
fox_log_ddl.arg ("").arg (""));
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
"INSERT INTO fox_log SELECT * from fox_log_backup");
|
||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||
"DROP TABLE fox_log_backup");
|
||||
database ().commit ();
|
||||
}
|
||||
}
|
||||
|
||||
SQL_error_check (dupe_query_, &QSqlQuery::prepare,
|
||||
|
@ -970,7 +970,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
|
||||
if(QCoreApplication::applicationVersion().contains("-devel") or
|
||||
QCoreApplication::applicationVersion().contains("-rc")) {
|
||||
QTimer::singleShot (0, this, SLOT (not_GA_warning_message ()));
|
||||
// QTimer::singleShot (0, this, SLOT (not_GA_warning_message ()));
|
||||
}
|
||||
|
||||
ui->pbBestSP->setVisible(m_mode=="FT4");
|
||||
@ -3116,6 +3116,27 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
ui->decodedTextBrowser->displayDecodedText(decodedtext0,m_baseCall,m_mode,m_config.DXCC(),
|
||||
m_logBook,m_currentBand,m_config.ppfx(),
|
||||
(ui->cbCQonly->isVisible() and ui->cbCQonly->isChecked()));
|
||||
|
||||
/*
|
||||
//### TEST CODE
|
||||
{
|
||||
if(decodedtext0.CQersCall()!="") {
|
||||
// For CQ messages, find best one to answer, for contest purposes...
|
||||
QString dxCall;
|
||||
QString dxGrid;
|
||||
QString messagePriority=ui->decodedTextBrowser->CQPriority();
|
||||
decodedtext0.deCallAndGrid(dxCall,dxGrid); //OUTPUT to dxCall and dxGrid!
|
||||
double utch=0.0;
|
||||
int nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter,qsoPoints;
|
||||
azdist_(const_cast <char *> ((m_config.my_grid().left(4) + " ").toLatin1().constData()),
|
||||
const_cast <char *> ((dxGrid.left(4) + " ").toLatin1().constData()),&utch,
|
||||
&nAz,&nEl,&nDmiles,&nDkm,&nHotAz,&nHotABetter,6,6);
|
||||
qsoPoints=1 + nDkm/3000;
|
||||
qDebug() << "aa" << dxCall << dxGrid << messagePriority << nDkm << qsoPoints;
|
||||
}
|
||||
}
|
||||
//###
|
||||
*/
|
||||
if(m_bBestSPArmed and m_mode=="FT4") {
|
||||
QString messagePriority=ui->decodedTextBrowser->CQPriority();
|
||||
if(messagePriority!="") {
|
||||
@ -3133,6 +3154,7 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -3295,7 +3317,9 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
|
||||
}
|
||||
}
|
||||
bool bEU_VHF_w2=(nrpt>=520001 and nrpt<=594000);
|
||||
if(bEU_VHF_w2) m_xRcvd=message.string().trimmed().right(13);
|
||||
if(bEU_VHF_w2 and message.string().contains(m_config.my_callsign() + " ")) {
|
||||
m_xRcvd=message.string().trimmed().right(13);
|
||||
}
|
||||
if (m_auto
|
||||
&& (m_QSOProgress==REPLYING or (!ui->tx1->isEnabled () and m_QSOProgress==REPORT))
|
||||
&& qAbs (ui->TxFreqSpinBox->value () - df) <= int (stop_tolerance)
|
||||
@ -5463,6 +5487,14 @@ void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button
|
||||
|
||||
void MainWindow::on_logQSOButton_clicked() //Log QSO button
|
||||
{
|
||||
if (SpecOp::FOX != m_config.special_op_id ())
|
||||
{
|
||||
// ensure that auto Tx is disabled even if clear DX call & grid
|
||||
// on 73 is not checked, unless in Fox mode where it is allowed
|
||||
// to be a robot.
|
||||
auto_tx_mode (false);
|
||||
}
|
||||
|
||||
if (!m_hisCall.size ()) {
|
||||
MessageBox::warning_message (this, tr ("Warning: DX Call field is empty."));
|
||||
}
|
||||
@ -5515,7 +5547,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
|
||||
, QByteArray const& ADIF)
|
||||
{
|
||||
QString date = QSO_date_on.toString("yyyyMMdd");
|
||||
if (!m_logBook.add (m_hisCall, grid, m_config.bands()->find(m_freqNominal), m_modeTx, ADIF))
|
||||
if (!m_logBook.add (call, grid, m_config.bands()->find(dial_freq), mode, ADIF))
|
||||
{
|
||||
MessageBox::warning_message (this, tr ("Log file error"),
|
||||
tr ("Cannot open \"%1\"").arg (m_logBook.path ()));
|
||||
@ -5540,7 +5572,6 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
|
||||
}
|
||||
|
||||
if(m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX ();
|
||||
auto_tx_mode (false);
|
||||
m_dateTimeQSOOn = QDateTime {};
|
||||
auto special_op = m_config.special_op_id ();
|
||||
if (SpecOp::NONE < special_op && special_op < SpecOp::FOX &&
|
||||
@ -6760,6 +6791,12 @@ void MainWindow::setFreq4(int rxFreq, int txFreq)
|
||||
} else {
|
||||
if (ui->TxFreqSpinBox->isEnabled ()) {
|
||||
ui->TxFreqSpinBox->setValue(txFreq);
|
||||
if ("FT8" == m_mode || "FT4" == m_mode)
|
||||
{
|
||||
// we need to regenerate the current transmit waveform for
|
||||
// GFSK modulated modes
|
||||
if (m_transmitting) m_restart = true;
|
||||
}
|
||||
}
|
||||
else if (m_config.enable_VHF_features ()
|
||||
&& (Qt::ControlModifier & QApplication::keyboardModifiers ())) {
|
||||
|
Loading…
Reference in New Issue
Block a user