Multiple audio support: Web API: implemented all interfaces to AudioDeviceManager

pull/162/head
f4exb 2018-03-29 01:43:31 +02:00
rodzic 249ea735c8
commit b7065c8c83
14 zmienionych plików z 4193 dodań i 360 usunięć

Wyświetl plik

@ -182,11 +182,12 @@ paths:
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/input/set:
/sdrangel/audio/input/parameters:
x-swagger-router-controller: instance
patch:
description: Set audio input device paramaters
operationId: instanceAudioInputSetPatch
operationId: instanceAudioInputPatch
tags:
- Instance
consumes:
@ -211,12 +212,57 @@ paths:
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
delete:
description: Delete audio input device paramaters and return to defaults
operationId: instanceAudioInputDelete
tags:
- Instance
consumes:
- application/json
parameters:
- name: body
in: body
description: Audio input parameters. Index is used to identify the device.
required: true
schema:
$ref: "#/definitions/AudioInputDevice"
responses:
"200":
description: Success. Returns default parameters.
schema:
$ref: "#/definitions/AudioInputDevice"
"404":
description: Audio input device not found
schema:
$ref: "#/definitions/ErrorResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/output/set:
/sdrangel/audio/input/cleanup:
x-swagger-router-controller: instance
patch:
description: Remove registered parameters for devices not in list of available input devices for this instance
operationId: instanceAudioInputCleanupPatch
tags:
- Instance
responses:
"200":
description: Success.
schema:
$ref: "#/definitions/SuccessResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/output/parameters:
x-swagger-router-controller: instance
patch:
description: Set audio output device parameters
operationId: instanceAudioOutputSetPatch
operationId: instanceAudioOutputPatch
tags:
- Instance
consumes:
@ -241,6 +287,50 @@ paths:
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
delete:
description: Delete audio output device paramaters and return to defaults
operationId: instanceAudioOutputDelete
tags:
- Instance
consumes:
- application/json
parameters:
- name: body
in: body
description: Audio output parameters. Index is used to identify the device.
required: true
schema:
$ref: "#/definitions/AudioOutputDevice"
responses:
"200":
description: Success. Returns actual data in particular the actual sample rate.
schema:
$ref: "#/definitions/AudioOutputDevice"
"404":
description: Audio output device not found
schema:
$ref: "#/definitions/ErrorResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/output/cleanup:
x-swagger-router-controller: instance
patch:
description: Remove registered parameters for devices not in list of available output devices for this instance
operationId: instanceAudioOutputCleanupPatch
tags:
- Instance
responses:
"200":
description: Success.
schema:
$ref: "#/definitions/SuccessResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/location:
x-swagger-router-controller: instance

Wyświetl plik

@ -23,10 +23,10 @@ QString WebAPIAdapterInterface::instanceDevicesURL = "/sdrangel/devices";
QString WebAPIAdapterInterface::instanceChannelsURL = "/sdrangel/channels";
QString WebAPIAdapterInterface::instanceLoggingURL = "/sdrangel/logging";
QString WebAPIAdapterInterface::instanceAudioURL = "/sdrangel/audio";
QString WebAPIAdapterInterface::instanceAudioInputSetURL = "/sdrangel/audio/input/set";
QString WebAPIAdapterInterface::instanceAudioOutputSetURL = "/sdrangel/audio/output/set";
QString WebAPIAdapterInterface::instanceAudioInputUnsetURL = "/sdrangel/audio/input/unset";
QString WebAPIAdapterInterface::instanceAudioOutputUnsetURL = "/sdrangel/audio/output/unset";
QString WebAPIAdapterInterface::instanceAudioInputParametersURL = "/sdrangel/audio/input/parameters";
QString WebAPIAdapterInterface::instanceAudioOutputParametersURL = "/sdrangel/audio/output/parameters";
QString WebAPIAdapterInterface::instanceAudioInputCleanupURL = "/sdrangel/audio/input/cleanup";
QString WebAPIAdapterInterface::instanceAudioOutputCleanupURL = "/sdrangel/audio/output/cleanup";
QString WebAPIAdapterInterface::instanceLocationURL = "/sdrangel/location";
QString WebAPIAdapterInterface::instanceDVSerialURL = "/sdrangel/dvserial";
QString WebAPIAdapterInterface::instancePresetsURL = "/sdrangel/presets";

Wyświetl plik

