mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-04 05:30:32 -05:00 
			
		
		
		
	
		
			
	
	
		
			311 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			311 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#include "osmosdrgui.h"
							 | 
						||
| 
								 | 
							
								#include "ui_osmosdrgui.h"
							 | 
						||
| 
								 | 
							
								#include "plugin/pluginapi.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								OsmoSDRGui::OsmoSDRGui(PluginAPI* pluginAPI, QWidget* parent) :
							 | 
						||
| 
								 | 
							
									QWidget(parent),
							 | 
						||
| 
								 | 
							
									ui(new Ui::OsmoSDRGui),
							 | 
						||
| 
								 | 
							
									m_pluginAPI(pluginAPI),
							 | 
						||
| 
								 | 
							
									m_settings(),
							 | 
						||
| 
								 | 
							
									m_sampleSource(NULL)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									ui->setupUi(this);
							 | 
						||
| 
								 | 
							
									ui->centerFrequency->setValueRange(7, 20000U, 2200000U);
							 | 
						||
| 
								 | 
							
									connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
							 | 
						||
| 
								 | 
							
									displaySettings();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									m_sampleSource = new OsmoSDRInput(m_pluginAPI->getMainWindowMessageQueue());
							 | 
						||
| 
								 | 
							
									m_pluginAPI->setSampleSource(m_sampleSource);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								OsmoSDRGui::~OsmoSDRGui()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									delete ui;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::destroy()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									delete this;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::setName(const QString& name)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									setObjectName(name);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::resetToDefaults()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_generalSettings.resetToDefaults();
							 | 
						||
| 
								 | 
							
									m_settings.resetToDefaults();
							 | 
						||
