Properly handling passive mode in NodeStatusProvider

This commit is contained in:
Pavel Kirienko
2014-07-15 00:54:35 +04:00
parent 90702b5795
commit abaaf8d440
@@ -28,10 +28,17 @@ int NodeStatusProvider::publish()
void NodeStatusProvider::publishWithErrorHandling() void NodeStatusProvider::publishWithErrorHandling()
{ {
const int res = publish(); if (getNode().isPassiveMode())
if (res < 0)
{ {
getNode().registerInternalFailure("NodeStatus pub failed"); UAVCAN_TRACE("NodeStatusProvider", "NodeStatus pub skipped - passive mode");
}
else
{
const int res = publish();
if (res < 0)
{
getNode().registerInternalFailure("NodeStatus pub failed");
}
} }
} }
@@ -62,15 +69,10 @@ int NodeStatusProvider::startAndPublish()
return -ErrNotInited; return -ErrNotInited;
} }
int res = -1; int res = publish(); // Initial broadcast
if (res < 0)
if (!getNode().isPassiveMode())
{ {
res = publish(); // Initial broadcast goto fail;
if (res < 0)
{
goto fail;
}
} }
res = gdr_sub_.start(GlobalDiscoveryRequestCallback(this, &NodeStatusProvider::handleGlobalDiscoveryRequest)); res = gdr_sub_.start(GlobalDiscoveryRequestCallback(this, &NodeStatusProvider::handleGlobalDiscoveryRequest));
@@ -85,10 +87,7 @@ int NodeStatusProvider::startAndPublish()
goto fail; goto fail;
} }
if (!getNode().isPassiveMode()) TimerBase::startPeriodic(MonotonicDuration::fromMSec(protocol::NodeStatus::PUBLICATION_PERIOD_MS));
{
TimerBase::startPeriodic(MonotonicDuration::fromMSec(protocol::NodeStatus::PUBLICATION_PERIOD_MS));
}
return res; return res;