No description
Find a file
2024-11-07 13:12:55 -08:00
artwork Delete old WSJTX splash screen 2024-10-21 09:38:05 -07:00
Audio Use timezone functions compatible with Qt 6.4 2024-10-21 13:44:12 -07:00
CMake Fixing hamlib case, second step 2024-09-11 14:50:18 -07:00
contrib Initial Commit 2018-02-08 21:28:33 -05:00
Darwin Fixed #171, #172, #173: Fix Mojave audio permissions 2019-04-21 22:29:52 -04:00
debian Initial Commit 2018-02-08 21:28:33 -05:00
icons Fixed windows install logo 2019-04-28 20:11:44 -04:00
lib Remove unused prcom common include 2024-11-01 16:42:05 -07:00
logbook Use AppDataLocation 2024-08-31 10:57:50 -07: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
qmake_only Initial Commit 2018-02-08 21:28:33 -05:00
vendor/sqlite3 Update SQLite to 3.47.0 2024-10-27 06:42:36 -07:00
.gitignore Merged master 8748 2018-08-05 11:33:30 -04: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 Use chrono duration convenience types 2024-11-02 16:10:10 -07:00
APRSISClient.h APRSIS delay / skip percentage is now configurable on the client (not exposed to user though) 2020-04-11 11:46:12 -04:00
AttenuationSlider.cpp Commentary 2024-10-15 06:16:17 -07:00
AttenuationSlider.hpp Comment include guard #endif 2024-10-14 05:57:06 -07:00
AudioDecoder.cpp Initial port to Qt6 2024-08-31 13:13:39 -07:00
AudioDecoder.h Trying out new notification code 2019-10-15 13:52:30 -04: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 Rename to JS8Call 2018-10-04 13:52:52 -04:00
CMakeLists.txt Remove unused NetworkMessage module 2024-11-03 06:27:34 -08:00
commons.h Dead shared code removal, nzhsym 2024-11-01 10:37:33 -07:00
Configuration.cpp Use consistent naming 2024-11-03 08:11:34 -08:00
Configuration.hpp Use consistent naming 2024-11-03 08:11:34 -08: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
crc.h Added CRC-5 to directed messages to confirm message is valid 2018-07-14 22:05:08 -04:00
cty.dat Merged master 8748 2018-08-05 11:33:30 -04:00
decodedtext.cpp Remove contest mode related code 2024-08-31 13:48:46 -07:00
decodedtext.h Remove contest mode related code 2024-08-31 13:48:46 -07:00
Decoder.cpp Use modern call format 2024-08-31 10:48:53 -07:00
Decoder.h Updated decoder subprocess error handling to restart instead of crash the app 2019-11-22 15:00:06 -05:00
Detector.cpp Use std::rotate in detector 2024-09-24 17:14:18 -07:00
Detector.hpp Updated detector to reset kin on drift 2020-05-13 21:14:15 -04: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 Initial commit of manual clock drift syncronization 2018-09-18 17:24:07 -04: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 Initial Commit 2018-02-08 21:28:33 -05:00
EmulateSplitTransceiver.hpp Initial Commit 2018-02-08 21:28:33 -05: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
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
HamlibTransceiver.cpp Move to 4.6 Hamlib 2024-08-31 08:26:10 -07: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 Use AppDataLocation 2024-08-31 10:57:50 -07: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
images.qrc Added up/down indicators for VFO 2019-12-27 19:46:36 -05:00
Inbox.cpp Rename function to be in concernt with SQL API 2024-11-04 05:46:41 -08:00
Inbox.h Convert Message class to implicitly shared 2024-11-03 14:26:42 -08:00
INSTALL Change repo location to github 2024-11-07 07:44:47 -08:00
INSTALL-WSJTX Updated dependencies list 2018-11-11 15:06:45 -05: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 WF namespace 2024-09-14 06:53:12 -07:00
js8params.mod Squashed commit of the following: 2019-09-05 14:07:24 -04:00
JS8Submode.cpp Add tone spacing to JS8 submode constants 2024-10-28 13:20:23 -07:00
JS8Submode.hpp Add tone spacing to JS8 submode constants 2024-10-28 13:20:23 -07: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 Qt5 deprecation fixes 2024-08-31 10:09:53 -07: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
keyeater.cpp Eliminate unused named parameter 2024-08-31 10:09:39 -07:00
keyeater.h Squashed commit of the following: 2019-09-05 14:07:24 -04:00
killbyname.cpp Fix warnings in killbyname() 2024-09-13 12:33:22 -07: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 QVariantHash and QVariantMap 2024-11-04 17:48:36 -08:00
logqso.h Use QVariantHash and QVariantMap 2024-11-04 17:48:36 -08:00
logqso.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
MaidenheadLocatorValidator.cpp Initial Commit 2018-02-08 21:28:33 -05:00
MaidenheadLocatorValidator.hpp Elminate dead doubleextended enum 2024-08-31 09:56:09 -07:00
main.cpp Simplify version function 2024-11-06 15:25:45 -08:00
mainwindow.cpp Remove APRSClient parent; will move to thread 2024-11-07 13:12:55 -08:00
mainwindow.h Lose unused revision concept 2024-11-06 15:09:01 -08:00
mainwindow.ui Return to main window default size pre-Qt6 work 2024-10-31 08:27:17 -07: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 Move error handling connection to implementation 2024-11-06 06:28:51 -08: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 Added fallback huffman table for basic text packing 2018-10-03 12:36:45 -04:00
messagereplydialog.h Fixed message reply dialog to be non-modal 2018-09-11 13:35:29 -04:00
messagereplydialog.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
MessageServer.cpp Correct includes 2024-11-03 23:24:03 -08:00
MessageServer.h Convert Message class to implicitly shared 2024-11-03 14:26:42 -08:00
messagewindow.cpp Alignment tweaks 2024-08-31 10:54:43 -07:00
messagewindow.h Convert Message class to implicitly shared 2024-11-03 14:26:42 -08: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 Document and simplify modulator start logic 2024-10-29 19:02:29 -07:00
Modulator.hpp Formatting 2024-10-30 05:20:05 -07: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 Use C++17 [[fallthrough]] 2024-09-13 12:09:49 -07:00
NetworkServerLookup.hpp Initial Commit 2018-02-08 21:28:33 -05:00
NotificationAudio.cpp Final polish on NotificationAudio class 2024-09-16 16:54:29 -07: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 Improve dial display efficiency 2024-11-07 13:10:26 -08:00
plotter.h Improve dial display efficiency 2024-11-07 13:10:26 -08: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 Use chrono duration convenience types 2024-11-02 16:10:10 -07:00
PSKReporter.hpp Don’t expose eclipse determination function 2024-09-06 13:49:32 -07: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
README Change repo location to github 2024-11-07 07:44:47 -08:00
README.md Update README 2024-10-27 06:57:34 -07: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 Intialization order matches declaration order 2024-08-31 10:09:13 -07:00
SelfDestructMessageBox.h Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
SettingsGroup.hpp Initial Commit 2018-02-08 21:28:33 -05:00
signalmeter.cpp Use in-class initialization 2024-09-06 05:55:18 -07:00
signalmeter.h Restore slot capability to SignalMeter::setValue() 2024-09-03 08:56:45 -07:00
sleep.h Initial Commit 2018-02-08 21:28:33 -05:00
soundin.cpp Initial port to Qt6 2024-08-31 13:13:39 -07:00
soundin.h Initial port to Qt6 2024-08-31 13:13:39 -07:00
soundout.cpp Formatting 2024-09-09 10:10:47 -07:00
soundout.h Integrate WSJTX sound output changes 2024-09-09 10:05:28 -07:00
SpotClient.cpp Host program_version invariant 2024-11-06 11:36:07 -08:00
SpotClient.h Host program_version invariant 2024-11-06 11:36:07 -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 Use timezone functions compatible with Qt 6.4 2024-10-21 13:44:12 -07: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 Initial Commit 2018-02-08 21:28:33 -05:00
TransceiverBase.hpp Initial Commit 2018-02-08 21:28:33 -05:00
TransceiverFactory.cpp Initial Commit 2018-02-08 21:28:33 -05:00
TransceiverFactory.hpp Merged master 8748 2018-08-05 11:33:30 -04:00
TransmitTextEdit.cpp Initial port to Qt6 2024-08-31 13:13:39 -07: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 Use matchView() at Qt 6.5 or greater 2024-10-21 09:58:32 -07:00
varicode.h Initial round of Qt5 deprecation fixes 2024-08-31 09:40:28 -07:00
Versions.cmake Bump version to 2.3.0 2024-10-28 09:44:52 -07:00
WF.cpp Use common registry for WF types 2024-09-14 07:04:03 -07:00
WF.hpp Kill of unused reference spectrum support 2024-09-26 06:32:08 -07:00
wf_palette_design_dialog.ui Initial port to Qt6 2024-08-31 13:13:39 -07:00
widegraph.cpp Handle high-DPI displays in plotter 2024-11-07 07:31:29 -08:00
widegraph.h WideGraph no longer references fSpan() 2024-10-25 13:31:07 -07:00
widegraph.ui Remove hidden cbControls widget, first pass 2024-10-20 10:02:38 -07: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.qrc.in Initial Commit 2018-02-08 21:28:33 -05:00
wsjtx.rc Rename to JS8Call 2018-10-04 13:52:52 -04:00
wsjtx_config.h.in Purge old SOFT_KEYING defines 2024-10-27 15:08:45 -07:00

