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

New preset design (single) applied to FCD Pro

This commit is contained in:
f4exb
2015-09-30 05:38:58 +02:00
parent ded446c43a
commit f50e717c20
12 changed files with 351 additions and 389 deletions
+71 -145
View File
@@ -25,98 +25,12 @@
#include "fcdproinput.h"
#include "fcdprogui.h"
#include "fcdproserializer.h"
#include "fcdprothread.h"
#include "fcdtraits.h"
#include "fcdproconst.h"
MESSAGE_CLASS_DEFINITION(FCDProInput::MsgConfigureFCD, Message)
FCDProInput::Settings::Settings()
{
resetToDefaults();
}
void FCDProInput::Settings::resetToDefaults()
{
centerFrequency = 435000000;
LOppmTenths = 0;
lnaGainIndex = 0;
rfFilterIndex = 0;
lnaEnhanceIndex = 0;
bandIndex = 0;
mixerGainIndex = 0;
mixerFilterIndex = 0;
biasCurrentIndex = 0;
modeIndex = 0;
gain1Index = 0;
rcFilterIndex = 0;
gain2Index = 0;
gain3Index = 0;
gain4Index = 0;
ifFilterIndex = 0;
gain5Index = 0;
gain6Index = 0;
}
QByteArray FCDProInput::Settings::serialize() const
{
FCDProSerializer::FCDData data;
data.m_data.m_frequency = centerFrequency;
data.m_LOppmTenths = LOppmTenths;
data.m_lnaGainIndex = lnaGainIndex;
data.m_rfFilterIndex = rfFilterIndex;
data.m_lnaEnhanceIndex = lnaEnhanceIndex;
data.m_bandIndex = bandIndex;
data.m_mixerGainIndex = mixerGainIndex;
data.m_mixerFilterIndex = mixerFilterIndex;
data.m_biasCurrentIndex = biasCurrentIndex;
data.m_modeIndex = modeIndex;
data.m_gain1Index = gain1Index;
data.m_rcFilterIndex = rcFilterIndex;
data.m_gain2Index = gain2Index;
data.m_gain3Index = gain3Index;
data.m_gain4Index = gain4Index;
data.m_ifFilterIndex = ifFilterIndex;
data.m_gain5Index = gain5Index;
data.m_gain6Index = gain6Index;
QByteArray byteArray;
FCDProSerializer::writeSerializedData(data, byteArray);
return byteArray;
}
bool FCDProInput::Settings::deserialize(const QByteArray& serializedData)
{
FCDProSerializer::FCDData data;
bool valid = FCDProSerializer::readSerializedData(serializedData, data);
centerFrequency = data.m_data.m_frequency;
LOppmTenths = data.m_LOppmTenths;
lnaGainIndex = data.m_lnaGainIndex;
rfFilterIndex = data.m_rfFilterIndex;
lnaEnhanceIndex = data.m_lnaEnhanceIndex;
bandIndex = data.m_bandIndex;
mixerGainIndex = data.m_mixerGainIndex;
mixerFilterIndex = data.m_mixerFilterIndex;
biasCurrentIndex = data.m_biasCurrentIndex;
modeIndex = data.m_modeIndex;
gain1Index = data.m_gain1Index;
rcFilterIndex = data.m_rcFilterIndex;
gain2Index = data.m_gain2Index;
gain3Index = data.m_gain3Index;
gain4Index = data.m_gain4Index;
ifFilterIndex = data.m_ifFilterIndex;
gain5Index = data.m_gain5Index;
gain6Index = data.m_gain6Index;
return valid;
}
FCDProInput::FCDProInput() :
m_dev(0),
m_settings(),
@@ -210,7 +124,7 @@ int FCDProInput::getSampleRate() const
quint64 FCDProInput::getCenterFrequency() const
{
return m_settings.centerFrequency;
return m_settings.m_centerFrequency;
}
bool FCDProInput::handleMessage(const Message& message)
@@ -228,186 +142,186 @@ bool FCDProInput::handleMessage(const Message& message)
}
}
void FCDProInput::applySettings(const Settings& settings, bool force)
void FCDProInput::applySettings(const FCDProSettings& settings, bool force)
{
bool signalChange = false;
if ((m_settings.centerFrequency != settings.centerFrequency) || force)
if ((m_settings.m_centerFrequency != settings.m_centerFrequency) || force)
{
qDebug() << "FCDProInput::applySettings: fc: " << settings.centerFrequency;
m_settings.centerFrequency = settings.centerFrequency;
qDebug() << "FCDProInput::applySettings: fc: " << settings.m_centerFrequency;
m_settings.m_centerFrequency = settings.m_centerFrequency;
if (m_dev != 0)
{
set_center_freq((double) m_settings.centerFrequency);
set_center_freq((double) m_settings.m_centerFrequency);
}
signalChange = true;
}
if ((m_settings.lnaGainIndex != settings.lnaGainIndex) || force)
if ((m_settings.m_lnaGainIndex != settings.m_lnaGainIndex) || force)
{
m_settings.lnaGainIndex = settings.lnaGainIndex;
m_settings.m_lnaGainIndex = settings.m_lnaGainIndex;
if (m_dev != 0)
{
set_lnaGain(settings.lnaGainIndex);
set_lnaGain(settings.m_lnaGainIndex);
}
}
if ((m_settings.rfFilterIndex != settings.rfFilterIndex) || force)
if ((m_settings.m_rfFilterIndex != settings.m_rfFilterIndex) || force)
{
m_settings.rfFilterIndex = settings.rfFilterIndex;
m_settings.m_rfFilterIndex = settings.m_rfFilterIndex;
if (m_dev != 0)
{
set_rfFilter(settings.rfFilterIndex);
set_rfFilter(settings.m_rfFilterIndex);
}
}
if ((m_settings.lnaEnhanceIndex != settings.lnaEnhanceIndex) || force)
if ((m_settings.m_lnaEnhanceIndex != settings.m_lnaEnhanceIndex) || force)
{
m_settings.lnaEnhanceIndex = settings.lnaEnhanceIndex;
m_settings.m_lnaEnhanceIndex = settings.m_lnaEnhanceIndex;
if (m_dev != 0)
{
set_lnaEnhance(settings.lnaEnhanceIndex);
set_lnaEnhance(settings.m_lnaEnhanceIndex);
}
}
if ((m_settings.bandIndex != settings.bandIndex) || force)
if ((m_settings.m_bandIndex != settings.m_bandIndex) || force)
{
m_settings.bandIndex = settings.bandIndex;
m_settings.m_bandIndex = settings.m_bandIndex;
if (m_dev != 0)
{
set_band(settings.bandIndex);
set_band(settings.m_bandIndex);
}
}
if ((m_settings.mixerGainIndex != settings.mixerGainIndex) || force)
if ((m_settings.m_mixerGainIndex != settings.m_mixerGainIndex) || force)
{
m_settings.mixerGainIndex = settings.mixerGainIndex;
m_settings.m_mixerGainIndex = settings.m_mixerGainIndex;
if (m_dev != 0)
{
set_mixerGain(settings.mixerGainIndex);
set_mixerGain(settings.m_mixerGainIndex);
}
}
if ((m_settings.mixerFilterIndex != settings.mixerFilterIndex) || force)
if ((m_settings.m_mixerFilterIndex != settings.m_mixerFilterIndex) || force)
{
m_settings.mixerFilterIndex = settings.mixerFilterIndex;
m_settings.m_mixerFilterIndex = settings.m_mixerFilterIndex;
if (m_dev != 0)
{
set_mixerFilter(settings.mixerFilterIndex);
set_mixerFilter(settings.m_mixerFilterIndex);
}
}
if ((m_settings.biasCurrentIndex != settings.biasCurrentIndex) || force)
if ((m_settings.m_biasCurrentIndex != settings.m_biasCurrentIndex) || force)
{
m_settings.biasCurrentIndex = settings.biasCurrentIndex;
m_settings.m_biasCurrentIndex = settings.m_biasCurrentIndex;
if (m_dev != 0)
{
set_biasCurrent(settings.biasCurrentIndex);
set_biasCurrent(settings.m_biasCurrentIndex);
}
}
if ((m_settings.modeIndex != settings.modeIndex) || force)
if ((m_settings.m_modeIndex != settings.m_modeIndex) || force)
{
m_settings.modeIndex = settings.modeIndex;
m_settings.m_modeIndex = settings.m_modeIndex;
if (m_dev != 0)
{
set_mode(settings.modeIndex);
set_mode(settings.m_modeIndex);
}
}
if ((m_settings.gain1Index != settings.gain1Index) || force)
if ((m_settings.m_gain1Index != settings.m_gain1Index) || force)
{
m_settings.gain1Index = settings.gain1Index;
m_settings.m_gain1Index = settings.m_gain1Index;
if (m_dev != 0)
{
set_gain1(settings.gain1Index);
set_gain1(settings.m_gain1Index);
}
}
if ((m_settings.rcFilterIndex != settings.rcFilterIndex) || force)
if ((m_settings.m_rcFilterIndex != settings.m_rcFilterIndex) || force)
{
m_settings.rcFilterIndex = settings.rcFilterIndex;
m_settings.m_rcFilterIndex = settings.m_rcFilterIndex;
if (m_dev != 0)
{
set_rcFilter(settings.rcFilterIndex);
set_rcFilter(settings.m_rcFilterIndex);
}
}
if ((m_settings.gain2Index != settings.gain2Index) || force)
if ((m_settings.m_gain2Index != settings.m_gain2Index) || force)
{
m_settings.gain2Index = settings.gain2Index;
m_settings.m_gain2Index = settings.m_gain2Index;
if (m_dev != 0)
{
set_gain2(settings.gain2Index);
set_gain2(settings.m_gain2Index);
}
}
if ((m_settings.gain3Index != settings.gain3Index) || force)
if ((m_settings.m_gain3Index != settings.m_gain3Index) || force)
{
m_settings.gain3Index = settings.gain3Index;
m_settings.m_gain3Index = settings.m_gain3Index;
if (m_dev != 0)
{
set_gain3(settings.gain3Index);
set_gain3(settings.m_gain3Index);
}
}
if ((m_settings.gain4Index != settings.gain4Index) || force)
if ((m_settings.m_gain4Index != settings.m_gain4Index) || force)
{
m_settings.gain4Index = settings.gain4Index;
m_settings.m_gain4Index = settings.m_gain4Index;
if (m_dev != 0)
{
set_gain4(settings.gain4Index);
set_gain4(settings.m_gain4Index);
}
}
if ((m_settings.ifFilterIndex != settings.ifFilterIndex) || force)
if ((m_settings.m_ifFilterIndex != settings.m_ifFilterIndex) || force)
{
m_settings.ifFilterIndex = settings.ifFilterIndex;
m_settings.m_ifFilterIndex = settings.m_ifFilterIndex;
if (m_dev != 0)
{
set_ifFilter(settings.ifFilterIndex);
set_ifFilter(settings.m_ifFilterIndex);
}
}
if ((m_settings.gain5Index != settings.gain5Index) || force)
if ((m_settings.m_gain5Index != settings.m_gain5Index) || force)
{
m_settings.gain5Index = settings.gain5Index;
m_settings.m_gain5Index = settings.m_gain5Index;
if (m_dev != 0)
{
set_gain5(settings.gain5Index);
set_gain5(settings.m_gain5Index);
}
}
if ((m_settings.gain6Index != settings.gain6Index) || force)
if ((m_settings.m_gain6Index != settings.m_gain6Index) || force)
{
m_settings.gain6Index = settings.gain6Index;
m_settings.m_gain6Index = settings.m_gain6Index;
if (m_dev != 0)
{
set_gain6(settings.gain6Index);
set_gain6(settings.m_gain6Index);
}
}
if ((m_settings.LOppmTenths != settings.LOppmTenths) || force)
if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force)
{
m_settings.LOppmTenths = settings.LOppmTenths;
m_settings.m_LOppmTenths = settings.m_LOppmTenths;
if (m_dev != 0)
{
@@ -415,16 +329,28 @@ void FCDProInput::applySettings(const Settings& settings, bool force)
}
}
if ((m_settings.m_dcBlock != settings.m_dcBlock) || force)
{
m_settings.m_dcBlock = settings.m_dcBlock;
DSPEngine::instance()->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqCorrection);
}
if ((m_settings.m_iqCorrection != settings.m_iqCorrection) || force)
{
m_settings.m_iqCorrection = settings.m_iqCorrection;
DSPEngine::instance()->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqCorrection);
}
if (signalChange)
{
DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits<Pro>::sampleRate, m_settings.centerFrequency);
DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits<Pro>::sampleRate, m_settings.m_centerFrequency);
DSPEngine::instance()->getInputMessageQueue()->push(notif);
}
}
void FCDProInput::set_center_freq(double freq)
{
freq += freq*(((double) m_settings.LOppmTenths)/10000000.0);
freq += freq*(((double) m_settings.m_LOppmTenths)/10000000.0);
if (fcdAppSetFreq(m_dev, freq) == FCD_MODE_NONE)
{
@@ -684,5 +610,5 @@ void FCDProInput::set_gain6(int index)
void FCDProInput::set_lo_ppm()
{
set_center_freq((double) m_settings.centerFrequency);
set_center_freq((double) m_settings.m_centerFrequency);
}