diff --git a/plugins/channeltx/filesource/filesource.cpp b/plugins/channeltx/filesource/filesource.cpp
index ef0d55c91..693e724a2 100644
--- a/plugins/channeltx/filesource/filesource.cpp
+++ b/plugins/channeltx/filesource/filesource.cpp
@@ -379,6 +379,7 @@ int FileSource::webapiReportGet(
}
int FileSource::webapiActionsPost(
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
QString& errorMessage)
{
@@ -386,14 +387,24 @@ int FileSource::webapiActionsPost(
if (swgFileSourceActions)
{
- bool play = swgFileSourceActions->getPlay() != 0;
- FileSourceBaseband::MsgConfigureFileSourceWork *msg = FileSourceBaseband::MsgConfigureFileSourceWork::create(play);
- m_basebandSource->getInputMessageQueue()->push(msg);
+ if (channelActionsKeys.contains("play"))
+ {
+ bool play = swgFileSourceActions->getPlay() != 0;
+ FileSourceBaseband::MsgConfigureFileSourceWork *msg = FileSourceBaseband::MsgConfigureFileSourceWork::create(play);
+ m_basebandSource->getInputMessageQueue()->push(msg);
+
+ if (getMessageQueueToGUI())
+ {
+ MsgConfigureFileSourceWork *msgToGUI = MsgConfigureFileSourceWork::create(play);
+ getMessageQueueToGUI()->push(msgToGUI);
+ }
+ }
+
return 202;
}
else
{
- errorMessage = "Missing FileSourceActions key in JSON body";
+ errorMessage = "Missing FileSourceActions in query";
return 400;
}
}
diff --git a/plugins/channeltx/filesource/filesource.h b/plugins/channeltx/filesource/filesource.h
index b91eb7f55..09804499f 100644
--- a/plugins/channeltx/filesource/filesource.h
+++ b/plugins/channeltx/filesource/filesource.h
@@ -206,6 +206,7 @@ public:
QString& errorMessage);
virtual int webapiActionsPost(
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
QString& errorMessage);
diff --git a/plugins/channeltx/filesource/filesourcegui.cpp b/plugins/channeltx/filesource/filesourcegui.cpp
index 073c82803..8f866d0fc 100644
--- a/plugins/channeltx/filesource/filesourcegui.cpp
+++ b/plugins/channeltx/filesource/filesourcegui.cpp
@@ -96,7 +96,7 @@ bool FileSourceGUI::handleMessage(const Message& message)
displayRateAndShift();
return true;
}
- else if (FileSource::MsgConfigureFileSource::match(message))
+ else if (FileSource::MsgConfigureFileSource::match(message)) // API settings feedback
{
const FileSource::MsgConfigureFileSource& cfg = (FileSource::MsgConfigureFileSource&) message;
m_settings = cfg.getSettings();
@@ -149,6 +149,20 @@ bool FileSourceGUI::handleMessage(const Message& message)
return true;
}
+ else if (FileSource::MsgConfigureFileSourceWork::match(message)) // API action "play" feedback
+ {
+ const FileSource::MsgConfigureFileSourceWork& notif = (const FileSource::MsgConfigureFileSourceWork&) message;
+ bool play = notif.isWorking();
+ ui->play->blockSignals(true);
+ ui->navTime->blockSignals(true);
+ ui->play->setChecked(play);
+ ui->navTime->setEnabled(!play);
+ m_enableNavTime = !play;
+ ui->play->blockSignals(false);
+ ui->navTime->blockSignals(false);
+
+ return true;
+ }
else
{
return false;
diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
index 1d8cc286f..842f061cf 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
+++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
@@ -165,6 +165,23 @@ bool RTLSDRGui::handleMessage(const Message& message)
return true;
}
+ else if (RTLSDRInput::MsgFileRecord::match(message)) // API action "record" feedback
+ {
+ const RTLSDRInput::MsgFileRecord& notif = (const RTLSDRInput::MsgFileRecord&) message;
+ bool record = notif.getStartStop();
+
+ ui->record->blockSignals(true);
+ ui->record->setChecked(record);
+
+ if (record) {
+ ui->record->setStyleSheet("QToolButton { background-color : red; }");
+ } else {
+ ui->record->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
+ }
+
+ ui->record->blockSignals(false);
+ return true;
+ }
else
{
return false;
diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp
index 7a1f485ba..71552fc94 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp
+++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp
@@ -757,6 +757,7 @@ int RTLSDRInput::webapiReportGet(
}
int RTLSDRInput::webapiActionsPost(
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& query,
QString& errorMessage)
{
@@ -764,14 +765,24 @@ int RTLSDRInput::webapiActionsPost(
if (swgRtlSdrActions)
{
- bool record = swgRtlSdrActions->getRecord() != 0;
- MsgFileRecord *msg = MsgFileRecord::create(record);
- getInputMessageQueue()->push(msg);
+ if (deviceActionsKeys.contains("record"))
+ {
+ bool record = swgRtlSdrActions->getRecord() != 0;
+ MsgFileRecord *msg = MsgFileRecord::create(record);
+ getInputMessageQueue()->push(msg);
+
+ if (getMessageQueueToGUI())
+ {
+ MsgFileRecord *msgToGUI = MsgFileRecord::create(record);
+ getMessageQueueToGUI()->push(msgToGUI);
+ }
+ }
+
return 202;
}
else
{
- errorMessage = "Missing RtlSdrActions key in JSON body";
+ errorMessage = "Missing RtlSdrActions in query";
return 400;
}
}
diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h
index c3135c9cc..7beb9da88 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrinput.h
+++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h
@@ -132,6 +132,7 @@ public:
QString& errorMessage);
virtual int webapiActionsPost(
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& actions,
QString& errorMessage);
diff --git a/sdrbase/channel/channelapi.h b/sdrbase/channel/channelapi.h
index e2e995a38..c47b98228 100644
--- a/sdrbase/channel/channelapi.h
+++ b/sdrbase/channel/channelapi.h
@@ -98,10 +98,12 @@ public:
* API adapter for the channel actions POST requests
*/
virtual int webapiActionsPost(
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
QString& errorMessage)
{
(void) query;
+ (void) channelActionsKeys;
errorMessage = "Not implemented"; return 501;
}
diff --git a/sdrbase/dsp/devicesamplemimo.h b/sdrbase/dsp/devicesamplemimo.h
index 087494e89..260d93f63 100644
--- a/sdrbase/dsp/devicesamplemimo.h
+++ b/sdrbase/dsp/devicesamplemimo.h
@@ -137,9 +137,11 @@ public:
}
virtual int webapiActionsPost(
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& actions,
QString& errorMessage)
{
+ (void) deviceActionsKeys;
(void) actions;
errorMessage = "Not implemented";
return 501;
diff --git a/sdrbase/dsp/devicesamplesink.h b/sdrbase/dsp/devicesamplesink.h
index 7b09a51d6..3af929ff1 100644
--- a/sdrbase/dsp/devicesamplesink.h
+++ b/sdrbase/dsp/devicesamplesink.h
@@ -113,9 +113,11 @@ public:
}
virtual int webapiActionsPost(
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& actions,
QString& errorMessage)
{
+ (void) deviceActionsKeys;
(void) actions;
errorMessage = "Not implemented";
return 501;
diff --git a/sdrbase/dsp/devicesamplesource.h b/sdrbase/dsp/devicesamplesource.h
index dfcc00bf0..1ec089687 100644
--- a/sdrbase/dsp/devicesamplesource.h
+++ b/sdrbase/dsp/devicesamplesource.h
@@ -119,9 +119,11 @@ public:
}
virtual int webapiActionsPost(
+ const QStringList& deviceSettingsKeys,
SWGSDRangel::SWGDeviceActions& actions,
QString& errorMessage)
{
+ (void) deviceSettingsKeys;
(void) actions;
errorMessage = "Not implemented";
return 501;
diff --git a/sdrbase/resources/webapi.qrc b/sdrbase/resources/webapi.qrc
index 399ff0a6d..ea0058c8e 100644
--- a/sdrbase/resources/webapi.qrc
+++ b/sdrbase/resources/webapi.qrc
@@ -18,6 +18,7 @@
webapi/doc/swagger/include/CWKeyer.yaml
webapi/doc/swagger/include/DATVDemod.yaml
webapi/doc/swagger/include/DSDDemod.yaml
+ webapi/doc/swagger/include/DeviceActions.yaml
webapi/doc/swagger/include/DeviceSettings.yaml
webapi/doc/swagger/include/FCDPro.yaml
webapi/doc/swagger/include/FCDProPlus.yaml
diff --git a/sdrbase/webapi/webapiadapterinterface.h b/sdrbase/webapi/webapiadapterinterface.h
index eacb89fce..c5f409e84 100644
--- a/sdrbase/webapi/webapiadapterinterface.h
+++ b/sdrbase/webapi/webapiadapterinterface.h
@@ -884,12 +884,14 @@ public:
*/
virtual int devicesetDeviceActionsPost(
int deviceSetIndex,
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error
)
{
(void) deviceSetIndex;
+ (void) deviceActionsKeys;
(void) query;
(void) response;
error.init();
@@ -1000,12 +1002,14 @@ public:
virtual int devicesetChannelActionsPost(
int deviceSetIndex,
int channelIndex,
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
{
(void) deviceSetIndex;
(void) channelIndex;
+ (void) channelActionsKeys;
(void) query;
(void) response;
error.init();
diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp
index ff7a0b973..28c16d2ae 100644
--- a/sdrbase/webapi/webapirequestmapper.cpp
+++ b/sdrbase/webapi/webapirequestmapper.cpp
@@ -153,6 +153,10 @@ const QMap WebAPIRequestMapper::m_channelTypeToSettingsKey = {
{"WFMMod", "WFMModSettings"}
};
+const QMap WebAPIRequestMapper::m_channelTypeToActionsKey = {
+ {"FileSource", "FileSourceActions"}
+};
+
const QMap WebAPIRequestMapper::m_sourceDeviceHwIdToSettingsKey = {
{"Airspy", "airspySettings"},
{"AirspyHF", "airspyHFSettings"},
@@ -175,6 +179,10 @@ const QMap WebAPIRequestMapper::m_sourceDeviceHwIdToSettingsKe
{"XTRX", "XtrxInputSettings"}
};
+const QMap WebAPIRequestMapper::m_sourceDeviceHwIdToActionsKey = {
+ {"RTLSDR", "rtlSdrActions"}
+};
+
const QMap WebAPIRequestMapper::m_sinkDeviceHwIdToSettingsKey = {
{"BladeRF1", "bladeRF1OutputSettings"},
{"BladeRF2", "bladeRF2OutputSettings"},
@@ -184,7 +192,23 @@ const QMap WebAPIRequestMapper::m_sinkDeviceHwIdToSettingsKey
{"PlutoSDR", "plutoSdrOutputSettings"},
{"RemoteOutput", "remoteOutputSettings"},
{"SoapySDR", "soapySDROutputSettings"},
+<<<<<<< ours
{"XTRX", "XtrxOutputSettings"}
+=======
+ {"XTRX", "xtrxOutputSettings"}
+};
+
+const QMap WebAPIRequestMapper::m_sinkDeviceHwIdToActionsKey = {
+};
+
+const QMap WebAPIRequestMapper::m_mimoDeviceHwIdToSettingsKey= {
+ {"BladeRF2", "bladeRF2MIMOSettings"},
+ {"TestMI", "testMISettings"},
+ {"TestMOSync", "testMOSyncSettings"}
+>>>>>>> theirs
+};
+
+const QMap WebAPIRequestMapper::m_mimoDeviceHwIdToActionsKey= {
};
WebAPIRequestMapper::WebAPIRequestMapper(QObject* parent) :
@@ -311,6 +335,8 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http
devicesetChannelSettingsService(std::string(desc_match[1]), std::string(desc_match[2]), request, response);
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelReportURLRe)) {
devicesetChannelReportService(std::string(desc_match[1]), std::string(desc_match[2]), request, response);
+ } else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelActionsURLRe)) {
+ devicesetChannelActionsService(std::string(desc_match[1]), std::string(desc_match[2]), request, response);
}
else // serve static documentation pages
{
@@ -1922,9 +1948,11 @@ void WebAPIRequestMapper::devicesetDeviceActionsService(const std::string& index
response.setHeader("Content-Type", "application/json");
response.setHeader("Access-Control-Allow-Origin", "*");
- if (request.getMethod() == "POST")
+ try
{
- try
+ int deviceSetIndex = boost::lexical_cast(indexStr);
+
+ if (request.getMethod() == "POST")
{
QString jsonStr = request.getBody();
QJsonObject jsonObject;
@@ -1933,19 +1961,17 @@ void WebAPIRequestMapper::devicesetDeviceActionsService(const std::string& index
{
SWGSDRangel::SWGDeviceActions query;
SWGSDRangel::SWGSuccessResponse normalResponse;
- int deviceSetIndex = boost::lexical_cast(indexStr);
resetDeviceActions(query);
+ QStringList deviceActionsKeys;
- if (jsonObject.contains("direction")) {
- query.setDirection(jsonObject["direction"].toInt());
- } else {
- query.setDirection(0); // assume Rx
- }
-
- if (jsonObject.contains("deviceHwType") && jsonObject["deviceHwType"].isString())
+ if (validateDeviceActions(query, jsonObject, deviceActionsKeys))
{
- query.setDeviceHwType(new QString(jsonObject["deviceHwType"].toString()));
- int status = m_adapter->devicesetDeviceActionsPost(deviceSetIndex, query, normalResponse, errorResponse);
+ int status = m_adapter->devicesetDeviceActionsPost(
+ deviceSetIndex,
+ deviceActionsKeys,
+ query,
+ normalResponse,
+ errorResponse);
response.setStatus(status);
if (status/100 == 2) {
@@ -1970,19 +1996,19 @@ void WebAPIRequestMapper::devicesetDeviceActionsService(const std::string& index
response.write(errorResponse.asJson().toUtf8());
}
}
- catch (const boost::bad_lexical_cast &e)
+ else
{
+ response.setStatus(405,"Invalid HTTP method");
errorResponse.init();
- *errorResponse.getMessage() = "Wrong integer conversion on device set index";
- response.setStatus(400,"Invalid data");
+ *errorResponse.getMessage() = "Invalid HTTP method";
response.write(errorResponse.asJson().toUtf8());
}
}
- else
+ catch(const boost::bad_lexical_cast &e)
{
- response.setStatus(405,"Invalid HTTP method");
errorResponse.init();
- *errorResponse.getMessage() = "Invalid HTTP method";
+ *errorResponse.getMessage() = "Wrong integer conversion on device set index";
+ response.setStatus(400,"Invalid data");
response.write(errorResponse.asJson().toUtf8());
}
}
@@ -2281,7 +2307,7 @@ void WebAPIRequestMapper::devicesetChannelReportService(
}
}
-void WebAPIRequestMapper::devicesetChannelActtionsService(
+void WebAPIRequestMapper::devicesetChannelActionsService(
const std::string& deviceSetIndexStr,
const std::string& channelIndexStr,
qtwebapp::HttpRequest& request,
@@ -2306,17 +2332,17 @@ void WebAPIRequestMapper::devicesetChannelActtionsService(
SWGSDRangel::SWGChannelActions query;
SWGSDRangel::SWGSuccessResponse normalResponse;
resetChannelActions(query);
+ QStringList channelActionsKeys;
- if (jsonObject.contains("direction")) {
- query.setDirection(jsonObject["direction"].toInt());
- } else {
- query.setDirection(0); // assume Rx
- }
-
- if (jsonObject.contains("channelType") && jsonObject["channelType"].isString())
+ if (validateChannelActions(query, jsonObject, channelActionsKeys))
{
- query.setChannelType(new QString(jsonObject["channelType"].toString()));
- int status = m_adapter->devicesetChannelActionsPost(deviceSetIndex, channelIndex, query, normalResponse, errorResponse);
+ int status = m_adapter->devicesetChannelActionsPost(
+ deviceSetIndex,
+ channelIndex,
+ channelActionsKeys,
+ query,
+ normalResponse,
+ errorResponse);
response.setStatus(status);
if (status/100 == 2) {
@@ -2523,7 +2549,59 @@ bool WebAPIRequestMapper::validateDeviceSettings(
return false;
}
- return getDevice(deviceSettingsKey, &deviceSettings, jsonObject, deviceSettingsKeys);
+ return getDeviceSettings(deviceSettingsKey, &deviceSettings, jsonObject, deviceSettingsKeys);
+}
+
+bool WebAPIRequestMapper::validateDeviceActions(
+ SWGSDRangel::SWGDeviceActions& deviceActions,
+ QJsonObject& jsonObject,
+ QStringList& deviceActionsKeys)
+{
+ if (jsonObject.contains("direction")) {
+ deviceActions.setDirection(jsonObject["direction"].toInt());
+ } else {
+ deviceActions.setDirection(0); // assume single Rx
+ }
+
+ if (jsonObject.contains("deviceHwType") && jsonObject["deviceHwType"].isString()) {
+ deviceActions.setDeviceHwType(new QString(jsonObject["deviceHwType"].toString()));
+ } else {
+ return false;
+ }
+
+ QString *deviceHwType = deviceActions.getDeviceHwType();
+ QString deviceActionsKey;
+
+ if (deviceActions.getDirection() == 0) // source
+ {
+ if (m_sourceDeviceHwIdToSettingsKey.contains(*deviceHwType)) {
+ deviceActionsKey = m_sourceDeviceHwIdToActionsKey[*deviceHwType];
+ } else {
+ return false;
+ }
+ }
+ else if (deviceActions.getDirection() == 1) // sink
+ {
+ if (m_sinkDeviceHwIdToSettingsKey.contains(*deviceHwType)) {
+ deviceActionsKey = m_sinkDeviceHwIdToActionsKey[*deviceHwType];
+ } else {
+ return false;
+ }
+ }
+ else if (deviceActions.getDirection() == 2) // MIMO
+ {
+ if (m_mimoDeviceHwIdToSettingsKey.contains(*deviceHwType)) {
+ deviceActionsKey = m_mimoDeviceHwIdToActionsKey[*deviceHwType];
+ } else {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+
+ return getDeviceActions(deviceActionsKey, &deviceActions, jsonObject, deviceActionsKeys);
}
bool WebAPIRequestMapper::validateChannelSettings(
@@ -2546,7 +2624,33 @@ bool WebAPIRequestMapper::validateChannelSettings(
QString *channelType = channelSettings.getChannelType();
if (m_channelTypeToSettingsKey.contains(*channelType)) {
- return getChannel(m_channelTypeToSettingsKey[*channelType], &channelSettings, jsonObject, channelSettingsKeys);
+ return getChannelSettings(m_channelTypeToSettingsKey[*channelType], &channelSettings, jsonObject, channelSettingsKeys);
+ } else {
+ return false;
+ }
+}
+
+bool WebAPIRequestMapper::validateChannelActions(
+ SWGSDRangel::SWGChannelActions& channelActions,
+ QJsonObject& jsonObject,
+ QStringList& channelActionsKeys)
+{
+ if (jsonObject.contains("direction")) {
+ channelActions.setDirection(jsonObject["direction"].toInt());
+ } else {
+ channelActions.setDirection(0); // assume single Rx
+ }
+
+ if (jsonObject.contains("channelType") && jsonObject["channelType"].isString()) {
+ channelActions.setChannelType(new QString(jsonObject["channelType"].toString()));
+ } else {
+ return false;
+ }
+
+ QString *channelType = channelActions.getChannelType();
+
+ if (m_channelTypeToActionsKey.contains(*channelType)) {
+ return getChannelActions(m_channelTypeToActionsKey[*channelType], &channelActions, jsonObject, channelActionsKeys);
} else {
return false;
}
@@ -2936,7 +3040,7 @@ bool WebAPIRequestMapper::appendPresetChannelKeys(
{
SWGSDRangel::SWGChannelSettings *channelSettings = new SWGSDRangel::SWGChannelSettings();
channel->setConfig(channelSettings);
- return getChannel(m_channelURIToSettingsKey[*channelURI], channelSettings, channelSettingsJson["config"].toObject(), channelKeys.m_channelKeys);
+ return getChannelSettings(m_channelURIToSettingsKey[*channelURI], channelSettings, channelSettingsJson["config"].toObject(), channelKeys.m_channelKeys);
}
else
{
@@ -2949,7 +3053,7 @@ bool WebAPIRequestMapper::appendPresetChannelKeys(
}
}
-bool WebAPIRequestMapper::getChannel(
+bool WebAPIRequestMapper::getChannelSettings(
const QString& channelSettingsKey,
SWGSDRangel::SWGChannelSettings *channelSettings,
const QJsonObject& channelSettingsJson,
@@ -3102,6 +3206,38 @@ bool WebAPIRequestMapper::getChannel(
}
}
+bool WebAPIRequestMapper::getChannelActions(
+ const QString& channelActionsKey,
+ SWGSDRangel::SWGChannelActions *channelActions,
+ const QJsonObject& channelActionsJson,
+ QStringList& channelActionsKeys
+)
+{
+ QStringList channelKeys = channelActionsJson.keys();
+
+ if (channelKeys.contains(channelActionsKey) && channelActionsJson[channelActionsKey].isObject())
+ {
+ QJsonObject actionsJsonObject = channelActionsJson[channelActionsKey].toObject();
+ channelActionsKeys = actionsJsonObject.keys();
+
+ if (channelActionsKey == "FileSourceActions")
+ {
+ channelActions->setFileSourceActions(new SWGSDRangel::SWGFileSourceActions());
+ channelActions->getFileSourceActions()->fromJsonObject(actionsJsonObject);
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
bool WebAPIRequestMapper::appendPresetDeviceKeys(
SWGSDRangel::SWGDeviceConfig *device,
const QJsonObject& deviceSettngsJson,
@@ -3130,7 +3266,7 @@ bool WebAPIRequestMapper::appendPresetDeviceKeys(
{
SWGSDRangel::SWGDeviceSettings *deviceSettings = new SWGSDRangel::SWGDeviceSettings();
device->setConfig(deviceSettings);
- return getDevice(m_deviceIdToSettingsKey[*deviceId], deviceSettings, deviceSettngsJson["config"].toObject(), devicelKeys.m_deviceKeys);
+ return getDeviceSettings(m_deviceIdToSettingsKey[*deviceId], deviceSettings, deviceSettngsJson["config"].toObject(), devicelKeys.m_deviceKeys);
}
else
{
@@ -3143,7 +3279,7 @@ bool WebAPIRequestMapper::appendPresetDeviceKeys(
}
}
-bool WebAPIRequestMapper::getDevice(
+bool WebAPIRequestMapper::getDeviceSettings(
const QString& deviceSettingsKey,
SWGSDRangel::SWGDeviceSettings *deviceSettings,
const QJsonObject& deviceSettingsJson,
@@ -3315,6 +3451,39 @@ bool WebAPIRequestMapper::getDevice(
}
+bool WebAPIRequestMapper::getDeviceActions(
+ const QString& deviceActionsKey,
+ SWGSDRangel::SWGDeviceActions *deviceActions,
+ const QJsonObject& deviceActionsJson,
+ QStringList& deviceActionsKeys
+)
+{
+ QStringList deviceKeys = deviceActionsJson.keys();
+
+ if (deviceKeys.contains(deviceActionsKey) && deviceActionsJson[deviceActionsKey].isObject())
+ {
+ QJsonObject actionsJsonObject = deviceActionsJson[deviceActionsKey].toObject();
+ deviceActionsKeys = actionsJsonObject.keys();
+
+ if (deviceActionsKey == "rtlSdrActions")
+ {
+ deviceActions->setRtlSdrActions(new SWGSDRangel::SWGRtlSdrActions());
+ deviceActions->getRtlSdrActions()->fromJsonObject(actionsJsonObject);
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+
+}
+
void WebAPIRequestMapper::appendSettingsSubKeys(
const QJsonObject& parentSettingsJsonObject,
QJsonObject& childSettingsJsonObject,
diff --git a/sdrbase/webapi/webapirequestmapper.h b/sdrbase/webapi/webapirequestmapper.h
index c61bfe2ba..e2375ed7d 100644
--- a/sdrbase/webapi/webapirequestmapper.h
+++ b/sdrbase/webapi/webapirequestmapper.h
@@ -88,14 +88,16 @@ private:
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 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);
+ void devicesetChannelActionsService(const std::string& deviceSetIndexStr, const std::string& channelIndexStr, qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
bool validatePresetTransfer(SWGSDRangel::SWGPresetTransfer& presetTransfer);
bool validatePresetIdentifer(SWGSDRangel::SWGPresetIdentifier& presetIdentifier);
bool validatePresetExport(SWGSDRangel::SWGPresetExport& presetExport);
bool validateDeviceListItem(SWGSDRangel::SWGDeviceListItem& deviceListItem, QJsonObject& jsonObject);
bool validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings, QJsonObject& jsonObject, QStringList& deviceSettingsKeys);
- bool validateChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings, QJsonObject& jsonObject, QStringList& channelSettingsKeys);
+ bool validateDeviceActions(SWGSDRangel::SWGDeviceActions& deviceActions, QJsonObject& jsonObject, QStringList& deviceActionsKeys);
+ bool validateChannelSettings(SWGSDRangel::SWGChannelSettings& channelSettings, QJsonObject& jsonObject, QStringList& channelSettingsKeys);
+ bool validateChannelActions(SWGSDRangel::SWGChannelActions& channelActions, QJsonObject& jsonObject, QStringList& channelActionsKeys);
bool validateAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice, QJsonObject& jsonObject, QStringList& audioInputDeviceKeys);
bool validateAudioOutputDevice(SWGSDRangel::SWGAudioOutputDevice& audioOutputDevice, QJsonObject& jsonObject, QStringList& audioOutputDeviceKeys);
bool validateAMBEDevices(SWGSDRangel::SWGAMBEDevices& ambeDevices, QJsonObject& jsonObject);
@@ -113,24 +115,38 @@ private:
WebAPIAdapterInterface::ChannelKeys& channelKeys
);
- bool getChannel(
+ bool getChannelSettings(
const QString& channelSettingsKey,
SWGSDRangel::SWGChannelSettings *channelSettings,
const QJsonObject& channelSettingsJson,
QStringList& channelSettingsKeys
);
+ bool getChannelActions(
+ const QString& channelActionsKey,
+ SWGSDRangel::SWGChannelActions *channelActions,
+ const QJsonObject& channelActionsJson,
+ QStringList& channelSettingsKeys
+ );
+
bool appendPresetDeviceKeys(
SWGSDRangel::SWGDeviceConfig *device,
const QJsonObject& deviceSettngsJson,
WebAPIAdapterInterface::DeviceKeys& devicelKeys
);
- bool getDevice(
+ bool getDeviceSettings(
const QString& deviceSettingsKey,
SWGSDRangel::SWGDeviceSettings *deviceSettings,
const QJsonObject& deviceSettingsJson,
- QStringList& deviceSettingsKeys
+ QStringList& deviceActionsKeys
+ );
+
+ bool getDeviceActions(
+ const QString& deviceActionsKey,
+ SWGSDRangel::SWGDeviceActions *deviceActions,
+ const QJsonObject& deviceActionsJson,
+ QStringList& deviceActionsKeys
);
void appendSettingsSubKeys(
@@ -173,6 +189,14 @@ private:
static const QMap m_channelTypeToSettingsKey;
static const QMap m_sourceDeviceHwIdToSettingsKey;
static const QMap m_sinkDeviceHwIdToSettingsKey;
+<<<<<<< ours
+=======
+ static const QMap m_mimoDeviceHwIdToSettingsKey;
+ static const QMap m_channelTypeToActionsKey;
+ static const QMap m_sourceDeviceHwIdToActionsKey;
+ static const QMap m_sinkDeviceHwIdToActionsKey;
+ static const QMap m_mimoDeviceHwIdToActionsKey;
+>>>>>>> theirs
};
#endif /* SDRBASE_WEBAPI_WEBAPIREQUESTMAPPER_H_ */
diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp
index 2b3b337f8..67adb1a19 100644
--- a/sdrgui/webapi/webapiadaptergui.cpp
+++ b/sdrgui/webapi/webapiadaptergui.cpp
@@ -1569,6 +1569,7 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsGet(
int WebAPIAdapterGUI::devicesetDeviceActionsPost(
int deviceSetIndex,
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
@@ -1594,7 +1595,7 @@ int WebAPIAdapterGUI::devicesetDeviceActionsPost(
else
{
DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource();
- int res = source->webapiActionsPost(query, *error.getMessage());
+ int res = source->webapiActionsPost(deviceActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -1620,7 +1621,7 @@ int WebAPIAdapterGUI::devicesetDeviceActionsPost(
else
{
DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink();
- int res = sink->webapiActionsPost(query, *error.getMessage());
+ int res = sink->webapiActionsPost(deviceActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -1646,7 +1647,7 @@ int WebAPIAdapterGUI::devicesetDeviceActionsPost(
else
{
DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO();
- int res = mimo->webapiActionsPost(query, *error.getMessage());
+ int res = mimo->webapiActionsPost(deviceActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -2389,6 +2390,7 @@ int WebAPIAdapterGUI::devicesetChannelReportGet(
int WebAPIAdapterGUI::devicesetChannelActionsPost(
int deviceSetIndex,
int channelIndex,
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
@@ -2415,7 +2417,7 @@ int WebAPIAdapterGUI::devicesetChannelActionsPost(
if (channelType == *query.getChannelType())
{
- int res = channelAPI->webapiActionsPost(query, *error.getMessage());
+ int res = channelAPI->webapiActionsPost(channelActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -2451,7 +2453,7 @@ int WebAPIAdapterGUI::devicesetChannelActionsPost(
if (channelType == *query.getChannelType())
{
- int res = channelAPI->webapiActionsPost(query, *error.getMessage());
+ int res = channelAPI->webapiActionsPost(channelActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -2503,7 +2505,7 @@ int WebAPIAdapterGUI::devicesetChannelActionsPost(
if (channelType == *query.getChannelType())
{
- int res = channelAPI->webapiActionsPost(query, *error.getMessage());
+ int res = channelAPI->webapiActionsPost(channelActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
response.init();
diff --git a/sdrgui/webapi/webapiadaptergui.h b/sdrgui/webapi/webapiadaptergui.h
index de9f4fbc8..52568f68d 100644
--- a/sdrgui/webapi/webapiadaptergui.h
+++ b/sdrgui/webapi/webapiadaptergui.h
@@ -225,6 +225,7 @@ public:
virtual int devicesetDeviceActionsPost(
int deviceSetIndex,
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
@@ -300,6 +301,7 @@ public:
virtual int devicesetChannelActionsPost(
int deviceSetIndex,
int channelIndex,
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp
index 1953c4f58..b64e0d271 100644
--- a/sdrsrv/webapi/webapiadaptersrv.cpp
+++ b/sdrsrv/webapi/webapiadaptersrv.cpp
@@ -1666,6 +1666,7 @@ int WebAPIAdapterSrv::devicesetDeviceSettingsGet(
int WebAPIAdapterSrv::devicesetDeviceActionsPost(
int deviceSetIndex,
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
@@ -1691,7 +1692,7 @@ int WebAPIAdapterSrv::devicesetDeviceActionsPost(
else
{
DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource();
- int res = source->webapiActionsPost(query, *error.getMessage());
+ int res = source->webapiActionsPost(deviceActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -1717,7 +1718,7 @@ int WebAPIAdapterSrv::devicesetDeviceActionsPost(
else
{
DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink();
- int res = sink->webapiActionsPost(query, *error.getMessage());
+ int res = sink->webapiActionsPost(deviceActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -1743,7 +1744,7 @@ int WebAPIAdapterSrv::devicesetDeviceActionsPost(
else
{
DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO();
- int res = mimo->webapiActionsPost(query, *error.getMessage());
+ int res = mimo->webapiActionsPost(deviceActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -2485,6 +2486,7 @@ int WebAPIAdapterSrv::devicesetChannelReportGet(
int WebAPIAdapterSrv::devicesetChannelActionsPost(
int deviceSetIndex,
int channelIndex,
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
@@ -2511,7 +2513,7 @@ int WebAPIAdapterSrv::devicesetChannelActionsPost(
if (channelType == *query.getChannelType())
{
- int res = channelAPI->webapiActionsPost(query, *error.getMessage());
+ int res = channelAPI->webapiActionsPost(channelActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -2547,7 +2549,7 @@ int WebAPIAdapterSrv::devicesetChannelActionsPost(
if (channelType == *query.getChannelType())
{
- int res = channelAPI->webapiActionsPost(query, *error.getMessage());
+ int res = channelAPI->webapiActionsPost(channelActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
@@ -2599,7 +2601,7 @@ int WebAPIAdapterSrv::devicesetChannelActionsPost(
if (channelType == *query.getChannelType())
{
- int res = channelAPI->webapiActionsPost(query, *error.getMessage());
+ int res = channelAPI->webapiActionsPost(channelActionsKeys, query, *error.getMessage());
if (res/100 == 2)
{
response.init();
diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h
index cf2d743db..a70f4bf27 100644
--- a/sdrsrv/webapi/webapiadaptersrv.h
+++ b/sdrsrv/webapi/webapiadaptersrv.h
@@ -235,6 +235,7 @@ public:
virtual int devicesetDeviceActionsPost(
int deviceSetIndex,
+ const QStringList& deviceActionsKeys,
SWGSDRangel::SWGDeviceActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
@@ -310,6 +311,7 @@ public:
virtual int devicesetChannelActionsPost(
int deviceSetIndex,
int channelIndex,
+ const QStringList& channelActionsKeys,
SWGSDRangel::SWGChannelActions& query,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);