Renaming: NodeInitializer --> NetworkCompatibilityChecker

This commit is contained in:
Pavel Kirienko 2014-04-12 21:40:30 +04:00
parent d8c37584c0
commit dd5908dad8
8 changed files with 51 additions and 49 deletions

View File

@ -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_)
{

View File

@ -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);
};

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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);

View File

@ -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())

View File

@ -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())