mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-04-29 10:54:01 -04:00
93 lines
3.4 KiB
C++
93 lines
3.4 KiB
C++
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) 2026 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
|
|
// //
|
|
// This program is free software; you can redistribute it and/or modify //
|
|
// it under the terms of the GNU General Public License as published by //
|
|
// the Free Software Foundation as version 3 of the License, or //
|
|
// (at your option) any later version. //
|
|
// //
|
|
// This program is distributed in the hope that it will be useful, //
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
|
// GNU General Public License V3 for more details. //
|
|
// //
|
|
// You should have received a copy of the GNU General Public License //
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef INCLUDE_PSKREPORTERWORKER_H
|
|
#define INCLUDE_PSKREPORTERWORKER_H
|
|
|
|
#include <QObject>
|
|
#include <QList>
|
|
#include <QSet>
|
|
#include <QQueue>
|
|
#include <QUdpSocket>
|
|
|
|
#include "util/ft8message.h"
|
|
#include "util/message.h"
|
|
#include "util/messagequeue.h"
|
|
|
|
|
|
class PskReporterWorker : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
PskReporterWorker();
|
|
~PskReporterWorker() = default;
|
|
MessageQueue* getInputMessageQueue() { return &m_reportQueue; }
|
|
void setMyCallsign(const QString& callsign) { m_myCallsign = callsign; }
|
|
void setMyLocator(const QString& locator) { m_myLocator = locator; }
|
|
void setDecoderInfo(const QString& decoderInfo) { m_decoderInfo = decoderInfo; }
|
|
void setTestMode(bool isTestMode) { m_isTestMode = isTestMode; }
|
|
|
|
private:
|
|
struct decoder_results {
|
|
char call[13];
|
|
char loc[7];
|
|
int32_t freq;
|
|
int32_t snr;
|
|
};
|
|
|
|
QString m_myCallsign;
|
|
QString m_myLocator;
|
|
QString m_decoderInfo;
|
|
bool m_isTestMode = false;
|
|
MessageQueue m_reportQueue;
|
|
QQueue<FT8Message> m_ft8MessageQueue;
|
|
QSet<QString> m_reportedCalls;
|
|
uint32_t m_reportSequenceNumber = 1;
|
|
QDateTime m_lastReportTime;
|
|
QUdpSocket* m_udpSocket;
|
|
uint32_t m_identifier;
|
|
|
|
char txInfoData[1500];
|
|
|
|
static const char hostname[];
|
|
static const char service[];
|
|
static const char test_service[];
|
|
static const char txMode[];
|
|
static const unsigned char rxDescriptor[];
|
|
static const unsigned char txDescriptor[];
|
|
|
|
void processFT8Messages(const QList<FT8Message>& ft8Messages, qint64 baseFrequency);
|
|
void sendMessageToPskReporter(uint32_t txPtr);
|
|
bool handleMessage(const Message& message);
|
|
|
|
inline uint16_t SwapEndian16(uint16_t val) {
|
|
return (val<<8) | (val>>8);
|
|
}
|
|
|
|
|
|
inline uint32_t SwapEndian32(uint32_t val) {
|
|
return (val<<24) | ((val<<8) & 0x00ff0000) | ((val>>8) & 0x0000ff00) | (val>>24);
|
|
}
|
|
|
|
private slots:
|
|
void handleInputMessages();
|
|
|
|
};
|
|
|
|
|
|
#endif // INCLUDE_PSKREPORTERWORKER_H
|