From 4f63ae01c0c17feaca0801456e0a21151769a5e0 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 23 Apr 2022 23:27:18 +0200 Subject: [PATCH] Fix permit joining duration/remaining signals * Prevent resetting the duration repeatedly by not calling setPermitJoiningState in the timer any more * Added signal emissions for when remaining changes in an unexpected manner. --- libnymea-zigbee/zigbeenetwork.cpp | 4 ++-- libnymea-zigbee/zigbeenetwork.h | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libnymea-zigbee/zigbeenetwork.cpp b/libnymea-zigbee/zigbeenetwork.cpp index 99872c2..f769487 100644 --- a/libnymea-zigbee/zigbeenetwork.cpp +++ b/libnymea-zigbee/zigbeenetwork.cpp @@ -48,8 +48,6 @@ ZigbeeNetwork::ZigbeeNetwork(const QUuid &networkUuid, QObject *parent) : if (m_permitJoiningRemaining <= 0) { m_permitJoinTimer->stop(); setPermitJoining(0); - } else { - setPermitJoiningState(m_permitJoiningRemaining, m_permitJoiningRemaining); } }); @@ -491,11 +489,13 @@ void ZigbeeNetwork::setPermitJoiningState(bool permitJoiningEnabled, quint8 dura emit permitJoinDurationChanged(duration); } m_permitJoiningRemaining = duration; + emit permitJoinRemainingChanged(m_permitJoiningRemaining); m_permitJoinTimer->start(); } else { m_permitJoiningDuration = 0; emit permitJoinDurationChanged(0); m_permitJoiningRemaining = 0; + emit permitJoinRemainingChanged(0); m_permitJoinTimer->stop(); } diff --git a/libnymea-zigbee/zigbeenetwork.h b/libnymea-zigbee/zigbeenetwork.h index ba7c663..98e6da4 100644 --- a/libnymea-zigbee/zigbeenetwork.h +++ b/libnymea-zigbee/zigbeenetwork.h @@ -245,11 +245,15 @@ signals: void nodeAdded(ZigbeeNode *node); void nodeRemoved(ZigbeeNode *node); - // Will be emited when a node joined and starts initializing + // Will be emitted when a node joined and starts initializing void nodeJoined(ZigbeeNode *node); void permitJoiningEnabledChanged(bool permitJoiningEnabled); void permitJoinDurationChanged(quint8 duration); + // Will be emitted when the remaining duration changes in an unexpected + // manner. That means, it will not be emitted repeatedly every second, + // despite calling permitJoinRemainining() returning updated values, + // but it will be emitted for instance when it restarts or is aborted. void permitJoinRemainingChanged(quint8 remaining); void errorOccured(Error error);