mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -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