NodeStatus timing constant updates

This commit is contained in:
Pavel Kirienko
2014-08-24 19:44:04 +04:00
parent 6e3627dda8
commit c7872def16
5 changed files with 16 additions and 14 deletions
+3 -2
View File
@@ -3,10 +3,11 @@
# Any UAVCAN node is required to publish this message periodically.
#
uint16 PUBLICATION_PERIOD_MS = 1000
uint16 MAX_PUBLICATION_PERIOD_MS = 1000
uint16 MIN_PUBLICATION_PERIOD_MS = 20
# If a node fails to publish this message in this amount of time, it should be considered offline.
uint16 OFFLINE_TIMEOUT_MS = 5000
uint16 OFFLINE_TIMEOUT_MS = 3000
# Uptime counter should never overflow.
uint28 uptime_sec
@@ -16,8 +16,8 @@ namespace uavcan
MonotonicDuration NetworkCompatibilityChecker::getNetworkDiscoveryDelay() const
{
// Base duration is constant - NodeStatus publication period
MonotonicDuration dur = MonotonicDuration::fromMSec(protocol::NodeStatus::PUBLICATION_PERIOD_MS);
// Base duration is constant - NodeStatus max publication period
MonotonicDuration dur = MonotonicDuration::fromMSec(protocol::NodeStatus::MAX_PUBLICATION_PERIOD_MS);
// Additional duration depends on the node priority - gets larger with higher Node ID
dur += MonotonicDuration::fromMSec(getNode().getNodeID().get() * 10);
return dur;
@@ -92,7 +92,7 @@ int NodeStatusProvider::startAndPublish()
goto fail;
}
setStatusPublishingPeriod(MonotonicDuration::fromMSec(protocol::NodeStatus::PUBLICATION_PERIOD_MS));
setStatusPublishingPeriod(MonotonicDuration::fromMSec(protocol::NodeStatus::MAX_PUBLICATION_PERIOD_MS));
return res;
@@ -106,8 +106,8 @@ fail:
void NodeStatusProvider::setStatusPublishingPeriod(uavcan::MonotonicDuration period)
{
const MonotonicDuration maximum = MonotonicDuration::fromMSec(protocol::NodeStatus::PUBLICATION_PERIOD_MS);
const MonotonicDuration minimum = MonotonicDuration::fromMSec(50);
const MonotonicDuration maximum = MonotonicDuration::fromMSec(protocol::NodeStatus::MAX_PUBLICATION_PERIOD_MS);
const MonotonicDuration minimum = MonotonicDuration::fromMSec(protocol::NodeStatus::MIN_PUBLICATION_PERIOD_MS);
period = min(period, maximum);
period = max(period, minimum);
@@ -106,19 +106,19 @@ TEST(NodeStatusMonitor, Basic)
*/
std::cout << "Starting timeout test, current monotime is " << clock_mock.monotonic << std::endl;
clock_mock.advance(1000000);
clock_mock.advance(500000);
shortSpin(node);
st = nsm.getNodeStatus(uavcan::NodeID(10));
ASSERT_TRUE(st.known);
ASSERT_EQ(NodeStatus::STATUS_OK, st.status_code);
clock_mock.advance(1000000);
clock_mock.advance(500000);
shortSpin(node);
st = nsm.getNodeStatus(uavcan::NodeID(9));
ASSERT_TRUE(st.known);
ASSERT_EQ(NodeStatus::STATUS_INITIALIZING, st.status_code);
clock_mock.advance(1000000);
clock_mock.advance(500000);
shortSpin(node);
st = nsm.getNodeStatus(uavcan::NodeID(11));
ASSERT_TRUE(st.known);
@@ -127,7 +127,7 @@ TEST(NodeStatusMonitor, Basic)
/*
* Will timeout now
*/
clock_mock.advance(2000000);
clock_mock.advance(4000000);
shortSpin(node);
st = nsm.getNodeStatus(uavcan::NodeID(10));
@@ -47,14 +47,15 @@ TEST(NodeStatusProvider, Basic)
ASSERT_LE(0, nsp.startAndPublish());
// Checking the publishing rate settings
ASSERT_EQ(uavcan::MonotonicDuration::fromMSec(uavcan::protocol::NodeStatus::PUBLICATION_PERIOD_MS),
ASSERT_EQ(uavcan::MonotonicDuration::fromMSec(uavcan::protocol::NodeStatus::MAX_PUBLICATION_PERIOD_MS),
nsp.getStatusPublishingPeriod());
nsp.setStatusPublishingPeriod(uavcan::MonotonicDuration());
ASSERT_FALSE(nsp.getStatusPublishingPeriod().isZero());
ASSERT_EQ(uavcan::MonotonicDuration::fromMSec(uavcan::protocol::NodeStatus::MIN_PUBLICATION_PERIOD_MS),
nsp.getStatusPublishingPeriod());
nsp.setStatusPublishingPeriod(uavcan::MonotonicDuration::fromMSec(3600 * 1000 * 24));
ASSERT_EQ(uavcan::MonotonicDuration::fromMSec(uavcan::protocol::NodeStatus::PUBLICATION_PERIOD_MS),
ASSERT_EQ(uavcan::MonotonicDuration::fromMSec(uavcan::protocol::NodeStatus::MAX_PUBLICATION_PERIOD_MS),
nsp.getStatusPublishingPeriod());
/*