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.
This commit is contained in:
Michael Zanetti 2022-04-23 23:27:18 +02:00
parent 187278cf7c
commit 4f63ae01c0
2 changed files with 7 additions and 3 deletions

View File

@ -48,8 +48,6 @@ ZigbeeNetwork::ZigbeeNetwork(const QUuid &networkUuid, QObject *parent) :
if (m_permitJoiningRemaining <= 0) { if (m_permitJoiningRemaining <= 0) {
m_permitJoinTimer->stop(); m_permitJoinTimer->stop();
setPermitJoining(0); setPermitJoining(0);
} else {
setPermitJoiningState(m_permitJoiningRemaining, m_permitJoiningRemaining);
} }
}); });
@ -491,11 +489,13 @@ void ZigbeeNetwork::setPermitJoiningState(bool permitJoiningEnabled, quint8 dura
emit permitJoinDurationChanged(duration); emit permitJoinDurationChanged(duration);
} }
m_permitJoiningRemaining = duration; m_permitJoiningRemaining = duration;
emit permitJoinRemainingChanged(m_permitJoiningRemaining);
m_permitJoinTimer->start(); m_permitJoinTimer->start();
} else { } else {
m_permitJoiningDuration = 0; m_permitJoiningDuration = 0;
emit permitJoinDurationChanged(0); emit permitJoinDurationChanged(0);
m_permitJoiningRemaining = 0; m_permitJoiningRemaining = 0;
emit permitJoinRemainingChanged(0);
m_permitJoinTimer->stop(); m_permitJoinTimer->stop();
} }

View File

@ -245,11 +245,15 @@ signals:
void nodeAdded(ZigbeeNode *node); void nodeAdded(ZigbeeNode *node);
void nodeRemoved(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 nodeJoined(ZigbeeNode *node);
void permitJoiningEnabledChanged(bool permitJoiningEnabled); void permitJoiningEnabledChanged(bool permitJoiningEnabled);
void permitJoinDurationChanged(quint8 duration); 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 permitJoinRemainingChanged(quint8 remaining);
void errorOccured(Error error); void errorOccured(Error error);