mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 20:40:20 -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()->setCenterFrequency(m_deviceCenterFrequency); | ||||
| 	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) | ||||
|  | ||||
| @ -43,7 +43,8 @@ MESSAGE_CLASS_DEFINITION(AaroniaRTSAInput::MsgSetStatus, Message) | ||||
| 
 | ||||
| AaroniaRTSAInput::AaroniaRTSAInput(DeviceAPI *deviceAPI) : | ||||
|     m_deviceAPI(deviceAPI), | ||||
| 	m_sampleRate(2.0e5), | ||||
| 	m_sampleRate(10000000), | ||||
|     m_centerFrequency(1450000), | ||||
| 	m_settings(), | ||||
| 	m_aaroniaRTSAWorker(nullptr), | ||||
|     m_aaroniaRTSAWorkerThread(nullptr), | ||||
| @ -220,18 +221,21 @@ bool AaroniaRTSAInput::handleMessage(const Message& message) | ||||
| 
 | ||||
|         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(); | ||||
|         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)) { | ||||
|             qCritical("AaroniaRTSAInput::AaroniaRTSAInput: Could not allocate SampleFifo"); | ||||
|         } | ||||
| 
 | ||||
| 		DSPSignalNotification *notif = new DSPSignalNotification( | ||||
| 			m_sampleRate, m_settings.m_centerFrequency); | ||||
| 			m_sampleRate, m_centerFrequency); | ||||
| 		m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); | ||||
| 
 | ||||
|         return true; | ||||
|  | ||||
| @ -156,6 +156,7 @@ private: | ||||
| 	DeviceAPI *m_deviceAPI; | ||||
| 	QMutex m_mutex; | ||||
|     int m_sampleRate; | ||||
|     quint64 m_centerFrequency; | ||||
| 	AaroniaRTSASettings m_settings; | ||||
| 	AaroniaRTSAWorker* m_aaroniaRTSAWorker; | ||||
| 	QThread *m_aaroniaRTSAWorkerThread; | ||||
|  | ||||
| @ -16,10 +16,13 @@ | ||||
| ///////////////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| #include <boost/endian/conversion.hpp> | ||||
| 
 | ||||
| #include "util/messagequeue.h" | ||||
| #include "dsp/dspcommands.h" | ||||
| 
 | ||||
| #include "aaroniartsaworker.h" | ||||
| 
 | ||||
| MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRate, Message) | ||||
| MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRateAndFrequency, Message) | ||||
| 
 | ||||
| AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : | ||||
| 	QObject(), | ||||
| @ -27,28 +30,11 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : | ||||
| 	m_samplesBuf(), | ||||
| 	m_sampleFifo(sampleFifo), | ||||
| 	m_centerFrequency(1450000), | ||||
| 	m_sampleRate(10.0e6), | ||||
| 	m_sampleRate(10000000), | ||||
|     m_inputMessageQueue(nullptr), | ||||
| 	m_gain(20), | ||||
| 	m_useAGC(true), | ||||
| 	m_status(0), | ||||
| 	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
 | ||||
| 	mNetworkAccessManager = new QNetworkAccessManager(this); | ||||
| 
 | ||||
| @ -65,8 +51,6 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : | ||||
| 
 | ||||
| 	mPrevTime = 0; | ||||
| 	mPacketSamples = 0; | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void AaroniaRTSAWorker::onSocketError(QAbstractSocket::SocketError error) | ||||
| @ -146,10 +130,10 @@ void AaroniaRTSAWorker::onReadyRead() | ||||
| 	QTextStream	qout(stdout); | ||||
| 
 | ||||
| 	// read as many bytes as possible into input buffer
 | ||||
| 	qint64		n = mReply->bytesAvailable(); | ||||
| 	qint64		bs = mBuffer.size(); | ||||
| 	qint64 n = mReply->bytesAvailable(); | ||||
| 	qint64 bs = mBuffer.size(); | ||||
| 	mBuffer.resize(bs + n); | ||||
| 	qint64		done = mReply->read(mBuffer.data() + bs, n); | ||||
| 	qint64 done = mReply->read(mBuffer.data() + bs, n); | ||||
| 	mBuffer.resize(bs + done); | ||||
| 
 | ||||
| 	// intialize parsing
 | ||||
