diff --git a/libnymea-zigbee/zcl/zigbeecluster.cpp b/libnymea-zigbee/zcl/zigbeecluster.cpp index d115cce..27e1f5c 100644 --- a/libnymea-zigbee/zcl/zigbeecluster.cpp +++ b/libnymea-zigbee/zcl/zigbeecluster.cpp @@ -212,7 +212,7 @@ ZigbeeClusterReply *ZigbeeCluster::createClusterReply(const ZigbeeNetworkRequest return zclReply; } -ZigbeeClusterReply *ZigbeeCluster::executeClusterCommand(quint8 command, const QByteArray &payload, ZigbeeClusterLibrary::Direction direction) +ZigbeeClusterReply *ZigbeeCluster::executeClusterCommand(quint8 command, const QByteArray &payload, ZigbeeClusterLibrary::Direction direction, bool disableDefaultResponse) { ZigbeeNetworkRequest request = createGeneralRequest(); @@ -221,7 +221,7 @@ ZigbeeClusterReply *ZigbeeCluster::executeClusterCommand(quint8 command, const Q frameControl.frameType = ZigbeeClusterLibrary::FrameTypeClusterSpecific; frameControl.manufacturerSpecific = false; frameControl.direction = direction; - frameControl.disableDefaultResponse = false; + frameControl.disableDefaultResponse = disableDefaultResponse; // Build ZCL header ZigbeeClusterLibrary::Header header; @@ -419,7 +419,8 @@ void ZigbeeCluster::finishZclReply(ZigbeeClusterReply *zclReply) void ZigbeeCluster::processDataIndication(ZigbeeClusterLibrary::Frame frame) { // Warn about the unhandled cluster indication, you can override this method in cluster implementations - qCWarning(dcZigbeeCluster()) << "Unhandled ZCL indication in" << m_node << m_endpoint << this << frame; + qCDebug(dcZigbeeCluster()) << "Unhandled ZCL indication in" << m_node << m_endpoint << this << frame; + emit dataIndication(frame); } quint8 ZigbeeCluster::newTransactionSequenceNumber() diff --git a/libnymea-zigbee/zcl/zigbeecluster.h b/libnymea-zigbee/zcl/zigbeecluster.h index cab2470..597145f 100644 --- a/libnymea-zigbee/zcl/zigbeecluster.h +++ b/libnymea-zigbee/zcl/zigbeecluster.h @@ -94,6 +94,22 @@ public: ZigbeeClusterReply *writeAttributes(QList writeAttributeRecords, quint16 manufacturerCode = 0x0000); ZigbeeClusterReply *configureReporting(QList reportingConfigurations, quint16 manufacturerCode = 0x0000); + // Helper methods for sending cluster specific commands + ZigbeeNetworkRequest createGeneralRequest(); + + // Global commands + ZigbeeClusterReply *executeGlobalCommand(quint8 command, const QByteArray &payload = QByteArray(), quint16 manufacturerCode = 0x0000, quint8 transactionSequenceNumber = newTransactionSequenceNumber()); + + // Cluster specific + ZigbeeClusterReply *createClusterReply(const ZigbeeNetworkRequest &request, ZigbeeClusterLibrary::Frame frame); + ZigbeeClusterReply *executeClusterCommand(quint8 command, const QByteArray &payload = QByteArray(), ZigbeeClusterLibrary::Direction direction = ZigbeeClusterLibrary::DirectionClientToServer, bool disableDefaultResponse = false); + + ZigbeeClusterReply *sendClusterServerResponse(quint8 command, quint8 transactionSequenceNumber, const QByteArray &payload = QByteArray()); + ZigbeeClusterReply *sendDefaultResponse(quint8 transactionSequenceNumber, quint8 command, quint8 status); + + bool verifyNetworkError(ZigbeeClusterReply *zclReply, ZigbeeNetworkReply *networkReply); + void finishZclReply(ZigbeeClusterReply *zclReply); + protected: ZigbeeNetwork *m_network = nullptr; ZigbeeNode *m_node = nullptr; @@ -103,23 +119,8 @@ protected: Direction m_direction = Server; QHash m_attributes; - // Helper methods for sending cluster specific commands - ZigbeeNetworkRequest createGeneralRequest(); QHash m_pendingReplies; - // Global commands - ZigbeeClusterReply *executeGlobalCommand(quint8 command, const QByteArray &payload = QByteArray(), quint16 manufacturerCode = 0x0000, quint8 transactionSequenceNumber = newTransactionSequenceNumber()); - - // Cluster specific - ZigbeeClusterReply *createClusterReply(const ZigbeeNetworkRequest &request, ZigbeeClusterLibrary::Frame frame); - ZigbeeClusterReply *executeClusterCommand(quint8 command, const QByteArray &payload = QByteArray(), ZigbeeClusterLibrary::Direction direction = ZigbeeClusterLibrary::DirectionClientToServer); - - ZigbeeClusterReply *sendClusterServerResponse(quint8 command, quint8 transactionSequenceNumber, const QByteArray &payload = QByteArray()); - ZigbeeClusterReply *sendDefaultResponse(quint8 transactionSequenceNumber, quint8 command, quint8 status); - - bool verifyNetworkError(ZigbeeClusterReply *zclReply, ZigbeeNetworkReply *networkReply); - void finishZclReply(ZigbeeClusterReply *zclReply); - virtual void processDataIndication(ZigbeeClusterLibrary::Frame frame); virtual void setAttribute(const ZigbeeClusterAttribute &attribute); @@ -128,6 +129,7 @@ protected: signals: void attributeChanged(const ZigbeeClusterAttribute &attribute); + void dataIndication(const ZigbeeClusterLibrary::Frame &frame); public slots: void processApsDataIndication(const QByteArray &asdu, const ZigbeeClusterLibrary::Frame &frame);