@ -153,7 +153,7 @@ public:
}
/**
* Handler of /sdrangel/audio/input (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* Handler of /sdrangel/audio/input/parameters (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceAudioInputPatch(
@ -167,7 +167,7 @@ public:
}
/**
* Handler of /sdrangel/audio/output (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* Handler of /sdrangel/audio/output/parameters (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceAudioOutputPatch(
@ -180,6 +180,58 @@ public:
return 501;
}
/**
* Handler of /sdrangel/audio/input/parameters (DELETE) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceAudioInputDelete(
SWGSDRangel::SWGAudioInputDevice& response __attribute__((unused)),
SWGSDRangel::SWGErrorResponse& error)
{
error.init();
*error.getMessage() = QString("Function not implemented");
return 501;
}
/**
* Handler of /sdrangel/audio/output/paramaters (DELETE) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceAudioOutputDelete(
SWGSDRangel::SWGAudioOutputDevice& response __attribute__((unused)),
SWGSDRangel::SWGErrorResponse& error)
{
error.init();
*error.getMessage() = QString("Function not implemented");
return 501;
}
/**
* Handler of /sdrangel/audio/input/cleanup (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceAudioInputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response __attribute__((unused)),
SWGSDRangel::SWGErrorResponse& error)
{
error.init();
*error.getMessage() = QString("Function not implemented");
return 501;
}
/**
* Handler of /sdrangel/audio/output/cleanup (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
*/
virtual int instanceAudioOutputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response __attribute__((unused)),
SWGSDRangel::SWGErrorResponse& error)
{
error.init();
*error.getMessage() = QString("Function not implemented");
return 501;
}
/**
* Handler of /sdrangel/location (GET) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels
* returns the Http status code (default 501: not implemented)
@ -568,10 +620,10 @@ public:
static QString instanceChannelsURL;
static QString instanceLoggingURL;
static QString instanceAudioURL;
static QString instanceAudioInputSetURL;
static QString instanceAudioOutputSetURL;
static QString instanceAudioInputUnsetURL;
static QString instanceAudioOutputUnsetURL;
static QString instanceAudioInputParametersURL;
static QString instanceAudioOutputParametersURL;
static QString instanceAudioInputCleanupURL;
static QString instanceAudioOutputCleanupURL;
static QString instanceLocationURL;
static QString instanceDVSerialURL;
static QString instancePresetsURL;

Wyświetl plik

@ -84,10 +84,14 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http
instanceLoggingService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioURL) {
instanceAudioService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioInputSetURL) {
instanceAudioInputSetService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioOutputSetURL) {
instanceAudioOutputSetService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioInputParametersURL) {
instanceAudioInputParametersService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioOutputParametersURL) {
instanceAudioOutputParametersService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioInputCleanupURL) {
instanceAudioInputCleanupService(request, response);
} else if (path == WebAPIAdapterInterface::instanceAudioOutputCleanupURL) {
instanceAudioOutputCleanupService(request, response);
} else if (path == WebAPIAdapterInterface::instanceLocationURL) {
instanceLocationService(request, response);
} else if (path == WebAPIAdapterInterface::instanceDVSerialURL) {
@ -328,24 +332,24 @@ void WebAPIRequestMapper::instanceAudioService(qtwebapp::HttpRequest& request, q
}
}
void WebAPIRequestMapper::instanceAudioInputSetService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
void WebAPIRequestMapper::instanceAudioInputParametersService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
// TODO
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
if (request.getMethod() == "PATCH")
QString jsonStr = request.getBody();
QJsonObject jsonObject;
if (parseJsonBody(jsonStr, jsonObject, response))
{
QString jsonStr = request.getBody();
QJsonObject jsonObject;
SWGSDRangel::SWGAudioInputDevice normalResponse;
resetAudioInputDevice(normalResponse);
QStringList audioInputDeviceKeys;
if (parseJsonBody(jsonStr, jsonObject, response))
if (validateAudioInputDevice(normalResponse, jsonObject, audioInputDeviceKeys))
{
SWGSDRangel::SWGAudioInputDevice normalResponse;
resetAudioInputDevice(normalResponse);
QStringList audioInputDeviceKeys;
if (validateAudioInputDevice(normalResponse, jsonObject, audioInputDeviceKeys))
if (request.getMethod() == "PATCH")
{
int status = m_adapter->instanceAudioInputPatch(
normalResponse,
@ -359,48 +363,61 @@ void WebAPIRequestMapper::instanceAudioInputSetService(qtwebapp::HttpRequest& re
response.write(errorResponse.asJson().toUtf8());
}
}
else if (request.getMethod() == "DELETE")
{
int status = m_adapter->instanceAudioInputDelete(
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");
response.setStatus(405,"Invalid HTTP method");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON request";
*errorResponse.getMessage() = "Invalid HTTP method";
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(400,"Invalid JSON format");
response.setStatus(400,"Invalid JSON request");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON format";
*errorResponse.getMessage() = "Invalid JSON request";
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(405,"Invalid HTTP method");
response.setStatus(400,"Invalid JSON format");
errorResponse.init();
*errorResponse.getMessage() = "Invalid HTTP method";
*errorResponse.getMessage() = "Invalid JSON format";
response.write(errorResponse.asJson().toUtf8());
}
}
void WebAPIRequestMapper::instanceAudioOutputSetService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
void WebAPIRequestMapper::instanceAudioOutputParametersService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
if (request.getMethod() == "PATCH")
QString jsonStr = request.getBody();
QJsonObject jsonObject;
if (parseJsonBody(jsonStr, jsonObject, response))
{
QString jsonStr = request.getBody();
QJsonObject jsonObject;
SWGSDRangel::SWGAudioOutputDevice normalResponse;
resetAudioOutputDevice(normalResponse);
QStringList audioOutputDeviceKeys;
if (parseJsonBody(jsonStr, jsonObject, response))
if (validateAudioOutputDevice(normalResponse, jsonObject, audioOutputDeviceKeys))
{
SWGSDRangel::SWGAudioOutputDevice normalResponse;
resetAudioOutputDevice(normalResponse);
QStringList audioOutputDeviceKeys;
if (validateAudioOutputDevice(normalResponse, jsonObject, audioOutputDeviceKeys))
if (request.getMethod() == "PATCH")
{
int status = m_adapter->instanceAudioOutputPatch(
normalResponse,
@ -414,19 +431,86 @@ void WebAPIRequestMapper::instanceAudioOutputSetService(qtwebapp::HttpRequest& r
response.write(errorResponse.asJson().toUtf8());
}
}
else if (request.getMethod() == "DELETE")
{
int status = m_adapter->instanceAudioOutputDelete(
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");
response.setStatus(405,"Invalid HTTP method");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON request";
*errorResponse.getMessage() = "Invalid HTTP method";
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(400,"Invalid JSON format");
response.setStatus(400,"Invalid JSON request");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON format";
*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());
}
}
void WebAPIRequestMapper::instanceAudioInputCleanupService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
if (request.getMethod() == "PATCH")
{
SWGSDRangel::SWGSuccessResponse normalResponse;
int status = m_adapter->instanceAudioInputCleanupPatch(normalResponse, errorResponse);
response.setStatus(status);
if (status/100 == 2) {
response.write(normalResponse.asJson().toUtf8());
} else {
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::instanceAudioOutputCleanupService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
if (request.getMethod() == "PATCH")
{
SWGSDRangel::SWGSuccessResponse normalResponse;
int status = m_adapter->instanceAudioOutputCleanupPatch(normalResponse, errorResponse);
response.setStatus(status);
if (status/100 == 2) {
response.write(normalResponse.asJson().toUtf8());
} else {
response.write(errorResponse.asJson().toUtf8());
}
}

Wyświetl plik

@ -52,8 +52,10 @@ private:
void instanceChannelsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceLoggingService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioInputSetService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioOutputSetService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioInputParametersService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioOutputParametersService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioInputCleanupService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceAudioOutputCleanupService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceLocationService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instanceDVSerialService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);
void instancePresetsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response);

Wyświetl plik

@ -394,6 +394,88 @@ int WebAPIAdapterGUI::instanceAudioOutputPatch(
return 200;
}
int WebAPIAdapterGUI::instanceAudioInputDelete(
SWGSDRangel::SWGAudioInputDevice& response,
SWGSDRangel::SWGErrorResponse& error)
{
AudioDeviceManager::InputDeviceInfo inputDeviceInfo;
QString deviceName;
int deviceIndex = response.getIndex();
if (!m_mainWindow.m_dspEngine->getAudioDeviceManager()->getInputDeviceName(deviceIndex, deviceName))
{
error.init();
*error.getMessage() = QString("There is no audio input device at index %1").arg(deviceIndex);
return 404;
}
m_mainWindow.m_dspEngine->getAudioDeviceManager()->unsetInputDeviceInfo(deviceIndex);
m_mainWindow.m_dspEngine->getAudioDeviceManager()->getInputDeviceInfo(deviceName, inputDeviceInfo);
response.setSampleRate(inputDeviceInfo.sampleRate);
response.setVolume(inputDeviceInfo.volume);
return 200;
}
int WebAPIAdapterGUI::instanceAudioOutputDelete(
SWGSDRangel::SWGAudioOutputDevice& response,
SWGSDRangel::SWGErrorResponse& error)
{
AudioDeviceManager::OutputDeviceInfo outputDeviceInfo;
QString deviceName;
int deviceIndex = response.getIndex();
if (!m_mainWindow.m_dspEngine->getAudioDeviceManager()->getOutputDeviceName(deviceIndex, deviceName))
{
error.init();
*error.getMessage() = QString("There is no audio output device at index %1").arg(deviceIndex);
return 404;
}
m_mainWindow.m_dspEngine->getAudioDeviceManager()->unsetInputDeviceInfo(deviceIndex);
m_mainWindow.m_dspEngine->getAudioDeviceManager()->getOutputDeviceInfo(deviceName, outputDeviceInfo);
response.setSampleRate(outputDeviceInfo.sampleRate);
response.setCopyToUdp(outputDeviceInfo.copyToUDP == 0 ? 0 : 1);
response.setUdpUsesRtp(outputDeviceInfo.udpUseRTP == 0 ? 0 : 1);
response.setUdpChannelMode(outputDeviceInfo.udpChannelMode % 4);
if (response.getUdpAddress()) {
*response.getUdpAddress() = outputDeviceInfo.udpAddress;
} else {
response.setUdpAddress(new QString(outputDeviceInfo.udpAddress));
}
response.setUdpPort(outputDeviceInfo.udpPort % (1<<16));
return 200;
}
int WebAPIAdapterGUI::instanceAudioInputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error __attribute__((unused)))
{
m_mainWindow.m_dspEngine->getAudioDeviceManager()->inputInfosCleanup();
response.init();
*response.getMessage() = QString("Unregistered parameters for devices not in list of available input devices for this instance");
return 200;
}
int WebAPIAdapterGUI::instanceAudioOutputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error __attribute__((unused)))
{
m_mainWindow.m_dspEngine->getAudioDeviceManager()->outputInfosCleanup();
response.init();
*response.getMessage() = QString("Unregistered parameters for devices not in list of available output devices for this instance");
return 200;
}
int WebAPIAdapterGUI::instanceLocationGet(
SWGSDRangel::SWGLocationInformation& response,
SWGSDRangel::SWGErrorResponse& error __attribute__((unused)))

Wyświetl plik

@ -73,6 +73,22 @@ public:
const QStringList& audioOutputKeys,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioInputDelete(
SWGSDRangel::SWGAudioInputDevice& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioOutputDelete(
SWGSDRangel::SWGAudioOutputDevice& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioInputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioOutputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceLocationGet(
SWGSDRangel::SWGLocationInformation& response,
SWGSDRangel::SWGErrorResponse& error);

Wyświetl plik

@ -395,6 +395,88 @@ int WebAPIAdapterSrv::instanceAudioOutputPatch(
return 200;
}
int WebAPIAdapterSrv::instanceAudioInputDelete(
SWGSDRangel::SWGAudioInputDevice& response,
SWGSDRangel::SWGErrorResponse& error)
{
AudioDeviceManager::InputDeviceInfo inputDeviceInfo;
QString deviceName;
int deviceIndex = response.getIndex();
if (!m_mainCore.m_dspEngine->getAudioDeviceManager()->getInputDeviceName(deviceIndex, deviceName))
{
error.init();
*error.getMessage() = QString("There is no audio input device at index %1").arg(deviceIndex);
return 404;
}
m_mainCore.m_dspEngine->getAudioDeviceManager()->unsetInputDeviceInfo(deviceIndex);
m_mainCore.m_dspEngine->getAudioDeviceManager()->getInputDeviceInfo(deviceName, inputDeviceInfo);
response.setSampleRate(inputDeviceInfo.sampleRate);
response.setVolume(inputDeviceInfo.volume);
return 200;
}
int WebAPIAdapterSrv::instanceAudioOutputDelete(
SWGSDRangel::SWGAudioOutputDevice& response,
SWGSDRangel::SWGErrorResponse& error)
{
AudioDeviceManager::OutputDeviceInfo outputDeviceInfo;
QString deviceName;
int deviceIndex = response.getIndex();
if (!m_mainCore.m_dspEngine->getAudioDeviceManager()->getOutputDeviceName(deviceIndex, deviceName))
{
error.init();
*error.getMessage() = QString("There is no audio output device at index %1").arg(deviceIndex);
return 404;
}
m_mainCore.m_dspEngine->getAudioDeviceManager()->unsetInputDeviceInfo(deviceIndex);
m_mainCore.m_dspEngine->getAudioDeviceManager()->getOutputDeviceInfo(deviceName, outputDeviceInfo);
response.setSampleRate(outputDeviceInfo.sampleRate);
response.setCopyToUdp(outputDeviceInfo.copyToUDP == 0 ? 0 : 1);
response.setUdpUsesRtp(outputDeviceInfo.udpUseRTP == 0 ? 0 : 1);
response.setUdpChannelMode(outputDeviceInfo.udpChannelMode % 4);
if (response.getUdpAddress()) {
*response.getUdpAddress() = outputDeviceInfo.udpAddress;
} else {
response.setUdpAddress(new QString(outputDeviceInfo.udpAddress));
}
response.setUdpPort(outputDeviceInfo.udpPort % (1<<16));
return 200;
}
int WebAPIAdapterSrv::instanceAudioInputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error __attribute__((unused)))
{
m_mainCore.m_dspEngine->getAudioDeviceManager()->inputInfosCleanup();
response.init();
*response.getMessage() = QString("Unregistered parameters for devices not in list of available input devices for this instance");
return 200;
}
int WebAPIAdapterSrv::instanceAudioOutputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error __attribute__((unused)))
{
m_mainCore.m_dspEngine->getAudioDeviceManager()->outputInfosCleanup();
response.init();
*response.getMessage() = QString("Unregistered parameters for devices not in list of available output devices for this instance");
return 200;
}
int WebAPIAdapterSrv::instanceLocationGet(
SWGSDRangel::SWGLocationInformation& response,
SWGSDRangel::SWGErrorResponse& error __attribute__((unused)))

Wyświetl plik

@ -73,6 +73,22 @@ public:
const QStringList& audioOutputKeys,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioInputDelete(
SWGSDRangel::SWGAudioInputDevice& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioOutputDelete(
SWGSDRangel::SWGAudioOutputDevice& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioInputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceAudioOutputCleanupPatch(
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceLocationGet(
SWGSDRangel::SWGLocationInformation& response,
SWGSDRangel::SWGErrorResponse& error);

Wyświetl plik

@ -182,11 +182,12 @@ paths:
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/input/set:
/sdrangel/audio/input/parameters:
x-swagger-router-controller: instance
patch:
description: Set audio input device paramaters
operationId: instanceAudioInputSetPatch
operationId: instanceAudioInputPatch
tags:
- Instance
consumes:
@ -211,12 +212,57 @@ paths:
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
delete:
description: Delete audio input device paramaters and return to defaults
operationId: instanceAudioInputDelete
tags:
- Instance
consumes:
- application/json
parameters:
- name: body
in: body
description: Audio input parameters. Index is used to identify the device.
required: true
schema:
$ref: "#/definitions/AudioInputDevice"
responses:
"200":
description: Success. Returns default parameters.
schema:
$ref: "#/definitions/AudioInputDevice"
"404":
description: Audio input device not found
schema:
$ref: "#/definitions/ErrorResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/output/set:
/sdrangel/audio/input/cleanup:
x-swagger-router-controller: instance
patch:
description: Remove registered parameters for devices not in list of available input devices for this instance
operationId: instanceAudioInputCleanupPatch
tags:
- Instance
responses:
"200":
description: Success.
schema:
$ref: "#/definitions/SuccessResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/output/parameters:
x-swagger-router-controller: instance
patch:
description: Set audio output device parameters
operationId: instanceAudioOutputSetPatch
operationId: instanceAudioOutputPatch
tags:
- Instance
consumes:
@ -241,6 +287,50 @@ paths:
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
delete:
description: Delete audio output device paramaters and return to defaults
operationId: instanceAudioOutputDelete
tags:
- Instance
consumes:
- application/json
parameters:
- name: body
in: body
description: Audio output parameters. Index is used to identify the device.
required: true
schema:
$ref: "#/definitions/AudioOutputDevice"
responses:
"200":
description: Success. Returns actual data in particular the actual sample rate.
schema:
$ref: "#/definitions/AudioOutputDevice"
"404":
description: Audio output device not found
schema:
$ref: "#/definitions/ErrorResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/audio/output/cleanup:
x-swagger-router-controller: instance
patch:
description: Remove registered parameters for devices not in list of available output devices for this instance
operationId: instanceAudioOutputCleanupPatch
tags:
- Instance
responses:
"200":
description: Success.
schema:
$ref: "#/definitions/SuccessResponse"
"500":
$ref: "#/responses/Response_500"
"501":
$ref: "#/responses/Response_501"
/sdrangel/location:
x-swagger-router-controller: instance

Wyświetl plik

@ -81,9 +81,9 @@ SWGInstanceApi::instanceAudioGetCallback(SWGHttpRequestWorker * worker) {
}
void
SWGInstanceApi::instanceAudioInputSetPatch(SWGAudioInputDevice& body) {
SWGInstanceApi::instanceAudioInputCleanupPatch() {
QString fullPath;
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/input/set");
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/input/cleanup");
@ -91,6 +91,58 @@ SWGInstanceApi::instanceAudioInputSetPatch(SWGAudioInputDevice& body) {
SWGHttpRequestInput input(fullPath, "PATCH");
foreach(QString key, this->defaultHeaders.keys()) {
input.headers.insert(key, this->defaultHeaders.value(key));
}
connect(worker,
&SWGHttpRequestWorker::on_execution_finished,
this,
&SWGInstanceApi::instanceAudioInputCleanupPatchCallback);
worker->execute(&input);
}
void
SWGInstanceApi::instanceAudioInputCleanupPatchCallback(SWGHttpRequestWorker * worker) {
QString msg;
QString error_str = worker->error_str;
QNetworkReply::NetworkError error_type = worker->error_type;
if (worker->error_type == QNetworkReply::NoError) {
msg = QString("Success! %1 bytes").arg(worker->response.length());
}
else {
msg = "Error: " + worker->error_str;
}
QString json(worker->response);
SWGSuccessResponse* output = static_cast<SWGSuccessResponse*>(create(json, QString("SWGSuccessResponse")));
worker->deleteLater();
if (worker->error_type == QNetworkReply::NoError) {
emit instanceAudioInputCleanupPatchSignal(output);
} else {
emit instanceAudioInputCleanupPatchSignalE(output, error_type, error_str);
emit instanceAudioInputCleanupPatchSignalEFull(worker, error_type, error_str);
}
}
void
SWGInstanceApi::instanceAudioInputDelete(SWGAudioInputDevice& body) {
QString fullPath;
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/input/parameters");
SWGHttpRequestWorker *worker = new SWGHttpRequestWorker();
SWGHttpRequestInput input(fullPath, "DELETE");
QString output = body.asJson();
input.request_body.append(output);
@ -104,13 +156,13 @@ SWGInstanceApi::instanceAudioInputSetPatch(SWGAudioInputDevice& body) {
connect(worker,
&SWGHttpRequestWorker::on_execution_finished,
this,
&SWGInstanceApi::instanceAudioInputSetPatchCallback);
&SWGInstanceApi::instanceAudioInputDeleteCallback);
worker->execute(&input);
}
void
SWGInstanceApi::instanceAudioInputSetPatchCallback(SWGHttpRequestWorker * worker) {
SWGInstanceApi::instanceAudioInputDeleteCallback(SWGHttpRequestWorker * worker) {
QString msg;
QString error_str = worker->error_str;
QNetworkReply::NetworkError error_type = worker->error_type;
@ -128,17 +180,17 @@ SWGInstanceApi::instanceAudioInputSetPatchCallback(SWGHttpRequestWorker * worker
worker->deleteLater();
if (worker->error_type == QNetworkReply::NoError) {
emit instanceAudioInputSetPatchSignal(output);
emit instanceAudioInputDeleteSignal(output);
} else {
emit instanceAudioInputSetPatchSignalE(output, error_type, error_str);
emit instanceAudioInputSetPatchSignalEFull(worker, error_type, error_str);
emit instanceAudioInputDeleteSignalE(output, error_type, error_str);
emit instanceAudioInputDeleteSignalEFull(worker, error_type, error_str);
}
}
void
SWGInstanceApi::instanceAudioOutputSetPatch(SWGAudioOutputDevice& body) {
SWGInstanceApi::instanceAudioInputPatch(SWGAudioInputDevice& body) {
QString fullPath;
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/output/set");
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/input/parameters");
@ -159,13 +211,120 @@ SWGInstanceApi::instanceAudioOutputSetPatch(SWGAudioOutputDevice& body) {
connect(worker,
&SWGHttpRequestWorker::on_execution_finished,
this,
&SWGInstanceApi::instanceAudioOutputSetPatchCallback);
&SWGInstanceApi::instanceAudioInputPatchCallback);
worker->execute(&input);
}
void
SWGInstanceApi::instanceAudioOutputSetPatchCallback(SWGHttpRequestWorker * worker) {
SWGInstanceApi::instanceAudioInputPatchCallback(SWGHttpRequestWorker * worker) {
QString msg;
QString error_str = worker->error_str;
QNetworkReply::NetworkError error_type = worker->error_type;
if (worker->error_type == QNetworkReply::NoError) {
msg = QString("Success! %1 bytes").arg(worker->response.length());
}
else {
msg = "Error: " + worker->error_str;
}
QString json(worker->response);
SWGAudioInputDevice* output = static_cast<SWGAudioInputDevice*>(create(json, QString("SWGAudioInputDevice")));
worker->deleteLater();
if (worker->error_type == QNetworkReply::NoError) {
emit instanceAudioInputPatchSignal(output);
} else {
emit instanceAudioInputPatchSignalE(output, error_type, error_str);
emit instanceAudioInputPatchSignalEFull(worker, error_type, error_str);
}
}
void
SWGInstanceApi::instanceAudioOutputCleanupPatch() {
QString fullPath;
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/output/cleanup");
SWGHttpRequestWorker *worker = new SWGHttpRequestWorker();
SWGHttpRequestInput input(fullPath, "PATCH");
foreach(QString key, this->defaultHeaders.keys()) {
input.headers.insert(key, this->defaultHeaders.value(key));
}
connect(worker,
&SWGHttpRequestWorker::on_execution_finished,
this,
&SWGInstanceApi::instanceAudioOutputCleanupPatchCallback);
worker->execute(&input);
}
void
SWGInstanceApi::instanceAudioOutputCleanupPatchCallback(SWGHttpRequestWorker * worker) {
QString msg;
QString error_str = worker->error_str;
QNetworkReply::NetworkError error_type = worker->error_type;
if (worker->error_type == QNetworkReply::NoError) {
msg = QString("Success! %1 bytes").arg(worker->response.length());
}
else {
msg = "Error: " + worker->error_str;
}
QString json(worker->response);
SWGSuccessResponse* output = static_cast<SWGSuccessResponse*>(create(json, QString("SWGSuccessResponse")));
worker->deleteLater();
if (worker->error_type == QNetworkReply::NoError) {
emit instanceAudioOutputCleanupPatchSignal(output);
} else {
emit instanceAudioOutputCleanupPatchSignalE(output, error_type, error_str);
emit instanceAudioOutputCleanupPatchSignalEFull(worker, error_type, error_str);
}
}
void
SWGInstanceApi::instanceAudioOutputDelete(SWGAudioOutputDevice& body) {
QString fullPath;
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/output/parameters");
SWGHttpRequestWorker *worker = new SWGHttpRequestWorker();
SWGHttpRequestInput input(fullPath, "DELETE");
QString output = body.asJson();
input.request_body.append(output);
foreach(QString key, this->defaultHeaders.keys()) {
input.headers.insert(key, this->defaultHeaders.value(key));
}
connect(worker,
&SWGHttpRequestWorker::on_execution_finished,
this,
&SWGInstanceApi::instanceAudioOutputDeleteCallback);
worker->execute(&input);
}
void
SWGInstanceApi::instanceAudioOutputDeleteCallback(SWGHttpRequestWorker * worker) {
QString msg;
QString error_str = worker->error_str;
QNetworkReply::NetworkError error_type = worker->error_type;
@ -183,10 +342,65 @@ SWGInstanceApi::instanceAudioOutputSetPatchCallback(SWGHttpRequestWorker * worke
worker->deleteLater();
if (worker->error_type == QNetworkReply::NoError) {
emit instanceAudioOutputSetPatchSignal(output);
emit instanceAudioOutputDeleteSignal(output);
} else {
emit instanceAudioOutputSetPatchSignalE(output, error_type, error_str);
emit instanceAudioOutputSetPatchSignalEFull(worker, error_type, error_str);
emit instanceAudioOutputDeleteSignalE(output, error_type, error_str);
emit instanceAudioOutputDeleteSignalEFull(worker, error_type, error_str);
}
}
void
SWGInstanceApi::instanceAudioOutputPatch(SWGAudioOutputDevice& body) {
QString fullPath;
fullPath.append(this->host).append(this->basePath).append("/sdrangel/audio/output/parameters");
SWGHttpRequestWorker *worker = new SWGHttpRequestWorker();
SWGHttpRequestInput input(fullPath, "PATCH");
QString output = body.asJson();
input.request_body.append(output);
foreach(QString key, this->defaultHeaders.keys()) {
input.headers.insert(key, this->defaultHeaders.value(key));
}
connect(worker,
&SWGHttpRequestWorker::on_execution_finished,
this,
&SWGInstanceApi::instanceAudioOutputPatchCallback);
worker->execute(&input);
}
void
SWGInstanceApi::instanceAudioOutputPatchCallback(SWGHttpRequestWorker * worker) {
QString msg;
QString error_str = worker->error_str;
QNetworkReply::NetworkError error_type = worker->error_type;
if (worker->error_type == QNetworkReply::NoError) {
msg = QString("Success! %1 bytes").arg(worker->response.length());
}
else {
msg = "Error: " + worker->error_str;
}
QString json(worker->response);
SWGAudioOutputDevice* output = static_cast<SWGAudioOutputDevice*>(create(json, QString("SWGAudioOutputDevice")));
worker->deleteLater();
if (worker->error_type == QNetworkReply::NoError) {
emit instanceAudioOutputPatchSignal(output);
} else {
emit instanceAudioOutputPatchSignalE(output, error_type, error_str);
emit instanceAudioOutputPatchSignalEFull(worker, error_type, error_str);
}
}

Wyświetl plik

@ -31,6 +31,7 @@
#include "SWGPresetImport.h"
#include "SWGPresetTransfer.h"
#include "SWGPresets.h"
#include "SWGSuccessResponse.h"
#include <QObject>
@ -49,8 +50,12 @@ public:
QMap<QString, QString> defaultHeaders;
void instanceAudioGet();
void instanceAudioInputSetPatch(SWGAudioInputDevice& body);
void instanceAudioOutputSetPatch(SWGAudioOutputDevice& body);
void instanceAudioInputCleanupPatch();
void instanceAudioInputDelete(SWGAudioInputDevice& body);
void instanceAudioInputPatch(SWGAudioInputDevice& body);
void instanceAudioOutputCleanupPatch();
void instanceAudioOutputDelete(SWGAudioOutputDevice& body);
void instanceAudioOutputPatch(SWGAudioOutputDevice& body);
void instanceChannels(qint32 tx);
void instanceDVSerialPatch(qint32 dvserial);
void instanceDelete();
@ -71,8 +76,12 @@ public:
private:
void instanceAudioGetCallback (SWGHttpRequestWorker * worker);
void instanceAudioInputSetPatchCallback (SWGHttpRequestWorker * worker);
void instanceAudioOutputSetPatchCallback (SWGHttpRequestWorker * worker);
void instanceAudioInputCleanupPatchCallback (SWGHttpRequestWorker * worker);
void instanceAudioInputDeleteCallback (SWGHttpRequestWorker * worker);
void instanceAudioInputPatchCallback (SWGHttpRequestWorker * worker);
void instanceAudioOutputCleanupPatchCallback (SWGHttpRequestWorker * worker);
void instanceAudioOutputDeleteCallback (SWGHttpRequestWorker * worker);
void instanceAudioOutputPatchCallback (SWGHttpRequestWorker * worker);
void instanceChannelsCallback (SWGHttpRequestWorker * worker);
void instanceDVSerialPatchCallback (SWGHttpRequestWorker * worker);
void instanceDeleteCallback (SWGHttpRequestWorker * worker);
@ -93,8 +102,12 @@ private:
signals:
void instanceAudioGetSignal(SWGAudioDevices* summary);
void instanceAudioInputSetPatchSignal(SWGAudioInputDevice* summary);
void instanceAudioOutputSetPatchSignal(SWGAudioOutputDevice* summary);
void instanceAudioInputCleanupPatchSignal(SWGSuccessResponse* summary);
void instanceAudioInputDeleteSignal(SWGAudioInputDevice* summary);
void instanceAudioInputPatchSignal(SWGAudioInputDevice* summary);
void instanceAudioOutputCleanupPatchSignal(SWGSuccessResponse* summary);
void instanceAudioOutputDeleteSignal(SWGAudioOutputDevice* summary);
void instanceAudioOutputPatchSignal(SWGAudioOutputDevice* summary);
void instanceChannelsSignal(SWGInstanceChannelsResponse* summary);
void instanceDVSerialPatchSignal(SWGDVSeralDevices* summary);
void instanceDeleteSignal(SWGInstanceSummaryResponse* summary);
@ -114,8 +127,12 @@ signals:
void instanceSummarySignal(SWGInstanceSummaryResponse* summary);
void instanceAudioGetSignalE(SWGAudioDevices* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputSetPatchSignalE(SWGAudioInputDevice* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputSetPatchSignalE(SWGAudioOutputDevice* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputCleanupPatchSignalE(SWGSuccessResponse* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputDeleteSignalE(SWGAudioInputDevice* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputPatchSignalE(SWGAudioInputDevice* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputCleanupPatchSignalE(SWGSuccessResponse* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputDeleteSignalE(SWGAudioOutputDevice* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputPatchSignalE(SWGAudioOutputDevice* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceChannelsSignalE(SWGInstanceChannelsResponse* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceDVSerialPatchSignalE(SWGDVSeralDevices* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceDeleteSignalE(SWGInstanceSummaryResponse* summary, QNetworkReply::NetworkError error_type, QString& error_str);
@ -135,8 +152,12 @@ signals:
void instanceSummarySignalE(SWGInstanceSummaryResponse* summary, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioGetSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputSetPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputSetPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputCleanupPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputDeleteSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioInputPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputCleanupPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputDeleteSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceAudioOutputPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceChannelsSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceDVSerialPatchSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);
void instanceDeleteSignalEFull(SWGHttpRequestWorker* worker, QNetworkReply::NetworkError error_type, QString& error_str);