mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-12 11:26:11 -05:00
REST API device and channel actions: general implementation and RTLSDR and FileSource implementations
This commit is contained in:
parent
5e0d373d2a
commit
07c11edb87
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "SWGChannelSettings.h"
|
#include "SWGChannelSettings.h"
|
||||||
#include "SWGChannelReport.h"
|
#include "SWGChannelReport.h"
|
||||||
|
#include "SWGChannelActions.h"
|
||||||
#include "SWGFileSourceReport.h"
|
#include "SWGFileSourceReport.h"
|
||||||
|
|
||||||
#include "device/deviceapi.h"
|
#include "device/deviceapi.h"
|
||||||
@ -377,6 +378,26 @@ int FileSource::webapiReportGet(
|
|||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FileSource::webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
QString& errorMessage)
|
||||||
|
{
|
||||||
|
SWGSDRangel::SWGFileSourceActions *swgFileSourceActions = query.getFileSourceActions();
|
||||||
|
|
||||||
|
if (swgFileSourceActions)
|
||||||
|
{
|
||||||
|
bool play = swgFileSourceActions->getPlay() != 0;
|
||||||
|
FileSourceBaseband::MsgConfigureFileSourceWork *msg = FileSourceBaseband::MsgConfigureFileSourceWork::create(play);
|
||||||
|
m_basebandSource->getInputMessageQueue()->push(msg);
|
||||||
|
return 202;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errorMessage = "Missing FileSourceActions key in JSON body";
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FileSource::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const FileSourceSettings& settings)
|
void FileSource::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const FileSourceSettings& settings)
|
||||||
{
|
{
|
||||||
if (response.getFileSourceSettings()->getFileName()) {
|
if (response.getFileSourceSettings()->getFileName()) {
|
||||||
|
@ -205,6 +205,10 @@ public:
|
|||||||
SWGSDRangel::SWGChannelReport& response,
|
SWGSDRangel::SWGChannelReport& response,
|
||||||
QString& errorMessage);
|
QString& errorMessage);
|
||||||
|
|
||||||
|
virtual int webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
QString& errorMessage);
|
||||||
|
|
||||||
static void webapiFormatChannelSettings(
|
static void webapiFormatChannelSettings(
|
||||||
SWGSDRangel::SWGChannelSettings& response,
|
SWGSDRangel::SWGChannelSettings& response,
|
||||||
const FileSourceSettings& settings);
|
const FileSourceSettings& settings);
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "SWGRtlSdrSettings.h"
|
#include "SWGRtlSdrSettings.h"
|
||||||
#include "SWGDeviceState.h"
|
#include "SWGDeviceState.h"
|
||||||
#include "SWGDeviceReport.h"
|
#include "SWGDeviceReport.h"
|
||||||
|
#include "SWGDeviceActions.h"
|
||||||
#include "SWGRtlSdrReport.h"
|
#include "SWGRtlSdrReport.h"
|
||||||
|
|
||||||
#include "rtlsdrinput.h"
|
#include "rtlsdrinput.h"
|
||||||
@ -755,6 +756,26 @@ int RTLSDRInput::webapiReportGet(
|
|||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RTLSDRInput::webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGDeviceActions& query,
|
||||||
|
QString& errorMessage)
|
||||||
|
{
|
||||||
|
SWGSDRangel::SWGRtlSdrActions *swgRtlSdrActions = query.getRtlSdrActions();
|
||||||
|
|
||||||
|
if (swgRtlSdrActions)
|
||||||
|
{
|
||||||
|
bool record = swgRtlSdrActions->getRecord() != 0;
|
||||||
|
MsgFileRecord *msg = MsgFileRecord::create(record);
|
||||||
|
getInputMessageQueue()->push(msg);
|
||||||
|
return 202;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errorMessage = "Missing RtlSdrActions key in JSON body";
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RTLSDRInput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response)
|
void RTLSDRInput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response)
|
||||||
{
|
{
|
||||||
response.getRtlSdrReport()->setGains(new QList<SWGSDRangel::SWGGain*>);
|
response.getRtlSdrReport()->setGains(new QList<SWGSDRangel::SWGGain*>);
|
||||||
|
@ -131,6 +131,10 @@ public:
|
|||||||
SWGSDRangel::SWGDeviceReport& response,
|
SWGSDRangel::SWGDeviceReport& response,
|
||||||
QString& errorMessage);
|
QString& errorMessage);
|
||||||
|
|
||||||
|
virtual int webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGDeviceActions& actions,
|
||||||
|
QString& errorMessage);
|
||||||
|
|
||||||
virtual int webapiRunGet(
|
virtual int webapiRunGet(
|
||||||
SWGSDRangel::SWGDeviceState& response,
|
SWGSDRangel::SWGDeviceState& response,
|
||||||
QString& errorMessage);
|
QString& errorMessage);
|
||||||
|
@ -32,6 +32,7 @@ namespace SWGSDRangel
|
|||||||
{
|
{
|
||||||
class SWGChannelSettings;
|
class SWGChannelSettings;
|
||||||
class SWGChannelReport;
|
class SWGChannelReport;
|
||||||
|
class SWGChannelActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SDRBASE_API ChannelAPI {
|
class SDRBASE_API ChannelAPI {
|
||||||
@ -93,6 +94,17 @@ public:
|
|||||||
errorMessage = "Not implemented"; return 501;
|
errorMessage = "Not implemented"; return 501;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API adapter for the channel actions POST requests
|
||||||
|
*/
|
||||||
|
virtual int webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
QString& errorMessage)
|
||||||
|
{
|
||||||
|
(void) query;
|
||||||
|
errorMessage = "Not implemented"; return 501;
|
||||||
|
}
|
||||||
|
|
||||||
int getIndexInDeviceSet() const { return m_indexInDeviceSet; }
|
int getIndexInDeviceSet() const { return m_indexInDeviceSet; }
|
||||||
void setIndexInDeviceSet(int indexInDeviceSet) { m_indexInDeviceSet = indexInDeviceSet; }
|
void setIndexInDeviceSet(int indexInDeviceSet) { m_indexInDeviceSet = indexInDeviceSet; }
|
||||||
int getDeviceSetIndex() const { return m_deviceSetIndex; }
|
int getDeviceSetIndex() const { return m_deviceSetIndex; }
|
||||||
|
@ -33,6 +33,7 @@ namespace SWGSDRangel
|
|||||||
class SWGDeviceSettings;
|
class SWGDeviceSettings;
|
||||||
class SWGDeviceState;
|
class SWGDeviceState;
|
||||||
class SWGDeviceReport;
|
class SWGDeviceReport;
|
||||||
|
class SWGDeviceActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SDRBASE_API DeviceSampleMIMO : public QObject {
|
class SDRBASE_API DeviceSampleMIMO : public QObject {
|
||||||
@ -135,6 +136,15 @@ public:
|
|||||||
return 501;
|
return 501;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual int webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGDeviceActions& actions,
|
||||||
|
QString& errorMessage)
|
||||||
|
{
|
||||||
|
(void) actions;
|
||||||
|
errorMessage = "Not implemented";
|
||||||
|
return 501;
|
||||||
|
}
|
||||||
|
|
||||||
MIMOType getMIMOType() const { return m_mimoType; }
|
MIMOType getMIMOType() const { return m_mimoType; }
|
||||||
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
|
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
|
||||||
virtual void setMessageQueueToGUI(MessageQueue *queue) = 0; // pure virtual so that child classes must have to deal with this
|
virtual void setMessageQueueToGUI(MessageQueue *queue) = 0; // pure virtual so that child classes must have to deal with this
|
||||||
|
@ -31,6 +31,7 @@ namespace SWGSDRangel
|
|||||||
class SWGDeviceSettings;
|
class SWGDeviceSettings;
|
||||||
class SWGDeviceState;
|
class SWGDeviceState;
|
||||||
class SWGDeviceReport;
|
class SWGDeviceReport;
|
||||||
|
class SWGDeviceActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SDRBASE_API DeviceSampleSink : public QObject {
|
class SDRBASE_API DeviceSampleSink : public QObject {
|
||||||
@ -111,6 +112,15 @@ public:
|
|||||||
return 501;
|
return 501;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual int webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGDeviceActions& actions,
|
||||||
|
QString& errorMessage)
|
||||||
|
{
|
||||||
|
(void) actions;
|
||||||
|
errorMessage = "Not implemented";
|
||||||
|
return 501;
|
||||||
|
}
|
||||||
|
|
||||||
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
|
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
|
||||||
virtual void setMessageQueueToGUI(MessageQueue *queue) = 0; // pure virtual so that child classes must have to deal with this
|
virtual void setMessageQueueToGUI(MessageQueue *queue) = 0; // pure virtual so that child classes must have to deal with this
|
||||||
MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; }
|
MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; }
|
||||||
|
@ -32,6 +32,7 @@ namespace SWGSDRangel
|
|||||||
class SWGDeviceSettings;
|
class SWGDeviceSettings;
|
||||||
class SWGDeviceState;
|
class SWGDeviceState;
|
||||||
class SWGDeviceReport;
|
class SWGDeviceReport;
|
||||||
|
class SWGDeviceActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SDRBASE_API DeviceSampleSource : public QObject {
|
class SDRBASE_API DeviceSampleSource : public QObject {
|
||||||
@ -117,6 +118,15 @@ public:
|
|||||||
return 501;
|
return 501;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual int webapiActionsPost(
|
||||||
|
SWGSDRangel::SWGDeviceActions& actions,
|
||||||
|
QString& errorMessage)
|
||||||
|
{
|
||||||
|
(void) actions;
|
||||||
|
errorMessage = "Not implemented";
|
||||||
|
return 501;
|
||||||
|
}
|
||||||
|
|
||||||
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
|
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
|
||||||
virtual void setMessageQueueToGUI(MessageQueue *queue) = 0; // pure virtual so that child classes must have to deal with this
|
virtual void setMessageQueueToGUI(MessageQueue *queue) = 0; // pure virtual so that child classes must have to deal with this
|
||||||
MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; }
|
MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; }
|
||||||
|
@ -49,11 +49,13 @@ std::regex WebAPIAdapterInterface::devicesetDeviceSettingsURLRe("^/sdrangel/devi
|
|||||||
std::regex WebAPIAdapterInterface::devicesetDeviceRunURLRe("^/sdrangel/deviceset/([0-9]{1,2})/device/run$");
|
std::regex WebAPIAdapterInterface::devicesetDeviceRunURLRe("^/sdrangel/deviceset/([0-9]{1,2})/device/run$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetDeviceSubsystemRunURLRe("^/sdrangel/deviceset/([0-9]{1,2})/subdevice/([0-9]{1,2})/run$");
|
std::regex WebAPIAdapterInterface::devicesetDeviceSubsystemRunURLRe("^/sdrangel/deviceset/([0-9]{1,2})/subdevice/([0-9]{1,2})/run$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetDeviceReportURLRe("^/sdrangel/deviceset/([0-9]{1,2})/device/report$");
|
std::regex WebAPIAdapterInterface::devicesetDeviceReportURLRe("^/sdrangel/deviceset/([0-9]{1,2})/device/report$");
|
||||||
|
std::regex WebAPIAdapterInterface::devicesetDeviceActionsURLRe("^/sdrangel/deviceset/([0-9]{1,2})/device/actions$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetChannelsReportURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channels/report$");
|
std::regex WebAPIAdapterInterface::devicesetChannelsReportURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channels/report$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetChannelURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel$");
|
std::regex WebAPIAdapterInterface::devicesetChannelURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetChannelIndexURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})$");
|
std::regex WebAPIAdapterInterface::devicesetChannelIndexURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetChannelSettingsURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})/settings$");
|
std::regex WebAPIAdapterInterface::devicesetChannelSettingsURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})/settings$");
|
||||||
std::regex WebAPIAdapterInterface::devicesetChannelReportURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})/report");
|
std::regex WebAPIAdapterInterface::devicesetChannelReportURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})/report");
|
||||||
|
std::regex WebAPIAdapterInterface::devicesetChannelActionsURLRe("^/sdrangel/deviceset/([0-9]{1,2})/channel/([0-9]{1,2})/actions");
|
||||||
|
|
||||||
void WebAPIAdapterInterface::ConfigKeys::debug() const
|
void WebAPIAdapterInterface::ConfigKeys::debug() const
|
||||||
{
|
{
|
||||||
|
@ -56,9 +56,11 @@ namespace SWGSDRangel
|
|||||||
class SWGDeviceSettings;
|
class SWGDeviceSettings;
|
||||||
class SWGDeviceState;
|
class SWGDeviceState;
|
||||||
class SWGDeviceReport;
|
class SWGDeviceReport;
|
||||||
|
class SWGDeviceActions;
|
||||||
class SWGChannelsDetail;
|
class SWGChannelsDetail;
|
||||||
class SWGChannelSettings;
|
class SWGChannelSettings;
|
||||||
class SWGChannelReport;
|
class SWGChannelReport;
|
||||||
|
class SWGChannelActions;
|
||||||
class SWGSuccessResponse;
|
class SWGSuccessResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -876,6 +878,25 @@ public:
|
|||||||
return 501;
|
return 501;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler of /sdrangel/deviceset/{deviceSetIndex}/device/actions (POST)
|
||||||
|
* post action(s) on device
|
||||||
|
*/
|
||||||
|
virtual int devicesetDeviceActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
SWGSDRangel::SWGDeviceActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error
|
||||||
|
)
|
||||||
|
{
|
||||||
|
(void) deviceSetIndex;
|
||||||
|
(void) query;
|
||||||
|
(void) response;
|
||||||
|
error.init();
|
||||||
|
*error.getMessage() = QString("Function not implemented");
|
||||||
|
return 501;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler of /sdrangel/deviceset/{deviceSetIndex}/channel (POST) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
|
* Handler of /sdrangel/deviceset/{deviceSetIndex}/channel (POST) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
|
||||||
* returns the Http status code (default 501: not implemented)
|
* returns the Http status code (default 501: not implemented)
|
||||||
@ -972,6 +993,26 @@ public:
|
|||||||
return 501;
|
return 501;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler of /sdrangel/deviceset/{deviceSetIndex}/channel/{channelIndex}/actions (POST)
|
||||||
|
* posts an action on the channel (default 501: not implemented)
|
||||||
|
*/
|
||||||
|
virtual int devicesetChannelActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
int channelIndex,
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error)
|
||||||
|
{
|
||||||
|
(void) deviceSetIndex;
|
||||||
|
(void) channelIndex;
|
||||||
|
(void) query;
|
||||||
|
(void) response;
|
||||||
|
error.init();
|
||||||
|
*error.getMessage() = QString("Function not implemented");
|
||||||
|
return 501;
|
||||||
|
}
|
||||||
|
|
||||||
static QString instanceSummaryURL;
|
static QString instanceSummaryURL;
|
||||||
static QString instanceConfigURL;
|
static QString instanceConfigURL;
|
||||||
static QString instanceDevicesURL;
|
static QString instanceDevicesURL;
|
||||||
@ -1001,10 +1042,12 @@ public:
|
|||||||
static std::regex devicesetDeviceRunURLRe;
|
static std::regex devicesetDeviceRunURLRe;
|
||||||
static std::regex devicesetDeviceSubsystemRunURLRe;
|
static std::regex devicesetDeviceSubsystemRunURLRe;
|
||||||
static std::regex devicesetDeviceReportURLRe;
|
static std::regex devicesetDeviceReportURLRe;
|
||||||
|
static std::regex devicesetDeviceActionsURLRe;
|
||||||
static std::regex devicesetChannelURLRe;
|
static std::regex devicesetChannelURLRe;
|
||||||
static std::regex devicesetChannelIndexURLRe;
|
static std::regex devicesetChannelIndexURLRe;
|
||||||
static std::regex devicesetChannelSettingsURLRe;
|
static std::regex devicesetChannelSettingsURLRe;
|
||||||
static std::regex devicesetChannelReportURLRe;
|
static std::regex devicesetChannelReportURLRe;
|
||||||
|
static std::regex devicesetChannelActionsURLRe;
|
||||||
static std::regex devicesetChannelsReportURLRe;
|
static std::regex devicesetChannelsReportURLRe;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -44,9 +44,11 @@
|
|||||||
#include "SWGDeviceSettings.h"
|
#include "SWGDeviceSettings.h"
|
||||||
#include "SWGDeviceState.h"
|
#include "SWGDeviceState.h"
|
||||||
#include "SWGDeviceReport.h"
|
#include "SWGDeviceReport.h"
|
||||||
|
#include "SWGDeviceActions.h"
|
||||||
#include "SWGChannelsDetail.h"
|
#include "SWGChannelsDetail.h"
|
||||||
#include "SWGChannelSettings.h"
|
#include "SWGChannelSettings.h"
|
||||||
#include "SWGChannelReport.h"
|
#include "SWGChannelReport.h"
|
||||||
|
#include "SWGChannelActions.h"
|
||||||
#include "SWGSuccessResponse.h"
|
#include "SWGSuccessResponse.h"
|
||||||
#include "SWGErrorResponse.h"
|
#include "SWGErrorResponse.h"
|
||||||
|
|
||||||
@ -297,6 +299,8 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http
|
|||||||
devicesetDeviceSubsystemRunService(std::string(desc_match[1]), std::string(desc_match[2]), request, response);
|
devicesetDeviceSubsystemRunService(std::string(desc_match[1]), std::string(desc_match[2]), request, response);
|
||||||
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetDeviceReportURLRe)) {
|
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetDeviceReportURLRe)) {
|
||||||
devicesetDeviceReportService(std::string(desc_match[1]), request, response);
|
devicesetDeviceReportService(std::string(desc_match[1]), request, response);
|
||||||
|
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetDeviceActionsURLRe)) {
|
||||||
|
devicesetDeviceActionsService(std::string(desc_match[1]), request, response);
|
||||||
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelsReportURLRe)) {
|
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelsReportURLRe)) {
|
||||||
devicesetChannelsReportService(std::string(desc_match[1]), request, response);
|
devicesetChannelsReportService(std::string(desc_match[1]), request, response);
|
||||||
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelURLRe)) {
|
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelURLRe)) {
|
||||||
@ -1912,6 +1916,77 @@ void WebAPIRequestMapper::devicesetDeviceReportService(const std::string& indexS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebAPIRequestMapper::devicesetDeviceActionsService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
|
||||||
|
{
|
||||||
|
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||||
|
response.setHeader("Content-Type", "application/json");
|
||||||
|
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||||
|
|
||||||
|
if (request.getMethod() == "POST")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
QString jsonStr = request.getBody();
|
||||||
|
QJsonObject jsonObject;
|
||||||
|
|
||||||
|
if (parseJsonBody(jsonStr, jsonObject, response))
|
||||||
|
{
|
||||||
|
SWGSDRangel::SWGDeviceActions query;
|
||||||
|
SWGSDRangel::SWGSuccessResponse normalResponse;
|
||||||
|
int deviceSetIndex = boost::lexical_cast<int>(indexStr);
|
||||||
|
resetDeviceActions(query);
|
||||||
|
|
||||||
|
if (jsonObject.contains("direction")) {
|
||||||
|
query.setDirection(jsonObject["direction"].toInt());
|
||||||
|
} else {
|
||||||
|
query.setDirection(0); // assume Rx
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonObject.contains("deviceHwType") && jsonObject["deviceHwType"].isString())
|
||||||
|
{
|
||||||
|
query.setDeviceHwType(new QString(jsonObject["deviceHwType"].toString()));
|
||||||
|
int status = m_adapter->devicesetDeviceActionsPost(deviceSetIndex, query, normalResponse, errorResponse);
|
||||||
|
response.setStatus(status);
|
||||||
|
|
||||||
|
if (status/100 == 2) {
|
||||||
|
response.write(normalResponse.asJson().toUtf8());
|
||||||
|
} else {
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(400,"Invalid JSON request");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid JSON request";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(400,"Invalid JSON format");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid JSON format";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const boost::bad_lexical_cast &e)
|
||||||
|
{
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Wrong integer conversion on device set index";
|
||||||
|
response.setStatus(400,"Invalid data");
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(405,"Invalid HTTP method");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid HTTP method";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WebAPIRequestMapper::devicesetChannelsReportService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
|
void WebAPIRequestMapper::devicesetChannelsReportService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
|
||||||
{
|
{
|
||||||
SWGSDRangel::SWGErrorResponse errorResponse;
|
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||||
@ -2189,6 +2264,13 @@ void WebAPIRequestMapper::devicesetChannelReportService(
|
|||||||
response.write(errorResponse.asJson().toUtf8());
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(405,"Invalid HTTP method");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid HTTP method";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const boost::bad_lexical_cast &e)
|
catch (const boost::bad_lexical_cast &e)
|
||||||
{
|
{
|
||||||
@ -2199,6 +2281,83 @@ void WebAPIRequestMapper::devicesetChannelReportService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebAPIRequestMapper::devicesetChannelActtionsService(
|
||||||
|
const std::string& deviceSetIndexStr,
|
||||||
|
const std::string& channelIndexStr,
|
||||||
|
qtwebapp::HttpRequest& request,
|
||||||
|
qtwebapp::HttpResponse& response)
|
||||||
|
{
|
||||||
|
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||||
|
response.setHeader("Content-Type", "application/json");
|
||||||
|
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int deviceSetIndex = boost::lexical_cast<int>(deviceSetIndexStr);
|
||||||
|
int channelIndex = boost::lexical_cast<int>(channelIndexStr);
|
||||||
|
|
||||||
|
if (request.getMethod() == "POST")
|
||||||
|
{
|
||||||
|
QString jsonStr = request.getBody();
|
||||||
|
QJsonObject jsonObject;
|
||||||
|
|
||||||
|
if (parseJsonBody(jsonStr, jsonObject, response))
|
||||||
|
{
|
||||||
|
SWGSDRangel::SWGChannelActions query;
|
||||||
|
SWGSDRangel::SWGSuccessResponse normalResponse;
|
||||||
|
resetChannelActions(query);
|
||||||
|
|
||||||
|
if (jsonObject.contains("direction")) {
|
||||||
|
query.setDirection(jsonObject["direction"].toInt());
|
||||||
|
} else {
|
||||||
|
query.setDirection(0); // assume Rx
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonObject.contains("channelType") && jsonObject["channelType"].isString())
|
||||||
|
{
|
||||||
|
query.setChannelType(new QString(jsonObject["channelType"].toString()));
|
||||||
|
int status = m_adapter->devicesetChannelActionsPost(deviceSetIndex, channelIndex, query, normalResponse, errorResponse);
|
||||||
|
response.setStatus(status);
|
||||||
|
|
||||||
|
if (status/100 == 2) {
|
||||||
|
response.write(normalResponse.asJson().toUtf8());
|
||||||
|
} else {
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(400,"Invalid JSON request");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid JSON request";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(400,"Invalid JSON format");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid JSON format";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.setStatus(405,"Invalid HTTP method");
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Invalid HTTP method";
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(const boost::bad_lexical_cast &e)
|
||||||
|
{
|
||||||
|
errorResponse.init();
|
||||||
|
*errorResponse.getMessage() = "Wrong integer conversion on index";
|
||||||
|
response.setStatus(400,"Invalid data");
|
||||||
|
response.write(errorResponse.asJson().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool WebAPIRequestMapper::parseJsonBody(QString& jsonStr, QJsonObject& jsonObject, qtwebapp::HttpResponse& response)
|
bool WebAPIRequestMapper::parseJsonBody(QString& jsonStr, QJsonObject& jsonObject, qtwebapp::HttpResponse& response)
|
||||||
{
|
{
|
||||||
SWGSDRangel::SWGErrorResponse errorResponse;
|
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||||
@ -3237,6 +3396,13 @@ void WebAPIRequestMapper::resetDeviceReport(SWGSDRangel::SWGDeviceReport& device
|
|||||||
deviceReport.setSdrPlayReport(nullptr);
|
deviceReport.setSdrPlayReport(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebAPIRequestMapper::resetDeviceActions(SWGSDRangel::SWGDeviceActions& deviceActions)
|
||||||
|
{
|
||||||
|
deviceActions.cleanup();
|
||||||
|
deviceActions.setDeviceHwType(nullptr);
|
||||||
|
deviceActions.setRtlSdrActions(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
void WebAPIRequestMapper::resetChannelSettings(SWGSDRangel::SWGChannelSettings& channelSettings)
|
void WebAPIRequestMapper::resetChannelSettings(SWGSDRangel::SWGChannelSettings& channelSettings)
|
||||||
{
|
{
|
||||||
channelSettings.cleanup();
|
channelSettings.cleanup();
|
||||||
@ -3278,6 +3444,13 @@ void WebAPIRequestMapper::resetChannelReport(SWGSDRangel::SWGChannelReport& chan
|
|||||||
channelReport.setWfmModReport(nullptr);
|
channelReport.setWfmModReport(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebAPIRequestMapper::resetChannelActions(SWGSDRangel::SWGChannelActions& channelActions)
|
||||||
|
{
|
||||||
|
channelActions.cleanup();
|
||||||
|
channelActions.setChannelType(nullptr);
|
||||||
|
channelActions.setFileSourceActions(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
void WebAPIRequestMapper::resetAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice)
|
void WebAPIRequestMapper::resetAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice)
|
||||||
{
|
{
|
||||||
audioInputDevice.cleanup();
|
audioInputDevice.cleanup();
|
||||||
|
@ -82,11 +82,13 @@ private:
|
|||||||
void devicesetDeviceRunService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetDeviceRunService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetDeviceSubsystemRunService(const std::string& indexStr, const std::string& subsystemIndexStr,qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetDeviceSubsystemRunService(const std::string& indexStr, const std::string& subsystemIndexStr,qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetDeviceReportService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetDeviceReportService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
|
void devicesetDeviceActionsService(const std::string& indexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetChannelsReportService(const std::string& deviceSetIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetChannelsReportService(const std::string& deviceSetIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetChannelService(const std::string& deviceSetIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetChannelService(const std::string& deviceSetIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetChannelIndexService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetChannelIndexService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetChannelSettingsService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetChannelSettingsService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
void devicesetChannelReportService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
void devicesetChannelReportService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
|
void devicesetChannelActtionsService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
|
||||||
|
|
||||||
bool validatePresetTransfer(SWGSDRangel::SWGPresetTransfer& presetTransfer);
|
bool validatePresetTransfer(SWGSDRangel::SWGPresetTransfer& presetTransfer);
|
||||||
bool validatePresetIdentifer(SWGSDRangel::SWGPresetIdentifier& presetIdentifier);
|
bool validatePresetIdentifer(SWGSDRangel::SWGPresetIdentifier& presetIdentifier);
|
||||||
@ -146,8 +148,10 @@ private:
|
|||||||
|
|
||||||
void resetDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings);
|
void resetDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings);
|
||||||
void resetDeviceReport(SWGSDRangel::SWGDeviceReport& deviceReport);
|
void resetDeviceReport(SWGSDRangel::SWGDeviceReport& deviceReport);
|
||||||
|
void resetDeviceActions(SWGSDRangel::SWGDeviceActions& deviceActions);
|
||||||
void resetChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings);
|
void resetChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings);
|
||||||
void resetChannelReport(SWGSDRangel::SWGChannelReport& deviceSettings);
|
void resetChannelReport(SWGSDRangel::SWGChannelReport& channelReport);
|
||||||
|
void resetChannelActions(SWGSDRangel::SWGChannelActions& channelActions);
|
||||||
void resetAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice);
|
void resetAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice);
|
||||||
void resetAudioOutputDevice(SWGSDRangel::SWGAudioOutputDevice& audioOutputDevice);
|
void resetAudioOutputDevice(SWGSDRangel::SWGAudioOutputDevice& audioOutputDevice);
|
||||||
|
|
||||||
|
@ -58,9 +58,11 @@
|
|||||||
#include "SWGDeviceSettings.h"
|
#include "SWGDeviceSettings.h"
|
||||||
#include "SWGDeviceState.h"
|
#include "SWGDeviceState.h"
|
||||||
#include "SWGDeviceReport.h"
|
#include "SWGDeviceReport.h"
|
||||||
|
#include "SWGDeviceActions.h"
|
||||||
#include "SWGChannelsDetail.h"
|
#include "SWGChannelsDetail.h"
|
||||||
#include "SWGChannelSettings.h"
|
#include "SWGChannelSettings.h"
|
||||||
#include "SWGChannelReport.h"
|
#include "SWGChannelReport.h"
|
||||||
|
#include "SWGChannelActions.h"
|
||||||
#include "SWGSuccessResponse.h"
|
#include "SWGSuccessResponse.h"
|
||||||
#include "SWGErrorResponse.h"
|
#include "SWGErrorResponse.h"
|
||||||
#include "SWGDeviceState.h"
|
#include "SWGDeviceState.h"
|
||||||
@ -1565,6 +1567,109 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsGet(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WebAPIAdapterGUI::devicesetDeviceActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
SWGSDRangel::SWGDeviceActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error)
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
|
||||||
|
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainWindow.m_deviceUIs.size()))
|
||||||
|
{
|
||||||
|
DeviceUISet *deviceSet = m_mainWindow.m_deviceUIs[deviceSetIndex];
|
||||||
|
|
||||||
|
if (deviceSet->m_deviceSourceEngine) // Single Rx
|
||||||
|
{
|
||||||
|
if (query.getDirection() != 0)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Single Rx device found but other type of device requested");
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
if (deviceSet->m_deviceAPI->getHardwareId() != *query.getDeviceHwType())
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Device mismatch. Found %1 input").arg(deviceSet->m_deviceAPI->getHardwareId());
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource();
|
||||||
|
int res = source->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceSinkEngine) // Single Tx
|
||||||
|
{
|
||||||
|
if (query.getDirection() != 1)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Single Tx device found but other type of device requested");
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceAPI->getHardwareId() != *query.getDeviceHwType())
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Device mismatch. Found %1 output").arg(deviceSet->m_deviceAPI->getHardwareId());
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink();
|
||||||
|
int res = sink->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceMIMOEngine) // MIMO
|
||||||
|
{
|
||||||
|
if (query.getDirection() != 2)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("MIMO device found but other type of device requested");
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceAPI->getHardwareId() != *query.getDeviceHwType())
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Device mismatch. Found %1 output").arg(deviceSet->m_deviceAPI->getHardwareId());
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO();
|
||||||
|
int res = mimo->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("DeviceSet error");
|
||||||
|
return 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int WebAPIAdapterGUI::devicesetDeviceSettingsPutPatch(
|
int WebAPIAdapterGUI::devicesetDeviceSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
bool force,
|
bool force,
|
||||||
@ -2281,6 +2386,160 @@ int WebAPIAdapterGUI::devicesetChannelReportGet(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WebAPIAdapterGUI::devicesetChannelActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
int channelIndex,
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error)
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
|
||||||
|
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainWindow.m_deviceUIs.size()))
|
||||||
|
{
|
||||||
|
DeviceUISet *deviceSet = m_mainWindow.m_deviceUIs[deviceSetIndex];
|
||||||
|
|
||||||
|
if (deviceSet->m_deviceSourceEngine) // Single Rx
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI = deviceSet->m_deviceAPI->getChanelSinkAPIAt(channelIndex);
|
||||||
|
|
||||||
|
if (channelAPI == 0)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString channelType;
|
||||||
|
channelAPI->getIdentifier(channelType);
|
||||||
|
|
||||||
|
if (channelType == *query.getChannelType())
|
||||||
|
{
|
||||||
|
int res = channelAPI->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.")
|
||||||
|
.arg(*query.getChannelType())
|
||||||
|
.arg(channelIndex)
|
||||||
|
.arg(channelType);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceSinkEngine) // Single Tx
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI = deviceSet->m_deviceAPI->getChanelSourceAPIAt(channelIndex);
|
||||||
|
|
||||||
|
if (channelAPI == 0)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString channelType;
|
||||||
|
channelAPI->getIdentifier(channelType);
|
||||||
|
|
||||||
|
if (channelType == *query.getChannelType())
|
||||||
|
{
|
||||||
|
int res = channelAPI->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.")
|
||||||
|
.arg(*query.getChannelType())
|
||||||
|
.arg(channelIndex)
|
||||||
|
.arg(channelType);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceMIMOEngine) // MIMO
|
||||||
|
{
|
||||||
|
int nbSinkChannels = deviceSet->m_deviceAPI->getNbSinkChannels();
|
||||||
|
int nbSourceChannels = deviceSet->m_deviceAPI->getNbSourceChannels();
|
||||||
|
int nbMIMOChannels = deviceSet->m_deviceAPI->getNbMIMOChannels();
|
||||||
|
ChannelAPI *channelAPI = nullptr;
|
||||||
|
|
||||||
|
if ((query.getDirection() == 0) && (channelIndex < nbSinkChannels))
|
||||||
|
{
|
||||||
|
channelAPI = deviceSet->m_deviceAPI->getChanelSinkAPIAt(channelIndex);
|
||||||
|
}
|
||||||
|
else if ((query.getDirection() == 1) && (channelIndex < nbSinkChannels + nbSourceChannels))
|
||||||
|
{
|
||||||
|
channelAPI = deviceSet->m_deviceAPI->getChanelSourceAPIAt(channelIndex - nbSinkChannels);
|
||||||
|
}
|
||||||
|
else if ((query.getDirection() == 2) && (channelIndex < nbSinkChannels + nbSourceChannels + nbMIMOChannels))
|
||||||
|
{
|
||||||
|
channelAPI = deviceSet->m_deviceAPI->getMIMOChannelAPIAt(channelIndex - nbSinkChannels - nbSourceChannels);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("here is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channelAPI)
|
||||||
|
{
|
||||||
|
QString channelType;
|
||||||
|
channelAPI->getIdentifier(channelType);
|
||||||
|
|
||||||
|
if (channelType == *query.getChannelType())
|
||||||
|
{
|
||||||
|
int res = channelAPI->webapiActionsPost(query, *error.getMessage());
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.")
|
||||||
|
.arg(*query.getChannelType())
|
||||||
|
.arg(channelIndex)
|
||||||
|
.arg(channelType);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("DeviceSet error");
|
||||||
|
return 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch(
|
int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
int channelIndex,
|
int channelIndex,
|
||||||
@ -2414,7 +2673,6 @@ int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch(
|
|||||||
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
|
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebAPIAdapterGUI::getDeviceSetList(SWGSDRangel::SWGDeviceSetList* deviceSetList)
|
void WebAPIAdapterGUI::getDeviceSetList(SWGSDRangel::SWGDeviceSetList* deviceSetList)
|
||||||
|
@ -223,6 +223,12 @@ public:
|
|||||||
SWGSDRangel::SWGDeviceSettings& response,
|
SWGSDRangel::SWGDeviceSettings& response,
|
||||||
SWGSDRangel::SWGErrorResponse& error);
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
|
virtual int devicesetDeviceActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
SWGSDRangel::SWGDeviceActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
virtual int devicesetDeviceSettingsPutPatch(
|
virtual int devicesetDeviceSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
bool force,
|
bool force,
|
||||||
@ -291,6 +297,13 @@ public:
|
|||||||
SWGSDRangel::SWGChannelSettings& response,
|
SWGSDRangel::SWGChannelSettings& response,
|
||||||
SWGSDRangel::SWGErrorResponse& error);
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
|
virtual int devicesetChannelActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
int channelIndex,
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
virtual int devicesetChannelSettingsPutPatch(
|
virtual int devicesetChannelSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
int channelIndex,
|
int channelIndex,
|
||||||
|
@ -36,9 +36,11 @@
|
|||||||
#include "SWGPresets.h"
|
#include "SWGPresets.h"
|
||||||
#include "SWGPresetTransfer.h"
|
#include "SWGPresetTransfer.h"
|
||||||
#include "SWGDeviceSettings.h"
|
#include "SWGDeviceSettings.h"
|
||||||
|
#include "SWGDeviceActions.h"
|
||||||
#include "SWGChannelsDetail.h"
|
#include "SWGChannelsDetail.h"
|
||||||
#include "SWGChannelSettings.h"
|
#include "SWGChannelSettings.h"
|
||||||
#include "SWGChannelReport.h"
|
#include "SWGChannelReport.h"
|
||||||
|
#include "SWGChannelActions.h"
|
||||||
#include "SWGSuccessResponse.h"
|
#include "SWGSuccessResponse.h"
|
||||||
#include "SWGErrorResponse.h"
|
#include "SWGErrorResponse.h"
|
||||||
#include "SWGDeviceState.h"
|
#include "SWGDeviceState.h"
|
||||||
@ -1662,6 +1664,109 @@ int WebAPIAdapterSrv::devicesetDeviceSettingsGet(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WebAPIAdapterSrv::devicesetDeviceActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
SWGSDRangel::SWGDeviceActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error)
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
|
||||||
|
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainCore.m_deviceSets.size()))
|
||||||
|
{
|
||||||
|
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
|
||||||
|
|
||||||
|
if (deviceSet->m_deviceSourceEngine) // Single Rx
|
||||||
|
{
|
||||||
|
if (query.getDirection() != 0)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Single Rx device found but other type of device requested");
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
if (deviceSet->m_deviceAPI->getHardwareId() != *query.getDeviceHwType())
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Device mismatch. Found %1 input").arg(deviceSet->m_deviceAPI->getHardwareId());
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource();
|
||||||
|
int res = source->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceSinkEngine) // Single Tx
|
||||||
|
{
|
||||||
|
if (query.getDirection() != 1)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Single Tx device found but other type of device requested");
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceAPI->getHardwareId() != *query.getDeviceHwType())
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Device mismatch. Found %1 output").arg(deviceSet->m_deviceAPI->getHardwareId());
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink();
|
||||||
|
int res = sink->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceMIMOEngine) // MIMO
|
||||||
|
{
|
||||||
|
if (query.getDirection() != 2)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("MIMO device found but other type of device requested");
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceAPI->getHardwareId() != *query.getDeviceHwType())
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("Device mismatch. Found %1 output").arg(deviceSet->m_deviceAPI->getHardwareId());
|
||||||
|
return 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO();
|
||||||
|
int res = mimo->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("DeviceSet error");
|
||||||
|
return 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int WebAPIAdapterSrv::devicesetDeviceSettingsPutPatch(
|
int WebAPIAdapterSrv::devicesetDeviceSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
bool force,
|
bool force,
|
||||||
@ -2377,6 +2482,160 @@ int WebAPIAdapterSrv::devicesetChannelReportGet(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WebAPIAdapterSrv::devicesetChannelActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
int channelIndex,
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error)
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
|
||||||
|
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainCore.m_deviceSets.size()))
|
||||||
|
{
|
||||||
|
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
|
||||||
|
|
||||||
|
if (deviceSet->m_deviceSourceEngine) // Single Rx
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI = deviceSet->m_deviceAPI->getChanelSinkAPIAt(channelIndex);
|
||||||
|
|
||||||
|
if (channelAPI == 0)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString channelType;
|
||||||
|
channelAPI->getIdentifier(channelType);
|
||||||
|
|
||||||
|
if (channelType == *query.getChannelType())
|
||||||
|
{
|
||||||
|
int res = channelAPI->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.")
|
||||||
|
.arg(*query.getChannelType())
|
||||||
|
.arg(channelIndex)
|
||||||
|
.arg(channelType);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceSinkEngine) // Single Tx
|
||||||
|
{
|
||||||
|
ChannelAPI *channelAPI = deviceSet->m_deviceAPI->getChanelSourceAPIAt(channelIndex);
|
||||||
|
|
||||||
|
if (channelAPI == 0)
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString channelType;
|
||||||
|
channelAPI->getIdentifier(channelType);
|
||||||
|
|
||||||
|
if (channelType == *query.getChannelType())
|
||||||
|
{
|
||||||
|
int res = channelAPI->webapiActionsPost(query, *error.getMessage());
|
||||||
|
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.")
|
||||||
|
.arg(*query.getChannelType())
|
||||||
|
.arg(channelIndex)
|
||||||
|
.arg(channelType);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deviceSet->m_deviceMIMOEngine) // MIMO
|
||||||
|
{
|
||||||
|
int nbSinkChannels = deviceSet->m_deviceAPI->getNbSinkChannels();
|
||||||
|
int nbSourceChannels = deviceSet->m_deviceAPI->getNbSourceChannels();
|
||||||
|
int nbMIMOChannels = deviceSet->m_deviceAPI->getNbMIMOChannels();
|
||||||
|
ChannelAPI *channelAPI = nullptr;
|
||||||
|
|
||||||
|
if ((query.getDirection() == 0) && (channelIndex < nbSinkChannels))
|
||||||
|
{
|
||||||
|
channelAPI = deviceSet->m_deviceAPI->getChanelSinkAPIAt(channelIndex);
|
||||||
|
}
|
||||||
|
else if ((query.getDirection() == 1) && (channelIndex < nbSinkChannels + nbSourceChannels))
|
||||||
|
{
|
||||||
|
channelAPI = deviceSet->m_deviceAPI->getChanelSourceAPIAt(channelIndex - nbSinkChannels);
|
||||||
|
}
|
||||||
|
else if ((query.getDirection() == 2) && (channelIndex < nbSinkChannels + nbSourceChannels + nbMIMOChannels))
|
||||||
|
{
|
||||||
|
channelAPI = deviceSet->m_deviceAPI->getMIMOChannelAPIAt(channelIndex - nbSinkChannels - nbSourceChannels);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("here is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channelAPI)
|
||||||
|
{
|
||||||
|
QString channelType;
|
||||||
|
channelAPI->getIdentifier(channelType);
|
||||||
|
|
||||||
|
if (channelType == *query.getChannelType())
|
||||||
|
{
|
||||||
|
int res = channelAPI->webapiActionsPost(query, *error.getMessage());
|
||||||
|
if (res/100 == 2)
|
||||||
|
{
|
||||||
|
response.init();
|
||||||
|
*response.getMessage() = QString("Message to post action was submitted successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.")
|
||||||
|
.arg(*query.getChannelType())
|
||||||
|
.arg(channelIndex)
|
||||||
|
.arg(channelType);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no channel with index %1").arg(channelIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("DeviceSet error");
|
||||||
|
return 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int WebAPIAdapterSrv::devicesetChannelSettingsPutPatch(
|
int WebAPIAdapterSrv::devicesetChannelSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
int channelIndex,
|
int channelIndex,
|
||||||
|
@ -233,6 +233,12 @@ public:
|
|||||||
SWGSDRangel::SWGDeviceSettings& response,
|
SWGSDRangel::SWGDeviceSettings& response,
|
||||||
SWGSDRangel::SWGErrorResponse& error);
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
|
virtual int devicesetDeviceActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
SWGSDRangel::SWGDeviceActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
virtual int devicesetDeviceSettingsPutPatch(
|
virtual int devicesetDeviceSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
bool force,
|
bool force,
|
||||||
@ -301,6 +307,13 @@ public:
|
|||||||
SWGSDRangel::SWGChannelSettings& response,
|
SWGSDRangel::SWGChannelSettings& response,
|
||||||
SWGSDRangel::SWGErrorResponse& error);
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
|
virtual int devicesetChannelActionsPost(
|
||||||
|
int deviceSetIndex,
|
||||||
|
int channelIndex,
|
||||||
|
SWGSDRangel::SWGChannelActions& query,
|
||||||
|
SWGSDRangel::SWGSuccessResponse& response,
|
||||||
|
SWGSDRangel::SWGErrorResponse& error);
|
||||||
|
|
||||||
virtual int devicesetChannelSettingsPutPatch(
|
virtual int devicesetChannelSettingsPutPatch(
|
||||||
int deviceSetIndex,
|
int deviceSetIndex,
|
||||||
int channelIndex,
|
int channelIndex,
|
||||||
|
Loading…
Reference in New Issue
Block a user