From 18f879e02ab916928e884c8f126109ee93506523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 27 Mar 2020 16:35:00 +0100 Subject: [PATCH] Remove default response parsing since not reliable --- .../nxp/zigbeebridgecontrollernxp.cpp | 13 +++++------ libnymea-zigbee/nxp/zigbeenetworknxp.cpp | 1 + libnymea-zigbee/nxp/zigbeenodeendpointnxp.cpp | 22 +++++++++---------- libnymea-zigbee/zigbee.h | 1 + 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/libnymea-zigbee/nxp/zigbeebridgecontrollernxp.cpp b/libnymea-zigbee/nxp/zigbeebridgecontrollernxp.cpp index 5d232dc..38c4a2d 100644 --- a/libnymea-zigbee/nxp/zigbeebridgecontrollernxp.cpp +++ b/libnymea-zigbee/nxp/zigbeebridgecontrollernxp.cpp @@ -555,7 +555,6 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandOnOffNoEffects(quint8 ad stream << static_cast(command); ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeCluserOnOff, data)); - request.setExpectedAdditionalMessageType(Zigbee::InterfaceMessageType::MessageTypeDefaultResponse); request.setDescription("Send on/off cluster command"); request.setTimoutIntervall(5000); @@ -593,7 +592,7 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandMoveToLevel(quint8 addre stream << transitionTime; ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeMoveToLevelOnOff, data)); - request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); + //request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); request.setDescription(QString("Move to level on/off %1").arg(level)); request.setTimoutIntervall(5000); @@ -612,7 +611,7 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandMoveToColourTemperature( stream << transitionTime; ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeMoveToColorTemperature, data)); - request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); + //request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); request.setDescription(QString("Move to colour temperature %1").arg(colourTemperature)); request.setTimoutIntervall(5000); @@ -631,7 +630,7 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandMoveToColor(quint8 addre stream << transitionTime; ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeMoveToColor, data)); - request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); + //request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); request.setDescription(QString("Move to colour %1, %2").arg(x).arg(y)); request.setTimoutIntervall(5000); @@ -650,7 +649,7 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandMoveToHueSaturation(quin stream << transitionTime; ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeMoveToHueSaturation, data)); - request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); + //request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); request.setDescription(QString("Move to hue %1 saturation %2").arg(hue).arg(saturation)); request.setTimoutIntervall(5000); @@ -669,7 +668,7 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandMoveToHue(quint8 address stream << transitionTime; ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeMoveToHue, data)); - request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); + //request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); request.setDescription(QString("Move to hue %1").arg(hue)); request.setTimoutIntervall(5000); @@ -688,7 +687,7 @@ ZigbeeInterfaceReply *ZigbeeBridgeControllerNxp::commandMoveToSaturation(quint8 stream << transitionTime; ZigbeeInterfaceRequest request(ZigbeeInterfaceMessage(Zigbee::MessageTypeMoveToSaturation, data)); - request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); + //request.setExpectedAdditionalMessageType(Zigbee::MessageTypeDefaultResponse); request.setDescription(QString("Move to saturation %1").arg(saturation)); request.setTimoutIntervall(5000); diff --git a/libnymea-zigbee/nxp/zigbeenetworknxp.cpp b/libnymea-zigbee/nxp/zigbeenetworknxp.cpp index 81c3984..fee92ff 100644 --- a/libnymea-zigbee/nxp/zigbeenetworknxp.cpp +++ b/libnymea-zigbee/nxp/zigbeenetworknxp.cpp @@ -803,6 +803,7 @@ void ZigbeeNetworkNxp::processDefaultResponse(const ZigbeeInterfaceMessage &mess qCDebug(dcZigbeeNetwork()) << " Command:" << ZigbeeUtils::convertByteToHexString(commandId); qCDebug(dcZigbeeNetwork()) << " Command status:" << static_cast(commandStatus); + // FIXME: check if this is related to a current reply } void ZigbeeNetworkNxp::onMessageReceived(const ZigbeeInterfaceMessage &message) diff --git a/libnymea-zigbee/nxp/zigbeenodeendpointnxp.cpp b/libnymea-zigbee/nxp/zigbeenodeendpointnxp.cpp index 48ba280..97ffdcd 100644 --- a/libnymea-zigbee/nxp/zigbeenodeendpointnxp.cpp +++ b/libnymea-zigbee/nxp/zigbeenodeendpointnxp.cpp @@ -41,7 +41,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::readAttribute(ZigbeeCluster *cluster, qCDebug(dcZigbeeNode()) << "Read" << node() << cluster << attributes; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandReadAttributeRequest(0x02, node()->shortAddress(), 0x01, + ZigbeeInterfaceReply *reply = m_controller->commandReadAttributeRequest(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), cluster, attributes, false, node()->manufacturerCode()); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ @@ -72,7 +72,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::configureReporting(ZigbeeCluster *clu // FIXME: check the report configuration and the direction field according to specs ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandConfigureReportingRequest(0x02, node()->shortAddress(), 0x01, + ZigbeeInterfaceReply *reply = m_controller->commandConfigureReportingRequest(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), cluster, 0x00, false, node()->manufacturerCode(), reportConfigurations); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ @@ -97,7 +97,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::identify(quint16 seconds) { qCDebug(dcZigbeeNode()) << "Identify" << node() << seconds << seconds; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandIdentify(0x02, node()->shortAddress(), 0x01, endpointId(), seconds); + ZigbeeInterfaceReply *reply = m_controller->commandIdentify(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), seconds); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -185,7 +185,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendOnOffClusterCommand(ZigbeeCluster { qCDebug(dcZigbeeNode()) << "Send on/off cluster command" << node() << command; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandOnOffNoEffects(0x02, node()->shortAddress(), 0x01, endpointId(), command); + ZigbeeInterfaceReply *reply = m_controller->commandOnOffNoEffects(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), command); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -206,7 +206,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::addGroup(quint8 destinationEndpoint, { qCDebug(dcZigbeeNode()) << "Add group request" << node() << destinationEndpoint << groupAddress; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandAddGroup(0x02, node()->shortAddress(), 0x01, endpointId(), groupAddress); + ZigbeeInterfaceReply *reply = m_controller->commandAddGroup(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), groupAddress); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -228,7 +228,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendLevelCommand(ZigbeeCluster::Level { qCDebug(dcZigbeeNode()) << "Move to level request" << node() << command << level; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandMoveToLevel(0x02, node()->shortAddress(), 0x01, endpointId(), triggersOnOff, level, transitionTime); + ZigbeeInterfaceReply *reply = m_controller->commandMoveToLevel(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), triggersOnOff, level, transitionTime); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -251,7 +251,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendMoveToColorTemperature(quint16 co { qCDebug(dcZigbeeNode()) << "Move to level request" << node() << colourTemperature << transitionTime; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandMoveToColourTemperature(0x02, node()->shortAddress(), 0x01, endpointId(), colourTemperature, transitionTime); + ZigbeeInterfaceReply *reply = m_controller->commandMoveToColourTemperature(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), colourTemperature, transitionTime); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -278,7 +278,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendMoveToColor(double x, double y, q quint16 normalizedY = static_cast(qRound(y * 65536)); ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandMoveToColor(0x02, node()->shortAddress(), 0x01, endpointId(), normalizedX, normalizedY, transitionTime); + ZigbeeInterfaceReply *reply = m_controller->commandMoveToColor(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), normalizedX, normalizedY, transitionTime); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -301,7 +301,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendMoveToHueSaturation(quint8 hue, q { qCDebug(dcZigbeeNode()) << "Move to hue saturation request" << node() << hue << saturation << transitionTime; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandMoveToHueSaturation(0x02, node()->shortAddress(), 0x01, endpointId(), hue, saturation, transitionTime); + ZigbeeInterfaceReply *reply = m_controller->commandMoveToHueSaturation(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), hue, saturation, transitionTime); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -324,7 +324,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendMoveToHue(quint8 hue, quint16 tra { qCDebug(dcZigbeeNode()) << "Move to hue request" << node() << hue << transitionTime; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandMoveToHue(0x02, node()->shortAddress(), 0x01, endpointId(), hue, transitionTime); + ZigbeeInterfaceReply *reply = m_controller->commandMoveToHue(Zigbee::DestinationAddressModeShortAddress, node()->shortAddress(), 0x01, endpointId(), hue, transitionTime); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); @@ -347,7 +347,7 @@ ZigbeeNetworkReply *ZigbeeNodeEndpointNxp::sendMoveToSaturation(quint8 saturatio { qCDebug(dcZigbeeNode()) << "Move to saturation request" << node() << saturation << transitionTime; ZigbeeNetworkReply *networkReply = createNetworkReply(); - ZigbeeInterfaceReply *reply = m_controller->commandMoveToSaturation(0x02, node()->shortAddress(), 0x01, endpointId(), saturation, transitionTime); + ZigbeeInterfaceReply *reply = m_controller->commandMoveToSaturation(Zigbee::DestinationAddressModeShortAddress , node()->shortAddress(), 0x01, endpointId(), saturation, transitionTime); connect(reply, &ZigbeeInterfaceReply::finished, this, [this, reply, networkReply](){ reply->deleteLater(); diff --git a/libnymea-zigbee/zigbee.h b/libnymea-zigbee/zigbee.h index 99a534f..10cdf2c 100644 --- a/libnymea-zigbee/zigbee.h +++ b/libnymea-zigbee/zigbee.h @@ -535,6 +535,7 @@ public: enum DestinationAddressMode { DestinationAddressModeGroup = 0x01, + DestinationAddressModeShortAddress = 0x02, DestinationAddressModeUnicastIeee = 0x03 }; Q_ENUM(DestinationAddressMode)