mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
Renaming: NodeInitializer --> NetworkCompatibilityChecker
This commit is contained in:
parent
d8c37584c0
commit
dd5908dad8
@ -17,7 +17,7 @@
|
||||
#include <uavcan/protocol/node_status_provider.hpp>
|
||||
#include <uavcan/protocol/restart_request_server.hpp>
|
||||
#include <uavcan/protocol/transport_stats_provider.hpp>
|
||||
#include <uavcan/protocol/node_initializer.hpp>
|
||||
#include <uavcan/protocol/network_compat_checker.hpp>
|
||||
|
||||
#if !defined(UAVCAN_CPP_VERSION) || !defined(UAVCAN_CPP11)
|
||||
# error UAVCAN_CPP_VERSION
|
||||
@ -51,7 +51,7 @@ class UAVCAN_EXPORT Node : public INode
|
||||
|
||||
bool started_;
|
||||
|
||||
int initNetwork(NodeInitializationResult& node_init_result);
|
||||
int initNetwork(NetworkCompatibilityCheckResult& node_init_result);
|
||||
|
||||
protected:
|
||||
virtual void registerInternalFailure(const char* msg)
|
||||
@ -99,7 +99,7 @@ public:
|
||||
|
||||
bool isStarted() const { return started_; }
|
||||
|
||||
int start(NodeInitializationResult& node_init_result);
|
||||
int start(NetworkCompatibilityCheckResult& node_init_result);
|
||||
|
||||
/*
|
||||
* Initialization methods
|
||||
@ -174,14 +174,14 @@ public:
|
||||
template <std::size_t MemPoolSize_, unsigned OutgoingTransferRegistryStaticEntries,
|
||||
unsigned OutgoingTransferMaxPayloadLen>
|
||||
int Node<MemPoolSize_, OutgoingTransferRegistryStaticEntries, OutgoingTransferMaxPayloadLen>::
|
||||
initNetwork(NodeInitializationResult& node_init_result)
|
||||
initNetwork(NetworkCompatibilityCheckResult& node_init_result)
|
||||
{
|
||||
int res = NodeInitializer::publishGlobalDiscoveryRequest(*this);
|
||||
int res = NetworkCompatibilityChecker::publishGlobalDiscoveryRequest(*this);
|
||||
if (res < 0)
|
||||
{
|
||||
return res;
|
||||
}
|
||||
NodeInitializer initializer(*this);
|
||||
NetworkCompatibilityChecker initializer(*this);
|
||||
StaticAssert<(sizeof(initializer) < 1200)>::check();
|
||||
res = initializer.execute();
|
||||
node_init_result = initializer.getResult();
|
||||
@ -191,7 +191,7 @@ initNetwork(NodeInitializationResult& node_init_result)
|
||||
template <std::size_t MemPoolSize_, unsigned OutgoingTransferRegistryStaticEntries,
|
||||
unsigned OutgoingTransferMaxPayloadLen>
|
||||
int Node<MemPoolSize_, OutgoingTransferRegistryStaticEntries, OutgoingTransferMaxPayloadLen>::
|
||||
start(NodeInitializationResult& node_init_result)
|
||||
start(NetworkCompatibilityCheckResult& node_init_result)
|
||||
{
|
||||
if (started_)
|
||||
{
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
namespace uavcan
|
||||
{
|
||||
|
||||
struct UAVCAN_EXPORT NodeInitializationResult
|
||||
struct UAVCAN_EXPORT NetworkCompatibilityCheckResult
|
||||
{
|
||||
NodeID conflicting_node;
|
||||
bool isOk() const { return !conflicting_node.isValid(); }
|
||||
@ -24,21 +24,21 @@ struct UAVCAN_EXPORT NodeInitializationResult
|
||||
* This class does not issue GlobalDiscoveryRequest, assuming that it was done already by the caller.
|
||||
* Instantiated object can execute() only once. Objects of this class are intended for stack allocation.
|
||||
*/
|
||||
class UAVCAN_EXPORT NodeInitializer : Noncopyable
|
||||
class UAVCAN_EXPORT NetworkCompatibilityChecker : Noncopyable
|
||||
{
|
||||
typedef std::bitset<NodeID::Max + 1> NodeIDMask;
|
||||
typedef MethodBinder<NodeInitializer*,
|
||||
void (NodeInitializer::*)(const ReceivedDataStructure<protocol::NodeStatus>&)>
|
||||
typedef MethodBinder<NetworkCompatibilityChecker*,
|
||||
void (NetworkCompatibilityChecker::*)(const ReceivedDataStructure<protocol::NodeStatus>&)>
|
||||
NodeStatusCallback;
|
||||
typedef MethodBinder<NodeInitializer*,
|
||||
void (NodeInitializer::*)(ServiceCallResult<protocol::ComputeAggregateTypeSignature>&)>
|
||||
typedef MethodBinder<NetworkCompatibilityChecker*,
|
||||
void (NetworkCompatibilityChecker::*)(ServiceCallResult<protocol::ComputeAggregateTypeSignature>&)>
|
||||
CATSResponseCallback;
|
||||
|
||||
Subscriber<protocol::NodeStatus, NodeStatusCallback> ns_sub_;
|
||||
ServiceClient<protocol::ComputeAggregateTypeSignature, CATSResponseCallback> cats_cln_;
|
||||
NodeIDMask nid_mask_present_;
|
||||
NodeIDMask nid_mask_checked_;
|
||||
NodeInitializationResult result_;
|
||||
NetworkCompatibilityCheckResult result_;
|
||||
DataTypeKind checking_dtkind_;
|
||||
bool last_cats_request_ok_;
|
||||
|
||||
@ -59,7 +59,7 @@ class UAVCAN_EXPORT NodeInitializer : Noncopyable
|
||||
int checkNodes();
|
||||
|
||||
public:
|
||||
NodeInitializer(INode& node)
|
||||
NetworkCompatibilityChecker(INode& node)
|
||||
: ns_sub_(node)
|
||||
, cats_cln_(node)
|
||||
, checking_dtkind_(DataTypeKindService)
|
||||
@ -68,7 +68,7 @@ public:
|
||||
|
||||
int execute();
|
||||
|
||||
const NodeInitializationResult& getResult() const { return result_; }
|
||||
const NetworkCompatibilityCheckResult& getResult() const { return result_; }
|
||||
|
||||
static int publishGlobalDiscoveryRequest(INode& node);
|
||||
};
|
||||
@ -4,14 +4,14 @@
|
||||
|
||||
#include <cassert>
|
||||
#include <uavcan/debug.hpp>
|
||||
#include <uavcan/protocol/node_initializer.hpp>
|
||||
#include <uavcan/protocol/network_compat_checker.hpp>
|
||||
#include <uavcan/node/publisher.hpp>
|
||||
#include <uavcan/protocol/GlobalDiscoveryRequest.hpp>
|
||||
|
||||
namespace uavcan
|
||||
{
|
||||
|
||||
MonotonicDuration NodeInitializer::getNetworkDiscoveryDelay() const
|
||||
MonotonicDuration NetworkCompatibilityChecker::getNetworkDiscoveryDelay() const
|
||||
{
|
||||
// Base duration is constant - NodeStatus publication period
|
||||
MonotonicDuration dur = MonotonicDuration::fromMSec(protocol::NodeStatus::PUBLICATION_PERIOD_MS);
|
||||
@ -20,7 +20,7 @@ MonotonicDuration NodeInitializer::getNetworkDiscoveryDelay() const
|
||||
return dur;
|
||||
}
|
||||
|
||||
NodeID NodeInitializer::findNextUncheckedNode()
|
||||
NodeID NetworkCompatibilityChecker::findNextUncheckedNode()
|
||||
{
|
||||
for (int i = 1; i <= NodeID::Max; i++)
|
||||
{
|
||||
@ -33,7 +33,7 @@ NodeID NodeInitializer::findNextUncheckedNode()
|
||||
return NodeID();
|
||||
}
|
||||
|
||||
int NodeInitializer::waitForCATSResponse()
|
||||
int NetworkCompatibilityChecker::waitForCATSResponse()
|
||||
{
|
||||
while (cats_cln_.isPending())
|
||||
{
|
||||
@ -46,7 +46,7 @@ int NodeInitializer::waitForCATSResponse()
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NodeInitializer::handleNodeStatus(const ReceivedDataStructure<protocol::NodeStatus>& msg)
|
||||
void NetworkCompatibilityChecker::handleNodeStatus(const ReceivedDataStructure<protocol::NodeStatus>& msg)
|
||||
{
|
||||
if (!nid_mask_present_.test(msg.getSrcNodeID().get()))
|
||||
{
|
||||
@ -61,7 +61,7 @@ void NodeInitializer::handleNodeStatus(const ReceivedDataStructure<protocol::Nod
|
||||
}
|
||||
}
|
||||
|
||||
void NodeInitializer::handleCATSResponse(ServiceCallResult<protocol::ComputeAggregateTypeSignature>& resp)
|
||||
void NetworkCompatibilityChecker::handleCATSResponse(ServiceCallResult<protocol::ComputeAggregateTypeSignature>& resp)
|
||||
{
|
||||
last_cats_request_ok_ = resp.isSuccessful();
|
||||
if (last_cats_request_ok_)
|
||||
@ -80,7 +80,7 @@ void NodeInitializer::handleCATSResponse(ServiceCallResult<protocol::ComputeAggr
|
||||
}
|
||||
}
|
||||
|
||||
int NodeInitializer::checkOneNodeOneDataTypeKind(NodeID nid, DataTypeKind kind)
|
||||
int NetworkCompatibilityChecker::checkOneNodeOneDataTypeKind(NodeID nid, DataTypeKind kind)
|
||||
{
|
||||
StaticAssert<DataTypeKindMessage == int(protocol::DataTypeKind::MESSAGE)>::check();
|
||||
StaticAssert<DataTypeKindService == int(protocol::DataTypeKind::SERVICE)>::check();
|
||||
@ -110,7 +110,7 @@ int NodeInitializer::checkOneNodeOneDataTypeKind(NodeID nid, DataTypeKind kind)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int NodeInitializer::checkOneNode(NodeID nid)
|
||||
int NetworkCompatibilityChecker::checkOneNode(NodeID nid)
|
||||
{
|
||||
if (nid == getNode().getNodeID())
|
||||
{
|
||||
@ -126,7 +126,7 @@ int NodeInitializer::checkOneNode(NodeID nid)
|
||||
return checkOneNodeOneDataTypeKind(nid, DataTypeKindService);
|
||||
}
|
||||
|
||||
int NodeInitializer::checkNodes()
|
||||
int NetworkCompatibilityChecker::checkNodes()
|
||||
{
|
||||
nid_mask_checked_.reset();
|
||||
while (true)
|
||||
@ -150,7 +150,7 @@ int NodeInitializer::checkNodes()
|
||||
return 0;
|
||||
}
|
||||
|
||||
int NodeInitializer::execute()
|
||||
int NetworkCompatibilityChecker::execute()
|
||||
{
|
||||
int res = 0;
|
||||
|
||||
@ -160,13 +160,13 @@ int NodeInitializer::execute()
|
||||
goto exit;
|
||||
}
|
||||
|
||||
res = ns_sub_.start(NodeStatusCallback(this, &NodeInitializer::handleNodeStatus));
|
||||
res = ns_sub_.start(NodeStatusCallback(this, &NetworkCompatibilityChecker::handleNodeStatus));
|
||||
if (res < 0)
|
||||
{
|
||||
goto exit;
|
||||
}
|
||||
|
||||
cats_cln_.setCallback(CATSResponseCallback(this, &NodeInitializer::handleCATSResponse));
|
||||
cats_cln_.setCallback(CATSResponseCallback(this, &NetworkCompatibilityChecker::handleCATSResponse));
|
||||
res = cats_cln_.init();
|
||||
if (res < 0)
|
||||
{
|
||||
@ -187,7 +187,7 @@ exit:
|
||||
return res;
|
||||
}
|
||||
|
||||
int NodeInitializer::publishGlobalDiscoveryRequest(INode& node)
|
||||
int NetworkCompatibilityChecker::publishGlobalDiscoveryRequest(INode& node)
|
||||
{
|
||||
Publisher<protocol::GlobalDiscoveryRequest> pub(node);
|
||||
return pub.broadcast(protocol::GlobalDiscoveryRequest());
|
||||
@ -58,7 +58,7 @@ TEST(Node, Basic)
|
||||
/*
|
||||
* Init the second node - network is empty
|
||||
*/
|
||||
uavcan::NodeInitializationResult result;
|
||||
uavcan::NetworkCompatibilityCheckResult result;
|
||||
ASSERT_LE(0, node2.start(result));
|
||||
|
||||
ASSERT_FALSE(node_status_monitor.findNodeWithWorstStatus().isValid());
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <uavcan/protocol/node_initializer.hpp>
|
||||
#include <uavcan/protocol/network_compat_checker.hpp>
|
||||
#include <uavcan/protocol/node_status_provider.hpp>
|
||||
#include <uavcan/protocol/data_type_info_provider.hpp>
|
||||
#include <uavcan/protocol/GlobalDiscoveryRequest.hpp>
|
||||
@ -45,27 +45,29 @@ struct NodeInitializerRemoteContext
|
||||
};
|
||||
|
||||
|
||||
TEST(NodeInitializer, Size)
|
||||
TEST(NetworkCompatibilityChecker, Size)
|
||||
{
|
||||
std::cout << "sizeof(uavcan::NodeInitializer): " << sizeof(uavcan::NodeInitializer) << std::endl;
|
||||
ASSERT_TRUE(sizeof(uavcan::NodeInitializer) < 2048);
|
||||
// Objects are subject for stack allocation, hence the size matters
|
||||
std::cout << "sizeof(uavcan::NetworkCompatibilityChecker): "
|
||||
<< sizeof(uavcan::NetworkCompatibilityChecker) << std::endl;
|
||||
ASSERT_TRUE(sizeof(uavcan::NetworkCompatibilityChecker) < 2048);
|
||||
}
|
||||
|
||||
|
||||
TEST(NodeInitializer, EmptyNetwork)
|
||||
TEST(NetworkCompatibilityChecker, EmptyNetwork)
|
||||
{
|
||||
registerTypes();
|
||||
InterlinkedTestNodesWithSysClock nodes;
|
||||
|
||||
ASSERT_LE(0, uavcan::NodeInitializer::publishGlobalDiscoveryRequest(nodes.a));
|
||||
ASSERT_LE(0, uavcan::NetworkCompatibilityChecker::publishGlobalDiscoveryRequest(nodes.a));
|
||||
|
||||
uavcan::NodeInitializer ni(nodes.a);
|
||||
uavcan::NetworkCompatibilityChecker ni(nodes.a);
|
||||
ASSERT_LE(0, ni.execute());
|
||||
ASSERT_TRUE(ni.getResult().isOk());
|
||||
}
|
||||
|
||||
|
||||
TEST(NodeInitializer, Success)
|
||||
TEST(NetworkCompatibilityChecker, Success)
|
||||
{
|
||||
registerTypes();
|
||||
InterlinkedTestNodesWithSysClock nodes;
|
||||
@ -75,29 +77,29 @@ TEST(NodeInitializer, Success)
|
||||
BackgroundSpinner bgspinner(nodes.b, nodes.a);
|
||||
bgspinner.startPeriodic(uavcan::MonotonicDuration::fromMSec(10));
|
||||
|
||||
ASSERT_LE(0, uavcan::NodeInitializer::publishGlobalDiscoveryRequest(nodes.a));
|
||||
ASSERT_LE(0, uavcan::NetworkCompatibilityChecker::publishGlobalDiscoveryRequest(nodes.a));
|
||||
|
||||
uavcan::NodeInitializer ni(nodes.a);
|
||||
uavcan::NetworkCompatibilityChecker ni(nodes.a);
|
||||
ASSERT_LE(0, ni.execute());
|
||||
ASSERT_TRUE(ni.getResult().isOk());
|
||||
}
|
||||
|
||||
|
||||
TEST(NodeInitializer, RequestTimeout)
|
||||
TEST(NetworkCompatibilityChecker, RequestTimeout)
|
||||
{
|
||||
registerTypes();
|
||||
InterlinkedTestNodesWithSysClock nodes;
|
||||
NodeInitializerRemoteContext remote(nodes.b);
|
||||
remote.start();
|
||||
|
||||
ASSERT_LE(0, uavcan::NodeInitializer::publishGlobalDiscoveryRequest(nodes.a));
|
||||
ASSERT_LE(0, uavcan::NetworkCompatibilityChecker::publishGlobalDiscoveryRequest(nodes.a));
|
||||
|
||||
uavcan::NodeInitializer ni(nodes.a);
|
||||
uavcan::NetworkCompatibilityChecker ni(nodes.a);
|
||||
ASSERT_GT(0, ni.execute()); // There is no background spinner, so CATS request will time out
|
||||
}
|
||||
|
||||
|
||||
TEST(NodeInitializer, NodeIDCollision)
|
||||
TEST(NetworkCompatibilityChecker, NodeIDCollision)
|
||||
{
|
||||
registerTypes();
|
||||
InterlinkedTestNodesWithSysClock nodes(8, 8); // Same NID
|
||||
@ -107,9 +109,9 @@ TEST(NodeInitializer, NodeIDCollision)
|
||||
BackgroundSpinner bgspinner(nodes.b, nodes.a);
|
||||
bgspinner.startPeriodic(uavcan::MonotonicDuration::fromMSec(10));
|
||||
|
||||
ASSERT_LE(0, uavcan::NodeInitializer::publishGlobalDiscoveryRequest(nodes.a));
|
||||
ASSERT_LE(0, uavcan::NetworkCompatibilityChecker::publishGlobalDiscoveryRequest(nodes.a));
|
||||
|
||||
uavcan::NodeInitializer ni(nodes.a);
|
||||
uavcan::NetworkCompatibilityChecker ni(nodes.a);
|
||||
ASSERT_LE(0, ni.execute());
|
||||
ASSERT_FALSE(ni.getResult().isOk());
|
||||
ASSERT_EQ(8, ni.getResult().conflicting_node.get());
|
||||
@ -24,7 +24,7 @@ static uavcan_linux::NodePtr initNode(const std::vector<std::string>& ifaces, ua
|
||||
* Starting the node. This may take a few seconds.
|
||||
*/
|
||||
std::cout << "Starting the node..." << std::endl;
|
||||
uavcan::NodeInitializationResult init_result;
|
||||
uavcan::NetworkCompatibilityCheckResult init_result;
|
||||
const int start_res = node->start(init_result);
|
||||
std::cout << "Start returned: " << start_res << std::endl;
|
||||
ENFORCE(0 == start_res);
|
||||
|
||||
@ -109,7 +109,7 @@ static uavcan_linux::NodePtr initNode(const std::vector<std::string>& ifaces, ua
|
||||
node->setNodeID(nid);
|
||||
node->setName(name.c_str());
|
||||
|
||||
uavcan::NodeInitializationResult init_result;
|
||||
uavcan::NetworkCompatibilityCheckResult init_result;
|
||||
const int start_res = node->start(init_result);
|
||||
ENFORCE(0 == start_res);
|
||||
if (!init_result.isOk())
|
||||
|
||||
@ -17,7 +17,7 @@ static uavcan_linux::NodePtr initNode(const std::vector<std::string>& ifaces, ua
|
||||
node->setNodeID(nid);
|
||||
node->setName(name.c_str());
|
||||
|
||||
uavcan::NodeInitializationResult init_result;
|
||||
uavcan::NetworkCompatibilityCheckResult init_result;
|
||||
const int start_res = node->start(init_result);
|
||||
ENFORCE(0 == start_res);
|
||||
if (!init_result.isOk())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user