| 
								 | 
							
									displaySettings();
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								QByteArray OsmoSDRGui::serializeGeneral() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return m_generalSettings.serialize();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool OsmoSDRGui::deserializeGeneral(const QByteArray&data)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if(m_generalSettings.deserialize(data)) {
							 | 
						||
| 
								 | 
							
										displaySettings();
							 | 
						||
| 
								 | 
							
										sendSettings();
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										resetToDefaults();
							 | 
						||
| 
								 | 
							
										return false;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								quint64 OsmoSDRGui::getCenterFrequency() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return m_generalSettings.m_centerFrequency;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								QByteArray OsmoSDRGui::serialize() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return m_settings.serialize();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool OsmoSDRGui::deserialize(const QByteArray& data)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if(m_settings.deserialize(data)) {
							 | 
						||
| 
								 | 
							
										displaySettings();
							 | 
						||
| 
								 | 
							
										sendSettings();
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										resetToDefaults();
							 | 
						||
| 
								 | 
							
										return false;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool OsmoSDRGui::handleMessage(Message* message)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return false;
							 | 
						||
| 
								 | 
							
									/*
							 | 
						||
| 
								 | 
							
									if(message->id() == OsmoSDRInput::MsgReportOsmoSDR::ID()) {
							 | 
						||
| 
								 | 
							
										m_gains = ((RTLSDRInput::MsgReportRTLSDR*)message)->getGains();
							 | 
						||
| 
								 | 
							
										displaySettings();
							 | 
						||
| 
								 | 
							
										message->completed();
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										return false;
							 | 
						||
| 
								 | 
							
									}*/
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#if 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								OsmoSDRGui::OsmoSDRGui(MessageQueue* msgQueue, QWidget* parent) :
							 | 
						||
| 
								 | 
							
									SampleSourceGUI(parent),
							 | 
						||
| 
								 | 
							
									ui(new Ui::OsmoSDRGui),
							 | 
						||
| 
								 | 
							
									m_msgQueue(msgQueue),
							 | 
						||
| 
								 | 
							
									m_settings()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									ui->setupUi(this);
							 | 
						||
| 
								 | 
							
									ui->centerFrequency->setValueRange(7, 20000U, 2200000U);
							 | 
						||
| 
								 | 
							
									connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
							 | 
						||
| 
								 | 
							
									displaySettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								OsmoSDRGui::~OsmoSDRGui()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									delete ui;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								QString OsmoSDRGui::serializeSettings() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return m_settings.serialize();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool OsmoSDRGui::deserializeSettings(const QString& settings)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if(m_settings.deserialize(settings)) {
							 | 
						||
| 
								 | 
							
										displaySettings();
							 | 
						||
| 
								 | 
							
										sendSettings();
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										return false;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool OsmoSDRGui::handleSourceMessage(DSPCmdSourceToGUI* cmd)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return false;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::displaySettings()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									ui->centerFrequency->setValue(m_generalSettings.m_centerFrequency / 1000);
							 | 
						||
| 
								 | 
							
									ui->iqSwap->setChecked(m_settings.m_swapIQ);
							 | 
						||
| 
								 | 
							
									ui->decimation->setValue(m_settings.m_decimation);
							 | 
						||
| 
								 | 
							
									ui->e4000LNAGain->setValue(e4kLNAGainToIdx(m_settings.m_lnaGain));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ui->e4000MixerGain->setCurrentIndex((m_settings.m_mixerGain - 40) / 80);
							 | 
						||
| 
								 | 
							
									if(m_settings.m_mixerEnhancement == 0)
							 | 
						||
| 
								 | 
							
										ui->e4000MixerEnh->setCurrentIndex(0);
							 | 
						||
| 
								 | 
							
									else ui->e4000MixerEnh->setCurrentIndex((m_settings.m_mixerEnhancement + 10) / 20);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ui->e4000if1->setCurrentIndex((m_settings.m_if1gain + 30) / 90);
							 | 
						||
| 
								 | 
							
									ui->e4000if2->setCurrentIndex(m_settings.m_if2gain / 30);
							 | 
						||
| 
								 | 
							
									ui->e4000if3->setCurrentIndex(m_settings.m_if3gain / 30);
							 | 
						||
| 
								 | 
							
									ui->e4000if4->setCurrentIndex(m_settings.m_if4gain / 10);
							 | 
						||
| 
								 | 
							
									ui->e4000if5->setCurrentIndex(m_settings.m_if5gain / 30 - 1);
							 | 
						||
| 
								 | 
							
									ui->e4000if6->setCurrentIndex(m_settings.m_if6gain / 30 - 1);
							 | 
						||
| 
								 | 
							
									ui->filterI1->setValue(m_settings.m_opAmpI1);
							 | 
						||
| 
								 | 
							
									ui->filterI2->setValue(m_settings.m_opAmpI2);
							 | 
						||
| 
								 | 
							
									ui->filterQ1->setValue(m_settings.m_opAmpQ1);
							 | 
						||
| 
								 | 
							
									ui->filterQ2->setValue(m_settings.m_opAmpQ2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ui->e4kI->setValue(m_settings.m_dcOfsI);
							 | 
						||
| 
								 | 
							
									ui->e4kQ->setValue(m_settings.m_dcOfsQ);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::sendSettings()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if(!m_updateTimer.isActive())
							 | 
						||
| 
								 | 
							
										m_updateTimer.start(100);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int OsmoSDRGui::e4kLNAGainToIdx(int gain) const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									static const quint32 gainList[13] = {
							 | 
						||
| 
								 | 
							
										-50, -25, 0, 25, 50, 75, 100, 125, 150, 175, 200, 250, 300
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									for(int i = 0; i < 13; i++) {
							 | 
						||
| 
								 | 
							
										if(gainList[i] == gain)
							 | 
						||
| 
								 | 
							
											return i;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int OsmoSDRGui::e4kIdxToLNAGain(int idx) const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									static const quint32 gainList[13] = {
							 | 
						||
| 
								 | 
							
										-50, -25, 0, 25, 50, 75, 100, 125, 150, 175, 200, 250, 300
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									if((idx < 0) || (idx >= 13))
							 | 
						||
| 
								 | 
							
										return -50;
							 | 
						||
| 
								 | 
							
									else return gainList[idx];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_iqSwap_toggled(bool checked)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_swapIQ = checked;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000MixerGain_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_mixerGain = index * 80 + 40;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000MixerEnh_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if(index == 0)
							 | 
						||
| 
								 | 
							
										m_settings.m_mixerEnhancement = 0;
							 | 
						||
| 
								 | 
							
									else m_settings.m_mixerEnhancement = index * 20 - 10;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000if1_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_if1gain = index * 90 - 30;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000if2_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_if2gain = index * 30;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000if3_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_if3gain = index * 30;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000if4_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_if4gain = index * 10;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000if5_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_if5gain = (index + 1) * 30;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000if6_currentIndexChanged(int index)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_if6gain = (index + 1) * 30;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_centerFrequency_changed(quint64 value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_generalSettings.m_centerFrequency = value * 1000;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_filterI1_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_opAmpI1 = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_filterI2_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_opAmpI2 = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_filterQ1_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_opAmpQ1 = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_filterQ2_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_opAmpQ2 = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_decimation_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									ui->decimationDisplay->setText(tr("1:%1").arg(1 << value));
							 | 
						||
| 
								 | 
							
									m_settings.m_decimation = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4000LNAGain_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									int gain = e4kIdxToLNAGain(value);
							 | 
						||
| 
								 | 
							
									ui->e4000LNAGainDisplay->setText(tr("%1.%2").arg(gain / 10).arg(abs(gain % 10)));
							 | 
						||
| 
								 | 
							
									m_settings.m_lnaGain = gain;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4kI_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_dcOfsI = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::on_e4kQ_valueChanged(int value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_settings.m_dcOfsQ = value;
							 | 
						||
| 
								 | 
							
									sendSettings();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OsmoSDRGui::updateHardware()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_updateTimer.stop();
							 | 
						||
| 
								 | 
							
									Message* msg = OsmoSDRInput::MsgConfigureOsmoSDR::create(m_generalSettings, m_settings);
							 | 
						||
| 
								 | 
							
									msg->submit(m_pluginAPI->getDSPEngineMessageQueue());
							 | 
						||
| 
								 | 
							
								}
							 |