diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-05-07 14:27:50 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-05-14 20:24:27 +0000 |
commit | 6b413b757ba9d9d0f5a644bdec7835abe2f34612 (patch) | |
tree | ccb35ad32b845c575e17e4fcccfb16c978bf24a9 | |
parent | fa91849f5d2a320bbc09067bc2aea42fdb8cfd23 (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.cpp | 22 | ||||
-rw-r--r-- | src/knx/qknxdevicemanagementframe.cpp | 70 | ||||
-rw-r--r-- | src/knx/qknxdevicemanagementframe.h | 31 | ||||
-rw-r--r-- | src/knx/qknxdevicemanagementframefactory.cpp | 396 | ||||
-rw-r--r-- | src/knx/qknxdevicemanagementframefactory.h | 263 | ||||
-rw-r--r-- | sync.profile | 6 | ||||
-rw-r--r-- | tests/auto/qknxdevicemanagementframe/tst_qknxdevicemanagementframe.cpp | 60 | ||||
-rw-r--r-- | tests/auto/qknxnetipdeviceconfigurationrequest/tst_qknxnetipdeviceconfigurationrequest.cpp | 20 |
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) |