No description
Find a file
Allan Bazinet f5fd0a72cc Remove unused includes
Remove includes not directly used in mainwindow.cpp, eliminating compiler warning spam.
2025-10-13 18:18:55 -05:00
artwork CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
Audio Use timezone functions compatible with Qt 6.4 2024-10-21 13:44:12 -07:00
CMake CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
contrib CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
Darwin CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
debian Initial Commit 2018-02-08 21:28:33 -05:00
docker Use host native PulseAudio server 2025-06-27 19:01:18 -04:00
docs Improve the build documentation for Linux. 2025-10-13 18:18:55 -05:00
icons CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
lib Eliminate twkfreq1 subroutine usage 2025-01-06 18:13:23 -08:00
logbook The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
media/tests Fixed decoder hang on cshift when subtracting signal 2020-05-03 14:58:47 -04:00
Palettes Updated to r8541 2018-03-05 14:49:51 -05:00
vendor CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
.dockerignore Move docker into subdir 2025-06-27 17:11:02 -04:00
.gitignore add all Xcode and Qt Creator patches to .gitignore 2025-10-13 18:18:55 -05:00
about.cpp Change repo location to github 2024-11-07 07:44:47 -08:00
about.h Initial Commit 2018-02-08 21:28:33 -05:00
about.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
APRSISClient.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
APRSISClient.h The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
AttenuationSlider.cpp Correct handling of martian sizes 2024-11-12 05:35:05 -08:00
AttenuationSlider.hpp Comment include guard #endif 2024-10-14 05:57:06 -07:00
AudioDevice.cpp Initial Commit 2018-02-08 21:28:33 -05:00
AudioDevice.hpp Lint 2024-09-12 14:32:31 -07:00
Bands.cpp Alignment tweaks 2024-08-31 11:01:44 -07:00
Bands.hpp Updated editing experience for frequency schedule. Fixed some bugs with the data storage 2018-08-09 09:44:22 -04:00
bsj.mod Squashed commit of the following: 2019-09-05 14:07:24 -04:00
CallsignValidator.cpp Fixed #206: Double compound calls are valid 2019-10-13 20:28:47 -04:00
CallsignValidator.hpp Initial Commit 2018-02-08 21:28:33 -05:00
CandidateKeyFilter.cpp Initial Commit 2018-02-08 21:28:33 -05:00
CandidateKeyFilter.hpp Initial Commit 2018-02-08 21:28:33 -05:00
CMakeCPackOptions.cmake.in CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
CMakeLists.txt Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
CMakeLists.txt.legacy Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
commons.h Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
Configuration.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
Configuration.hpp CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
Configuration.ui Remove dead single decode support, C++ side 2024-11-01 09:40:02 -07:00
COPYING Fixed #159: removed unicode quotes from GPL so it can be read on acient windows machines 2019-04-28 12:05:32 -04:00
cty.dat Merged master 8748 2018-08-05 11:33:30 -04:00
decodedtext.cpp Make it easier to understand the mode letters in ALL.TXT. 2025-08-18 09:44:27 -04:00
decodedtext.h Make it clearer how timestamps are coded into ints. 2025-08-18 09:44:00 -04:00
Decoder.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
Decoder.h Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
Detector.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
Detector.hpp Extract Filter concept to private nested class 2024-11-30 08:49:39 -08:00
DisplayManual.cpp Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
DisplayManual.hpp Initial Commit 2018-02-08 21:28:33 -05:00
DriftingDateTime.cpp Add DriftingDateTime::currentSecsSinceEpoch() 2024-09-08 06:29:38 -07:00
DriftingDateTime.h Add DriftingDateTime::currentSecsSinceEpoch() 2024-09-08 06:29:38 -07:00
DXLabSuiteCommanderTransceiver.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
DXLabSuiteCommanderTransceiver.hpp Initial Commit 2018-02-08 21:28:33 -05:00
eclipse.txt Remove eclipses from the past from data file 2024-09-07 14:45:01 -07:00
EmulateSplitTransceiver.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
EmulateSplitTransceiver.hpp Initial Commit 2018-02-08 21:28:33 -05:00
EventFilter.hpp Use static_cast 2024-11-12 21:15:07 -08:00
fileutils.cpp Added fsync for unix/windows in file utils 2020-06-05 11:09:00 -04:00
fileutils.h Added fsync for unix/windows in file utils 2020-06-05 11:09:00 -04:00
Flatten.cpp CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
Flatten.hpp Provide live() accessor 2024-12-11 05:26:45 -08:00
ForeignKeyDelegate.cpp Initial Commit 2018-02-08 21:28:33 -05:00
ForeignKeyDelegate.hpp Initial Commit 2018-02-08 21:28:33 -05:00
FrequencyLineEdit.cpp Initial Commit 2018-02-08 21:28:33 -05:00
FrequencyLineEdit.hpp Initial Commit 2018-02-08 21:28:33 -05:00
FrequencyList.cpp Alignment tweaks 2024-08-31 10:54:43 -07:00
FrequencyList.hpp Initial Commit 2018-02-08 21:28:33 -05:00
Geodesic.cpp Use concepts for FP restrictions 2025-02-09 05:52:02 -08:00
Geodesic.hpp Return QStringView from compass() 2024-11-19 16:54:13 -08:00
HamlibTransceiver.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
HamlibTransceiver.hpp Changed hamlib legacy define to JS8_USE_HAMLIB_THREE 2020-04-26 16:38:32 -04:00
HelpTextWindow.cpp Initial Commit 2018-02-08 21:28:33 -05:00
HelpTextWindow.hpp Initial Commit 2018-02-08 21:28:33 -05:00
HRDTransceiver.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
HRDTransceiver.hpp Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
IARURegions.cpp Alignment tweaks 2024-08-31 10:54:43 -07:00
IARURegions.hpp Initial Commit 2018-02-08 21:28:33 -05:00
Inbox.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
Inbox.h Adding lookahead message ID to MSG response "%1 MSG %2 FROM %3 NEXT MSG ID %4" 2025-10-13 18:14:11 -05:00
JS8.cpp CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
JS8.hpp Make it clearer how timestamps are coded into ints. 2025-08-18 09:44:00 -04:00
js8.mod Squashed commit of the following: 2019-09-05 14:07:24 -04:00
js8a.mod Squashed commit of the following: 2019-09-05 14:07:24 -04:00
js8call.desktop Rename to JS8Call 2018-10-04 13:52:52 -04:00
js8call.pro Kill off unused AudioDecoder class 2025-08-16 16:06:05 -04:00
js8params.mod Squashed commit of the following: 2019-09-05 14:07:24 -04:00
JS8Submode.cpp 3 quick tests for C++20 enablement 2025-02-06 10:01:43 -08:00
JS8Submode.hpp Break out common JS8 encode function 2025-01-22 20:22:29 -08:00
jsc.cpp Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
jsc.h Fixed #245: Added partial support for a subset of latin1 charset 2019-11-22 01:34:57 -05:00
jsc_checker.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
jsc_checker.h Cleanup 2018-12-30 20:20:06 -05:00
jsc_list.cpp Fixed #245: Added partial support for a subset of latin1 charset 2019-11-22 01:34:57 -05:00
jsc_map.cpp Fixed #245: Added partial support for a subset of latin1 charset 2019-11-22 01:34:57 -05:00
LazyFillComboBox.cpp Incorporate LazyFillComboBox from wstjx 2024-09-11 04:50:32 -07:00
LazyFillComboBox.hpp Incorporate LazyFillComboBox from wstjx 2024-09-11 04:50:32 -07:00
logqso.cpp Use QStandardPaths::AppLocalDataLocation 2025-03-02 07:30:50 -08:00
logqso.h Use QVariantHash and QVariantMap 2024-11-04 17:48:36 -08:00
logqso.ui Logging time always needs UTC, fix suggested by Joe K0OG 2025-08-18 09:41:13 -04:00
Maidenhead.hpp Add normalize() test cases 2024-11-21 13:48:47 -08:00
main.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
mainwindow.cpp Remove unused includes 2025-10-13 18:18:55 -05:00
mainwindow.h Adding lookahead message ID to MSG response "%1 MSG %2 FROM %3 NEXT MSG ID %4" 2025-10-13 18:14:11 -05:00
mainwindow.ui Perform decoding at a fixed depth of 2 in all cases 2025-02-12 16:01:07 -08:00
make_app.sh Rename to JS8Call 2018-10-04 13:52:52 -04:00
Message.cpp Simplify includes 2024-11-04 06:38:21 -08:00
Message.hpp Use aggregate initializer form for defaults 2024-11-04 06:44:57 -08:00
message_aggregator.desktop Initial Commit 2018-02-08 21:28:33 -05:00
MessageBox.cpp SVN r8543 2018-03-07 01:57:18 -05:00
MessageBox.hpp Initial Commit 2018-02-08 21:28:33 -05:00
MessageClient.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
MessageClient.hpp Decouple spot client from message client 2024-11-05 06:36:43 -08:00
MessageError.cpp Remove pragmas 2024-11-03 06:31:56 -08:00
MessageError.hpp Introduce MessageError namespace 2024-11-03 06:20:05 -08:00
messagereplydialog.cpp Event filtering to functional approach 2024-11-12 08:58:57 -08:00
messagereplydialog.h Initial replacement of keyeater with event filter 2024-11-12 07:50:08 -08:00
messagereplydialog.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
MessageServer.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
MessageServer.h Correct integreal type of message IDs 2025-08-16 16:06:05 -04:00
messagewindow.cpp Fix issue with signal/slot in message window 2025-06-27 15:46:50 -04:00
messagewindow.h Fix issue with signal/slot in message window 2025-06-27 15:46:50 -04:00
messagewindow.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
MetaDataRegistry.cpp Ongoing dead configuration code removal 2024-09-23 06:20:16 -07:00
MetaDataRegistry.hpp Initial Commit 2018-02-08 21:28:33 -05:00
Modes.cpp Alignment tweaks 2024-08-31 10:49:10 -07:00
Modes.hpp JS8 Mode 2018-10-04 12:03:21 -04:00
Modulator.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
Modulator.hpp Make Modulator::bytesAvailable() universal 2025-10-13 18:18:55 -05:00
MultiSettings.cpp Use QVariantHash and QVariantMap 2024-11-04 17:48:36 -08:00
MultiSettings.hpp Merge in WSTJX-improved MultiSettings changes 2024-10-22 10:46:36 -07:00
NetworkAccessManager.hpp Initial Commit 2018-02-08 21:28:33 -05:00
NetworkServerLookup.cpp Correct integral types 2025-08-16 16:06:05 -04:00
NetworkServerLookup.hpp Initial Commit 2018-02-08 21:28:33 -05:00
NotificationAudio.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
NotificationAudio.h Reorder data members 2024-09-16 16:56:18 -07:00
OmniRigTransceiver.cpp Fix mixed-case include 2024-09-07 17:36:01 -07:00
OmniRigTransceiver.hpp Initial Commit 2018-02-08 21:28:33 -05:00
pimpl_h.hpp Initial Commit 2018-02-08 21:28:33 -05:00
pimpl_impl.hpp Initial Commit 2018-02-08 21:28:33 -05:00
plotter.cpp Correct out of bounds array read 2025-08-16 16:06:05 -04:00
plotter.h Correct possible UB 2025-08-16 16:06:05 -04:00
PollingTransceiver.cpp Initial Commit 2018-02-08 21:28:33 -05:00
PollingTransceiver.hpp Initial Commit 2018-02-08 21:28:33 -05:00
ProcessThread.cpp Initial reworking of js8 decoder threading and scheduling 2019-11-20 00:11:30 -05:00
ProcessThread.h Initial reworking of js8 decoder threading and scheduling 2019-11-20 00:11:30 -05:00
PSKReporter.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
PSKReporter.hpp Additiona PSK thread hardening, for Joe 2024-11-09 19:09:42 -08:00
qpriorityqueue.h Initial port to Qt6 2024-08-31 13:13:39 -07:00
qt_helpers.cpp Initial port to Qt6 2024-08-31 13:13:39 -07:00
qt_helpers.hpp Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
Radio.cpp Initial port to Qt6 2024-08-31 13:13:39 -07:00
Radio.hpp Remove UDP_NO_EXPORT 2018-10-04 18:52:28 -04:00
RadioMetaType.cpp Initial port to Qt6 2024-08-31 13:13:39 -07:00
RDP.cpp Variable renaming 2024-12-03 18:32:22 -08:00
RDP.hpp Improve RDP performance 2024-12-03 07:23:55 -08:00
README.md Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
revision_utils.cpp Simplify program_version generation 2024-11-06 20:18:33 -08:00
revision_utils.hpp Simplify version function 2024-11-06 15:25:45 -08:00
SelfDestructMessageBox.cpp Add stopTimer function to SelfDestructMessageBox and connect to SelfDestructMessageBox::finished signal 2025-08-18 09:42:55 -04:00
SelfDestructMessageBox.h Add stopTimer function to SelfDestructMessageBox and connect to SelfDestructMessageBox::finished signal 2025-08-18 09:42:55 -04:00
SettingsGroup.hpp Initial Commit 2018-02-08 21:28:33 -05:00
SignalMeter.cpp Correct include 2024-11-09 06:26:17 -08:00
SignalMeter.hpp Case change. step 2 2024-11-09 06:16:55 -08:00
sleep.h Initial Commit 2018-02-08 21:28:33 -05:00
soundin.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
soundin.h Initial removal of hidden DisableInputResampling 2024-11-29 11:45:00 -08:00
soundout.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
soundout.h Integrate WSJTX sound output changes 2024-09-09 10:05:28 -07:00
SpotClient.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
SpotClient.h Move spot client to network thread 2024-11-09 15:07:20 -08:00
ss.bat Initial Commit 2018-02-08 21:28:33 -05:00
sss.bat Initial Commit 2018-02-08 21:28:33 -05:00
StationList.cpp Band hop tweaks 2025-08-18 09:42:55 -04:00
StationList.hpp Fixed bug in saving of band hopping information 2018-08-09 15:28:23 -04:00
tcp.py Added CQ as a directed command (directed to @ALLCALL) in the API 2020-04-05 11:49:34 -04:00
TCPClient.cpp Fix hiding of overloaded virtual function 2024-08-31 10:01:41 -07:00
TCPClient.h Added n3fjp mapping of custom fields 2019-06-05 11:33:21 -04:00
TraceFile.cpp Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
TraceFile.hpp Initial Commit 2018-02-08 21:28:33 -05:00
Transceiver.cpp Initial Commit 2018-02-08 21:28:33 -05:00
Transceiver.hpp Performing some minimal code cleanup 2018-12-27 10:04:46 -05:00
TransceiverBase.cpp Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
TransceiverBase.hpp Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00
TransceiverFactory.cpp CMake cleanup and modernization 2025-10-13 18:18:55 -05:00
TransceiverFactory.hpp Merged master 8748 2018-08-05 11:33:30 -04:00
TransmitTextEdit.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
TransmitTextEdit.h Fixed typeahead cursor shift on text replace. Ensured typeahead resends callsign if in a directed transmission and the typeahead continues after sending a last bit 2019-11-07 14:20:06 -05:00
udp.py Updated udp.py with the new default port 2019-11-22 15:18:37 -05:00
varicode.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
varicode.h Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
Versions.cmake set version to 2.3.2-rc6 2025-10-13 18:18:55 -05:00
WF.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
WF.hpp Prefix common macros with JS8 2025-01-25 17:20:45 -08:00
wf_palette_design_dialog.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
widegraph.cpp The boilerplate changes to make logging configurable at runtime. 2025-10-13 18:18:55 -05:00
widegraph.h Revise filtering 2025-02-02 08:42:19 -08:00
widegraph.ui Revise filtering 2025-02-02 08:42:19 -08:00
wsjtx-valgrind.linux.supp Initial Commit 2018-02-08 21:28:33 -05:00
wsjtx.desktop Initial Commit 2018-02-08 21:28:33 -05:00
wsjtx.pro.user Reorganize main window and style meter 2018-03-10 16:59:09 -05:00
wsjtx.rc Rename to JS8Call 2018-10-04 13:52:52 -04:00
wsjtx_config.h.in Manual changes to make debug info configurable. 2025-10-13 18:18:55 -05:00

