mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	BladeRF2 output: implemented LO soft correction
This commit is contained in:
		
							parent
							
								
									b5c4b532ae
								
							
						
					
					
						commit
						e754dee625
					
				| @ -502,6 +502,25 @@ void BladeRF2Output::setCenterFrequency(qint64 centerFrequency) | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool BladeRF2Output::setDeviceCenterFrequency(struct bladerf *dev, int requestedChannel, quint64 freq_hz) | ||||||
|  | { | ||||||
|  |     qint64 df = ((qint64)freq_hz * m_settings.m_LOppmTenths) / 10000000LL; | ||||||
|  |     freq_hz += df; | ||||||
|  | 
 | ||||||
|  |     int status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(requestedChannel), freq_hz); | ||||||
|  | 
 | ||||||
|  |     if (status < 0) { | ||||||
|  |         qWarning("BladeRF2Output::setDeviceCenterFrequency: bladerf_set_frequency(%lld) failed: %s", | ||||||
|  |                 freq_hz, bladerf_strerror(status)); | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         qDebug("BladeRF2Output::setDeviceCenterFrequency: bladerf_set_frequency(%lld)", freq_hz); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void BladeRF2Output::getFrequencyRange(uint64_t& min, uint64_t& max, int& step) | void BladeRF2Output::getFrequencyRange(uint64_t& min, uint64_t& max, int& step) | ||||||
| { | { | ||||||
|     if (m_deviceShared.m_dev) { |     if (m_deviceShared.m_dev) { | ||||||
| @ -572,6 +591,7 @@ bool BladeRF2Output::handleMessage(const Message& message) | |||||||
|             else // Tx buddy change: check for: frequency, gain mode and value, bias tee, sample rate, bandwidth
 |             else // Tx buddy change: check for: frequency, gain mode and value, bias tee, sample rate, bandwidth
 | ||||||
|             { |             { | ||||||
|                 settings.m_devSampleRate = report.getDevSampleRate(); |                 settings.m_devSampleRate = report.getDevSampleRate(); | ||||||
|  |                 settings.m_LOppmTenths = report.getLOppmTenths(); | ||||||
|                 settings.m_centerFrequency = report.getCenterFrequency(); |                 settings.m_centerFrequency = report.getCenterFrequency(); | ||||||
| 
 | 
 | ||||||
|                 status = bladerf_get_bandwidth(dev, BLADERF_CHANNEL_TX(requestedChannel), &tmp_uint); |                 status = bladerf_get_bandwidth(dev, BLADERF_CHANNEL_TX(requestedChannel), &tmp_uint); | ||||||
| @ -733,6 +753,7 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if ((m_settings.m_centerFrequency != settings.m_centerFrequency) |     if ((m_settings.m_centerFrequency != settings.m_centerFrequency) | ||||||
|  |         || (m_settings.m_LOppmTenths != settings.m_LOppmTenths) | ||||||
|         || (m_settings.m_devSampleRate != settings.m_devSampleRate) || force) |         || (m_settings.m_devSampleRate != settings.m_devSampleRate) || force) | ||||||
|     { |     { | ||||||
|         forwardChangeOwnDSP = true; |         forwardChangeOwnDSP = true; | ||||||
| @ -740,16 +761,8 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool | |||||||
| 
 | 
 | ||||||
|         if (dev != 0) |         if (dev != 0) | ||||||
|         { |         { | ||||||
|             int status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(requestedChannel), settings.m_centerFrequency); |             if (setDeviceCenterFrequency(dev, requestedChannel, settings.m_centerFrequency)) | ||||||
| 
 |  | ||||||
|             if (status < 0) { |  | ||||||
|                 qWarning("BladeRF2Output::applySettings: bladerf_set_frequency(%lld) failed: %s", |  | ||||||
|                         settings.m_centerFrequency, bladerf_strerror(status)); |  | ||||||
|             } |  | ||||||
|             else |  | ||||||
|             { |             { | ||||||
|                 qDebug("BladeRF2Output::applySettings: bladerf_set_frequency(%lld)", settings.m_centerFrequency); |  | ||||||
| 
 |  | ||||||
|                 if (getMessageQueueToGUI()) |                 if (getMessageQueueToGUI()) | ||||||
|                 { |                 { | ||||||
|                     int min, max, step; |                     int min, max, step; | ||||||
| @ -802,8 +815,8 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool | |||||||
|         { |         { | ||||||
|             DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create( |             DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create( | ||||||
|                     settings.m_centerFrequency, |                     settings.m_centerFrequency, | ||||||
|                     0, |                     settings.m_LOppmTenths, | ||||||
|                     0, |                     2, | ||||||
|                     settings.m_devSampleRate, |                     settings.m_devSampleRate, | ||||||
|                     false); |                     false); | ||||||
|             (*itSource)->getSampleSourceInputMessageQueue()->push(report); |             (*itSource)->getSampleSourceInputMessageQueue()->push(report); | ||||||
| @ -820,8 +833,8 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool | |||||||
|         { |         { | ||||||
|             DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create( |             DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create( | ||||||
|                     settings.m_centerFrequency, |                     settings.m_centerFrequency, | ||||||
|                     0, |                     settings.m_LOppmTenths, | ||||||
|                     0, |                     2, | ||||||
|                     settings.m_devSampleRate, |                     settings.m_devSampleRate, | ||||||
|                     false); |                     false); | ||||||
|             (*itSink)->getSampleSinkInputMessageQueue()->push(report); |             (*itSink)->getSampleSinkInputMessageQueue()->push(report); | ||||||
| @ -832,6 +845,7 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool | |||||||
| 
 | 
 | ||||||
|     qDebug() << "BladeRF2Output::applySettings: " |     qDebug() << "BladeRF2Output::applySettings: " | ||||||
|             << " m_centerFrequency: " << m_settings.m_centerFrequency << " Hz" |             << " m_centerFrequency: " << m_settings.m_centerFrequency << " Hz" | ||||||
|  |             << " m_LOppmTenths: " << m_settings.m_LOppmTenths | ||||||
|             << " m_bandwidth: " << m_settings.m_bandwidth |             << " m_bandwidth: " << m_settings.m_bandwidth | ||||||
|             << " m_log2Interp: " << m_settings.m_log2Interp |             << " m_log2Interp: " << m_settings.m_log2Interp | ||||||
|             << " m_devSampleRate: " << m_settings.m_devSampleRate |             << " m_devSampleRate: " << m_settings.m_devSampleRate | ||||||
|  | |||||||
| @ -152,6 +152,7 @@ private: | |||||||
|     BladeRF2OutputThread *findThread(); |     BladeRF2OutputThread *findThread(); | ||||||
|     void moveThreadToBuddy(); |     void moveThreadToBuddy(); | ||||||
|     bool applySettings(const BladeRF2OutputSettings& settings, bool force); |     bool applySettings(const BladeRF2OutputSettings& settings, bool force); | ||||||
|  |     bool setDeviceCenterFrequency(struct bladerf *dev, int requestedChannel, quint64 freq_hz); | ||||||
|     void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const BladeRF2OutputSettings& settings); |     void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const BladeRF2OutputSettings& settings); | ||||||
|     void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); |     void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -217,6 +217,8 @@ void BladeRF2OutputGui::displaySettings() | |||||||
|     blockApplySettings(true); |     blockApplySettings(true); | ||||||
| 
 | 
 | ||||||
|     ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); |     ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); | ||||||
|  |     ui->LOppm->setValue(m_settings.m_LOppmTenths); | ||||||
|  |     ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); | ||||||
|     ui->sampleRate->setValue(m_settings.m_devSampleRate); |     ui->sampleRate->setValue(m_settings.m_devSampleRate); | ||||||
|     ui->bandwidth->setValue(m_settings.m_bandwidth / 1000); |     ui->bandwidth->setValue(m_settings.m_bandwidth / 1000); | ||||||
| 
 | 
 | ||||||
| @ -240,6 +242,13 @@ void BladeRF2OutputGui::on_centerFrequency_changed(quint64 value) | |||||||
|     sendSettings(); |     sendSettings(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void BladeRF2OutputGui::on_LOppm_valueChanged(int value) | ||||||
|  | { | ||||||
|  |     ui->LOppmText->setText(QString("%1").arg(QString::number(value/10.0, 'f', 1))); | ||||||
|  |     m_settings.m_LOppmTenths = value; | ||||||
|  |     sendSettings(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void BladeRF2OutputGui::on_sampleRate_changed(quint64 value) | void BladeRF2OutputGui::on_sampleRate_changed(quint64 value) | ||||||
| { | { | ||||||
|     m_settings.m_devSampleRate = value; |     m_settings.m_devSampleRate = value; | ||||||
|  | |||||||
| @ -74,6 +74,7 @@ private: | |||||||
| private slots: | private slots: | ||||||
|     void handleInputMessages(); |     void handleInputMessages(); | ||||||
|     void on_centerFrequency_changed(quint64 value); |     void on_centerFrequency_changed(quint64 value); | ||||||
|  |     void on_LOppm_valueChanged(int value); | ||||||
|     void on_biasTee_toggled(bool checked); |     void on_biasTee_toggled(bool checked); | ||||||
|     void on_sampleRate_changed(quint64 value); |     void on_sampleRate_changed(quint64 value); | ||||||
|     void on_bandwidth_changed(quint64 value); |     void on_bandwidth_changed(quint64 value); | ||||||
|  | |||||||
| @ -158,6 +158,52 @@ | |||||||
|      </item> |      </item> | ||||||
|     </layout> |     </layout> | ||||||
|    </item> |    </item> | ||||||
|  |    <item> | ||||||
|  |     <layout class="QHBoxLayout" name="LOppm_layout"> | ||||||
|  |      <item> | ||||||
|  |       <widget class="QLabel" name="LOppmLabel"> | ||||||
|  |        <property name="text"> | ||||||
|  |         <string>LO ppm</string> | ||||||
|  |        </property> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item> | ||||||
|  |       <widget class="QSlider" name="LOppm"> | ||||||
|  |        <property name="toolTip"> | ||||||
|  |         <string>Local Oscillator ppm correction</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="minimum"> | ||||||
|  |         <number>-20</number> | ||||||
|  |        </property> | ||||||
|  |        <property name="maximum"> | ||||||
|  |         <number>20</number> | ||||||
|  |        </property> | ||||||
|  |        <property name="pageStep"> | ||||||
|  |         <number>1</number> | ||||||
|  |        </property> | ||||||
|  |        <property name="orientation"> | ||||||
|  |         <enum>Qt::Horizontal</enum> | ||||||
|  |        </property> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item> | ||||||
|  |       <widget class="QLabel" name="LOppmText"> | ||||||
|  |        <property name="minimumSize"> | ||||||
|  |         <size> | ||||||
|  |          <width>26</width> | ||||||
|  |          <height>0</height> | ||||||
|  |         </size> | ||||||
|  |        </property> | ||||||
|  |        <property name="text"> | ||||||
|  |         <string>-0.0</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="alignment"> | ||||||
|  |         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | ||||||
|  |        </property> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |     </layout> | ||||||
|  |    </item> | ||||||
|    <item> |    <item> | ||||||
|     <widget class="Line" name="line"> |     <widget class="Line" name="line"> | ||||||
|      <property name="orientation"> |      <property name="orientation"> | ||||||
| @ -240,13 +286,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> | ||||||
|     <layout class="QHBoxLayout" name="sampleRateLayout"> |     <layout class="QHBoxLayout" name="sampleRateLayout"> | ||||||
|      <property name="topMargin"> |      <property name="topMargin"> | ||||||
|  | |||||||
| @ -28,6 +28,7 @@ BladeRF2OutputSettings::BladeRF2OutputSettings() | |||||||
| void BladeRF2OutputSettings::resetToDefaults() | void BladeRF2OutputSettings::resetToDefaults() | ||||||
| { | { | ||||||
|     m_centerFrequency = 435000*1000; |     m_centerFrequency = 435000*1000; | ||||||
|  |     m_LOppmTenths = 0; | ||||||
|     m_devSampleRate = 3072000; |     m_devSampleRate = 3072000; | ||||||
|     m_bandwidth = 1500000; |     m_bandwidth = 1500000; | ||||||
|     m_globalGain = -3; |     m_globalGain = -3; | ||||||
| @ -41,6 +42,7 @@ QByteArray BladeRF2OutputSettings::serialize() const | |||||||
| 
 | 
 | ||||||
|     s.writeS32(1, m_devSampleRate); |     s.writeS32(1, m_devSampleRate); | ||||||
|     s.writeS32(2, m_bandwidth); |     s.writeS32(2, m_bandwidth); | ||||||
|  |     s.writeS32(3, m_LOppmTenths); | ||||||
|     s.writeS32(4, m_globalGain); |     s.writeS32(4, m_globalGain); | ||||||
|     s.writeBool(5, m_biasTee); |     s.writeBool(5, m_biasTee); | ||||||
|     s.writeU32(6, m_log2Interp); |     s.writeU32(6, m_log2Interp); | ||||||
| @ -62,6 +64,7 @@ bool BladeRF2OutputSettings::deserialize(const QByteArray& data) | |||||||
|     { |     { | ||||||
|         d.readS32(1, &m_devSampleRate); |         d.readS32(1, &m_devSampleRate); | ||||||
|         d.readS32(2, &m_bandwidth); |         d.readS32(2, &m_bandwidth); | ||||||
|  |         d.readS32(3, &m_LOppmTenths); | ||||||
|         d.readS32(4, &m_globalGain); |         d.readS32(4, &m_globalGain); | ||||||
|         d.readBool(5, &m_biasTee); |         d.readBool(5, &m_biasTee); | ||||||
|         d.readU32(6, &m_log2Interp); |         d.readU32(6, &m_log2Interp); | ||||||
|  | |||||||
| @ -22,6 +22,7 @@ | |||||||
| 
 | 
 | ||||||
| struct BladeRF2OutputSettings { | struct BladeRF2OutputSettings { | ||||||
|     quint64 m_centerFrequency; |     quint64 m_centerFrequency; | ||||||
|  |     int m_LOppmTenths; | ||||||
|     qint32 m_devSampleRate; |     qint32 m_devSampleRate; | ||||||
|     qint32 m_bandwidth; |     qint32 m_bandwidth; | ||||||
|     int m_globalGain; |     int m_globalGain; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user