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

Add instant replay

This commit is contained in:
srcejon
2023-11-22 14:28:35 +00:00
parent cbab429395
commit 7cc9cd1bf1
41 changed files with 2270 additions and 460 deletions
@@ -44,6 +44,7 @@
MESSAGE_CLASS_DEFINITION(AirspyHFInput::MsgConfigureAirspyHF, Message)
MESSAGE_CLASS_DEFINITION(AirspyHFInput::MsgStartStop, Message)
MESSAGE_CLASS_DEFINITION(AirspyHFInput::MsgSaveReplay, Message)
const qint64 AirspyHFInput::loLowLimitFreqHF = 9000L;
const qint64 AirspyHFInput::loHighLimitFreqHF = 31000000L;
@@ -181,7 +182,7 @@ bool AirspyHFInput::start()
}
m_airspyHFWorkerThread = new QThread();
m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo);
m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo, &m_replayBuffer);
m_airspyHFWorker->moveToThread(m_airspyHFWorkerThread);
int sampleRateIndex = m_settings.m_devSampleRateIndex;
@@ -289,6 +290,18 @@ int AirspyHFInput::getSampleRate() const
}
}
uint32_t AirspyHFInput::getSampleRateFromIndex(int devSampleRateIndex) const
{
if (devSampleRateIndex >= m_sampleRates.size()) {
devSampleRateIndex = m_sampleRates.size() - 1;
}
if (devSampleRateIndex >= 0) {
return m_sampleRates[devSampleRateIndex];
} else {
return 0;
}
}
quint64 AirspyHFInput::getCenterFrequency() const
{
return m_settings.m_centerFrequency;
@@ -346,6 +359,12 @@ bool AirspyHFInput::handleMessage(const Message& message)
return true;
}
else if (MsgSaveReplay::match(message))
{
MsgSaveReplay& cmd = (MsgSaveReplay&) message;
m_replayBuffer.save(cmd.getFilename(), getSampleRateFromIndex(m_settings.m_devSampleRateIndex), getCenterFrequency());
return true;
}
else
{
return false;
@@ -416,6 +435,10 @@ bool AirspyHFInput::applySettings(const AirspyHFSettings& settings, const QList<
m_airspyHFWorker->setSamplerate(m_sampleRates[sampleRateIndex]);
}
}
if (settings.m_devSampleRateIndex != m_settings.m_devSampleRateIndex) {
m_replayBuffer.clear();
}
}
if (settingsKeys.contains("log2Decim") || force)
@@ -568,6 +591,18 @@ bool AirspyHFInput::applySettings(const AirspyHFSettings& settings, const QList<
m_settings.applySettings(settingsKeys, settings);
}
if (settingsKeys.contains("replayLength") || settingsKeys.contains("devSampleRate") || force) {
m_replayBuffer.setSize(m_settings.m_replayLength, getSampleRateFromIndex(m_settings.m_devSampleRateIndex));
}
if (settingsKeys.contains("replayOffset") || settingsKeys.contains("devSampleRate") || force) {
m_replayBuffer.setReadOffset(((unsigned)(m_settings.m_replayOffset * getSampleRateFromIndex(m_settings.m_devSampleRateIndex))) * 2);
}
if (settingsKeys.contains("replayLoop") || force) {
m_replayBuffer.setLoop(m_settings.m_replayLoop);
}
return true;
}