JS8Call

JS8Call is an experiment in combining the robustness of FT8 (a weak-signal mode by K1JT) with a messaging and network protocol layer for weak signal communication. The open source software is designed for connecting amateur radio operators who are operating under weak signal conditions and offers real-time keyboard-to-keyboard messaging, store-and-forward messaging, and automatic station announcements.

Notice

JS8Call is a derivative of the WSJT-X application, restructured and redesigned for message passing using a custom FSK modulation called JS8. It is not supported by nor endorsed by the WSJT-X development group. While the WSJT-X group maintains copyright over the original work and code, JS8Call is a derivative work licensed under and in accordance with the terms of the GPLv3 license. The source code modifications are public and can be found in this repository: https://github.com/js8call/js8call .

  • Read more on the original design inspiration here: https://github.com/jsherer/js8call

  • For release announcements and discussion, join the JS8Call mailing list here: https://groups.io/g/js8call

  • The latest official build and installers are available at https://github.com/js8call/js8call/releases

    • win64.exe for Windows
    • .dmg for Mac
    • _amd64.deb is the installer for Debian-based Linux systems such as Ubuntu, Mint, or Debian itself for regular PCs (not Raspi)
    • x86_64.rpm is the installer for Linux systems using the rpm package format, such as Fedora, for regular PCs.
    • x86_64.AppImage for Linux systems on regular PCs that face dependency problems with whichever of the previous two installers should be pertinent.
    • There is no installer for Raspi yet. For this and other platforms, or if all of our pre-build installers do not work on your particular system, you can try compiling from source code.
  • Documentation is available here: https://docs.google.com/document/d/159S4wqMUVdMA7qBgaSWmU-iDI4C9wd4CuWnetN68O9U/edit?pli=1#heading=h.kfnyge37yfr

  • Read below for recent updates to Qt6 and the removal of Fortran dependencies.

