mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-28 20:32:28 -04:00
Merge branch 'hotfix-2.1.1'
This commit is contained in:
commit
9c331103fe
@ -571,6 +571,7 @@ private:
|
|||||||
DecodeHighlightingModel decode_highlighing_model_;
|
DecodeHighlightingModel decode_highlighing_model_;
|
||||||
DecodeHighlightingModel next_decode_highlighing_model_;
|
DecodeHighlightingModel next_decode_highlighing_model_;
|
||||||
bool highlight_by_mode_;
|
bool highlight_by_mode_;
|
||||||
|
bool highlight_only_fields_;
|
||||||
bool include_WAE_entities_;
|
bool include_WAE_entities_;
|
||||||
int LotW_days_since_upload_;
|
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_;}
|
LotWUsers const& Configuration::lotw_users () const {return m_->lotw_users_;}
|
||||||
DecodeHighlightingModel const& Configuration::decode_highlighting () const {return m_->decode_highlighing_model_;}
|
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_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_;}
|
bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;}
|
||||||
|
|
||||||
void Configuration::set_calibration (CalibrationParams params)
|
void Configuration::set_calibration (CalibrationParams params)
|
||||||
@ -959,6 +961,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
|
|||||||
, station_insert_action_ {tr ("&Insert ..."), nullptr}
|
, station_insert_action_ {tr ("&Insert ..."), nullptr}
|
||||||
, station_dialog_ {new StationDialog {&next_stations_, &bands_, this}}
|
, station_dialog_ {new StationDialog {&next_stations_, &bands_, this}}
|
||||||
, highlight_by_mode_ {false}
|
, highlight_by_mode_ {false}
|
||||||
|
, highlight_only_fields_ {false}
|
||||||
, include_WAE_entities_ {false}
|
, include_WAE_entities_ {false}
|
||||||
, LotW_days_since_upload_ {0}
|
, LotW_days_since_upload_ {0}
|
||||||
, last_port_type_ {TransceiverFactory::Capabilities::none}
|
, last_port_type_ {TransceiverFactory::Capabilities::none}
|
||||||
@ -1325,6 +1328,7 @@ void Configuration::impl::initialize_models ()
|
|||||||
|
|
||||||
next_decode_highlighing_model_.items (decode_highlighing_model_.items ());
|
next_decode_highlighing_model_.items (decode_highlighing_model_.items ());
|
||||||
ui_->highlight_by_mode_check_box->setChecked (highlight_by_mode_);
|
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_->include_WAE_check_box->setChecked (include_WAE_entities_);
|
||||||
ui_->LotW_days_since_upload_spin_box->setValue (LotW_days_since_upload_);
|
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 ();
|
if (!highlight_items.size ()) highlight_items = DecodeHighlightingModel::default_items ();
|
||||||
decode_highlighing_model_.items (highlight_items);
|
decode_highlighing_model_.items (highlight_items);
|
||||||
highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool ();
|
highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool ();
|
||||||
|
highlight_only_fields_ = settings_->value("OnlyFieldsSought", false).toBool ();
|
||||||
include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool ();
|
include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool ();
|
||||||
LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt ();
|
LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt ();
|
||||||
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
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 ("stations", QVariant::fromValue (stations_.station_list ()));
|
||||||
settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ()));
|
settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ()));
|
||||||
settings_->setValue ("HighlightByMode", highlight_by_mode_);
|
settings_->setValue ("HighlightByMode", highlight_by_mode_);
|
||||||
|
settings_->setValue ("OnlyFieldsSought", highlight_only_fields_);
|
||||||
settings_->setValue ("IncludeWAEEntities", include_WAE_entities_);
|
settings_->setValue ("IncludeWAEEntities", include_WAE_entities_);
|
||||||
settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_);
|
settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_);
|
||||||
settings_->setValue ("toRTTY", log_as_RTTY_);
|
settings_->setValue ("toRTTY", log_as_RTTY_);
|
||||||
@ -2130,6 +2136,7 @@ void Configuration::impl::accept ()
|
|||||||
Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_);
|
Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_);
|
||||||
}
|
}
|
||||||
highlight_by_mode_ = ui_->highlight_by_mode_check_box->isChecked ();
|
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 ();
|
include_WAE_entities_ = ui_->include_WAE_check_box->isChecked ();
|
||||||
LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value ();
|
LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value ();
|
||||||
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
lotw_users_.set_age_constraint (LotW_days_since_upload_);
|
||||||
|
@ -177,6 +177,7 @@ public:
|
|||||||
LotWUsers const& lotw_users () const;
|
LotWUsers const& lotw_users () const;
|
||||||
DecodeHighlightingModel const& decode_highlighting () const;
|
DecodeHighlightingModel const& decode_highlighting () const;
|
||||||
bool highlight_by_mode () const;
|
bool highlight_by_mode () const;
|
||||||
|
bool highlight_only_fields () const;
|
||||||
bool include_WAE_entities () const;
|
bool include_WAE_entities () const;
|
||||||
|
|
||||||
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND};
|
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND};
|
||||||
|
128
Configuration.ui
128
Configuration.ui
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>546</width>
|
<width>554</width>
|
||||||
<height>553</height>
|
<height>563</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -2206,8 +2206,45 @@ Right click for insert and delete options.</string>
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Decode Highlightling</string>
|
<string>Decode Highlightling</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
<item>
|
<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">
|
<widget class="DecodeHighlightingListView" name="highlighting_list_view">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
@ -2247,69 +2284,32 @@ Right click for insert and delete options.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="2" column="0">
|
||||||
<widget class="QPushButton" name="reset_highlighting_to_defaults_push_button">
|
<widget class="QCheckBox" name="highlight_by_mode_check_box">
|
||||||
<property name="toolTip">
|
<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>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Reset Highlighting</string>
|
<string>Highlight by Mode</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="4" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
<widget class="QCheckBox" name="include_WAE_check_box">
|
||||||
<item>
|
<property name="text">
|
||||||
<widget class="QCheckBox" name="highlight_by_mode_check_box">
|
<string>Include extra WAE entities</string>
|
||||||
<property name="toolTip">
|
</property>
|
||||||
<string><html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html></string>
|
</widget>
|
||||||
</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>
|
</item>
|
||||||
<item>
|
<item row="3" column="0">
|
||||||
<layout class="QFormLayout" name="formLayout_20">
|
<widget class="QCheckBox" name="only_fields_check_box">
|
||||||
<item row="0" column="0">
|
<property name="toolTip">
|
||||||
<widget class="QCheckBox" name="include_WAE_check_box"/>
|
<string>Check to for grid highlighting to only apply to unworked grid fields</string>
|
||||||
</item>
|
</property>
|
||||||
<item row="0" column="1">
|
<property name="text">
|
||||||
<widget class="QLabel" name="includeExtraWAEEntitiesLabel">
|
<string>Only grid Fields sought</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Include extra WAE entities</string>
|
</widget>
|
||||||
</property>
|
|
||||||
<property name="buddy">
|
|
||||||
<cstring>include_WAE_check_box</cstring>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
@ -3102,13 +3102,13 @@ Right click for insert and delete options.</string>
|
|||||||
</connection>
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<buttongroups>
|
<buttongroups>
|
||||||
<buttongroup name="special_op_activity_button_group"/>
|
|
||||||
<buttongroup name="CAT_data_bits_button_group"/>
|
|
||||||
<buttongroup name="split_mode_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="PTT_method_button_group"/>
|
||||||
<buttongroup name="CAT_stop_bits_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"/>
|
<buttongroup name="TX_audio_source_button_group"/>
|
||||||
</buttongroups>
|
</buttongroups>
|
||||||
</ui>
|
</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
|
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.)
|
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 chmod 664 /etc/sysctl.conf
|
||||||
sudo chown root:wheel /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)
|
if (!recurse && prepend_context)
|
||||||
{
|
{
|
||||||
auto radio_name = send_command ("get radio", true, current_radio_, true);
|
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)
|
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;
|
return std::get<1> (radio) == radio_name;
|
||||||
|
26
NEWS
26
NEWS
@ -13,6 +13,32 @@
|
|||||||
Copyright 2001 - 2019 by Joe Taylor, K1JT.
|
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
|
Release: WSJT-X 2.1
|
||||||
July 15, 2019
|
July 15, 2019
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
* ======================
|
* ======================
|
||||||
*
|
*
|
||||||
* All messages are written or read using the QDataStream derivatives
|
* All messages are written or read using the QDataStream derivatives
|
||||||
* defined below, note that we are using the default for floating
|
* defined below, note that we are using the default for floating
|
||||||
* point precision which means all are double precision i.e. 64-bit
|
* point precision which means all are double precision i.e. 64-bit
|
||||||
* IEEE format.
|
* IEEE format.
|
||||||
*
|
*
|
||||||
* Message is big endian format
|
* Message is big endian format
|
||||||
@ -19,12 +19,12 @@
|
|||||||
*
|
*
|
||||||
* Payload format:
|
* 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:
|
* here:
|
||||||
*
|
*
|
||||||
* http://doc.qt.io/qt-5/datastreamformat.html
|
* 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
|
* writing the above document is for Qt_5_0 format which is buggy
|
||||||
* so we use Qt_5_4 format, differences are:
|
* so we use Qt_5_4 format, differences are:
|
||||||
*
|
*
|
||||||
@ -37,18 +37,20 @@
|
|||||||
* offset qint32 only present if timespec=2
|
* offset qint32 only present if timespec=2
|
||||||
* timezone several-fields only present if timespec=3
|
* 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
|
* Type utf8 is a utf-8 byte string formatted as a QByteArray for
|
||||||
* serialization purposes (currently a quint32 size followed by size
|
* serialization purposes (currently a quint32 size followed by size
|
||||||
* bytes, no terminator is present or counted).
|
* bytes, no terminator is present or counted).
|
||||||
*
|
*
|
||||||
* The QDataStream format document linked above is not complete for
|
* The QDataStream format document linked above is not complete for
|
||||||
* the QByteArray serialization format, it is similar to the QString
|
* the QByteArray serialization format, it is similar to the QString
|
||||||
* serialization format in that it differentiates between empty
|
* serialization format in that it differentiates between empty
|
||||||
* strings and null strings. Empty strings have a length of zero
|
* strings and null strings. Empty strings have a length of zero
|
||||||
* whereas null strings have a length field of 0xffffffff.
|
* whereas null strings have a length field of 0xffffffff.
|
||||||
*
|
*
|
||||||
|
*
|
||||||
* Schema Negotiation
|
* Schema Negotiation
|
||||||
* ------------------
|
* ------------------
|
||||||
*
|
*
|
||||||
@ -72,6 +74,36 @@
|
|||||||
* Schema Version 3:- this schema uses the QDataStream::Qt_5_4 version.
|
* 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
|
* Message Direction Value Type
|
||||||
* ------------- --------- ---------------------- -----------
|
* ------------- --------- ---------------------- -----------
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "OmniRigTransceiver.hpp"
|
#include "OmniRigTransceiver.hpp"
|
||||||
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <objbase.h>
|
#include <objbase.h>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
@ -158,6 +157,12 @@ int OmniRigTransceiver::do_start ()
|
|||||||
Q_ASSERT (rig_);
|
Q_ASSERT (rig_);
|
||||||
Q_ASSERT (!rig_->isNull ());
|
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_))
|
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
|
// 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 ());
|
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 ();
|
auto f = rig_->GetRxFrequency ();
|
||||||
for (int i = 0; (f == 0) && (i < 5); ++i)
|
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
|
QThread::msleep (200); // leave some time for pending
|
||||||
// commands at the server end
|
// commands at the server end
|
||||||
|
|
||||||
|
offline_timer_.reset (); // destroy here rather than in
|
||||||
|
// destructor as destructor runs in
|
||||||
|
// wrong thread
|
||||||
|
|
||||||
if (port_)
|
if (port_)
|
||||||
{
|
{
|
||||||
port_->Unlock (); // release serial 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);
|
TRACE_CAT ("OmniRigTransceiver", "OmniRig status change: new status = " << status);
|
||||||
if (OmniRig::ST_ONLINE != rig_->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
|
else
|
||||||
{
|
{
|
||||||
|
offline_timer_->stop (); // good to go again
|
||||||
Q_EMIT notified ();
|
Q_EMIT notified ();
|
||||||
}
|
}
|
||||||
// else
|
// else
|
||||||
@ -662,10 +681,9 @@ void OmniRigTransceiver::do_ptt (bool on)
|
|||||||
port_->SetDtr (on);
|
port_->SetDtr (on);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (wrapped_)
|
||||||
{
|
{
|
||||||
TRACE_CAT ("OmniRigTransceiver", "set PTT using basic transceiver");
|
TRACE_CAT ("OmniRigTransceiver", "set PTT using basic transceiver");
|
||||||
Q_ASSERT (wrapped_);
|
|
||||||
TransceiverState new_state {wrapped_->state ()};
|
TransceiverState new_state {wrapped_->state ()};
|
||||||
new_state.ptt (on);
|
new_state.ptt (on);
|
||||||
wrapped_->set (new_state, 0);
|
wrapped_->set (new_state, 0);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include "TransceiverFactory.hpp"
|
#include "TransceiverFactory.hpp"
|
||||||
#include "TransceiverBase.hpp"
|
#include "TransceiverBase.hpp"
|
||||||
@ -63,7 +64,7 @@ private:
|
|||||||
QString rig_type_;
|
QString rig_type_;
|
||||||
int readable_params_;
|
int readable_params_;
|
||||||
int writable_params_;
|
int writable_params_;
|
||||||
// QScopedPointer<QTimer> offline_timer_;
|
QScopedPointer<QTimer> offline_timer_;
|
||||||
bool send_update_signal_;
|
bool send_update_signal_;
|
||||||
bool reversed_; // some rigs can reverse VFOs
|
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
|
WSJT-X Version 2.1 offers ten different protocols or modes: FT4, FT8,
|
||||||
radio communication using very weak signals. The first four letters in
|
JT4, JT9, JT65, QRA64, ISCAT, MSK144, WSPR, and Echo. The first six
|
||||||
the program name stand for “Weak Signal communication by K1JT,” while
|
are designed for making reliable QSOs under weak-signal
|
||||||
the suffix “-X” indicates that WSJT-X started as an extended (and
|
conditions. They use nearly identical message structure and source
|
||||||
experimental) branch of the program WSJT.
|
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
|
Note that even though their T/R sequences are short, FT4 and FT8 are
|
||||||
WSPR, and Echo. The first three are designed for making reliable QSOs
|
classified as slow modes because their message frames are sent only
|
||||||
under extreme weak-signal conditions. They use nearly identical
|
once per transmission. All fast modes in WSJT-X send their message
|
||||||
message structure and source encoding. JT65 was designed for EME
|
frames repeatedly, as many times as will fit into the Tx sequence
|
||||||
(“moonbounce”) on the VHF/UHF bands and has also proven very effective
|
length.
|
||||||
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.
|
|
||||||
|
|
||||||
WSPR (pronounced “whisper”) stands for Weak Signal Propagation
|
ISCAT, MSK144, and optionally submodes JT9E-H are “fast” protocols
|
||||||
Reporter. The WSPR protocol was designed for probing potential
|
designed to take advantage of brief signal enhancements from ionized
|
||||||
propagation paths using low-power transmissions. WSPR messages
|
meteor trails, aircraft scatter, and other types of scatter
|
||||||
normally carry the transmitting station’s callsign, grid locator, and
|
propagation. These modes use timed sequences of 5, 10, 15, or 30 s
|
||||||
transmitter power in dBm, and they can be decoded at signal-to-noise
|
duration. User messages are transmitted repeatedly at high rate (up to
|
||||||
ratios as low as -28 dB in a 2500 Hz bandwidth. WSPR users with
|
250 characters per second, for MSK144) to make good use of the
|
||||||
internet access can automatically upload their reception reports to a
|
shortest meteor-trail reflections or “pings”. ISCAT uses free-form
|
||||||
central database called {wsprnet} that provides a mapping facility,
|
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.
|
archival storage, and many other features.
|
||||||
|
|
||||||
Echo mode allows you to detect and measure your own lunar echoes, even
|
Echo mode allows you to detect and measure your own station’s echoes
|
||||||
if they are far below the audible threshold.
|
from the moon, even if they are far below the audible threshold.
|
||||||
|
|
||||||
WSJT-X provides spectral displays for passbands up to 5 kHz, flexible
|
WSJT-X provides spectral displays for receiver passbands as wide as 5
|
||||||
rig control for nearly all modern radios used by amateurs, and a wide
|
kHz, flexible rig control for nearly all modern radios used by
|
||||||
variety of special aids such as automatic Doppler tracking for EME
|
amateurs, and a wide variety of special aids such as automatic Doppler
|
||||||
QSOs and Echo testing. The program runs equally well on Windows,
|
tracking for EME QSOs and Echo testing. The program runs equally well
|
||||||
Macintosh, and Linux systems, and installation packages are available
|
on Windows, Macintosh, and Linux systems, and installation packages
|
||||||
for all three platforms.
|
are available for all three platforms.
|
||||||
|
|
||||||
WSJT-X is an open-source project released under the GPLv3 license (See
|
WSJT-X is an open-source project released under the GPLv3 license (See
|
||||||
COPYING). If you have programming or documentation skills or would
|
COPYING). If you have programming or documentation skills or would
|
||||||
like to contribute to the project in other ways, please make your
|
like to contribute to the project in other ways, please make your
|
||||||
interests known to the development team. The project’s source-code
|
interests known to the development team. The project’s source-code
|
||||||
repository can be found at https://sourceforge.net/projects/wsjt, and
|
repository can be found at https://sourceforge.net/projects/wsjt, and
|
||||||
most communication among the developers takes place on the email
|
communication among the developers takes place on the email reflector
|
||||||
reflector https://sourceforge.net/p/wsjt/mailman. User-level
|
https://sourceforge.net/p/wsjt/mailman. User-level questions and
|
||||||
questions and answers, and general communication among users is found
|
answers, and general communication among users is found on the
|
||||||
on the https://groups.yahoo.com/neo/groups/wsjtgroup/info email
|
https://groups.yahoo.com/neo/groups/wsjtgroup/info email reflector.
|
||||||
reflector.
|
|
||||||
|
|
||||||
|
|
||||||
Project web site:
|
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):
|
team):
|
||||||
|
|
||||||
https://groups.yahoo.com/neo/groups/wsjtgroup
|
https://groups.yahoo.com/neo/groups/wsjtgroup
|
||||||
|
|
||||||
|
@ -12,6 +12,32 @@
|
|||||||
|
|
||||||
Copyright 2001 - 2019 by Joe Taylor, K1JT.
|
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
|
Release: WSJT-X 2.1
|
||||||
July 15, 2019
|
July 15, 2019
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Version number components
|
# Version number components
|
||||||
set (WSJTX_VERSION_MAJOR 2)
|
set (WSJTX_VERSION_MAJOR 2)
|
||||||
set (WSJTX_VERSION_MINOR 1)
|
set (WSJTX_VERSION_MINOR 1)
|
||||||
set (WSJTX_VERSION_PATCH 0)
|
set (WSJTX_VERSION_PATCH 1)
|
||||||
set (WSJTX_RC 8) # release candidate number, comment out or zero for development versions
|
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
|
set (WSJTX_VERSION_IS_RELEASE 1) # set to 1 for final release build
|
||||||
|
@ -10,7 +10,7 @@ extern "C" {
|
|||||||
|
|
||||||
namespace
|
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)
|
DecodedText::DecodedText (QString const& the_string)
|
||||||
@ -168,11 +168,6 @@ void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
|
|||||||
call = match.captured ("word2");
|
call = match.captured ("word2");
|
||||||
grid = match.captured ("word3");
|
grid = match.captured ("word3");
|
||||||
if ("R" == grid) grid = match.captured ("word4");
|
if ("R" == grid) grid = match.captured ("word4");
|
||||||
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
|
unsigned DecodedText::timeInSeconds() const
|
||||||
|
@ -67,6 +67,7 @@ set (UG_IMGS
|
|||||||
images/Astronomical_data.png
|
images/Astronomical_data.png
|
||||||
images/auto-seq.png
|
images/auto-seq.png
|
||||||
images/band-settings.png
|
images/band-settings.png
|
||||||
|
images/Best_S+P.png
|
||||||
images/colors.png
|
images/colors.png
|
||||||
images/config-menu.png
|
images/config-menu.png
|
||||||
images/decode-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
|
You should have received a copy of the GNU General Public License
|
||||||
along with this documentation. If not, see {gnu_gpl}.
|
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
|
Except where otherwise noted, all algorithms, protocol designs, source
|
||||||
code, and supporting files contained in the _{prog}_ package are the
|
code, and supporting files contained in the _{prog}_ package are the
|
||||||
intellectual property of the program's authors. The authors assert
|
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 following copyright notice prominently:
|
||||||
|
|
||||||
*The algorithms, source code, look-and-feel of _{prog}_ and related
|
*The algorithms, source code, look-and-feel of _{prog}_ and related
|
||||||
programs, and protocol specifications for the modes FSK441, FT8, JT4,
|
programs, and protocol specifications for the modes FSK441, FT4, FT8,
|
||||||
JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C)
|
JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C)
|
||||||
2001-2018 by one or more of the following authors: Joseph Taylor,
|
2001-2019 by one or more of the following authors: Joseph Taylor,
|
||||||
K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo,
|
K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo,
|
||||||
IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR;
|
IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR;
|
||||||
Philip Karn, KA9Q; and other members of the WSJT Development Group.*
|
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]
|
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
|
||||||
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
|
: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]
|
: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]
|
: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_0_2r.exe[Win64 OpenSSL Lite Package]
|
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_0L.exe[Win64 OpenSSL Light Package]
|
||||||
:writelog: https://writelog.com/[Writelog]
|
:writelog: https://writelog.com/[Writelog]
|
||||||
:wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group]
|
:wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group]
|
||||||
:wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X]
|
: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
|
* For modes lacking a multi-decode feature, or when *Enable
|
||||||
VHF/UHF/Microwave features* has been checked on the *Settings ->
|
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.
|
over which decoding will be attempted, centered on the Rx frequency.
|
||||||
|
|
||||||
* The *Report* control lets you change a signal report that has been
|
* 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.
|
message to the stored macros.
|
||||||
|
|
||||||
* In some circumstances it may be desirable to make your QSOs as
|
* 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
|
message #2, disable message #1 by double-clicking on its round
|
||||||
radio-button or rectangular *Tx 1* button. Similarly, to send RR73
|
radio-button or rectangular *Tx 1* button. Similarly, to send RR73
|
||||||
rather than RRR for message #4, double-click on one of its buttons.
|
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
|
second label (as shown above) will be absent if you are using the
|
||||||
*Default* setting on the *Configurations* menu. A progress bar shows
|
*Default* setting on the *Configurations* menu. A progress bar shows
|
||||||
the elapsed fraction of a Tx or Rx sequence. Finally, if the Watchdog
|
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
|
lower right-hand corner displays the number of minutes remaining
|
||||||
before timeout.
|
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?::
|
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
|
this will cause unsolicited CAT traffic from the rig that disrupts CAT
|
||||||
control by a PC. Disable this option in the rig's menu.
|
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]
|
[example]
|
||||||
sudo dpkg -i wsjtx_{VERSION}_amd64.deb
|
sudo dpkg -i wsjtx_{VERSION}_amd64.deb
|
||||||
|
|
||||||
* 64-bit: {raspbian}
|
* 32-bit: {raspbian}
|
||||||
- To install:
|
- To install:
|
||||||
+
|
+
|
||||||
[example]
|
[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
|
role="right"] _WSJT-X_ requires the _OpenSSL_ libraries to be
|
||||||
installed. Suitable libraries may already be installed on your
|
installed. Suitable libraries may already be installed on your
|
||||||
system, if they are not you will see this error shortly after
|
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
|
** You can download a suitable _OpenSSL_ package for from
|
||||||
{win_openssl_packages}, you need the latest *Windows v1.0.2 Lite*
|
{win_openssl_packages}, you need the latest *Windows Light*
|
||||||
version. For the 32-bit _WSJT-X_ build use the Win32 version of the
|
version. For the 32-bit _WSJT-X_ build use the latest Win32 v1.0.2
|
||||||
_OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the Win64 version
|
version of the _OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the
|
||||||
of the _OpenSSL_ libraries (Note it is OK to install both versions
|
latest Win64 v1.1.0 version of the _OpenSSL_ libraries (Note it is
|
||||||
on a 64-bit system) which at the time of writing were
|
OK to install both versions on a 64-bit system) which at the time
|
||||||
{win32_openssl} and {win64_openssl} respectively.
|
of writing were {win32_openssl} and {win64_openssl} respectively.
|
||||||
|
|
||||||
** Install the package and accept the default options, including the
|
** Install the package and accept the default options, including the
|
||||||
option to copy the _OpenSSL_ DLLs to the Windows system
|
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
|
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
|
Windows, open the system's *Sound* control panel and select in turn
|
||||||
the *Recording* and *Playback* tabs. Click on *Properties*, then
|
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.
|
all audio enhancement features for these devices.
|
||||||
|
|
||||||
* You can uninstall _WSJT-X_ by clicking its *Uninstall* link in the
|
* 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
|
RRR or 73. These messages are compressed and encoded in a highly
|
||||||
efficient and reliable way. In uncompressed form (as displayed
|
efficient and reliable way. In uncompressed form (as displayed
|
||||||
on-screen) they may contain as many as 22 characters. Some operators
|
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
|
encoded as a valid grid locator, one unlikely ever to be occupied by
|
||||||
an amateur station.
|
an amateur station.
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ fully automated QSOs.
|
|||||||
|
|
||||||
=== Contest Messages
|
=== 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
|
for *NA VHF* and *EU VHF* contests. FT8 also supports messages for
|
||||||
*ARRL Field Day* and the *ARRL RTTY Roundup*. The decoders recognize
|
*ARRL Field Day* and the *ARRL RTTY Roundup*. The decoders recognize
|
||||||
and decode these messages at any time. Configure the program to
|
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]]
|
[[COMP-CALL]]
|
||||||
=== Nonstandard Callsigns
|
=== Nonstandard Callsigns
|
||||||
|
|
||||||
*FT8 and MSK144*
|
*FT4, FT8, and MSK144*
|
||||||
|
|
||||||
Compound callsigns like xx/K1ABC or K1ABC/x and special event
|
Compound callsigns like xx/K1ABC or K1ABC/x and special event
|
||||||
callsigns like YW18FIFA are supported for normal QSOs but not for
|
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
|
frequencies, check *Execute frequency calibration cycle* on the
|
||||||
*Tools* menu. _WSJT-X_ will spend 30 seconds at each
|
*Tools* menu. _WSJT-X_ will spend 30 seconds at each
|
||||||
frequency. Initially no measurement data is saved to the `fmt.all`
|
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.
|
current calibration parameters.
|
||||||
|
|
||||||
- During the calibration procedure, the radio's USB dial frequency is
|
- 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
|
list. As shown in the screen shot below, detected signal carriers
|
||||||
therefore appear at about 1500 Hz in the _WSJT-X_ waterfall.
|
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
|
the calibration cycle run for at least one complete sequence. Note
|
||||||
that, while measuring, any existing calibration parameters are
|
that, while measuring, any existing calibration parameters are
|
||||||
automatically disabled so you may have to increase the *FTol* range if
|
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.
|
valid measurements.
|
||||||
|
|
||||||
image::FreqCal.png[align="left",alt="FreqCal"]
|
image::FreqCal.png[align="left",alt="FreqCal"]
|
||||||
|
@ -17,7 +17,7 @@ In this manual the following icons call attention to particular types
|
|||||||
of information:
|
of information:
|
||||||
|
|
||||||
NOTE: *Notes* containing information that may be of interest to
|
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
|
TIP: *Tips* on program features or capabilities that might otherwise be
|
||||||
overlooked.
|
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
|
converted back to the form `CQ AA` through `CQ ZZ`, for display to the
|
||||||
user.
|
user.
|
||||||
|
|
||||||
The new FT8 and MSK144 protocols use a different lossless compression
|
The new FT4, FT8, and MSK144 protocols use a different lossless
|
||||||
algorithm with features to generate and recognize the special messages
|
compression algorithm with features to generate and recognize the
|
||||||
used for contesting and the like. (More to come, here ...)
|
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
|
To be useful on channels with low signal-to-noise ratio, this kind of
|
||||||
lossless message compression requires use of a strong forward error
|
lossless message compression requires use of a strong forward error
|
||||||
@ -224,7 +225,7 @@ the sync bit.
|
|||||||
[[SLOW_SUMMARY]]
|
[[SLOW_SUMMARY]]
|
||||||
==== 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
|
_WSJT-X_. Parameters K and r specify the constraint length and rate
|
||||||
of the convolutional codes; n and k specify the sizes of the
|
of the convolutional codes; n and k specify the sizes of the
|
||||||
(equivalent) block codes; Q is the alphabet size for 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
|
Submodes of JT4, JT9, JT65, and QRA64 offer wider tone spacings for
|
||||||
circumstances that may require them, such significant Doppler spread.
|
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
|
threshold sensitivities of the various submodes when spreading is
|
||||||
comparable to tone spacing.
|
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
|
the *Fast* setting submodes JT9E-H adjust the keying rate to match the
|
||||||
increased tone spacings. Message durations are therefore much
|
increased tone spacings. Message durations are therefore much
|
||||||
shorter, and they are sent repeatedly throughout each Tx sequence.
|
shorter, and they are sent repeatedly throughout each Tx sequence.
|
||||||
For details see Table 4, below.
|
For details see Table 9, below.
|
||||||
|
|
||||||
==== MSK144
|
==== 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
|
intended for use with specialized LF/MF transmitters that divide
|
||||||
generated frequencies by 2 or 4 as part of the transmission process.
|
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
|
- Check this box and select the type of activity to enable
|
||||||
auto-generation of special message formats for contesting and
|
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
|
Stations who are known to have uploaded their logs to the ARRL LoTW
|
||||||
QSL matching service can be highlighted. The data used to determine
|
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
|
* *Fetch Now* will download a fresh dataset from the *Users CSV file
|
||||||
URL*. The LoTW team normally update this data weekly.
|
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
|
which a station must have uploaded their log to LoTW to trigger
|
||||||
highlighting.
|
highlighting.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
[[FIG_BAND_SETTINGS]]
|
[[FIG_BAND_SETTINGS]]
|
||||||
image::settings-frequencies.png[align="center",alt="Frequency Screen"]
|
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,
|
contains a list of frequencies conventionally used for modes FT8, JT4,
|
||||||
JT9, JT65, MSK144, WSPR, and Echo. Conventions may change with time
|
JT9, JT65, MSK144, WSPR, and Echo. Conventions may change with time
|
||||||
or by user preference; you can modify the frequency table as desired.
|
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
|
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
|
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
|
interfaces, for those use the COM or serial port name that
|
||||||
refers to them.
|
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
|
NOTE: When using a proxy application for rig control, *CAT* is usually
|
||||||
the correct option for _PTT Method_ assuming the proxy
|
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
|
* _Transmit Audio Source_: some radios permit you to choose the
|
||||||
connector that will accept Tx audio. If this choice is enabled,
|
connector that will accept Tx audio. If this choice is enabled,
|
||||||
|
@ -10,12 +10,15 @@ Call*.
|
|||||||
reception reports to the {pskreporter} mapping facility.
|
reception reports to the {pskreporter} mapping facility.
|
||||||
|
|
||||||
- _UDP Server_: This group of options controls the network name or
|
- _UDP Server_: This group of options controls the network name or
|
||||||
address and port number used by a program that will receive status
|
address and port number used to exchange information with a third
|
||||||
updates from _WSJT-X_. Cooperating applications like _JTAlert_ use
|
party application that interoperates with _WSJT-X_. Exchanged
|
||||||
this feature to obtain information about a running _WSJT-X_ instance.
|
information includes decoded messages, general program status, QSOs
|
||||||
If you are using _JTAlert_, be sure to check the three boxes at lower
|
logged, highlighting of callsigns in the _WSJT-X_ band activity
|
||||||
right.
|
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
|
Programs like _JTAlert_ use the _UDP Server_ feature to obtain
|
||||||
directly to _N1MM Logger+_, check the box and enter the IP address and
|
information about a running _WSJT-X_ instance. If you are using
|
||||||
port number for _N1MM_.
|
_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
|
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
|
message `K1JT KF4RWA 73` is decoded first and appears in the *Rx
|
||||||
Frequency* window. The *Band Activity* window shows this message plus
|
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)
|
are highlighted in green, and lines with *My Call* (in this case K1JT)
|
||||||
in red.
|
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
|
around the Rx frequency. To decode a particular signal, double-click
|
||||||
near the left edge of its waterfall trace.
|
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
|
Activity window. Any line will show the same behavior, setting
|
||||||
Rx frequency to that of the selected message and leaving Tx frequency
|
Rx frequency to that of the selected message and leaving Tx frequency
|
||||||
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
|
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:
|
.Main Window:
|
||||||
- Select *FT4* on the *Mode* menu.
|
- Select *FT4* on the *Mode* menu.
|
||||||
- Double-click on *Erase* to clear both text windows.
|
- 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
|
- Do the same thing with the *Ctrl* key held down. Now the both colored
|
||||||
markers and both spinner controls will follow your selections.
|
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
|
Activity window. Any line will show similar behavior, setting
|
||||||
Rx frequency to that of the selected message and leaving Tx frequency
|
Rx frequency to that of the selected message and leaving Tx frequency
|
||||||
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
|
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
|
||||||
when double-clicking.
|
when double-clicking.
|
||||||
|
|
||||||
TIP: To avoid QRM from competing callers, it is frequently desirable
|
.Best S+P Button
|
||||||
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
|
The FT4 user interface includes a new button labeled *Best S+P*.
|
||||||
frequency that appears to be not in use. You might want to check the
|
|
||||||
box *Hold Tx Freq*.
|
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
|
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.
|
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
|
features designed for use on the VHF and higher bands. These features
|
||||||
include:
|
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.
|
case is set to that announced by your QSO partner.
|
||||||
|
|
||||||
- Select *Call DX* after tuning the radio manually to find a station,
|
- 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
|
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
|
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
|
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
|
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
|
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.
|
on the lowest tone of each one in the waterfall.
|
||||||
|
|
||||||
TIP: G3WDG has prepared a more detailed tutorial on using {QRA64_EME}.
|
TIP: G3WDG has prepared a more detailed tutorial on using {QRA64_EME}.
|
||||||
@ -236,11 +236,11 @@ error-correction facility.
|
|||||||
|
|
||||||
=== MSK144
|
=== 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
|
up to about 2100 km (1300 miles). Completing a QSO takes longer in
|
||||||
the evening than in the morning, longer at higher frequencies, and
|
the evening than in the morning, longer at higher frequencies, and
|
||||||
longer at distances close to the upper limit. But with patience, 100
|
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
|
following screen shot shows two 15-second reception intervals
|
||||||
containing MSK144 signals from three different stations.
|
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
|
- The displayed number (here 17%) indicates the fraction of available
|
||||||
time being used for execution of the MSK144 real-time decoder. If
|
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
|
from *Fast* to *Normal* or *Deep*, and increase *F Tol* from 100 to
|
||||||
200 Hz.
|
200 Hz.
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <boost/multi_index/hashed_index.hpp>
|
#include <boost/multi_index/hashed_index.hpp>
|
||||||
#include <boost/multi_index/ordered_index.hpp>
|
#include <boost/multi_index/ordered_index.hpp>
|
||||||
#include <boost/multi_index/key_extractors.hpp>
|
#include <boost/multi_index/key_extractors.hpp>
|
||||||
|
#include <boost/range/iterator_range.hpp>
|
||||||
#include <QtConcurrent/QtConcurrentRun>
|
#include <QtConcurrent/QtConcurrentRun>
|
||||||
#include <QFuture>
|
#include <QFuture>
|
||||||
#include <QFutureWatcher>
|
#include <QFutureWatcher>
|
||||||
@ -362,7 +363,8 @@ class WorkedBefore::impl final
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
impl (Configuration const * configuration)
|
impl (Configuration const * configuration)
|
||||||
: path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
|
: configuration_ {configuration}
|
||||||
|
, path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
|
||||||
, prefixes_ {configuration}
|
, prefixes_ {configuration}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -373,6 +375,7 @@ public:
|
|||||||
loader_watcher_.setFuture (async_loader_);
|
loader_watcher_.setFuture (async_loader_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Configuration const * configuration_;
|
||||||
QString path_;
|
QString path_;
|
||||||
AD1CCty prefixes_;
|
AD1CCty prefixes_;
|
||||||
QFutureWatcher<worked_before_database_type> loader_watcher_;
|
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
|
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 ()
|
if ((!mode.size () || mode.toUpper () == worked.mode_)
|
||||||
!= m_->worked_.get<grid_mode_band> ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper (), band.toUpper ()));
|
&& (!band.size () || worked.band_ == band.toUpper ()))
|
||||||
}
|
{
|
||||||
else
|
return true;
|
||||||
{
|
}
|
||||||
// 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 ()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (band.size ())
|
if (mode.size ())
|
||||||
{
|
{
|
||||||
return m_->worked_.get<grid_band> ().end ()
|
if (band.size ())
|
||||||
!= m_->worked_.get<grid_band> ().find (std::make_tuple (grid.left (4).toUpper (), band.toUpper ()));
|
{
|
||||||
|
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
|
else
|
||||||
{
|
{
|
||||||
// partial key lookup
|
if (band.size ())
|
||||||
return m_->worked_.get<grid_band> ().end ()
|
{
|
||||||
!= m_->worked_.get<grid_band> ().find (grid.left (4).toUpper ());
|
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
|
bool WorkedBefore::call_worked (QString const& call, QString const& mode, QString const& band) const
|
||||||
|
@ -47,6 +47,21 @@ public:
|
|||||||
|
|
||||||
#include "FoxLog.moc"
|
#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)
|
FoxLog::impl::impl (Configuration const * configuration)
|
||||||
: configuration_ {configuration}
|
: configuration_ {configuration}
|
||||||
{
|
{
|
||||||
@ -54,16 +69,37 @@ FoxLog::impl::impl (Configuration const * configuration)
|
|||||||
{
|
{
|
||||||
QSqlQuery query;
|
QSqlQuery query;
|
||||||
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||||
"CREATE TABLE fox_log ("
|
fox_log_ddl.arg ("").arg (""));
|
||||||
" id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
|
}
|
||||||
" \"when\" DATETIME NOT NULL,"
|
else
|
||||||
" call VARCHAR(20) NOT NULL,"
|
{
|
||||||
" grid VARCHAR(4),"
|
QSqlQuery query;
|
||||||
" report_sent VARCHAR(3),"
|
// query to check if table has a unique constraint
|
||||||
" report_rcvd VARCHAR(3),"
|
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
|
||||||
" band VARCHAR(6) NOT NULL,"
|
"SELECT COUNT(*)"
|
||||||
" CONSTRAINT no_dupes UNIQUE (call, band)"
|
" 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,
|
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
|
if(QCoreApplication::applicationVersion().contains("-devel") or
|
||||||
QCoreApplication::applicationVersion().contains("-rc")) {
|
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");
|
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(),
|
ui->decodedTextBrowser->displayDecodedText(decodedtext0,m_baseCall,m_mode,m_config.DXCC(),
|
||||||
m_logBook,m_currentBand,m_config.ppfx(),
|
m_logBook,m_currentBand,m_config.ppfx(),
|
||||||
(ui->cbCQonly->isVisible() and ui->cbCQonly->isChecked()));
|
(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") {
|
if(m_bBestSPArmed and m_mode=="FT4") {
|
||||||
QString messagePriority=ui->decodedTextBrowser->CQPriority();
|
QString messagePriority=ui->decodedTextBrowser->CQPriority();
|
||||||
if(messagePriority!="") {
|
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);
|
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
|
if (m_auto
|
||||||
&& (m_QSOProgress==REPLYING or (!ui->tx1->isEnabled () and m_QSOProgress==REPORT))
|
&& (m_QSOProgress==REPLYING or (!ui->tx1->isEnabled () and m_QSOProgress==REPORT))
|
||||||
&& qAbs (ui->TxFreqSpinBox->value () - df) <= int (stop_tolerance)
|
&& qAbs (ui->TxFreqSpinBox->value () - df) <= int (stop_tolerance)
|
||||||
@ -5463,6 +5487,14 @@ void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button
|
|||||||
|
|
||||||
void MainWindow::on_logQSOButton_clicked() //Log QSO 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 ()) {
|
if (!m_hisCall.size ()) {
|
||||||
MessageBox::warning_message (this, tr ("Warning: DX Call field is empty."));
|
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)
|
, QByteArray const& ADIF)
|
||||||
{
|
{
|
||||||
QString date = QSO_date_on.toString("yyyyMMdd");
|
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"),
|
MessageBox::warning_message (this, tr ("Log file error"),
|
||||||
tr ("Cannot open \"%1\"").arg (m_logBook.path ()));
|
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 ();
|
if(m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX ();
|
||||||
auto_tx_mode (false);
|
|
||||||
m_dateTimeQSOOn = QDateTime {};
|
m_dateTimeQSOOn = QDateTime {};
|
||||||
auto special_op = m_config.special_op_id ();
|
auto special_op = m_config.special_op_id ();
|
||||||
if (SpecOp::NONE < special_op && special_op < SpecOp::FOX &&
|
if (SpecOp::NONE < special_op && special_op < SpecOp::FOX &&
|
||||||
@ -6760,6 +6791,12 @@ void MainWindow::setFreq4(int rxFreq, int txFreq)
|
|||||||
} else {
|
} else {
|
||||||
if (ui->TxFreqSpinBox->isEnabled ()) {
|
if (ui->TxFreqSpinBox->isEnabled ()) {
|
||||||
ui->TxFreqSpinBox->setValue(txFreq);
|
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 ()
|
else if (m_config.enable_VHF_features ()
|
||||||
&& (Qt::ControlModifier & QApplication::keyboardModifiers ())) {
|
&& (Qt::ControlModifier & QApplication::keyboardModifiers ())) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user