mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-24 03:02:29 -04:00
Aaronia RSA Rx: get center frequency and sample rate from meta data
This commit is contained in:
parent
9e75ccb699
commit
bfcc98c67c
@ -292,6 +292,9 @@ void AaroniaRTSAGui::updateSampleRateAndFrequency()
|
|||||||
m_deviceUISet->getSpectrum()->setSampleRate(m_deviceSampleRate);
|
m_deviceUISet->getSpectrum()->setSampleRate(m_deviceSampleRate);
|
||||||
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
|
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
|
||||||
ui->deviceRateText->setText(tr("%1M").arg((float)m_deviceSampleRate / 1000 / 1000));
|
ui->deviceRateText->setText(tr("%1M").arg((float)m_deviceSampleRate / 1000 / 1000));
|
||||||
|
ui->centerFrequency->blockSignals(true);
|
||||||
|
ui->centerFrequency->setValue(m_deviceCenterFrequency / 1000);
|
||||||
|
ui->centerFrequency->blockSignals(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AaroniaRTSAGui::openDeviceSettingsDialog(const QPoint& p)
|
void AaroniaRTSAGui::openDeviceSettingsDialog(const QPoint& p)
|
||||||
|
@ -43,7 +43,8 @@ MESSAGE_CLASS_DEFINITION(AaroniaRTSAInput::MsgSetStatus, Message)
|
|||||||
|
|
||||||
AaroniaRTSAInput::AaroniaRTSAInput(DeviceAPI *deviceAPI) :
|
AaroniaRTSAInput::AaroniaRTSAInput(DeviceAPI *deviceAPI) :
|
||||||
m_deviceAPI(deviceAPI),
|
m_deviceAPI(deviceAPI),
|
||||||
m_sampleRate(2.0e5),
|
m_sampleRate(10000000),
|
||||||
|
m_centerFrequency(1450000),
|
||||||
m_settings(),
|
m_settings(),
|
||||||
m_aaroniaRTSAWorker(nullptr),
|
m_aaroniaRTSAWorker(nullptr),
|
||||||
m_aaroniaRTSAWorkerThread(nullptr),
|
m_aaroniaRTSAWorkerThread(nullptr),
|
||||||
@ -220,18 +221,21 @@ bool AaroniaRTSAInput::handleMessage(const Message& message)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (AaroniaRTSAWorker::MsgReportSampleRate::match(message))
|
else if (AaroniaRTSAWorker::MsgReportSampleRateAndFrequency::match(message))
|
||||||
{
|
{
|
||||||
AaroniaRTSAWorker::MsgReportSampleRate& report = (AaroniaRTSAWorker::MsgReportSampleRate&) message;
|
AaroniaRTSAWorker::MsgReportSampleRateAndFrequency& report = (AaroniaRTSAWorker::MsgReportSampleRateAndFrequency&) message;
|
||||||
m_sampleRate = report.getSampleRate();
|
m_sampleRate = report.getSampleRate();
|
||||||
qDebug() << "AaroniaRTSAInput::handleMessage: AaroniaRTSAWorker::MsgReportSampleRate: m_sampleRate: " << m_sampleRate;
|
m_centerFrequency = report.getCenterFrequency();
|
||||||
|
qDebug() << "AaroniaRTSAInput::handleMessage: AaroniaRTSAWorker::MsgReportSampleRateAndFrequency:"
|
||||||
|
<< " m_sampleRate: " << m_sampleRate
|
||||||
|
<< " m-centerFrequency" << m_centerFrequency;
|
||||||
|
|
||||||
if (!m_sampleFifo.setSize(m_sampleRate * 2)) {
|
if (!m_sampleFifo.setSize(m_sampleRate * 2)) {
|
||||||
qCritical("AaroniaRTSAInput::AaroniaRTSAInput: Could not allocate SampleFifo");
|
qCritical("AaroniaRTSAInput::AaroniaRTSAInput: Could not allocate SampleFifo");
|
||||||
}
|
}
|
||||||
|
|
||||||
DSPSignalNotification *notif = new DSPSignalNotification(
|
DSPSignalNotification *notif = new DSPSignalNotification(
|
||||||
m_sampleRate, m_settings.m_centerFrequency);
|
m_sampleRate, m_centerFrequency);
|
||||||
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -156,6 +156,7 @@ private:
|
|||||||
DeviceAPI *m_deviceAPI;
|
DeviceAPI *m_deviceAPI;
|
||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
int m_sampleRate;
|
int m_sampleRate;
|
||||||
|
quint64 m_centerFrequency;
|
||||||
AaroniaRTSASettings m_settings;
|
AaroniaRTSASettings m_settings;
|
||||||
AaroniaRTSAWorker* m_aaroniaRTSAWorker;
|
AaroniaRTSAWorker* m_aaroniaRTSAWorker;
|
||||||
QThread *m_aaroniaRTSAWorkerThread;
|
QThread *m_aaroniaRTSAWorkerThread;
|
||||||
|
@ -16,10 +16,13 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <boost/endian/conversion.hpp>
|
#include <boost/endian/conversion.hpp>
|
||||||
|
|
||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
|
#include "dsp/dspcommands.h"
|
||||||
|
|
||||||
#include "aaroniartsaworker.h"
|
#include "aaroniartsaworker.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRate, Message)
|
MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRateAndFrequency, Message)
|
||||||
|
|
||||||
AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) :
|
AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) :
|
||||||
QObject(),
|
QObject(),
|
||||||
@ -27,28 +30,11 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) :
|
|||||||
m_samplesBuf(),
|
m_samplesBuf(),
|
||||||
m_sampleFifo(sampleFifo),
|
m_sampleFifo(sampleFifo),
|
||||||
m_centerFrequency(1450000),
|
m_centerFrequency(1450000),
|
||||||
m_sampleRate(10.0e6),
|
m_sampleRate(10000000),
|
||||||
m_inputMessageQueue(nullptr),
|
m_inputMessageQueue(nullptr),
|
||||||
m_gain(20),
|
|
||||||
m_useAGC(true),
|
|
||||||
m_status(0),
|
m_status(0),
|
||||||
m_convertBuffer(64e6)
|
m_convertBuffer(64e6)
|
||||||
{
|
{
|
||||||
/*connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick()));
|
|
||||||
|
|
||||||
m_webSocket.setParent(this);
|
|
||||||
connect(&m_webSocket, &QWebSocket::connected,
|
|
||||||
this, &AaroniaRTSAWorker::onConnected);
|
|
||||||
connect(&m_webSocket, &QWebSocket::binaryMessageReceived,
|
|
||||||
this, &AaroniaRTSAWorker::onBinaryMessageReceived);
|
|
||||||
connect(&m_webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
|
|
||||||
this, &AaroniaRTSAWorker::onSocketError);
|
|
||||||
connect(&m_webSocket, &QWebSocket::disconnected,
|
|
||||||
this, &AaroniaRTSAWorker::onDisconnected);
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
// Initialize network manager
|
// Initialize network manager
|
||||||
mNetworkAccessManager = new QNetworkAccessManager(this);
|
mNetworkAccessManager = new QNetworkAccessManager(this);
|
||||||
|
|
||||||
@ -65,8 +51,6 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) :
|
|||||||
|
|
||||||
mPrevTime = 0;
|
mPrevTime = 0;
|
||||||
mPacketSamples = 0;
|
mPacketSamples = 0;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AaroniaRTSAWorker::onSocketError(QAbstractSocket::SocketError error)
|
void AaroniaRTSAWorker::onSocketError(QAbstractSocket::SocketError error)
|
||||||
@ -163,7 +147,7 @@ void AaroniaRTSAWorker::onReadyRead()
|
|||||||
if (mPacketSamples)
|
if (mPacketSamples)
|
||||||
{
|
{
|
||||||
// enough samples
|
// enough samples
|
||||||
if (offset + mPacketSamples * 2 * sizeof(float) <= avail)
|
if (offset + mPacketSamples * 2 * sizeof(float) <= (unsigned long) avail)
|
||||||
{
|
{
|
||||||
// do something with the IQ data
|
// do something with the IQ data
|
||||||
const float *sp = (const float *)(mBuffer.constData() + offset);
|
const float *sp = (const float *)(mBuffer.constData() + offset);
|
||||||
@ -193,12 +177,15 @@ void AaroniaRTSAWorker::onReadyRead()
|
|||||||
mPacketSamples = 0;
|
mPacketSamples = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// is there a complete JSON metadata object in the buffer
|
// is there a complete JSON metadata object in the buffer
|
||||||
int split = mBuffer.indexOf('\x1e', offset);
|
int split = mBuffer.indexOf('\x1e', offset);
|
||||||
|
|
||||||
if (split != -1)
|
if (split != -1)
|
||||||
{
|
{
|
||||||
// Extract it
|
// Extract it
|
||||||
@ -223,6 +210,23 @@ void AaroniaRTSAWorker::onReadyRead()
|
|||||||
// Switch to data phase
|
// Switch to data phase
|
||||||
//mPrevTime = endTime;
|
//mPrevTime = endTime;
|
||||||
mPacketSamples = samples;
|
mPacketSamples = samples;
|
||||||
|
// qDebug() << jdoc.toJson();
|
||||||
|
quint64 endFreq = jdoc["endFrequency"].toDouble();
|
||||||
|
quint64 startFreq = jdoc["startFrequency"].toDouble();
|
||||||
|
int bw = endFreq - startFreq;
|
||||||
|
quint64 midFreq = (endFreq + startFreq) / 2;
|
||||||
|
|
||||||
|
if ((bw != m_sampleRate) || (midFreq != m_centerFrequency))
|
||||||
|
{
|
||||||
|
if (m_inputMessageQueue)
|
||||||
|
{
|
||||||
|
MsgReportSampleRateAndFrequency *msg = MsgReportSampleRateAndFrequency::create(bw, midFreq);
|
||||||
|
m_inputMessageQueue->push(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_sampleRate = bw;
|
||||||
|
m_centerFrequency = midFreq;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -231,9 +235,11 @@ void AaroniaRTSAWorker::onReadyRead()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove consumed data from the buffer
|
// Remove consumed data from the buffer
|
||||||
mBuffer.remove(0, offset);
|
mBuffer.remove(0, offset);
|
||||||
|
@ -40,22 +40,25 @@ class AaroniaRTSAWorker : public QObject {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
class MsgReportSampleRate : public Message {
|
class MsgReportSampleRateAndFrequency : public Message {
|
||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int getSampleRate() const { return m_sampleRate; }
|
int getSampleRate() const { return m_sampleRate; }
|
||||||
|
quint64 getCenterFrequency() const { return m_centerFrequency; }
|
||||||
|
|
||||||
static MsgReportSampleRate* create(int sampleRate) {
|
static MsgReportSampleRateAndFrequency* create(int sampleRate, quint64 centerFrequency) {
|
||||||
return new MsgReportSampleRate(sampleRate);
|
return new MsgReportSampleRateAndFrequency(sampleRate, centerFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_sampleRate;
|
int m_sampleRate;
|
||||||
|
quint64 m_centerFrequency;
|
||||||
|
|
||||||
MsgReportSampleRate(int sampleRate) :
|
MsgReportSampleRateAndFrequency(int sampleRate, qint64 centerFrequency) :
|
||||||
Message(),
|
Message(),
|
||||||
m_sampleRate(sampleRate)
|
m_sampleRate(sampleRate),
|
||||||
|
m_centerFrequency(centerFrequency)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,13 +73,10 @@ private:
|
|||||||
SampleSinkFifo* m_sampleFifo;
|
SampleSinkFifo* m_sampleFifo;
|
||||||
|
|
||||||
QString m_serverAddress;
|
QString m_serverAddress;
|
||||||
uint64_t m_centerFrequency;
|
quint64 m_centerFrequency;
|
||||||
int m_sampleRate;
|
int m_sampleRate;
|
||||||
MessageQueue *m_inputMessageQueue;
|
MessageQueue *m_inputMessageQueue;
|
||||||
|
|
||||||
uint32_t m_gain;
|
|
||||||
bool m_useAGC;
|
|
||||||
|
|
||||||
int m_status; //!< See GUI for status number detail
|
int m_status; //!< See GUI for status number detail
|
||||||
|
|
||||||
void sendCenterFrequency();
|
void sendCenterFrequency();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user