JS8Call

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.

I did stumble over a very signficant issue in the way that the underlying WSJTX code performed Fortran string passing; this bug affects code compiled with GNU Fortran >= 8.0 and a non-GNU C++ compiler, such as clang. This bug exhibits as seemingly random behavior, often things like inexplicable crashes in azimuth and distance calculation. The fix has been provided to the WSJTX team, and it's present in WSJTX-improved starting in the test version of August 29th, 2024.

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.

Allan Bazinet, W6BAZ

Notable Changes

  • Fixed the aforementioned string passing bug; crashes from this were typically random, but it'd usually abort with a segmentation fault in azdist(), sometimes in genjs8().
  • The subtractjs8() routine used a common block for large, parameterized arrays. I'd see crashes here frequently; it's been a long time since I did any serious development in Fortran, but if memory serves, this is a dark corner where in terms of how large that common block is, first one in wins, and you hope that it's the larger of the parameterized invocations. If instead, the smaller one is dominant, then you'll either trash memory after the common block or crash with a segfault. Changed this to use allocations instead of a common block, which seems like a solid solution, but again, been a long time since I did this sort of thing in anger.
  • Fixed a memory leak present when a custom push to talk command was configured. I haven't gone looking for memory leaks with the analysis tools; that one just happened to stand out.
  • Fixed a buffer overflow in the code that prints the last transmit.
  • 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.
  • Incorporated a number of fixes from the upstream WSJTX Fortran library. Key among these was a change to how VHF contest mode was handled in some of the common routines; in short, they made things a lot simpler, which eliminated the need for passing a lot of dummy parameters just to keep them happy.
  • Eliminated a large number of unused dummy parameters in the JS8 decoder; warning spam from the Fortran compiler was a bit distracting, and hid actual issues, such as uninitialized variables in the optimized code.
  • Did a bit of work with alignment of data in the tables for better presentation.
  • The audio input VU meter looked off to me, as if the scale was on the wrong side; flipped it to be next to the level and peak hold, which looks more normal to me. Perhaps just a taste thing; easy enough to change it back if necessary. The peak hold indicator was very pixelated on a high-DPI display, so it's now antialiased. Fixed the scale to match the VU bar location, and addressed the fact that this widget would both update when if was not necessary to do so, would fail to update when it was necessary to do so, and would leak its children. All these are also present in the original WSJTX code; I need to make them aware, note to self.
  • The audio input VU meter was set up such that the 'good' range was 15 dB from the bottom, but only 5 dB from the top. I've changed it such that it's 15 dB from both ends, which moves the 30 dB tuning spot to a major scale tick.
  • 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.
  • Changed the waterfall scale drawing methodology slightly to avoid the scale font looking pixelated on high-DPI displays. Fonts will still be pixelated in the waterfall display, but it's arguably an effect there, like a Tektronix scope. The plot drawing code uses a number of intermediate pixmaps, so dealing with the font in the waterfall is complicated; it'd be nice to move this to the GL approach taken by SDRangel.
  • Hovering on the waterfall display now shows the frequency as a tooltip.
  • The waterfall display drawing hot loop, in particular, the spectrum display, was horribly inefficient and practically incomprehensible. I suspect this arose from originally having only a couple of types of spectrum display in the WSJTX code, so a boolean was used to differentiate them. They then added more types, and more types, additional booleans each time, and wow, figuring out what y means in the spectrum drawing code becomes a voyage of discovery every time through the loop. To address this horror, moved the WFPalette code into a new WF namespace as WF::Palette, and added a WF::Spectrum class enum to differentiate the spectrum types, as they're all mutually exclusive, so, yeah, we don't need umpteen boolean tests to know what we're drawing now. More can be done here, but this stops the bleeding for the moment. 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', though, seriously, Cumulative is The One. Just sayin'.
  • Doubled the gain on the Linear Average spectrum display mode, to match that of WSJTX.
  • 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 Fortran code generation to use 2018 semantics, i.e., -frecursive, when dealing with large arrays that exceed available stack space, i.e., use allocation, rather than a hidden static block, as this tends to be less surprising behavior in modern usage on systems where we have memory to burn.
  • 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. Other than a minor thread affinity change required to the APRS client's timer, all the proper setup was already in place for the moves, i.e., they were connected to be deleted when the network thread ended, they just happened to have parents, and so the moves didn't actually work, resulting in these components remaining on the originating thread.
  • 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.
  • The DriftingDateTime class was a completely static class, masquerading as a namespace. Since any minimum required compiler is now namespace-aware, converted it to a namespace. Added a currentSecsSinceEpoch() fuction to match that of QDateTime.
  • Extracted JS8 submode constants and computation functions to a JS8::Submode namespace, for clarity; these were previously scattered throughout the MainWindow class, with some duplication in the plotter.
  • 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 behaviour 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.
  • Removed an old workaround on OSX for sub-menu display issues that do not seem to be relevant to Qt6.
  • Removed the UI code backing unused old WSJTX items still present, but hidden, in the UI. Most of these were completely dead; those that were still performing work were typically moved to instance variables and supporting code.
  • Removed the vestiges of the never-used splash screen code. This change evidenced what seems to have been race conditions in and inadequate hardening of the MultiSettings class, addressed by bringing it forward to the WSJTX-improved version. This same change eliminated manual setup of 'quit on last window close' via signals and slots, as Qt has implemented this by default for a long time now.
  • The UI was hardcoding use of MS Shell Dlg 2 font in a few places, principally in the dial offset display and the clock. That font is now as one with the dust of history, even on Windows; it was taking the startup about 200 milliseconds to figure out suitable replacements, and thats time we cant get back. Given that it was a sans-serif font very similar to Tahoma or Arial, which are the Qt system defaults on just about any platform, Ive just told it to use the default font instead.
  • The Check for Updates function now makes use of the QVersionNumber class.
  • Use of separate 'transmit frequency' and 'receive frequency' concepts in the codebase, a carryover from WSTJX, has been eliminated.
  • Corrected a display resizing issue in the topmost section; seems to have affected only Linux systems, but in theory was broken on any platform.
  • 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.

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.

