Web API: /sdrangel/devicesets (GET) implementation

This commit is contained in:
f4exb 2017-11-25 20:14:16 +01:00
parent 9fab034f14
commit c91918840e
9 changed files with 143 additions and 85 deletions

View File

@ -2599,7 +2599,7 @@ except ApiException as e:
<div class="pull-right"></div>
<div class="clearfix"></div>
<p></p>
<p class="marked">Remove last device set</p>
<p class="marked">Remove last device set except the first device</p>
<p></p>
<br />
<pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/sdrangel/devicesets</span></code></pre>
@ -2836,7 +2836,7 @@ except ApiException as e:
</div>
</div>
<h3> Status: 404 - No more device sets opened in this instance </h3>
<h3> Status: 404 - No more device sets to be deleted </h3>
<ul class="nav nav-tabs nav-tabs-examples" >
</ul>
@ -3207,7 +3207,7 @@ except ApiException as e:
<div class="pull-right"></div>
<div class="clearfix"></div>
<p></p>
<p class="marked">Add (append) a new device set</p>
<p class="marked">Add (append) a new device set with default values</p>
<p></p>
<br />
<pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/sdrangel/devicesets</span></code></pre>
@ -7638,7 +7638,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2017-11-25T19:38:10.216+01:00
Generated 2017-11-25T20:11:05.104+01:00
</div>
</div>
</div>

View File

@ -26,3 +26,4 @@ QString WebAPIAdapterInterface::instanceAudioURL = "/sdrangel/audio";
QString WebAPIAdapterInterface::instanceLocationURL = "/sdrangel/location";
QString WebAPIAdapterInterface::instanceDVSerialURL = "/sdrangel/dvserial";
QString WebAPIAdapterInterface::instancePresetURL = "/sdrangel/preset";
QString WebAPIAdapterInterface::instanceDeviceSetsURL = "/sdrangel/devicesets";

View File