| @ -163,10 +147,10 @@ void AaroniaRTSAWorker::onReadyRead() | ||||
| 		if (mPacketSamples) | ||||
| 		{ | ||||
| 			// enough samples
 | ||||
| 			if (offset + mPacketSamples * 2 * sizeof(float) <= avail) | ||||
| 			if (offset + mPacketSamples * 2 * sizeof(float) <= (unsigned long) avail) | ||||
| 			{ | ||||
| 				// do something with the IQ data
 | ||||
| 				const float	*	sp = (const float * )(mBuffer.constData() + offset); | ||||
| 				const float	*sp = (const float *)(mBuffer.constData() + offset); | ||||
| 
 | ||||
| 				 SampleVector::iterator it = m_convertBuffer.begin(); | ||||
| 
 | ||||
| @ -193,28 +177,31 @@ void AaroniaRTSAWorker::onReadyRead() | ||||
| 				mPacketSamples = 0; | ||||
| 			} | ||||
| 			else | ||||
|             { | ||||
| 				break; | ||||
|             } | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			// is there a complete JSON metadata object in the buffer
 | ||||
| 			int	split = mBuffer.indexOf('\x1e', offset); | ||||
| 			if (split != -1) | ||||
| 
 | ||||
|             if (split != -1) | ||||
| 			{ | ||||
| 				// Extract it
 | ||||
| 				QByteArray			data	=	mBuffer.mid(offset, split - offset); | ||||
| 				QByteArray data	= mBuffer.mid(offset, split - offset); | ||||
| 				offset = split + 1; | ||||
| 
 | ||||
| 				// Parse the JSON data
 | ||||
| 
 | ||||
| 				QJsonParseError	error; | ||||
| 				QJsonDocument	jdoc = QJsonDocument::fromJson(data, &error); | ||||
| 				QJsonDocument jdoc = QJsonDocument::fromJson(data, &error); | ||||
| 
 | ||||
| 				if (error.error == QJsonParseError::NoError) | ||||
| 				{ | ||||
| 					// Extract fields of interest
 | ||||
| 					//double	startTime = jdoc["startTime"].toDouble(), endTime = jdoc["endTime"].toDouble();
 | ||||
| 					int		samples = jdoc["samples"].toInt(); | ||||
| 					int	samples = jdoc["samples"].toInt(); | ||||
| 
 | ||||
| 					// Dump packet loss
 | ||||
| 					//if (startTime != mPrevTime)
 | ||||
| @ -223,6 +210,23 @@ void AaroniaRTSAWorker::onReadyRead() | ||||
| 					// Switch to data phase
 | ||||
| 					//mPrevTime = endTime;
 | ||||
| 					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 | ||||
| 				{ | ||||
| @ -231,7 +235,9 @@ void AaroniaRTSAWorker::onReadyRead() | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
|             { | ||||
| 				break; | ||||
|             } | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -40,22 +40,25 @@ class AaroniaRTSAWorker : public QObject { | ||||
| 	Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
| 	class MsgReportSampleRate : public Message { | ||||
| 	class MsgReportSampleRateAndFrequency : public Message { | ||||
| 		MESSAGE_CLASS_DECLARATION | ||||
| 
 | ||||
| 	public: | ||||
| 		int getSampleRate() const { return m_sampleRate; } | ||||
|         quint64 getCenterFrequency() const { return m_centerFrequency; } | ||||
| 
 | ||||
| 		static MsgReportSampleRate* create(int sampleRate) { | ||||
| 			return new MsgReportSampleRate(sampleRate); | ||||
| 		static MsgReportSampleRateAndFrequency* create(int sampleRate, quint64 centerFrequency) { | ||||
| 			return new MsgReportSampleRateAndFrequency(sampleRate, centerFrequency); | ||||
| 		} | ||||
| 
 | ||||
| 	private: | ||||
| 		int m_sampleRate; | ||||
|         quint64 m_centerFrequency; | ||||
| 
 | ||||
| 		MsgReportSampleRate(int sampleRate) : | ||||
| 		MsgReportSampleRateAndFrequency(int sampleRate, qint64 centerFrequency) : | ||||
| 			Message(), | ||||
| 			m_sampleRate(sampleRate) | ||||
| 			m_sampleRate(sampleRate), | ||||
|             m_centerFrequency(centerFrequency) | ||||
| 		{ } | ||||
| 	}; | ||||
| 
 | ||||
| @ -70,13 +73,10 @@ private: | ||||
| 	SampleSinkFifo* m_sampleFifo; | ||||
| 
 | ||||
| 	QString m_serverAddress; | ||||
| 	uint64_t m_centerFrequency; | ||||
| 	quint64 m_centerFrequency; | ||||
|     int m_sampleRate; | ||||
|     MessageQueue *m_inputMessageQueue; | ||||
| 
 | ||||
| 	uint32_t m_gain; | ||||
| 	bool m_useAGC; | ||||
| 
 | ||||
|     int m_status; //!< See GUI for status number detail
 | ||||
| 
 | ||||
| 	void sendCenterFrequency(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user