node_status_provider.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #ifndef UAVCAN_PROTOCOL_NODE_STATUS_PROVIDER_HPP_INCLUDED
6 #define UAVCAN_PROTOCOL_NODE_STATUS_PROVIDER_HPP_INCLUDED
7 
11 #include <uavcan/node/timer.hpp>
13 #include <uavcan/build_config.hpp>
14 #include <uavcan/protocol/NodeStatus.hpp>
15 #include <uavcan/protocol/GetNodeInfo.hpp>
16 
17 namespace uavcan
18 {
24 {
25 public:
37  virtual void updateNodeStatus() = 0;
38 
40 };
41 
52 {
54  void (NodeStatusProvider::*)(const protocol::GetNodeInfo::Request&,
55  protocol::GetNodeInfo::Response&)> GetNodeInfoCallback;
56 
58 
61 
62  protocol::GetNodeInfo::Response node_info_;
63 
65 
66  INode& getNode() { return node_status_pub_.getNode(); }
67 
68  bool isNodeInfoInitialized() const;
69 
70  int publish();
71 
72  virtual void handleTimerEvent(const TimerEvent&);
73  void handleGetNodeInfoRequest(const protocol::GetNodeInfo::Request&, protocol::GetNodeInfo::Response& rsp);
74 
75 public:
78 
80 
82  : TimerBase(node)
83  , creation_timestamp_(node.getMonotonicTime())
84  , node_status_pub_(node)
85  , gni_srv_(node)
86  , ad_hoc_status_updater_(UAVCAN_NULLPTR)
87  {
88  UAVCAN_ASSERT(!creation_timestamp_.isZero());
89 
90  node_info_.status.mode = protocol::NodeStatus::MODE_INITIALIZATION;
91 
92  node_info_.status.health = protocol::NodeStatus::HEALTH_OK;
93  }
94 
99  int startAndPublish(const TransferPriority priority = TransferPriority::Default);
100 
105  int forcePublish() { return publish(); }
106 
112  void setStatusPublicationPeriod(uavcan::MonotonicDuration period);
113  uavcan::MonotonicDuration getStatusPublicationPeriod() const;
114 
121  void setAdHocNodeStatusUpdater(IAdHocNodeStatusUpdater* updater);
122  IAdHocNodeStatusUpdater* getAdHocNodeStatusUpdater() const { return ad_hoc_status_updater_; }
123 
127  uint8_t getHealth() const { return node_info_.status.health; }
128  void setHealth(uint8_t code);
129  void setHealthOk() { setHealth(protocol::NodeStatus::HEALTH_OK); }
130  void setHealthWarning() { setHealth(protocol::NodeStatus::HEALTH_WARNING); }
131  void setHealthError() { setHealth(protocol::NodeStatus::HEALTH_ERROR); }
132  void setHealthCritical() { setHealth(protocol::NodeStatus::HEALTH_CRITICAL); }
133 
137  uint8_t getMode() const { return node_info_.status.mode; }
138  void setMode(uint8_t code);
139  void setModeOperational() { setMode(protocol::NodeStatus::MODE_OPERATIONAL); }
140  void setModeInitialization() { setMode(protocol::NodeStatus::MODE_INITIALIZATION); }
141  void setModeMaintenance() { setMode(protocol::NodeStatus::MODE_MAINTENANCE); }
142  void setModeSoftwareUpdate() { setMode(protocol::NodeStatus::MODE_SOFTWARE_UPDATE); }
143  void setModeOffline() { setMode(protocol::NodeStatus::MODE_OFFLINE); }
144 
148  void setVendorSpecificStatusCode(VendorSpecificStatusCode code);
150  {
151  return node_info_.status.vendor_specific_status_code;
152  }
153 
159  const NodeName& getName() const { return node_info_.name; }
160  void setName(const NodeName& name);
161 
166  const protocol::SoftwareVersion& getSoftwareVersion() const { return node_info_.software_version; }
167  const protocol::HardwareVersion& getHardwareVersion() const { return node_info_.hardware_version; }
168  void setSoftwareVersion(const protocol::SoftwareVersion& version);
169  void setHardwareVersion(const protocol::HardwareVersion& version);
170 };
171 
172 }
173 
174 #endif // UAVCAN_PROTOCOL_NODE_STATUS_PROVIDER_HPP_INCLUDED
uavcan::NodeStatusProvider::setHealthWarning
void setHealthWarning()
Definition: node_status_provider.hpp:130
uavcan::TimerBase
Definition: timer.hpp:46
subscriber.hpp
UAVCAN_NULLPTR
#define UAVCAN_NULLPTR
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:51
uavcan::IAdHocNodeStatusUpdater::~IAdHocNodeStatusUpdater
virtual ~IAdHocNodeStatusUpdater()
Definition: node_status_provider.hpp:39
uavcan::NodeStatusProvider::VendorSpecificStatusCode
StorageType< typename protocol::NodeStatus::FieldTypes::vendor_specific_status_code >::Type VendorSpecificStatusCode
Definition: node_status_provider.hpp:77
uavcan::NodeStatusProvider::setModeOffline
void setModeOffline()
Definition: node_status_provider.hpp:143
uavcan::NodeStatusProvider::NodeStatusProvider
NodeStatusProvider(INode &node)
Definition: node_status_provider.hpp:81
uavcan::Publisher< protocol::NodeStatus >
uavcan::GenericPublisherBase::getNode
INode & getNode() const
Definition: generic_publisher.hpp:76
uavcan::NodeStatusProvider::getMode
uint8_t getMode() const
Definition: node_status_provider.hpp:137
uavcan::NodeStatusProvider::setModeInitialization
void setModeInitialization()
Definition: node_status_provider.hpp:140
uavcan::NodeStatusProvider::setModeOperational
void setModeOperational()
Definition: node_status_provider.hpp:139
uavcan::NodeStatusProvider
Definition: node_status_provider.hpp:51
uavcan::NodeStatusProvider::setHealthError
void setHealthError()
Definition: node_status_provider.hpp:131
uavcan::MonotonicDuration
Definition: time.hpp:182
uavcan::NodeStatusProvider::getNode
INode & getNode()
Definition: node_status_provider.hpp:66
publisher.hpp
timer.hpp
uavcan::NodeStatusProvider::setModeSoftwareUpdate
void setModeSoftwareUpdate()
Definition: node_status_provider.hpp:142
A
Definition: comparison.cpp:95
uavcan::NodeStatusProvider::ad_hoc_status_updater_
IAdHocNodeStatusUpdater * ad_hoc_status_updater_
Definition: node_status_provider.hpp:64
uavcan::NodeStatusProvider::getHealth
uint8_t getHealth() const
Definition: node_status_provider.hpp:127
uavcan::ServiceServer
Definition: service_server.hpp:90
uavcan::uint8_t
std::uint8_t uint8_t
Definition: std.hpp:24
uavcan::NodeStatusProvider::setHealthCritical
void setHealthCritical()
Definition: node_status_provider.hpp:132
uavcan::NodeStatusProvider::gni_srv_
ServiceServer< protocol::GetNodeInfo, GetNodeInfoCallback > gni_srv_
Definition: node_status_provider.hpp:60
uavcan::NodeStatusProvider::forcePublish
int forcePublish()
Definition: node_status_provider.hpp:105
UAVCAN_EXPORT
#define UAVCAN_EXPORT
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:108
uavcan::IAdHocNodeStatusUpdater::updateNodeStatus
virtual void updateNodeStatus()=0
uavcan::TimeBase::isZero
bool isZero() const
Definition: time.hpp:123
uavcan::NodeStatusProvider::getHardwareVersion
const protocol::HardwareVersion & getHardwareVersion() const
Definition: node_status_provider.hpp:167
method_binder.hpp
uavcan::NodeStatusProvider::NodeName
StorageType< typename protocol::GetNodeInfo::Response::FieldTypes::name >::Type NodeName
Definition: node_status_provider.hpp:79
uavcan::INode
Definition: abstract_node.hpp:19
uavcan::TransferPriority
Definition: transfer.hpp:28
uavcan::NodeStatusProvider::getVendorSpecificStatusCode
VendorSpecificStatusCode getVendorSpecificStatusCode() const
Definition: node_status_provider.hpp:149
uavcan::NodeStatusProvider::getName
const NodeName & getName() const
Definition: node_status_provider.hpp:159
build_config.hpp
uavcan::NodeStatusProvider::getAdHocNodeStatusUpdater
IAdHocNodeStatusUpdater * getAdHocNodeStatusUpdater() const
Definition: node_status_provider.hpp:122
uavcan::IAdHocNodeStatusUpdater
Definition: node_status_provider.hpp:23
uavcan::MethodBinder
Definition: method_binder.hpp:20
uavcan::NodeStatusProvider::node_info_
protocol::GetNodeInfo::Response node_info_
Definition: node_status_provider.hpp:62
uavcan::NodeStatusProvider::setHealthOk
void setHealthOk()
Definition: node_status_provider.hpp:129
pyuavcan_v0.introspect.node
node
Definition: introspect.py:398
uavcan::NodeStatusProvider::creation_timestamp_
const MonotonicTime creation_timestamp_
Definition: node_status_provider.hpp:57
uavcan::MonotonicTime
Definition: time.hpp:184
uavcan::NodeStatusProvider::getSoftwareVersion
const protocol::SoftwareVersion & getSoftwareVersion() const
Definition: node_status_provider.hpp:166
uavcan::NodeStatusProvider::node_status_pub_
Publisher< protocol::NodeStatus > node_status_pub_
Definition: node_status_provider.hpp:59
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
service_server.hpp
uavcan::NodeStatusProvider::setModeMaintenance
void setModeMaintenance()
Definition: node_status_provider.hpp:141
uavcan::TransferPriority::Default
static const TransferPriority Default
This priority is used by default.
Definition: transfer.hpp:38
UAVCAN_ASSERT
#define UAVCAN_ASSERT(x)
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:184
uavcan::StorageType::Type
T Type
Definition: type_util.hpp:53
uavcan::TimerEvent
Definition: timer.hpp:32


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