Fix attribute parsing
This commit is contained in:
parent
b55b215ab2
commit
293ac1b197
@ -1104,10 +1104,10 @@ void ZigbeeNetworkManager::processAttributeReport(const ZigbeeInterfaceMessage &
|
|||||||
stream >> sequenceNumber >> sourceAddress >> endPoint >> clusterId >> attributeId >> attributeStatus >> attributDataType >> dataSize;
|
stream >> sequenceNumber >> sourceAddress >> endPoint >> clusterId >> attributeId >> attributeStatus >> attributDataType >> dataSize;
|
||||||
|
|
||||||
Zigbee::DataType dataType = static_cast<Zigbee::DataType>(attributDataType);
|
Zigbee::DataType dataType = static_cast<Zigbee::DataType>(attributDataType);
|
||||||
QByteArray attributeData = data.left(dataSize);
|
QByteArray attributeData = data.right(dataSize);
|
||||||
|
|
||||||
if (attributeData.length() != dataSize) {
|
if (attributeData.length() != dataSize) {
|
||||||
qCCritical(dcZigbeeNetwork()) << "HACK";
|
qCCritical(dcZigbeeNetwork()) << "HACK" << attributeData.length() << "!=" << dataSize;
|
||||||
// Note: the NXP firmware for JN5169 has a bug here and does not send the attributeStatus.
|
// Note: the NXP firmware for JN5169 has a bug here and does not send the attributeStatus.
|
||||||
// Repars data without attribute status
|
// Repars data without attribute status
|
||||||
sequenceNumber = 0;
|
sequenceNumber = 0;
|
||||||
@ -1123,7 +1123,7 @@ void ZigbeeNetworkManager::processAttributeReport(const ZigbeeInterfaceMessage &
|
|||||||
alternativeStream >> sequenceNumber >> sourceAddress >> endPoint >> clusterId >> attributeId >> attributDataType >> dataSize;
|
alternativeStream >> sequenceNumber >> sourceAddress >> endPoint >> clusterId >> attributeId >> attributDataType >> dataSize;
|
||||||
|
|
||||||
dataType = static_cast<Zigbee::DataType>(attributDataType);
|
dataType = static_cast<Zigbee::DataType>(attributDataType);
|
||||||
attributeData = data.left(dataSize);
|
attributeData = data.right(dataSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
qCDebug(dcZigbeeNetwork()) << "Attribute report:";
|
qCDebug(dcZigbeeNetwork()) << "Attribute report:";
|
||||||
@ -1134,14 +1134,14 @@ void ZigbeeNetworkManager::processAttributeReport(const ZigbeeInterfaceMessage &
|
|||||||
qCDebug(dcZigbeeNetwork()) << " Attribut id:" << ZigbeeUtils::convertUint16ToHexString(attributeId);
|
qCDebug(dcZigbeeNetwork()) << " Attribut id:" << ZigbeeUtils::convertUint16ToHexString(attributeId);
|
||||||
qCDebug(dcZigbeeNetwork()) << " Attribut data type:" << dataType;
|
qCDebug(dcZigbeeNetwork()) << " Attribut data type:" << dataType;
|
||||||
qCDebug(dcZigbeeNetwork()) << " Attribut size:" << dataSize;
|
qCDebug(dcZigbeeNetwork()) << " Attribut size:" << dataSize;
|
||||||
qCDebug(dcZigbeeNetwork()) << " Data:" << ZigbeeUtils::convertByteArrayToHexString(data);
|
qCDebug(dcZigbeeNetwork()) << " Data:" << ZigbeeUtils::convertByteArrayToHexString(attributeData);
|
||||||
|
|
||||||
switch (dataType) {
|
switch (dataType) {
|
||||||
case Zigbee::CharString:
|
case Zigbee::CharString:
|
||||||
qCDebug(dcZigbeeNetwork()) << " Data(converted)" << QString::fromUtf8(data);
|
qCDebug(dcZigbeeNetwork()) << " Data(converted)" << QString::fromUtf8(attributeData);
|
||||||
break;
|
break;
|
||||||
case Zigbee::Bool:
|
case Zigbee::Bool:
|
||||||
qCDebug(dcZigbeeNetwork()) << " Data(converted)" << static_cast<bool>(data.at(0));
|
qCDebug(dcZigbeeNetwork()) << " Data(converted)" << static_cast<bool>(attributeData.at(0));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1153,7 +1153,7 @@ void ZigbeeNetworkManager::processAttributeReport(const ZigbeeInterfaceMessage &
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
node->setClusterAttribute(static_cast<Zigbee::ClusterId>(clusterId), ZigbeeClusterAttribute(attributeId, dataType, data));
|
node->setClusterAttribute(static_cast<Zigbee::ClusterId>(clusterId), ZigbeeClusterAttribute(attributeId, dataType, attributeData));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZigbeeNetworkManager::processLeaveIndication(const ZigbeeInterfaceMessage &message)
|
void ZigbeeNetworkManager::processLeaveIndication(const ZigbeeInterfaceMessage &message)
|
||||||
|
|||||||
Reference in New Issue
Block a user