Merge branch 'nxp-backend' of github.com:nymea/nymea-zigbee into nxp-backend

pull/8/head
Simon Stürz 2020-10-05 16:37:27 +02:00
commit a219fa46ef
4 changed files with 34 additions and 0 deletions

View File

@ -116,6 +116,17 @@ ZigbeeClusterReply *ZigbeeCluster::readAttributes(QList<quint16> attributes)
return executeGlobalCommand(ZigbeeClusterLibrary::CommandReadAttributes, payload);
}
ZigbeeClusterReply *ZigbeeCluster::writeAttributes(QList<ZigbeeClusterLibrary::WriteAttributeRecord> writeAttributeRecords)
{
qCDebug(dcZigbeeCluster()) << "Write attributes on" << m_node << m_endpoint << this;
QByteArray payload;
foreach (const ZigbeeClusterLibrary::WriteAttributeRecord &writeAttributeRecord, writeAttributeRecords) {
payload += ZigbeeClusterLibrary::buildWriteAttributeRecord(writeAttributeRecord);
}
return executeGlobalCommand(ZigbeeClusterLibrary::CommandWriteAttributes, payload);
}
ZigbeeClusterReply *ZigbeeCluster::configureReporting(QList<ZigbeeClusterLibrary::AttributeReportingConfiguration> reportingConfigurations)
{
qCDebug(dcZigbeeCluster()) << "Configure reporting on" << m_node << m_endpoint << this << reportingConfigurations;

View File

@ -91,6 +91,7 @@ public:
// ZCL global commands
ZigbeeClusterReply *readAttributes(QList<quint16> attributes);
ZigbeeClusterReply *writeAttributes(QList<ZigbeeClusterLibrary::WriteAttributeRecord> writeAttributeRecords);
ZigbeeClusterReply *configureReporting(QList<ZigbeeClusterLibrary::AttributeReportingConfiguration> reportingConfigurations);

View File

@ -276,6 +276,20 @@ QByteArray ZigbeeClusterLibrary::buildAttributeReportingConfiguration(const Zigb
return payload;
}
QByteArray ZigbeeClusterLibrary::buildWriteAttributeRecord(const ZigbeeClusterLibrary::WriteAttributeRecord &writeAttributeRecord)
{
QByteArray payload;
QDataStream stream(&payload, QIODevice::WriteOnly);
stream.setByteOrder(QDataStream::LittleEndian);
stream << writeAttributeRecord.attributeId;
stream << static_cast<quint8>(writeAttributeRecord.dataType);
for (int i = 0; i < writeAttributeRecord.data.count(); i++) {
stream << static_cast<quint8>(writeAttributeRecord.data.at(i));
}
return payload;
}
QList<ZigbeeClusterLibrary::AttributeReportingStatusRecord> ZigbeeClusterLibrary::parseAttributeReportingStatusRecords(const QByteArray &payload)
{
QList<ZigbeeClusterLibrary::AttributeReportingStatusRecord> statusRecords;

View File

@ -251,6 +251,13 @@ public:
ZigbeeDataType dataType;
} ReadAttributeStatusRecord;
// Write attribute
typedef struct WriteAttributeRecord {
quint16 attributeId;
Zigbee::DataType dataType;
QByteArray data;
} WriteAttributeRecord;
// Reporting attributes
typedef struct AttributeReportingConfiguration {
ReportingDirection direction = ReportingDirectionReporting;
@ -286,6 +293,7 @@ public:
// AttributeReportingConfiguration
static QByteArray buildAttributeReportingConfiguration(const AttributeReportingConfiguration &reportingConfiguration);
static QByteArray buildWriteAttributeRecord(const WriteAttributeRecord &writeAttributeRecord);
// TODO: parseAttributeReportingConfiguration
static QList<AttributeReportingStatusRecord> parseAttributeReportingStatusRecords(const QByteArray &payload);