1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-03 06:24:48 -04:00

BladeRF2 output: implemented LO soft correction

This commit is contained in:
f4exb
2018-09-30 10:59:52 +02:00
parent b5c4b532ae
commit e754dee625
7 changed files with 88 additions and 20 deletions
@@ -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)
{
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
{
settings.m_devSampleRate = report.getDevSampleRate();
settings.m_LOppmTenths = report.getLOppmTenths();
settings.m_centerFrequency = report.getCenterFrequency();
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)
|| (m_settings.m_LOppmTenths != settings.m_LOppmTenths)
|| (m_settings.m_devSampleRate != settings.m_devSampleRate) || force)
{
forwardChangeOwnDSP = true;
@@ -740,16 +761,8 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool
if (dev != 0)
{
int status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(requestedChannel), settings.m_centerFrequency);
if (status < 0) {
qWarning("BladeRF2Output::applySettings: bladerf_set_frequency(%lld) failed: %s",
settings.m_centerFrequency, bladerf_strerror(status));
}
else
if (setDeviceCenterFrequency(dev, requestedChannel, settings.m_centerFrequency))
{
qDebug("BladeRF2Output::applySettings: bladerf_set_frequency(%lld)", settings.m_centerFrequency);
if (getMessageQueueToGUI())
{
int min, max, step;
@@ -802,8 +815,8 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool
{
DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create(
settings.m_centerFrequency,
0,
0,
settings.m_LOppmTenths,
2,
settings.m_devSampleRate,
false);
(*itSource)->getSampleSourceInputMessageQueue()->push(report);
@@ -820,8 +833,8 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool
{
DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create(
settings.m_centerFrequency,
0,
0,
settings.m_LOppmTenths,
2,
settings.m_devSampleRate,
false);
(*itSink)->getSampleSinkInputMessageQueue()->push(report);
@@ -832,6 +845,7 @@ bool BladeRF2Output::applySettings(const BladeRF2OutputSettings& settings, bool
qDebug() << "BladeRF2Output::applySettings: "
<< " m_centerFrequency: " << m_settings.m_centerFrequency << " Hz"
<< " m_LOppmTenths: " << m_settings.m_LOppmTenths
<< " m_bandwidth: " << m_settings.m_bandwidth
<< " m_log2Interp: " << m_settings.m_log2Interp
<< " m_devSampleRate: " << m_settings.m_devSampleRate