summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2018-05-07 14:27:50 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-05-14 20:24:27 +0000
commit6b413b757ba9d9d0f5a644bdec7835abe2f34612 (patch)
treeccb35ad32b845c575e17e4fcccfb16c978bf24a9
parentfa91849f5d2a320bbc09067bc2aea42fdb8cfd23 (diff)
Fix the device configuration frame factory
Change-Id: I7332b9ef0a9f8b4f0c99dbcbaf8164d121495750 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--examples/knx/knxeditor/localdevicemanagement.cpp22
-rw-r--r--src/knx/qknxdevicemanagementframe.cpp70
-rw-r--r--src/knx/qknxdevicemanagementframe.h31
-rw-r--r--src/knx/qknxdevicemanagementframefactory.cpp396
-rw-r--r--src/knx/qknxdevicemanagementframefactory.h263
-rw-r--r--sync.profile6
-rw-r--r--tests/auto/qknxdevicemanagementframe/tst_qknxdevicemanagementframe.cpp60
-rw-r--r--tests/auto/qknxnetipdeviceconfigurationrequest/tst_qknxnetipdeviceconfigurationrequest.cpp20
8 files changed, 577 insertions, 291 deletions
diff --git a/examples/knx/knxeditor/localdevicemanagement.cpp b/examples/knx/knxeditor/localdevicemanagement.cpp
index 957db86..5b069fe 100644
--- a/examples/knx/knxeditor/localdevicemanagement.cpp
+++ b/examples/knx/knxeditor/localdevicemanagement.cpp
@@ -52,7 +52,7 @@
#include "ui_localdevicemanagement.h"
#include <QKnxByteArray>
-#include <QKnxDeviceManagementFrameFactory>
+#include <QtKnx/QKnxDeviceManagementFrameBuilder>
#include <QKnxInterfaceObjectPropertyDataType>
#include <QMetaEnum>
#include <QMetaType>
@@ -92,9 +92,12 @@ LocalDeviceManagement::LocalDeviceManagement(QWidget* parent)
ui->textOuputDeviceManagement->append(tr("Successfully connected to: %1 on port: %2")
.arg(m_server.controlEndpointAddress().toString()).arg(m_server.controlEndpointPort()));
- m_management.sendFrame(QKnxDeviceManagementFrameFactory::PropertyRead
- ::createRequest(QKnxInterfaceObjectType::System::Device, 1,
- QKnxInterfaceObjectProperty::Device::IoList, 1, 0));
+ m_management.sendFrame(QKnxDeviceManagementFrame::propertyReadBuilder()
+ .setObjectType(QKnxInterfaceObjectType::System::Device)
+ .setObjectInstance(1)
+ .setProperty(QKnxInterfaceObjectProperty::Device::IoList)
+ .setNumberOfElements(1)
+ .setStartIndex(0).createRequest());
});
connect(ui->disconnectRequestDeviceManagement, &QPushButton::clicked, this, [&]() {
@@ -319,9 +322,14 @@ void LocalDeviceManagement::handleIoListResponse(const QKnxDeviceManagementFrame
quint8 expectedDataSize = dataTypes[0].size();
if (frame.startIndex() == 0) {
if (data.size() == expectedDataSize) {
- m_management.sendFrame(QKnxDeviceManagementFrameFactory::PropertyRead
- ::createRequest(QKnxInterfaceObjectType::System::Device, 1,
- QKnxInterfaceObjectProperty::Device::IoList, data.toUShort(nullptr, 16), 1));
+ m_management.sendFrame(QKnxDeviceManagementFrame::propertyReadBuilder()
+ .setObjectType(QKnxInterfaceObjectType::System::Device)
+ .setObjectInstance(1)
+ .setProperty(QKnxInterfaceObjectProperty::Device::IoList)
+ .setNumberOfElements(data.toUShort(nullptr, 16))
+ .setNumberOfElements(1)
+ .createRequest()
+ );
}
} else {
if ((data.size() % expectedDataSize) == 0) {
diff --git a/src/knx/qknxdevicemanagementframe.cpp b/src/knx/qknxdevicemanagementframe.cpp
index 39c7bba..0e5e3c1 100644
--- a/src/knx/qknxdevicemanagementframe.cpp
+++ b/src/knx/qknxdevicemanagementframe.cpp
@@ -28,6 +28,7 @@
******************************************************************************/
#include "qknxdevicemanagementframe.h"
+#include "qknxdevicemanagementframefactory.h"
#include "qknxutils.h"
QT_BEGIN_NAMESPACE
@@ -158,11 +159,13 @@ QKnxDeviceManagementFrame::QKnxDeviceManagementFrame(
}
/*!
- Returns the number of bytes of the local device management frame.
+ Returns \c true if this is a default constructed device management frame,
+ otherwise returns \c false. A frame is considered null if it contains no
+ initialized values.
*/
-quint16 QKnxDeviceManagementFrame::size() const
+bool QKnxDeviceManagementFrame::isNull() const
{
- return d_ptr->m_serviceInformation.size() + 1 /* message code */;
+ return d_ptr->m_code == MessageCode::Unknown && d_ptr->m_serviceInformation.isNull();
}
/*!
@@ -219,6 +222,14 @@ bool QKnxDeviceManagementFrame::isValid() const
}
/*!
+ Returns the number of bytes of the local device management frame.
+*/
+quint16 QKnxDeviceManagementFrame::size() const
+{
+ return d_ptr->m_serviceInformation.size() + 1 /* message code */;
+}
+
+/*!
Returns \c true if this local device management frame is a negative
confirmation; otherwise returns \c false.
@@ -350,7 +361,8 @@ void QKnxDeviceManagementFrame::setNumberOfElements(quint8 numOfElements)
{
if (numOfElements > 0x0f)
return;
- d_ptr->m_serviceInformation.set(4, (d_ptr->m_serviceInformation.value(4) & 0x0f) | (numOfElements << 4));
+ d_ptr->m_serviceInformation.set(4,
+ (d_ptr->m_serviceInformation.value(4) & 0x0f) | (numOfElements << 4));
}
/*!
@@ -374,8 +386,8 @@ void QKnxDeviceManagementFrame::setStartIndex(quint16 index)
if (index > 0x0fff)
return;
- auto startIndex = QKnxUtils::QUint16::fromBytes(d_ptr->m_serviceInformation, 4);
- d_ptr->m_serviceInformation.replace(4, 2, QKnxUtils::QUint16::bytes(startIndex | index));
+ d_ptr->m_serviceInformation.replace(4, 2,
+ QKnxUtils::QUint16::bytes((quint16(numberOfElements()) << 12) | index));
}
/*!
@@ -598,19 +610,41 @@ bool QKnxDeviceManagementFrame::operator!=(const QKnxDeviceManagementFrame &othe
return !operator==(other);
}
-/*!
- \internal
-*/
-QKnxDeviceManagementFrame::QKnxDeviceManagementFrame(MessageCode code,
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 noe, quint16 index, const QKnxByteArray &payload)
- : QKnxDeviceManagementFrame(code)
+QKnxDeviceManagementFrame::Builder QKnxDeviceManagementFrame::builder()
{
- d_ptr->m_serviceInformation = QKnxUtils::QUint16::bytes(quint16(type));
- d_ptr->m_serviceInformation.append(instance);
- d_ptr->m_serviceInformation.append(pid);
- d_ptr->m_serviceInformation.append(QKnxUtils::QUint16::bytes((quint16(noe) << 12) | index));
- d_ptr->m_serviceInformation + payload;
+ return QKnxDeviceManagementFrame::Builder();
+}
+
+QKnxDeviceManagementFrame::PropertyReadBuilder QKnxDeviceManagementFrame::propertyReadBuilder()
+{
+ return QKnxDeviceManagementFrame::PropertyReadBuilder();
+}
+
+QKnxDeviceManagementFrame::PropertyWriteBuilder QKnxDeviceManagementFrame::propertyWriteBuilder()
+{
+ return QKnxDeviceManagementFrame::PropertyWriteBuilder();
+}
+
+QKnxDeviceManagementFrame::PropertyInfoBuilder QKnxDeviceManagementFrame::propertyInfoBuilder()
+{
+ return QKnxDeviceManagementFrame::PropertyInfoBuilder();
+}
+
+QKnxDeviceManagementFrame::FunctionPropertyCommandBuilder
+ QKnxDeviceManagementFrame::functionPropertyCommandBuilder()
+{
+ return QKnxDeviceManagementFrame::FunctionPropertyCommandBuilder();
+}
+
+QKnxDeviceManagementFrame::FunctionPropertyStateReadBuilder
+ QKnxDeviceManagementFrame::functionPropertyStateReadBuilder()
+{
+ return QKnxDeviceManagementFrame::FunctionPropertyStateReadBuilder();
+}
+
+QKnxDeviceManagementFrame::ResetBuilder QKnxDeviceManagementFrame::resetBuilder()
+{
+ return QKnxDeviceManagementFrame::ResetBuilder();
}
/*!
diff --git a/src/knx/qknxdevicemanagementframe.h b/src/knx/qknxdevicemanagementframe.h
index c08f29a..f7083de 100644
--- a/src/knx/qknxdevicemanagementframe.h
+++ b/src/knx/qknxdevicemanagementframe.h
@@ -44,7 +44,6 @@ class QKnxDeviceManagementFramePrivate;
class Q_KNX_EXPORT QKnxDeviceManagementFrame final
{
Q_GADGET
- friend class QKnxDeviceManagementFrameFactory;
public:
enum class MessageCode : quint8
@@ -76,9 +75,10 @@ public:
QKnxDeviceManagementFrame(QKnxDeviceManagementFrame::MessageCode messageCode,
const QKnxByteArray &serviceInfo);
- quint16 size() const;
-
+ bool isNull() const;
bool isValid() const;
+
+ quint16 size() const;
bool isNegativeConfirmation() const;
MessageCode messageCode() const;
@@ -126,11 +126,28 @@ public:
bool operator==(const QKnxDeviceManagementFrame &other) const;
bool operator!=(const QKnxDeviceManagementFrame &other) const;
-private:
- QKnxDeviceManagementFrame(MessageCode code, QKnxInterfaceObjectType type,
- quint8 instance, QKnxInterfaceObjectProperty pid, quint8 noe, quint16 index,
- const QKnxByteArray &payload = {});
+ class Q_KNX_EXPORT Builder;
+ static QKnxDeviceManagementFrame::Builder builder();
+
+ class Q_KNX_EXPORT PropertyReadBuilder;
+ static PropertyReadBuilder propertyReadBuilder();
+ class Q_KNX_EXPORT PropertyWriteBuilder;
+ static PropertyWriteBuilder propertyWriteBuilder();
+
+ class Q_KNX_EXPORT PropertyInfoBuilder;
+ static PropertyInfoBuilder propertyInfoBuilder();
+
+ class Q_KNX_EXPORT FunctionPropertyCommandBuilder;
+ static FunctionPropertyCommandBuilder functionPropertyCommandBuilder();
+
+ class Q_KNX_EXPORT FunctionPropertyStateReadBuilder;
+ static FunctionPropertyStateReadBuilder functionPropertyStateReadBuilder();
+
+ class Q_KNX_EXPORT ResetBuilder;
+ static ResetBuilder resetBuilder();
+
+private:
QKnxDeviceManagementFrame(MessageCode code, QKnxInterfaceObjectType type,
quint8 instance, QKnxInterfaceObjectProperty pid, const QKnxByteArray &payload = {});
diff --git a/src/knx/qknxdevicemanagementframefactory.cpp b/src/knx/qknxdevicemanagementframefactory.cpp
index 197a5b3..7a7d892 100644
--- a/src/knx/qknxdevicemanagementframefactory.cpp
+++ b/src/knx/qknxdevicemanagementframefactory.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtKnx module.
@@ -74,191 +74,373 @@ QT_BEGIN_NAMESPACE
\endlist
*/
-// -- PropertyRead
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyRead::createRequest(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements, quint16 startIndex)
+// -- QKnxDeviceManagementFrame::Builder
+
+QKnxDeviceManagementFrame::Builder &
+ QKnxDeviceManagementFrame::Builder::setMessageCode(QKnxDeviceManagementFrame::MessageCode code)
{
- return { QKnxDeviceManagementFrame::MessageCode::PropertyReadRequest, type, instance, pid, numberOfElements,
- startIndex };
+ m_code = code;
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyRead::createConfirmation(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements, quint16 startIndex, const QKnxByteArray &data)
+QKnxDeviceManagementFrame::Builder &
+ QKnxDeviceManagementFrame::Builder::setObjectType(QKnxInterfaceObjectType type)
{
- return { QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation, type, instance, pid,
- numberOfElements, startIndex, data };
+ m_type = type;
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyRead::createConfirmation(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements, quint16 startIndex, QKnxNetIpCemiServer::Error error)
+QKnxDeviceManagementFrame::Builder &
+ QKnxDeviceManagementFrame::Builder::setObjectInstance(quint8 instance)
{
- QKnxDeviceManagementFrame frame { QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation, type,
- instance, pid, numberOfElements, startIndex };
- frame.setError(error);
+ m_instance = instance;
+ return *this;
+}
+
+QKnxDeviceManagementFrame::Builder &
+ QKnxDeviceManagementFrame::Builder::setProperty(QKnxInterfaceObjectProperty pid)
+{
+ m_pid = pid;
+ return *this;
+}
+
+QKnxDeviceManagementFrame::Builder &
+ QKnxDeviceManagementFrame::Builder::setData(const QKnxByteArray &data)
+{
+ m_data = data;
+ return *this;
+}
+
+QKnxDeviceManagementFrame QKnxDeviceManagementFrame::Builder::createFrame() const
+{
+ return { m_code, m_type, m_instance, m_pid, m_data };
+}
+
+
+// -- QKnxDeviceManagementFrame::PropertyReadBuilder
+
+using PFRB = QKnxDeviceManagementFrame::PropertyReadBuilder;
+PFRB &QKnxDeviceManagementFrame::PropertyReadBuilder::setObjectType(QKnxInterfaceObjectType type)
+{
+ m_builder.setObjectType(type);
+ return *this;
+}
+
+PFRB &QKnxDeviceManagementFrame::PropertyReadBuilder::setObjectInstance(quint8 instance)
+{
+ m_builder.setObjectInstance(instance);
+ return *this;
+}
+
+PFRB &QKnxDeviceManagementFrame::PropertyReadBuilder::setProperty(QKnxInterfaceObjectProperty pid)
+{
+ m_builder.setProperty(pid);
+ return *this;
+}
+
+PFRB &QKnxDeviceManagementFrame::PropertyReadBuilder::setNumberOfElements(quint8 noe)
+{
+ m_numberOfElements = noe;
+ return *this;
+}
+
+PFRB &QKnxDeviceManagementFrame::PropertyReadBuilder::setStartIndex(quint16 startIndex)
+{
+ m_startIndex= startIndex;
+ return *this;
+}
+
+QKnxDeviceManagementFrame QKnxDeviceManagementFrame::PropertyReadBuilder::createRequest() const
+{
+ m_builder.setMessageCode(MessageCode::PropertyReadRequest);
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(m_numberOfElements);
+ frame.setStartIndex(m_startIndex);
return frame;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyRead::createConfirmation(
- const QKnxDeviceManagementFrame &request, const QKnxByteArray &data)
+QKnxDeviceManagementFrame PFRB::createConfirmation(const QKnxByteArray &data,
+ const QKnxDeviceManagementFrame &request) const
{
- return { QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation, request.objectType(), request
- .objectInstance(), request.property(), request.numberOfElements(), request.startIndex(),
- data };
+ m_builder.setMessageCode(MessageCode::PropertyReadConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(request.isNull() ? m_numberOfElements : request.numberOfElements());
+ frame.setStartIndex(request.isNull() ? m_startIndex : request.startIndex());
+ frame.setData(data);
+ return frame;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyRead::createConfirmation(
- const QKnxDeviceManagementFrame &request, QKnxNetIpCemiServer::Error error)
+QKnxDeviceManagementFrame PFRB::createNegativeConfirmation(QKnxNetIpCemiServer::Error error,
+ const QKnxDeviceManagementFrame &request) const
{
- QKnxDeviceManagementFrame frame = { QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation,
- request.objectType(), request.objectInstance(), request.property(), 0, request.startIndex() };
+ m_builder.setMessageCode(MessageCode::PropertyReadConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(0);
+ frame.setStartIndex(request.isNull() ? m_startIndex : request.startIndex());
frame.setError(error);
return frame;
}
-// -- PropertyWrite
+// -- QKnxDeviceManagementFrame::PropertyWriteBuilder
+
+using PFWB = QKnxDeviceManagementFrame::PropertyWriteBuilder;
+PFWB &QKnxDeviceManagementFrame::PropertyWriteBuilder::setObjectType(QKnxInterfaceObjectType type)
+{
+ m_builder.setObjectType(type);
+ return *this;
+}
+
+PFWB &QKnxDeviceManagementFrame::PropertyWriteBuilder::setObjectInstance(quint8 instance)
+{
+ m_builder.setObjectInstance(instance);
+ return *this;
+}
+
+PFWB &QKnxDeviceManagementFrame::PropertyWriteBuilder::setProperty(QKnxInterfaceObjectProperty pid)
+{
+ m_builder.setProperty(pid);
+ return *this;
+}
+
+PFWB &QKnxDeviceManagementFrame::PropertyWriteBuilder::setNumberOfElements(quint8 noe)
+{
+ m_numberOfElements = noe;
+ return *this;
+}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyWrite::createRequest(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements, quint16 startIndex, const QKnxByteArray &data)
+PFWB &QKnxDeviceManagementFrame::PropertyWriteBuilder::setStartIndex(quint16 startIndex)
{
- return { QKnxDeviceManagementFrame::MessageCode::PropertyWriteRequest, type, instance, pid, numberOfElements,
- startIndex, data };
+ m_startIndex= startIndex;
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyWrite::createConfirmation(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements, quint16 startIndex, QKnxNetIpCemiServer::Error error)
+QKnxDeviceManagementFrame PFWB::createRequest(const QKnxByteArray &data) const
{
- QKnxDeviceManagementFrame frame = { QKnxDeviceManagementFrame::MessageCode::PropertyWriteConfirmation, type,
- instance, pid, numberOfElements, startIndex };
- if (error != QKnxNetIpCemiServer::Error::None)
- frame.setError(error);
+ m_builder.setMessageCode(MessageCode::PropertyWriteRequest);
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(m_numberOfElements);
+ frame.setStartIndex(m_startIndex);
+ frame.setData(data);
return frame;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyWrite::createConfirmation(
- const QKnxDeviceManagementFrame &request, QKnxNetIpCemiServer::Error error)
+QKnxDeviceManagementFrame PFWB::createConfirmation(const QKnxDeviceManagementFrame &request) const
{
- QKnxDeviceManagementFrame frame = { QKnxDeviceManagementFrame::MessageCode::PropertyWriteConfirmation,
- request.objectType(), request.objectInstance(), request.property(), 0, request.startIndex() };
- if (error != QKnxNetIpCemiServer::Error::None)
- frame.setError(error);
+ m_builder.setMessageCode(MessageCode::PropertyWriteConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(request.isNull() ? m_numberOfElements : request.numberOfElements());
+ frame.setStartIndex(request.isNull() ? m_startIndex : request.startIndex());
+ return frame;
+}
+
+QKnxDeviceManagementFrame PFWB::createNegativeConfirmation(QKnxNetIpCemiServer::Error error,
+ const QKnxDeviceManagementFrame &request) const
+{
+ m_builder.setMessageCode(MessageCode::PropertyWriteConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(0);
+ frame.setStartIndex(request.isNull() ? m_startIndex : request.startIndex());
+ frame.setError(error);
return frame;
}
-// -- PropertyInfo
+// -- QKnxDeviceManagementFrame::PropertyInfoBuilder
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::PropertyInfo::createIndication(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements, quint16 startIndex, const QKnxByteArray &data)
+using PFIB = QKnxDeviceManagementFrame::PropertyInfoBuilder;
+QKnxDeviceManagementFrame::PropertyInfoBuilder::PropertyInfoBuilder()
{
- return { QKnxDeviceManagementFrame::MessageCode::PropertyInfoIndication, type, instance, pid,
- numberOfElements, startIndex, data };
+ m_builder.setMessageCode(MessageCode::PropertyInfoIndication);
}
+PFIB &QKnxDeviceManagementFrame::PropertyInfoBuilder::setObjectType(QKnxInterfaceObjectType type)
+{
+ m_builder.setObjectType(type);
+ return *this;
+}
-// -- FunctionPropertyCommand
+PFIB &QKnxDeviceManagementFrame::PropertyInfoBuilder::setObjectInstance(quint8 instance)
+{
+ m_builder.setObjectInstance(instance);
+ return *this;
+}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyCommand::createRequest(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- const QKnxByteArray &data)
+PFIB &QKnxDeviceManagementFrame::PropertyInfoBuilder::setProperty(QKnxInterfaceObjectProperty pid)
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyCommandRequest, type,
- instance, pid, data };
+ m_builder.setProperty(pid);
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyCommand::createConfirmation(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid)
+PFIB &QKnxDeviceManagementFrame::PropertyInfoBuilder::setNumberOfElements(quint8 noe)
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyCommandConfirmation,
- type, instance, pid };
+ m_numberOfElements = noe;
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyCommand::createConfirmation(
- QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- QKnxNetIpCemiServer::ReturnCode code, const QKnxByteArray &data)
+PFIB &QKnxDeviceManagementFrame::PropertyInfoBuilder::setStartIndex(quint16 startIndex)
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyCommandConfirmation,
- type, instance, pid, QKnxByteArray { quint8(code) } +data };
+ m_startIndex= startIndex;
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyCommand::createConfirmation(
- const QKnxDeviceManagementFrame &request)
+QKnxDeviceManagementFrame PFIB::createIndication(const QKnxByteArray &data) const
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyCommandConfirmation, request.objectType(),
- request.objectInstance(), request.property() };
+ auto frame = m_builder.createFrame();
+ frame.setNumberOfElements(m_numberOfElements);
+ frame.setStartIndex(m_startIndex);
+ frame.setData(data);
+ return frame;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyCommand::createConfirmation(
- const QKnxDeviceManagementFrame &request, QKnxNetIpCemiServer::ReturnCode code,
- const QKnxByteArray &data)
+
+// -- QKnxDeviceManagementFrame::FunctionPropertyCommandBuilder
+
+using FPCB = QKnxDeviceManagementFrame::FunctionPropertyCommandBuilder;
+FPCB &FPCB::setObjectType(QKnxInterfaceObjectType type)
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyCommandConfirmation, request.objectType(),
- request.objectInstance(), request.property(), QKnxByteArray { quint8(code) } + data };
+ m_builder.setObjectType(type);
+ return *this;
}
+FPCB &FPCB::setObjectInstance(quint8 instance)
+{
+ m_builder.setObjectInstance(instance);
+ return *this;
+}
+
+FPCB &FPCB::setProperty(QKnxInterfaceObjectProperty pid)
+{
+ m_builder.setProperty(pid);
+ return *this;
+}
-// -- FunctionPropertyStateRead
+QKnxDeviceManagementFrame FPCB::createRequest(const QKnxByteArray &data) const
+{
+ m_builder.setMessageCode(MessageCode::FunctionPropertyCommandRequest);
+ m_builder.setData(data);
+ return m_builder.createFrame();
+}
+
+QKnxDeviceManagementFrame FPCB::createConfirmation(QKnxNetIpCemiServer::ReturnCode code,
+ const QKnxByteArray &data, const QKnxDeviceManagementFrame &request) const
+{
+ m_builder.setMessageCode(MessageCode::FunctionPropertyCommandConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+
+ auto frame = m_builder.createFrame();
+ frame.setReturnCode(code);
+ frame.setData(data);
+ return frame;
+}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyStateRead
- ::createRequest(QKnxInterfaceObjectType type, quint8 instance, QKnxInterfaceObjectProperty pid,
- const QKnxByteArray &data)
+QKnxDeviceManagementFrame
+ FPCB::createNegativeConfirmation(const QKnxDeviceManagementFrame &request) const
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyStateReadRequest, type,
- instance, pid, data };
+ m_builder.setMessageCode(MessageCode::FunctionPropertyCommandConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+ return m_builder.createFrame();
}
-// -- FunctionPropertyStateResponse
+// -- QKnxDeviceManagementFrame::FunctionPropertyStateReadBuilder
+
+using FPSRB = QKnxDeviceManagementFrame::FunctionPropertyStateReadBuilder;
+FPSRB &FPSRB::setObjectType(QKnxInterfaceObjectType type)
+{
+ m_builder.setObjectType(type);
+ return *this;
+}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyStateResponse
- ::createConfirmation(QKnxInterfaceObjectType type, quint8 instance,
- QKnxInterfaceObjectProperty pid)
+FPSRB &FPSRB::setObjectInstance(quint8 instance)
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyStateReadConfirmation,
- type, instance, pid };
+ m_builder.setObjectInstance(instance);
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyStateResponse
- ::createConfirmation(QKnxInterfaceObjectType type, quint8 instance,
- QKnxInterfaceObjectProperty pid, QKnxNetIpCemiServer::ReturnCode code,
- const QKnxByteArray &data)
+FPSRB &FPSRB::setProperty(QKnxInterfaceObjectProperty pid)
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyStateReadConfirmation,
- type, instance, pid, QKnxByteArray { quint8(code) } + data };
+ m_builder.setProperty(pid);
+ return *this;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyStateResponse
- ::createConfirmation(const QKnxDeviceManagementFrame &request)
+QKnxDeviceManagementFrame FPSRB::createRequest(const QKnxByteArray &data) const
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyStateReadConfirmation,
- request.objectType(), request.objectInstance(), request.property() };
+ m_builder.setMessageCode(MessageCode::FunctionPropertyStateReadRequest);
+ m_builder.setData(data);
+ return m_builder.createFrame();
+}
+
+QKnxDeviceManagementFrame FPSRB::createConfirmation(QKnxNetIpCemiServer::ReturnCode code,
+ const QKnxByteArray &data, const QKnxDeviceManagementFrame &request) const
+{
+ m_builder.setMessageCode(MessageCode::FunctionPropertyStateReadConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+
+ auto frame = m_builder.createFrame();
+ frame.setReturnCode(code);
+ frame.setData(data);
+ return frame;
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::FunctionPropertyStateResponse
- ::createConfirmation(const QKnxDeviceManagementFrame &request,
- QKnxNetIpCemiServer::ReturnCode code, const QKnxByteArray &data)
+QKnxDeviceManagementFrame
+ FPSRB::createNegativeConfirmation(const QKnxDeviceManagementFrame &request) const
{
- return { QKnxDeviceManagementFrame::MessageCode::FunctionPropertyStateReadConfirmation,
- request.objectType(), request.objectInstance(), request.property(),
- QKnxByteArray { quint8(code) } + data };
+ m_builder.setMessageCode(MessageCode::FunctionPropertyStateReadConfirmation);
+ if (!request.isNull()) {
+ m_builder.setObjectType(request.objectType());
+ m_builder.setObjectInstance(request.objectInstance());
+ m_builder.setProperty(request.property());
+ }
+ return m_builder.createFrame();
}
-// -- Reset
+// -- QKnxDeviceManagementFrame::ResetBuilder
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::Reset::createRequest()
+QKnxDeviceManagementFrame QKnxDeviceManagementFrame::ResetBuilder::createRequest()
{
return QKnxDeviceManagementFrame { QKnxDeviceManagementFrame::MessageCode::ResetRequest };
}
-QKnxDeviceManagementFrame QKnxDeviceManagementFrameFactory::Reset::createIndication()
+QKnxDeviceManagementFrame QKnxDeviceManagementFrame::ResetBuilder::createIndication()
{
return QKnxDeviceManagementFrame { QKnxDeviceManagementFrame::MessageCode::ResetIndication };
}
diff --git a/src/knx/qknxdevicemanagementframefactory.h b/src/knx/qknxdevicemanagementframefactory.h
index 15501a1..2715ca5 100644
--- a/src/knx/qknxdevicemanagementframefactory.h
+++ b/src/knx/qknxdevicemanagementframefactory.h
@@ -1,6 +1,6 @@
/******************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtKnx module.
@@ -30,153 +30,136 @@
#ifndef QKNXDEVICEMANAGEMENTFRAMEFACTORY_H
#define QKNXDEVICEMANAGEMENTFRAMEFACTORY_H
+#include <QtKnx/qknxbytearray.h>
+#include <QtKnx/qknxinterfaceobjecttype.h>
#include <QtKnx/qknxdevicemanagementframe.h>
#include <QtKnx/qknxglobal.h>
#include <QtKnx/qknxnetip.h>
QT_BEGIN_NAMESPACE
-class Q_KNX_EXPORT QKnxDeviceManagementFrameFactory final
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::Builder final
{
public:
- QKnxDeviceManagementFrameFactory() = delete;
-
- struct Q_KNX_EXPORT PropertyRead final
- {
- PropertyRead() = delete;
-
- static QKnxDeviceManagementFrame createRequest(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements,
- quint16 startIndex);
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements,
- quint16 startIndex,
- const QKnxByteArray &data);
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements,
- quint16 startIndex,
- QKnxNetIpCemiServer::Error error = QKnxNetIpCemiServer::Error::None);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request,
- const QKnxByteArray &data);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request,
- QKnxNetIpCemiServer::Error error);
- };
-
- struct Q_KNX_EXPORT PropertyWrite final
- {
- PropertyWrite() = delete;
-
- static QKnxDeviceManagementFrame createRequest(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements,
- quint16 startIndex,
- const QKnxByteArray &data);
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements,
- quint16 startIndex,
- QKnxNetIpCemiServer::Error error = QKnxNetIpCemiServer::Error::None);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request,
- QKnxNetIpCemiServer::Error error = QKnxNetIpCemiServer::Error::None);
- };
-
- struct Q_KNX_EXPORT PropertyInfo final
- {
- PropertyInfo() = delete;
-
- static QKnxDeviceManagementFrame createIndication(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- quint8 numberOfElements,
- quint16 startIndex,
- const QKnxByteArray &data);
- };
-
- struct Q_KNX_EXPORT FunctionPropertyCommand final
- {
- FunctionPropertyCommand() = delete;
-
- static QKnxDeviceManagementFrame createRequest(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- const QKnxByteArray &data);
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid);
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- QKnxNetIpCemiServer::ReturnCode code,
- const QKnxByteArray &data);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request,
- QKnxNetIpCemiServer::ReturnCode code,
- const QKnxByteArray &data);
- };
-
- struct Q_KNX_EXPORT FunctionPropertyStateRead final
- {
- FunctionPropertyStateRead() = delete;
-
- static QKnxDeviceManagementFrame createRequest(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- const QKnxByteArray &data);
- };
-
- struct Q_KNX_EXPORT FunctionPropertyStateResponse final
- {
- FunctionPropertyStateResponse() = delete;
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid);
-
- static QKnxDeviceManagementFrame createConfirmation(QKnxInterfaceObjectType type,
- quint8 instance,
- QKnxInterfaceObjectProperty pid,
- QKnxNetIpCemiServer::ReturnCode code,
- const QKnxByteArray &data);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request);
-
- static QKnxDeviceManagementFrame createConfirmation(
- const QKnxDeviceManagementFrame &request,
- QKnxNetIpCemiServer::ReturnCode code,
- const QKnxByteArray &data);
- };
-
- struct Q_KNX_EXPORT Reset
- {
- Reset() = delete;
-
- static QKnxDeviceManagementFrame createRequest();
- static QKnxDeviceManagementFrame createIndication();
- };
+ Builder() = default;
+ ~Builder() = default;
+
+ Builder &setMessageCode(QKnxDeviceManagementFrame::MessageCode code);
+ Builder &setObjectType(QKnxInterfaceObjectType type);
+ Builder &setObjectInstance(quint8 instance);
+ Builder &setProperty(QKnxInterfaceObjectProperty pid);
+ Builder &setData(const QKnxByteArray &data);
+
+ QKnxDeviceManagementFrame createFrame() const;
+
+private:
+ QKnxDeviceManagementFrame::MessageCode m_code;
+ QKnxInterfaceObjectType m_type { QKnxInterfaceObjectType::Invalid };
+ quint8 m_instance;
+ QKnxInterfaceObjectProperty m_pid { QKnxInterfaceObjectProperty::Invalid };
+ QKnxByteArray m_data;
+};
+
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::PropertyReadBuilder final
+{
+public:
+ PropertyReadBuilder &setObjectType(QKnxInterfaceObjectType type);
+ PropertyReadBuilder &setObjectInstance(quint8 instance);
+ PropertyReadBuilder &setProperty(QKnxInterfaceObjectProperty pid);
+ PropertyReadBuilder &setNumberOfElements(quint8 noe);
+ PropertyReadBuilder &setStartIndex(quint16 startIndex);
+
+ QKnxDeviceManagementFrame createRequest() const;
+ QKnxDeviceManagementFrame createConfirmation(const QKnxByteArray &data,
+ const QKnxDeviceManagementFrame &request = {}) const;
+ QKnxDeviceManagementFrame createNegativeConfirmation(QKnxNetIpCemiServer::Error error,
+ const QKnxDeviceManagementFrame &request = {}) const;
+
+private:
+ int m_numberOfElements;
+ int m_startIndex;
+ mutable QKnxDeviceManagementFrame::Builder m_builder;
+};
+
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::PropertyWriteBuilder final
+{
+public:
+ PropertyWriteBuilder &setObjectType(QKnxInterfaceObjectType type);
+ PropertyWriteBuilder &setObjectInstance(quint8 instance);
+ PropertyWriteBuilder &setProperty(QKnxInterfaceObjectProperty pid);
+ PropertyWriteBuilder &setNumberOfElements(quint8 noe);
+ PropertyWriteBuilder &setStartIndex(quint16 startIndex);
+
+ QKnxDeviceManagementFrame createRequest(const QKnxByteArray &data) const;
+ QKnxDeviceManagementFrame createConfirmation(
+ const QKnxDeviceManagementFrame &request = {}) const;
+ QKnxDeviceManagementFrame createNegativeConfirmation(QKnxNetIpCemiServer::Error error,
+ const QKnxDeviceManagementFrame &request = {}) const;
+
+private:
+ int m_numberOfElements;
+ int m_startIndex;
+ mutable QKnxDeviceManagementFrame::Builder m_builder;
+};
+
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::PropertyInfoBuilder final
+{
+public:
+ PropertyInfoBuilder();
+
+ PropertyInfoBuilder &setObjectType(QKnxInterfaceObjectType type);
+ PropertyInfoBuilder &setObjectInstance(quint8 instance);
+ PropertyInfoBuilder &setProperty(QKnxInterfaceObjectProperty pid);
+ PropertyInfoBuilder &setNumberOfElements(quint8 noe);
+ PropertyInfoBuilder &setStartIndex(quint16 startIndex);
+
+ QKnxDeviceManagementFrame createIndication(const QKnxByteArray &data) const;
+
+private:
+ int m_numberOfElements;
+ int m_startIndex;
+ mutable QKnxDeviceManagementFrame::Builder m_builder;
+};
+
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::FunctionPropertyCommandBuilder final
+{
+public:
+ FunctionPropertyCommandBuilder &setObjectType(QKnxInterfaceObjectType type);
+ FunctionPropertyCommandBuilder &setObjectInstance(quint8 instance);
+ FunctionPropertyCommandBuilder &setProperty(QKnxInterfaceObjectProperty pid);
+
+ QKnxDeviceManagementFrame createRequest(const QKnxByteArray &data) const;
+ QKnxDeviceManagementFrame createConfirmation(QKnxNetIpCemiServer::ReturnCode code,
+ const QKnxByteArray &data, const QKnxDeviceManagementFrame &request = {}) const;
+ QKnxDeviceManagementFrame createNegativeConfirmation(
+ const QKnxDeviceManagementFrame &request = {}) const;
+
+private:
+ mutable QKnxDeviceManagementFrame::Builder m_builder;
+};
+
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::FunctionPropertyStateReadBuilder final
+{
+public:
+ FunctionPropertyStateReadBuilder &setObjectType(QKnxInterfaceObjectType type);
+ FunctionPropertyStateReadBuilder &setObjectInstance(quint8 instance);
+ FunctionPropertyStateReadBuilder &setProperty(QKnxInterfaceObjectProperty pid);
+
+ QKnxDeviceManagementFrame createRequest(const QKnxByteArray &data) const;
+ QKnxDeviceManagementFrame createConfirmation(QKnxNetIpCemiServer::ReturnCode code,
+ const QKnxByteArray &data, const QKnxDeviceManagementFrame &request = {}) const;
+ QKnxDeviceManagementFrame createNegativeConfirmation(
+ const QKnxDeviceManagementFrame &request = {}) const;
+
+private:
+ mutable QKnxDeviceManagementFrame::Builder m_builder;
+};
+
+class Q_KNX_EXPORT QKnxDeviceManagementFrame::ResetBuilder final
+{
+public:
+ QKnxDeviceManagementFrame createRequest();
+ QKnxDeviceManagementFrame createIndication();
};
QT_END_NAMESPACE
diff --git a/sync.profile b/sync.profile
index a35564c..ba043d3 100644
--- a/sync.profile
+++ b/sync.profile
@@ -5,3 +5,9 @@
%dependencies = (
"qtbase" => ""
);
+
+%classnames = (
+ "qknxnamespace.h" => "QKnx",
+ "qknxnetip.h" => "NetIp,CemiServer",
+ "qknxdevicemanagementframefactory.h" => "QKnxDeviceManagementFrameBuilder,FunctionPropertyCommandBuilder,FunctionPropertyStateReadBuilder,PropertyInfoBuilder,PropertyReadBuilder,PropertyWriteBuilder,ResetBuilder",
+);
diff --git a/tests/auto/qknxdevicemanagementframe/tst_qknxdevicemanagementframe.cpp b/tests/auto/qknxdevicemanagementframe/tst_qknxdevicemanagementframe.cpp
index 7d7ea03..13e7fe1 100644
--- a/tests/auto/qknxdevicemanagementframe/tst_qknxdevicemanagementframe.cpp
+++ b/tests/auto/qknxdevicemanagementframe/tst_qknxdevicemanagementframe.cpp
@@ -95,14 +95,62 @@ private slots:
void testFactory()
{
- auto cemi = QKnxDeviceManagementFrameFactory::PropertyRead
- ::createRequest(QKnxInterfaceObjectType::KnxNetIpParameter, 1,
- QKnxInterfaceObjectProperty::FriendlyName, 1, 0);
+ auto propRead = QKnxDeviceManagementFrame::propertyReadBuilder()
+ .setObjectType(QKnxInterfaceObjectType::KnxNetIpParameter)
+ .setObjectInstance(3)
+ .setProperty(QKnxInterfaceObjectProperty::FriendlyName)
+ .setNumberOfElements(1)
+ .setStartIndex(0).createRequest();
+ QCOMPARE(propRead.messageCode(), QKnxDeviceManagementFrame::MessageCode::PropertyReadRequest);
+ QCOMPARE(propRead.objectType(), QKnxInterfaceObjectType::KnxNetIpParameter);
+ QCOMPARE(propRead.objectInstance(), 3);
+ QCOMPARE(propRead.property(), QKnxInterfaceObjectProperty::FriendlyName);
+ QCOMPARE(propRead.numberOfElements(), 1);
+ QCOMPARE(propRead.startIndex(), 0);
+
+ auto propConf = QKnxDeviceManagementFrame::propertyReadBuilder()
+ .setObjectType(QKnxInterfaceObjectType::KnxNetIpParameter)
+ .setObjectInstance(12)
+ .setProperty(QKnxInterfaceObjectProperty::KnxNetIpParameter::DefaultGateway)
+ .setNumberOfElements(10)
+ .setStartIndex(100).createConfirmation(QKnxByteArray(10, 0xff));
+ QCOMPARE(propConf.messageCode(), QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation);
+ QCOMPARE(propConf.objectType(), QKnxInterfaceObjectType::KnxNetIpParameter);
+ QCOMPARE(propConf.objectInstance(), 12);
+ QCOMPARE(propConf.property(), QKnxInterfaceObjectProperty::DefaultGateway);
+ QCOMPARE(propConf.numberOfElements(), 10);
+ QCOMPARE(propConf.startIndex(), 100);
+ QCOMPARE(propConf.data(), QKnxByteArray(10, 0xff));
+
+ propConf = QKnxDeviceManagementFrame::propertyReadBuilder()
+ .createConfirmation(QKnxByteArray(10, 0xff), propRead);
+ QCOMPARE(propConf.messageCode(), QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation);
+ QCOMPARE(propConf.objectType(), QKnxInterfaceObjectType::KnxNetIpParameter);
+ QCOMPARE(propConf.objectInstance(), 3);
+ QCOMPARE(propConf.property(), QKnxInterfaceObjectProperty::FriendlyName);
+ QCOMPARE(propConf.numberOfElements(), 1);
+ QCOMPARE(propConf.startIndex(), 0);
+ QCOMPARE(propConf.data(), QKnxByteArray(10, 0xff));
+
+ propConf = QKnxDeviceManagementFrame::propertyReadBuilder()
+ .createNegativeConfirmation(QKnx::NetIp::CemiServer::Error::IllegalCommand, propRead);
+ QCOMPARE(propConf.messageCode(), QKnxDeviceManagementFrame::MessageCode::PropertyReadConfirmation);
+ QCOMPARE(propConf.objectType(), QKnxInterfaceObjectType::KnxNetIpParameter);
+ QCOMPARE(propConf.objectInstance(), 3);
+ QCOMPARE(propConf.property(), QKnxInterfaceObjectProperty::FriendlyName);
+ QCOMPARE(propConf.numberOfElements(), 0);
+ QCOMPARE(propConf.startIndex(), 0);
+ QCOMPARE(propConf.data(), QKnxByteArray(1, 0x06));
+ QCOMPARE(propConf.error(), QKnx::NetIp::CemiServer::Error::IllegalCommand);
+ QCOMPARE(propConf.isNegativeConfirmation(), true);
+
// TODO: add some checks against above created cEMI
- cemi = QKnxDeviceManagementFrameFactory::FunctionPropertyCommand
- ::createRequest(QKnxInterfaceObjectType::KnxNetIpParameter, 1,
- QKnxInterfaceObjectProperty::FriendlyName, {});
+ auto cemi = QKnxDeviceManagementFrame::functionPropertyCommandBuilder()
+ .setObjectType(QKnxInterfaceObjectType::KnxNetIpParameter)
+ .setObjectInstance(1)
+ .setProperty(QKnxInterfaceObjectProperty::FriendlyName)
+ .createRequest({ 0x00, 0x01, 0x02 });
// TODO: add some checks against above created cEMI
}
diff --git a/tests/auto/qknxnetipdeviceconfigurationrequest/tst_qknxnetipdeviceconfigurationrequest.cpp b/tests/auto/qknxnetipdeviceconfigurationrequest/tst_qknxnetipdeviceconfigurationrequest.cpp
index 3720fad..0922b4f 100644
--- a/tests/auto/qknxnetipdeviceconfigurationrequest/tst_qknxnetipdeviceconfigurationrequest.cpp
+++ b/tests/auto/qknxnetipdeviceconfigurationrequest/tst_qknxnetipdeviceconfigurationrequest.cpp
@@ -57,9 +57,13 @@ void tst_QKnxNetIpDeviceConfigurationRequest::testDefaultConstructor()
void tst_QKnxNetIpDeviceConfigurationRequest::testConstructor()
{
- auto cemi = QKnxDeviceManagementFrameFactory::PropertyRead
- ::createRequest(QKnxInterfaceObjectType::KnxNetIpParameter, 1,
- QKnxInterfaceObjectProperty::FriendlyName, 1, 0);
+ auto cemi = QKnxDeviceManagementFrame::propertyReadBuilder()
+ .setObjectType(QKnxInterfaceObjectType::KnxNetIpParameter)
+ .setObjectInstance(1)
+ .setProperty(QKnxInterfaceObjectProperty::FriendlyName)
+ .setNumberOfElements(1)
+ .setStartIndex(0)
+ .createRequest();
auto frame = QKnxNetIpDeviceConfigurationRequestProxy::builder()
.setChannelId(1)
.setSequenceNumber(1)
@@ -90,9 +94,13 @@ void tst_QKnxNetIpDeviceConfigurationRequest::testDebugStream()
qDebug() << QKnxNetIpDeviceConfigurationRequestProxy::builder().create();
QCOMPARE(s_msg, QString::fromLatin1("0x06100310000b0400000000"));
- auto cemi = QKnxDeviceManagementFrameFactory::PropertyRead
- ::createRequest(QKnxInterfaceObjectType::System::Device, 1,
- QKnxInterfaceObjectProperty::Device::DeviceDescriptor, 1, 1);
+ auto cemi = QKnxDeviceManagementFrame::propertyReadBuilder()
+ .setObjectType(QKnxInterfaceObjectType::System::Device)
+ .setObjectInstance(1)
+ .setProperty(QKnxInterfaceObjectProperty::Device::DeviceDescriptor)
+ .setNumberOfElements(1)
+ .setStartIndex(1)
+ .createRequest();
qDebug() << QKnxNetIpDeviceConfigurationRequestProxy::builder()
.setChannelId(2)
.setSequenceNumber(0)