mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-03 13:47:50 -04:00
FCD Pro+: replaced serializer with settings
This commit is contained in:
parent
b31033c0a2
commit
a25fa4ef97
@ -4,7 +4,7 @@ set(fcdproplus_SOURCES
|
|||||||
fcdproplusgui.cpp
|
fcdproplusgui.cpp
|
||||||
fcdproplusinput.cpp
|
fcdproplusinput.cpp
|
||||||
fcdproplusplugin.cpp
|
fcdproplusplugin.cpp
|
||||||
fcdproplusserializer.cpp
|
fcdproplussettings.cpp
|
||||||
fcdproplusthread.cpp
|
fcdproplusthread.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ set(fcdproplus_HEADERS
|
|||||||
fcdproplusgui.h
|
fcdproplusgui.h
|
||||||
fcdproplusinput.h
|
fcdproplusinput.h
|
||||||
fcdproplusplugin.h
|
fcdproplusplugin.h
|
||||||
fcdproplusserializer.h
|
fcdproplussettings.h
|
||||||
fcdproplusthread.h
|
fcdproplusthread.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -66,12 +66,12 @@ void FCDProPlusGui::resetToDefaults()
|
|||||||
|
|
||||||
qint64 FCDProPlusGui::getCenterFrequency() const
|
qint64 FCDProPlusGui::getCenterFrequency() const
|
||||||
{
|
{
|
||||||
return m_settings.centerFrequency;
|
return m_settings.m_centerFrequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::setCenterFrequency(qint64 centerFrequency)
|
void FCDProPlusGui::setCenterFrequency(qint64 centerFrequency)
|
||||||
{
|
{
|
||||||
m_settings.centerFrequency = centerFrequency;
|
m_settings.m_centerFrequency = centerFrequency;
|
||||||
displaySettings();
|
displaySettings();
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
@ -103,16 +103,16 @@ bool FCDProPlusGui::handleMessage(const Message& message)
|
|||||||
|
|
||||||
void FCDProPlusGui::displaySettings()
|
void FCDProPlusGui::displaySettings()
|
||||||
{
|
{
|
||||||
ui->centerFrequency->setValue(m_settings.centerFrequency / 1000);
|
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
|
||||||
ui->checkBoxG->setChecked(m_settings.lnaGain);
|
ui->checkBoxG->setChecked(m_settings.m_lnaGain);
|
||||||
ui->checkBoxB->setChecked(m_settings.biasT);
|
ui->checkBoxB->setChecked(m_settings.m_biasT);
|
||||||
ui->mixGain->setChecked(m_settings.mixGain);
|
ui->mixGain->setChecked(m_settings.m_mixGain);
|
||||||
ui->ifGain->setValue(m_settings.ifGain);
|
ui->ifGain->setValue(m_settings.m_ifGain);
|
||||||
ui->ifGainText->setText(QString("%1dB").arg(m_settings.ifGain));
|
ui->ifGainText->setText(QString("%1dB").arg(m_settings.m_ifGain));
|
||||||
ui->filterIF->setCurrentIndex(m_settings.ifFilterIndex);
|
ui->filterIF->setCurrentIndex(m_settings.m_ifFilterIndex);
|
||||||
ui->filterRF->setCurrentIndex(m_settings.rfFilterIndex);
|
ui->filterRF->setCurrentIndex(m_settings.m_rfFilterIndex);
|
||||||
ui->ppm->setValue(m_settings.LOppmTenths);
|
ui->ppm->setValue(m_settings.m_LOppmTenths);
|
||||||
ui->ppmText->setText(QString("%1").arg(QString::number(m_settings.LOppmTenths/10.0, 'f', 1)));
|
ui->ppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::sendSettings()
|
void FCDProPlusGui::sendSettings()
|
||||||
@ -123,7 +123,7 @@ void FCDProPlusGui::sendSettings()
|
|||||||
|
|
||||||
void FCDProPlusGui::on_centerFrequency_changed(quint64 value)
|
void FCDProPlusGui::on_centerFrequency_changed(quint64 value)
|
||||||
{
|
{
|
||||||
m_settings.centerFrequency = value * 1000;
|
m_settings.m_centerFrequency = value * 1000;
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,44 +136,44 @@ void FCDProPlusGui::updateHardware()
|
|||||||
|
|
||||||
void FCDProPlusGui::on_checkBoxG_stateChanged(int state)
|
void FCDProPlusGui::on_checkBoxG_stateChanged(int state)
|
||||||
{
|
{
|
||||||
m_settings.lnaGain = (state == Qt::Checked);
|
m_settings.m_lnaGain = (state == Qt::Checked);
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::on_checkBoxB_stateChanged(int state)
|
void FCDProPlusGui::on_checkBoxB_stateChanged(int state)
|
||||||
{
|
{
|
||||||
m_settings.biasT = (state == Qt::Checked);
|
m_settings.m_biasT = (state == Qt::Checked);
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::on_mixGain_stateChanged(int state)
|
void FCDProPlusGui::on_mixGain_stateChanged(int state)
|
||||||
{
|
{
|
||||||
m_settings.mixGain = (state == Qt::Checked);
|
m_settings.m_mixGain = (state == Qt::Checked);
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::on_filterIF_currentIndexChanged(int index)
|
void FCDProPlusGui::on_filterIF_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
m_settings.ifFilterIndex = index;
|
m_settings.m_ifFilterIndex = index;
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::on_filterRF_currentIndexChanged(int index)
|
void FCDProPlusGui::on_filterRF_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
m_settings.rfFilterIndex = index;
|
m_settings.m_rfFilterIndex = index;
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::on_ifGain_valueChanged(int value)
|
void FCDProPlusGui::on_ifGain_valueChanged(int value)
|
||||||
{
|
{
|
||||||
m_settings.ifGain = value;
|
m_settings.m_ifGain = value;
|
||||||
displaySettings();
|
displaySettings();
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusGui::on_ppm_valueChanged(int value)
|
void FCDProPlusGui::on_ppm_valueChanged(int value)
|
||||||
{
|
{
|
||||||
m_settings.LOppmTenths = value;
|
m_settings.m_LOppmTenths = value;
|
||||||
displaySettings();
|
displaySettings();
|
||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ private:
|
|||||||
Ui::FCDProPlusGui* ui;
|
Ui::FCDProPlusGui* ui;
|
||||||
|
|
||||||
PluginAPI* m_pluginAPI;
|
PluginAPI* m_pluginAPI;
|
||||||
FCDProPlusInput::Settings m_settings;
|
FCDProPlusSettings m_settings;
|
||||||
QTimer m_updateTimer;
|
QTimer m_updateTimer;
|
||||||
std::vector<int> m_gains;
|
std::vector<int> m_gains;
|
||||||
SampleSource* m_sampleSource;
|
SampleSource* m_sampleSource;
|
||||||
|
@ -25,106 +25,11 @@
|
|||||||
#include "fcdproplusinput.h"
|
#include "fcdproplusinput.h"
|
||||||
|
|
||||||
#include "fcdproplusgui.h"
|
#include "fcdproplusgui.h"
|
||||||
#include "fcdproplusserializer.h"
|
|
||||||
#include "fcdproplusthread.h"
|
#include "fcdproplusthread.h"
|
||||||
#include "fcdtraits.h"
|
#include "fcdtraits.h"
|
||||||
#include "fcdproplusconst.h"
|
#include "fcdproplusconst.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCD, Message)
|
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCD, Message)
|
||||||
//MESSAGE_CLASS_DEFINITION(FCDInput::MsgReportFCD, Message)
|
|
||||||
|
|
||||||
/*
|
|
||||||
const uint16_t FCDInput::m_vendorId = 0x04D8;
|
|
||||||
const uint16_t FCDInput::m_productId = 0xFB31;
|
|
||||||
const int FCDInput::m_sampleRate = 192000;
|
|
||||||
const std::string FCDInput::m_deviceName("hw:CARD=V20");
|
|
||||||
|
|
||||||
const uint16_t FCDInput::m_productId = 0xFB56;
|
|
||||||
const int FCDInput::m_sampleRate = 96000;
|
|
||||||
const std::string FCDInput::m_deviceName("hw:CARD=V10");
|
|
||||||
*/
|
|
||||||
|
|
||||||
FCDProPlusInput::Settings::Settings() :
|
|
||||||
centerFrequency(435000000),
|
|
||||||
rangeLow(true),
|
|
||||||
lnaGain(true),
|
|
||||||
mixGain(true),
|
|
||||||
biasT(false),
|
|
||||||
ifGain(0),
|
|
||||||
ifFilterIndex(0),
|
|
||||||
rfFilterIndex(0),
|
|
||||||
LOppmTenths(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void FCDProPlusInput::Settings::resetToDefaults()
|
|
||||||
{
|
|
||||||
centerFrequency = 435000000;
|
|
||||||
rangeLow = true;
|
|
||||||
lnaGain = true;
|
|
||||||
biasT = false;
|
|
||||||
ifGain = 0;
|
|
||||||
rfFilterIndex = 0;
|
|
||||||
ifFilterIndex = 0;
|
|
||||||
LOppmTenths = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray FCDProPlusInput::Settings::serialize() const
|
|
||||||
{
|
|
||||||
FCDProPlusSerializer::FCDData data;
|
|
||||||
|
|
||||||
data.m_data.m_lnaGain = lnaGain;
|
|
||||||
data.m_data.m_correction = LOppmTenths;
|
|
||||||
data.m_data.m_RxGain1 = ifGain;
|
|
||||||
data.m_data.m_frequency = centerFrequency;
|
|
||||||
data.m_rangeLow = rangeLow;
|
|
||||||
data.m_biasT = biasT;
|
|
||||||
|
|
||||||
QByteArray byteArray;
|
|
||||||
|
|
||||||
FCDProPlusSerializer::writeSerializedData(data, byteArray);
|
|
||||||
|
|
||||||
return byteArray;
|
|
||||||
|
|
||||||
/*
|
|
||||||
SimpleSerializer s(1);
|
|
||||||
s.writeU64(1, centerFrequency);
|
|
||||||
s.writeS32(2, range);
|
|
||||||
s.writeS32(3, gain);
|
|
||||||
s.writeS32(4, bias);
|
|
||||||
return s.final();*/
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FCDProPlusInput::Settings::deserialize(const QByteArray& serializedData)
|
|
||||||
{
|
|
||||||
FCDProPlusSerializer::FCDData data;
|
|
||||||
|
|
||||||
bool valid = FCDProPlusSerializer::readSerializedData(serializedData, data);
|
|
||||||
|
|
||||||
lnaGain = data.m_data.m_lnaGain;
|
|
||||||
LOppmTenths = data.m_data.m_correction;
|
|
||||||
ifGain = data.m_data.m_RxGain1;
|
|
||||||
centerFrequency = data.m_data.m_frequency;
|
|
||||||
rangeLow = data.m_rangeLow;
|
|
||||||
biasT = data.m_biasT;
|
|
||||||
|
|
||||||
return valid;
|
|
||||||
|
|
||||||
/*
|
|
||||||
SimpleDeserializer d(data);
|
|
||||||
|
|
||||||
if (d.isValid() && d.getVersion() == 1)
|
|
||||||
{
|
|
||||||
d.readU64(1, ¢erFrequency, 435000000);
|
|
||||||
d.readS32(2, &range, 0);
|
|
||||||
d.readS32(3, &gain, 0);
|
|
||||||
d.readS32(4, &bias, 0);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
resetToDefaults();
|
|
||||||
return true;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
FCDProPlusInput::FCDProPlusInput() :
|
FCDProPlusInput::FCDProPlusInput() :
|
||||||
m_dev(0),
|
m_dev(0),
|
||||||
@ -219,7 +124,7 @@ int FCDProPlusInput::getSampleRate() const
|
|||||||
|
|
||||||
quint64 FCDProPlusInput::getCenterFrequency() const
|
quint64 FCDProPlusInput::getCenterFrequency() const
|
||||||
{
|
{
|
||||||
return m_settings.centerFrequency;
|
return m_settings.m_centerFrequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FCDProPlusInput::handleMessage(const Message& message)
|
bool FCDProPlusInput::handleMessage(const Message& message)
|
||||||
@ -237,86 +142,86 @@ bool FCDProPlusInput::handleMessage(const Message& message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusInput::applySettings(const Settings& settings, bool force)
|
void FCDProPlusInput::applySettings(const FCDProPlusSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
bool signalChange = false;
|
bool signalChange = false;
|
||||||
|
|
||||||
if ((m_settings.centerFrequency != settings.centerFrequency) || force)
|
if ((m_settings.m_centerFrequency != settings.m_centerFrequency) || force)
|
||||||
{
|
{
|
||||||
qDebug() << "FCDProPlusInput::applySettings: fc: " << settings.centerFrequency;
|
qDebug() << "FCDProPlusInput::applySettings: fc: " << settings.m_centerFrequency;
|
||||||
m_settings.centerFrequency = settings.centerFrequency;
|
m_settings.m_centerFrequency = settings.m_centerFrequency;
|
||||||
|
|
||||||
if (m_dev != 0)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_center_freq((double) m_settings.centerFrequency);
|
set_center_freq((double) m_settings.m_centerFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
signalChange = true;
|
signalChange = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.lnaGain != settings.lnaGain) || force)
|
if ((m_settings.m_lnaGain != settings.m_lnaGain) || force)
|
||||||
{
|
{
|
||||||
m_settings.lnaGain = settings.lnaGain;
|
m_settings.m_lnaGain = settings.m_lnaGain;
|
||||||
|
|
||||||
if (m_dev != 0)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_lna_gain(settings.lnaGain);
|
set_lna_gain(settings.m_lnaGain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.biasT != settings.biasT) || force)
|
if ((m_settings.m_biasT != settings.m_biasT) || force)
|
||||||
{
|
{
|
||||||
m_settings.biasT = settings.biasT;
|
m_settings.m_biasT = settings.m_biasT;
|
||||||
|
|
||||||
if (m_dev != 0)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_bias_t(settings.biasT);
|
set_bias_t(settings.m_biasT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.mixGain != settings.mixGain) || force)
|
if ((m_settings.m_mixGain != settings.m_mixGain) || force)
|
||||||
{
|
{
|
||||||
m_settings.mixGain = settings.mixGain;
|
m_settings.m_mixGain = settings.m_mixGain;
|
||||||
|
|
||||||
if (m_dev != 0)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_mixer_gain(settings.mixGain);
|
set_mixer_gain(settings.m_mixGain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.ifGain != settings.ifGain) || force)
|
if ((m_settings.m_ifGain != settings.m_ifGain) || force)
|
||||||
{
|
{
|
||||||
m_settings.ifGain = settings.ifGain;
|
m_settings.m_ifGain = settings.m_ifGain;
|
||||||
|
|
||||||
if (m_dev != 0)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_if_gain(settings.ifGain);
|
set_if_gain(settings.m_ifGain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_if_filter(settings.ifFilterIndex);
|
set_if_filter(settings.m_ifFilterIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
set_rf_filter(settings.rfFilterIndex);
|
set_rf_filter(settings.m_rfFilterIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
if (m_dev != 0)
|
||||||
{
|
{
|
||||||
@ -326,14 +231,14 @@ void FCDProPlusInput::applySettings(const Settings& settings, bool force)
|
|||||||
|
|
||||||
if (signalChange)
|
if (signalChange)
|
||||||
{
|
{
|
||||||
DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits<ProPlus>::sampleRate, m_settings.centerFrequency);
|
DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits<ProPlus>::sampleRate, m_settings.m_centerFrequency);
|
||||||
DSPEngine::instance()->getInputMessageQueue()->push(notif);
|
DSPEngine::instance()->getInputMessageQueue()->push(notif);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusInput::set_center_freq(double freq)
|
void FCDProPlusInput::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)
|
if (fcdAppSetFreq(m_dev, freq) == FCD_MODE_NONE)
|
||||||
{
|
{
|
||||||
@ -410,7 +315,7 @@ void FCDProPlusInput::set_rf_filter(int filterIndex)
|
|||||||
|
|
||||||
void FCDProPlusInput::set_lo_ppm()
|
void FCDProPlusInput::set_lo_ppm()
|
||||||
{
|
{
|
||||||
set_center_freq((double) m_settings.centerFrequency);
|
set_center_freq((double) m_settings.m_centerFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#ifndef INCLUDE_FCDINPUT_H
|
#ifndef INCLUDE_FCDINPUT_H
|
||||||
#define INCLUDE_FCDINPUT_H
|
#define INCLUDE_FCDINPUT_H
|
||||||
|
|
||||||
|
#include "fcdproplussettings.h"
|
||||||
#include "dsp/samplesource.h"
|
#include "dsp/samplesource.h"
|
||||||
#include "fcdhid.h"
|
#include "fcdhid.h"
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@ -32,37 +33,21 @@ class FCDProPlusThread;
|
|||||||
|
|
||||||
class FCDProPlusInput : public SampleSource {
|
class FCDProPlusInput : public SampleSource {
|
||||||
public:
|
public:
|
||||||
struct Settings {
|
|
||||||
Settings();
|
|
||||||
quint64 centerFrequency;
|
|
||||||
bool rangeLow;
|
|
||||||
bool lnaGain;
|
|
||||||
bool mixGain;
|
|
||||||
bool biasT;
|
|
||||||
quint32 ifGain;
|
|
||||||
qint32 ifFilterIndex;
|
|
||||||
qint32 rfFilterIndex;
|
|
||||||
qint32 LOppmTenths;
|
|
||||||
void resetToDefaults();
|
|
||||||
QByteArray serialize() const;
|
|
||||||
bool deserialize(const QByteArray& data);
|
|
||||||
};
|
|
||||||
|
|
||||||
class MsgConfigureFCD : public Message {
|
class MsgConfigureFCD : public Message {
|
||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const Settings& getSettings() const { return m_settings; }
|
const FCDProPlusSettings& getSettings() const { return m_settings; }
|
||||||
|
|
||||||
static MsgConfigureFCD* create(const Settings& settings)
|
static MsgConfigureFCD* create(const FCDProPlusSettings& settings)
|
||||||
{
|
{
|
||||||
return new MsgConfigureFCD(settings);
|
return new MsgConfigureFCD(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Settings m_settings;
|
FCDProPlusSettings m_settings;
|
||||||
|
|
||||||
MsgConfigureFCD(const Settings& settings) :
|
MsgConfigureFCD(const FCDProPlusSettings& settings) :
|
||||||
Message(),
|
Message(),
|
||||||
m_settings(settings)
|
m_settings(settings)
|
||||||
{ }
|
{ }
|
||||||
@ -91,11 +76,11 @@ public:
|
|||||||
void set_lo_ppm();
|
void set_lo_ppm();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void applySettings(const Settings& settings, bool force);
|
void applySettings(const FCDProPlusSettings& settings, bool force);
|
||||||
|
|
||||||
hid_device *m_dev;
|
hid_device *m_dev;
|
||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
Settings m_settings;
|
FCDProPlusSettings m_settings;
|
||||||
FCDProPlusThread* m_FCDThread;
|
FCDProPlusThread* m_FCDThread;
|
||||||
QString m_deviceDescription;
|
QString m_deviceDescription;
|
||||||
};
|
};
|
||||||
|
@ -14,64 +14,72 @@
|
|||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "fcdproplusserializer.h"
|
#include <QtGlobal>
|
||||||
|
#include "util/simpleserializer.h"
|
||||||
|
#include "fcdproplussettings.h"
|
||||||
|
|
||||||
void FCDProPlusSerializer::writeSerializedData(const FCDData& data, QByteArray& serializedData)
|
FCDProPlusSettings::FCDProPlusSettings()
|
||||||
{
|
{
|
||||||
QByteArray sampleSourceSerialized;
|
resetToDefaults();
|
||||||
SampleSourceSerializer::writeSerializedData(data.m_data, sampleSourceSerialized);
|
|
||||||
|
|
||||||
SimpleSerializer s(1);
|
|
||||||
|
|
||||||
s.writeBlob(1, sampleSourceSerialized);
|
|
||||||
s.writeBool(2, data.m_biasT);
|
|
||||||
s.writeBool(3, data.m_rangeLow);
|
|
||||||
s.writeBool(4, data.m_mixGain);
|
|
||||||
s.writeS32(5, data.m_ifFilterIndex);
|
|
||||||
s.writeS32(6, data.m_rfFilterIndex);
|
|
||||||
|
|
||||||
serializedData = s.final();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FCDProPlusSerializer::readSerializedData(const QByteArray& serializedData, FCDData& data)
|
void FCDProPlusSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
bool valid = SampleSourceSerializer::readSerializedData(serializedData, data.m_data);
|
m_centerFrequency = 435000000;
|
||||||
|
m_rangeLow = true;
|
||||||
|
m_lnaGain = true;
|
||||||
|
m_biasT = false;
|
||||||
|
m_ifGain = 0;
|
||||||
|
m_rfFilterIndex = 0;
|
||||||
|
m_ifFilterIndex = 0;
|
||||||
|
m_LOppmTenths = 0;
|
||||||
|
m_dcBlock = false;
|
||||||
|
m_iqImbalance = false;
|
||||||
|
}
|
||||||
|
|
||||||
QByteArray sampleSourceSerialized;
|
QByteArray FCDProPlusSettings::serialize() const
|
||||||
|
{
|
||||||
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
SimpleDeserializer d(serializedData);
|
s.writeBool(1, m_biasT);
|
||||||
|
s.writeBool(2, m_rangeLow);
|
||||||
|
s.writeBool(3, m_mixGain);
|
||||||
|
s.writeS32(4, m_ifFilterIndex);
|
||||||
|
s.writeS32(5, m_rfFilterIndex);
|
||||||
|
s.writeBool(6, m_dcBlock);
|
||||||
|
s.writeBool(7, m_iqImbalance);
|
||||||
|
|
||||||
|
return s.final();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FCDProPlusSettings::deserialize(const QByteArray& data)
|
||||||
|
{
|
||||||
|
SimpleDeserializer d(data);
|
||||||
|
|
||||||
if (!d.isValid())
|
if (!d.isValid())
|
||||||
{
|
{
|
||||||
setDefaults(data);
|
resetToDefaults();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d.getVersion() == SampleSourceSerializer::getSerializerVersion())
|
if (d.getVersion() == 1)
|
||||||
{
|
{
|
||||||
int intval;
|
int intval;
|
||||||
|
|
||||||
d.readBlob(1, &sampleSourceSerialized);
|
d.readBool(1, &m_biasT, false);
|
||||||
d.readBool(2, &data.m_biasT, false);
|
d.readBool(2, &m_rangeLow, false);
|
||||||
d.readBool(3, &data.m_rangeLow, false);
|
d.readBool(3, &m_mixGain, true);
|
||||||
d.readBool(4, &data.m_mixGain, true);
|
d.readS32(4, &m_ifFilterIndex, 0);
|
||||||
d.readS32(5, &data.m_ifFilterIndex, 0);
|
d.readS32(5, &m_rfFilterIndex, 0);
|
||||||
d.readS32(6, &data.m_rfFilterIndex, 0);
|
d.readBool(6, &m_dcBlock, false);
|
||||||
|
d.readBool(7, &m_iqImbalance, false);
|
||||||
|
|
||||||
return SampleSourceSerializer::readSerializedData(sampleSourceSerialized, data.m_data);
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setDefaults(data);
|
resetToDefaults();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCDProPlusSerializer::setDefaults(FCDData& data)
|
|
||||||
{
|
|
||||||
data.m_rangeLow = false;
|
|
||||||
data.m_biasT = false;
|
|
||||||
data.m_mixGain = true;
|
|
||||||
data.m_ifFilterIndex = 0;
|
|
||||||
data.m_rfFilterIndex = 0;
|
|
||||||
}
|
|
@ -14,29 +14,26 @@
|
|||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef PLUGINS_SAMPLESOURCE_FCD_FCDPROPLUSSERIALIZER_H_
|
#ifndef _FCDPROPLUS_FCDPROPLUSSETTINGS_H_
|
||||||
#define PLUGINS_SAMPLESOURCE_FCD_FCDPROPLUSSERIALIZER_H_
|
#define _FCDPROPLUS_FCDPROPLUSSETTINGS_H_
|
||||||
|
|
||||||
#include "util/samplesourceserializer.h"
|
struct FCDProPlusSettings {
|
||||||
|
quint64 m_centerFrequency;
|
||||||
|
bool m_rangeLow;
|
||||||
|
bool m_lnaGain;
|
||||||
|
bool m_mixGain;
|
||||||
|
bool m_biasT;
|
||||||
|
quint32 m_ifGain;
|
||||||
|
qint32 m_ifFilterIndex;
|
||||||
|
qint32 m_rfFilterIndex;
|
||||||
|
qint32 m_LOppmTenths;
|
||||||
|
bool m_dcBlock;
|
||||||
|
bool m_iqImbalance;
|
||||||
|
|
||||||
class FCDProPlusSerializer
|
FCDProPlusSettings();
|
||||||
{
|
void resetToDefaults();
|
||||||
public:
|
QByteArray serialize() const;
|
||||||
struct FCDData
|
bool deserialize(const QByteArray& data);
|
||||||
{
|
|
||||||
SampleSourceSerializer::Data m_data;
|
|
||||||
bool m_mixGain;
|
|
||||||
bool m_biasT;
|
|
||||||
bool m_rangeLow;
|
|
||||||
qint32 m_ifFilterIndex;
|
|
||||||
qint32 m_rfFilterIndex;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void writeSerializedData(const FCDData& data, QByteArray& serializedData);
|
|
||||||
static bool readSerializedData(const QByteArray& serializedData, FCDData& data);
|
|
||||||
static void setDefaults(FCDData& data);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif /* _FCDPROPLUS_FCDPROPLUSSETTINGS_H_ */
|
||||||
|
|
||||||
#endif /* PLUGINS_SAMPLESOURCE_FCD_FCDPROPLUSSERIALIZER_H_ */
|
|
Loading…
x
Reference in New Issue
Block a user