Compiling on OSX

  1. Obtain the current version of GNU Fortran, as of this writing 14.2, from https://github.com/fxcoudert/gfortran-for-macOS, and install it; you'll end up with an installation in /usr/local/gfortran.

  2. Obtain the current version of CMake from https://cmake.org/download/. Both source and binary distributions are available; I usually obtain the source distribution and compile, but whatever floats your boat is fine.

  3. Create a directory in which to build up the dependencies; the name of this directory doesn't matter, but must be used consistently, e.g., /Users/<username>/Development/js8libs. Everything we require as a dependency will be installed to this path. For purposes of clarity in this document, we'll use:

    /Users/alb/Development/js8libs
    

    Modify as appropriate for your own username and directory structure.

  4. Obtain the current release of libusb, presently version 1.0.27, from https://sourceforge.net/projects/libusb/. Unpack the source distribution and install it to the dependencies directory:

    ./configure --prefix=/Users/alb/Development/js8libs
    make
    make install
    
  5. Obtain the current daily snapshot of the Hamlib code from https://n0nb.users.sourceforge.net/; at present, this will be some master build of 4.6. Unpack the source distribution and install it to the dependencies directory:

    ./configure --prefix=/Users/alb/Development/js8libs
    make
    make install
    
  6. Obtain the current release of fftw, presently version 3.3.10, from https://www.fftw.org/. Unpack the source distribution and install it to the dependencies directory:

    ./configure CFLAGS=-mmacosx-version-min=11.0 \
                --prefix=/Users/alb/Development/js8libs \
                --enable-single \
                --enable-threads
    make
    make install
    
  7. Obtain the current release of boost, presently 1.86.0, from https://www.boost.org/. Unpack the source distribution and install it to the dependencies directory:

    ./bootstrap.sh --prefix=/Users/alb/Development/js8libs
    ./b2 -a -q
    ./b2 -a -q install
    
  8. Obtain and install Qt 6, using the documentation here: https://doc.qt.io/qt-6/macos-building.html. When configuring, use the usual -prefix option to install the built products into the dependencies directory.

  9. Optionally, obtain and install Qt Creator: https://wiki.qt.io/Building_Qt_Creator_from_Git. By now, you should be familiar with use of the dependencies directory, so we'll leave that as an exercise for the student. You got this.

    While not strictly necessary, Qt Creator certainly makes debugging relatively simple, so I'd go for it, frankly.

  10. Create a build directory, typically under this source tree, and run cmake to configure the build, followed by a make install.

    mkdir build
    cd build
    cmake -DCMAKE_PREFIX_PATH=/Users/alb/Development/js8libs \
           -DCMAKE_BUILD_TYPE=Release ..
    make install
    

    There should be a small handful of Fortran warnings; it's practically impossible to get rid of all of them; some are false positives, and some just reflect the fact that it's a language with a lot of history behind it, and certain things, like using the same array for both in and out intents, will tend to upset it, even if that usage is not a problem. If all goes well, you should end up with a js8call application in the build directory. Test using:

    open ./js8call.app
    

    Once you're satisfied with the test results, copy the js8call application to /Applications.