mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-23 18:02:29 -04:00
Tagging the WSJT-X v2.3.1 release
-----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEUELwYiy7vDRM+hTD2GSwbR6BYY8FAmBMAVMACgkQ2GSwbR6B YY9zhQf+K8DgRh0q5bYBSQOaECDOYt3OY2DSRHAzOKLJIX25DJ1oKkj4BSiBcczG GNnNGefHWwDtDPJl5Vhu3mE8JsgVquEpl0r/V7Y7Zf+6dv+q/p6HCdwbBGHPQxJ7 VVdH/Q643aMIK2nb25hwSt4Z3aZSvABmqN636D5tL8nqyBCF58La/AlncvF7+Xc4 KOg7ll0RInkJh+2D11cTXtZn23+awtOSC2x5pkqSzQM6zCJ3yEb4OxzrjWmZKV5r 8I0pe5G1hNl/Ecy0Hm8GEQQIW7DooF/MFHkK4Z9x7R7lzG71R0AeuFc4QjbO1NS+ YeHeRaHvr2Fq2eFi7pZHqfc/O5WyiQ== =I/Tu -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEUELwYiy7vDRM+hTD2GSwbR6BYY8FAmBMp94ACgkQ2GSwbR6B YY/ycggAt7rjgs+32eO2fofGhyt4oBUs17oR6bKx34jSsOMqLrw+vJELsPphs3zi bhm5rIK0Fzrt/BVZMI8iSTawe32rqSw+YdJT9YPrHf8dyngYjxje/Rbhyv34cetH RLv89Ph8KNvFt7/NWZ2CfMPDmWnrFVFKb+Pu6CS0TKd2EA4ENyWyOLmZmSZvjjWQ hYcOWtIxf07Del2OucCZnuXpv9gW5RjobwM8jtGiaIwBLE+mkgBmcgTwPGiUCmUS D63L/5SspIkZcTjHU0sE2B0u40zOljJ7VTLShcY+BEtjTlPxLOVM8orzB3njryAc anM0IWb7UChalnVTOnLksnCvAcXKSg== =1ZRU -----END PGP SIGNATURE----- Merge tag 'wsjtx-2.3.1' into release-2.4.0 Tagging the WSJT-X v2.3.1 release
This commit is contained in:
commit
d4c4cd0e05
@ -1602,7 +1602,7 @@ install (DIRECTORY
|
||||
if (APPLE)
|
||||
install (FILES
|
||||
Darwin/ReadMe.txt
|
||||
Darwin/sysctl.conf
|
||||
Darwin/com.wsjtx.sysctl.plist
|
||||
DESTINATION .
|
||||
#COMPONENT runtime
|
||||
)
|
||||
|
@ -1,42 +1,21 @@
|
||||
Notes on WSJT-X Installation for Mac OS X
|
||||
-----------------------------------------
|
||||
|
||||
Important: If you are using the new Mac with the M1 chip then please read
|
||||
the section marked: BEGIN M1. Otherwise BEGIN INTEL applies.
|
||||
|
||||
If you have already downloaded a previous version of WSJT-X then I suggest
|
||||
you change the name in the Applications folder from WSJT-X to WSJT-X_previous
|
||||
before proceeding.
|
||||
|
||||
I recommend that you follow the installation instructions especially if you
|
||||
are moving from v2.2 to v2.3 of WSJT-X or you have upgraded macOS.
|
||||
|
||||
BEGIN M1:
|
||||
are moving from v2.2 to v2.3 or later, of WSJT-X or you have upgraded macOS.
|
||||
|
||||
Double-click on the wsjtx-...-Darwin.dmg file you have downloaded from K1JT's web-site.
|
||||
|
||||
Now open a Terminal window by going to Applications->Utilities and clicking on Terminal.
|
||||
|
||||
There are two system variables that must be set manually since the M1 Macs do not recognise
|
||||
automatic parameter settings by means of the sysctl.conf file present in the download.
|
||||
Type these commands - you will be asked for your password which will not be echoed:
|
||||
|
||||
sudo sysctl -w kern.sysv.shmmax=52428800
|
||||
sudo sysctl -w kern.sysv.shmall=25600
|
||||
|
||||
It is important to note that these parameter settings will not survive a reboot. If you
|
||||
need to reboot your Mac, then these commands must be re-entered. Now proceed to NEXT.
|
||||
|
||||
BEGIN INTEL:
|
||||
|
||||
Double-click on the wsjtx-...-Darwin.dmg file you have downloaded from K1JT's web-site.
|
||||
|
||||
Now open a Terminal window by going to Applications->Utilities and clicking on Terminal.
|
||||
|
||||
Along with this ReadMe file there is a file: sysctl.conf which must be copied to a
|
||||
Along with this ReadMe file there is a file: com.wsjtx.sysctl.plist which must be copied to a
|
||||
system area by typing this line in the Terminal window and then pressing the Return key.
|
||||
|
||||
sudo cp /Volumes/WSJT-X/sysctl.conf /etc
|
||||
sudo cp /Volumes/WSJT-X/com.wsjtx.sysctl.plist /Library/LaunchDaemons
|
||||
|
||||
you will be asked for your normal password because authorisation is needed to copy this file.
|
||||
(Your password will not be echoed but press the Return key when completed.)
|
||||
@ -53,8 +32,6 @@ You can now close the Terminal window. It will not be necessary to repeat this
|
||||
again, even when you download an updated version of WSJT-X. It might be necessary if you
|
||||
upgrade macOS.
|
||||
|
||||
NEXT:
|
||||
|
||||
Drag the WSJT-X app to your preferred location, such as Applications.
|
||||
|
||||
You need to configure your sound card. Visit Applications > Utilities > Audio MIDI
|
||||
@ -95,27 +72,22 @@ Please email me if you have problems.
|
||||
|
||||
--- John G4KLA (g4kla@rmnjmn.co.uk)
|
||||
|
||||
Addendum: Information about sysctl.conf and multiple instances of WSJT-X.
|
||||
Addendum: Information about com.wsjtx.sysctl.plist and multiple instances of WSJT-X.
|
||||
|
||||
WSJT-X makes use of a block of memory which is shared between different parts of
|
||||
the code. The normal allocation of shared memory on a Mac is insufficient and this
|
||||
has to be increased. The sysctl.conf file is used for this purpose. You can
|
||||
use a Mac editor to examine sysctl.conf. (Do not use another editor - the file
|
||||
has to be increased. The com.wsjtx.sysctl.plist file is used for this purpose. You can
|
||||
use a Mac editor to examine the file. (Do not use another editor - the file
|
||||
would probably be corrupted.)
|
||||
|
||||
It is possible to run two instances of WSJT-X simultaneously. See "Section 16.2
|
||||
Frequently asked Questions" in the User Guide. If you wish to run more than two instances
|
||||
simultaneously, the shmall parameter in the sysctl.conf file needs to be modified as follows.
|
||||
simultaneously, the shmall parameter in the com.wsjtx.sysctl.plist file needs to be modified as follows.
|
||||
|
||||
The shmall parameter determines the amount of shared memory which is allocated in 4096 byte pages
|
||||
with 50MB (52428800) required for each instance. The shmall parameter is calculated as:
|
||||
(n * 52428800)/4096 where 'n' is the number of instances required to run simultaneously. If
|
||||
you are using an Intel Mac, modify the shmall parameter in the sysctl.conf file using a Mac editor
|
||||
and then install in the /etc directory using the installation procedure described above for an
|
||||
Intel Mac. Remember to reboot your Mac afterwards.
|
||||
|
||||
If you are using an M1 Mac, then simply issue the sudo sysctl -w kern.sysv.shmall=xxx command where
|
||||
xxx is the new value of shmall that is required.
|
||||
(n * 52428800)/4096 where 'n' is the number of instances required to run simultaneously.
|
||||
Remember to reboot your Mac afterwards.
|
||||
|
||||
Note that the shmmax parameter remains unchanged. This is the maximum amount of shared memory that
|
||||
any one instance is allowed to request from the total shared memory allocation and should not
|
||||
|
18
Darwin/com.wsjtx.sysctl.plist
Normal file
18
Darwin/com.wsjtx.sysctl.plist
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>com.wsjtx.sysctl</string>
|
||||
<key>Program</key>
|
||||
<string>/usr/sbin/sysctl</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/usr/sbin/sysctl</string>
|
||||
<string>kern.sysv.shmmax=52428800</string>
|
||||
<string>kern.sysv.shmall=25600</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
@ -1,5 +0,0 @@
|
||||
kern.sysv.shmmax=52428800
|
||||
kern.sysv.shmmin=1
|
||||
kern.sysv.shmmni=128
|
||||
kern.sysv.shmseg=32
|
||||
kern.sysv.shmall=25600
|
@ -23,7 +23,7 @@ DecodedText::DecodedText (QString const& the_string)
|
||||
, is_standard_ {false}
|
||||
{
|
||||
// discard appended AP info
|
||||
clean_string_.replace (QRegularExpression {R"(^(.*)(?:(?:\?\s)?a[0-9].*)$)"}, "\\1");
|
||||
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?a[0-9].*$)"}, "\\1");
|
||||
|
||||
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
||||
if (message_.length() >= 1)
|
||||
|
@ -142,8 +142,8 @@ namespace Logger
|
||||
err += e.what ();
|
||||
// Since we cannot be sure of boost log state, output to cerr and cout.
|
||||
std::cerr << "ERROR: " << err << std::endl;
|
||||
std::cout << "ERROR: " << err << std::endl;
|
||||
LOG_ERROR (err);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
6
NEWS
6
NEWS
@ -63,7 +63,7 @@ the RC1 release.
|
||||
|
||||
|
||||
Release: WSJT-X 2.3.1
|
||||
Mar 8, 2021
|
||||
Mar 18, 2021
|
||||
---------------------
|
||||
|
||||
WSJT-X 2.3.1 General Availability release updates the User Guide to
|
||||
@ -96,6 +96,10 @@ below.
|
||||
- Repair a defect that could caused incorrect log entry fields when
|
||||
using FT4 mode and a priori (AP) decoding.
|
||||
|
||||
- Repair defects saving .WAV files for periods with decodes.
|
||||
|
||||
- Offer a new scheme for adjusting macOS shared memory parameters.
|
||||
|
||||
|
||||
Release: WSJT-X 2.4.0-rc1
|
||||
Feb 3, 2021
|
||||
|
@ -63,7 +63,7 @@ the RC1 release.
|
||||
|
||||
|
||||
Release: WSJT-X 2.3.1
|
||||
Mar 8, 2021
|
||||
Mar 18, 2021
|
||||
---------------------
|
||||
|
||||
WSJT-X 2.3.1 General Availability release updates the User Guide to
|
||||
@ -96,6 +96,10 @@ below.
|
||||
- Repair a defect that could caused incorrect log entry fields when
|
||||
using FT4 mode and a priori (AP) decoding.
|
||||
|
||||
- Repair defects saving .WAV files for periods with decodes.
|
||||
|
||||
- Offer a new scheme for adjusting macOS shared memory parameters.
|
||||
|
||||
|
||||
Release: WSJT-X 2.4.0-rc1
|
||||
Feb 3, 2021
|
||||
|
149
WSJTXLogging.cpp
149
WSJTXLogging.cpp
@ -104,6 +104,77 @@ namespace
|
||||
<< context.category << ": " << msg.toStdWString ();
|
||||
}
|
||||
}
|
||||
|
||||
void default_log_config ()
|
||||
{
|
||||
auto core = logging::core::get ();
|
||||
|
||||
//
|
||||
// Define sinks, filters, and formatters using expression
|
||||
// templates for efficiency.
|
||||
//
|
||||
|
||||
// Default log file location.
|
||||
QDir app_data {QStandardPaths::writableLocation (QStandardPaths::AppLocalDataLocation)};
|
||||
Logger::init (); // Basic setup of attributes
|
||||
|
||||
//
|
||||
// Sink intended for general use that passes everything above
|
||||
// selected severity levels per channel. Log file is appended
|
||||
// between sessions and rotated to limit storage space usage.
|
||||
//
|
||||
auto sys_sink = boost::make_shared<sinks::asynchronous_sink<sinks::text_file_backend>>
|
||||
(
|
||||
keywords::auto_flush = false
|
||||
#if BOOST_VERSION / 100 >= 1070
|
||||
, keywords::file_name = app_data.absoluteFilePath ("wsjtx_syslog.log").toStdWString ()
|
||||
, keywords::target_file_name =
|
||||
#else
|
||||
, keywords::file_name =
|
||||
#endif
|
||||
app_data.absoluteFilePath ("logs/wsjtx_syslog_%Y-%m.log").toStdString ()
|
||||
, keywords::time_based_rotation = sinks::file::rotation_at_time_point (gregorian::greg_day (1), 0, 0, 0)
|
||||
, keywords::open_mode = std::ios_base::out | std::ios_base::app
|
||||
#if BOOST_VERSION / 100 >= 1063
|
||||
, keywords::enable_final_rotation = false
|
||||
#endif
|
||||
);
|
||||
|
||||
sys_sink->locked_backend ()->set_file_collector
|
||||
(
|
||||
sinks::file::make_collector
|
||||
(
|
||||
keywords::max_size = 5 * 1024 * 1024
|
||||
, keywords::min_free_space = 1024 * 1024 * 1024
|
||||
, keywords::max_files = 12
|
||||
, keywords::target = app_data.absoluteFilePath ("logs").toStdWString ()
|
||||
)
|
||||
);
|
||||
sys_sink->locked_backend ()->scan_for_files ();
|
||||
|
||||
// Per channel severity level filter
|
||||
using min_severity_filter = expr::channel_severity_filter_actor<std::string, trivial::severity_level>;
|
||||
min_severity_filter min_severity = expr::channel_severity_filter (channel, severity);
|
||||
min_severity["SYSLOG"] = trivial::info;
|
||||
min_severity["RIGCTRL"] = trivial::info;
|
||||
min_severity["DATALOG"] = trivial::info;
|
||||
sys_sink->set_filter (min_severity || severity >= trivial::fatal);
|
||||
|
||||
sys_sink->set_formatter
|
||||
(
|
||||
expr::stream
|
||||
<< "[" << channel
|
||||
<< "][" << expr::format_date_time<posix_time::ptime> ("TimeStamp", "%Y-%m-%d %H:%M:%S.%f")
|
||||
<< "][" << expr::format_date_time<posix_time::time_duration> ("Uptime", "%O:%M:%S.%f")
|
||||
<< "][" << trivial::severity
|
||||
<< "] " << expr::message
|
||||
);
|
||||
|
||||
core->add_sink (sys_sink);
|
||||
|
||||
// Indicate start of logging
|
||||
LOG_INFO ("Log Start");
|
||||
}
|
||||
}
|
||||
|
||||
WSJTXLogging::WSJTXLogging ()
|
||||
@ -152,77 +223,23 @@ WSJTXLogging::WSJTXLogging ()
|
||||
new_config += config.mid (pos);
|
||||
std::wstringbuf buffer {new_config.toStdWString (), std::ios_base::in};
|
||||
std::wistream stream {&buffer};
|
||||
Logger::init_from_config (stream);
|
||||
LOG_INFO ("Read logging configuration file: " << log_config.fileName ());
|
||||
try
|
||||
{
|
||||
Logger::init_from_config (stream);
|
||||
LOG_INFO ("Read logging configuration file: " << log_config.fileName ());
|
||||
}
|
||||
catch (std::exception const& e)
|
||||
{
|
||||
default_log_config ();
|
||||
LOG_ERROR ("Reading logging configuration file: " << log_config.fileName () << " - " << e.what ());
|
||||
LOG_INFO ("Reverting to default logging configuration");
|
||||
}
|
||||
}
|
||||
else // Default setup
|
||||
{
|
||||
//
|
||||
// Define sinks, filters, and formatters using expression
|
||||
// templates for efficiency.
|
||||
//
|
||||
|
||||
// Default log file location.
|
||||
QDir app_data {QStandardPaths::writableLocation (QStandardPaths::AppLocalDataLocation)};
|
||||
Logger::init (); // Basic setup of attributes
|
||||
|
||||
//
|
||||
// Sink intended for general use that passes everything above
|
||||
// selected severity levels per channel. Log file is appended
|
||||
// between sessions and rotated to limit storage space usage.
|
||||
//
|
||||
auto sys_sink = boost::make_shared<sinks::asynchronous_sink<sinks::text_file_backend>>
|
||||
(
|
||||
keywords::auto_flush = false
|
||||
#if BOOST_VERSION / 100 >= 1070
|
||||
, keywords::file_name = app_data.absoluteFilePath ("wsjtx_syslog.log").toStdWString ()
|
||||
, keywords::target_file_name =
|
||||
#else
|
||||
, keywords::file_name =
|
||||
#endif
|
||||
app_data.absoluteFilePath ("logs/wsjtx_syslog_%Y-%m.log").toStdString ()
|
||||
, keywords::time_based_rotation = sinks::file::rotation_at_time_point (gregorian::greg_day (1), 0, 0, 0)
|
||||
, keywords::open_mode = std::ios_base::out | std::ios_base::app
|
||||
#if BOOST_VERSION / 100 >= 1063
|
||||
, keywords::enable_final_rotation = false
|
||||
#endif
|
||||
);
|
||||
|
||||
sys_sink->locked_backend ()->set_file_collector
|
||||
(
|
||||
sinks::file::make_collector
|
||||
(
|
||||
keywords::max_size = 5 * 1024 * 1024
|
||||
, keywords::min_free_space = 1024 * 1024 * 1024
|
||||
, keywords::max_files = 12
|
||||
, keywords::target = app_data.absoluteFilePath ("logs").toStdWString ()
|
||||
)
|
||||
);
|
||||
sys_sink->locked_backend ()->scan_for_files ();
|
||||
|
||||
// Per channel severity level filter
|
||||
using min_severity_filter = expr::channel_severity_filter_actor<std::string, trivial::severity_level>;
|
||||
min_severity_filter min_severity = expr::channel_severity_filter (channel, severity);
|
||||
min_severity["SYSLOG"] = trivial::info;
|
||||
min_severity["RIGCTRL"] = trivial::info;
|
||||
min_severity["DATALOG"] = trivial::info;
|
||||
sys_sink->set_filter (min_severity || severity >= trivial::fatal);
|
||||
|
||||
sys_sink->set_formatter
|
||||
(
|
||||
expr::stream
|
||||
<< "[" << channel
|
||||
<< "][" << expr::format_date_time<posix_time::ptime> ("TimeStamp", "%Y-%m-%d %H:%M:%S.%f")
|
||||
<< "][" << expr::format_date_time<posix_time::time_duration> ("Uptime", "%O:%M:%S.%f")
|
||||
<< "][" << trivial::severity
|
||||
<< "] " << expr::message
|
||||
);
|
||||
|
||||
core->add_sink (sys_sink);
|
||||
default_log_config ();
|
||||
}
|
||||
|
||||
// Indicate start of logging
|
||||
LOG_INFO ("Log Start");
|
||||
::qInstallMessageHandler (&qt_log_handler);
|
||||
}
|
||||
|
||||
|
@ -224,7 +224,7 @@ foreach (lang ${LANGUAGES})
|
||||
SOURCE user_guide/wsjtx-main.adoc
|
||||
LANG "${lang}"
|
||||
OUTPUT html
|
||||
ASCIIDOCTOR_OPTIONS -d book -a data-uri -a toc=left -a max-width=1024px
|
||||
ASCIIDOCTOR_OPTIONS -d book -a data-uri -a toc=left
|
||||
DEPENDS ${common_SRCS} ${_sources}
|
||||
)
|
||||
document(
|
||||
|
@ -1,17 +1,17 @@
|
||||
<style>
|
||||
html, body {
|
||||
font-size: 90%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: purple;
|
||||
color: purple;
|
||||
}
|
||||
</style>
|
||||
|
@ -6,7 +6,7 @@ Joseph H Taylor, Jr, K1JT
|
||||
// package building .deb, .rpm, etc as it exposes the IP address and the images
|
||||
// are non-free, so can't be included as part of the Debian package.
|
||||
// :badges:
|
||||
:docinfo1:
|
||||
:docinfo: shared
|
||||
:imagesdir: {docdir}/images
|
||||
:icons: font
|
||||
:numbered:
|
||||
|
@ -5006,7 +5006,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
||||
auto const& word_3 = message_words.at (3);
|
||||
auto word_3_as_number = word_3.toInt ();
|
||||
if (("RRR" == word_3
|
||||
|| word_3_as_number == 73
|
||||
|| (word_3_as_number == 73 && ROGERS == m_QSOProgress)
|
||||
|| "RR73" == word_3
|
||||
|| ("R" == word_3 && m_QSOProgress != REPORT))) {
|
||||
if(m_mode=="FT4" and "RR73" == word_3) m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc();
|
||||
@ -5035,11 +5035,31 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
||||
m_ntx=4;
|
||||
ui->txrb4->setChecked(true);
|
||||
}
|
||||
else
|
||||
else if ((m_QSOProgress > CALLING && m_QSOProgress < ROGERS)
|
||||
|| word_3.contains (QRegularExpression {"^RR(?:R|73)$"}))
|
||||
{
|
||||
m_ntx=5;
|
||||
ui->txrb5->setChecked(true);
|
||||
}
|
||||
else if (ROGERS == m_QSOProgress)
|
||||
{
|
||||
logQSOTimer.start(0);
|
||||
m_ntx=6;
|
||||
ui->txrb6->setChecked(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// just work them (again)
|
||||
if (ui->tx1->isEnabled ()) {
|
||||
m_ntx = 1;
|
||||
m_QSOProgress = REPLYING;
|
||||
ui->txrb1->setChecked (true);
|
||||
} else {
|
||||
m_ntx=2;
|
||||
m_QSOProgress = REPORT;
|
||||
ui->txrb2->setChecked (true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (m_QSOProgress >= ROGER_REPORT)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user