1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-14 15:33:34 -04:00

SDRdaemon input: implemeted WEB API

This commit is contained in:
f4exb
2018-05-27 11:07:24 +02:00
parent f7b2220d1c
commit 6e828066e0
19 changed files with 1295 additions and 6 deletions
@@ -633,7 +633,7 @@ void SDRdaemonSourceGui::updateStatus()
}
}
void SDRdaemonSourceGui::tick()
void SDRdaemonSourceGui::tick() // FIXME: needed?
{
if ((++m_tickCount & 0xf) == 0) {
SDRdaemonSourceInput::MsgConfigureSDRdaemonStreamTiming* message = SDRdaemonSourceInput::MsgConfigureSDRdaemonStreamTiming::create();
@@ -16,8 +16,10 @@
#include <string.h>
#include <errno.h>
#include <sys/time.h>
#include <QDebug>
#ifdef _WIN32
#include <nn.h>
#include <pair.h>
@@ -28,6 +30,8 @@
#include "SWGDeviceSettings.h"
#include "SWGDeviceState.h"
#include "SWGDeviceReport.h"
#include "SWGSDRdaemonSourceReport.h"
#include "util/simpleserializer.h"
#include "dsp/dspcommands.h"
@@ -228,11 +232,11 @@ bool SDRdaemonSourceInput::handleMessage(const Message& message)
applySettings(conf.getSettings(), conf.getForce());
return true;
}
else if (MsgConfigureSDRdaemonStreamTiming::match(message))
else if (MsgConfigureSDRdaemonStreamTiming::match(message)) // FIXME: really needed? UDP handler is connected to timer
{
return true;
}
else if (MsgReportSDRdaemonSourceStreamData::match(message))
else if (MsgReportSDRdaemonSourceStreamData::match(message)) // FIXME: really needed? UDP handler sends it to GUI already
{
// Forward message to the GUI if it is present
if (getMessageQueueToGUI()) {
@@ -242,7 +246,7 @@ bool SDRdaemonSourceInput::handleMessage(const Message& message)
return true; // delete the unused message
}
}
else if (MsgReportSDRdaemonSourceStreamTiming::match(message))
else if (MsgReportSDRdaemonSourceStreamTiming::match(message)) // FIXME: really needed? UDP handler sends it to GUI already
{
// Forward message to the GUI if it is present
if (getMessageQueueToGUI()) {
@@ -432,3 +436,120 @@ int SDRdaemonSourceInput::webapiRun(
return 200;
}
int SDRdaemonSourceInput::webapiSettingsGet(
SWGSDRangel::SWGDeviceSettings& response,
QString& errorMessage __attribute__((unused)))
{
response.setSdrDaemonSourceSettings(new SWGSDRangel::SWGSDRdaemonSourceSettings());
response.getSdrDaemonSourceSettings()->init();
webapiFormatDeviceSettings(response, m_settings);
return 200;
}
int SDRdaemonSourceInput::webapiSettingsPutPatch(
bool force,
const QStringList& deviceSettingsKeys,
SWGSDRangel::SWGDeviceSettings& response, // query + response
QString& errorMessage __attribute__((unused)))
{
SDRdaemonSourceSettings settings = m_settings;
if (deviceSettingsKeys.contains("centerFrequency")) {
settings.m_centerFrequency = response.getSdrDaemonSourceSettings()->getCenterFrequency();
}
if (deviceSettingsKeys.contains("sampleRate")) {
settings.m_sampleRate = response.getSdrDaemonSourceSettings()->getSampleRate();
}
if (deviceSettingsKeys.contains("log2Decim")) {
settings.m_log2Decim = response.getSdrDaemonSourceSettings()->getLog2Decim();
}
if (deviceSettingsKeys.contains("txDelay")) {
settings.m_txDelay = response.getSdrDaemonSourceSettings()->getTxDelay();
}
if (deviceSettingsKeys.contains("nbFECBlocks")) {
settings.m_txDelay = response.getSdrDaemonSourceSettings()->getNbFecBlocks();
}
if (deviceSettingsKeys.contains("address")) {
settings.m_address = *response.getSdrDaemonSourceSettings()->getAddress();
}
if (deviceSettingsKeys.contains("dataPort")) {
settings.m_dataPort = response.getSdrDaemonSourceSettings()->getDataPort();
}
if (deviceSettingsKeys.contains("controlPort")) {
settings.m_controlPort = response.getSdrDaemonSourceSettings()->getControlPort();
}
if (deviceSettingsKeys.contains("specificParameters")) {
settings.m_specificParameters = *response.getSdrDaemonSourceSettings()->getSpecificParameters();
}
if (deviceSettingsKeys.contains("dcBlock")) {
settings.m_dcBlock = response.getSdrDaemonSourceSettings()->getDcBlock() != 0;
}
if (deviceSettingsKeys.contains("iqCorrection")) {
settings.m_iqCorrection = response.getSdrDaemonSourceSettings()->getIqCorrection() != 0;
}
if (deviceSettingsKeys.contains("fcPos")) {
int fcPos = response.getSdrDaemonSourceSettings()->getFcPos();
settings.m_fcPos = fcPos < 0 ? 0 : fcPos > 2 ? 2 : fcPos;
}
if (deviceSettingsKeys.contains("fileRecordName")) {
settings.m_fileRecordName = *response.getSdrDaemonSourceSettings()->getFileRecordName();
}
MsgConfigureSDRdaemonSource *msg = MsgConfigureSDRdaemonSource::create(settings, force);
m_inputMessageQueue.push(msg);
if (m_guiMessageQueue) // forward to GUI if any
{
MsgConfigureSDRdaemonSource *msgToGUI = MsgConfigureSDRdaemonSource::create(settings, force);
m_guiMessageQueue->push(msgToGUI);
}
webapiFormatDeviceSettings(response, settings);
return 200;
}
void SDRdaemonSourceInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRdaemonSourceSettings& settings)
{
response.getSdrDaemonSourceSettings()->setCenterFrequency(settings.m_centerFrequency);
response.getSdrDaemonSourceSettings()->setSampleRate(settings.m_sampleRate);
response.getSdrDaemonSourceSettings()->setLog2Decim(settings.m_log2Decim);
response.getSdrDaemonSourceSettings()->setTxDelay(settings.m_txDelay);
response.getSdrDaemonSourceSettings()->setNbFecBlocks(settings.m_nbFECBlocks);
response.getSdrDaemonSourceSettings()->setAddress(new QString(settings.m_address));
response.getSdrDaemonSourceSettings()->setDataPort(settings.m_dataPort);
response.getSdrDaemonSourceSettings()->setControlPort(settings.m_controlPort);
response.getSdrDaemonSourceSettings()->setSpecificParameters(new QString(settings.m_specificParameters));
response.getSdrDaemonSourceSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0);
response.getSdrDaemonSourceSettings()->setIqCorrection(settings.m_iqCorrection);
response.getSdrDaemonSourceSettings()->setFcPos((int) settings.m_fcPos);
if (response.getSdrDaemonSourceSettings()->getFileRecordName()) {
*response.getSdrDaemonSourceSettings()->getFileRecordName() = settings.m_fileRecordName;
} else {
response.getSdrDaemonSourceSettings()->setFileRecordName(new QString(settings.m_fileRecordName));
}
}
int SDRdaemonSourceInput::webapiReportGet(
SWGSDRangel::SWGDeviceReport& response,
QString& errorMessage __attribute__((unused)))
{
response.setSdrDaemonSourceReport(new SWGSDRangel::SWGSDRdaemonSourceReport());
response.getSdrDaemonSourceReport()->init();
webapiFormatDeviceReport(response);
return 200;
}
void SDRdaemonSourceInput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response)
{
response.getSdrDaemonSourceReport()->setCenterFrequency(m_SDRdaemonUDPHandler->getCenterFrequency());
response.getSdrDaemonSourceReport()->setSampleRate(m_SDRdaemonUDPHandler->getSampleRate());
response.getSdrDaemonSourceReport()->setBufferRwBalance(m_SDRdaemonUDPHandler->getBufferGauge());
quint64 startingTimeStampMsec = ((quint64) m_SDRdaemonUDPHandler->getTVSec() * 1000LL) + ((quint64) m_SDRdaemonUDPHandler->getTVuSec() / 1000LL);
QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec);
response.getSdrDaemonSourceReport()->setDaemonTimestamp(new QString(dt.toString("yyyy-MM-dd HH:mm:ss.zzz")));
response.getSdrDaemonSourceReport()->setMinNbBlocks(m_SDRdaemonUDPHandler->getMinNbBlocks());
response.getSdrDaemonSourceReport()->setMaxNbRecovery(m_SDRdaemonUDPHandler->getMaxNbRecovery());
}
@@ -279,6 +279,20 @@ public:
virtual bool handleMessage(const Message& message);
virtual int webapiSettingsGet(
SWGSDRangel::SWGDeviceSettings& response,
QString& errorMessage);
virtual int webapiSettingsPutPatch(
bool force,
const QStringList& deviceSettingsKeys,
SWGSDRangel::SWGDeviceSettings& response, // query + response
QString& errorMessage);
virtual int webapiReportGet(
SWGSDRangel::SWGDeviceReport& response,
QString& errorMessage);
virtual int webapiRunGet(
SWGSDRangel::SWGDeviceState& response,
QString& errorMessage);
@@ -300,6 +314,8 @@ private:
FileRecord *m_fileSink; //!< File sink to record device I/Q output
void applySettings(const SDRdaemonSourceSettings& settings, bool force = false);
void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRdaemonSourceSettings& settings);
void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response);
};
#endif // INCLUDE_SDRDAEMONSOURCEINPUT_H
@@ -47,6 +47,11 @@ public:
bool isStreaming() const { return m_masterTimerConnected; }
int getSampleRate() const { return m_samplerate; }
int getCenterFrequency() const { return m_centerFrequency * 1000; }
int getBufferGauge() const { return m_sdrDaemonBuffer.getBufferGauge(); }
uint32_t getTVSec() const { return m_tv_sec; }
uint32_t getTVuSec() const { return m_tv_usec; }
int getMinNbBlocks() { return m_sdrDaemonBuffer.getMinNbBlocks(); }
int getMaxNbRecovery() { return m_sdrDaemonBuffer.getMaxNbRecovery(); }
public slots:
void dataReadyRead();