mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-12-24 11:40:31 -05:00
Merge branch 'develop' into feat-ft2
This commit is contained in:
commit
278c544a6a
@ -10,10 +10,10 @@ if (APPLE)
|
|||||||
#
|
#
|
||||||
# otool -l <binary> | grep -A3 LC_VERSION_MIN_MACOSX
|
# otool -l <binary> | grep -A3 LC_VERSION_MIN_MACOSX
|
||||||
#
|
#
|
||||||
set (CMAKE_OSX_DEPLOYMENT_TARGET 10.9
|
set (CMAKE_OSX_DEPLOYMENT_TARGET 10.10
|
||||||
CACHE STRING "Earliest version of OS X supported
|
CACHE STRING "Earliest version of OS X supported
|
||||||
|
|
||||||
Earliest version we can support with Qt 5.8, C++11 & libc++ is 10.9.
|
Earliest version we can support with Qt 5.8, C++11 & libc++ is 10.10.
|
||||||
Do not override this if you intend to build an official deployable installer.")
|
Do not override this if you intend to build an official deployable installer.")
|
||||||
set (CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
|
set (CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
|
||||||
CACHE STRING "Mac OS X SDK to build with
|
CACHE STRING "Mac OS X SDK to build with
|
||||||
@ -48,7 +48,7 @@ message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}")
|
|||||||
set (PROJECT_NAME "WSJT-X")
|
set (PROJECT_NAME "WSJT-X")
|
||||||
set (PROJECT_VENDOR "Joe Taylor, K1JT")
|
set (PROJECT_VENDOR "Joe Taylor, K1JT")
|
||||||
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
|
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
|
||||||
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT")
|
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2019 by Joe Taylor, K1JT")
|
||||||
set (PROJECT_HOMEPAGE http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html)
|
set (PROJECT_HOMEPAGE http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html)
|
||||||
set (PROJECT_MANUAL wsjtx-main)
|
set (PROJECT_MANUAL wsjtx-main)
|
||||||
set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/)
|
set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/)
|
||||||
@ -862,6 +862,7 @@ set (hamlib_STATIC 1)
|
|||||||
find_package (hamlib 3 REQUIRED)
|
find_package (hamlib 3 REQUIRED)
|
||||||
find_program (RIGCTL_EXE rigctl)
|
find_program (RIGCTL_EXE rigctl)
|
||||||
find_program (RIGCTLD_EXE rigctld)
|
find_program (RIGCTLD_EXE rigctld)
|
||||||
|
find_program (RIGCTLCOM_EXE rigctlcom)
|
||||||
|
|
||||||
message (STATUS "hamlib_INCLUDE_DIRS: ${hamlib_INCLUDE_DIRS}")
|
message (STATUS "hamlib_INCLUDE_DIRS: ${hamlib_INCLUDE_DIRS}")
|
||||||
message (STATUS "hamlib_LIBRARIES: ${hamlib_LIBRARIES}")
|
message (STATUS "hamlib_LIBRARIES: ${hamlib_LIBRARIES}")
|
||||||
@ -1443,6 +1444,13 @@ install (PROGRAMS
|
|||||||
RENAME rigctld-wsjtx${CMAKE_EXECUTABLE_SUFFIX}
|
RENAME rigctld-wsjtx${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
install (PROGRAMS
|
||||||
|
${RIGCTLCOM_EXE}
|
||||||
|
DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
#COMPONENT runtime
|
||||||
|
RENAME rigctlcom-wsjtx${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
)
|
||||||
|
|
||||||
install (FILES
|
install (FILES
|
||||||
README
|
README
|
||||||
COPYING
|
COPYING
|
||||||
|
@ -188,6 +188,18 @@ void MessageClient::impl::parse_message (QByteArray const& msg)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NetworkMessage::Clear:
|
||||||
|
{
|
||||||
|
quint8 window {0};
|
||||||
|
in >> window;
|
||||||
|
TRACE_UDP ("Clear window:" << window);
|
||||||
|
if (check_status (in) != Fail)
|
||||||
|
{
|
||||||
|
Q_EMIT self_->clear_decodes (window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NetworkMessage::Replay:
|
case NetworkMessage::Replay:
|
||||||
TRACE_UDP ("Replay");
|
TRACE_UDP ("Replay");
|
||||||
if (check_status (in) != Fail)
|
if (check_status (in) != Fail)
|
||||||
@ -477,7 +489,7 @@ void MessageClient::WSPR_decode (bool is_new, QTime time, qint32 snr, float delt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageClient::clear_decodes ()
|
void MessageClient::decodes_cleared ()
|
||||||
{
|
{
|
||||||
if (m_->server_port_ && !m_->server_string_.isEmpty ())
|
if (m_->server_port_ && !m_->server_string_.isEmpty ())
|
||||||
{
|
{
|
||||||
|
@ -59,7 +59,7 @@ public:
|
|||||||
Q_SLOT void WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency
|
Q_SLOT void WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency
|
||||||
, qint32 drift, QString const& callsign, QString const& grid, qint32 power
|
, qint32 drift, QString const& callsign, QString const& grid, qint32 power
|
||||||
, bool off_air);
|
, bool off_air);
|
||||||
Q_SLOT void clear_decodes ();
|
Q_SLOT void decodes_cleared ();
|
||||||
Q_SLOT void qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid
|
Q_SLOT void qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid
|
||||||
, Frequency dial_frequency, QString const& mode, QString const& report_sent
|
, Frequency dial_frequency, QString const& mode, QString const& report_sent
|
||||||
, QString const& report_received, QString const& tx_power, QString const& comments
|
, QString const& report_received, QString const& tx_power, QString const& comments
|
||||||
@ -80,6 +80,10 @@ public:
|
|||||||
// with send_raw_datagram() above)
|
// with send_raw_datagram() above)
|
||||||
Q_SLOT void add_blocked_destination (QHostAddress const&);
|
Q_SLOT void add_blocked_destination (QHostAddress const&);
|
||||||
|
|
||||||
|
// this signal is emitted if the server has requested a decode
|
||||||
|
// window clear action
|
||||||
|
Q_SIGNAL void clear_decodes (quint8 window);
|
||||||
|
|
||||||
// this signal is emitted if the server sends us a reply, the only
|
// this signal is emitted if the server sends us a reply, the only
|
||||||
// reply supported is reply to a prior CQ or QRZ message
|
// reply supported is reply to a prior CQ or QRZ message
|
||||||
Q_SIGNAL void reply (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode
|
Q_SIGNAL void reply (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode
|
||||||
|
@ -224,7 +224,7 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NetworkMessage::Clear:
|
case NetworkMessage::Clear:
|
||||||
Q_EMIT self_->clear_decodes (id);
|
Q_EMIT self_->decodes_cleared (id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NetworkMessage::Status:
|
case NetworkMessage::Status:
|
||||||
@ -455,6 +455,18 @@ void MessageServer::start (port_type port, QHostAddress const& multicast_group_a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageServer::clear_decodes (QString const& id, quint8 window)
|
||||||
|
{
|
||||||
|
auto iter = m_->clients_.find (id);
|
||||||
|
if (iter != std::end (m_->clients_))
|
||||||
|
{
|
||||||
|
QByteArray message;
|
||||||
|
NetworkMessage::Builder out {&message, NetworkMessage::Clear, id, (*iter).negotiated_schema_number_};
|
||||||
|
out << window;
|
||||||
|
m_->send_message (out, message, iter.value ().sender_address_, (*iter).sender_port_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MessageServer::reply (QString const& id, QTime time, qint32 snr, float delta_time
|
void MessageServer::reply (QString const& id, QTime time, qint32 snr, float delta_time
|
||||||
, quint32 delta_frequency, QString const& mode
|
, quint32 delta_frequency, QString const& mode
|
||||||
, QString const& message_text, bool low_confidence, quint8 modifiers)
|
, QString const& message_text, bool low_confidence, quint8 modifiers)
|
||||||
|
@ -41,6 +41,9 @@ public:
|
|||||||
Q_SLOT void start (port_type port,
|
Q_SLOT void start (port_type port,
|
||||||
QHostAddress const& multicast_group_address = QHostAddress {});
|
QHostAddress const& multicast_group_address = QHostAddress {});
|
||||||
|
|
||||||
|
// ask the client to clear one or both of the decode windows
|
||||||
|
Q_SLOT void clear_decodes (QString const& id, quint8 window = 0);
|
||||||
|
|
||||||
// ask the client with identification 'id' to make the same action
|
// ask the client with identification 'id' to make the same action
|
||||||
// as a double click on the decode would
|
// as a double click on the decode would
|
||||||
//
|
//
|
||||||
@ -91,7 +94,7 @@ public:
|
|||||||
, QString const& name, QDateTime time_on, QString const& operator_call
|
, QString const& name, QDateTime time_on, QString const& operator_call
|
||||||
, QString const& my_call, QString const& my_grid
|
, QString const& my_call, QString const& my_grid
|
||||||
, QString const& exchange_sent, QString const& exchange_rcvd);
|
, QString const& exchange_sent, QString const& exchange_rcvd);
|
||||||
Q_SIGNAL void clear_decodes (QString const& id);
|
Q_SIGNAL void decodes_cleared (QString const& id);
|
||||||
Q_SIGNAL void logged_ADIF (QString const& id, QByteArray const& ADIF);
|
Q_SIGNAL void logged_ADIF (QString const& id, QByteArray const& ADIF);
|
||||||
|
|
||||||
// this signal is emitted when a network error occurs
|
// this signal is emitted when a network error occurs
|
||||||
|
239
NEWS
239
NEWS
@ -10,7 +10,244 @@
|
|||||||
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
|
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
|
||||||
|
|
||||||
|
|
||||||
Copyright 2001 - 2018 by Joe Taylor, K1JT.
|
Copyright 2001 - 2019 by Joe Taylor, K1JT.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0.1
|
||||||
|
February 25, 2019
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
WSJT-X 2.0.1 is a bug fix release including the following defect
|
||||||
|
repairs reported since the v2.0.0 GA release.
|
||||||
|
|
||||||
|
- Remove startup message about importance of upgrading to v2.0.
|
||||||
|
- Relax ADIF log file parsing to allow garbage between records and
|
||||||
|
records with no DX callsign
|
||||||
|
- Fix bug that prevented retention of power and comments in
|
||||||
|
Log QSO window
|
||||||
|
- Updates to User Guide
|
||||||
|
- MSK144 frequency defaults to 50.260 in IARU Regions 2 and 3
|
||||||
|
- Remove hexadecimal RGB values from color-configuration panel
|
||||||
|
- Fix a bounds error by not executing Fox-related code when not
|
||||||
|
in Fox mode
|
||||||
|
- Allow the logQSO dialog to modify "Exch Sent" or "Rcvd" when
|
||||||
|
operating in RTTY or NA VHF Contest mode, and to have any
|
||||||
|
changes flow through to N1MM Logger.
|
||||||
|
- Fix several problems in handling hashed callsigns
|
||||||
|
- More rigorous quality checking of WSPR decodes from the OSD algorithm
|
||||||
|
- Fix bug that prevented recevied signal reports from
|
||||||
|
compound callsigns to be logged
|
||||||
|
- Improved recognition of callsigns with /P or /R suffixes
|
||||||
|
- Do not waste time trying AP decoding of nonstandard callsigns
|
||||||
|
- Make OSD decoding work with WSPR "type 2" messages
|
||||||
|
- Retain in Tx6 message field any CQ messages like
|
||||||
|
"CQ xxxx K1ABC FN42", where xxxx is 1-4 letters or 1-3 digits
|
||||||
|
- Optional key bindings for F1 through F5, especially for contest use
|
||||||
|
- Include grid in Tx1 messages with hashed callsign, for example
|
||||||
|
"<DF2018ARDF> K1ABC FN42"
|
||||||
|
- Better formatting for the files ALL.TXT and ALL_WSPR.TXT
|
||||||
|
- Correct a flaw in validating contest exchange data when logging
|
||||||
|
- Option to always start new decode periods at top of Band
|
||||||
|
Activity window
|
||||||
|
- New command "Erase WSPR hashtable" on the File menu
|
||||||
|
- Improved validation for ARRL RTTY RU and FD exchange fields
|
||||||
|
- UDP Reference applications join a multicast group on all available
|
||||||
|
multicast capable network interfaces
|
||||||
|
- Minor code changes to support Qt versions >=5.10
|
||||||
|
- Changes to support x64 Windows builds in preparation for Qt v5.12
|
||||||
|
- Add "ADIF Export ..." to Fox Log's contextual popup menu
|
||||||
|
- Use ARRL-required names for VHF+ bands in exported Cabrillo log
|
||||||
|
- New utility program rigctlcom-wsjtx (from Hamlib)
|
||||||
|
- Remove temporary FT8 working frequencies from default frequency list
|
||||||
|
- UDP protocol's Clear (3) message is made two-way, for better
|
||||||
|
communication with DX Lab Suite applications
|
||||||
|
- Reset QSO start time when aborting a QSO or clearing messages by ESC
|
||||||
|
or F4
|
||||||
|
- Correct a logging issue in Fox's ADIF log when Fox sends RR73 to more
|
||||||
|
than one Hound in the same Tx sequence.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0
|
||||||
|
December 10, 2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.0 is a major update that introduces new protocols for FT8 and
|
||||||
|
MSK144. The new protocols become the world-wide standards on December
|
||||||
|
10, 2018.
|
||||||
|
|
||||||
|
WSJT-X 2.0 cannot communicate in these modes with other stations using
|
||||||
|
WSJT-X v1.9.1 or earlier.
|
||||||
|
|
||||||
|
Please help by urging everyone to upgrade no later than January 1, 2019.
|
||||||
|
|
||||||
|
New features since WSJT-X v1.9.1:
|
||||||
|
|
||||||
|
1. Compound and nonstandard callsigns are automatically recognized and
|
||||||
|
handled using new message formats.
|
||||||
|
|
||||||
|
2. The new FT8 protocol provides optimized message formats for North
|
||||||
|
American VHF contests, European VHF contests, ARRL Field Day, and ARRL
|
||||||
|
RTTY Roundup. Similarly, the new MSK144 protocol provides optimized
|
||||||
|
message formats for North American VHF and European VHF contests.
|
||||||
|
Full support is provided for "/R" and "/P" calls in the relevant
|
||||||
|
contests.
|
||||||
|
|
||||||
|
3. The new protocols provide nearly equal (or better) sensitivity
|
||||||
|
compared to the old ones, and lower false decode rates.
|
||||||
|
|
||||||
|
4. New logging features are provided for contesting and for "Fox"
|
||||||
|
(DXpedition) mode. Logging is optionally integrated with N1MM Logger+
|
||||||
|
and WriteLog.
|
||||||
|
|
||||||
|
5. Color highlighting of decoded messages provides worked-before
|
||||||
|
status for callsigns, grid locators, DXCC entities, continents, CQ
|
||||||
|
Zones, and ITU zones on a “by band” and “by mode” basis, and for
|
||||||
|
stations that have uploaded their logs to Logbook of the World (LoTW)
|
||||||
|
within a specified time interval.
|
||||||
|
|
||||||
|
6. The WSPR decoder now achieves decodes down to S/N = -31 dB. For
|
||||||
|
the particular benefit of LF/MF users, an option "No own call decodes"
|
||||||
|
has been added.
|
||||||
|
|
||||||
|
7. The UDP messages sent to companion programs have been expanded and
|
||||||
|
improved.
|
||||||
|
|
||||||
|
Some details of changes since WSJT-X-rc5 include the following:
|
||||||
|
|
||||||
|
- Initial load of ADIF log in background
|
||||||
|
- Correct the UTC displayed in Fox/Contest log
|
||||||
|
- Faster entry and correct scrolling for Fox/Contest log
|
||||||
|
- Add contest exchanges and contest type to UDP logged QSO message
|
||||||
|
- Fix a bug that suppressed decodes with negative DT.
|
||||||
|
- AK and HI are DXCCs, not states, for RTTY Roundup
|
||||||
|
- Fix improper truncation of some non-FT8 messages in ALL.TXT
|
||||||
|
- Various minor bug fixes and code cleanup
|
||||||
|
- Update the WSJT-X User Guide to v2.0 (more to come...)
|
||||||
|
- Update cty.dat
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0-rc5
|
||||||
|
November 26, 2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Release Candidate 5 ("RC5") is stable, works well, and fixes the known
|
||||||
|
problems in RC4. It is likely that the General Availability (GA)
|
||||||
|
release of WSJT-X 2.0 will be nearly identical to RC5.
|
||||||
|
|
||||||
|
Changes from WSJT-X 2.0-rc4 include the following:
|
||||||
|
|
||||||
|
- Make the "Auto Seq" checkbox sticky, again
|
||||||
|
- Remove the 5-minute mouse timer
|
||||||
|
- Correct the "worked before" logic for color highlighting
|
||||||
|
- Add "No own call decodes" checkbox in WSPR mode
|
||||||
|
- Display and log UTC (not local time) in contest operations
|
||||||
|
- Validate contest QSO details before allowing logging
|
||||||
|
- Force Aqua theme on macOS to avoid issues with Mojave dark theme
|
||||||
|
- Move Fox log Reset action to Fox log window context menu
|
||||||
|
- Improve layout of Working Frequencies and Station Information tables
|
||||||
|
- Allow deletes and editing in Fox and Contest log windows
|
||||||
|
- Add Tool Tips for Fox and Contest log windows
|
||||||
|
- Fix a bug causing false AP decodes in JT65 VHF+ operation
|
||||||
|
- Fix a bug that could switch unexpectedly from JT65 to JT9 mode
|
||||||
|
|
||||||
|
PLEASE NOTE: As far as WSJT-X 2.0 (RC4, RC5, and GA releases) are
|
||||||
|
concerned, signals using the old FT8 protocol are undecodable
|
||||||
|
interference. This means that regenerated replicas cannot be
|
||||||
|
subtracted from received data, and consequently second- and third-pass
|
||||||
|
decodes may be impeded. Full performance of the 77-bit decoder will
|
||||||
|
not be realized until most signals on a crowded band are using the
|
||||||
|
new FT8 protocol.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0-rc4
|
||||||
|
November 12, 2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Changes from WSJT-X Version 2.0.0-rc3 include the following:
|
||||||
|
|
||||||
|
- Fix the "cannot open file fort.81" bug
|
||||||
|
- Avoid too many redirect loops related to openSSL support
|
||||||
|
- Fix the auto-generated messages for nonstandard callsigns
|
||||||
|
- Remove all support for the legacy FT8 protocol
|
||||||
|
- Disallow selecting MSK144 with RTTY or Field Day messages active
|
||||||
|
- Correct and expand support for color highlighting decoded messages
|
||||||
|
- ESC key aborts a QSO, clears DX Call, and selects Tx6
|
||||||
|
- Disable "nextCall" procedure for RTTY contest; it still needs work
|
||||||
|
- Correct a flaw in handling MSK144 Sh messages
|
||||||
|
- Prevent Fox from inadvertently toggling Tx 1st/Even
|
||||||
|
- Re-organize the Fox/Hound/Contest selection boxes
|
||||||
|
- Improve the validators for contest exchange boxes
|
||||||
|
- Disable Tx after 5 minutes of no mouse movement
|
||||||
|
- Remove end-of-line AP info when using contest messages
|
||||||
|
- Fix forwarding of Sent and Rcvd exchanges to N1MM+ and ADIF log
|
||||||
|
- Don't auto-log a QSO with incomplete exchange info
|
||||||
|
- Fix two sequencing flaws after double-clicks on a decoded msg
|
||||||
|
- New facilities for Contest and Fox-mode logging
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0-rc3
|
||||||
|
October 15, 2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Changes from WSJT-X Version 2.0.0-rc2 include the following:
|
||||||
|
|
||||||
|
- Improved SNR calculation for FT8
|
||||||
|
- Test grid4 (not grid6) for matches in ADIF log
|
||||||
|
- Auto-generate 77-bit messages for callsigns with /R or /P
|
||||||
|
- Fix auto-sequencing for "CQ ABC ...", "CQ ABCD ...", etc.
|
||||||
|
- Fix the "CQ RU RU ..." bug
|
||||||
|
- Implement AP decoding for contest messages and for Hound
|
||||||
|
- Check Field Day and RTTY Roundup exchanges for validity
|
||||||
|
- Implement "Select next caller" and use of "TU; ..." messages
|
||||||
|
- Option to "auto log" in contests
|
||||||
|
- Real-time display of contest log
|
||||||
|
- Contest exchanges sent to ADIF log and N1MM+
|
||||||
|
- Function to export Cabrillo log
|
||||||
|
- Convert DXpedition mode to always use 77-bit messages
|
||||||
|
- Fix bug associated with opening "houndcallers.txt"
|
||||||
|
- Remove end-of-line numbers from MSK144 decodes
|
||||||
|
- Finish MSK144 encoding/decoding for Sh msgs and nonstandard calls
|
||||||
|
- Halt Tx before resetting power after Tune
|
||||||
|
- Auto update of LoTW info, and faster program startup
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0-rc2
|
||||||
|
September 25, 2018
|
||||||
|
-----------------------
|
||||||
|
Changes from WSJT-X Version 2.0.0-rc1 include the following:
|
||||||
|
|
||||||
|
- Corrected a flaw that encoded a message's first callsign as
|
||||||
|
hexadecimal telemetry data if the call consisted only of letters
|
||||||
|
A-F and digits 0-9.
|
||||||
|
|
||||||
|
- Corrected program logic that failed to identify certain callsigns
|
||||||
|
as "nonstandard".
|
||||||
|
|
||||||
|
- Fixed a bug that color-highlighted bare CQ messages (no grid
|
||||||
|
locator) as "New DXCC".
|
||||||
|
|
||||||
|
- Fixed a bug that failed to log Report Sent if MyCall is a
|
||||||
|
nonstandard call.
|
||||||
|
|
||||||
|
- Fixed a bug that generated incorrect MSK144 tones for certain
|
||||||
|
messages and caused a "memory" effect on stations receiving the
|
||||||
|
incorrect tones.
|
||||||
|
|
||||||
|
- Fixed several bugs that could cause certain Tx messages to crash
|
||||||
|
the program.
|
||||||
|
|
||||||
|
- Suppressed the display of certain illogical false decodes.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0-rc1
|
||||||
|
September 17, 2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
This is the first candidate release on WSJT-X 2.0, intended for
|
||||||
|
beta-level testing. For details see:
|
||||||
|
|
||||||
|
http://physics.princeton.edu/pulsar/k1jt/New_Features_WSJT-X_2.0.txt
|
||||||
|
http://physics.princeton.edu/pulsar/k1jt/Quick_Start_WSJT-X_2.0.pdf
|
||||||
|
http://physics.princeton.edu/pulsar/k1jt/77bit.txt
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X Version 1.9.1
|
Release: WSJT-X Version 1.9.1
|
||||||
|
@ -186,16 +186,26 @@
|
|||||||
* back a .WAV file.
|
* back a .WAV file.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Clear Out 3 quint32
|
* Clear Out/In 3 quint32
|
||||||
* Id (unique key) utf8
|
* Id (unique key) utf8
|
||||||
|
* Window quint8 (In only)
|
||||||
*
|
*
|
||||||
* This message is send when all prior "Decode" messages in the
|
* This message is send when all prior "Decode" messages in the
|
||||||
* "Band activity" window have been discarded and therefore are
|
* "Band Activity" window have been discarded and therefore are
|
||||||
* no long available for actioning with a "Reply" message. It is
|
* no long available for actioning with a "Reply" message. It is
|
||||||
* sent when the user erases the "Band activity" window and when
|
* sent when the user erases the "Band activity" window and when
|
||||||
* WSJT-X closes down normally. The server should discard all
|
* WSJT-X closes down normally. The server should discard all
|
||||||
* decode messages upon receipt of this message.
|
* decode messages upon receipt of this message.
|
||||||
*
|
*
|
||||||
|
* It may also be sent to a WSJT-X instance in which case it
|
||||||
|
* clears one or both of the "Band Activity" and "Rx Frequency"
|
||||||
|
* windows. The Window argument can be one of the following
|
||||||
|
* values:
|
||||||
|
*
|
||||||
|
* 0 - clear the "Band Activity" window (default)
|
||||||
|
* 1 - clear the "Rx Frequency" window
|
||||||
|
* 2 - clear both "Band Activity" and "Rx Frequency" windows
|
||||||
|
*
|
||||||
*
|
*
|
||||||
* Reply In 4 quint32
|
* Reply In 4 quint32
|
||||||
* Id (target unique key) utf8
|
* Id (target unique key) utf8
|
||||||
|
@ -10,7 +10,61 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Copyright 2001 - 2018 by Joe Taylor, K1JT.
|
Copyright 2001 - 2019 by Joe Taylor, K1JT.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.0.1
|
||||||
|
February 25, 2019
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
WSJT-X 2.0.1 is a bug fix release including the following defect
|
||||||
|
repairs reported since the v2.0.0 GA release.
|
||||||
|
|
||||||
|
- Remove startup message about importance of upgrading to v2.0.
|
||||||
|
- Relax ADIF log file parsing to allow garbage between records and
|
||||||
|
records with no DX callsign
|
||||||
|
- Fix bug that prevented retention of power and comments in
|
||||||
|
Log QSO window
|
||||||
|
- Updates to User Guide
|
||||||
|
- MSK144 frequency defaults to 50.260 in IARU Regions 2 and 3
|
||||||
|
- Remove hexadecimal RGB values from color-configuration panel
|
||||||
|
- Fix a bounds error by not executing Fox-related code when not
|
||||||
|
in Fox mode
|
||||||
|
- Allow the logQSO dialog to modify "Exch Sent" or "Rcvd" when
|
||||||
|
operating in RTTY or NA VHF Contest mode, and to have any
|
||||||
|
changes flow through to N1MM Logger.
|
||||||
|
- Fix several problems in handling hashed callsigns
|
||||||
|
- More rigorous quality checking of WSPR decodes from the OSD algorithm
|
||||||
|
- Fix bug that prevented recevied signal reports from
|
||||||
|
compound callsigns to be logged
|
||||||
|
- Improved recognition of callsigns with /P or /R suffixes
|
||||||
|
- Do not waste time trying AP decoding of nonstandard callsigns
|
||||||
|
- Make OSD decoding work with WSPR "type 2" messages
|
||||||
|
- Retain in Tx6 message field any CQ messages like
|
||||||
|
"CQ xxxx K1ABC FN42", where xxxx is 1-4 letters or 1-3 digits
|
||||||
|
- Optional key bindings for F1 through F5, especially for contest use
|
||||||
|
- Include grid in Tx1 messages with hashed callsign, for example
|
||||||
|
"<DF2018ARDF> K1ABC FN42"
|
||||||
|
- Better formatting for the files ALL.TXT and ALL_WSPR.TXT
|
||||||
|
- Correct a flaw in validating contest exchange data when logging
|
||||||
|
- Option to always start new decode periods at top of Band
|
||||||
|
Activity window
|
||||||
|
- New command "Erase WSPR hashtable" on the File menu
|
||||||
|
- Improved validation for ARRL RTTY RU and FD exchange fields
|
||||||
|
- UDP Reference applications join a multicast group on all available
|
||||||
|
multicast capable network interfaces
|
||||||
|
- Minor code changes to support Qt versions >=5.10
|
||||||
|
- Changes to support x64 Windows builds in preparation for Qt v5.12
|
||||||
|
- Add "ADIF Export ..." to Fox Log's contextual popup menu
|
||||||
|
- Use ARRL-required names for VHF+ bands in exported Cabrillo log
|
||||||
|
- New utility program rigctlcom-wsjtx (from Hamlib)
|
||||||
|
- Remove temporary FT8 working frequencies from default frequency list
|
||||||
|
- UDP protocol's Clear (3) message is made two-way, for better
|
||||||
|
communication with DX Lab Suite applications
|
||||||
|
- Reset QSO start time when aborting a QSO or clearing messages by ESC
|
||||||
|
or F4
|
||||||
|
- Correct a logging issue in Fox's ADIF log when Fox sends RR73 to more
|
||||||
|
than one Hound in the same Tx sequence.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.0
|
Release: WSJT-X 2.0
|
||||||
December 10, 2018
|
December 10, 2018
|
||||||
|
@ -121,7 +121,7 @@ void BeaconsModel::add_beacon_spot (bool is_new, QString const& client_id, QTime
|
|||||||
appendRow (make_row (client_id, time, snr, delta_time, frequency, drift, callsign, grid, power, off_air));
|
appendRow (make_row (client_id, time, snr, delta_time, frequency, drift, callsign, grid, power, off_air));
|
||||||
}
|
}
|
||||||
|
|
||||||
void BeaconsModel::clear_decodes (QString const& client_id)
|
void BeaconsModel::decodes_cleared (QString const& client_id)
|
||||||
{
|
{
|
||||||
for (auto row = rowCount () - 1; row >= 0; --row)
|
for (auto row = rowCount () - 1; row >= 0; --row)
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@ public:
|
|||||||
Q_SLOT void add_beacon_spot (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time
|
Q_SLOT void add_beacon_spot (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time
|
||||||
, Frequency frequency, qint32 drift, QString const& callsign, QString const& grid
|
, Frequency frequency, qint32 drift, QString const& callsign, QString const& grid
|
||||||
, qint32 power, bool off_air);
|
, qint32 power, bool off_air);
|
||||||
Q_SLOT void clear_decodes (QString const& client_id);
|
Q_SLOT void decodes_cleared (QString const& client_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
|
#include <QAction>
|
||||||
|
|
||||||
#include "validators/MaidenheadLocatorValidator.hpp"
|
#include "validators/MaidenheadLocatorValidator.hpp"
|
||||||
|
|
||||||
@ -120,6 +121,9 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod
|
|||||||
, id_ {id}
|
, id_ {id}
|
||||||
, calls_of_interest_ {calls_of_interest}
|
, calls_of_interest_ {calls_of_interest}
|
||||||
, decodes_proxy_model_ {id_}
|
, decodes_proxy_model_ {id_}
|
||||||
|
, erase_action_ {new QAction {tr ("&Erase Band Activity"), this}}
|
||||||
|
, erase_rx_frequency_action_ {new QAction {tr ("Erase &Rx Frequency"), this}}
|
||||||
|
, erase_both_action_ {new QAction {tr ("Erase &Both"), this}}
|
||||||
, decodes_table_view_ {new QTableView}
|
, decodes_table_view_ {new QTableView}
|
||||||
, beacons_table_view_ {new QTableView}
|
, beacons_table_view_ {new QTableView}
|
||||||
, message_line_edit_ {new QLineEdit}
|
, message_line_edit_ {new QLineEdit}
|
||||||
@ -143,6 +147,10 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod
|
|||||||
decodes_table_view_->verticalHeader ()->hide ();
|
decodes_table_view_->verticalHeader ()->hide ();
|
||||||
decodes_table_view_->hideColumn (0);
|
decodes_table_view_->hideColumn (0);
|
||||||
decodes_table_view_->horizontalHeader ()->setStretchLastSection (true);
|
decodes_table_view_->horizontalHeader ()->setStretchLastSection (true);
|
||||||
|
decodes_table_view_->setContextMenuPolicy (Qt::ActionsContextMenu);
|
||||||
|
decodes_table_view_->insertAction (nullptr, erase_action_);
|
||||||
|
decodes_table_view_->insertAction (nullptr, erase_rx_frequency_action_);
|
||||||
|
decodes_table_view_->insertAction (nullptr, erase_both_action_);
|
||||||
|
|
||||||
auto form_layout = new QFormLayout;
|
auto form_layout = new QFormLayout;
|
||||||
form_layout->addRow (tr ("Free text:"), message_line_edit_);
|
form_layout->addRow (tr ("Free text:"), message_line_edit_);
|
||||||
@ -171,6 +179,8 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod
|
|||||||
beacons_table_view_->verticalHeader ()->hide ();
|
beacons_table_view_->verticalHeader ()->hide ();
|
||||||
beacons_table_view_->hideColumn (0);
|
beacons_table_view_->hideColumn (0);
|
||||||
beacons_table_view_->horizontalHeader ()->setStretchLastSection (true);
|
beacons_table_view_->horizontalHeader ()->setStretchLastSection (true);
|
||||||
|
beacons_table_view_->setContextMenuPolicy (Qt::ActionsContextMenu);
|
||||||
|
beacons_table_view_->insertAction (nullptr, erase_action_);
|
||||||
|
|
||||||
auto beacons_page = new QWidget;
|
auto beacons_page = new QWidget;
|
||||||
auto beacons_layout = new QVBoxLayout {beacons_page};
|
auto beacons_layout = new QVBoxLayout {beacons_page};
|
||||||
@ -219,8 +229,19 @@ ClientWidget::ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemMod
|
|||||||
setAllowedAreas (Qt::BottomDockWidgetArea);
|
setAllowedAreas (Qt::BottomDockWidgetArea);
|
||||||
setFloating (true);
|
setFloating (true);
|
||||||
|
|
||||||
|
// connect context menu actions
|
||||||
|
connect (erase_action_, &QAction::triggered, [this] (bool /*checked*/) {
|
||||||
|
Q_EMIT do_clear_decodes (id_);
|
||||||
|
});
|
||||||
|
connect (erase_rx_frequency_action_, &QAction::triggered, [this] (bool /*checked*/) {
|
||||||
|
Q_EMIT do_clear_decodes (id_, 1);
|
||||||
|
});
|
||||||
|
connect (erase_both_action_, &QAction::triggered, [this] (bool /*checked*/) {
|
||||||
|
Q_EMIT do_clear_decodes (id_, 2);
|
||||||
|
});
|
||||||
|
|
||||||
// connect up table view signals
|
// connect up table view signals
|
||||||
connect (decodes_table_view_, &QTableView::doubleClicked, this, [this] (QModelIndex const& index) {
|
connect (decodes_table_view_, &QTableView::doubleClicked, [this] (QModelIndex const& index) {
|
||||||
Q_EMIT do_reply (decodes_proxy_model_.mapToSource (index), QApplication::keyboardModifiers () >> 24);
|
Q_EMIT do_reply (decodes_proxy_model_.mapToSource (index), QApplication::keyboardModifiers () >> 24);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -313,7 +334,7 @@ void ClientWidget::beacon_spot_added (bool /*is_new*/, QString const& client_id,
|
|||||||
beacons_table_view_->scrollToBottom ();
|
beacons_table_view_->scrollToBottom ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientWidget::clear_decodes (QString const& client_id)
|
void ClientWidget::decodes_cleared (QString const& client_id)
|
||||||
{
|
{
|
||||||
if (client_id == id_)
|
if (client_id == id_)
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
class QAbstractItemModel;
|
class QAbstractItemModel;
|
||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
class QColor;
|
class QColor;
|
||||||
|
class QAction;
|
||||||
|
|
||||||
using Frequency = MessageServer::Frequency;
|
using Frequency = MessageServer::Frequency;
|
||||||
|
|
||||||
@ -41,8 +42,9 @@ public:
|
|||||||
, float delta_time, Frequency delta_frequency, qint32 drift
|
, float delta_time, Frequency delta_frequency, qint32 drift
|
||||||
, QString const& callsign, QString const& grid, qint32 power
|
, QString const& callsign, QString const& grid, qint32 power
|
||||||
, bool off_air);
|
, bool off_air);
|
||||||
Q_SLOT void clear_decodes (QString const& client_id);
|
Q_SLOT void decodes_cleared (QString const& client_id);
|
||||||
|
|
||||||
|
Q_SIGNAL void do_clear_decodes (QString const& id, quint8 window = 0);
|
||||||
Q_SIGNAL void do_reply (QModelIndex const&, quint8 modifier);
|
Q_SIGNAL void do_reply (QModelIndex const&, quint8 modifier);
|
||||||
Q_SIGNAL void do_halt_tx (QString const& id, bool auto_only);
|
Q_SIGNAL void do_halt_tx (QString const& id, bool auto_only);
|
||||||
Q_SIGNAL void do_free_text (QString const& id, QString const& text, bool);
|
Q_SIGNAL void do_free_text (QString const& id, QString const& text, bool);
|
||||||
@ -74,6 +76,9 @@ private:
|
|||||||
QRegularExpression base_call_re_;
|
QRegularExpression base_call_re_;
|
||||||
int rx_df_;
|
int rx_df_;
|
||||||
} decodes_proxy_model_;
|
} decodes_proxy_model_;
|
||||||
|
QAction * erase_action_;
|
||||||
|
QAction * erase_rx_frequency_action_;
|
||||||
|
QAction * erase_both_action_;
|
||||||
QTableView * decodes_table_view_;
|
QTableView * decodes_table_view_;
|
||||||
QTableView * beacons_table_view_;
|
QTableView * beacons_table_view_;
|
||||||
QLineEdit * message_line_edit_;
|
QLineEdit * message_line_edit_;
|
||||||
|
@ -125,7 +125,7 @@ void DecodesModel::add_decode (bool is_new, QString const& client_id, QTime time
|
|||||||
, off_air, is_fast));
|
, off_air, is_fast));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DecodesModel::clear_decodes (QString const& client_id)
|
void DecodesModel::decodes_cleared (QString const& client_id)
|
||||||
{
|
{
|
||||||
for (auto row = rowCount () - 1; row >= 0; --row)
|
for (auto row = rowCount () - 1; row >= 0; --row)
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
Q_SLOT void add_decode (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time
|
Q_SLOT void add_decode (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time
|
||||||
, quint32 delta_frequency, QString const& mode, QString const& message
|
, quint32 delta_frequency, QString const& mode, QString const& message
|
||||||
, bool low_confidence, bool off_air, bool is_fast);
|
, bool low_confidence, bool off_air, bool is_fast);
|
||||||
Q_SLOT void clear_decodes (QString const& client_id);
|
Q_SLOT void decodes_cleared (QString const& client_id);
|
||||||
Q_SLOT void do_reply (QModelIndex const& source, quint8 modifiers);
|
Q_SLOT void do_reply (QModelIndex const& source, quint8 modifiers);
|
||||||
|
|
||||||
Q_SIGNAL void reply (QString const& id, QTime time, qint32 snr, float delta_time, quint32 delta_frequency
|
Q_SIGNAL void reply (QString const& id, QTime time, qint32 snr, float delta_time, quint32 delta_frequency
|
||||||
|
@ -181,8 +181,8 @@ MessageAggregatorMainWindow::MessageAggregatorMainWindow ()
|
|||||||
});
|
});
|
||||||
connect (server_, &MessageServer::client_opened, this, &MessageAggregatorMainWindow::add_client);
|
connect (server_, &MessageServer::client_opened, this, &MessageAggregatorMainWindow::add_client);
|
||||||
connect (server_, &MessageServer::client_closed, this, &MessageAggregatorMainWindow::remove_client);
|
connect (server_, &MessageServer::client_closed, this, &MessageAggregatorMainWindow::remove_client);
|
||||||
connect (server_, &MessageServer::client_closed, decodes_model_, &DecodesModel::clear_decodes);
|
connect (server_, &MessageServer::client_closed, decodes_model_, &DecodesModel::decodes_cleared);
|
||||||
connect (server_, &MessageServer::client_closed, beacons_model_, &BeaconsModel::clear_decodes);
|
connect (server_, &MessageServer::client_closed, beacons_model_, &BeaconsModel::decodes_cleared);
|
||||||
connect (server_, &MessageServer::decode, [this] (bool is_new, QString const& id, QTime time
|
connect (server_, &MessageServer::decode, [this] (bool is_new, QString const& id, QTime time
|
||||||
, qint32 snr, float delta_time
|
, qint32 snr, float delta_time
|
||||||
, quint32 delta_frequency, QString const& mode
|
, quint32 delta_frequency, QString const& mode
|
||||||
@ -191,8 +191,8 @@ MessageAggregatorMainWindow::MessageAggregatorMainWindow ()
|
|||||||
decodes_model_->add_decode (is_new, id, time, snr, delta_time, delta_frequency, mode, message
|
decodes_model_->add_decode (is_new, id, time, snr, delta_time, delta_frequency, mode, message
|
||||||
, low_confidence, off_air, dock_widgets_[id]->fast_mode ());});
|
, low_confidence, off_air, dock_widgets_[id]->fast_mode ());});
|
||||||
connect (server_, &MessageServer::WSPR_decode, beacons_model_, &BeaconsModel::add_beacon_spot);
|
connect (server_, &MessageServer::WSPR_decode, beacons_model_, &BeaconsModel::add_beacon_spot);
|
||||||
connect (server_, &MessageServer::clear_decodes, decodes_model_, &DecodesModel::clear_decodes);
|
connect (server_, &MessageServer::decodes_cleared, decodes_model_, &DecodesModel::decodes_cleared);
|
||||||
connect (server_, &MessageServer::clear_decodes, beacons_model_, &BeaconsModel::clear_decodes);
|
connect (server_, &MessageServer::decodes_cleared, beacons_model_, &BeaconsModel::decodes_cleared);
|
||||||
connect (decodes_model_, &DecodesModel::reply, server_, &MessageServer::reply);
|
connect (decodes_model_, &DecodesModel::reply, server_, &MessageServer::reply);
|
||||||
|
|
||||||
// UI behaviour
|
// UI behaviour
|
||||||
@ -248,7 +248,8 @@ void MessageAggregatorMainWindow::add_client (QString const& id, QString const&
|
|||||||
connect (server_, &MessageServer::status_update, dock, &ClientWidget::update_status);
|
connect (server_, &MessageServer::status_update, dock, &ClientWidget::update_status);
|
||||||
connect (server_, &MessageServer::decode, dock, &ClientWidget::decode_added);
|
connect (server_, &MessageServer::decode, dock, &ClientWidget::decode_added);
|
||||||
connect (server_, &MessageServer::WSPR_decode, dock, &ClientWidget::beacon_spot_added);
|
connect (server_, &MessageServer::WSPR_decode, dock, &ClientWidget::beacon_spot_added);
|
||||||
connect (server_, &MessageServer::clear_decodes, dock, &ClientWidget::clear_decodes);
|
connect (server_, &MessageServer::decodes_cleared, dock, &ClientWidget::decodes_cleared);
|
||||||
|
connect (dock, &ClientWidget::do_clear_decodes, server_, &MessageServer::clear_decodes);
|
||||||
connect (dock, &ClientWidget::do_reply, decodes_model_, &DecodesModel::do_reply);
|
connect (dock, &ClientWidget::do_reply, decodes_model_, &DecodesModel::do_reply);
|
||||||
connect (dock, &ClientWidget::do_halt_tx, server_, &MessageServer::halt_tx);
|
connect (dock, &ClientWidget::do_halt_tx, server_, &MessageServer::halt_tx);
|
||||||
connect (dock, &ClientWidget::do_free_text, server_, &MessageServer::free_text);
|
connect (dock, &ClientWidget::do_free_text, server_, &MessageServer::free_text);
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
subroutine chkcrc13a(decoded,nbadcrc)
|
subroutine chkcrc13a(decoded,nbadcrc)
|
||||||
|
|
||||||
use crc
|
use crc
|
||||||
integer*1 decoded(90)
|
integer*1 decoded(90)
|
||||||
integer*1, target:: i1Dec8BitBytes(12)
|
integer*1, target:: i1Dec8BitBytes(12)
|
||||||
character*90 cbits
|
character*90 cbits
|
||||||
|
|
||||||
! Write decoded bits into cbits: 77-bit message plus 13-bit CRC
|
! Write decoded bits into cbits: 77-bit message plus 13-bit CRC
|
||||||
write(cbits,1000) decoded
|
write(cbits,1000) decoded
|
||||||
1000 format(90i1)
|
1000 format(90i1)
|
||||||
read(cbits,1001) i1Dec8BitBytes
|
read(cbits,1001) i1Dec8BitBytes
|
||||||
1001 format(12b8)
|
1001 format(12b8)
|
||||||
read(cbits,1002) ncrc13 !Received CRC13
|
read(cbits,1002) ncrc13 !Received CRC13
|
||||||
1002 format(77x,b13)
|
1002 format(77x,b13)
|
||||||
|
|
||||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32+16+8)
|
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),transfer(128+64+32+16+8,0_1))
|
||||||
i1Dec8BitBytes(11:12)=0
|
i1Dec8BitBytes(11:12)=0
|
||||||
icrc13=crc13(c_loc(i1Dec8BitBytes),12) !CRC13 computed from 77 msg bits
|
icrc13=crc13(c_loc(i1Dec8BitBytes),12) !CRC13 computed from 77 msg bits
|
||||||
|
|
||||||
nbadcrc=1
|
nbadcrc=1
|
||||||
if(ncrc13.eq.icrc13) nbadcrc=0
|
if(ncrc13.eq.icrc13) nbadcrc=0
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine chkcrc13a
|
end subroutine chkcrc13a
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
subroutine chkcrc14a(decoded,nbadcrc)
|
subroutine chkcrc14a(decoded,nbadcrc)
|
||||||
|
|
||||||
use crc
|
use crc
|
||||||
integer*1 decoded(91)
|
integer*1 decoded(91)
|
||||||
integer*1, target:: i1Dec8BitBytes(12)
|
integer*1, target:: i1Dec8BitBytes(12)
|
||||||
character*91 cbits
|
character*91 cbits
|
||||||
|
|
||||||
! Write decoded bits into cbits: 77-bit message plus 14-bit CRC
|
! Write decoded bits into cbits: 77-bit message plus 14-bit CRC
|
||||||
write(cbits,1000) decoded
|
write(cbits,1000) decoded
|
||||||
1000 format(91i1)
|
1000 format(91i1)
|
||||||
read(cbits,1001) i1Dec8BitBytes
|
read(cbits,1001) i1Dec8BitBytes
|
||||||
1001 format(12b8)
|
1001 format(12b8)
|
||||||
read(cbits,1002) ncrc14 !Received CRC14
|
read(cbits,1002) ncrc14 !Received CRC14
|
||||||
1002 format(77x,b14)
|
1002 format(77x,b14)
|
||||||
|
|
||||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32+16+8)
|
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),transfer(128+64+32+16+8,0_1))
|
||||||
i1Dec8BitBytes(11:12)=0
|
i1Dec8BitBytes(11:12)=0
|
||||||
icrc14=crc14(c_loc(i1Dec8BitBytes),12) !CRC14 computed from 77 msg bits
|
icrc14=crc14(c_loc(i1Dec8BitBytes),12) !CRC14 computed from 77 msg bits
|
||||||
|
|
||||||
nbadcrc=1
|
nbadcrc=1
|
||||||
if(ncrc14.eq.icrc14) nbadcrc=0
|
if(ncrc14.eq.icrc14) nbadcrc=0
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine chkcrc14a
|
end subroutine chkcrc14a
|
||||||
|
@ -17,7 +17,7 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
|
|||||||
read(cbits,1002) ncrc12 !Received CRC12
|
read(cbits,1002) ncrc12 !Received CRC12
|
||||||
1002 format(75x,b12)
|
1002 format(75x,b12)
|
||||||
|
|
||||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
|
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),transfer(128+64+32,0_1))
|
||||||
i1Dec8BitBytes(11)=0
|
i1Dec8BitBytes(11)=0
|
||||||
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
|
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
|
|||||||
do ibyte=1,12
|
do ibyte=1,12
|
||||||
itmp=0
|
itmp=0
|
||||||
do ibit=1,6
|
do ibit=1,6
|
||||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*6+ibit))
|
itmp=ishft(itmp,1)+iand(1_1,decoded((ibyte-1)*6+ibit))
|
||||||
enddo
|
enddo
|
||||||
i4Dec6BitWords(ibyte)=itmp
|
i4Dec6BitWords(ibyte)=itmp
|
||||||
enddo
|
enddo
|
||||||
|
@ -17,7 +17,7 @@ subroutine extractmessage174_91(decoded,msgreceived,ncrcflag)
|
|||||||
read(cbits,1002) ncrc14 !Received CRC12
|
read(cbits,1002) ncrc14 !Received CRC12
|
||||||
1002 format(77x,b14)
|
1002 format(77x,b14)
|
||||||
|
|
||||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32+16+8)
|
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),transfer(128+64+32+16+8,0_1))
|
||||||
i1Dec8BitBytes(11:12)=0
|
i1Dec8BitBytes(11:12)=0
|
||||||
icrc14=crc14(c_loc(i1Dec8BitBytes),12) !CRC12 computed from 75 msg bits
|
icrc14=crc14(c_loc(i1Dec8BitBytes),12) !CRC12 computed from 75 msg bits
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ subroutine extractmessage174_91(decoded,msgreceived,ncrcflag)
|
|||||||
do ibyte=1,12
|
do ibyte=1,12
|
||||||
itmp=0
|
itmp=0
|
||||||
do ibit=1,6
|
do ibit=1,6
|
||||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*6+ibit))
|
itmp=ishft(itmp,1)+iand(1_1,decoded((ibyte-1)*6+ibit))
|
||||||
enddo
|
enddo
|
||||||
i4Dec6BitWords(ibyte)=itmp
|
i4Dec6BitWords(ibyte)=itmp
|
||||||
enddo
|
enddo
|
||||||
|
@ -128,7 +128,7 @@ subroutine msk40decodeframe(c,mycall,hiscall,xsnr,bswl,nhasharray, &
|
|||||||
|
|
||||||
imsg=0
|
imsg=0
|
||||||
do i=1,16
|
do i=1,16
|
||||||
imsg=ishft(imsg,1)+iand(1,decoded(17-i))
|
imsg=ishft(imsg,1)+iand(1_1,decoded(17-i))
|
||||||
enddo
|
enddo
|
||||||
nrxrpt=iand(imsg,15)
|
nrxrpt=iand(imsg,15)
|
||||||
nrxhash=(imsg-nrxrpt)/16
|
nrxhash=(imsg-nrxrpt)/16
|
||||||
|
@ -4,6 +4,7 @@ set (ASCIIDOC_MANS
|
|||||||
man1/jt65code.1.txt
|
man1/jt65code.1.txt
|
||||||
man1/rigctl-wsjtx.1.txt
|
man1/rigctl-wsjtx.1.txt
|
||||||
man1/rigctld-wsjtx.1.txt
|
man1/rigctld-wsjtx.1.txt
|
||||||
|
man1/rigctlcom-wsjtx.1.txt
|
||||||
man1/message_aggregator.1.txt
|
man1/message_aggregator.1.txt
|
||||||
man1/udp_daemon.1.txt
|
man1/udp_daemon.1.txt
|
||||||
)
|
)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
== NAME
|
== NAME
|
||||||
|
|
||||||
rigctl-wsjtx - Hamlib 3 rigctld server.
|
rigctl-wsjtx - Hamlib 4 rigctld server.
|
||||||
|
|
||||||
== SYNOPSIS
|
== SYNOPSIS
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ rigctl-wsjtx - Hamlib 3 rigctld server.
|
|||||||
== DESCRIPTION
|
== DESCRIPTION
|
||||||
|
|
||||||
*wsjtx* uses a version of the *hamlib* CAT control library. This
|
*wsjtx* uses a version of the *hamlib* CAT control library. This
|
||||||
library is heavily modified over the current release version of
|
library is virtually identical to the the current release version of
|
||||||
*hamlib*. If a *wsjtx* user wishes to use the *hamlib* network rig
|
*hamlib*. If a *wsjtx* user wishes to use the *hamlib* network rig
|
||||||
server *rigctld* to remotely control their transceiver; then this
|
server *rigctld* to remotely control their transceiver; then this
|
||||||
special version of the *rigctl* client should be used since that too
|
special version of the *rigctl* client should be used since that too
|
||||||
|
30
manpages/man1/rigctlcom-wsjtx.1.txt
Normal file
30
manpages/man1/rigctlcom-wsjtx.1.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
:doctype: manpage
|
||||||
|
:man source: AsciiDoc
|
||||||
|
:man version: {revnumber}
|
||||||
|
:man manual: WSJT-X Manual
|
||||||
|
= rigctlcom-wsjtx(1)
|
||||||
|
|
||||||
|
== NAME
|
||||||
|
|
||||||
|
rigctlcom-wsjtx - Hamlib 4 rigctlcom Serial port passthru Kenwood TS-2000 emulator.
|
||||||
|
|
||||||
|
== SYNOPSIS
|
||||||
|
|
||||||
|
*rigctlcom-wsjtx* [OPTIONS]
|
||||||
|
|
||||||
|
== DESCRIPTION
|
||||||
|
|
||||||
|
*wsjtx* uses a version of the *hamlib* CAT control library. This
|
||||||
|
library is virtually identical to the current release version of
|
||||||
|
*hamlib*. If a *wsjtx* user wishes to use the *hamlib* TS-2000
|
||||||
|
emulator *rigctlcom* to allow CAT applications that do not talk to
|
||||||
|
*hamlib* to share CAT control control their transceiver; then this
|
||||||
|
special version of *rigctlcom* should be used since that too has the
|
||||||
|
modified *hamlib* code embedded with it.
|
||||||
|
|
||||||
|
WSJT-X home page:: http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html
|
||||||
|
|
||||||
|
WSJT-X User's Guide:: http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjtx-main-toc2.html
|
||||||
|
|
||||||
|
== OPTIONS
|
||||||
|
Refer to the *hamlib* documentation.
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
== NAME
|
== NAME
|
||||||
|
|
||||||
rigctld-wsjtx - Hamlib 3 rigctld server.
|
rigctld-wsjtx - Hamlib 4 rigctld server.
|
||||||
|
|
||||||
== SYNOPSIS
|
== SYNOPSIS
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ rigctld-wsjtx - Hamlib 3 rigctld server.
|
|||||||
== DESCRIPTION
|
== DESCRIPTION
|
||||||
|
|
||||||
*wsjtx* uses a version of the *hamlib* CAT control library. This
|
*wsjtx* uses a version of the *hamlib* CAT control library. This
|
||||||
library is heavily modified over the current release version of
|
library is virtually identical to the current release version of
|
||||||
*hamlib*. If a *wsjtx* user wishes to use the *hamlib* network rig
|
*hamlib*. If a *wsjtx* user wishes to use the *hamlib* network rig
|
||||||
server *rigctld* to remotely control their transceiver; then this
|
server *rigctld* to remotely control their transceiver; then this
|
||||||
special version of *rigctld* should be used since that too has the
|
special version of *rigctld* should be used since that too has the
|
||||||
|
@ -21,6 +21,8 @@ class CabrilloLog::impl final
|
|||||||
public:
|
public:
|
||||||
impl (Configuration const *);
|
impl (Configuration const *);
|
||||||
|
|
||||||
|
QString cabrillo_frequency_string (Radio::Frequency frequency) const;
|
||||||
|
|
||||||
Configuration const * configuration_;
|
Configuration const * configuration_;
|
||||||
QSqlQuery mutable dupe_query_;
|
QSqlQuery mutable dupe_query_;
|
||||||
QSqlQuery mutable export_query_;
|
QSqlQuery mutable export_query_;
|
||||||
@ -46,10 +48,25 @@ CabrilloLog::impl::impl (Configuration const * configuration)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQL_error_check (dupe_query_, &QSqlQuery::prepare,
|
SQL_error_check (dupe_query_, &QSqlQuery::prepare,
|
||||||
"SELECT COUNT(*) FROM cabrillo_log WHERE call = :call AND band = :band");
|
"SELECT "
|
||||||
|
" COUNT(*) "
|
||||||
|
" FROM "
|
||||||
|
" cabrillo_log "
|
||||||
|
" WHERE "
|
||||||
|
" call = :call "
|
||||||
|
" AND band = :band");
|
||||||
|
|
||||||
SQL_error_check (export_query_, &QSqlQuery::prepare,
|
SQL_error_check (export_query_, &QSqlQuery::prepare,
|
||||||
"SELECT frequency, \"when\", exchange_sent, call, exchange_rcvd FROM cabrillo_log ORDER BY \"when\"");
|
"SELECT "
|
||||||
|
" frequency"
|
||||||
|
" , \"when\""
|
||||||
|
" , exchange_sent"
|
||||||
|
" , call"
|
||||||
|
" , exchange_rcvd"
|
||||||
|
" FROM "
|
||||||
|
" cabrillo_log "
|
||||||
|
" ORDER BY "
|
||||||
|
" \"when\"");
|
||||||
|
|
||||||
setEditStrategy (QSqlTableModel::OnFieldChange);
|
setEditStrategy (QSqlTableModel::OnFieldChange);
|
||||||
setTable ("cabrillo_log");
|
setTable ("cabrillo_log");
|
||||||
@ -68,6 +85,32 @@ CabrilloLog::impl::impl (Configuration const * configuration)
|
|||||||
SQL_error_check (*this, &QSqlTableModel::select);
|
SQL_error_check (*this, &QSqlTableModel::select);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// frequency here is in kHz
|
||||||
|
QString CabrilloLog::impl::cabrillo_frequency_string (Radio::Frequency frequency) const
|
||||||
|
{
|
||||||
|
QString result;
|
||||||
|
auto band = configuration_->bands ()->find (frequency * 1000ull);
|
||||||
|
if ("1mm" == band) result = "LIGHT";
|
||||||
|
else if ("2mm" == band) result = "241G";
|
||||||
|
else if ("2.5mm" == band) result = "134G";
|
||||||
|
else if ("4mm" == band) result = "75G";
|
||||||
|
else if ("6mm" == band) result = "47G";
|
||||||
|
else if ("1.25cm" == band) result = "24G";
|
||||||
|
else if ("3cm" == band) result = "10G";
|
||||||
|
else if ("6cm" == band) result = "5.7G";
|
||||||
|
else if ("9cm" == band) result = "3.4G";
|
||||||
|
else if ("13cm" == band) result = "2.3G";
|
||||||
|
else if ("23cm" == band) result = "1.2G";
|
||||||
|
else if ("33cm" == band) result = "902";
|
||||||
|
else if ("70cm" == band) result = "432";
|
||||||
|
else if ("1.25m" == band) result = "222";
|
||||||
|
else if ("2m" == band) result = "144";
|
||||||
|
else if ("4m" == band) result = "70";
|
||||||
|
else if ("6m" == band) result = "50";
|
||||||
|
else result = QString::number (frequency);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
CabrilloLog::CabrilloLog (Configuration const * configuration)
|
CabrilloLog::CabrilloLog (Configuration const * configuration)
|
||||||
: m_ {configuration}
|
: m_ {configuration}
|
||||||
{
|
{
|
||||||
@ -138,6 +181,8 @@ bool CabrilloLog::dupe (Frequency frequency, QString const& call) const
|
|||||||
|
|
||||||
void CabrilloLog::reset ()
|
void CabrilloLog::reset ()
|
||||||
{
|
{
|
||||||
|
// synchronize model
|
||||||
|
while (m_->canFetchMore ()) m_->fetchMore ();
|
||||||
if (m_->rowCount ())
|
if (m_->rowCount ())
|
||||||
{
|
{
|
||||||
m_->setEditStrategy (QSqlTableModel::OnManualSubmit);
|
m_->setEditStrategy (QSqlTableModel::OnManualSubmit);
|
||||||
@ -160,12 +205,10 @@ void CabrilloLog::export_qsos (QTextStream& stream) const
|
|||||||
auto rcvd_index = record.indexOf ("exchange_rcvd");
|
auto rcvd_index = record.indexOf ("exchange_rcvd");
|
||||||
while (m_->export_query_.next ())
|
while (m_->export_query_.next ())
|
||||||
{
|
{
|
||||||
auto frequency = m_->export_query_.value (frequency_index).value<Radio::Frequency> ();
|
|
||||||
auto my_call = m_->configuration_->my_callsign ();
|
auto my_call = m_->configuration_->my_callsign ();
|
||||||
frequency = frequency > 50000000ull ? frequency / 1000ull : frequency;
|
|
||||||
stream << QString {"QSO: %1 DG %2 %3 %4 %5 %6\n"}
|
stream << QString {"QSO: %1 DG %2 %3 %4 %5 %6\n"}
|
||||||
.arg (frequency, 5)
|
.arg (m_->cabrillo_frequency_string (m_->export_query_.value (frequency_index).value<Radio::Frequency> ()), 5)
|
||||||
.arg (QDateTime::fromMSecsSinceEpoch (m_->export_query_.value (when_index).toULongLong () * 1000ull, Qt::UTC).toString ("yyyy-MM-dd hhmm"))
|
.arg (QDateTime::fromMSecsSinceEpoch (m_->export_query_.value (when_index).toULongLong () * 1000ull, Qt::UTC).toString ("yyyy-MM-dd hhmm"))
|
||||||
.arg (my_call, -12)
|
.arg (my_call, -12)
|
||||||
.arg (m_->export_query_.value (sent_index).toString (), -13)
|
.arg (m_->export_query_.value (sent_index).toString (), -13)
|
||||||
.arg (m_->export_query_.value (call_index).toString (), -12)
|
.arg (m_->export_query_.value (call_index).toString (), -12)
|
||||||
|
@ -46,10 +46,26 @@ FoxLog::impl::impl (Configuration const * configuration)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQL_error_check (dupe_query_, &QSqlQuery::prepare,
|
SQL_error_check (dupe_query_, &QSqlQuery::prepare,
|
||||||
"SELECT COUNT(*) FROM fox_log WHERE call = :call AND band = :band");
|
"SELECT "
|
||||||
|
" COUNT(*) "
|
||||||
|
" FROM "
|
||||||
|
" fox_log "
|
||||||
|
" WHERE "
|
||||||
|
" call = :call "
|
||||||
|
" AND band = :band");
|
||||||
|
|
||||||
SQL_error_check (export_query_, &QSqlQuery::prepare,
|
SQL_error_check (export_query_, &QSqlQuery::prepare,
|
||||||
"SELECT band, \"when\", call, grid, report_sent, report_rcvd FROM fox_log ORDER BY \"when\"");
|
"SELECT "
|
||||||
|
" band"
|
||||||
|
" , \"when\""
|
||||||
|
" , call"
|
||||||
|
" , grid"
|
||||||
|
" , report_sent"
|
||||||
|
" , report_rcvd "
|
||||||
|
" FROM "
|
||||||
|
" fox_log "
|
||||||
|
" ORDER BY "
|
||||||
|
" \"when\"");
|
||||||
|
|
||||||
setEditStrategy (QSqlTableModel::OnFieldChange);
|
setEditStrategy (QSqlTableModel::OnFieldChange);
|
||||||
setTable ("fox_log");
|
setTable ("fox_log");
|
||||||
@ -141,6 +157,8 @@ bool FoxLog::dupe (QString const& call, QString const& band) const
|
|||||||
|
|
||||||
void FoxLog::reset ()
|
void FoxLog::reset ()
|
||||||
{
|
{
|
||||||
|
// synchronize model
|
||||||
|
while (m_->canFetchMore ()) m_->fetchMore ();
|
||||||
if (m_->rowCount ())
|
if (m_->rowCount ())
|
||||||
{
|
{
|
||||||
m_->setEditStrategy (QSqlTableModel::OnManualSubmit);
|
m_->setEditStrategy (QSqlTableModel::OnManualSubmit);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
set (SAMPLE_FILES
|
set (SAMPLE_FILES
|
||||||
FT8/170709_135615.wav
|
FT8/181201_180245.wav
|
||||||
ISCAT/ISCAT-A/VK7MO_110401_235515.wav
|
ISCAT/ISCAT-A/VK7MO_110401_235515.wav
|
||||||
ISCAT/ISCAT-B/K0AWU_100714_115000.wav
|
ISCAT/ISCAT-B/K0AWU_100714_115000.wav
|
||||||
JT4/JT4A/DF2ZC_070926_040700.WAV
|
JT4/JT4A/DF2ZC_070926_040700.WAV
|
||||||
@ -7,8 +7,8 @@ set (SAMPLE_FILES
|
|||||||
JT65/JT65B/DL7UAE_040308_002400.wav
|
JT65/JT65B/DL7UAE_040308_002400.wav
|
||||||
JT9+JT65/130610_2343.wav
|
JT9+JT65/130610_2343.wav
|
||||||
JT9/130418_1742.wav
|
JT9/130418_1742.wav
|
||||||
MSK144/160915_113100.wav
|
MSK144/181211_120500.wav
|
||||||
MSK144/160915_113230.wav
|
MSK144/181211_120800.wav
|
||||||
QRA64/QRA64C/161113_0111.wav
|
QRA64/QRA64C/161113_0111.wav
|
||||||
WSPR/150426_0918.wav
|
WSPR/150426_0918.wav
|
||||||
)
|
)
|
||||||
|
@ -18,7 +18,7 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
|
|||||||
+ " " + revision ()}.simplified () + "</h2><br />"
|
+ " " + revision ()}.simplified () + "</h2><br />"
|
||||||
"WSJT-X implements a number of digital modes designed for <br />"
|
"WSJT-X implements a number of digital modes designed for <br />"
|
||||||
"weak-signal Amateur Radio communication. <br /><br />"
|
"weak-signal Amateur Radio communication. <br /><br />"
|
||||||
"© 2001-2018 by Joe Taylor, K1JT, with grateful <br />"
|
"© 2001-2019 by Joe Taylor, K1JT, with grateful <br />"
|
||||||
"acknowledgment for contributions from AC6SL, AE4JY, <br />"
|
"acknowledgment for contributions from AC6SL, AE4JY, <br />"
|
||||||
"DJ0OT, G3WDG, G4KLA, G4WJS, IV3NWV, IW3RAB, K3WYC, K9AN, <br />"
|
"DJ0OT, G3WDG, G4KLA, G4WJS, IV3NWV, IW3RAB, K3WYC, K9AN, <br />"
|
||||||
"KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, <br />"
|
"KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, <br />"
|
||||||
|
@ -82,7 +82,6 @@ void DisplayText::setContentFont(QFont const& font)
|
|||||||
void DisplayText::mouseDoubleClickEvent(QMouseEvent *e)
|
void DisplayText::mouseDoubleClickEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
Q_EMIT selectCallsign(e->modifiers ());
|
Q_EMIT selectCallsign(e->modifiers ());
|
||||||
QTextEdit::mouseDoubleClickEvent(e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayText::insertLineSpacer(QString const& line)
|
void DisplayText::insertLineSpacer(QString const& line)
|
||||||
|
@ -44,10 +44,9 @@ public:
|
|||||||
Q_SLOT void erase ();
|
Q_SLOT void erase ();
|
||||||
Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only);
|
Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only);
|
||||||
|
|
||||||
protected:
|
|
||||||
void mouseDoubleClickEvent(QMouseEvent *e);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void mouseDoubleClickEvent (QMouseEvent *) override;
|
||||||
|
|
||||||
void extend_vertical_scrollbar (int min, int max);
|
void extend_vertical_scrollbar (int min, int max);
|
||||||
|
|
||||||
Configuration const * m_config;
|
Configuration const * m_config;
|
||||||
|
@ -504,6 +504,17 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Network message handlers
|
// Network message handlers
|
||||||
|
connect (m_messageClient, &MessageClient::clear_decodes, [this] (quint8 window) {
|
||||||
|
++window;
|
||||||
|
if (window & 1)
|
||||||
|
{
|
||||||
|
ui->decodedTextBrowser->erase ();
|
||||||
|
}
|
||||||
|
if (window & 2)
|
||||||
|
{
|
||||||
|
ui->decodedTextBrowser2->erase ();
|
||||||
|
}
|
||||||
|
});
|
||||||
connect (m_messageClient, &MessageClient::reply, this, &MainWindow::replyToCQ);
|
connect (m_messageClient, &MessageClient::reply, this, &MainWindow::replyToCQ);
|
||||||
connect (m_messageClient, &MessageClient::replay, this, &MainWindow::replayDecodes);
|
connect (m_messageClient, &MessageClient::replay, this, &MainWindow::replayDecodes);
|
||||||
connect (m_messageClient, &MessageClient::location, this, &MainWindow::locationChange);
|
connect (m_messageClient, &MessageClient::location, this, &MainWindow::locationChange);
|
||||||
@ -2449,7 +2460,7 @@ void MainWindow::on_actionCopyright_Notice_triggered()
|
|||||||
"\"The algorithms, source code, look-and-feel of WSJT-X and related "
|
"\"The algorithms, source code, look-and-feel of WSJT-X and related "
|
||||||
"programs, and protocol specifications for the modes FSK441, FT8, JT4, "
|
"programs, and protocol specifications for the modes FSK441, FT8, JT4, "
|
||||||
"JT6M, JT9, JT65, JTMS, QRA64, ISCAT, MSK144 are Copyright (C) "
|
"JT6M, JT9, JT65, JTMS, QRA64, ISCAT, 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.\"");
|
||||||
@ -3360,7 +3371,7 @@ void MainWindow::on_EraseButton_clicked ()
|
|||||||
|
|
||||||
void MainWindow::band_activity_cleared ()
|
void MainWindow::band_activity_cleared ()
|
||||||
{
|
{
|
||||||
m_messageClient->clear_decodes ();
|
m_messageClient->decodes_cleared ();
|
||||||
QFile f(m_config.temp_dir ().absoluteFilePath ("decoded.txt"));
|
QFile f(m_config.temp_dir ().absoluteFilePath ("decoded.txt"));
|
||||||
if(f.exists()) f.remove();
|
if(f.exists()) f.remove();
|
||||||
}
|
}
|
||||||
@ -5104,6 +5115,7 @@ void MainWindow::TxAgain()
|
|||||||
|
|
||||||
void MainWindow::clearDX ()
|
void MainWindow::clearDX ()
|
||||||
{
|
{
|
||||||
|
set_dateTimeQSO (-1);
|
||||||
if (m_QSOProgress != CALLING)
|
if (m_QSOProgress != CALLING)
|
||||||
{
|
{
|
||||||
auto_tx_mode (false);
|
auto_tx_mode (false);
|
||||||
@ -8389,7 +8401,7 @@ list2Done:
|
|||||||
{
|
{
|
||||||
writeFoxQSO (QString {" Log: %1 %2 %3 %4 %5"}.arg (m_hisCall).arg (m_hisGrid)
|
writeFoxQSO (QString {" Log: %1 %2 %3 %4 %5"}.arg (m_hisCall).arg (m_hisGrid)
|
||||||
.arg (m_rptSent).arg (m_rptRcvd).arg (m_lastBand));
|
.arg (m_rptSent).arg (m_rptRcvd).arg (m_lastBand));
|
||||||
on_logQSOButton_clicked();
|
on_logQSOButton_clicked ();
|
||||||
m_foxRateQueue.enqueue (now); //Add present time in seconds
|
m_foxRateQueue.enqueue (now); //Add present time in seconds
|
||||||
//to Rate queue.
|
//to Rate queue.
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user