mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -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 () |         endif () | ||||||
|         # Disable pkg-config to allow LIBUSB_INCLUDE_DIRS to be used |         # Disable pkg-config to allow LIBUSB_INCLUDE_DIRS to be used | ||||||
|         set(DISABLE_PKGCONFIG "-DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=ON") |         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 |         ExternalProject_Add(rtlsdr | ||||||
|                 GIT_REPOSITORY https://github.com/osmocom/rtl-sdr.git |                 GIT_REPOSITORY https://github.com/osmocom/rtl-sdr.git | ||||||
|                 GIT_TAG ${RTLSDR_TAG} |                 GIT_TAG ${RTLSDR_TAG} | ||||||
|  | |||||||
| @ -68,6 +68,14 @@ RTLSDRGui::RTLSDRGui(DeviceUISet *deviceUISet, QWidget* parent) : | |||||||
| 	m_gains = m_sampleSource->getGains(); | 	m_gains = m_sampleSource->getGains(); | ||||||
| 	displayGains(); | 	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); | 	connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); | ||||||
|     m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); |     m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); | ||||||
| } | } | ||||||
| @ -474,6 +482,7 @@ void RTLSDRGui::on_checkBox_stateChanged(int state) | |||||||
| 	if (state == Qt::Checked) | 	if (state == Qt::Checked) | ||||||
| 	{ | 	{ | ||||||
| 		ui->gain->setEnabled(false); | 		ui->gain->setEnabled(false); | ||||||
|  |         ui->offsetTuning->setEnabled(false); | ||||||
|         m_settings.m_noModMode = true; |         m_settings.m_noModMode = true; | ||||||
| 	    updateFrequencyLimits(); | 	    updateFrequencyLimits(); | ||||||
| 		ui->centerFrequency->setValue(7000); | 		ui->centerFrequency->setValue(7000); | ||||||
| @ -482,6 +491,7 @@ void RTLSDRGui::on_checkBox_stateChanged(int state) | |||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		ui->gain->setEnabled(true); | 		ui->gain->setEnabled(true); | ||||||
|  |         ui->offsetTuning->setEnabled(true); | ||||||
|         m_settings.m_noModMode = false; |         m_settings.m_noModMode = false; | ||||||
| 	    updateFrequencyLimits(); | 	    updateFrequencyLimits(); | ||||||
| 		ui->centerFrequency->setValue(434000); | 		ui->centerFrequency->setValue(434000); | ||||||
|  | |||||||
| @ -500,12 +500,12 @@ | |||||||
|    <item> |    <item> | ||||||
|     <layout class="QHBoxLayout" name="horizontalLayout_direct"> |     <layout class="QHBoxLayout" name="horizontalLayout_direct"> | ||||||
|      <item> |      <item> | ||||||
|       <widget class="QCheckBox" name="checkBox"> |       <widget class="QLabel" name="tunerType"> | ||||||
|        <property name="toolTip"> |        <property name="toolTip"> | ||||||
|         <string>RTLSDR special direct sampling mode (HF Bands)</string> |         <string>Tuner type</string> | ||||||
|        </property> |        </property> | ||||||
|        <property name="text"> |        <property name="text"> | ||||||
|         <string>No-mod DS</string> |         <string>Tuner: Unknown</string> | ||||||
|        </property> |        </property> | ||||||
|       </widget> |       </widget> | ||||||
|      </item> |      </item> | ||||||
| @ -522,6 +522,16 @@ | |||||||
|        </property> |        </property> | ||||||
|       </spacer> |       </spacer> | ||||||
|      </item> |      </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> |      <item> | ||||||
|       <widget class="QCheckBox" name="offsetTuning"> |       <widget class="QCheckBox" name="offsetTuning"> | ||||||
|        <property name="toolTip"> |        <property name="toolTip"> | ||||||
|  | |||||||
| @ -57,6 +57,7 @@ RTLSDRInput::RTLSDRInput(DeviceAPI *deviceAPI) : | |||||||
| 	m_dev(0), | 	m_dev(0), | ||||||
| 	m_rtlSDRThread(nullptr), | 	m_rtlSDRThread(nullptr), | ||||||
| 	m_deviceDescription("RTLSDR"), | 	m_deviceDescription("RTLSDR"), | ||||||
|  |     m_tunerType(RTLSDR_TUNER_UNKNOWN), | ||||||
| 	m_running(false) | 	m_running(false) | ||||||
| { | { | ||||||
|     m_sampleFifo.setLabel(m_deviceDescription); |     m_sampleFifo.setLabel(m_deviceDescription); | ||||||
| @ -155,7 +156,9 @@ bool RTLSDRInput::openDevice() | |||||||
|         return false; |         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); |     m_deviceDescription = QString("%1 (SN %2)").arg(product).arg(serial); | ||||||
| 
 | 
 | ||||||
|     if ((res = rtlsdr_set_sample_rate(m_dev, 1152000)) < 0) |     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) |         if (m_dev != 0) | ||||||
|         { |         { | ||||||
| @ -520,6 +524,11 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, const QList<QStr | |||||||
|     { |     { | ||||||
|         if(m_dev != 0) |         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; |             qDebug() << "Set tuner gain " << settings.m_gain; | ||||||
|             if (rtlsdr_set_tuner_gain(m_dev, settings.m_gain) != 0) { |             if (rtlsdr_set_tuner_gain(m_dev, settings.m_gain) != 0) { | ||||||
|                 qCritical("RTLSDRInput::applySettings: rtlsdr_set_tuner_gain() failed"); |                 qCritical("RTLSDRInput::applySettings: rtlsdr_set_tuner_gain() failed"); | ||||||
| @ -566,6 +575,17 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, const QList<QStr | |||||||
|     return true; |     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) | void RTLSDRInput::set_ds_mode(int on) | ||||||
| { | { | ||||||
| 	rtlsdr_set_direct_sampling(m_dev, on); | 	rtlsdr_set_direct_sampling(m_dev, on); | ||||||
|  | |||||||
| @ -133,6 +133,8 @@ public: | |||||||
|             SWGSDRangel::SWGDeviceSettings& response); |             SWGSDRangel::SWGDeviceSettings& response); | ||||||
| 
 | 
 | ||||||
| 	const std::vector<int>& getGains() const { return m_gains; } | 	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); | 	void set_ds_mode(int on); | ||||||
| 
 | 
 | ||||||
| 	static const quint64 frequencyLowRangeMin; | 	static const quint64 frequencyLowRangeMin; | ||||||
| @ -152,6 +154,7 @@ private: | |||||||
| 	RTLSDRThread* m_rtlSDRThread; | 	RTLSDRThread* m_rtlSDRThread; | ||||||
| 	QString m_deviceDescription; | 	QString m_deviceDescription; | ||||||
| 	std::vector<int> m_gains; | 	std::vector<int> m_gains; | ||||||
|  |     rtlsdr_tuner m_tunerType; | ||||||
| 	bool m_running; | 	bool m_running; | ||||||
|     QNetworkAccessManager *m_networkManager; |     QNetworkAccessManager *m_networkManager; | ||||||
|     QNetworkRequest m_networkRequest; |     QNetworkRequest m_networkRequest; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user