mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	Fix RTLSDR E4000 gain and bandwidth settings. Add tuner type to GUI.
This commit is contained in:
		
							parent
							
								
									6105212bd4
								
							
						
					
					
						commit
						05914cc0ba
					
				
							
								
								
									
										6
									
								
								external/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								external/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @ -1091,7 +1091,11 @@ if (WIN32 OR APPLE) | ||||
|         endif () | ||||
|         # Disable pkg-config to allow LIBUSB_INCLUDE_DIRS to be used | ||||
|         set(DISABLE_PKGCONFIG "-DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=ON") | ||||
|         # needs libusb | ||||
|         # If we want to use https://github.com/librtlsdr/librtlsdr instead of https://github.com/osmocom/rtl-sdr.git | ||||
|         #  - Don't use DISABLE_PKGCONFIG | ||||
|         #  - Use -DLIBUSB_INCLUDE_DIR instead of -DLIBUSB_INCLUDE_DIRS | ||||
|         #  - Build target is rtl_sdr rather than rtlsdr | ||||
|         #  - Use tag development otherwise it will not build with MSVC | ||||
|         ExternalProject_Add(rtlsdr | ||||
|                 GIT_REPOSITORY https://github.com/osmocom/rtl-sdr.git | ||||
|                 GIT_TAG ${RTLSDR_TAG} | ||||
|  | ||||
| @ -68,6 +68,14 @@ RTLSDRGui::RTLSDRGui(DeviceUISet *deviceUISet, QWidget* parent) : | ||||
| 	m_gains = m_sampleSource->getGains(); | ||||
| 	displayGains(); | ||||
| 
 | ||||
|     rtlsdr_tuner tunerType = m_sampleSource->getTunerType(); | ||||
|     // Disable widgets not relevent for this tuner
 | ||||
|     bool offsetTuningEnabled = (tunerType != RTLSDR_TUNER_R820T) && (tunerType != RTLSDR_TUNER_R828D); | ||||
|     if (!offsetTuningEnabled) { | ||||
|         ui->offsetTuning->setEnabled(false); | ||||
|     } | ||||
|     ui->tunerType->setText("Tuner: " + m_sampleSource->getTunerName()); | ||||
| 
 | ||||
| 	connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); | ||||
|     m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); | ||||
| } | ||||
| @ -474,6 +482,7 @@ void RTLSDRGui::on_checkBox_stateChanged(int state) | ||||
| 	if (state == Qt::Checked) | ||||
| 	{ | ||||
| 		ui->gain->setEnabled(false); | ||||
|         ui->offsetTuning->setEnabled(false); | ||||
|         m_settings.m_noModMode = true; | ||||
| 	    updateFrequencyLimits(); | ||||
| 		ui->centerFrequency->setValue(7000); | ||||
| @ -482,6 +491,7 @@ void RTLSDRGui::on_checkBox_stateChanged(int state) | ||||
| 	else | ||||
| 	{ | ||||
| 		ui->gain->setEnabled(true); | ||||
|         ui->offsetTuning->setEnabled(true); | ||||
|         m_settings.m_noModMode = false; | ||||
| 	    updateFrequencyLimits(); | ||||
| 		ui->centerFrequency->setValue(434000); | ||||
|  | ||||
| @ -500,12 +500,12 @@ | ||||
|    <item> | ||||
|     <layout class="QHBoxLayout" name="horizontalLayout_direct"> | ||||
|      <item> | ||||
|       <widget class="QCheckBox" name="checkBox"> | ||||
|       <widget class="QLabel" name="tunerType"> | ||||
|        <property name="toolTip"> | ||||
|         <string>RTLSDR special direct sampling mode (HF Bands)</string> | ||||
|         <string>Tuner type</string> | ||||
|        </property> | ||||
|        <property name="text"> | ||||
|         <string>No-mod DS</string> | ||||
|         <string>Tuner: Unknown</string> | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
| @ -522,6 +522,16 @@ | ||||
|        </property> | ||||
|       </spacer> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QCheckBox" name="checkBox"> | ||||
|        <property name="toolTip"> | ||||
|         <string>RTLSDR special direct sampling mode (HF Bands)</string> | ||||
|        </property> | ||||
|        <property name="text"> | ||||
|         <string>DS</string> | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QCheckBox" name="offsetTuning"> | ||||
|        <property name="toolTip"> | ||||
|  | ||||
| @ -57,6 +57,7 @@ RTLSDRInput::RTLSDRInput(DeviceAPI *deviceAPI) : | ||||
| 	m_dev(0), | ||||
| 	m_rtlSDRThread(nullptr), | ||||
| 	m_deviceDescription("RTLSDR"), | ||||
|     m_tunerType(RTLSDR_TUNER_UNKNOWN), | ||||
| 	m_running(false) | ||||
| { | ||||
|     m_sampleFifo.setLabel(m_deviceDescription); | ||||
| @ -155,7 +156,9 @@ bool RTLSDRInput::openDevice() | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     qInfo("RTLSDRInput::openDevice: open: %s %s, SN: %s", vendor, product, serial); | ||||
|     m_tunerType = rtlsdr_get_tuner_type(m_dev); | ||||
| 
 | ||||
|     qInfo("RTLSDRInput::openDevice: open: %s %s, SN: %s Tuner: %s", vendor, product, serial, getTunerName()); | ||||
|     m_deviceDescription = QString("%1 (SN %2)").arg(product).arg(serial); | ||||
| 
 | ||||
|     if ((res = rtlsdr_set_sample_rate(m_dev, 1152000)) < 0) | ||||
| @ -504,7 +507,8 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, const QList<QStr | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (settingsKeys.contains("offsetTuning") || force) | ||||
|     // Reapply offset_tuning setting if bandwidth is changed, otherwise frequency response of filter looks wrong on E4000
 | ||||
|     if (settingsKeys.contains("offsetTuning") || settingsKeys.contains("rfBandwidth") || force) | ||||
|     { | ||||
|         if (m_dev != 0) | ||||
|         { | ||||
| @ -520,6 +524,11 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, const QList<QStr | ||||
|     { | ||||
|         if(m_dev != 0) | ||||
|         { | ||||
|             // Nooelec E4000 SDRs appear to require tuner_gain_mode to be reset to manual before
 | ||||
|             // each call to set_tuner_gain, otherwise tuner AGC seems to be reenabled
 | ||||
|             if (rtlsdr_set_tuner_gain_mode(m_dev, 1) < 0) { | ||||
|                 qCritical("RTLSDRInput::applySettings: error setting tuner gain mode to manual"); | ||||
|             } | ||||
|             qDebug() << "Set tuner gain " << settings.m_gain; | ||||
|             if (rtlsdr_set_tuner_gain(m_dev, settings.m_gain) != 0) { | ||||
|                 qCritical("RTLSDRInput::applySettings: rtlsdr_set_tuner_gain() failed"); | ||||
| @ -566,6 +575,17 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, const QList<QStr | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| QString RTLSDRInput::getTunerName() const | ||||
| { | ||||
|     const static QStringList names = {"Unknown", "E4000", "FC0012", "FC0013", "FC2580", "R820T", "R828D"}; | ||||
| 
 | ||||
|     if ((int) m_tunerType <= names.size()) { | ||||
|         return names[(int) m_tunerType]; | ||||
|     } else { | ||||
|         return names[0]; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void RTLSDRInput::set_ds_mode(int on) | ||||
| { | ||||
| 	rtlsdr_set_direct_sampling(m_dev, on); | ||||
|  | ||||
| @ -133,6 +133,8 @@ public: | ||||
|             SWGSDRangel::SWGDeviceSettings& response); | ||||
| 
 | ||||
| 	const std::vector<int>& getGains() const { return m_gains; } | ||||
|     rtlsdr_tuner getTunerType() const { return m_tunerType; } | ||||
|     QString getTunerName() const; | ||||
| 	void set_ds_mode(int on); | ||||
| 
 | ||||
| 	static const quint64 frequencyLowRangeMin; | ||||
| @ -152,6 +154,7 @@ private: | ||||
| 	RTLSDRThread* m_rtlSDRThread; | ||||
| 	QString m_deviceDescription; | ||||
| 	std::vector<int> m_gains; | ||||
|     rtlsdr_tuner m_tunerType; | ||||
| 	bool m_running; | ||||
|     QNetworkAccessManager *m_networkManager; | ||||
|     QNetworkRequest m_networkRequest; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user