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

FCD Pro Plus input: implemeted WEB API

This commit is contained in:
f4exb
2018-05-26 10:54:31 +02:00
parent 4a5369c1b4
commit 268ad2b33f
18 changed files with 872 additions and 25 deletions
+1 -1
View File
@@ -880,7 +880,7 @@ void FCDProInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& res
response.getFcdProSettings()->setCenterFrequency(settings.m_centerFrequency);
response.getFcdProSettings()->setLOppmTenths(settings.m_LOppmTenths);
response.getFcdProSettings()->setLnaGainIndex(settings.m_lnaGainIndex);
response.getFcdProSettings()->setRfFilterIndex(settings.m_lnaGainIndex);
response.getFcdProSettings()->setRfFilterIndex(settings.m_rfFilterIndex);
response.getFcdProSettings()->setLnaEnhanceIndex(settings.m_lnaEnhanceIndex);
response.getFcdProSettings()->setBandIndex(settings.m_bandIndex);
response.getFcdProSettings()->setMixerGainIndex(settings.m_mixerGainIndex);
@@ -129,9 +129,9 @@ bool FCDProPlusGui::deserialize(const QByteArray& data)
bool FCDProPlusGui::handleMessage(const Message& message __attribute__((unused)))
{
if (FCDProPlusInput::MsgConfigureFCD::match(message))
if (FCDProPlusInput::MsgConfigureFCDProPlus::match(message))
{
const FCDProPlusInput::MsgConfigureFCD& cfg = (FCDProPlusInput::MsgConfigureFCD&) message;
const FCDProPlusInput::MsgConfigureFCDProPlus& cfg = (FCDProPlusInput::MsgConfigureFCDProPlus&) message;
m_settings = cfg.getSettings();
blockApplySettings(true);
displaySettings();
@@ -241,7 +241,7 @@ void FCDProPlusGui::on_iqImbalance_toggled(bool checked)
void FCDProPlusGui::updateHardware()
{
FCDProPlusInput::MsgConfigureFCD* message = FCDProPlusInput::MsgConfigureFCD::create(m_settings, m_forceSettings);
FCDProPlusInput::MsgConfigureFCDProPlus* message = FCDProPlusInput::MsgConfigureFCDProPlus::create(m_settings, m_forceSettings);
m_sampleSource->getInputMessageQueue()->push(message);
m_forceSettings = false;
m_updateTimer.stop();
@@ -35,7 +35,7 @@
#include "fcdtraits.h"
#include "fcdproplusconst.h"
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCD, Message)
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCDProPlus, Message)
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgStartStop, Message)
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgFileRecord, Message)
@@ -164,12 +164,12 @@ bool FCDProPlusInput::deserialize(const QByteArray& data)
success = false;
}
MsgConfigureFCD* message = MsgConfigureFCD::create(m_settings, true);
MsgConfigureFCDProPlus* message = MsgConfigureFCDProPlus::create(m_settings, true);
m_inputMessageQueue.push(message);
if (m_guiMessageQueue)
{
MsgConfigureFCD* messageToGUI = MsgConfigureFCD::create(m_settings, true);
MsgConfigureFCDProPlus* messageToGUI = MsgConfigureFCDProPlus::create(m_settings, true);
m_guiMessageQueue->push(messageToGUI);
}
@@ -196,22 +196,22 @@ void FCDProPlusInput::setCenterFrequency(qint64 centerFrequency)
FCDProPlusSettings settings = m_settings;
settings.m_centerFrequency = centerFrequency;
MsgConfigureFCD* message = MsgConfigureFCD::create(settings, false);
MsgConfigureFCDProPlus* message = MsgConfigureFCDProPlus::create(settings, false);
m_inputMessageQueue.push(message);
if (m_guiMessageQueue)
{
MsgConfigureFCD* messageToGUI = MsgConfigureFCD::create(settings, false);
MsgConfigureFCDProPlus* messageToGUI = MsgConfigureFCDProPlus::create(settings, false);
m_guiMessageQueue->push(messageToGUI);
}
}
bool FCDProPlusInput::handleMessage(const Message& message)
{
if(MsgConfigureFCD::match(message))
if(MsgConfigureFCDProPlus::match(message))
{
qDebug() << "FCDProPlusInput::handleMessage: MsgConfigureFCD";
MsgConfigureFCD& conf = (MsgConfigureFCD&) message;
MsgConfigureFCDProPlus& conf = (MsgConfigureFCDProPlus&) message;
applySettings(conf.getSettings(), conf.getForce());
return true;
}
@@ -485,5 +485,101 @@ int FCDProPlusInput::webapiRun(
return 200;
}
int FCDProPlusInput::webapiSettingsGet(
SWGSDRangel::SWGDeviceSettings& response,
QString& errorMessage __attribute__((unused)))
{
response.setFcdProPlusSettings(new SWGSDRangel::SWGFCDProPlusSettings());
response.getFcdProPlusSettings()->init();
webapiFormatDeviceSettings(response, m_settings);
return 200;
}
int FCDProPlusInput::webapiSettingsPutPatch(
bool force,
const QStringList& deviceSettingsKeys,
SWGSDRangel::SWGDeviceSettings& response, // query + response
QString& errorMessage __attribute__((unused)))
{
FCDProPlusSettings settings = m_settings;
if (deviceSettingsKeys.contains("centerFrequency")) {
settings.m_centerFrequency = response.getFcdProPlusSettings()->getCenterFrequency();
}
if (deviceSettingsKeys.contains("rangeLow")) {
settings.m_rangeLow = response.getFcdProPlusSettings()->getRangeLow() != 0;
}
if (deviceSettingsKeys.contains("lnaGain")) {
settings.m_lnaGain = response.getFcdProPlusSettings()->getLnaGain() != 0;
}
if (deviceSettingsKeys.contains("mixGain")) {
settings.m_mixGain = response.getFcdProPlusSettings()->getMixGain() != 0;
}
if (deviceSettingsKeys.contains("biasT")) {
settings.m_biasT = response.getFcdProPlusSettings()->getBiasT() != 0;
}
if (deviceSettingsKeys.contains("ifGain")) {
settings.m_ifGain = response.getFcdProPlusSettings()->getIfGain();
}
if (deviceSettingsKeys.contains("ifFilterIndex")) {
settings.m_ifFilterIndex = response.getFcdProPlusSettings()->getIfFilterIndex();
}
if (deviceSettingsKeys.contains("rfFilterIndex")) {
settings.m_rfFilterIndex = response.getFcdProPlusSettings()->getRfFilterIndex();
}
if (deviceSettingsKeys.contains("LOppmTenths")) {
settings.m_LOppmTenths = response.getFcdProPlusSettings()->getLOppmTenths();
}
if (deviceSettingsKeys.contains("dcBlock")) {
settings.m_dcBlock = response.getFcdProPlusSettings()->getDcBlock() != 0;
}
if (deviceSettingsKeys.contains("iqImbalance")) {
settings.m_iqImbalance = response.getFcdProPlusSettings()->getIqImbalance() != 0;
}
if (deviceSettingsKeys.contains("transverterDeltaFrequency")) {
settings.m_transverterDeltaFrequency = response.getFcdProPlusSettings()->getTransverterDeltaFrequency();
}
if (deviceSettingsKeys.contains("transverterMode")) {
settings.m_transverterMode = response.getFcdProPlusSettings()->getTransverterMode() != 0;
}
if (deviceSettingsKeys.contains("fileRecordName")) {
settings.m_fileRecordName = *response.getFcdProPlusSettings()->getFileRecordName();
}
MsgConfigureFCDProPlus *msg = MsgConfigureFCDProPlus::create(settings, force);
m_inputMessageQueue.push(msg);
if (m_guiMessageQueue) // forward to GUI if any
{
MsgConfigureFCDProPlus *msgToGUI = MsgConfigureFCDProPlus::create(settings, force);
m_guiMessageQueue->push(msgToGUI);
}
webapiFormatDeviceSettings(response, settings);
return 200;
}
void FCDProPlusInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FCDProPlusSettings& settings)
{
response.getFcdProPlusSettings()->setCenterFrequency(settings.m_centerFrequency);
response.getFcdProPlusSettings()->setRangeLow(settings.m_rangeLow ? 1 : 0);
response.getFcdProPlusSettings()->setLnaGain(settings.m_lnaGain ? 1 : 0);
response.getFcdProPlusSettings()->setMixGain(settings.m_mixGain ? 1 : 0);
response.getFcdProPlusSettings()->setBiasT(settings.m_biasT ? 1 : 0);
response.getFcdProPlusSettings()->setIfGain(settings.m_ifGain);
response.getFcdProPlusSettings()->setIfFilterIndex(settings.m_ifFilterIndex);
response.getFcdProPlusSettings()->setRfFilterIndex(settings.m_rfFilterIndex);
response.getFcdProPlusSettings()->setLOppmTenths(settings.m_LOppmTenths);
response.getFcdProPlusSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0);
response.getFcdProPlusSettings()->setIqImbalance(settings.m_iqImbalance ? 1 : 0);
response.getFcdProPlusSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency);
response.getFcdProPlusSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0);
if (response.getFcdProPlusSettings()->getFileRecordName()) {
*response.getFcdProPlusSettings()->getFileRecordName() = settings.m_fileRecordName;
} else {
response.getFcdProPlusSettings()->setFileRecordName(new QString(settings.m_fileRecordName));
}
}
@@ -36,23 +36,23 @@ class FileRecord;
class FCDProPlusInput : public DeviceSampleSource {
public:
class MsgConfigureFCD : public Message {
class MsgConfigureFCDProPlus : public Message {
MESSAGE_CLASS_DECLARATION
public:
const FCDProPlusSettings& getSettings() const { return m_settings; }
bool getForce() const { return m_force; }
static MsgConfigureFCD* create(const FCDProPlusSettings& settings, bool force)
static MsgConfigureFCDProPlus* create(const FCDProPlusSettings& settings, bool force)
{
return new MsgConfigureFCD(settings, force);
return new MsgConfigureFCDProPlus(settings, force);
}
private:
FCDProPlusSettings m_settings;
bool m_force;
MsgConfigureFCD(const FCDProPlusSettings& settings, bool force) :
MsgConfigureFCDProPlus(const FCDProPlusSettings& settings, bool force) :
Message(),
m_settings(settings),
m_force(force)
@@ -125,6 +125,16 @@ public:
SWGSDRangel::SWGDeviceState& response,
QString& errorMessage);
virtual int webapiSettingsGet(
SWGSDRangel::SWGDeviceSettings& response,
QString& errorMessage);
virtual int webapiSettingsPutPatch(
bool force,
const QStringList& deviceSettingsKeys,
SWGSDRangel::SWGDeviceSettings& response, // query + response
QString& errorMessage);
void set_center_freq(double freq);
void set_bias_t(bool on);
void set_lna_gain(bool on);
@@ -138,6 +148,7 @@ private:
bool openDevice();
void closeDevice();
void applySettings(const FCDProPlusSettings& settings, bool force);
void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FCDProPlusSettings& settings);
DeviceSourceAPI *m_deviceAPI;
hid_device *m_dev;
@@ -28,7 +28,7 @@
#include "fcdtraits.h"
#include "fcdproplusconst.h"
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCD, Message)
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCDProPlus, Message)
FCDProPlusInput::FCDProPlusInput() :
m_dev(0),
@@ -115,10 +115,10 @@ quint64 FCDProPlusInput::getCenterFrequency() const
bool FCDProPlusInput::handleMessage(const Message& message)
{
if(MsgConfigureFCD::match(message))
if(MsgConfigureFCDProPlus::match(message))
{
qDebug() << "FCDProPlusInput::handleMessage: MsgConfigureFCD";
MsgConfigureFCD& conf = (MsgConfigureFCD&) message;
MsgConfigureFCDProPlus& conf = (MsgConfigureFCDProPlus&) message;
applySettings(conf.getSettings(), false);
return true;
}
@@ -35,15 +35,15 @@ class FCDProPlusReader;
class FCDProPlusInput : public DeviceSampleSource {
public:
class MsgConfigureFCD : public Message {
class MsgConfigureFCDProPlus : public Message {
MESSAGE_CLASS_DECLARATION
public:
const FCDProPlusSettings& getSettings() const { return m_settings; }
static MsgConfigureFCD* create(const FCDProPlusSettings& settings)
static MsgConfigureFCDProPlus* create(const FCDProPlusSettings& settings)
{
return new MsgConfigureFCD(settings);
return new MsgConfigureFCDProPlus(settings);
}
private: