Disclaimer This software is provided for educational purposes only. You are solely responsible for ensuring full compliance with all applicable local, national, and international radiocommunication laws and regulations. This project is distributed under the GNU General Public License v3.0 (GPLv3); see
COPYINGfor details.
This document describes the code changes currently present in this fork, compared to the original WSJT-X source snapshot used as base.
Version 1.2 is a focused refinement of WSJT-CB 1.0. This release does not try to add complexity; instead, it makes the CB-oriented workflow cleaner, more reliable, and more consistent for everyday operation.
Compared with 1.0, version 1.2 improves the handling of CB-to-CB contacts, simplifies the interface by removing features that are less relevant to the project direction, and strengthens packaging, branding, and application identity.
- Improved CB-to-CB QSO handling, especially around signal reports, free-text parsing, and final exchange messages such as
RR73and73. - More reliable AutoSeq and logging flow during non-standard CB callsign contacts, with fewer edge-case failures and cleaner end-of-QSO progression.
- Refined CB country recognition and decoded text presentation.
- Corrected and cleaned up country naming and lookup behavior, including fixes for mismatches such as
U.S.A.. - Unknown CB prefixes are no longer shown with rough placeholder labels, making the decoded display cleaner and more consistent.
- PSK Reporter spotting is now enabled by default so a fresh installation is immediately more useful without extra setup.
- Removed older or less relevant legacy components, including the Astronomical Data widget, ALLCALL7 filtering logic, legacy side tools, and several obsolete subprojects and documentation pieces.
- WSJT-CB branding is now more consistent across the UI, help menu, log files, configuration names, and installer-related paths.
- The help area has been simplified and a Telegram group entry has been added.
- Windows packaging has been improved with a dedicated
1.2.0installer configuration and fixes for country-file lookup in installed environments.
Version 1.2 is a maturity release. It sharpens the reliability of CB-specific operating flows, cleans up presentation and country handling, reduces legacy baggage, and delivers a more coherent WSJT-CB experience from first launch to daily use.
When two non-standard/CB callsigns are exchanged in FT8, one callsign may be sent as a hash.
Because of this, third-party listeners can see decodes like <...> 26AT016 instead of 30AT084 26AT016.
This is a protocol/encoding behavior, not an AutoSeq bug. If your station has not yet learned the hash-to-callsign mapping (for example because that station has not been decoded in clear text yet), the real callsign may remain hidden until a later decode provides that mapping.
CMakeLists.txtRadio.hppRadio.cppmodels/Bands.cppmodels/FrequencyList.cppwidgets/mainwindow.cppmain.cpp
Files:
Radio.hppRadio.cpp
Changes:
- Added
Radio::is_cb_callsign(QString const&). - Added
Radio::cb_country_prefix(QString const&)so CB country lookup can use only the leading numeric prefix, including compound calls such as999ZZ/ZZ. - Added CB callsign regex:
^[0-9]{1,3}[A-Z]{1,2}[0-9]{1,3}$- special-case extension for 4-digit unit numbers only with a 1-digit country prefix
- compound extension
^[0-9]{1,3}[A-Z]{1,2}/[A-Z]{2}$
- Extended
Radio::is_callsign(...)so CB calls are treated as valid callsigns.
Impact:
- Callsigns like
1A1,26AT101,21AT106,999ZZ999,1AT1000, and999ZZ/ZZare accepted by validation logic used by the UI and message processing flow.
Examples:
| Callsign | Accepted | Reason |
|---|---|---|
1A1 |
Yes | 1-digit prefix, 1 letter, 1-digit suffix |
1TT1 |
Yes | 1-digit prefix, 2 letters, 1-digit suffix |
1TT01 |
Yes | 1-digit prefix, 2 letters, 2-digit suffix |
1TT001 |
Yes | 1-digit prefix, 2 letters, 3-digit suffix |
1TT1000 |
Yes | 1-digit prefix, 2 letters, 4-digit suffix allowed by special case |
1AT1000 |
Yes | 1-digit prefix, 2 letters, 4-digit suffix allowed by special case |
11TT1 |
Yes | 2-digit prefix, 2 letters, 1-digit suffix |
111TT11 |
Yes | 3-digit prefix, 2 letters, 2-digit suffix |
111TT999 |
Yes | 3-digit prefix, 2 letters, 3-digit suffix |
26AT715 |
Yes | 2-digit prefix, 2 letters, 3-digit suffix |
999ZZ/ZZ |
Yes | 3-digit prefix, 2 letters, slash, 2-letter suffix |
26AT1000 |
No | 4-digit suffix is not allowed with a 2-digit prefix |
111TT1000 |
No | 4-digit suffix is not allowed with a 3-digit prefix |
99Z9999 |
No | 4-digit suffix is not allowed with a 2-digit prefix |
1TT10000 |
No | suffix longer than 4 digits is not allowed |
1TT |
No | missing numeric suffix |
1AT |
No | missing numeric suffix |
AT1000 |
No | missing numeric prefix |
AAA |
No | letters only; numeric prefix and suffix are both missing |
123 |
No | digits only; the alphabetic middle part is missing |
12A |
No | missing numeric suffix |
12ABC1 |
No | 3-letter middle part is not allowed; only 1 or 2 letters are accepted |
ABC123 |
No | missing numeric prefix |
1/AT100 |
No | slash is only allowed as a final /LL suffix after the CB stem |
Files:
models/Bands.cppmodels/FrequencyList.cpp
Changes:
- Added ADIF-style band entry:
11mfrom26.965 MHzto27.405 MHz.
- Limited the main UI to CB-safe operating modes:
FT8FT4FST4Q65
- Hidden from the main UI:
JT4JT9JT65MSK144FST4WWSPREchoFreqCal
- Added/kept default CB working frequencies:
FT8:27.265 MHz(27265000Hz), labelCB, preferredFT8:27.045 MHz(27045000Hz), labelCB (2nd)FT4:27.045 MHz(27045000Hz), labelCBFST4:27.045 MHz(27045000Hz), labelCBQ65:27.045 MHz(27045000Hz), labelCB
Impact:
- The fork no longer treats 27.265 MHz as out-of-band for normal operation in this added 11m segment.
- FT8 keeps the dual-frequency choice on CB, while the other exposed CB modes default to
27.045 MHz. - Modes without reliable CB callsign support are no longer user-selectable from the main UI, reducing accidental use of unsupported workflows.
Files:
logbook/AD1CCty.cppwidgets/displaytext.cpp
Changes:
- Added CB country-resolution using the numeric prefix for CB callsigns matching
N{1,3}L{1,2}N{1,3}andN{1,3}L{1,2}/L{2}. - Added static NNN→country map based on international CB prefix list.
- Added lookup in
AD1CCty::lookup(...)before standard DXCC lookup. For CB callsigns it normalizes the numeric prefix to a zero-paddedNNN, then returns a record withentity_namecountry andprimary_prefixNNN. - Kept fallback lookup behavior unchanged for regular non-CB callsigns.
Impact:
- CB calls like
001AB123,1AT106, and26AT101now display the CB country directly in decoded text, instead of falling back to DXCC prefix logic.
File:
widgets/mainwindow.cpp
Main changes:
-
auto_sequence(...)- Added handling for non-standard decodes clearly addressed to local station.
- Added CB-specific detection for incoming tokens:
+NN,-NN,R+NN,R-NN,RR73,RRR,73.
- Allows AutoSeq progression when both stations use long CB-style callsigns.
-
processMessage(...)- Accepts CB free-text messages addressed to local station even without
<...>wrappers. - Adds recovery when parser returns invalid/partial
hiscall(for example fromR+13), forcing the currently selected DX callsign when needed. - Adds CB pair fallback logic to avoid stalled QSO state when standard FT8 parsing for two long non-standard calls is ambiguous.
- Uses guarded numeric parsing (
toInt(&ok)) to avoid false transitions from empty tokens.
- Accepts CB free-text messages addressed to local station even without
-
genStdMsgs(...)- For two long CB non-standard calls, generates a deterministic, encodable sequence:
- Tx1:
<HISCALL> MYCALL - Tx2:
HISCALL +/-NN - Tx3:
HISCALL R+/-NN - Tx4:
HISCALL RR73 - Tx5:
HISCALL 73
- Tx1:
- Avoids unreliable
CALL CALL +/-NNpatterns that can fail with long non-standard pairs.
- For two long CB non-standard calls, generates a deterministic, encodable sequence:
Impact:
- Auto-sequencing progresses correctly in CB-to-CB QSOs and includes report/roger/signoff phases instead of looping at CQ or report exchanges.
File:
widgets/mainwindow.cpp
Changes:
MainWindow::not_GA_warning_message()is now intentionally empty.
Impact:
- The pre-release popup is removed.
- The related expiration behavior tied to that warning flow is disabled in this fork.
File:
main.cpp
Changes:
- Application name changed to:
WSJT-CB by 1AT106 - 1XZ732 - 161XZ085
Impact:
- Updated program title/identity in runtime metadata and window/application naming derived from Qt application name.
File:
CMakeLists.txt
Changes:
- Added early Fortran compiler detection before
project(...):- checks
gfortran,ifx,ifort,flang-new,flang,f95,f90 - clear fatal message if missing.
- checks
- Added
WSJT_ENABLE_WERRORoption (defaultOFF) to make-Werroroptional. - Improved Boost.Log discovery:
- normal CMake config search first
- fallback with
Boost_NO_BOOST_CMAKE=ON - clearer fatal error with Debian/Ubuntu package hint.
- Kept/documented toggles used for local builds:
WSJT_SKIP_MANPAGESWSJT_GENERATE_DOCS
Impact:
- More robust configuration on Kubuntu/Ubuntu systems with clearer dependency failures and easier local builds.
These package names were verified against Ubuntu/Kubuntu Noble repositories:
build-essentialcmakeninja-buildgfortranlibudev-devlibboost-log-devlibboost-thread-devlibfftw3-devlibhamlib-devlibusb-1.0-0-devqtbase5-devqtmultimedia5-devqttools5-devqttools5-dev-toolslibqt5serialport5-devlibqt5websockets5-devasciidoc(only needed if manpages are generated)
Example local configure command (no manpages/docs):
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DWSJT_SKIP_MANPAGES=ON \
-DWSJT_GENERATE_DOCS=OFFThese package names are suitable for Debian 12 Bookworm when building a
release .deb locally:
build-essentialcmakeninja-buildgfortrandpkg-devdebhelperlibudev-devlibboost-log-devlibboost-thread-devlibfftw3-devlibhamlib-devlibusb-1.0-0-devqtbase5-devqtmultimedia5-devqttools5-devqttools5-dev-toolslibqt5serialport5-devlibqt5websockets5-dev
Install them with:
sudo apt update
sudo apt install -y \
build-essential cmake ninja-build gfortran dpkg-dev debhelper \
libudev-dev libboost-log-dev libboost-thread-dev libfftw3-dev \
libhamlib-dev libusb-1.0-0-dev qtbase5-dev qtmultimedia5-dev \
qttools5-dev qttools5-dev-tools libqt5serialport5-dev \
libqt5websockets5-devBuild and package manually:
cmake -S . -B build-debian12 -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DWSJT_SKIP_MANPAGES=ON \
-DWSJT_GENERATE_DOCS=OFF
cmake --build build-debian12 -j"$(nproc)"
cpack --config build-debian12/CPackConfig.cmake -G DEBOr use the helper script included in this repository:
./scripts/build-debian12-deb.shThe generated package will be named like:
build-debian12/wsjtcb_1.2.0_amd64.deb
The repository also includes a GitHub Actions workflow at
.github/workflows/release-deb.yml that builds the Debian package and attaches
it to a published GitHub Release.
These package names are for Arch Linux and CachyOS (Arch-based distributions):
base-devel(includes essential build tools)cmakeninjagcc-fortran(provides gfortran)boost(includes boost-log and boost-thread)fftwhamliblibusbqt5-baseqt5-multimediaqt5-toolsqt5-serialportqt5-websocketsasciidoc(only needed if manpages are generated)
Example local configure command (no manpages/docs):
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DWSJT_SKIP_MANPAGES=ON \
-DWSJT_GENERATE_DOCS=OFF