1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-05 06:37:51 -04:00

Websocket spectrum: fixed spectrum sending

This commit is contained in:
f4exb 2020-05-04 15:28:33 +02:00
parent a09b66c38b
commit 2a2039eb4f
2 changed files with 27 additions and 9 deletions

View File

@ -27,11 +27,20 @@ WSSpectrum::WSSpectrum(QObject *parent) :
m_port(8887), m_port(8887),
m_webSocketServer(nullptr) m_webSocketServer(nullptr)
{ {
connect(this,
SIGNAL(payloadToSend(const QByteArray&)),
this,
SLOT(sendPayload(const QByteArray&)),
Qt::QueuedConnection);
m_timer.start(); m_timer.start();
} }
WSSpectrum::~WSSpectrum() WSSpectrum::~WSSpectrum()
{ {
disconnect(this,
SIGNAL(payloadToSend(const QByteArray&)),
this,
SLOT(sendPayload(const QByteArray&)));
closeSocket(); closeSocket();
} }
@ -76,7 +85,7 @@ QString WSSpectrum::getWebSocketIdentifier(QWebSocket *peer)
void WSSpectrum::onNewConnection() void WSSpectrum::onNewConnection()
{ {
auto pSocket = m_webSocketServer->nextPendingConnection(); auto pSocket = m_webSocketServer->nextPendingConnection();
qDebug() << " WSSpectrum::onNewConnection: " << getWebSocketIdentifier(pSocket) << " connected"; qDebug() << "WSSpectrum::onNewConnection: " << getWebSocketIdentifier(pSocket) << " connected";
pSocket->setParent(this); pSocket->setParent(this);
connect(pSocket, &QWebSocket::textMessageReceived, this, &WSSpectrum::processClientMessage); connect(pSocket, &QWebSocket::textMessageReceived, this, &WSSpectrum::processClientMessage);
@ -132,7 +141,12 @@ void WSSpectrum::newSpectrum(
linear linear
); );
//qDebug() << "WSSpectrum::newSpectrum: " << payload.size() << " bytes in " << elapsed << " ms"; //qDebug() << "WSSpectrum::newSpectrum: " << payload.size() << " bytes in " << elapsed << " ms";
emit payloadToSend(payload);
}
void WSSpectrum::sendPayload(const QByteArray& payload)
{
//qDebug() << "WSSpectrum::sendPayload: " << payload.size() << " bytes";
for (QWebSocket *pClient : qAsConst(m_clients)) { for (QWebSocket *pClient : qAsConst(m_clients)) {
pClient->sendBinaryMessage(payload); pClient->sendBinaryMessage(payload);
} }
@ -152,14 +166,14 @@ void WSSpectrum::buildPayload(
{ {
QBuffer buffer(&bytes); QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly); buffer.open(QIODevice::WriteOnly);
buffer.write((char*) &fftSize, sizeof(int)); buffer.write((char*) &centerFrequency, sizeof(uint64_t)); // 0
buffer.write((char*) &fftTimeMs, sizeof(int64_t)); buffer.write((char*) &fftTimeMs, sizeof(int64_t)); // 8
buffer.write((char*) &refLevel, sizeof(float)); buffer.write((char*) &fftSize, sizeof(int)); // 16
buffer.write((char*) &powerRange, sizeof(float)); buffer.write((char*) &refLevel, sizeof(float)); // 20
buffer.write((char*) &centerFrequency, sizeof(uint64_t)); buffer.write((char*) &powerRange, sizeof(float)); // 24
buffer.write((char*) &bandwidth, sizeof(int)); buffer.write((char*) &bandwidth, sizeof(int)); // 28
int linearInt = linear ? 1 : 0; int linearInt = linear ? 1 : 0;
buffer.write((char*) &linearInt, sizeof(int)); buffer.write((char*) &linearInt, sizeof(int)); // 32
buffer.write((char*) spectrum.data(), fftSize*sizeof(Real)); buffer.write((char*) spectrum.data(), fftSize*sizeof(Real)); // 36
buffer.close(); buffer.close();
} }

View File

@ -54,10 +54,14 @@ public:
bool linear bool linear
); );
signals:
void payloadToSend(const QByteArray& payload);
private slots: private slots:
void onNewConnection(); void onNewConnection();
void processClientMessage(const QString &message); void processClientMessage(const QString &message);
void socketDisconnected(); void socketDisconnected();
void sendPayload(const QByteArray& payload);
private: private:
QHostAddress m_listeningAddress; QHostAddress m_listeningAddress;