Merge PR #43: Consolidate permit joining timer
commit
2af5d1a759
|
|
@ -99,11 +99,6 @@ void ZigbeeNetworkDeconz::setPermitJoining(quint8 duration, quint16 address)
|
|||
qCDebug(dcZigbeeNetwork()) << "Disable permit join on"<< ZigbeeUtils::convertUint16ToHexString(address);
|
||||
}
|
||||
|
||||
// Note: will be reseted if permit join will not work
|
||||
setPermitJoiningEnabled(duration > 0);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningRemaining(duration);
|
||||
|
||||
// Note: since compliance version >= 21 the value 255 is not any more endless.
|
||||
// We need to refresh the command on timeout repeatedly if the duration is longer than 254 s
|
||||
|
||||
|
|
@ -111,20 +106,12 @@ void ZigbeeNetworkDeconz::setPermitJoining(quint8 duration, quint16 address)
|
|||
connect(reply, &ZigbeeNetworkReply::finished, this, [this, reply, duration, address](){
|
||||
if (reply->zigbeeApsStatus() != Zigbee::ZigbeeApsStatusSuccess) {
|
||||
qCWarning(dcZigbeeNetwork()) << "Could not set permit join to" << duration << ZigbeeUtils::convertUint16ToHexString(address) << reply->zigbeeApsStatus();
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningState(false);
|
||||
return;
|
||||
}
|
||||
qCDebug(dcZigbeeNetwork()) << "Permit join request finished successfully";
|
||||
|
||||
setPermitJoiningEnabled(duration > 0);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningRemaining(duration);
|
||||
if (duration > 0) {
|
||||
m_permitJoinTimer->start();
|
||||
} else {
|
||||
m_permitJoinTimer->stop();
|
||||
}
|
||||
setPermitJoiningState(duration > 0, duration);
|
||||
|
||||
// Set the permit joining timeout network configuration parameter
|
||||
QByteArray parameterData;
|
||||
|
|
@ -530,7 +517,7 @@ void ZigbeeNetworkDeconz::runNetworkInitProcess()
|
|||
if (m_controller->networkState() == Deconz::NetworkStateConnected) {
|
||||
qCDebug(dcZigbeeNetwork()) << "The network is already running.";
|
||||
m_initializing = false;
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
// Set the permit joining timeout network configuration parameter
|
||||
QByteArray parameterData;
|
||||
QDataStream stream(¶meterData, QIODevice::WriteOnly);
|
||||
|
|
@ -585,11 +572,11 @@ void ZigbeeNetworkDeconz::onControllerAvailableChanged(bool available)
|
|||
qCWarning(dcZigbeeNetwork()) << "Hardware controller is not available any more.";
|
||||
setError(ErrorHardwareUnavailable);
|
||||
m_initializing = false;
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
setState(StateOffline);
|
||||
} else {
|
||||
m_error = ErrorNoError;
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
setState(StateStarting);
|
||||
qCDebug(dcZigbeeNetwork()) << "Hardware controller is now available.";
|
||||
startNetworkInternally();
|
||||
|
|
@ -696,14 +683,14 @@ void ZigbeeNetworkDeconz::startNetwork()
|
|||
loadNetwork();
|
||||
|
||||
if (!m_controller->enable(serialPortName(), serialBaudrate())) {
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
setState(StateOffline);
|
||||
setCreateNetworkState(CreateNetworkStateIdle);
|
||||
setError(ErrorHardwareUnavailable);
|
||||
return;
|
||||
}
|
||||
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
m_initializing = true;
|
||||
|
||||
// Note: wait for the controller available signal and start the initialization there
|
||||
|
|
|
|||
|
|
@ -114,11 +114,6 @@ void ZigbeeNetworkNxp::setPermitJoining(quint8 duration, quint16 address)
|
|||
qCDebug(dcZigbeeNetwork()) << "Disable permit join on"<< ZigbeeUtils::convertUint16ToHexString(address);
|
||||
}
|
||||
|
||||
// Note: will be reseted if permit join will not work
|
||||
setPermitJoiningEnabled(duration > 0);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningRemaining(duration);
|
||||
|
||||
if (address == 0x0000) {
|
||||
// Only the coordinator is allowed to join the network
|
||||
qCDebug(dcZigbeeNetwork()) << "Set permit join in the coordinator node only to" << duration << "[s]";
|
||||
|
|
@ -127,15 +122,9 @@ void ZigbeeNetworkNxp::setPermitJoining(quint8 duration, quint16 address)
|
|||
qCDebug(dcZigbeeNetwork()) << "Set permit join in the coordinator finished" << reply->status();
|
||||
if (reply->status() != Nxp::StatusSuccess) {
|
||||
qCWarning(dcZigbeeNetwork()) << "Failed to set permit join status in coordinator";
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningState(false);
|
||||
} else {
|
||||
setPermitJoiningEnabled(duration > 0);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningRemaining(duration);
|
||||
if (duration > 0) {
|
||||
m_permitJoinTimer->start();
|
||||
}
|
||||
setPermitJoiningState(duration > 0, duration);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -149,21 +138,12 @@ void ZigbeeNetworkNxp::setPermitJoining(quint8 duration, quint16 address)
|
|||
connect(reply, &ZigbeeNetworkReply::finished, this, [this, reply, duration, address](){
|
||||
if (reply->zigbeeApsStatus() != Zigbee::ZigbeeApsStatusSuccess) {
|
||||
qCWarning(dcZigbeeNetwork()) << "Could not set permit join to" << duration << ZigbeeUtils::convertUint16ToHexString(address) << reply->zigbeeApsStatus();
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningDuration(duration);
|
||||
m_permitJoinTimer->stop();
|
||||
setPermitJoiningState(false);
|
||||
return;
|
||||
}
|
||||
|
||||
qCDebug(dcZigbeeNetwork()) << "Permit join request finished successfully";
|
||||
setPermitJoiningEnabled(duration > 0);
|
||||
setPermitJoiningDuration(duration);
|
||||
setPermitJoiningRemaining(duration);
|
||||
if (duration > 0) {
|
||||
m_permitJoinTimer->start();
|
||||
} else {
|
||||
m_permitJoinTimer->stop();
|
||||
}
|
||||
setPermitJoiningState(duration > 0, duration);
|
||||
|
||||
if (address == Zigbee::BroadcastAddressAllRouters || address == 0x0000) {
|
||||
qCDebug(dcZigbeeNetwork()) << "Set permit join in the coordinator node to" << duration << "[s]";
|
||||
|
|
@ -616,7 +596,7 @@ void ZigbeeNetworkNxp::startNetwork()
|
|||
{
|
||||
loadNetwork();
|
||||
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
|
||||
if (!m_controller->enable(serialPortName(), serialBaudrate())) {
|
||||
setState(StateOffline);
|
||||
|
|
|
|||
|
|
@ -98,15 +98,15 @@ void ZigbeeNetworkTi::setPermitJoining(quint8 duration, quint16 address)
|
|||
qCDebug(dcZigbeeNetwork()) << "Disable permit join on"<< ZigbeeUtils::convertUint16ToHexString(address);
|
||||
}
|
||||
|
||||
setPermitJoiningDuration(duration);
|
||||
|
||||
ZigbeeInterfaceTiReply *requestPermitJoinReply = m_controller->requestPermitJoin(duration, address);
|
||||
connect(requestPermitJoinReply, &ZigbeeInterfaceTiReply::finished, this, [=](){
|
||||
if (requestPermitJoinReply->statusCode() != Ti::StatusCodeSuccess) {
|
||||
qCWarning(dcZigbeeNetwork()) << "Could not set permit join to" << duration << ZigbeeUtils::convertUint16ToHexString(address) << requestPermitJoinReply->statusCode();
|
||||
return;
|
||||
}
|
||||
qCDebug(dcZigbeeNetwork()) << "Permit join request finished successfully";
|
||||
qCDebug(dcZigbeeNetwork()) << "Permit join request finished successfully:" << duration;
|
||||
|
||||
setPermitJoiningState(true, duration);
|
||||
|
||||
// Opening the green power network too
|
||||
// Todo: This should probably be somewhere else, but not yet sure how other backeds deal with this
|
||||
|
|
@ -325,11 +325,11 @@ void ZigbeeNetworkTi::onControllerAvailableChanged(bool available)
|
|||
if (!available) {
|
||||
qCWarning(dcZigbeeNetwork()) << "Hardware controller is not available any more.";
|
||||
setError(ErrorHardwareUnavailable);
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
setState(StateOffline);
|
||||
setError(ErrorHardwareUnavailable);
|
||||
} else {
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
setState(StateOffline);
|
||||
setError(ErrorNoError);
|
||||
qCDebug(dcZigbeeNetwork()) << "Hardware controller is now available.";
|
||||
|
|
@ -442,8 +442,7 @@ void ZigbeeNetworkTi::onControllerStateChanged(ZigbeeBridgeControllerTi::Control
|
|||
|
||||
void ZigbeeNetworkTi::onPermitJoinStateChanged(quint8 duration)
|
||||
{
|
||||
setPermitJoiningRemaining(duration);
|
||||
setPermitJoiningEnabled(duration > 0);
|
||||
setPermitJoiningState(duration > 0, duration);
|
||||
m_controller->setLed(duration > 0);
|
||||
}
|
||||
|
||||
|
|
@ -493,13 +492,13 @@ void ZigbeeNetworkTi::startNetwork()
|
|||
loadNetwork();
|
||||
|
||||
if (!m_controller->enable(serialPortName(), serialBaudrate())) {
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
setState(StateOffline);
|
||||
setError(ErrorHardwareUnavailable);
|
||||
return;
|
||||
}
|
||||
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
}
|
||||
|
||||
void ZigbeeNetworkTi::stopNetwork()
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ ZigbeeNetwork::ZigbeeNetwork(const QUuid &networkUuid, QObject *parent) :
|
|||
m_permitJoinTimer->stop();
|
||||
setPermitJoining(0);
|
||||
} else {
|
||||
setPermitJoiningRemaining(m_permitJoiningRemaining);
|
||||
setPermitJoiningState(m_permitJoiningRemaining, m_permitJoiningRemaining);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -246,38 +246,6 @@ quint8 ZigbeeNetwork::permitJoiningRemaining() const
|
|||
return m_permitJoiningRemaining;
|
||||
}
|
||||
|
||||
void ZigbeeNetwork::setPermitJoiningEnabled(bool permitJoiningEnabled)
|
||||
{
|
||||
if (m_permitJoiningEnabled == permitJoiningEnabled)
|
||||
return;
|
||||
|
||||
m_permitJoiningEnabled = permitJoiningEnabled;
|
||||
emit permitJoiningEnabledChanged(m_permitJoiningEnabled);
|
||||
|
||||
if (!m_permitJoiningEnabled) {
|
||||
m_permitJoinTimer->stop();
|
||||
setPermitJoiningRemaining(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ZigbeeNetwork::setPermitJoiningDuration(quint8 duration)
|
||||
{
|
||||
if (m_permitJoiningDuration == duration)
|
||||
return;
|
||||
|
||||
m_permitJoiningDuration = duration;
|
||||
emit permitJoinDurationChanged(m_permitJoiningDuration);
|
||||
}
|
||||
|
||||
void ZigbeeNetwork::setPermitJoiningRemaining(quint8 remaining)
|
||||
{
|
||||
if (m_permitJoiningRemaining == remaining)
|
||||
return;
|
||||
|
||||
m_permitJoiningRemaining = remaining;
|
||||
emit permitJoinRemainingChanged(m_permitJoiningRemaining);
|
||||
}
|
||||
|
||||
quint8 ZigbeeNetwork::generateSequenceNumber()
|
||||
{
|
||||
return m_sequenceNumber++;
|
||||
|
|
@ -515,6 +483,28 @@ void ZigbeeNetwork::evaluateNextNodeReachableState()
|
|||
});
|
||||
}
|
||||
|
||||
void ZigbeeNetwork::setPermitJoiningState(bool permitJoiningEnabled, quint8 duration)
|
||||
{
|
||||
if (permitJoiningEnabled) {
|
||||
if (m_permitJoiningDuration != duration) {
|
||||
m_permitJoiningDuration = duration;
|
||||
emit permitJoinDurationChanged(duration);
|
||||
}
|
||||
m_permitJoiningRemaining = duration;
|
||||
m_permitJoinTimer->start();
|
||||
} else {
|
||||
m_permitJoiningDuration = 0;
|
||||
emit permitJoinDurationChanged(0);
|
||||
m_permitJoiningRemaining = 0;
|
||||
m_permitJoinTimer->stop();
|
||||
}
|
||||
|
||||
if (m_permitJoiningEnabled != permitJoiningEnabled) {
|
||||
m_permitJoiningEnabled = permitJoiningEnabled;
|
||||
emit permitJoiningEnabledChanged(permitJoiningEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
void ZigbeeNetwork::loadNetwork()
|
||||
{
|
||||
if (m_networkLoaded) {
|
||||
|
|
@ -569,7 +559,7 @@ void ZigbeeNetwork::clearSettings()
|
|||
setChannel(0);
|
||||
setSecurityConfiguration(ZigbeeSecurityConfiguration());
|
||||
setState(StateUninitialized);
|
||||
setPermitJoiningEnabled(false);
|
||||
setPermitJoiningState(false);
|
||||
m_nodeType = ZigbeeDeviceProfile::NodeTypeCoordinator;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -163,6 +163,12 @@ private:
|
|||
|
||||
void printNetwork();
|
||||
|
||||
// Permit join
|
||||
QTimer *m_permitJoinTimer = nullptr;
|
||||
bool m_permitJoiningEnabled = false;
|
||||
quint8 m_permitJoiningDuration = 120;
|
||||
quint8 m_permitJoiningRemaining = 0;
|
||||
|
||||
private:
|
||||
void addNodeInternally(ZigbeeNode *node);
|
||||
void removeNodeInternally(ZigbeeNode *node);
|
||||
|
|
@ -177,19 +183,11 @@ protected:
|
|||
ZigbeeNode *createNode(quint16 shortAddress, const ZigbeeAddress &extendedAddress, QObject *parent);
|
||||
ZigbeeNode *createNode(quint16 shortAddress, const ZigbeeAddress &extendedAddress, quint8 macCapabilities, QObject *parent);
|
||||
|
||||
// Permit join
|
||||
QTimer *m_permitJoinTimer = nullptr;
|
||||
bool m_permitJoiningEnabled = false;
|
||||
quint8 m_permitJoiningDuration = 120;
|
||||
quint8 m_permitJoiningRemaining = 0;
|
||||
|
||||
QTimer *m_reachableRefreshTimer = nullptr;
|
||||
QList<ZigbeeAddress> m_reachableRefreshAddresses;
|
||||
void evaluateNextNodeReachableState();
|
||||
|
||||
void setPermitJoiningEnabled(bool permitJoiningEnabled);
|
||||
void setPermitJoiningDuration(quint8 duration);
|
||||
void setPermitJoiningRemaining(quint8 remaining);
|
||||
void setPermitJoiningState(bool permitJoiningEnabled, quint8 duration = 0);
|
||||
|
||||
void clearSettings();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue