dynamic_node_id_client.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #ifndef UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_CLIENT_HPP_INCLUDED
6 #define UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_CLIENT_HPP_INCLUDED
7 
10 #include <uavcan/node/timer.hpp>
12 #include <uavcan/build_config.hpp>
13 #include <uavcan/protocol/dynamic_node_id/Allocation.hpp>
14 #include <uavcan/protocol/HardwareVersion.hpp>
15 
16 namespace uavcan
17 {
32 {
34  void (DynamicNodeIDClient::*)
37 
38  enum Mode
39  {
42  NumModes
43  };
44 
47 
48  uint8_t unique_id_[protocol::HardwareVersion::FieldTypes::unique_id::MaxSize];
50 
54 
55  void terminate();
56 
57  static MonotonicDuration getRandomDuration(uint32_t lower_bound_msec, uint32_t upper_bound_msec);
58 
59  void restartTimer(const Mode mode);
60 
61  virtual void handleTimerEvent(const TimerEvent&);
62 
63  void handleAllocation(const ReceivedDataStructure<protocol::dynamic_node_id::Allocation>& msg);
64 
65 public:
66  typedef protocol::HardwareVersion::FieldTypes::unique_id UniqueID;
67 
69  : TimerBase(node)
70  , dnida_pub_(node)
71  , dnida_sub_(node)
73  , unique_id_{0}
74 #endif
75  , size_of_received_unique_id_(0)
76  { }
77 
87  int start(const UniqueID& unique_id,
88  const NodeID preferred_node_id = NodeID::Broadcast,
89  const TransferPriority transfer_priority = TransferPriority::OneHigherThanLowest);
90 
94  bool isAllocationComplete() const { return getAllocatedNodeID().isUnicast(); }
95 
102  NodeID getAllocatedNodeID() const { return allocated_node_id_; }
103 
110  NodeID getAllocatorNodeID() const { return allocator_node_id_; }
111 };
112 
113 }
114 
115 #endif // UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_CLIENT_HPP_INCLUDED
uavcan::TimerBase
Definition: timer.hpp:46
subscriber.hpp
uavcan::uint32_t
std::uint32_t uint32_t
Definition: std.hpp:26
uavcan::Subscriber
Definition: subscriber.hpp:45
uavcan::Publisher< protocol::dynamic_node_id::Allocation >
uavcan::DynamicNodeIDClient::allocated_node_id_
NodeID allocated_node_id_
Definition: dynamic_node_id_client.hpp:52
uavcan::DynamicNodeIDClient::Mode
Mode
Definition: dynamic_node_id_client.hpp:38
uavcan::DynamicNodeIDClient::allocator_node_id_
NodeID allocator_node_id_
Definition: dynamic_node_id_client.hpp:53
uavcan::NodeID
Definition: transfer.hpp:112
uavcan::DynamicNodeIDClient::isAllocationComplete
bool isAllocationComplete() const
Definition: dynamic_node_id_client.hpp:94
uavcan::ReceivedDataStructure
Definition: generic_subscriber.hpp:39
uavcan::MonotonicDuration
Definition: time.hpp:182
uavcan::DynamicNodeIDClient::dnida_sub_
Subscriber< protocol::dynamic_node_id::Allocation, AllocationCallback > dnida_sub_
Definition: dynamic_node_id_client.hpp:46
publisher.hpp
timer.hpp
uavcan::DynamicNodeIDClient::ModeWaitingForTimeSlot
@ ModeWaitingForTimeSlot
Definition: dynamic_node_id_client.hpp:40
uavcan::DynamicNodeIDClient::dnida_pub_
Publisher< protocol::dynamic_node_id::Allocation > dnida_pub_
Definition: dynamic_node_id_client.hpp:45
uavcan::uint8_t
std::uint8_t uint8_t
Definition: std.hpp:24
uavcan::TransferPriority::OneHigherThanLowest
static const TransferPriority OneHigherThanLowest
Definition: transfer.hpp:40
uavcan::DynamicNodeIDClient::UniqueID
protocol::HardwareVersion::FieldTypes::unique_id UniqueID
Definition: dynamic_node_id_client.hpp:66
uavcan::DynamicNodeIDClient::size_of_received_unique_id_
uint8_t size_of_received_unique_id_
Definition: dynamic_node_id_client.hpp:49
uavcan::DynamicNodeIDClient::preferred_node_id_
NodeID preferred_node_id_
Definition: dynamic_node_id_client.hpp:51
uavcan::DynamicNodeIDClient
Definition: dynamic_node_id_client.hpp:31
UAVCAN_EXPORT
#define UAVCAN_EXPORT
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:108
uavcan::NodeID::Broadcast
static const NodeID Broadcast
Definition: transfer.hpp:122
method_binder.hpp
uavcan::INode
Definition: abstract_node.hpp:19
UAVCAN_CPP_VERSION
#define UAVCAN_CPP_VERSION
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:39
uavcan::DynamicNodeIDClient::getAllocatedNodeID
NodeID getAllocatedNodeID() const
Definition: dynamic_node_id_client.hpp:102
build_config.hpp
UAVCAN_CPP11
#define UAVCAN_CPP11
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:30
start
ROSCPP_DECL void start()
uavcan::MethodBinder
Definition: method_binder.hpp:20
pyuavcan_v0.introspect.node
node
Definition: introspect.py:398
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
uavcan::DynamicNodeIDClient::DynamicNodeIDClient
DynamicNodeIDClient(INode &node)
Definition: dynamic_node_id_client.hpp:68
uavcan::DynamicNodeIDClient::getAllocatorNodeID
NodeID getAllocatorNodeID() const
Definition: dynamic_node_id_client.hpp:110
uavcan::dynamic_node_id_server::UniqueID
protocol::dynamic_node_id::server::Entry::FieldTypes::unique_id UniqueID
Definition: protocol/dynamic_node_id_server/types.hpp:22
uavcan::TimerEvent
Definition: timer.hpp:32
uavcan::DynamicNodeIDClient::ModeDelayBeforeFollowup
@ ModeDelayBeforeFollowup
Definition: dynamic_node_id_client.hpp:41


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:02