From d66223533d0c34e9387bf8bf62b49556f290da09 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 23 Jan 2023 13:07:20 +0000 Subject: [PATCH] FT8 Demod: Display caller on Map feature --- plugins/channelrx/demodft8/ft8demodgui.cpp | 45 ++++++++++++++++++++++ plugins/channelrx/demodft8/ft8demodgui.h | 1 + plugins/feature/map/mapsettings.cpp | 3 ++ 3 files changed, 49 insertions(+) diff --git a/plugins/channelrx/demodft8/ft8demodgui.cpp b/plugins/channelrx/demodft8/ft8demodgui.cpp index 84af1143d..7b9a41493 100644 --- a/plugins/channelrx/demodft8/ft8demodgui.cpp +++ b/plugins/channelrx/demodft8/ft8demodgui.cpp @@ -31,7 +31,9 @@ #include "gui/dialpopup.h" #include "gui/dialogpositioner.h" #include "util/db.h" +#include "util/maidenhead.h" #include "maincore.h" +#include "SWGMapItem.h" #include "ui_ft8demodgui.h" #include "ft8demodgui.h" @@ -733,6 +735,19 @@ void FT8DemodGUI::messagesReceived(const QList& messages) locItem->setText(message.loc); infoItem->setText(message.decoderInfo); + // If message contains a Maidenhead locator, display caller on Map feature + float latitude, longitude; + if ((message.loc.size() == 4) && Maidenhead::fromMaidenhead(message.loc, latitude, longitude)) + { + QString text = QString("%1\nMode: FT8\nFrequency: %2 Hz\nLocator: %3\nSNR: %4\nLast heard: %5") + .arg(message.call2) + .arg(m_deviceCenterFrequency + m_settings.m_inputFrequencyOffset) + .arg(message.loc) + .arg(message.snr) + .arg(QDateTime::currentDateTime().toString("dd MMM yyyy HH:mm:ss")); + sendToMap(message.call2, text, latitude, longitude); + } + filterMessageRow(row); row++; @@ -745,6 +760,36 @@ void FT8DemodGUI::messagesReceived(const QList& messages) } } +void FT8DemodGUI::sendToMap(const QString& caller, const QString& text, float latitude, float longitude) +{ + QList mapPipes; + MainCore::instance()->getMessagePipes().getMessagePipes(m_ft8Demod, "mapitems", mapPipes); + + for (const auto& pipe : mapPipes) + { + MessageQueue *messageQueue = qobject_cast(pipe->m_element); + SWGSDRangel::SWGMapItem *swgMapItem = new SWGSDRangel::SWGMapItem(); + swgMapItem->setName(new QString(caller)); + swgMapItem->setLatitude(latitude); + swgMapItem->setLongitude(longitude); + swgMapItem->setAltitude(0); + swgMapItem->setAltitudeReference(1); // CLAMP_TO_GROUND + swgMapItem->setPositionDateTime(new QString(QDateTime::currentDateTime().toString(Qt::ISODateWithMs))); + swgMapItem->setImageRotation(0); + swgMapItem->setText(new QString(text)); + swgMapItem->setImage(new QString("antenna.png")); + swgMapItem->setModel(new QString("antenna.glb")); + swgMapItem->setModelAltitudeOffset(0.0); + swgMapItem->setLabel(new QString(caller)); + swgMapItem->setLabelAltitudeOffset(4.5); + swgMapItem->setFixedPosition(false); + swgMapItem->setOrientation(0); + swgMapItem->setHeading(0); + MainCore::MsgMapItem *msg = MainCore::MsgMapItem::create(m_ft8Demod, swgMapItem); + messageQueue->push(msg); + } +} + void FT8DemodGUI::populateBandPresets() { ui->bandPreset->blockSignals(true); diff --git a/plugins/channelrx/demodft8/ft8demodgui.h b/plugins/channelrx/demodft8/ft8demodgui.h index c0aeb935d..bf4933bb9 100644 --- a/plugins/channelrx/demodft8/ft8demodgui.h +++ b/plugins/channelrx/demodft8/ft8demodgui.h @@ -108,6 +108,7 @@ private: void messagesReceived(const QList& messages); void populateBandPresets(); void filterMessageRow(int row); + void sendToMap(const QString& call2, const QString& text, float latitude, float longitude); enum MessageCol { MESSAGE_COL_UTC, diff --git a/plugins/feature/map/mapsettings.cpp b/plugins/feature/map/mapsettings.cpp index 265e536bb..ac3c883ab 100644 --- a/plugins/feature/map/mapsettings.cpp +++ b/plugins/feature/map/mapsettings.cpp @@ -30,6 +30,7 @@ const QStringList MapSettings::m_pipeTypes = { QStringLiteral("AIS"), QStringLiteral("APRS"), QStringLiteral("APTDemod"), + QStringLiteral("FT8Demod"), QStringLiteral("Radiosonde"), QStringLiteral("StarTracker"), QStringLiteral("SatelliteTracker") @@ -40,6 +41,7 @@ const QStringList MapSettings::m_pipeURIs = { QStringLiteral("sdrangel.feature.ais"), QStringLiteral("sdrangel.feature.aprs"), QStringLiteral("sdrangel.channel.aptdemod"), + QStringLiteral("sdrangel.channel.ft8demod"), QStringLiteral("sdrangel.feature.radiosonde"), QStringLiteral("sdrangel.feature.startracker"), QStringLiteral("sdrangel.feature.satellitetracker") @@ -69,6 +71,7 @@ MapSettings::MapSettings() : m_itemSettings.insert("Radiosonde", new MapItemSettings("Radiosonde", QColor(102, 0, 102), false, 11, modelMinPixelSize)); m_itemSettings.insert("Radio Time Transmitters", new MapItemSettings("Radio Time Transmitters", QColor(255, 0, 0), true, 8)); m_itemSettings.insert("Radar", new MapItemSettings("Radar", QColor(255, 0, 0), true, 8)); + m_itemSettings.insert("FT8Demod", new MapItemSettings("FT8Demod", QColor(0, 192, 255), true, 8)); MapItemSettings *ionosondeItemSettings = new MapItemSettings("Ionosonde Stations", QColor(255, 255, 0), true, 4); ionosondeItemSettings->m_display2DIcon = false;