mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	SoapySDR support: input: AGC GUI
This commit is contained in:
		
							parent
							
								
									59c8ecd2d0
								
							
						
					
					
						commit
						f97091e0f3
					
				| @ -221,6 +221,12 @@ void SoapySDRInput::getGlobalGainRange(int& min, int& max) | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool SoapySDRInput::isAGCSupported() | ||||||
|  | { | ||||||
|  |     const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getRxChannelSettings(m_deviceShared.m_channel); | ||||||
|  |     return channelSettings->m_hasAGC; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const std::vector<std::string>& SoapySDRInput::getAntennas() | const std::vector<std::string>& SoapySDRInput::getAntennas() | ||||||
| { | { | ||||||
|     const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getRxChannelSettings(m_deviceShared.m_channel); |     const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getRxChannelSettings(m_deviceShared.m_channel); | ||||||
| @ -933,6 +939,22 @@ bool SoapySDRInput::applySettings(const SoapySDRInputSettings& settings, bool fo | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     if ((m_settings.m_autoGain != settings.m_autoGain) || force) | ||||||
|  |     { | ||||||
|  |         if (dev != 0) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 dev->setGainMode(SOAPY_SDR_RX, requestedChannel, settings.m_autoGain); | ||||||
|  |                 qDebug("SoapySDRInput::applySettings: %s AGC", settings.m_autoGain ? "set" : "unset"); | ||||||
|  |             } | ||||||
|  |             catch (const std::exception &ex) | ||||||
|  |             { | ||||||
|  |                 qCritical("SoapySDRInput::applySettings: cannot %s AGC", settings.m_autoGain ? "set" : "unset"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (forwardChangeOwnDSP) |     if (forwardChangeOwnDSP) | ||||||
|     { |     { | ||||||
|         int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim); |         int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim); | ||||||
|  | |||||||
| @ -148,6 +148,7 @@ public: | |||||||
| 
 | 
 | ||||||
|     void getFrequencyRange(uint64_t& min, uint64_t& max); |     void getFrequencyRange(uint64_t& min, uint64_t& max); | ||||||
|     void getGlobalGainRange(int& min, int& max); |     void getGlobalGainRange(int& min, int& max); | ||||||
|  |     bool isAGCSupported(); | ||||||
|     const std::vector<std::string>& getAntennas(); |     const std::vector<std::string>& getAntennas(); | ||||||
|     const SoapySDR::RangeList& getRateRanges(); |     const SoapySDR::RangeList& getRateRanges(); | ||||||
|     const SoapySDR::RangeList& getBandwidthRanges(); |     const SoapySDR::RangeList& getBandwidthRanges(); | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
| #include <QMessageBox> | #include <QMessageBox> | ||||||
|  | #include <QCheckBox> | ||||||
| 
 | 
 | ||||||
| #include "dsp/dspengine.h" | #include "dsp/dspengine.h" | ||||||
| #include "dsp/dspcommands.h" | #include "dsp/dspcommands.h" | ||||||
| @ -44,7 +45,8 @@ SoapySDRInputGui::SoapySDRInputGui(DeviceUISet *deviceUISet, QWidget* parent) : | |||||||
|     m_antennas(0), |     m_antennas(0), | ||||||
|     m_sampleRateGUI(0), |     m_sampleRateGUI(0), | ||||||
|     m_bandwidthGUI(0), |     m_bandwidthGUI(0), | ||||||
|     m_gainSliderGUI(0) |     m_gainSliderGUI(0), | ||||||
|  |     m_autoGain(0) | ||||||
| { | { | ||||||
|     m_sampleSource = (SoapySDRInput*) m_deviceUISet->m_deviceSourceAPI->getSampleSource(); |     m_sampleSource = (SoapySDRInput*) m_deviceUISet->m_deviceSourceAPI->getSampleSource(); | ||||||
|     ui->setupUi(this); |     ui->setupUi(this); | ||||||
| @ -197,6 +199,21 @@ void SoapySDRInputGui::createGlobalGainControl() | |||||||
|     m_gainSliderGUI->setUnits(QString("")); |     m_gainSliderGUI->setUnits(QString("")); | ||||||
| 
 | 
 | ||||||
|     QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout(); |     QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout(); | ||||||
|  | 
 | ||||||
|  |     QFrame *line = new QFrame(this); | ||||||
|  |     line->setFrameShape(QFrame::HLine); | ||||||
|  |     line->setFrameShadow(QFrame::Sunken); | ||||||
|  |     layout->addWidget(line); | ||||||
|  | 
 | ||||||
|  |     if (m_sampleSource->isAGCSupported()) | ||||||
|  |     { | ||||||
|  |         m_autoGain = new QCheckBox(this); | ||||||
|  |         m_autoGain->setText(QString("AGC")); | ||||||
|  |         layout->addWidget(m_autoGain); | ||||||
|  | 
 | ||||||
|  |         connect(m_autoGain, SIGNAL(toggled(bool)), this, SLOT(autoGainChanged(bool))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     layout->addWidget(m_gainSliderGUI); |     layout->addWidget(m_gainSliderGUI); | ||||||
| 
 | 
 | ||||||
|     connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double))); |     connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double))); | ||||||
| @ -376,6 +393,12 @@ void SoapySDRInputGui::globalGainChanged(double gain) | |||||||
|     sendSettings(); |     sendSettings(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SoapySDRInputGui::autoGainChanged(bool set) | ||||||
|  | { | ||||||
|  |     m_settings.m_autoGain = set; | ||||||
|  |     sendSettings(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SoapySDRInputGui::individualGainChanged(QString name, double value) | void SoapySDRInputGui::individualGainChanged(QString name, double value) | ||||||
| { | { | ||||||
|     m_settings.m_individualGains[name] = value; |     m_settings.m_individualGains[name] = value; | ||||||
| @ -478,6 +501,9 @@ void SoapySDRInputGui::displaySettings() | |||||||
|     if (m_gainSliderGUI) { |     if (m_gainSliderGUI) { | ||||||
|         m_gainSliderGUI->setValue(m_settings.m_globalGain); |         m_gainSliderGUI->setValue(m_settings.m_globalGain); | ||||||
|     } |     } | ||||||
|  |     if (m_autoGain) { | ||||||
|  |         m_autoGain->setChecked(m_settings.m_autoGain); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     ui->dcOffset->setChecked(m_settings.m_dcBlock); |     ui->dcOffset->setChecked(m_settings.m_dcBlock); | ||||||
|     ui->iqImbalance->setChecked(m_settings.m_iqCorrection); |     ui->iqImbalance->setChecked(m_settings.m_iqCorrection); | ||||||
|  | |||||||
| @ -19,7 +19,6 @@ | |||||||
| 
 | 
 | ||||||
| #include <QTimer> | #include <QTimer> | ||||||
| #include <QWidget> | #include <QWidget> | ||||||
| #include <QComboBox> |  | ||||||
| 
 | 
 | ||||||
| #include "plugin/plugininstancegui.h" | #include "plugin/plugininstancegui.h" | ||||||
| #include "util/messagequeue.h" | #include "util/messagequeue.h" | ||||||
| @ -31,6 +30,7 @@ class ItemSettingGUI; | |||||||
| class StringRangeGUI; | class StringRangeGUI; | ||||||
| class DynamicItemSettingGUI; | class DynamicItemSettingGUI; | ||||||
| class IntervalSliderGUI; | class IntervalSliderGUI; | ||||||
|  | class QCheckBox; | ||||||
| 
 | 
 | ||||||
| namespace Ui { | namespace Ui { | ||||||
|     class SoapySDRInputGui; |     class SoapySDRInputGui; | ||||||
| @ -86,6 +86,7 @@ private: | |||||||
|     std::vector<DynamicItemSettingGUI*> m_tunableElementsGUIs; |     std::vector<DynamicItemSettingGUI*> m_tunableElementsGUIs; | ||||||
|     IntervalSliderGUI *m_gainSliderGUI; |     IntervalSliderGUI *m_gainSliderGUI; | ||||||
|     std::vector<DynamicItemSettingGUI*> m_individualGainsGUIs; |     std::vector<DynamicItemSettingGUI*> m_individualGainsGUIs; | ||||||
|  |     QCheckBox *m_autoGain; | ||||||
| 
 | 
 | ||||||
|     void displaySettings(); |     void displaySettings(); | ||||||
|     void displayTunableElementsControlSettings(); |     void displayTunableElementsControlSettings(); | ||||||
| @ -103,6 +104,7 @@ private slots: | |||||||
|     void bandwidthChanged(double bandwidth); |     void bandwidthChanged(double bandwidth); | ||||||
|     void tunableElementChanged(QString name, double value); |     void tunableElementChanged(QString name, double value); | ||||||
|     void globalGainChanged(double gain); |     void globalGainChanged(double gain); | ||||||
|  |     void autoGainChanged(bool set); | ||||||
|     void individualGainChanged(QString name, double value); |     void individualGainChanged(QString name, double value); | ||||||
|     void on_centerFrequency_changed(quint64 value); |     void on_centerFrequency_changed(quint64 value); | ||||||
|     void on_LOppm_valueChanged(int value); |     void on_LOppm_valueChanged(int value); | ||||||
|  | |||||||
| @ -365,13 +365,6 @@ | |||||||
|      </item> |      </item> | ||||||
|     </layout> |     </layout> | ||||||
|    </item> |    </item> | ||||||
|    <item> |  | ||||||
|     <widget class="Line" name="line_freq"> |  | ||||||
|      <property name="orientation"> |  | ||||||
|       <enum>Qt::Horizontal</enum> |  | ||||||
|      </property> |  | ||||||
|     </widget> |  | ||||||
|    </item> |  | ||||||
|    <item> |    <item> | ||||||
|     <widget class="QScrollArea" name="scrollArea"> |     <widget class="QScrollArea" name="scrollArea"> | ||||||
|      <property name="verticalScrollBarPolicy"> |      <property name="verticalScrollBarPolicy"> | ||||||
| @ -386,7 +379,7 @@ | |||||||
|         <x>0</x> |         <x>0</x> | ||||||
|         <y>0</y> |         <y>0</y> | ||||||
|         <width>318</width> |         <width>318</width> | ||||||
|         <height>51</height> |         <height>53</height> | ||||||
|        </rect> |        </rect> | ||||||
|       </property> |       </property> | ||||||
|       <layout class="QVBoxLayout" name="verticalLayout_3"> |       <layout class="QVBoxLayout" name="verticalLayout_3"> | ||||||
|  | |||||||
| @ -40,6 +40,7 @@ void SoapySDRInputSettings::resetToDefaults() | |||||||
|     m_antenna = "NONE"; |     m_antenna = "NONE"; | ||||||
|     m_bandwidth = 1000000; |     m_bandwidth = 1000000; | ||||||
|     m_globalGain = 0; |     m_globalGain = 0; | ||||||
|  |     m_autoGain = false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QByteArray SoapySDRInputSettings::serialize() const | QByteArray SoapySDRInputSettings::serialize() const | ||||||
| @ -59,6 +60,7 @@ QByteArray SoapySDRInputSettings::serialize() const | |||||||
|     s.writeBlob(11, serializeNamedElementMap(m_tunableElements)); |     s.writeBlob(11, serializeNamedElementMap(m_tunableElements)); | ||||||
|     s.writeS32(12, m_globalGain); |     s.writeS32(12, m_globalGain); | ||||||
|     s.writeBlob(13, serializeNamedElementMap(m_individualGains)); |     s.writeBlob(13, serializeNamedElementMap(m_individualGains)); | ||||||
|  |     s.writeBool(14, m_autoGain); | ||||||
| 
 | 
 | ||||||
|     return s.final(); |     return s.final(); | ||||||
| } | } | ||||||
| @ -94,6 +96,7 @@ bool SoapySDRInputSettings::deserialize(const QByteArray& data) | |||||||
|         d.readS32(12, &m_globalGain, 0); |         d.readS32(12, &m_globalGain, 0); | ||||||
|         d.readBlob(13, &blob); |         d.readBlob(13, &blob); | ||||||
|         deserializeNamedElementMap(blob, m_individualGains); |         deserializeNamedElementMap(blob, m_individualGains); | ||||||
|  |         d.readBool(14, &m_autoGain, false); | ||||||
| 
 | 
 | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -43,6 +43,7 @@ struct SoapySDRInputSettings { | |||||||
|     QMap<QString, double> m_tunableElements; |     QMap<QString, double> m_tunableElements; | ||||||
|     qint32 m_globalGain; |     qint32 m_globalGain; | ||||||
|     QMap<QString, double> m_individualGains; |     QMap<QString, double> m_individualGains; | ||||||
|  |     bool m_autoGain; | ||||||
| 
 | 
 | ||||||
|     SoapySDRInputSettings(); |     SoapySDRInputSettings(); | ||||||
|     void resetToDefaults(); |     void resetToDefaults(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user