@ -34,6 +34,7 @@ namespace Swagger
class SWGPresets;
class SWGPresetTransfer;
class SWGPresetIdentifier;
class SWGDeviceSetList;
class SWGErrorResponse;
}
@ -183,6 +184,15 @@ public:
Swagger::SWGErrorResponse& error __attribute__((unused)))
{ return 501; }
/**
* Handler of /sdrangel/preset (DELETE) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceDeviceSetsGet(
Swagger::SWGDeviceSetList& response __attribute__((unused)),
Swagger::SWGErrorResponse& error __attribute__((unused)))
{ return 501; }
static QString instanceSummaryURL;
static QString instanceDevicesURL;
static QString instanceChannelsURL;
@ -191,6 +201,7 @@ public:
static QString instanceLocationURL;
static QString instanceDVSerialURL;
static QString instancePresetURL;
static QString instanceDeviceSetsURL;
};

View File

@ -75,6 +75,8 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http
instanceDVSerialService(request, response);
} else if (path == WebAPIAdapterInterface::instancePresetURL) {
instancePresetService(request, response);
} else if (path == WebAPIAdapterInterface::instanceDeviceSetsURL) {
instanceDeviceSetsService(request, response);
}
else
{
@ -469,6 +471,29 @@ void WebAPIRequestMapper::instancePresetService(qtwebapp::HttpRequest& request,
}
}
void WebAPIRequestMapper::instanceDeviceSetsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
Swagger::SWGErrorResponse errorResponse;
if (request.getMethod() == "GET")
{
Swagger::SWGDeviceSetList normalResponse;
int status = m_adapter->instanceDeviceSetsGet(normalResponse, errorResponse);
response.setStatus(status);
if (status == 200) {
response.write(normalResponse.asJson().toUtf8());
} else {
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(405,"Invalid HTTP method");
response.write("Invalid HTTP method");
}
}
bool WebAPIRequestMapper::parseJsonBody(QString& jsonStr, qtwebapp::HttpResponse& response)
{
Swagger::SWGErrorResponse errorResponse;

View File

@ -53,6 +53,7 @@ private:
void instanceLocationService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceDVSerialService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instancePresetService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceDeviceSetsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
bool validatePresetTransfer(Swagger::SWGPresetTransfer& presetTransfer);
bool validatePresetIdentifer(Swagger::SWGPresetIdentifier& presetIdentifier);

View File

@ -70,87 +70,16 @@ int WebAPIAdapterGUI::instanceSummary(
Swagger::SWGLoggingInfo *logging = response.getLogging();
logging->init();
logging->setDumpToFile(m_mainWindow.m_logger->getUseFileLogger() ? 1 : 0);
if (logging->getDumpToFile()) {
m_mainWindow.m_logger->getLogFileName(*logging->getFileName());
m_mainWindow.m_logger->getFileMinMessageLevelStr(*logging->getFileLevel());
}
m_mainWindow.m_logger->getConsoleMinMessageLevelStr(*logging->getConsoleLevel());
Swagger::SWGDeviceSetList *deviceSetList = response.getDevicesetlist();
deviceSetList->init();
deviceSetList->setDevicesetcount((int) m_mainWindow.m_deviceUIs.size());
std::vector<DeviceUISet*>::const_iterator it = m_mainWindow.m_deviceUIs.begin();
for (int i = 0; it != m_mainWindow.m_deviceUIs.end(); ++it, i++)
{
QList<Swagger::SWGDeviceSet*> *deviceSet = deviceSetList->getDeviceSets();
deviceSet->append(new Swagger::SWGDeviceSet());
Swagger::SWGSamplingDevice *samplingDevice = deviceSet->back()->getSamplingDevice();
samplingDevice->init();
samplingDevice->setIndex(i);
samplingDevice->setTx((*it)->m_deviceSinkEngine != 0);
if ((*it)->m_deviceSinkEngine) // Tx data
{
*samplingDevice->getHwType() = (*it)->m_deviceSinkAPI->getHardwareId();
*samplingDevice->getSerial() = (*it)->m_deviceSinkAPI->getSampleSinkSerial();
samplingDevice->setSequence((*it)->m_deviceSinkAPI->getSampleSinkSequence());
samplingDevice->setNbStreams((*it)->m_deviceSinkAPI->getNbItems());
samplingDevice->setStreamIndex((*it)->m_deviceSinkAPI->getItemIndex());
(*it)->m_deviceSinkAPI->getDeviceEngineStateStr(*samplingDevice->getState());
DeviceSampleSink *sampleSink = (*it)->m_deviceSinkEngine->getSink();
if (sampleSink) {
samplingDevice->setCenterFrequency(sampleSink->getCenterFrequency());
samplingDevice->setBandwidth(sampleSink->getSampleRate());
}
deviceSet->back()->setChannelcount((*it)->m_deviceSinkAPI->getNbChannels());
QList<Swagger::SWGChannel*> *channels = deviceSet->back()->getChannels();
for (int i = 0; i < deviceSet->back()->getChannelcount(); i++)
{
channels->append(new Swagger::SWGChannel);
ChannelSourceAPI *channel = (*it)->m_deviceSinkAPI->getChanelAPIAt(i);
channels->back()->setDeltaFrequency(channel->getDeltaFrequency());
channels->back()->setIndex(channel->getIndexInDeviceSet());
channels->back()->setUid(channel->getUID());
channel->getIdentifier(*channels->back()->getId());
channel->getTitle(*channels->back()->getTitle());
}
}
if ((*it)->m_deviceSourceEngine) // Rx data
{
*samplingDevice->getHwType() = (*it)->m_deviceSourceAPI->getHardwareId();
*samplingDevice->getSerial() = (*it)->m_deviceSourceAPI->getSampleSourceSerial();
samplingDevice->setSequence((*it)->m_deviceSourceAPI->getSampleSourceSequence());
samplingDevice->setNbStreams((*it)->m_deviceSourceAPI->getNbItems());
samplingDevice->setStreamIndex((*it)->m_deviceSourceAPI->getItemIndex());
(*it)->m_deviceSourceAPI->getDeviceEngineStateStr(*samplingDevice->getState());
DeviceSampleSource *sampleSource = (*it)->m_deviceSourceEngine->getSource();
if (sampleSource) {
samplingDevice->setCenterFrequency(sampleSource->getCenterFrequency());
samplingDevice->setBandwidth(sampleSource->getSampleRate());
}
deviceSet->back()->setChannelcount((*it)->m_deviceSourceAPI->getNbChannels());
QList<Swagger::SWGChannel*> *channels = deviceSet->back()->getChannels();
for (int i = 0; i < deviceSet->back()->getChannelcount(); i++)
{
channels->append(new Swagger::SWGChannel);
ChannelSinkAPI *channel = (*it)->m_deviceSourceAPI->getChanelAPIAt(i);
channels->back()->setDeltaFrequency(channel->getDeltaFrequency());
channels->back()->setIndex(channel->getIndexInDeviceSet());
channels->back()->setUid(channel->getUID());
channel->getIdentifier(*channels->back()->getId());
channel->getTitle(*channels->back()->getTitle());
}
}
}
getDeviceSetList(deviceSetList);
return 200;
}
@ -614,6 +543,92 @@ int WebAPIAdapterGUI::instancePresetDelete(
return 200;
}
int WebAPIAdapterGUI::instanceDeviceSetsGet(
Swagger::SWGDeviceSetList& response,
Swagger::SWGErrorResponse& error __attribute__((unused)))
{
getDeviceSetList(&response);
return 200;
}
void WebAPIAdapterGUI::getDeviceSetList(Swagger::SWGDeviceSetList* deviceSetList)
{
deviceSetList->init();
deviceSetList->setDevicesetcount((int) m_mainWindow.m_deviceUIs.size());
std::vector<DeviceUISet*>::const_iterator it = m_mainWindow.m_deviceUIs.begin();
for (int i = 0; it != m_mainWindow.m_deviceUIs.end(); ++it, i++)
{
QList<Swagger::SWGDeviceSet*> *deviceSet = deviceSetList->getDeviceSets();
deviceSet->append(new Swagger::SWGDeviceSet());
Swagger::SWGSamplingDevice *samplingDevice = deviceSet->back()->getSamplingDevice();
samplingDevice->init();
samplingDevice->setIndex(i);
samplingDevice->setTx((*it)->m_deviceSinkEngine != 0);
if ((*it)->m_deviceSinkEngine) // Tx data
{
*samplingDevice->getHwType() = (*it)->m_deviceSinkAPI->getHardwareId();
*samplingDevice->getSerial() = (*it)->m_deviceSinkAPI->getSampleSinkSerial();
samplingDevice->setSequence((*it)->m_deviceSinkAPI->getSampleSinkSequence());
samplingDevice->setNbStreams((*it)->m_deviceSinkAPI->getNbItems());
samplingDevice->setStreamIndex((*it)->m_deviceSinkAPI->getItemIndex());
(*it)->m_deviceSinkAPI->getDeviceEngineStateStr(*samplingDevice->getState());
DeviceSampleSink *sampleSink = (*it)->m_deviceSinkEngine->getSink();
if (sampleSink) {
samplingDevice->setCenterFrequency(sampleSink->getCenterFrequency());
samplingDevice->setBandwidth(sampleSink->getSampleRate());
}
deviceSet->back()->setChannelcount((*it)->m_deviceSinkAPI->getNbChannels());
QList<Swagger::SWGChannel*> *channels = deviceSet->back()->getChannels();
for (int i = 0; i < deviceSet->back()->getChannelcount(); i++)
{
channels->append(new Swagger::SWGChannel);
ChannelSourceAPI *channel = (*it)->m_deviceSinkAPI->getChanelAPIAt(i);
channels->back()->setDeltaFrequency(channel->getDeltaFrequency());
channels->back()->setIndex(channel->getIndexInDeviceSet());
channels->back()->setUid(channel->getUID());
channel->getIdentifier(*channels->back()->getId());
channel->getTitle(*channels->back()->getTitle());
}
}
if ((*it)->m_deviceSourceEngine) // Rx data
{
*samplingDevice->getHwType() = (*it)->m_deviceSourceAPI->getHardwareId();
*samplingDevice->getSerial() = (*it)->m_deviceSourceAPI->getSampleSourceSerial();
samplingDevice->setSequence((*it)->m_deviceSourceAPI->getSampleSourceSequence());
samplingDevice->setNbStreams((*it)->m_deviceSourceAPI->getNbItems());
samplingDevice->setStreamIndex((*it)->m_deviceSourceAPI->getItemIndex());
(*it)->m_deviceSourceAPI->getDeviceEngineStateStr(*samplingDevice->getState());
DeviceSampleSource *sampleSource = (*it)->m_deviceSourceEngine->getSource();
if (sampleSource) {
samplingDevice->setCenterFrequency(sampleSource->getCenterFrequency());
samplingDevice->setBandwidth(sampleSource->getSampleRate());
}
deviceSet->back()->setChannelcount((*it)->m_deviceSourceAPI->getNbChannels());
QList<Swagger::SWGChannel*> *channels = deviceSet->back()->getChannels();
for (int i = 0; i < deviceSet->back()->getChannelcount(); i++)
{
channels->append(new Swagger::SWGChannel);
ChannelSinkAPI *channel = (*it)->m_deviceSourceAPI->getChanelAPIAt(i);
channels->back()->setDeltaFrequency(channel->getDeltaFrequency());
channels->back()->setIndex(channel->getIndexInDeviceSet());
channels->back()->setUid(channel->getUID());
channel->getIdentifier(*channels->back()->getId());
channel->getTitle(*channels->back()->getTitle());
}
}
}
}
QtMsgType WebAPIAdapterGUI::getMsgTypeFromString(const QString& msgTypeString)
{
if (msgTypeString == "debug") {

View File

@ -97,9 +97,14 @@ public:
Swagger::SWGPresetIdentifier& response,
Swagger::SWGErrorResponse& error);
virtual int instanceDeviceSetsGet(
Swagger::SWGDeviceSetList& response,
Swagger::SWGErrorResponse& error);
private:
MainWindow& m_mainWindow;
void getDeviceSetList(Swagger::SWGDeviceSetList* deviceSetList);
static QtMsgType getMsgTypeFromString(const QString& msgTypeString);
static void getMsgTypeString(const QtMsgType& msgType, QString& level);
};

View File

@ -392,7 +392,7 @@ paths:
"501":
description: Function not implemented
post:
description: Add (append) a new device set
description: Add (append) a new device set with default values
operationId: instanceDeviceSetsPost
parameters:
- name: tx
@ -412,7 +412,7 @@ paths:
"501":
description: Function not implemented
delete:
description: "Remove last device set"
description: Remove last device set except the first device
operationId: instanceDeviceSetsDelete
responses:
"200":
@ -420,7 +420,7 @@ paths:
schema:
$ref: "#/definitions/DeviceSetList"
"404":
description: "No more device sets opened in this instance"
description: "No more device sets to be deleted"
"500":
description: Error
schema:

View File

@ -2599,7 +2599,7 @@ except ApiException as e:
<div class="pull-right"></div>
<div class="clearfix"></div>
<p></p>
<p class="marked">Remove last device set</p>
<p class="marked">Remove last device set except the first device</p>
<p></p>
<br />
<pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/sdrangel/devicesets</span></code></pre>
@ -2836,7 +2836,7 @@ except ApiException as e:
</div>
</div>
<h3> Status: 404 - No more device sets opened in this instance </h3>
<h3> Status: 404 - No more device sets to be deleted </h3>
<ul class="nav nav-tabs nav-tabs-examples" >
</ul>
@ -3207,7 +3207,7 @@ except ApiException as e:
<div class="pull-right"></div>
<div class="clearfix"></div>
<p></p>
<p class="marked">Add (append) a new device set</p>
<p class="marked">Add (append) a new device set with default values</p>
<p></p>
<br />
<pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/sdrangel/devicesets</span></code></pre>
@ -7638,7 +7638,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2017-11-25T19:38:10.216+01:00
Generated 2017-11-25T20:11:05.104+01:00
</div>
</div>
</div>