Building JS8Call From Sourcecode

Instructions can be found in docs in the source tree for building JS8Call on MacOS, Linux and Windows, as well as a contributor's guide.

Debugging JS8Call

You can get a lot of debug output reporting what the program does by setting the environment variable QT_LOGGING_RULES to an appropriate value.

The value *.js8=true gives you all output there is.

Each line starts with a "logging category". These can be used to filter, so fewer lines you are not interested in will be given.

For example, if you are interested in lines starting with mainwindow.js8 and configuration.js8 only, to debug a certain problem, set QT_LOGGING_RULES to mainwindow.js8=true;configuration.js8=true to just see what those two have to say.

You find decoder.js8 a bit too noisy, you may use the value *.js8=true;decoder.js8=false to silence it, but still see all the others.

The official documentation of what we are using here can be found at https://doc.qt.io/qt-6/qloggingcategory.html#checking-category-configuration.

History

  • July 6, 2017 - The initial idea of using a modification to the FT8 protocol to support long-form QSOs was developed by Jordan, KN4CRD, and submitted to the WSJT-X mailing list: https://sourceforge.net/p/wsjt/mailman/message/35931540/
  • August 31, 2017 - Jordan, KN4CRD, did a little development and modified WSJT-X to support long-form QSOs using the existing FT8 protocol: https://sourceforge.net/p/wsjt/mailman/message/36020051/ He sent a video example to the WSJT-X group: https://widefido.wistia.com/medias/7bb1uq62ga
  • January 8, 2018 - Jordan, KN4CRD, started working on the design of a long-form QSO application built on top of FT8 with a redesigned interface.
  • February 9, 2018 - Jordan, KN4CRD, submitted question to the WSJT-X group to see if there was any interest in pursuing the idea: https://sourceforge.net/p/wsjt/mailman/message/36221549/
  • February 10, 2018 - Jordan KN4CRD, Julian OH8STN, John N0JDS, and the Portable Digital QRP group did an experiment using FSQ. The idea of JS8Call, combining FT8, long-form QSOs, and FSQCall like features was born.
  • February 11, 2018 - Jordan, KN4CRD, inquired about the idea of integrating long-form messages into WSJT-X: https://sourceforge.net/p/wsjt/mailman/message/36223372/
  • February 12, 2018 - Joe Taylor, K1JT, wrote back: https://sourceforge.net/p/wsjt/mailman/message/36224507/ saying that “Please don't let my comment discourage you from proceeding as you wish, toward something new.”
  • March 4, 2018 - Jordan, KN4CRD, published a design document for JS8Call: https://github.com/jsherer/js8call
  • July 6, 2018 - Version 0.0.1 of JS8Call released to the development group
  • July 15, 2018 - Version 0.1 released - a dozen testers
  • July 21, 2018 - Version 0.2 released - 75 testers
  • July 27, 2018 - Version 0.3 released - 150 testers
  • August 12, 2018 - Version 0.4 released - (“leaked” on QRZ) - 500 testers
  • September 2, 2018 - Version 0.5 released - 3000 testers
  • September 14, 2018 - Version 0.6 released - 5000 testers
  • October 8, 2018 - Version 0.7 released - 6000 testers, name changed to JS8 & JS8Call
  • October 31, 2018 - Version 0.8 released - ~7000 testers
  • November 15, 2018 - Version 0.9 released - ~7500 testers
  • November 30, 2018 - Version 0.10 released - ~7800 testers
  • December 18, 2018 - Version 0.11 released - ~8200 testers
  • January 1, 2019 - Version 0.12 released - ~9000 testers
  • January 23, 2019 - Version 0.13 released - ~9250 testers
  • February 7, 2019 - Version 0.14 released - ~9600 testers
  • February 21, 2019 - Version 1.0.0-RC1 released - ~10000 testers
  • March 11, 2019 - Version 1.0.0-RC2 released - >10000 testers
  • March 26, 2019 - Version 1.0.0-RC3 released - >11000 testers
  • April 1, 2019 - Version 1.0.0 general availability - Public Release!
  • June 6, 2019 - Version 1.1.0 general availability
  • November 29, 2019 - Version 2.0.0 general availability - Fast and Turbo speeds introduced!
  • December 22, 2019 - Version 2.1.0 general availability - Slow speed introduced!

