panic_broadcaster.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_PANIC_BROADCASTER_HPP_INCLUDED
6 #define UAVCAN_PROTOCOL_PANIC_BROADCASTER_HPP_INCLUDED
7 
8 #include <uavcan/debug.hpp>
10 #include <uavcan/node/timer.hpp>
11 #include <uavcan/protocol/Panic.hpp>
12 
13 namespace uavcan
14 {
19 {
21  protocol::Panic msg_;
22 
23  void publishOnce()
24  {
25  const int res = pub_.broadcast(msg_);
26  if (res < 0)
27  {
28  pub_.getNode().registerInternalFailure("Panic pub failed");
29  }
30  }
31 
32  virtual void handleTimerEvent(const TimerEvent&)
33  {
34  publishOnce();
35  }
36 
37 public:
39  : TimerBase(node)
40  , pub_(node)
41  { }
42 
50  void panic(const char* short_reason_description,
51  MonotonicDuration broadcasting_period = MonotonicDuration::fromMSec(100),
53  {
54  msg_.reason_text.clear();
55  const char* p = short_reason_description;
56  while (p && *p)
57  {
58  if (msg_.reason_text.size() == msg_.reason_text.capacity())
59  {
60  break;
61  }
62  msg_.reason_text.push_back(protocol::Panic::FieldTypes::reason_text::ValueType(*p));
63  p++;
64  }
65 
66  UAVCAN_TRACE("PanicBroadcaster", "Panicking with reason '%s'", getReason().c_str());
67 
68  pub_.setTxTimeout(broadcasting_period);
69  pub_.setPriority(priority);
70 
71  publishOnce();
72  startPeriodic(broadcasting_period);
73  }
74 
78  void dontPanic() // Where's my towel
79  {
80  stop();
81  msg_.reason_text.clear();
82  }
83 
84  bool isPanicking() const { return isRunning(); }
85 
86  const typename protocol::Panic::FieldTypes::reason_text& getReason() const
87  {
88  return msg_.reason_text;
89  }
90 };
91 
92 }
93 
94 #endif // UAVCAN_PROTOCOL_PANIC_BROADCASTER_HPP_INCLUDED
uavcan::TimerBase
Definition: timer.hpp:46
debug.hpp
uavcan::GenericPublisherBase::setTxTimeout
void setTxTimeout(MonotonicDuration tx_timeout)
Definition: uc_generic_publisher.cpp:56
uavcan::Publisher< protocol::Panic >
uavcan::GenericPublisherBase::getNode
INode & getNode() const
Definition: generic_publisher.hpp:76
uavcan::PanicBroadcaster::panic
void panic(const char *short_reason_description, MonotonicDuration broadcasting_period=MonotonicDuration::fromMSec(100), const TransferPriority priority=TransferPriority::Default)
Definition: panic_broadcaster.hpp:50
uavcan::DurationBase< MonotonicDuration >::fromMSec
static MonotonicDuration fromMSec(int64_t ms)
Definition: time.hpp:41
uavcan::PanicBroadcaster::getReason
const protocol::Panic::FieldTypes::reason_text & getReason() const
Definition: panic_broadcaster.hpp:86
uavcan::PanicBroadcaster::handleTimerEvent
virtual void handleTimerEvent(const TimerEvent &)
Definition: panic_broadcaster.hpp:32
uavcan::PanicBroadcaster::dontPanic
void dontPanic()
Definition: panic_broadcaster.hpp:78
UAVCAN_TRACE
#define UAVCAN_TRACE(...)
Definition: libuavcan/libuavcan/include/uavcan/debug.hpp:31
uavcan::PanicBroadcaster::msg_
protocol::Panic msg_
Definition: panic_broadcaster.hpp:21
uavcan::MonotonicDuration
Definition: time.hpp:182
publisher.hpp
timer.hpp
uavcan::PanicBroadcaster
Definition: panic_broadcaster.hpp:18
uavcan::INode::registerInternalFailure
virtual void registerInternalFailure(const char *msg)=0
UAVCAN_EXPORT
#define UAVCAN_EXPORT
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:108
uavcan::PanicBroadcaster::publishOnce
void publishOnce()
Definition: panic_broadcaster.hpp:23
uavcan::INode
Definition: abstract_node.hpp:19
uavcan::TransferPriority
Definition: transfer.hpp:28
uavcan::Publisher::broadcast
int broadcast(const DataType &message)
Definition: publisher.hpp:52
pyuavcan_v0.introspect.node
node
Definition: introspect.py:398
uavcan::GenericPublisherBase::setPriority
void setPriority(const TransferPriority prio)
Definition: generic_publisher.hpp:74
uavcan::PanicBroadcaster::pub_
Publisher< protocol::Panic > pub_
Definition: panic_broadcaster.hpp:20
uavcan::PanicBroadcaster::PanicBroadcaster
PanicBroadcaster(INode &node)
Definition: panic_broadcaster.hpp:38
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
uavcan::PanicBroadcaster::isPanicking
bool isPanicking() const
Definition: panic_broadcaster.hpp:84
uavcan::TransferPriority::Default
static const TransferPriority Default
This priority is used by default.
Definition: transfer.hpp:38
uavcan::TimerEvent
Definition: timer.hpp:32


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