From 7a2f60fe5ddb38d1ed195639f035056eab5153d1 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 24 Nov 2017 00:47:42 +0100 Subject: [PATCH] Web API: /sdrangel/logging implementation (2) --- sdrbase/resources/index.html | 54 +++++++++++++---- sdrbase/webapi/webapirequestmapper.cpp | 60 ++++++++++++------- sdrgui/webapi/webapiadaptergui.cpp | 24 ++++---- swagger/sdrangel/api/swagger/swagger.yaml | 21 ++++--- swagger/sdrangel/code/html2/index.html | 54 +++++++++++++---- .../code/qt5/client/SWGChannelListItem.cpp | 8 +-- .../code/qt5/client/SWGChannelListItem.h | 6 +- .../code/qt5/client/SWGDeviceListItem.cpp | 8 +-- .../code/qt5/client/SWGDeviceListItem.h | 6 +- .../code/qt5/client/SWGLoggingInfo.cpp | 8 +-- .../sdrangel/code/qt5/client/SWGLoggingInfo.h | 6 +- .../code/qt5/client/SWGSamplingDevice.cpp | 8 +-- .../code/qt5/client/SWGSamplingDevice.h | 6 +- 13 files changed, 173 insertions(+), 96 deletions(-) diff --git a/sdrbase/resources/index.html b/sdrbase/resources/index.html index 1ee9e4225..798f8d825 100644 --- a/sdrbase/resources/index.html +++ b/sdrbase/resources/index.html @@ -779,8 +779,8 @@ margin-bottom: 20px; "description" : "Key to identify the channel plugin type as short object name" }, "tx" : { - "type" : "boolean", - "description" : "True if this is a Tx channel" + "type" : "integer", + "description" : "Not zero (true) if this is a Tx channel" }, "version" : { "type" : "string", @@ -830,8 +830,8 @@ margin-bottom: 20px; "description" : "Sequence in the enumeration of same device types" }, "tx" : { - "type" : "boolean", - "description" : "Set to true if this is a Tx device" + "type" : "integer", + "description" : "Set to not zero (true) if this is a Tx device" }, "nbStreams" : { "type" : "integer", @@ -964,7 +964,6 @@ margin-bottom: 20px; "description" : "Instance geolocation information" }; defs.LoggingInfo = { - "required" : [ "consoleLevel", "fileLevel" ], "properties" : { "consoleLevel" : { "type" : "string", @@ -975,8 +974,8 @@ margin-bottom: 20px; "description" : "Minimum level of messages written to file: debug, info, warning, error" }, "dumpToFile" : { - "type" : "boolean", - "description" : "True if messages are written to file" + "type" : "integer", + "description" : "not zero (true) if messages are written to file" }, "fileName" : { "type" : "string", @@ -1088,8 +1087,8 @@ margin-bottom: 20px; "description" : "Key to identify the type of hardware device" }, "tx" : { - "type" : "boolean", - "description" : "True if this is a Tx device" + "type" : "integer", + "description" : "Not zero (true) if this is a Tx device" }, "nbStreams" : { "type" : "integer", @@ -5099,9 +5098,44 @@ $(document).ready(function() {

Status: 400 - Invallid data

+
+
+ +
+ +

Status: 500 - Error

@@ -7322,7 +7356,7 @@ except ApiException as e:
- Generated 2017-11-23T00:55:26.644+01:00 + Generated 2017-11-24T00:44:01.796+01:00
diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index 4e55a4a5a..b0d4df33d 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -17,6 +17,8 @@ /////////////////////////////////////////////////////////////////////////////////// //#include +#include +#include #include "httpdocrootsettings.h" #include "webapirequestmapper.h" @@ -43,8 +45,8 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http { if (m_adapter == 0) // format service unavailable if adapter is null { - response.write("Service not available"); response.setStatus(500,"Service not available"); + response.write("Service not available"); } else // normal processing { @@ -58,19 +60,18 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http Swagger::SWGErrorResponse errorResponse; int status = m_adapter->instanceSummary(normalResponse, errorResponse); + response.setStatus(status); if (status == 200) { response.write(normalResponse.asJson().toUtf8()); } else { response.write(errorResponse.asJson().toUtf8()); } - - response.setStatus(status); } else { - response.write("Invalid HTTP method"); response.setStatus(405,"Invalid HTTP method"); + response.write("Invalid HTTP method"); } } else if (path == WebAPIAdapterInterface::instanceDevicesURL) @@ -84,19 +85,18 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http bool tx = (txStr == "true"); int status = m_adapter->instanceDevices(tx, normalResponse, errorResponse); + response.setStatus(status); if (status == 200) { response.write(normalResponse.asJson().toUtf8()); } else { response.write(errorResponse.asJson().toUtf8()); } - - response.setStatus(status); } else { - response.write("Invalid HTTP method"); response.setStatus(405,"Invalid HTTP method"); + response.write("Invalid HTTP method"); } } else if (path == WebAPIAdapterInterface::instanceChannelsURL) @@ -110,19 +110,18 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http bool tx = (txStr == "true"); int status = m_adapter->instanceChannels(tx, normalResponse, errorResponse); + response.setStatus(status); if (status == 200) { response.write(normalResponse.asJson().toUtf8()); } else { response.write(errorResponse.asJson().toUtf8()); } - - response.setStatus(status); } else { - response.write("Invalid HTTP method"); response.setStatus(405,"Invalid HTTP method"); + response.write("Invalid HTTP method"); } } else if (path == WebAPIAdapterInterface::instanceLoggingURL) @@ -133,42 +132,57 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http if (request.getMethod() == "GET") { int status = m_adapter->instanceLoggingGet(normalResponse, errorResponse); + response.setStatus(status); if (status == 200) { response.write(normalResponse.asJson().toUtf8()); } else { response.write(errorResponse.asJson().toUtf8()); } - - response.setStatus(status); } else if (request.getMethod() == "PUT") { try { QString jsonStr = request.getBody(); - qDebug("WebAPIRequestMapper::service: /sdrangel/logging (PUT): %s", qPrintable(jsonStr)); - normalResponse.fromJson(jsonStr); - int status = m_adapter->instanceLoggingPut(normalResponse, errorResponse); + QByteArray jsonBytes(jsonStr.toStdString().c_str()); + QJsonParseError error; + QJsonDocument doc = QJsonDocument::fromJson(jsonBytes, &error); - if (status == 200) { - response.write(normalResponse.asJson().toUtf8()); - } else { + if (error.error == QJsonParseError::NoError) + { + normalResponse.fromJson(jsonStr); + int status = m_adapter->instanceLoggingPut(normalResponse, errorResponse); + response.setStatus(status); + + if (status == 200) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } + else + { + QString errorMsg = QString("Input JSON error: ") + error.errorString(); + errorResponse.init(); + *errorResponse.getMessage() = errorMsg; + response.setStatus(400, errorMsg.toUtf8()); response.write(errorResponse.asJson().toUtf8()); } - - response.setStatus(status); } catch (const std::exception& ex) { - response.write("Invalid input format"); - response.setStatus(400,"Invalid input format"); + QString errorMsg = QString("Error parsing request: ") + ex.what(); + errorResponse.init(); + *errorResponse.getMessage() = errorMsg; + response.setStatus(500, errorMsg.toUtf8()); + response.write(errorResponse.asJson().toUtf8()); } } else { - response.write("Invalid HTTP method"); response.setStatus(405,"Invalid HTTP method"); + response.write("Invalid HTTP method"); } } else diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index 53782407d..37663444d 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -58,7 +58,7 @@ int WebAPIAdapterGUI::instanceSummary( Swagger::SWGLoggingInfo *logging = response.getLogging(); logging->init(); - logging->setDumpToFile(m_mainWindow.m_logger->getUseFileLogger()); + 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()); @@ -198,9 +198,9 @@ int WebAPIAdapterGUI::instanceChannels( int WebAPIAdapterGUI::instanceLoggingGet( Swagger::SWGLoggingInfo& response, - Swagger::SWGErrorResponse& error) + Swagger::SWGErrorResponse& error __attribute__((unused))) { - response.setDumpToFile(m_mainWindow.m_logger->getUseFileLogger()); + response.setDumpToFile(m_mainWindow.m_logger->getUseFileLogger() ? 1 : 0); if (response.getDumpToFile()) { m_mainWindow.m_logger->getLogFileName(*response.getFileName()); @@ -214,10 +214,10 @@ int WebAPIAdapterGUI::instanceLoggingGet( int WebAPIAdapterGUI::instanceLoggingPut( Swagger::SWGLoggingInfo& response, - Swagger::SWGErrorResponse& error) + Swagger::SWGErrorResponse& error __attribute__((unused))) { // response input is the query actually - bool dumpToFile = response.getDumpToFile(); + bool dumpToFile = (response.getDumpToFile() != 0); QString* consoleLevel = response.getConsoleLevel(); QString* fileLevel = response.getFileLevel(); QString* fileName = response.getFileName(); @@ -234,21 +234,17 @@ int WebAPIAdapterGUI::instanceLoggingPut( m_mainWindow.m_settings.setUseLogFile(dumpToFile); if (fileName) { - m_mainWindow.m_settings.setLogFileName(*fileLevel); + m_mainWindow.m_settings.setLogFileName(*fileName); } m_mainWindow.setLoggingOpions(); // build response - response.setDumpToFile(m_mainWindow.m_settings.getUseLogFile()); - - if (response.getDumpToFile()) - { - *response.getFileName() = m_mainWindow.m_settings.getLogFileName(); - getMsgTypeString(m_mainWindow.m_settings.getFileMinLogLevel(), *response.getFileLevel()); - } - + response.init(); getMsgTypeString(m_mainWindow.m_settings.getConsoleMinLogLevel(), *response.getConsoleLevel()); + response.setDumpToFile(m_mainWindow.m_settings.getUseLogFile() ? 1 : 0); + getMsgTypeString(m_mainWindow.m_settings.getFileMinLogLevel(), *response.getFileLevel()); + *response.getFileName() = m_mainWindow.m_settings.getLogFileName(); return 200; } diff --git a/swagger/sdrangel/api/swagger/swagger.yaml b/swagger/sdrangel/api/swagger/swagger.yaml index 6cacab7c3..e0698743e 100644 --- a/swagger/sdrangel/api/swagger/swagger.yaml +++ b/swagger/sdrangel/api/swagger/swagger.yaml @@ -121,6 +121,8 @@ paths: $ref: "#/definitions/LoggingInfo" "400": description: Invallid data + schema: + $ref: "#/definitions/ErrorResponse" "500": description: Error schema: @@ -462,9 +464,6 @@ definitions: type: string LoggingInfo: description: "Logging parameters setting" - required: - - consoleLevel - - fileLevel properties: consoleLevel: description: "Minimum level of messages printed to console: debug, info, warning, error" @@ -473,8 +472,8 @@ definitions: description: "Minimum level of messages written to file: debug, info, warning, error" type: string dumpToFile: - description: "True if messages are written to file" - type: boolean + description: "not zero (true) if messages are written to file" + type: integer fileName: description: "Name of the log file" type: string @@ -496,8 +495,8 @@ definitions: description: "Sequence in the enumeration of same device types" type: integer tx: - description: "Set to true if this is a Tx device" - type: boolean + description: "Set to not zero (true) if this is a Tx device" + type: integer nbStreams: description: "Number of channels or streams in the device" type: integer @@ -526,8 +525,8 @@ definitions: description: "Key to identify the channel plugin type as short object name" type: string tx: - description: "True if this is a Tx channel" - type: boolean + description: "Not zero (true) if this is a Tx channel" + type: integer version: description: "Channel plugin version number" type: string @@ -582,8 +581,8 @@ definitions: description: "Key to identify the type of hardware device" type: string tx: - description: "True if this is a Tx device" - type: boolean + description: "Not zero (true) if this is a Tx device" + type: integer nbStreams: description: "Number of channels or streams in the device" type: integer diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 1ee9e4225..798f8d825 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -779,8 +779,8 @@ margin-bottom: 20px; "description" : "Key to identify the channel plugin type as short object name" }, "tx" : { - "type" : "boolean", - "description" : "True if this is a Tx channel" + "type" : "integer", + "description" : "Not zero (true) if this is a Tx channel" }, "version" : { "type" : "string", @@ -830,8 +830,8 @@ margin-bottom: 20px; "description" : "Sequence in the enumeration of same device types" }, "tx" : { - "type" : "boolean", - "description" : "Set to true if this is a Tx device" + "type" : "integer", + "description" : "Set to not zero (true) if this is a Tx device" }, "nbStreams" : { "type" : "integer", @@ -964,7 +964,6 @@ margin-bottom: 20px; "description" : "Instance geolocation information" }; defs.LoggingInfo = { - "required" : [ "consoleLevel", "fileLevel" ], "properties" : { "consoleLevel" : { "type" : "string", @@ -975,8 +974,8 @@ margin-bottom: 20px; "description" : "Minimum level of messages written to file: debug, info, warning, error" }, "dumpToFile" : { - "type" : "boolean", - "description" : "True if messages are written to file" + "type" : "integer", + "description" : "not zero (true) if messages are written to file" }, "fileName" : { "type" : "string", @@ -1088,8 +1087,8 @@ margin-bottom: 20px; "description" : "Key to identify the type of hardware device" }, "tx" : { - "type" : "boolean", - "description" : "True if this is a Tx device" + "type" : "integer", + "description" : "Not zero (true) if this is a Tx device" }, "nbStreams" : { "type" : "integer", @@ -5099,9 +5098,44 @@ $(document).ready(function() {

Status: 400 - Invallid data

+
+
+ +
+ +

Status: 500 - Error

@@ -7322,7 +7356,7 @@ except ApiException as e:
- Generated 2017-11-23T00:55:26.644+01:00 + Generated 2017-11-24T00:44:01.796+01:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelListItem.cpp b/swagger/sdrangel/code/qt5/client/SWGChannelListItem.cpp index ac90362ea..ab66c9e91 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelListItem.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGChannelListItem.cpp @@ -40,7 +40,7 @@ SWGChannelListItem::init() { name = new QString(""); id_uri = new QString(""); id = new QString(""); - tx = false; + tx = 0; version = new QString(""); index = 0; } @@ -81,7 +81,7 @@ SWGChannelListItem::fromJsonObject(QJsonObject &pJson) { ::Swagger::setValue(&name, pJson["name"], "QString", "QString"); ::Swagger::setValue(&id_uri, pJson["idURI"], "QString", "QString"); ::Swagger::setValue(&id, pJson["id"], "QString", "QString"); - ::Swagger::setValue(&tx, pJson["tx"], "bool", ""); + ::Swagger::setValue(&tx, pJson["tx"], "qint32", ""); ::Swagger::setValue(&version, pJson["version"], "QString", "QString"); ::Swagger::setValue(&index, pJson["index"], "qint32", ""); } @@ -142,12 +142,12 @@ SWGChannelListItem::setId(QString* id) { this->id = id; } -bool +qint32 SWGChannelListItem::getTx() { return tx; } void -SWGChannelListItem::setTx(bool tx) { +SWGChannelListItem::setTx(qint32 tx) { this->tx = tx; } diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelListItem.h b/swagger/sdrangel/code/qt5/client/SWGChannelListItem.h index e564a5eb1..d9163f168 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelListItem.h +++ b/swagger/sdrangel/code/qt5/client/SWGChannelListItem.h @@ -51,8 +51,8 @@ public: QString* getId(); void setId(QString* id); - bool getTx(); - void setTx(bool tx); + qint32 getTx(); + void setTx(qint32 tx); QString* getVersion(); void setVersion(QString* version); @@ -65,7 +65,7 @@ private: QString* name; QString* id_uri; QString* id; - bool tx; + qint32 tx; QString* version; qint32 index; }; diff --git a/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.cpp b/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.cpp index 11ba2ac4b..713204f55 100644 --- a/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.cpp @@ -41,7 +41,7 @@ SWGDeviceListItem::init() { hw_type = new QString(""); serial = new QString(""); sequence = 0; - tx = false; + tx = 0; nb_streams = 0; stream_index = 0; device_set_index = 0; @@ -85,7 +85,7 @@ SWGDeviceListItem::fromJsonObject(QJsonObject &pJson) { ::Swagger::setValue(&hw_type, pJson["hwType"], "QString", "QString"); ::Swagger::setValue(&serial, pJson["serial"], "QString", "QString"); ::Swagger::setValue(&sequence, pJson["sequence"], "qint32", ""); - ::Swagger::setValue(&tx, pJson["tx"], "bool", ""); + ::Swagger::setValue(&tx, pJson["tx"], "qint32", ""); ::Swagger::setValue(&nb_streams, pJson["nbStreams"], "qint32", ""); ::Swagger::setValue(&stream_index, pJson["streamIndex"], "qint32", ""); ::Swagger::setValue(&device_set_index, pJson["deviceSetIndex"], "qint32", ""); @@ -163,12 +163,12 @@ SWGDeviceListItem::setSequence(qint32 sequence) { this->sequence = sequence; } -bool +qint32 SWGDeviceListItem::getTx() { return tx; } void -SWGDeviceListItem::setTx(bool tx) { +SWGDeviceListItem::setTx(qint32 tx) { this->tx = tx; } diff --git a/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.h b/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.h index 4fd9ac5b5..3d4df2302 100644 --- a/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.h +++ b/swagger/sdrangel/code/qt5/client/SWGDeviceListItem.h @@ -54,8 +54,8 @@ public: qint32 getSequence(); void setSequence(qint32 sequence); - bool getTx(); - void setTx(bool tx); + qint32 getTx(); + void setTx(qint32 tx); qint32 getNbStreams(); void setNbStreams(qint32 nb_streams); @@ -75,7 +75,7 @@ private: QString* hw_type; QString* serial; qint32 sequence; - bool tx; + qint32 tx; qint32 nb_streams; qint32 stream_index; qint32 device_set_index; diff --git a/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.cpp b/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.cpp index f4b3b77c4..9cba94008 100644 --- a/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.cpp @@ -39,7 +39,7 @@ void SWGLoggingInfo::init() { console_level = new QString(""); file_level = new QString(""); - dump_to_file = false; + dump_to_file = 0; file_name = new QString(""); } @@ -73,7 +73,7 @@ void SWGLoggingInfo::fromJsonObject(QJsonObject &pJson) { ::Swagger::setValue(&console_level, pJson["consoleLevel"], "QString", "QString"); ::Swagger::setValue(&file_level, pJson["fileLevel"], "QString", "QString"); - ::Swagger::setValue(&dump_to_file, pJson["dumpToFile"], "bool", ""); + ::Swagger::setValue(&dump_to_file, pJson["dumpToFile"], "qint32", ""); ::Swagger::setValue(&file_name, pJson["fileName"], "QString", "QString"); } @@ -120,12 +120,12 @@ SWGLoggingInfo::setFileLevel(QString* file_level) { this->file_level = file_level; } -bool +qint32 SWGLoggingInfo::getDumpToFile() { return dump_to_file; } void -SWGLoggingInfo::setDumpToFile(bool dump_to_file) { +SWGLoggingInfo::setDumpToFile(qint32 dump_to_file) { this->dump_to_file = dump_to_file; } diff --git a/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.h b/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.h index a28d354f7..7194e3997 100644 --- a/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.h +++ b/swagger/sdrangel/code/qt5/client/SWGLoggingInfo.h @@ -48,8 +48,8 @@ public: QString* getFileLevel(); void setFileLevel(QString* file_level); - bool getDumpToFile(); - void setDumpToFile(bool dump_to_file); + qint32 getDumpToFile(); + void setDumpToFile(qint32 dump_to_file); QString* getFileName(); void setFileName(QString* file_name); @@ -58,7 +58,7 @@ public: private: QString* console_level; QString* file_level; - bool dump_to_file; + qint32 dump_to_file; QString* file_name; }; diff --git a/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.cpp b/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.cpp index b04eba307..c818fc9a8 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.cpp @@ -39,7 +39,7 @@ void SWGSamplingDevice::init() { index = 0; hw_type = new QString(""); - tx = false; + tx = 0; nb_streams = 0; stream_index = 0; sequence = 0; @@ -85,7 +85,7 @@ void SWGSamplingDevice::fromJsonObject(QJsonObject &pJson) { ::Swagger::setValue(&index, pJson["index"], "qint32", ""); ::Swagger::setValue(&hw_type, pJson["hwType"], "QString", "QString"); - ::Swagger::setValue(&tx, pJson["tx"], "bool", ""); + ::Swagger::setValue(&tx, pJson["tx"], "qint32", ""); ::Swagger::setValue(&nb_streams, pJson["nbStreams"], "qint32", ""); ::Swagger::setValue(&stream_index, pJson["streamIndex"], "qint32", ""); ::Swagger::setValue(&sequence, pJson["sequence"], "qint32", ""); @@ -150,12 +150,12 @@ SWGSamplingDevice::setHwType(QString* hw_type) { this->hw_type = hw_type; } -bool +qint32 SWGSamplingDevice::getTx() { return tx; } void -SWGSamplingDevice::setTx(bool tx) { +SWGSamplingDevice::setTx(qint32 tx) { this->tx = tx; } diff --git a/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.h b/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.h index c033316a1..b1853fc78 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.h +++ b/swagger/sdrangel/code/qt5/client/SWGSamplingDevice.h @@ -48,8 +48,8 @@ public: QString* getHwType(); void setHwType(QString* hw_type); - bool getTx(); - void setTx(bool tx); + qint32 getTx(); + void setTx(qint32 tx); qint32 getNbStreams(); void setNbStreams(qint32 nb_streams); @@ -76,7 +76,7 @@ public: private: qint32 index; QString* hw_type; - bool tx; + qint32 tx; qint32 nb_streams; qint32 stream_index; qint32 sequence;