From 3bc42719051974df03f2fe02d9c5bfbb5f2290a3 Mon Sep 17 00:00:00 2001 From: Julian Haag Date: Sat, 8 Aug 2026 23:18:43 +0200 Subject: [PATCH 1/2] Fix QT_NMEA_SERIAL_PORT on Qt 6 --- sdrbase/maincore.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/sdrbase/maincore.cpp b/sdrbase/maincore.cpp index 5fb957d68..bb80ed5c5 100644 --- a/sdrbase/maincore.cpp +++ b/sdrbase/maincore.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) #include @@ -443,10 +444,52 @@ void MainCore::requestPermissions() requestLocationPermission(); // This requests microphone and camera permissions as well } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +namespace { + +QGeoPositionInfoSource *createNmeaPositionSource(QObject *parent) +{ + const QString serialPort = qEnvironmentVariable("QT_NMEA_SERIAL_PORT"); + + if (serialPort.isEmpty()) { + return nullptr; + } + + QVariantMap parameters; + parameters.insert(QStringLiteral("nmea.source"), QStringLiteral("serial:") + serialPort); + + bool baudRateValid = false; + const int baudRate = qEnvironmentVariableIntValue("QT_NMEA_SERIAL_BAUD_RATE", &baudRateValid); + + if (baudRateValid && (baudRate > 0)) { + parameters.insert(QStringLiteral("nmea.baudrate"), baudRate); + } + + QGeoPositionInfoSource *positionSource = QGeoPositionInfoSource::createSource( + QStringLiteral("nmea"), parameters, parent); + + if (!positionSource) { + qWarning() << "MainCore::initPosition: No NMEA position source for serial port" << serialPort; + } + + return positionSource; +} + +} +#endif + // Position can take a while to determine, so we start updates at program startup void MainCore::initPosition() { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + m_positionSource = createNmeaPositionSource(this); + + if (!m_positionSource) { + m_positionSource = QGeoPositionInfoSource::createDefaultSource(this); + } +#else m_positionSource = QGeoPositionInfoSource::createDefaultSource(this); +#endif if (m_positionSource) { qDebug() << "MainCore::initPosition: Using position source" << m_positionSource->sourceName(); From ebb72d1830253ae284923beeb131e35526d42386 Mon Sep 17 00:00:00 2001 From: Edouard Griffiths Date: Sun, 9 Aug 2026 20:01:02 +0200 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- sdrbase/maincore.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sdrbase/maincore.cpp b/sdrbase/maincore.cpp index bb80ed5c5..a6962fc70 100644 --- a/sdrbase/maincore.cpp +++ b/sdrbase/maincore.cpp @@ -456,8 +456,14 @@ QGeoPositionInfoSource *createNmeaPositionSource(QObject *parent) } QVariantMap parameters; - parameters.insert(QStringLiteral("nmea.source"), QStringLiteral("serial:") + serialPort); + QString source = serialPort; + if (!source.startsWith(QStringLiteral("serial:"), Qt::CaseInsensitive) && + !source.startsWith(QStringLiteral("file:"), Qt::CaseInsensitive)) { + source.prepend(QStringLiteral("serial:")); + } + + parameters.insert(QStringLiteral("nmea.source"), source); bool baudRateValid = false; const int baudRate = qEnvironmentVariableIntValue("QT_NMEA_SERIAL_BAUD_RATE", &baudRateValid); @@ -469,7 +475,7 @@ QGeoPositionInfoSource *createNmeaPositionSource(QObject *parent) QStringLiteral("nmea"), parameters, parent); if (!positionSource) { - qWarning() << "MainCore::initPosition: No NMEA position source for serial port" << serialPort; + qWarning() << "MainCore::createNmeaPositionSource: Failed to create NMEA position source for QT_NMEA_SERIAL_PORT =" << serialPort; } return positionSource;