mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-12 01:33:33 +08:00
NodeStatus timing constant updates
This commit is contained in:
@@ -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());
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user