1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-02 06:04:39 -04:00

HackRF: allow different frequencies for Tx and Rx and synchronize sample rates. Fixes #2513

This commit is contained in:
f4exb
2026-01-04 03:42:25 +01:00
parent 71fc02f0f8
commit 4be9883524
6 changed files with 77 additions and 80 deletions
@@ -286,30 +286,23 @@ bool HackRFOutput::handleMessage(const Message& message)
return true;
}
else if (DeviceHackRFShared::MsgSynchronizeFrequency::match(message))
else if (DeviceHackRFShared::MsgSynchronizeSampleRate::match(message))
{
DeviceHackRFShared::MsgSynchronizeFrequency& freqMsg = (DeviceHackRFShared::MsgSynchronizeFrequency&) message;
qint64 centerFrequency = DeviceSampleSink::calculateCenterFrequency(
freqMsg.getFrequency(),
0,
m_settings.m_log2Interp,
(DeviceSampleSink::fcPos_t) m_settings.m_fcPos,
m_settings.m_devSampleRate);
qDebug("HackRFOutput::handleMessage: MsgSynchronizeFrequency: centerFrequency: %lld Hz", centerFrequency);
DeviceHackRFShared::MsgSynchronizeSampleRate& cmd = (DeviceHackRFShared::MsgSynchronizeSampleRate&) message;
qDebug() << "HackRFOutput::handleMessage: MsgSynchronizeSampleRate: " << cmd.getDeviceSampleRate();
HackRFOutputSettings settings = m_settings;
settings.m_centerFrequency = centerFrequency;
settings.m_devSampleRate = cmd.getDeviceSampleRate();
MsgConfigureHackRF* message = MsgConfigureHackRF::create(settings, QList<QString>{"devSampleRate"}, false);
m_inputMessageQueue.push(message);
if (m_guiMessageQueue)
{
MsgConfigureHackRF* messageToGUI = MsgConfigureHackRF::create(settings, QList<QString>{"centerFrequency"}, false);
MsgConfigureHackRF* messageToGUI = MsgConfigureHackRF::create(settings, QList<QString>{"devSampleRate"}, false);
m_guiMessageQueue->push(messageToGUI);
}
m_settings.m_centerFrequency = settings.m_centerFrequency;
int sampleRate = m_settings.m_devSampleRate/(1<<m_settings.m_log2Interp);
DSPSignalNotification *notif = new DSPSignalNotification(sampleRate, m_settings.m_centerFrequency);
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
return true;
}
else
@@ -394,6 +387,13 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, const QLi
settings.m_devSampleRate);
}
}
if (m_deviceAPI->getSourceBuddies().size() > 0)
{
DeviceAPI *buddy = m_deviceAPI->getSourceBuddies()[0];
DeviceHackRFShared::MsgSynchronizeSampleRate *sampleRateMsg = DeviceHackRFShared::MsgSynchronizeSampleRate::create(settings.m_devSampleRate);
buddy->getSamplingDeviceInputMessageQueue()->push(sampleRateMsg);
}
}
if (settingsKeys.contains("log2Interp") || force)
@@ -405,13 +405,13 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, const QLi
}
}
if (settingsKeys.contains("centerFrequency") ||
if (m_running &&(settingsKeys.contains("centerFrequency") ||
settingsKeys.contains("devSampleRate") ||
settingsKeys.contains("log2Interp") ||
settingsKeys.contains("fcPos") ||
settingsKeys.contains("transverterMode") ||
settingsKeys.contains("transverterDeltaFrequency") ||
settingsKeys.contains("LOppmTenths") || force)
settingsKeys.contains("LOppmTenths") || force))
{
qint64 deviceCenterFrequency = DeviceSampleSink::calculateDeviceCenterFrequency(
settings.m_centerFrequency,
@@ -422,13 +422,6 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, const QLi
settings.m_transverterMode);
setDeviceCenterFrequency(deviceCenterFrequency, settings.m_LOppmTenths);
if (m_deviceAPI->getSourceBuddies().size() > 0)
{
DeviceAPI *buddy = m_deviceAPI->getSourceBuddies()[0];
DeviceHackRFShared::MsgSynchronizeFrequency *freqMsg = DeviceHackRFShared::MsgSynchronizeFrequency::create(deviceCenterFrequency);
buddy->getSamplingDeviceInputMessageQueue()->push(freqMsg);
}
forwardChange = true;
}