JS8Call Updates to v2.3.x

This is, in the flavor of WSJTX-improved, an 'improved' version of the original JS8Call, the source code for which can be found at: https://bitbucket.org/widefido/js8call/src/js8call/

I am not the original author, and have no desire to create a fork, add new features, etc. My motivation was to have a native version of JS8Call that would run on my Apple Silicon Mac, using a current version of the Qt and Hamlib libraries. Along the way, I discovered and corrected a few bugs, and made some minor visual improvements to the UI.

Anyway.....that's what this does; that's all this does. It's not intended to be anything but a vehicle by which to provide my changes to the original author.

Notable Changes

  • Use of Fortran has been eliminated; everything that was previously implemented in Fortran has been ported to C++.
  • The requirement for a separate decoder process and use of shared memory has been eliminated.
  • Ported to Qt6, which changed the audio classes in a major way. Fortunately the wsjtx-improved team had been down this road already, and had dealt with most of the changes needed to the audio stuff.
  • Vestiges of the original WSJTX codebase that were are longer relevant have been removed.
  • The variable decode depth settings have been removed, as testing demonstrated that decodes beyond a depth of 2 were largely hope and dreams. The implementation now decodes at a fixed depth of 2 in all cases.
  • Did a bit of work with alignment of data in the tables for better presentation.
  • Improved the performance and appearance of the audio input VU meter.
  • The attenuation slider was designed to look like an audio fader control, and it does a decent job of this in the windows style. However, the underlying QSlider control is not great in terms of styling consistency; it looks ok but not great in the fusion style, and quite bizarre in the macos style. I've attempted to rectify this via implementation of a custom-drawn QSlider implementation that consistently looks like a fader on any platform style, with the added advantage of always displaying the dB attenuation value.
  • Adapted the waterfall scale drawing methodology to accommodate high-DPI displays.
  • Hovering on the waterfall display now shows the frequency as a tooltip.
  • The waterfall spectrum display has been substantially improved. This does mean that you'll have to re-select your preferred spectrum choice on first use, if your choice wasn't the default of 'Cumulative'. 'Linear Average' with a smoothing factor of 3 is particularly useful; either is in general a more helpful choice than the raw data shown by 'Current'.
  • The waterfall display for Cumulative was displaying raw power, uncorrected to dB. Fixed.
  • The waterfall display will now intelligently redraw on resize, rather than clearing.
  • The 200Hz WSPR portion of the 30m band is now displayed more clearly, i.e., we label it as WSPR, and the sub-band indicator is located in a manner consistent with that of the JS8 sub-band indicators.
  • Converted the boost library to an out-of-tree build.
  • Updated the sqlite library.
  • Updated the CRCpp library.
  • Added the Eigen library.
  • Fixed an issue where the message server and APRS client should have been moved to the network thread, but because they had parent objects, the moves failed.
  • Ported the updated PSK reporter from the upstream WSJTX code, which allows for use of a TCP connection, and implements all of the advances in the upstream code, i.e., more efficient spotting to PSK Reporter, omission of redundant spots, and posting of spots is now spread more widely in time. As with WSJTX, temporarily, in support of the HamSCI Festivals of Eclipse Ionospheric Science, spots will be transmitted more frequently during solar eclipses; see https://www.hamsci.org/eclipse for details.
  • Incorporated revised audio device selection methodology from the upstream WSJTX implementation:
    1. Where possible audio devices that disappear are not forgotten until the user selects another device, this should allow temporarily missing devices or forgetting to switch on devices before starting JS8Call to be handled more cleanly.
    2. Enumerating audio devices is expensive and on Linux may take many seconds per device. To avoid lengthy blocking behavior until it is absolutely necessary, audio devices are not enumerated until one of the "Settings->Audio" device drop-down lists is opened. Elsewhere when devices must be discovered the enumeration stops as soon as the configured device is discovered. A status bar message is posted when audio devices are being enumerated as a reminder that the UI may block while this is happening.
  • Status messages couldn't be displayed in the status bar due to the progress widget taking up all available space; for the moment at least, it's restricted to be a defined size.
  • Corrected a display resizing issue in the topmost section; seems to have affected only Linux systems, but in theory was broken on any platform.
  • Updated the UDP reporting API to be multicast-aware.
  • Separated display of distance and azimuth in the Calls table.
  • Hovering over an azimuth in the Calls table will now display the closest cardinal compass direction.
  • Azimuth and distance calculations will now use the 4th Maidenhead pair, i.e., the Extended field, if present.
  • The Configuration dialog would allow invalid grid squares to be input; it will now allow only a valid square.
  • Removed the undocumented and hidden Audio/DisableInputResampling=true configuration option.
  • Windows, and only Windows, required a workaround to the Modulator as a result of changes in Qt 6.4, which presented as no sound being generated; OSX and Linux worked fine. The issue is described in https://bugreports.qt.io/browse/QTBUG-108672, and the workaround seems like a grody hack, but it's what WSJTX uses for the same issue, so we're in fine company here.

Qt6 by default will display using a platform-specific style. As a result, there will be some minor display inconsistencies, e.g., progress bars, as displayed in the bottom of the main window, are particularly platform-specific.

The earliest version of OSX that Qt6 supports is 11.0. It's set up to compile and link to run on 11.0 or later, but I've only tested it on 14.6, 14.7, and 15.3.

Testing on Linux and Windows has been ably provided by Joe Counsil, K0OG, who does the bulk of the grunt work while I largely just type things and drink coffee.

Allan Bazinet, W6BAZ