mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-14 07:03:34 +08:00
Changed API of DynamicNodeIDClient: start() accepts UniqueID instead of HardwareVersion
This commit is contained in:
@@ -63,6 +63,8 @@ class UAVCAN_EXPORT DynamicNodeIDClient : private TimerBase
|
||||
void handleAllocation(const ReceivedDataStructure<protocol::dynamic_node_id::Allocation>& 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);
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ void DynamicNodeIDClient::handleAllocation(const ReceivedDataStructure<protocol:
|
||||
}
|
||||
}
|
||||
|
||||
int DynamicNodeIDClient::start(const protocol::HardwareVersion& hardware_version,
|
||||
int DynamicNodeIDClient::start(const UniqueID& unique_id,
|
||||
const NodeID preferred_node_id,
|
||||
const TransferPriority transfer_priority)
|
||||
{
|
||||
@@ -157,7 +157,7 @@ int DynamicNodeIDClient::start(const protocol::HardwareVersion& hardware_version
|
||||
}
|
||||
|
||||
// Unique ID initialization & validation
|
||||
copy(hardware_version.unique_id.begin(), hardware_version.unique_id.end(), unique_id_);
|
||||
copy(unique_id.begin(), unique_id.end(), unique_id_);
|
||||
bool unique_id_is_zero = true;
|
||||
for (uint8_t i = 0; i < sizeof(unique_id_); i++)
|
||||
{
|
||||
|
||||
@@ -21,19 +21,19 @@ TEST(DynamicNodeIDClient, Basic)
|
||||
/*
|
||||
* Client initialization
|
||||
*/
|
||||
uavcan::protocol::HardwareVersion hwver;
|
||||
uavcan::protocol::HardwareVersion::FieldTypes::unique_id unique_id;
|
||||
|
||||
ASSERT_LE(-uavcan::ErrInvalidParam, dnidac.start(hwver)); // Empty hardware version is not allowed
|
||||
ASSERT_LE(-uavcan::ErrInvalidParam, dnidac.start(unique_id)); // Empty hardware version is not allowed
|
||||
|
||||
for (uavcan::uint8_t i = 0; i < hwver.unique_id.size(); i++)
|
||||
for (uavcan::uint8_t i = 0; i < unique_id.size(); i++)
|
||||
{
|
||||
hwver.unique_id[i] = i;
|
||||
unique_id[i] = i;
|
||||
}
|
||||
|
||||
ASSERT_LE(-uavcan::ErrInvalidParam, dnidac.start(hwver, uavcan::NodeID()));
|
||||
ASSERT_LE(-uavcan::ErrInvalidParam, dnidac.start(unique_id, uavcan::NodeID()));
|
||||
|
||||
const uavcan::NodeID PreferredNodeID = 42;
|
||||
ASSERT_LE(0, dnidac.start(hwver, PreferredNodeID));
|
||||
ASSERT_LE(0, dnidac.start(unique_id, PreferredNodeID));
|
||||
|
||||
ASSERT_FALSE(dnidac.getAllocatedNodeID().isValid());
|
||||
ASSERT_FALSE(dnidac.getAllocatorNodeID().isValid());
|
||||
@@ -56,7 +56,7 @@ TEST(DynamicNodeIDClient, Basic)
|
||||
ASSERT_TRUE(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()));
|
||||
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<uavcan::protocol::dynamic_node_id::Allocation> _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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -44,7 +44,7 @@ uavcan_linux::NodePtr initNodeWithDynamicID(const std::vector<std::string>& 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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user