Go to the documentation of this file.
5 #ifndef UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_SERVER_NODE_DISCOVERER_HPP_INCLUDED
6 #define UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_SERVER_NODE_DISCOVERER_HPP_INCLUDED
19 #include <uavcan/protocol/NodeStatus.hpp>
20 #include <uavcan/protocol/GetNodeInfo.hpp>
24 namespace dynamic_node_id_server
210 UAVCAN_TRACE(
"dynamic_node_id_server::NodeDiscoverer",
"GetNodeInfo response from %d",
211 int(result.
getCallID().server_node_id.get()));
225 "GetNodeInfo request to %d has timed out, %d attempts",
258 UAVCAN_TRACE(
"dynamic_node_id_server::NodeDiscoverer",
"Requesting GetNodeInfo from node %d",
348 #endif // Include guard
int init(const TransferPriority priority)
MonotonicDuration getPeriod() const
bool needToQuery(NodeID node_id)
virtual NodeAwareness checkNodeAwareness(NodeID node_id) const =0
@ NodeAwarenessKnownButNotCommitted
Subscriber< protocol::NodeStatus, NodeStatusCallback > node_status_sub_
ServiceCallID getCallID() const
void removeNode(const NodeID node_id)
Map< NodeID, NodeData > NodeMap
static MonotonicDuration fromMSec(int64_t ms)
TraceDiscoveryCommitCacheUpdated
INodeDiscoveryHandler & handler_
void trace(TraceCode code, int64_t argument)
#define UAVCAN_TRACE(...)
Value * access(const Key &key)
TraceDiscoveryNodeRemoved
Value * insert(const Key &key, const Value &value)
virtual bool canDiscoverNewNodes() const =0
void startPeriodic(MonotonicDuration period)
TraceDiscoveryNodeRestartDetected
uint8_t getNumUnknownNodes() const
NodeDiscoverer(INode &node, IEventTracer &tracer, INodeDiscoveryHandler &handler)
BitSet< NodeID::Max+1 > committed_node_mask_
Nodes that are marked will not be queried.
virtual void registerInternalFailure(const char *msg)=0
void handleNodeStatus(const ReceivedDataStructure< protocol::NodeStatus > &msg)
void finalizeNodeDiscovery(const UniqueID *unique_id_or_null, NodeID node_id)
TraceDiscoveryGetNodeInfoRequest
KVPair * getByIndex(unsigned index)
bool hasUnknownNodes() const
void handleGetNodeInfoResponse(const ServiceCallResult< protocol::GetNodeInfo > &result)
uint32_t last_seen_uptime
@ NodeAwarenessKnownAndCommitted
const ResponseFieldType & getResponse() const
TraceDiscoveryNewNodeFound
bool isSuccessful() const
virtual void onEvent(TraceCode event_code, int64_t event_argument)=0
void handleTimerEvent(const TimerEvent &)
TraceDiscoveryGetNodeInfoFailure
NodeID pickNextNodeToQuery() const
@ MaxAttemptsToGetNodeInfo
virtual ~INodeDiscoveryHandler()
TraceDiscoveryNodeFinalized
virtual void handleNewNodeDiscovery(const UniqueID *unique_id_or_null, NodeID node_id)=0
NodeID getSrcNodeID() const
MethodBinder< NodeDiscoverer *, void(NodeDiscoverer::*)(const ReceivedDataStructure< protocol::NodeStatus > &)> NodeStatusCallback
ServiceClient< protocol::GetNodeInfo, GetNodeInfoResponseCallback > get_node_info_client_
NodeID pickNextNodeToQueryAndCleanupMap()
uint8_t num_get_node_info_attempts
MethodBinder< NodeDiscoverer *, void(NodeDiscoverer::*)(const ServiceCallResult< protocol::GetNodeInfo > &)> GetNodeInfoResponseCallback
void remove(const Key &key)
protocol::dynamic_node_id::server::Entry::FieldTypes::unique_id UniqueID