diff --git a/.gitignore b/.gitignore index 80e3c4b27..8a21e3b72 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ jnq* *.txt *.bak !**/CMakeLists.txt +!**/*.txt __pycache__ cmake-build-debug cmake-build-release diff --git a/CMakeLists.txt b/CMakeLists.txt index 78f332876..874302e6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -898,6 +898,7 @@ message (STATUS "hamlib_LIBRARY_DIRS: ${hamlib_LIBRARY_DIRS}") set (CMAKE_REQUIRED_INCLUDES "${hamlib_INCLUDE_DIRS}") set (CMAKE_REQUIRED_LIBRARIES "${hamlib_LIBRARIES}") +check_symbol_exists (CACHE_ALL "hamlib/rig.h" HAVE_HAMLIB_OLD_CACHING) check_symbol_exists (rig_set_cache_timeout_ms "hamlib/rig.h" HAVE_HAMLIB_CACHING) @@ -1695,6 +1696,7 @@ if (NOT is_debug_build) PATTERN "*quick*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE PATTERN "*webgl*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE PATTERN "*_debug${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE + PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}.dSYM" EXCLUDE ) install ( FILES diff --git a/Darwin/sysctl.conf b/Darwin/sysctl.conf index 830bba803..4d6cf69e0 100644 --- a/Darwin/sysctl.conf +++ b/Darwin/sysctl.conf @@ -1,6 +1,5 @@ -kern.sysv.shmmax=14680064 +kern.sysv.shmmax=104857600 kern.sysv.shmmin=1 kern.sysv.shmmni=128 kern.sysv.shmseg=32 -kern.sysv.shmall=17920 - +kern.sysv.shmall=25600 diff --git a/Network/PSKReporter.cpp b/Network/PSKReporter.cpp index fcdebf2c5..8c8d7948d 100644 --- a/Network/PSKReporter.cpp +++ b/Network/PSKReporter.cpp @@ -145,8 +145,10 @@ public: #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect (socket_.get (), &QAbstractSocket::errorOccurred, this, &PSKReporter::impl::handle_socket_error); -#else +#elif QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) connect (socket_.data (), QOverload<QAbstractSocket::SocketError>::of (&QAbstractSocket::error), this, &PSKReporter::impl::handle_socket_error); +#else + connect (socket_.data (), static_cast<void (QAbstractSocket::*) (QAbstractSocket::SocketError)> (&QAbstractSocket::error), this, &PSKReporter::impl::handle_socket_error); #endif // use this for pseudo connection with UDP, allows us to use diff --git a/Transceiver/HamlibTransceiver.cpp b/Transceiver/HamlibTransceiver.cpp index a2674a58f..67fc36dc3 100644 --- a/Transceiver/HamlibTransceiver.cpp +++ b/Transceiver/HamlibTransceiver.cpp @@ -14,6 +14,10 @@ #include "moc_HamlibTransceiver.cpp" +#if HAVE_HAMLIB_OLD_CACHING +#define HAMLIB_CACHE_ALL CACHE_ALL +#endif + namespace { // Unfortunately bandwidth is conflated with mode, this is probably @@ -592,7 +596,7 @@ int HamlibTransceiver::do_start () } } -#if HAVE_HAMLIB_CACHING +#if HAVE_HAMLIB_CACHING || HAVE_HAMLIB_OLD_CACHING // we must disable Hamlib caching because it lies about frequency // for less than 1 Hz resolution rigs auto orig_cache_timeout = rig_get_cache_timeout_ms (rig_.data (), HAMLIB_CACHE_ALL); @@ -639,7 +643,7 @@ int HamlibTransceiver::do_start () resolution = -1; // best guess } -#if HAVE_HAMLIB_CACHING +#if HAVE_HAMLIB_CACHING || HAVE_HAMLIB_OLD_CACHING // revert Hamlib cache timeout rig_set_cache_timeout_ms (rig_.data (), HAMLIB_CACHE_ALL, orig_cache_timeout); #endif diff --git a/doc/building-Boost-libs.txt b/doc/building-Boost-libs.txt new file mode 100644 index 000000000..9a1dc5b5c --- /dev/null +++ b/doc/building-Boost-libs.txt @@ -0,0 +1,227 @@ +Linux +===== + +sudo apt install libboost-all-dev + + +macOS +===== + +Download the latest Boost sources from here: boost.org + +Currently v 1.74.0 - https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.bz2 + +cd ~/Downloads +curl -L -O https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.bz2 +mkdir src +cd !$ +tar --bzip2 -xf boost_1_74_0.tar.bz2 +cd boost_1_74_0/tools/build +./bootstrap.sh +./b2 toolset=clang --prefix=$HOME/local/boost-build install +cd ../.. +~/local/boost-build/bin/b2 -j8 toolset=clang cflags=-mmacosx-version-min=10.12 \ + cxxflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \ + mmflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \ + linkflags=-mmacosx-version-min=10.12 \ + architecture=x86 address-model=64 --prefix=$HOME/local/boost install + +That will take a while, once successful (warnings can be ignored) you can clean the build tree to save some space: + +~/local/boost-build/bin/b2 toolset=clang cflags=-mmacosx-version-min=10.12 \ + cxxflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \ + mmflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \ + linkflags=-mmacosx-version-min=10.12 \ + architecture=x86 address-model=64 --prefix=$HOME/local/boost clean + +All that remains is to reconfigure your WSJT-X build trees to include ~/local/boost in your CMAKE_PREFIX_PATH, maybe something like these (one each for Debug and Release configuration builds and assumes the Macports GCC v7 tool-chain is being used): + +FC=gfortran-mp-7 \ + cmake \ + -D CMAKE_PREFIX_PATH:PATH=~/local/boost\;~/Qt/5.15.0-clang\;~/local/hamlib/release\;/opt/local \ + -D CMAKE_INSTALL_PREFIX=~/local/wsjtx/release \ + -D CMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk \ + -D CMAKE_BUILD_TYPE=Release \ + -B ~/build/wsjtx-release \ + ~/src/bitbucket.org/k1jt/wsjtx + +FC=gfortran-mp-7 \ + cmake \ + -D CMAKE_PREFIX_PATH:PATH=~/local/boost\;~/Qt/5.15.0-clang\;~/local/hamlib/debug\;/opt/local \ + -D CMAKE_INSTALL_PREFIX=~/local/wsjtx/debug \ + -D CMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk \ + -D CMAKE_BUILD_TYPE=Debug \ + -B ~/build/wsjtx-debug \ + ~/src/bitbucket.org/k1jt/wsjtx + +Substitute you installed SDK version, Qt version and location, and Hamlib install locations. + + +MS Windows +========== + +Because 32-bit and 64-bit builds are possible and each use different +tool-chains, two separate builds are necessary if both architectures +are required. + +Common steps +------------ + +Download and extract the latest Boost library sources, at the time of +writing that was +https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.7z +. Extract to some convenient location, I use %HOME%\src . + +Download and extract the libbacktrace sources from +https://github.com/ianlancetaylor/libbacktrace as follows. + +cd %HOME%\src +mkdir github.com +cd github.com +mkdir ianlancetaylor +cd ianlancetaylor +git clone git@github.com:ianlancetaylor/libbacktrace.git + +I install third-party tools under the C:\Tools directory, the +following assumes that, adjust to taste. Note that it is OK to install +both 32- and 64-bit builds of Boost to the same path as the library +names are unique per architecture and tool-chain. This saves a lot of +space as the boost header files are quite big, and there's no need to +install multiple copies. + +Create a new file %HOME%\src\boost_1_74_0\project-config.jam with the +following three lines to specify how Boost.Build finds the libbacktrace +library matched to your relevant C++ compliers: + +import toolset ; + +using gcc : : C:\\Qt\\Tools\\mingw730_32\\bin\\g++ : <compileflags>-I"C:\\Tools\\libbacktrace-1.0\\MinGW32\\include" <linkflags>-L"C:\\Tools\\libbacktrace-1.0\\MinGW32\\lib" ; + +using gcc : 8~64 : C:\\Qt\\Tools\\mingw810_64\\bin\\g++ : <compileflags>-I"C:\\Tools\\libbacktrace-1.0\\MinGW64\\include" <linkflags>-L"C:\\Tools\\libbacktrace-1.0\\MinGW64\\lib" ; + +Note that it may need some local adjustment of the C++ compiler +version and path depending on the exact tool-chains from your Qt +installation. Above I am using the Qt v5.12.9 MinGW32 v7 tool-chain +for 32-bit (toolset=gcc), and Qt v5.15.0 MinGW64 v8 tool-chain +for 64-bit (toolchain=gcc-8~64). + +32-bit +------ + +Start an MSys or MSys2 shell with the 32-bit C/C++ tool-chain from +your Qt installation on the PATH environment variable. + +cd ~/src/github.com/ianlancetaylor/libbacktrace +./configure --prefix=/c/Tools/libbacktrace-1.0/MinGW32 +make && make install +make clean + +Start a CMD window suitably configured for use of the 32-bit MinGW +tool-chain bundled with your Qt binary installation. Verify the +correct compiler is in the PATH. i.e. it identifies (g++ --version) as +i686-posix-dwarf-rev0. + +cd %HOME%\src\boost_1_74_0\tools\build +bootstrap.bat +.\b2 --prefix=C:\Tools\boost-build\MinGW32 install +cd ..\.. +C:\Tools\boost-build\MinGW32\bin\b2 -j8 toolset=gcc ^ + --build-dir=%HOME%\build\boost ^ + --build-type=complete --prefix=C:\Tools\boost install + +If all is well you should see the following line about a 1/3 of the +way through the initial configuration steps. + + - libbacktrace builds : yes + +After some time it should complete with something like: + +...failed updating 1574 targets... +...skipped 1112 targets... +...updated 3924 targets... + +warnings can usually be ignored. If successful; you can release some +space by cleaning the build tree: + +C:\Tools\boost-build\MinGW32\bin\b2 toolset=gcc ^ + --build-dir=%HOME%\build\boost ^ + --build-type=complete clean + +64-bit +====== + +Start an MSys or MSys2 shell with the 64-bit C/C++ tool-chain from +your Qt installation on the PATH environment variable. + +cd ~/src/github.com/ianlancetaylor/libbacktrace +./configure --prefix=/c/Tools/libbacktrace-1.0/MinGW64 +make && make install +make clean + +Start a CMD window suitably configured for use of the 64-bit MinGW +tool-chain bundled with your Qt binary installation. Verify the +correct compiler is in the PATH. i.e. it identifies (g++ --version) as +x86_64-posix-seh-rev0. Note the toolchain specified must match your +compilers and the project-config.jam file you created above. With a v7 +64-bit C++ compiler use gcc-7~64, with a v8 64-bit C++ compiler use +gcc-8~64. My example matches my 64-bit Qt v5.15.0 with the bundled +MinGW64 v8.1.0. + +cd %HOME%\src\boost_1_74_0\tools\build +bootstrap.bat +.\b2 --prefix=C:\Tools\boost-build\MinGW64 install +cd ..\.. +C:\Tools\boost-build\MinGW64\bin\b2 -j8 toolset=gcc-8~64 ^ + address-model=64 --build-dir=%HOME%\build\boost ^ + --build-type=complete --prefix=C:\Tools\boost install + +If all is well you should see the following line about a 1/3 of the +way through the initial configuration steps. + + - libbacktrace builds : yes + +After some time it should complete with something like: + +...failed updating 108 targets... +...skipped 32 targets... +...updated 3648 targets... + +warnings can usually be ignored. If successful; you can release some +space by cleaning the build tree: + +C:\Tools\boost-build\MinGW32\bin\b2 toolset=gcc-8~64 ^ + address-model=64 --build-dir=%HOME%\build\boost ^ + --build-type=complete clean + +Setting up WSJT-X builds +------------------------ + +All that remains is to add C:\Tools\boost\ to your 32- and 64-bit +build configurations CMAKE_PREFIX_PATH variables. I use tool-chain +files for my WSJT-X builds on Windows, an extract from my 32-bit Debug +configuration tool-chain file: + +# ... + +set (BOOSTDIR C:/Tools/boost) +set (QTDIR C:/Qt/5.12.9/mingw73_32) +# set (QTDIR C:/Qt/5.15.0/mingw81_32) +set (FFTWDIR C:/Tools/fftw-3.3.5-dll32) +set (HAMLIBDIR C:/test-install/hamlib/mingw32/debug) +set (LIBUSBDIR C:/Tools/libusb-1.0.23) +set (PYTHONDIR C:/Python27) +set (ASCIIDOCDIR C:/Tools/asciidoc-master) + +# where to find required packages +set (CMAKE_PREFIX_PATH ${BOOSTDIR} ${QTDIR} ${FFTWDIR} ${HAMLIBDIR} ${HAMLIBDIR}/bin ${LIBUSBDIR} ${PYTHONDIR} ${ASCIIDOCDIR}) + +# ... + +Run-time Environment +-------------------- + +You will need to add C:\Tools\boost\lib to your PATH environment +variable in order to run installed Debug configurations of WSJT-X, or +to execute build artefacts from a build tree. Installed Release +configurations will move any required DLLs to the installation bin +directory automatically. diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 905c406c7..eb0362a22 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3020,34 +3020,19 @@ void MainWindow::decode() //decode() if( m_diskData ) { dec_data.params.lapcqonly=false; } - m_msec0=QDateTime::currentMSecsSinceEpoch(); if(!m_dataAvailable or m_TRperiod==0.0) return; ui->DecodeButton->setChecked (true); - if(!dec_data.params.nagain && m_diskData && (m_TRperiod >= 60.0)) { + if(!dec_data.params.nagain && m_diskData && m_TRperiod >= 60.) { dec_data.params.nutc=dec_data.params.nutc/100; } if(dec_data.params.nagain==0 && dec_data.params.newdat==1 && (!m_diskData)) { - qint64 nperiods=now.toMSecsSinceEpoch()/(1000.0*m_TRperiod); - m_dateTimeSeqStart=QDateTime::fromMSecsSinceEpoch(qint64(1000.0*nperiods*m_TRperiod)).toUTC(); - qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - int imin=ms/60000; - int ihr=imin/60; - imin=imin % 60; - if(m_TRperiod>=60) imin=imin - (imin % (int(m_TRperiod)/60)); - dec_data.params.nutc=100*ihr + imin; - if(m_TRperiod < 60) { - qint64 ms=1000.0*(2.0-m_TRperiod); - if(m_mode=="FST4") ms=1000.0*(6.0-m_TRperiod); - //Adjust for FT8 early decode: - if(m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) ms+=(m_hsymStop-m_earlyDecode)*288; - if(m_mode=="FT8" and m_ihsym==m_earlyDecode2 and !m_diskData) ms+=(m_hsymStop-m_earlyDecode2)*288; - QDateTime t=QDateTime::currentDateTimeUtc().addMSecs(ms); - ihr=t.toString("hh").toInt(); - imin=t.toString("mm").toInt(); - int isec=t.toString("ss").toInt(); - isec=isec - fmod(double(isec),m_TRperiod); - dec_data.params.nutc=10000*ihr + 100*imin + isec; - } + auto t_start = qt_truncate_date_time_to (QDateTime::currentDateTimeUtc (), m_TRperiod * 1.e3); + auto t = t_start.time (); + dec_data.params.nutc = t.hour () * 100 + t.minute (); + if (m_TRperiod < 60.) + { + dec_data.params.nutc = dec_data.params.nutc * 100 + t.second (); + } } if(m_nPick==1 and !m_diskData) { diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index b7c78567f..42741e54a 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -402,7 +402,6 @@ private: qint64 m_msErase; qint64 m_secBandChanged; qint64 m_freqMoon; - qint64 m_msec0; qint64 m_fullFoxCallTime; Frequency m_freqNominal; diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index 558fefe06..bf80c09ac 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -2848,7 +2848,6 @@ Yellow when too low</string> <string>Mode</string> </property> <addaction name="actionFST4"/> - <addaction name="actionFST4W"/> <addaction name="actionFT4"/> <addaction name="actionFT8"/> <addaction name="actionJT4"/> @@ -2860,6 +2859,7 @@ Yellow when too low</string> <addaction name="actionISCAT"/> <addaction name="actionMSK144"/> <addaction name="separator"/> + <addaction name="actionFST4W"/> <addaction name="actionWSPR"/> <addaction name="separator"/> <addaction name="actionEcho"/> diff --git a/wsjtx_config.h.in b/wsjtx_config.h.in index fa41c3e03..ee4213ed7 100644 --- a/wsjtx_config.h.in +++ b/wsjtx_config.h.in @@ -19,6 +19,7 @@ extern "C" { #cmakedefine PROJECT_SAMPLES_URL "@PROJECT_SAMPLES_URL@" #cmakedefine PROJECT_SUMMARY_DESCRIPTION "@PROJECT_SUMMARY_DESCRIPTION@" +#cmakedefine01 HAVE_HAMLIB_OLD_CACHING #cmakedefine01 HAVE_HAMLIB_CACHING #cmakedefine01 WSJT_SHARED_RUNTIME