CMake does not seem to recognize Fortran module file dependencies
correctly and sometimes builds them after modules that reference
them. This change moves all the module files to the beginning of the
library sources list so that they should always be compiled before use
after changes. I'm not sure this will work 100% reliably for
inter-module references so further reordering may be needed in future
if unexpected clean rebuilds are becoming necessary after module
source file changes.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7632 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Separate translation units avoids compiler generated CRC tables being
linked when not needed.
Also only compile once and add to wsjt_cxx library for later link
editing.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7631 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Using the CMake module GNUInstallDirs to set up standard locations
which allows better customisation for packagers building for various
distributions.
The change does change some internal package file paths and will leave
some files in old locations in Windows installations. Running
uninstall is probably wise on Windows before installing this new
package layout if future clean uninstalls are desired.
Linux and other *nix package maintainers can use the CMake variables
CMAKE_INSTALL_xxx to vary the install paths of various components. See
the CMake GNUInstallDirs module documentation for more details. An
example might be for Slackware where package documents are expected to
be installed into
<install-prefix>/doc/<package-name>-<package-version>/ whereas the GNU
default is to install them into
<install-prefix>/share/doc/<package-name>/. To achieve this set the
CMake variable CMAKE_INSTALL_DOCDIR as follows when configuring:
cmake -D CMAKE_INSTALL_DOCDIR:PATH=doc/wsjtx-1.7.1 -D CMAKE_INSTALL_PREFIX= ...
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7623 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This change obseletes Mac OS X 10.7 and 10.8 which are not supported
by Qt 5.8.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7613 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This builds on the static phase compensation in the MSK144 decoder and
the phase analysis and polynomial fitting capabilities also in teh
MSK144 decoder, by allowing captured data to be selected for phase
equalization from the WSJT-X UI.
Reads captured phase compensation curve estimate files containing
fitted polynomial coefficients and measured phase data from MSK144
receptions. Intent is to select a compensation curve that is from a
known transmitter like an SDR which have good phase linearity. Phase
plots and compensation polynomials may be viewed and compared with the
current compensation polynomial. A suitable polynomial can be applied
to be use in all further decoding of MSK144 signals.
Plots of the currently selected polynomial and its modified higher
order terms polynomial which is actually used in equalization (this
plot may be dropped - it is just for kicks at the moment). When a
captured phase analysis file is loaded plots of the measured phase and
the proposed best fit polynomial are shown.
Basic maintenance is also included allowing clearing and loading
captured plots and an option to revert to a flat no equalization
curve.
More to come on this as amplitude equalization is also possible, this
will probably be similar, maybe even plotted on the same graph with
dual axes for phase and amplitude. Amplitude correction from a
measured reference spectrum could be viewed and selected for
equalization for all modes. TBC...
This change also introduces the QCustomPlot 3rd party
widget. Currently this is statically linked from a qcp library built
by the WSJT-X CMake script. This will probably be migrated to a shared
object (DLL) build as a CMake external project, once some CMake script
re-factoring has been completed, which is more in line with the
QCustomPlot author's intentions. This will allow efficient reuse in
other tools shipped with WSJT-X.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7570 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This issue was probably triggered by OpenMP forcing some large arrays
onto the stack where Fortran might normally make them static. The
change that seemed to make the difference was putting cdat2 in
msk144_freq_search into static storage. I am not convinced that the
problem is really solved but it works for now.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7130 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Also increase Windows stack size from 1Mbyte to 8Mbyte due to the
impact of Fortran arrays not being automatically moved to static
storage above a certain size. This needs attention by setting the SAVE
attribute on large arrays that do not need to be on the stack i.e. do
no need to be duplicated across OpenMP thread teams.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7122 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
The change also includes a new MultiSettings feature that allows
settings keys common to all configurations. The splash screen disable
is the first of those to be used.
The MultiSettings class has been made safer to use by ensuring it
saves and re-enables the current QSettings group when doing multi
settings actions. This allows access to common, across configuration,
items while within a normal settings group without breaking the
MultiSettings internal implementation.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7073 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Two new validator classes CallsignValidator and
MaidenheadLocatorValidator are introduced and used in the
Configuration and MainWindow implementations.
MaidenheadLocatorValidator supports different lengths and minimum
required lengths with a default of subsquare with square being
required.
The message_aggregator application has been enhanced to show the
current DX call and DX grid as shown in the WSJT-X main window.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6903 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Instead of using the Qt QMessageBox class directly a new class
MessageBox (MessageBox.hpp) has been added to deal with platform
independence issues like the title not being shown on Mac OS X.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6861 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Now exporting a shared and static version of the wsjtx_udp library.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6695 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
If needed then requires a newer CMake minimum version.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6692 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Build now creates and installs a UDP library that contains the server
side of the UDP messaging facility. This library is used by the
udp_daemon and message_aggregator reference examples. The new library
is currently a static archive but can also be built as a shared
library. The library allows third party Qt applications to easily
access UDP messages from WSJT-X.
Refactored the message_aggregator reference example to split out
classes into separate translation units. Added new functionality to
exercise the new UDP status fields, highlight own call, CQ/QRZ
messages and decodes near Rx DF.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6691 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Multiple configurations are accessed and maintained from a new main
window menu bar pop up menu "Configurations". The prior settings are
the "Default" entry. New configurations may be added by cloning
existing ones. Maintenance and navigation is via sub menus for each
configuration.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6623 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Setting the CMake option WSJT_RIG_NONE_CAN_SPLIT=ON will buold a
version taht allows split operating with the dummy rig. This must not
be shipped since it will generate incorrect Tx tones.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6589 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Hamlib now used libusb-1.0 and since that is available on Windows we
can now build with it across platforms. This change allows for that if
the custom USB backends are configured in Hamlib.
As it looks like Hamlib v3.1 will be suitable for WSJT-X this change
also puts in place what is needed to link to a Hamlib SO/DLL/DYLIB
when required. This is switched on by not defining the CMake variable
hamlib_STATIC. This could be used on Windows and Mac but Linux still
must have Hamlib statically linked due to repository versions being
too old.
For now Hamlib remains statically linked for consistency across
platforms.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6581 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
The latest Clang shipped with Apple Xcode errors on unrecognized flags
that gcc/g++ accept. By using generator expressions the OpenMP flag
is now only applied to Fortran compiles when needed on Mac. Note that
this is necessary since the Apple Clang does not support OpenMP so we
have to hack the link to support OpenMP in jt9 by mixing gfortran OpenMP
object code with Clang/Clang++ object code.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6566 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2. Add ability to set ndepth and do message averaging ti fer65.
3. Correct SNR values for measured Doppler width.
4. Comment out the "write(62..." diagnostics.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6537 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
1. Measure Doppler width by fitting a (modified) Lorentzian.
2. Don't call "slope" in sync65().
3. New definition of "sync1".
4. Get snr from sync1.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6536 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Clang++ detected some warnings that g++ did not.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6409 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Missing '/' character on directory URL. QUrl treats URLs not ending
with a '/' character as file URLS and QUrl::resolved() strips
filenames.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6393 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Broadcast Wave Format is a backwards compatible superset of teh
Microsoft WAV file format that has been implemented in teh hope that
Windows File Explorer might show the WAV file metadta, as it turns out
that is not the case but as it's done anyway.
It appears to be impossible to write a WAV file such that MS Windows
File Explorer shows any metadata so unless we adopt FLAC format audio
files we will have to show metadata with our own software :(
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6384 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
The WAV file format allows for optional header content, allow for this
in preparation for adding some metadata to WSJT-X recorded WAV files.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6335 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Re-factor the JT4, JT65 and JT9 decoders as Fortran modules using type
bound procedures, the decoder types implement a callback procedure
such that he client of the decoder can interpret the decode results as
they need.
The JT4 decoder has a second callback that delivers message averaging
status. Also the previously separate source files lib/jt4a.f90 and
lib/avg4.f90 have been merged into lib/jt4_decode.f90 as private type
bound procedures of the new jt4_decoder type.
Re-factored the lib/decoder.f90 subroutine to utilize the new decoder
types. Added local procedures to process decodes and averaging results
including the necessary OpenMP synchronization directives for parallel
JT9+JT65 decoding.
Added the jt65_test module which is a basic test harness for JT65
decoding. Re-factored the jt65 utility to utilize the new jt65_test
module.
Changed a few integers to logical variables where their meaning is
clearly binary.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6324 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Groundwork for calling the decoders directly from C/C++ threads.
To access the timer module timer_module must now be used.
Instrumented code need only use the module function 'timer' which is
now a procedure pointer that is guaranteed to be associated (unless
null() is assigned to it, which should not be done). The default
behaviour of 'timer' is to do nothing.
If a Fortran program wishes to profile code it should now use the
timer_impl module which contains a default timer implementation. The
main program should call 'init_timer([filename])' before using 'timer'
or calling routines that are instrumented. If
'init_timer([filename])'. If it is called then an optional file name
may be provided with 'timer.out' being used as a default. The
procedure 'fini_timer()' may be called to close the file.
The default timer implementation is thread safe if used with OpenMP
multi-threaded code so long as the OpenMP thread team is given the
copyin(/timer_private/) attribute for correct operation. The common
block /timer_private/ should be included for OpenMP use by including
the file 'timer_common.inc'.
The module 'lib/timer_C_wrapper.f90' provides a Fortran wrapper along
with 'init' and 'fini' subroutines which allow a C/C++ application to
call timer instrumented Fortran code and for it to receive callbacks
of 'timer()' subroutine invocations. No C/C++ timer implementation is
provided at this stage.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6320 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Samples are downloaded from a web server, currently the SF download
server. The samples are stored in the source controlled samples
directory and the CMake script there builds a suitable directory tree
for upload to the web server under samples/web containing the samples
hierarchy and the generated JSON contents database file. The samples
CMake script also defines an 'upload-samples' target that uses rsync
to efficiently upload the samples and the accompanying contents JSON
database file.
Any directory structure under the samples directory may be created, to
add a new sample file simply add the file to source control and amend
the list of sample files (SAMPLE_FILES) in samples/CMakeLists.txt.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6308 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Also use correct C binding and have compilers determine sizes and
offsets.
The wsjtx.exe program now owns the decoder shared data that is shared
with symspec. It is now in struct dec_data, still a global variable
for now but hopefully a MainWindow member variable soon.
The struct dec_data (in both C/C++ and Fortran) has a sub structure
with the decoder parameters which enables copying and manipulating a
lot cleaner.
New of changed types of shared data must still be modified in
commons.h and a new file lib/jt9com.f90, they must stay in sync as a
pointer to the structure is passed between C and Fortran.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6290 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Build script now builds jt65. The tools jt65 and jt65sim usilize the
options module for all comamnd line parsing.
The tool jt65sim now has conventinal command line options and
switchs. Default values have been added where appropriate and options
documentation updated. An option to disable PRNG seeding has been
added.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6276 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
That is, right for all platforms with both local and package installs.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6248 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This change will require the following CMakeCache.txt entries to be
deleted:
WSJTX_DATA_DESTINATION
WSJTX_DOC_DESTINATION
so that default values ca be substituted by CMake.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6244 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Locations of various components to be determined at configuration
time. This allows various "Standard" system layouts to be
accomodated. For example on FreeBSD the manpages are usually installed
in the man directory i.e. /usr/local/man whereas the WSJT-X default is
to install them in share/man i.e. /usr/share/man. By setting the CMake
variable WSJT_MANPAGE_DESTINATION to either a relative or absolute
path the install location can be set:
$ cmake -D WSJT_MANPAGE_DESTINATION=. ...
will install the manpages at ${CMAKE_INSTALL_PREFIX}/man
The new configuration variables are:
WSJT_BIN_DESTINATION
WSJT_LIB_DESTINATION
WSJT_SHARE_DESTINATION
WSJT_DOC_DESTINATION
WSJT_DATA_DESTINATION
WSJT_MANPAGE_DESTINATION
WSJT_PLUGIN_DESTINATION
WSJT_QT_CONF_DESTINATION
NB: changes to the above may break WSJT-X at present where the install
locations of files used directly by WSJT-X are moved.
Warning: using absolute paths for these variables is not recommended
as files may be installed in unexpected places, particularly when run
with root privileges. All relative paths with be relative to
CMAKE_INSTALL_PREFIX.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6192 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
A small application demonstrating the usage of the MessageServer class
to implement a companion C++ application that utilizes the WSJT-X UDP
message protocol. It does not do anything useful but could be extended
to do many things.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6146 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
For some reason the inclusion of referenced libraries was not finding
the right libraries when using CMake 3.3 and Qt 5.5. This was probably
a long standing defect that was benign until teh above versions.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5868 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
The latest Qt headers try and disable a compiler warning that CLang++
doesn't support.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5732 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
Bring wsprd and wsprsim in to line with general includes scheme.
Use Qt5 exported library definitions in preference to
qt5_use_modules() which is deprecated.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5663 ab8295b8-cf94-4d9e-aec4-7959e3be5d79