Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
4a06f80
Adding lookahead message ID to MSG response "%1 MSG %2 FROM %3 NEXT M…
rruchte Jul 20, 2025
928ae1e
Fixing SQL for lookahead message IDs
rruchte Aug 13, 2025
fdaa3ec
Fixing SQL for lookahead message IDs
rruchte Aug 14, 2025
6053cb0
Fixing lookahead message IDs for group messages
rruchte Aug 15, 2025
bd45eff
Make it clearer how timestamps are coded into ints.
Chris-AC9KH Oct 13, 2025
5de39a6
Prevent auto-replies to commands that would otherwise break an incomi…
Chris-AC9KH Aug 17, 2025
a69be32
set version to 2.3.2-rc6
Chris-AC9KH Aug 17, 2025
3511369
add Xcode/ to .gitignore for Mac developers
Chris-AC9KH Aug 26, 2025
db83bbb
- New build documentation changes for MacOS, Linux and Windows
Chris-AC9KH Jul 18, 2025
d0efdb9
Correction to Linux build commands
Chris-AC9KH Aug 19, 2025
fce301c
Update MacOS build instructions to use pre-built libraries.
Chris-AC9KH Aug 24, 2025
ea6e27e
Improve the build documentation for Linux.
aknrdureegaesr Aug 29, 2025
fddae76
CMake cleanup and modernization
bazineta Sep 15, 2025
6b3924e
Add CMAKE_EXE_LINKER_FLAGS for Windows builds. Prevents JS8Call from …
Chris-AC9KH Oct 9, 2025
01c0ac1
Make Modulator::bytesAvailable() universal
bazineta Oct 9, 2025
a29ede4
add WIN32 target to qt_add_executable()
Chris-AC9KH Oct 11, 2025
5deee2e
Manual changes to make debug info configurable.
aknrdureegaesr Oct 12, 2025
aa27ee6
The boilerplate changes to make logging configurable at runtime.
aknrdureegaesr Oct 12, 2025
ff8e99b
add all Xcode and Qt Creator patches to .gitignore
Chris-AC9KH Oct 13, 2025
0340f36
Correct MODE.SET_SPEED API
bazineta Sep 1, 2025
f5fd0a7
Remove unused includes
bazineta Sep 2, 2025
c93f5b8
Remove deprecated <cstdbool> header
bazineta Sep 4, 2025
3585107
Remove unused <cmath> include
bazineta Sep 4, 2025
9cd6b7e
Document the drifting date time.
aknrdureegaesr Oct 5, 2025
e8c61ef
Removing more files no longer needed to complete the build.
aknrdureegaesr Oct 13, 2025
7821b68
Removing trailing whitespace from each source code line that has it.
aknrdureegaesr Oct 14, 2025
e847318
Update MacOS build instructions for new CMake configs
Chris-AC9KH Oct 14, 2025
da8f632
Update Linux build instructions regarding use of Qt versions
Chris-AC9KH Oct 14, 2025
a03f6ce
Update Windows build instructions to include Qt Creator
Chris-AC9KH Oct 15, 2025
660bf82
Update license to be in compliance with Qt LGPLv3 licensing for open …
Chris-AC9KH Oct 15, 2025
02070cc
Set version to 2.4.0-dev
Chris-AC9KH Oct 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,21 @@ tags
output
docker/config/
js8call.ini
#### Xcode patch ####
Xcode/
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcodeproj/project.xcworkspace/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
**/xcshareddata/WorkspaceSettings.xcsettings
xcuserdata/
.DS_Store
js8call.entitlements
JS8Call.entitlements
## end Xcode patch ##
#### Qt Creator patch ####
build/
CMakeLists.txt.user
## end Qt Creator patch ##
31 changes: 18 additions & 13 deletions APRSISClient.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
#include "APRSISClient.h"
#include <QLoggingCategory>
#include <QRandomGenerator>

#include <cmath>

#include "DriftingDateTime.h"
#include "varicode.h"

Q_DECLARE_LOGGING_CATEGORY(aprsisclient_js8)

const int PACKET_TIMEOUT_SECONDS = 300;

