From 0f53a76b5089ed6120d81e70309d4d81cce170ee Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Fri, 25 Sep 2015 00:02:58 +0300 Subject: [PATCH] Changed API of DynamicNodeIDClient: start() accepts UniqueID instead of HardwareVersion --- .../protocol/dynamic_node_id_client.hpp | 6 ++-- .../protocol/uc_dynamic_node_id_client.cpp | 4 +-- .../test/protocol/dynamic_node_id_client.cpp | 32 +++++++++---------- .../allocation_request_manager.cpp | 12 +++---- .../centralized/server.cpp | 8 ++--- .../distributed/server.cpp | 8 ++--- .../apps/test_dynamic_node_id_client.cpp | 2 +- 7 files changed, 37 insertions(+), 35 deletions(-) diff --git a/libuavcan/include/uavcan/protocol/dynamic_node_id_client.hpp b/libuavcan/include/uavcan/protocol/dynamic_node_id_client.hpp index a54bf4632f..f63b121e7d 100644 --- a/libuavcan/include/uavcan/protocol/dynamic_node_id_client.hpp +++ b/libuavcan/include/uavcan/protocol/dynamic_node_id_client.hpp @@ -63,6 +63,8 @@ class UAVCAN_EXPORT DynamicNodeIDClient : private TimerBase void handleAllocation(const ReceivedDataStructure& msg); public: + typedef protocol::HardwareVersion::FieldTypes::unique_id UniqueID; + DynamicNodeIDClient(INode& node) : TimerBase(node) , dnida_pub_(node) @@ -71,7 +73,7 @@ public: { } /** - * @param hardware_version Hardware version information, where unique_id must be set correctly. + * @param unique_id Unique ID of the local node. Must be the same as in the hardware version struct. * @param preferred_node_id Node ID that the application would like to take; set to broadcast (zero) if * the application doesn't have any preference (this is default). * @param transfer_priority Transfer priority, Normal by default. @@ -79,7 +81,7 @@ public: * Negative error code on failure * -ErrLogic if 1. the node is not in passive mode or 2. the client is already started */ - int start(const protocol::HardwareVersion& hardware_version, + int start(const UniqueID& unique_id, const NodeID preferred_node_id = NodeID::Broadcast, const TransferPriority transfer_priority = TransferPriority::OneHigherThanLowest); diff --git a/libuavcan/src/protocol/uc_dynamic_node_id_client.cpp b/libuavcan/src/protocol/uc_dynamic_node_id_client.cpp index b07dfb491f..2889cbadee 100644 --- a/libuavcan/src/protocol/uc_dynamic_node_id_client.cpp +++ b/libuavcan/src/protocol/uc_dynamic_node_id_client.cpp @@ -144,7 +144,7 @@ void DynamicNodeIDClient::handleAllocation(const ReceivedDataStructurefirst_part_of_unique_id); ASSERT_TRUE(uavcan::equal(dynid_sub.collector.msg->unique_id.begin(), dynid_sub.collector.msg->unique_id.end(), - hwver.unique_id.begin())); + unique_id.begin())); dynid_sub.collector.msg.reset(); // Second - rate is no lower than 0.5 Hz @@ -92,7 +92,7 @@ TEST(DynamicNodeIDClient, Basic) { uavcan::protocol::dynamic_node_id::Allocation msg; msg.unique_id.resize(BytesPerRequest); - uavcan::copy(hwver.unique_id.begin(), hwver.unique_id.begin() + BytesPerRequest, msg.unique_id.begin()); + uavcan::copy(unique_id.begin(), unique_id.begin() + BytesPerRequest, msg.unique_id.begin()); std::cout << "First-stage offer:\n" << msg << std::endl; @@ -106,7 +106,7 @@ TEST(DynamicNodeIDClient, Basic) ASSERT_FALSE(dynid_sub.collector.msg->first_part_of_unique_id); ASSERT_TRUE(uavcan::equal(dynid_sub.collector.msg->unique_id.begin(), dynid_sub.collector.msg->unique_id.end(), - hwver.unique_id.begin() + BytesPerRequest)); + unique_id.begin() + BytesPerRequest)); dynid_sub.collector.msg.reset(); } @@ -116,7 +116,7 @@ TEST(DynamicNodeIDClient, Basic) { uavcan::protocol::dynamic_node_id::Allocation msg; msg.unique_id.resize(BytesPerRequest * 2); - uavcan::copy(hwver.unique_id.begin(), hwver.unique_id.begin() + BytesPerRequest * 2, msg.unique_id.begin()); + uavcan::copy(unique_id.begin(), unique_id.begin() + BytesPerRequest * 2, msg.unique_id.begin()); std::cout << "Second-stage offer:\n" << msg << std::endl; @@ -130,7 +130,7 @@ TEST(DynamicNodeIDClient, Basic) ASSERT_FALSE(dynid_sub.collector.msg->first_part_of_unique_id); ASSERT_TRUE(uavcan::equal(dynid_sub.collector.msg->unique_id.begin(), dynid_sub.collector.msg->unique_id.end(), - hwver.unique_id.begin() + BytesPerRequest * 2)); + unique_id.begin() + BytesPerRequest * 2)); dynid_sub.collector.msg.reset(); } @@ -145,7 +145,7 @@ TEST(DynamicNodeIDClient, Basic) uavcan::protocol::dynamic_node_id::Allocation msg; msg.unique_id.resize(16); msg.node_id = 72; - uavcan::copy(hwver.unique_id.begin(), hwver.unique_id.end(), msg.unique_id.begin()); + uavcan::copy(unique_id.begin(), unique_id.end(), msg.unique_id.begin()); ASSERT_FALSE(dynid_sub.collector.msg.get()); ASSERT_LE(0, dynid_pub.broadcast(msg)); @@ -169,11 +169,11 @@ TEST(DynamicNodeIDClient, NonPassiveMode) uavcan::DefaultDataTypeRegistrator _reg1; (void)_reg1; - uavcan::protocol::HardwareVersion hwver; - for (uavcan::uint8_t i = 0; i < hwver.unique_id.size(); i++) + uavcan::protocol::HardwareVersion::FieldTypes::unique_id unique_id; + for (uavcan::uint8_t i = 0; i < unique_id.size(); i++) { - hwver.unique_id[i] = i; + unique_id[i] = i; } - ASSERT_LE(-uavcan::ErrLogic, dnidac.start(hwver)); + ASSERT_LE(-uavcan::ErrLogic, dnidac.start(unique_id)); } diff --git a/libuavcan/test/protocol/dynamic_node_id_server/allocation_request_manager.cpp b/libuavcan/test/protocol/dynamic_node_id_server/allocation_request_manager.cpp index 649162bece..07894133dc 100644 --- a/libuavcan/test/protocol/dynamic_node_id_server/allocation_request_manager.cpp +++ b/libuavcan/test/protocol/dynamic_node_id_server/allocation_request_manager.cpp @@ -78,13 +78,13 @@ TEST(dynamic_node_id_server_AllocationRequestManager, Basic) /* * Client initialization */ - uavcan::protocol::HardwareVersion hwver; - for (uavcan::uint8_t i = 0; i < hwver.unique_id.size(); i++) + uavcan::protocol::HardwareVersion::FieldTypes::unique_id unique_id; + for (uavcan::uint8_t i = 0; i < unique_id.size(); i++) { - hwver.unique_id[i] = i; + unique_id[i] = i; } const uavcan::NodeID PreferredNodeID = 42; - ASSERT_LE(0, client.start(hwver, PreferredNodeID)); + ASSERT_LE(0, client.start(unique_id, PreferredNodeID)); /* * Request manager initialization @@ -102,9 +102,9 @@ TEST(dynamic_node_id_server_AllocationRequestManager, Basic) */ nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(2000)); - ASSERT_TRUE(handler.matchAndPopLastRequest(hwver.unique_id, PreferredNodeID)); + ASSERT_TRUE(handler.matchAndPopLastRequest(unique_id, PreferredNodeID)); - ASSERT_LE(0, manager.broadcastAllocationResponse(hwver.unique_id, PreferredNodeID)); + ASSERT_LE(0, manager.broadcastAllocationResponse(unique_id, PreferredNodeID)); nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(100)); diff --git a/libuavcan/test/protocol/dynamic_node_id_server/centralized/server.cpp b/libuavcan/test/protocol/dynamic_node_id_server/centralized/server.cpp index 5e83b19d05..932bf61c06 100644 --- a/libuavcan/test/protocol/dynamic_node_id_server/centralized/server.cpp +++ b/libuavcan/test/protocol/dynamic_node_id_server/centralized/server.cpp @@ -49,13 +49,13 @@ TEST(dynamic_node_id_server_centralized_Server, Basic) * Client */ uavcan::DynamicNodeIDClient client(nodes.b); - uavcan::protocol::HardwareVersion hwver; - for (uavcan::uint8_t i = 0; i < hwver.unique_id.size(); i++) + uavcan::protocol::HardwareVersion::FieldTypes::unique_id unique_id; + for (uavcan::uint8_t i = 0; i < unique_id.size(); i++) { - hwver.unique_id[i] = i; + unique_id[i] = i; } const uavcan::NodeID PreferredNodeID = 42; - ASSERT_LE(0, client.start(hwver, PreferredNodeID)); + ASSERT_LE(0, client.start(unique_id, PreferredNodeID)); /* * Fire diff --git a/libuavcan/test/protocol/dynamic_node_id_server/distributed/server.cpp b/libuavcan/test/protocol/dynamic_node_id_server/distributed/server.cpp index 1cae59224c..d5cbb4b626 100644 --- a/libuavcan/test/protocol/dynamic_node_id_server/distributed/server.cpp +++ b/libuavcan/test/protocol/dynamic_node_id_server/distributed/server.cpp @@ -154,13 +154,13 @@ TEST(dynamic_node_id_server_Server, Basic) * Client */ uavcan::DynamicNodeIDClient client(nodes.b); - uavcan::protocol::HardwareVersion hwver; - for (uavcan::uint8_t i = 0; i < hwver.unique_id.size(); i++) + uavcan::protocol::HardwareVersion::FieldTypes::unique_id unique_id; + for (uavcan::uint8_t i = 0; i < unique_id.size(); i++) { - hwver.unique_id[i] = i; + unique_id[i] = i; } const uavcan::NodeID PreferredNodeID = 42; - ASSERT_LE(0, client.start(hwver, PreferredNodeID)); + ASSERT_LE(0, client.start(unique_id, PreferredNodeID)); /* * Fire diff --git a/libuavcan_drivers/linux/apps/test_dynamic_node_id_client.cpp b/libuavcan_drivers/linux/apps/test_dynamic_node_id_client.cpp index d3be73197e..c5ef2e9b73 100644 --- a/libuavcan_drivers/linux/apps/test_dynamic_node_id_client.cpp +++ b/libuavcan_drivers/linux/apps/test_dynamic_node_id_client.cpp @@ -44,7 +44,7 @@ uavcan_linux::NodePtr initNodeWithDynamicID(const std::vector& ifac */ uavcan::DynamicNodeIDClient client(*node); - ENFORCE(0 <= client.start(node->getNodeStatusProvider().getHardwareVersion(), preferred_node_id)); + ENFORCE(0 <= client.start(node->getNodeStatusProvider().getHardwareVersion().unique_id, preferred_node_id)); std::cout << "Waiting for dynamic node ID allocation..." << std::endl;