diff --git a/MessageClient.cpp b/MessageClient.cpp index ac820f096..3227bdd9c 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -368,27 +368,29 @@ void MessageClient::status_update (Frequency f, QString const& mode, QString con } void MessageClient::decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency - , QString const& mode, QString const& message_text, bool low_confidence) + , QString const& mode, QString const& message_text, bool low_confidence + , bool off_air) { if (m_->server_port_ && !m_->server_string_.isEmpty ()) { QByteArray message; NetworkMessage::Builder out {&message, NetworkMessage::Decode, m_->id_, m_->schema_}; out << is_new << time << snr << delta_time << delta_frequency << mode.toUtf8 () - << message_text.toUtf8 () << low_confidence; + << message_text.toUtf8 () << low_confidence << off_air; m_->send_message (out, message); } } void MessageClient::WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency frequency - , qint32 drift, QString const& callsign, QString const& grid, qint32 power) + , qint32 drift, QString const& callsign, QString const& grid, qint32 power + , bool off_air) { if (m_->server_port_ && !m_->server_string_.isEmpty ()) { QByteArray message; NetworkMessage::Builder out {&message, NetworkMessage::WSPRDecode, m_->id_, m_->schema_}; out << is_new << time << snr << delta_time << frequency << drift << callsign.toUtf8 () - << grid.toUtf8 () << power; + << grid.toUtf8 () << power << off_air; m_->send_message (out, message); } } @@ -403,17 +405,18 @@ void MessageClient::clear_decodes () } } -void MessageClient::qso_logged (QDateTime timeOff, QString const& dx_call, QString const& dx_grid +void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid , Frequency dial_frequency, QString const& mode, QString const& report_sent , QString const& report_received, QString const& tx_power - , QString const& comments, QString const& name, QDateTime timeOn) + , QString const& comments, QString const& name, QDateTime time_on) { if (m_->server_port_ && !m_->server_string_.isEmpty ()) { QByteArray message; NetworkMessage::Builder out {&message, NetworkMessage::QSOLogged, m_->id_, m_->schema_}; - out << timeOff << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 () - << report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 () << name.toUtf8 () << timeOn; + out << time_off << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 () + << report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 () + << name.toUtf8 () << time_on; m_->send_message (out, message); } } diff --git a/MessageClient.hpp b/MessageClient.hpp index 0d3dd47ff..6fe1903af 100644 --- a/MessageClient.hpp +++ b/MessageClient.hpp @@ -53,14 +53,16 @@ public: , QString const& dx_grid, bool watchdog_timeout, QString const& sub_mode , bool fast_mode); Q_SLOT void decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency - , QString const& mode, QString const& message, bool low_confidence); + , QString const& mode, QString const& message, bool low_confidence + , bool off_air); Q_SLOT void WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency - , qint32 drift, QString const& callsign, QString const& grid, qint32 power); + , qint32 drift, QString const& callsign, QString const& grid, qint32 power + , bool off_air); Q_SLOT void clear_decodes (); - Q_SLOT void qso_logged (QDateTime timeOff, QString const& dx_call, QString const& dx_grid + Q_SLOT void qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid , Frequency dial_frequency, QString const& mode, QString const& report_sent , QString const& report_received, QString const& tx_power, QString const& comments - , QString const& name, QDateTime timeOn); + , QString const& name, QDateTime time_on); // this slot may be used to send arbitrary UDP datagrams to and // destination allowing the underlying socket to be used for general diff --git a/MessageServer.cpp b/MessageServer.cpp index caad76a9f..8825e20a3 100644 --- a/MessageServer.cpp +++ b/MessageServer.cpp @@ -241,14 +241,15 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s quint32 delta_frequency; QByteArray mode; QByteArray message; - bool low_confidence; + bool low_confidence {false}; + bool off_air {false}; in >> is_new >> time >> snr >> delta_time >> delta_frequency >> mode - >> message >> low_confidence; + >> message >> low_confidence >> off_air; if (check_status (in) != Fail) { Q_EMIT self_->decode (is_new, id, time, snr, delta_time, delta_frequency , QString::fromUtf8 (mode), QString::fromUtf8 (message) - , low_confidence); + , low_confidence, off_air); } } break; @@ -265,18 +266,21 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s QByteArray callsign; QByteArray grid; qint32 power; - in >> is_new >> time >> snr >> delta_time >> frequency >> drift >> callsign >> grid >> power; + bool off_air {false}; + in >> is_new >> time >> snr >> delta_time >> frequency >> drift >> callsign >> grid >> power + >> off_air; if (check_status (in) != Fail) { Q_EMIT self_->WSPR_decode (is_new, id, time, snr, delta_time, frequency, drift - , QString::fromUtf8 (callsign), QString::fromUtf8 (grid), power); + , QString::fromUtf8 (callsign), QString::fromUtf8 (grid) + , power, off_air); } } break; case NetworkMessage::QSOLogged: { - QDateTime timeOff; + QDateTime time_off; QByteArray dx_call; QByteArray dx_grid; Frequency dial_frequency; @@ -286,15 +290,15 @@ void MessageServer::impl::parse_message (QHostAddress const& sender, port_type s QByteArray tx_power; QByteArray comments; QByteArray name; - QDateTime timeOn; // Note: LOTW uses TIME_ON for their +/- 30-minute time window - in >> timeOff >> dx_call >> dx_grid >> dial_frequency >> mode >> report_sent >> report_received - >> tx_power >> comments >> name >> timeOn; + QDateTime time_on; // Note: LOTW uses TIME_ON for their +/- 30-minute time window + in >> time_off >> dx_call >> dx_grid >> dial_frequency >> mode >> report_sent >> report_received + >> tx_power >> comments >> name >> time_on; if (check_status (in) != Fail) { - Q_EMIT self_->qso_logged (id, timeOff, QString::fromUtf8 (dx_call), QString::fromUtf8 (dx_grid) + Q_EMIT self_->qso_logged (id, time_off, QString::fromUtf8 (dx_call), QString::fromUtf8 (dx_grid) , dial_frequency, QString::fromUtf8 (mode), QString::fromUtf8 (report_sent) , QString::fromUtf8 (report_received), QString::fromUtf8 (tx_power) - , QString::fromUtf8 (comments), QString::fromUtf8 (name), timeOn); + , QString::fromUtf8 (comments), QString::fromUtf8 (name), time_on); } } break; diff --git a/MessageServer.hpp b/MessageServer.hpp index 9a80aa0e7..33a0c6b0b 100644 --- a/MessageServer.hpp +++ b/MessageServer.hpp @@ -70,13 +70,14 @@ public: Q_SIGNAL void client_closed (QString const& id); Q_SIGNAL void decode (bool is_new, QString const& id, QTime time, qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode, QString const& message - , bool low_confidence); + , bool low_confidence, bool off_air); Q_SIGNAL void WSPR_decode (bool is_new, QString const& id, QTime time, qint32 snr, float delta_time, Frequency - , qint32 drift, QString const& callsign, QString const& grid, qint32 power); - Q_SIGNAL void qso_logged (QString const& id, QDateTime timeOff, QString const& dx_call, QString const& dx_grid + , qint32 drift, QString const& callsign, QString const& grid, qint32 power + , bool off_air); + Q_SIGNAL void qso_logged (QString const& id, QDateTime time_off, QString const& dx_call, QString const& dx_grid , Frequency dial_frequency, QString const& mode, QString const& report_sent , QString const& report_received, QString const& tx_power, QString const& comments - , QString const& name, QDateTime timeOn); + , QString const& name, QDateTime time_on); Q_SIGNAL void clear_decodes (QString const& id); // this signal is emitted when a network error occurs diff --git a/NetworkMessage.hpp b/NetworkMessage.hpp index b248e40de..67d19f221 100644 --- a/NetworkMessage.hpp +++ b/NetworkMessage.hpp @@ -157,6 +157,7 @@ * Mode utf8 * Message utf8 * Low confidence bool + * Off air bool * * The decode message is sent when a new decode is completed, in * this case the 'New' field is true. It is also used in response @@ -168,7 +169,8 @@ * has knows that a decode has a higher than normal probability * of being false, they should not be reported on publicly * accessible services without some attached warning or further - * validation. + * validation. Off air decodes are those that result from playing + * back a .WAV file. * * * Clear Out 3 quint32 @@ -299,13 +301,16 @@ * Callsign utf8 * Grid utf8 * Power (dBm) qint32 + * Off air bool * * The decode message is sent when a new decode is completed, in * this case the 'New' field is true. It is also used in response * to a "Replay" message where each old decode in the "Band * activity" window, that has not been erased, is sent in order * as a one of these messages with the 'New' field set to - * false. See the "Replay" message below for details of usage. + * false. See the "Replay" message below for details of + * usage. The off air field indicates that the decode was decoded + * from a played back recording. * * */ diff --git a/UDPExamples/BeaconsModel.cpp b/UDPExamples/BeaconsModel.cpp index ca72306eb..6e83fa382 100644 --- a/UDPExamples/BeaconsModel.cpp +++ b/UDPExamples/BeaconsModel.cpp @@ -15,13 +15,19 @@ namespace QT_TRANSLATE_NOOP ("BeaconsModel", "Callsign"), QT_TRANSLATE_NOOP ("BeaconsModel", "Grid"), QT_TRANSLATE_NOOP ("BeaconsModel", "Power"), + QT_TRANSLATE_NOOP ("BeaconsModel", "Live"), }; + QString live_string (bool off_air) + { + return off_air ? QT_TRANSLATE_NOOP ("BeaconsModel", "no") : QT_TRANSLATE_NOOP ("BeaconsModel", "yes"); + } + QFont text_font {"Courier", 10}; QList make_row (QString const& client_id, QTime time, qint32 snr, float delta_time , Frequency frequency, qint32 drift, QString const& callsign - , QString const& grid, qint32 power) + , QString const& grid, qint32 power, bool off_air) { auto time_item = new QStandardItem {time.toString ("hh:mm")}; time_item->setData (time); @@ -50,8 +56,11 @@ namespace pwr->setData (power); pwr->setTextAlignment (Qt::AlignRight); + auto live = new QStandardItem {live_string (off_air)}; + live->setTextAlignment (Qt::AlignHCenter); + QList row { - new QStandardItem {client_id}, time_item, snr_item, dt, freq, dri, new QStandardItem {callsign}, gd, pwr}; + new QStandardItem {client_id}, time_item, snr_item, dt, freq, dri, new QStandardItem {callsign}, gd, pwr, live}; Q_FOREACH (auto& item, row) { item->setEditable (false); @@ -63,7 +72,7 @@ namespace } BeaconsModel::BeaconsModel (QObject * parent) - : QStandardItemModel {0, 9, parent} + : QStandardItemModel {0, sizeof (headings) / sizeof (headings[0]), parent} { int column {0}; for (auto const& heading : headings) @@ -74,7 +83,7 @@ BeaconsModel::BeaconsModel (QObject * parent) void BeaconsModel::add_beacon_spot (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time , Frequency frequency, qint32 drift, QString const& callsign - , QString const& grid, qint32 power) + , QString const& grid, qint32 power, bool off_air) { if (!is_new) { @@ -91,7 +100,8 @@ void BeaconsModel::add_beacon_spot (bool is_new, QString const& client_id, QTime && data (index (row, 5)).toInt () == drift && data (index (row, 6)).toString () == callsign && data (index (row, 7)).toString () == grid - && data (index (row, 8)).toInt () == power) + && data (index (row, 8)).toInt () == power + && data (index (row, 9)).toString () == live_string (off_air)) { return; } @@ -103,12 +113,12 @@ void BeaconsModel::add_beacon_spot (bool is_new, QString const& client_id, QTime } if (target_row >= 0) { - insertRow (target_row + 1, make_row (client_id, time, snr, delta_time, frequency, drift, callsign, grid, power)); + insertRow (target_row + 1, make_row (client_id, time, snr, delta_time, frequency, drift, callsign, grid, power, off_air)); return; } } - appendRow (make_row (client_id, time, snr, delta_time, frequency, drift, callsign, grid, power)); + appendRow (make_row (client_id, time, snr, delta_time, frequency, drift, callsign, grid, power, off_air)); } void BeaconsModel::clear_decodes (QString const& client_id) diff --git a/UDPExamples/BeaconsModel.hpp b/UDPExamples/BeaconsModel.hpp index df707d01b..977a93ccc 100644 --- a/UDPExamples/BeaconsModel.hpp +++ b/UDPExamples/BeaconsModel.hpp @@ -31,7 +31,7 @@ public: Q_SLOT void add_beacon_spot (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time , Frequency frequency, qint32 drift, QString const& callsign, QString const& grid - , qint32 power); + , qint32 power, bool off_air); Q_SLOT void clear_decodes (QString const& client_id); }; diff --git a/UDPExamples/ClientWidget.cpp b/UDPExamples/ClientWidget.cpp index d24c6d697..0e101fdf9 100644 --- a/UDPExamples/ClientWidget.cpp +++ b/UDPExamples/ClientWidget.cpp @@ -244,7 +244,7 @@ void ClientWidget::update_status (QString const& id, Frequency f, QString const& void ClientWidget::decode_added (bool /*is_new*/, QString const& client_id, QTime /*time*/, qint32 /*snr*/ , float /*delta_time*/, quint32 /*delta_frequency*/, QString const& /*mode*/ - , QString const& /*message*/, bool /*low_confidence*/) + , QString const& /*message*/, bool /*low_confidence*/, bool /*off_air*/) { if (client_id == id_) { @@ -256,7 +256,8 @@ void ClientWidget::decode_added (bool /*is_new*/, QString const& client_id, QTim void ClientWidget::beacon_spot_added (bool /*is_new*/, QString const& client_id, QTime /*time*/, qint32 /*snr*/ , float /*delta_time*/, Frequency /*delta_frequency*/, qint32 /*drift*/ - , QString const& /*callsign*/, QString const& /*grid*/, qint32 /*power*/) + , QString const& /*callsign*/, QString const& /*grid*/, qint32 /*power*/ + , bool /*off_air*/) { if (client_id == id_) { diff --git a/UDPExamples/ClientWidget.hpp b/UDPExamples/ClientWidget.hpp index 8643df705..6f43e9a0c 100644 --- a/UDPExamples/ClientWidget.hpp +++ b/UDPExamples/ClientWidget.hpp @@ -33,10 +33,11 @@ public: , bool watchdog_timeout, QString const& sub_mode, bool fast_mode); Q_SLOT void decode_added (bool is_new, QString const& client_id, QTime, qint32 snr , float delta_time, quint32 delta_frequency, QString const& mode - , QString const& message, bool low_confidence); + , QString const& message, bool low_confidence, bool off_air); Q_SLOT void beacon_spot_added (bool is_new, QString const& client_id, QTime, qint32 snr , float delta_time, Frequency delta_frequency, qint32 drift - , QString const& callsign, QString const& grid, qint32 power); + , QString const& callsign, QString const& grid, qint32 power + , bool off_air); Q_SIGNAL void do_reply (QModelIndex const&); Q_SIGNAL void do_halt_tx (QString const& id, bool auto_only); diff --git a/UDPExamples/DecodesModel.cpp b/UDPExamples/DecodesModel.cpp index 3ca94dde1..f442003d0 100644 --- a/UDPExamples/DecodesModel.cpp +++ b/UDPExamples/DecodesModel.cpp @@ -18,6 +18,7 @@ namespace QT_TRANSLATE_NOOP ("DecodesModel", "Md"), QT_TRANSLATE_NOOP ("DecodesModel", "Message"), QT_TRANSLATE_NOOP ("DecodesModel", "Confidence"), + QT_TRANSLATE_NOOP ("DecodesModel", "Live"), }; QString confidence_string (bool low_confidence) @@ -25,11 +26,16 @@ namespace return low_confidence ? QT_TRANSLATE_NOOP ("DecodesModel", "low") : QT_TRANSLATE_NOOP ("DecodesModel", "high"); } + QString live_string (bool off_air) + { + return off_air ? QT_TRANSLATE_NOOP ("DecodesModel", "no") : QT_TRANSLATE_NOOP ("DecodesModel", "yes"); + } + QFont text_font {"Courier", 10}; QList make_row (QString const& client_id, QTime time, qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode, QString const& message - , bool low_confidence, bool is_fast) + , bool low_confidence, bool off_air, bool is_fast) { auto time_item = new QStandardItem {time.toString (is_fast || "~" == mode ? "hh:mm:ss" : "hh:mm")}; time_item->setData (time); @@ -53,8 +59,11 @@ namespace auto confidence = new QStandardItem {confidence_string (low_confidence)}; confidence->setTextAlignment (Qt::AlignHCenter); + auto live = new QStandardItem {live_string (off_air)}; + live->setTextAlignment (Qt::AlignHCenter); + QList row { - new QStandardItem {client_id}, time_item, snr_item, dt, df, md, new QStandardItem {message}, confidence}; + new QStandardItem {client_id}, time_item, snr_item, dt, df, md, new QStandardItem {message}, confidence, live}; Q_FOREACH (auto& item, row) { item->setEditable (false); @@ -77,7 +86,7 @@ DecodesModel::DecodesModel (QObject * parent) void DecodesModel::add_decode (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode, QString const& message - , bool low_confidence, bool is_fast) + , bool low_confidence, bool off_air, bool is_fast) { if (!is_new) { @@ -93,7 +102,8 @@ void DecodesModel::add_decode (bool is_new, QString const& client_id, QTime time && item (row, 4)->data ().toUInt () == delta_frequency && data (index (row, 5)).toString () == mode && data (index (row, 6)).toString () == message - && data (index (row, 7)).toString () == confidence_string (low_confidence)) + && data (index (row, 7)).toString () == confidence_string (low_confidence) + && data (index (row, 8)).toString () == live_string (off_air)) { return; } @@ -106,12 +116,13 @@ void DecodesModel::add_decode (bool is_new, QString const& client_id, QTime time if (target_row >= 0) { insertRow (target_row + 1, make_row (client_id, time, snr, delta_time, delta_frequency, mode - , message, low_confidence, is_fast)); + , message, low_confidence, off_air, is_fast)); return; } } - appendRow (make_row (client_id, time, snr, delta_time, delta_frequency, mode, message, low_confidence, is_fast)); + appendRow (make_row (client_id, time, snr, delta_time, delta_frequency, mode, message, low_confidence + , off_air, is_fast)); } void DecodesModel::clear_decodes (QString const& client_id) diff --git a/UDPExamples/DecodesModel.hpp b/UDPExamples/DecodesModel.hpp index 43bfd679d..b028d60e5 100644 --- a/UDPExamples/DecodesModel.hpp +++ b/UDPExamples/DecodesModel.hpp @@ -33,7 +33,7 @@ public: Q_SLOT void add_decode (bool is_new, QString const& client_id, QTime time, qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode, QString const& message - , bool low_confidence, bool is_fast); + , bool low_confidence, bool off_air, bool is_fast); Q_SLOT void clear_decodes (QString const& client_id); Q_SLOT void do_reply (QModelIndex const& source); diff --git a/UDPExamples/MessageAggregatorMainWindow.cpp b/UDPExamples/MessageAggregatorMainWindow.cpp index ecb364141..eadb6bf4a 100644 --- a/UDPExamples/MessageAggregatorMainWindow.cpp +++ b/UDPExamples/MessageAggregatorMainWindow.cpp @@ -91,9 +91,10 @@ MessageAggregatorMainWindow::MessageAggregatorMainWindow () connect (server_, &MessageServer::decode, [this] (bool is_new, QString const& id, QTime time , qint32 snr, float delta_time , quint32 delta_frequency, QString const& mode - , QString const& message, bool low_confidence) { + , QString const& message, bool low_confidence + , bool off_air) { decodes_model_->add_decode (is_new, id, time, snr, delta_time, delta_frequency, mode, message - , low_confidence, dock_widgets_[id]->fast_mode ());}); + , low_confidence, off_air, dock_widgets_[id]->fast_mode ());}); connect (server_, &MessageServer::WSPR_decode, beacons_model_, &BeaconsModel::add_beacon_spot); connect (server_, &MessageServer::clear_decodes, decodes_model_, &DecodesModel::clear_decodes); connect (server_, &MessageServer::clear_decodes, beacons_model_, &BeaconsModel::clear_decodes); @@ -110,14 +111,14 @@ MessageAggregatorMainWindow::MessageAggregatorMainWindow () show (); } -void MessageAggregatorMainWindow::log_qso (QString const& /*id*/, QDateTime timeOff, QString const& dx_call, QString const& dx_grid +void MessageAggregatorMainWindow::log_qso (QString const& /*id*/, QDateTime time_off, QString const& dx_call, QString const& dx_grid , Frequency dial_frequency, QString const& mode, QString const& report_sent , QString const& report_received, QString const& tx_power, QString const& comments - , QString const& name, QDateTime timeOn) + , QString const& name, QDateTime time_on) { QList row; - row << new QStandardItem {timeOn.toString ("dd-MMM-yyyy hh:mm:ss")} - << new QStandardItem {timeOff.toString ("dd-MMM-yyyy hh:mm:ss")} + row << new QStandardItem {time_on.toString ("dd-MMM-yyyy hh:mm:ss")} + << new QStandardItem {time_off.toString ("dd-MMM-yyyy hh:mm:ss")} << new QStandardItem {dx_call} << new QStandardItem {dx_grid} << new QStandardItem {name} diff --git a/UDPExamples/MessageAggregatorMainWindow.hpp b/UDPExamples/MessageAggregatorMainWindow.hpp index 7bf34426b..4039c60ab 100644 --- a/UDPExamples/MessageAggregatorMainWindow.hpp +++ b/UDPExamples/MessageAggregatorMainWindow.hpp @@ -26,10 +26,10 @@ class MessageAggregatorMainWindow public: MessageAggregatorMainWindow (); - Q_SLOT void log_qso (QString const& /*id*/, QDateTime timeOff, QString const& dx_call, QString const& dx_grid + Q_SLOT void log_qso (QString const& /*id*/, QDateTime time_off, QString const& dx_call, QString const& dx_grid , Frequency dial_frequency, QString const& mode, QString const& report_sent , QString const& report_received, QString const& tx_power, QString const& comments - , QString const& name, QDateTime timeOn); + , QString const& name, QDateTime time_on); private: void add_client (QString const& id, QString const& version, QString const& revision); diff --git a/UDPExamples/UDPDaemon.cpp b/UDPExamples/UDPDaemon.cpp index 7afc3d2f9..2d3b1b2d9 100644 --- a/UDPExamples/UDPDaemon.cpp +++ b/UDPExamples/UDPDaemon.cpp @@ -68,28 +68,30 @@ public: } Q_SLOT void decode_added (bool is_new, QString const& client_id, QTime time, qint32 snr - , float delta_time, quint32 delta_frequency, QString const& mode - , QString const& message, bool low_confidence) + , float delta_time, quint32 delta_frequency, QString const& mode + , QString const& message, bool low_confidence, bool off_air) { if (client_id == id_) { qDebug () << "new:" << is_new << "t:" << time << "snr:" << snr << "Dt:" << delta_time << "Df:" << delta_frequency - << "mode:" << mode << "Confidence:" << (low_confidence ? "low" : "high"); + << "mode:" << mode << "Confidence:" << (low_confidence ? "low" : "high") + << "On air:" << !off_air; std::cout << tr ("%1: Decoded %2").arg (id_).arg (message).toStdString () << std::endl; } } Q_SLOT void beacon_spot_added (bool is_new, QString const& client_id, QTime time, qint32 snr , float delta_time, Frequency delta_frequency, qint32 drift, QString const& callsign - , QString const& grid, qint32 power) + , QString const& grid, qint32 power, bool off_air) { if (client_id == id_) { qDebug () << "new:" << is_new << "t:" << time << "snr:" << snr << "Dt:" << delta_time << "Df:" << delta_frequency << "drift:" << drift; - std::cout << tr ("%1: WSPR decode %2 grid %3 power: %4").arg (id_).arg (callsign).arg (grid).arg (power).toStdString () << std::endl; + std::cout << tr ("%1: WSPR decode %2 grid %3 power: %4").arg (id_).arg (callsign).arg (grid).arg (power).toStdString () + << "On air:" << !off_air << std::endl; } } diff --git a/mainwindow.cpp b/mainwindow.cpp index d94890335..9a13c85b6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -6197,7 +6197,7 @@ void MainWindow::postDecode (bool is_new, QString const& message) { auto const& decode = message.trimmed (); auto const& parts = decode.left (22).split (' ', QString::SkipEmptyParts); - if (!m_diskData && parts.size () >= 5) + if (parts.size () >= 5) { auto has_seconds = parts[0].size () > 4; m_messageClient->decode (is_new @@ -6205,7 +6205,8 @@ void MainWindow::postDecode (bool is_new, QString const& message) , parts[1].toInt () , parts[2].toFloat (), parts[3].toUInt (), parts[4][0] , decode.mid (has_seconds ? 24 : 22, 21) - , QChar {'?'} == decode.mid (has_seconds ? 24 + 21 : 22 + 21, 1)); + , QChar {'?'} == decode.mid (has_seconds ? 24 + 21 : 22 + 21, 1) + , m_diskData); } } @@ -6217,7 +6218,8 @@ void MainWindow::postWSPRDecode (bool is_new, QStringList parts) } m_messageClient->WSPR_decode (is_new, QTime::fromString (parts[0], "hhmm"), parts[1].toInt () , parts[2].toFloat (), Radio::frequency (parts[3].toFloat (), 6) - , parts[4].toInt (), parts[5], parts[6], parts[7].toInt ()); + , parts[4].toInt (), parts[5], parts[6], parts[7].toInt () + , m_diskData); } void MainWindow::networkError (QString const& e)