Expose raw dataIndications and allow sending raw commands on ZigbeeCluster
This commit is contained in:
parent
cdc60ad00f
commit
75d286b29a
@ -212,7 +212,7 @@ ZigbeeClusterReply *ZigbeeCluster::createClusterReply(const ZigbeeNetworkRequest
|
|||||||
return zclReply;
|
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();
|
ZigbeeNetworkRequest request = createGeneralRequest();
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ ZigbeeClusterReply *ZigbeeCluster::executeClusterCommand(quint8 command, const Q
|
|||||||
frameControl.frameType = ZigbeeClusterLibrary::FrameTypeClusterSpecific;
|
frameControl.frameType = ZigbeeClusterLibrary::FrameTypeClusterSpecific;
|
||||||
frameControl.manufacturerSpecific = false;
|
frameControl.manufacturerSpecific = false;
|
||||||
frameControl.direction = direction;
|
frameControl.direction = direction;
|
||||||
frameControl.disableDefaultResponse = false;
|
frameControl.disableDefaultResponse = disableDefaultResponse;
|
||||||
|
|
||||||
// Build ZCL header
|
// Build ZCL header
|
||||||
ZigbeeClusterLibrary::Header header;
|
ZigbeeClusterLibrary::Header header;
|
||||||
@ -419,7 +419,8 @@ void ZigbeeCluster::finishZclReply(ZigbeeClusterReply *zclReply)
|
|||||||
void ZigbeeCluster::processDataIndication(ZigbeeClusterLibrary::Frame frame)
|
void ZigbeeCluster::processDataIndication(ZigbeeClusterLibrary::Frame frame)
|
||||||
{
|
{
|
||||||
// Warn about the unhandled cluster indication, you can override this method in cluster implementations
|
// 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()
|
quint8 ZigbeeCluster::newTransactionSequenceNumber()
|
||||||
|
|||||||
@ -94,6 +94,22 @@ public:
|
|||||||
ZigbeeClusterReply *writeAttributes(QList<ZigbeeClusterLibrary::WriteAttributeRecord> writeAttributeRecords, quint16 manufacturerCode = 0x0000);
|
ZigbeeClusterReply *writeAttributes(QList<ZigbeeClusterLibrary::WriteAttributeRecord> writeAttributeRecords, quint16 manufacturerCode = 0x0000);
|
||||||
ZigbeeClusterReply *configureReporting(QList<ZigbeeClusterLibrary::AttributeReportingConfiguration> reportingConfigurations, quint16 manufacturerCode = 0x0000);
|
ZigbeeClusterReply *configureReporting(QList<ZigbeeClusterLibrary::AttributeReportingConfiguration> 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:
|
protected:
|
||||||
ZigbeeNetwork *m_network = nullptr;
|
ZigbeeNetwork *m_network = nullptr;
|
||||||
ZigbeeNode *m_node = nullptr;
|
ZigbeeNode *m_node = nullptr;
|
||||||
@ -103,23 +119,8 @@ protected:
|
|||||||
Direction m_direction = Server;
|
Direction m_direction = Server;
|
||||||
QHash<quint16, ZigbeeClusterAttribute> m_attributes;
|
QHash<quint16, ZigbeeClusterAttribute> m_attributes;
|
||||||
|
|
||||||
// Helper methods for sending cluster specific commands
|
|
||||||
ZigbeeNetworkRequest createGeneralRequest();
|
|
||||||
QHash<quint8, ZigbeeClusterReply *> m_pendingReplies;
|
QHash<quint8, ZigbeeClusterReply *> 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 processDataIndication(ZigbeeClusterLibrary::Frame frame);
|
||||||
|
|
||||||
virtual void setAttribute(const ZigbeeClusterAttribute &attribute);
|
virtual void setAttribute(const ZigbeeClusterAttribute &attribute);
|
||||||
@ -128,6 +129,7 @@ protected:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void attributeChanged(const ZigbeeClusterAttribute &attribute);
|
void attributeChanged(const ZigbeeClusterAttribute &attribute);
|
||||||
|
void dataIndication(const ZigbeeClusterLibrary::Frame &frame);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void processApsDataIndication(const QByteArray &asdu, const ZigbeeClusterLibrary::Frame &frame);
|
void processApsDataIndication(const QByteArray &asdu, const ZigbeeClusterLibrary::Frame &frame);
|
||||||
|
|||||||
Reference in New Issue
Block a user