APRSISClient::APRSISClient(QString const host,
Expand Down Expand Up @@ -51,7 +54,7 @@ findall(QRegularExpression re,
{
qsizetype pos = 0;
QList<QStringList> all;

while(pos < content.length())
{
auto match = re.match(content, pos);
Expand Down Expand Up @@ -262,34 +265,34 @@ void APRSISClient::processQueue(bool disconnect){
// 4. disconnect

if(state() != QTcpSocket::ConnectedState){
qDebug() << "APRSISClient Connecting:" << m_host << m_port;
qCDebug(aprsisclient_js8) << "APRSISClient Connecting:" << m_host << m_port;
connectToHost(m_host, m_port);
if(!waitForConnected(5000)){
qDebug() << "APRSISClient Connection Error:" << errorString();
qCDebug(aprsisclient_js8) << "APRSISClient Connection Error:" << errorString();
return;
}
}

auto re = QRegularExpression("(full|unavailable|busy)");
auto line = QString(readLine());
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Connection Busy:" << line;
qCDebug(aprsisclient_js8) << "APRSISClient Connection Busy:" << line;
return;
}

if(write(loginFrame(m_localCall).toLocal8Bit()) == -1){
qDebug() << "APRSISClient Write Login Error:" << errorString();
qCDebug(aprsisclient_js8) << "APRSISClient Write Login Error:" << errorString();
return;
}

if(!waitForReadyRead(5000)){
qDebug() << "APRSISClient Login Error: Server Not Responding";
qCDebug(aprsisclient_js8) << "APRSISClient Login Error: Server Not Responding";
return;
}

line = QString(readAll());
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Server Busy:" << line;
qCDebug(aprsisclient_js8) << "APRSISClient Server Busy:" << line;
return;
}

Expand All @@ -302,32 +305,32 @@ void APRSISClient::processQueue(bool disconnect){

// if the packet is older than the timeout, drop it.
if(timestamp.secsTo(DriftingDateTime::currentDateTimeUtc()) > PACKET_TIMEOUT_SECONDS){
qDebug() << "APRSISClient Packet Timeout:" << frame;
qCDebug(aprsisclient_js8) << "APRSISClient Packet Timeout:" << frame;
m_frameQueue.dequeue();
continue;
}

// random delay 25% of the time for throttling (a skip will add 60 seconds to the processing time)
if(m_skipPercent > 0 && QRandomGenerator::global()->generate() % 100 <= (m_skipPercent*100)){
qDebug() << "APRSISClient Throttle: Skipping Frame";
qCDebug(aprsisclient_js8) << "APRSISClient Throttle: Skipping Frame";
delayed.enqueue(m_frameQueue.dequeue());
continue;
}

QByteArray data = frame.toLocal8Bit();
if(write(data) == -1){
qDebug() << "APRSISClient Write Error:" << errorString();
qCDebug(aprsisclient_js8) << "APRSISClient Write Error:" << errorString();
return;
}

qDebug() << "APRSISClient Write:" << data;
qCDebug(aprsisclient_js8) << "APRSISClient Write:" << data;
if(waitForReadyRead(5000)){
line = QString(readLine());

qDebug() << "APRSISClient Read:" << line;
qCDebug(aprsisclient_js8) << "APRSISClient Read:" << line;

if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Cannot Write Error:" << line;
qCDebug(aprsisclient_js8) << "APRSISClient Cannot Write Error:" << line;
return;
}
}
Expand All @@ -344,3 +347,5 @@ void APRSISClient::processQueue(bool disconnect){
disconnectFromHost();
}
}

Q_LOGGING_CATEGORY(aprsisclient_js8, "aprsisclient.js8", QtWarningMsg)
5 changes: 4 additions & 1 deletion APRSISClient.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
#ifndef APRSISCLIENT_H
#define APRSISCLIENT_H

#include <QLoggingCategory>
#include <QtGlobal>
#include <QDateTime>
#include <QTcpSocket>
#include <QQueue>
#include <QPair>
#include <QTimer>

Q_DECLARE_LOGGING_CATEGORY(aprsisclient_js8)

class APRSISClient : public QTcpSocket
{
public:
Expand Down Expand Up @@ -39,7 +42,7 @@ public slots:
m_host = host;
m_port = port;

qDebug() << "APRSISClient Server Change:" << m_host << m_port;
qCDebug(aprsisclient_js8) << "APRSISClient Server Change:" << m_host << m_port;
}

void setPaused(bool paused){
Expand Down
4 changes: 2 additions & 2 deletions AttenuationSlider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,10 @@ namespace
gradRect.top(),
gradRect.center().x(),
gradRect.bottom());

gradient.setColorAt(0, handleStartColor);
gradient.setColorAt(1, handleStopColor);

QPainter p(&pixmap);

p.setRenderHint(QPainter::Antialiasing, true);
Expand Down
20 changes: 10 additions & 10 deletions AudioDevice.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include "AudioDevice.hpp"
bool AudioDevice::initialize (OpenMode mode, Channel channel)
{
m_channel = channel;
// open and ensure we are unbuffered if possible
return QIODevice::open (mode | QIODevice::Unbuffered);
}
#include "AudioDevice.hpp"

bool AudioDevice::initialize (OpenMode mode, Channel channel)
{
m_channel = channel;

// open and ensure we are unbuffered if possible
return QIODevice::open (mode | QIODevice::Unbuffered);
}

6 changes: 3 additions & 3 deletions CMake/Modules/FindFFTW3.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
# FFTW3_INCLUDE_DIR - the FFTW3 include directory (cached)
# FFTW3_INCLUDE_DIRS - the FFTW3 include directories
# (identical to FFTW3_INCLUDE_DIR)
# FFTW3[FL]?_LIBRARY - the FFTW3 library - double, single(F),
# FFTW3[FL]?_LIBRARY - the FFTW3 library - double, single(F),
# long-double(L) precision (cached)
# FFTW3[FL]?_THREADS_LIBRARY - the threaded FFTW3 library - double, single(F),
# FFTW3[FL]?_THREADS_LIBRARY - the threaded FFTW3 library - double, single(F),
# long-double(L) precision (cached)
# FFTW3_LIBRARIES - list of all FFTW3 libraries found

Expand Down Expand Up @@ -88,7 +88,7 @@ foreach (_lib ${_libraries})
endforeach (_lib ${_libraries})

# Search for the header file.
find_path (FFTW3_INCLUDE_DIR fftw3.h
find_path (FFTW3_INCLUDE_DIR fftw3.h
HINTS ${FFTW3_ROOT_DIR} PATH_SUFFIXES include)
mark_as_advanced (FFTW3_INCLUDE_DIR)
list(APPEND _check_list FFTW3_INCLUDE_DIR)
Expand Down
98 changes: 49 additions & 49 deletions CMake/Modules/FindUsb.cmake
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
# Findlibusb
# ==========
#
# Find the usb library
#
# This will define the following variables::
#
# Usb_FOUND - True if the system has the usb library
# Usb_VERSION - The verion of the usb library which was found
#
# and the following imported targets::
#
# Usb::Usb - The libusb library
#
include (LibFindMacros)
if (WIN32)
# Use path suffixes on MS Windows as we probably shouldn't
# trust the PATH envvar. PATH will still be searched to find the
# library as last resort.
if (CMAKE_SIZEOF_VOID_P MATCHES "8")
set (_library_options PATH_SUFFIXES MinGW64/dll MinGW64/static)
else ()
set (_library_options PATH_SUFFIXES MinGW32/dll MinGW32/static)
endif ()
endif ()
libfind_pkg_detect (Usb usb-1.0
FIND_PATH libusb.h PATH_SUFFIXES libusb-1.0
FIND_LIBRARY usb-1.0 ${_library_options}
)
libfind_process (Usb)
if (Usb_FOUND AND NOT TARGET Usb::Usb)
add_library (Usb::Usb UNKNOWN IMPORTED)
set_target_properties (Usb::Usb PROPERTIES
IMPORTED_LOCATION "${Usb_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${Usb_PKGCONF_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${Usb_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${Usb_LIBRARIES}"
)
endif ()
mark_as_advanced (
Usb_INCLUDE_DIR
Usb_LIBRARY
Usb_LIBRARIES
)
# Findlibusb
# ==========
#
# Find the usb library
#
# This will define the following variables::
#
# Usb_FOUND - True if the system has the usb library
# Usb_VERSION - The verion of the usb library which was found
#
# and the following imported targets::
#
# Usb::Usb - The libusb library
#

include (LibFindMacros)

if (WIN32)
# Use path suffixes on MS Windows as we probably shouldn't
# trust the PATH envvar. PATH will still be searched to find the
# library as last resort.
if (CMAKE_SIZEOF_VOID_P MATCHES "8")
set (_library_options PATH_SUFFIXES MinGW64/dll MinGW64/static)
else ()
set (_library_options PATH_SUFFIXES MinGW32/dll MinGW32/static)
endif ()
endif ()
libfind_pkg_detect (Usb usb-1.0
FIND_PATH libusb.h PATH_SUFFIXES libusb-1.0
FIND_LIBRARY usb-1.0 ${_library_options}
)

libfind_process (Usb)

if (Usb_FOUND AND NOT TARGET Usb::Usb)
add_library (Usb::Usb UNKNOWN IMPORTED)
set_target_properties (Usb::Usb PROPERTIES
IMPORTED_LOCATION "${Usb_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${Usb_PKGCONF_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${Usb_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${Usb_LIBRARIES}"
)
endif ()

mark_as_advanced (
Usb_INCLUDE_DIR
Usb_LIBRARY
Usb_LIBRARIES
)
2 changes: 1 addition & 1 deletion CMake/Modules/NSIS.template.in
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
!define FileExists `'' FileExists2`
!macro _DirExists _a _b _t _f
!insertmacro _LOGICLIB_TEMP
StrCpy $_LOGICLIB_TEMP '0'
StrCpy $_LOGICLIB_TEMP '0'
StrCmp `${_b}` `` +3 0 ;if path is not blank, continue to next check
IfFileExists `${_b}\*.*` 0 +2 ;if directory exists, continue to confirm exists
StrCpy $_LOGICLIB_TEMP '1'
Expand Down
4 changes: 2 additions & 2 deletions CMake/Modules/QtAxMacros.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ if (WIN32)
set (options)
set (oneValueArgs)
set (multiValueArgs OPTIONS)

cmake_parse_arguments (_WRAP_AX_SERVER "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

set (ax_server_files ${_WRAP_AX_SERVER_UNPARSED_ARGUMENTS})
set (ax_server_options ${_WRAP_AX_SERVER_OPTIONS})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ elseif (NOT WSJTX_VERSION_IS_RELEASE)
endif (WSJTX_RC AND NOT WSJTX_VERSION_IS_RELEASE)

set (wsjtx_VERSION ${WSJTX_VERSION_MAJOR}.${WSJTX_VERSION_MINOR}.${WSJTX_VERSION_PATCH})
set (wsjtx_SHORT_VERSION ${WSJTX_VERSION_MAJOR}.${WSJTX_VERSION_MINOR}.0)
Loading