/* * Copyright (C) 2014 Pavel Kirienko */ #pragma once #include #include #include namespace uavcan { class UAVCAN_EXPORT PanicBroadcaster : private TimerBase { Publisher pub_; protocol::Panic msg_; void publishOnce(); virtual void handleTimerEvent(const TimerEvent&); public: explicit PanicBroadcaster(INode& node) : TimerBase(node) , pub_(node) { pub_.setTxTimeout(MonotonicDuration::fromMSec(protocol::Panic::BROADCASTING_INTERVAL_MS - 10)); } void panic(const char* short_reason); void dontPanic(); // Where's my towel bool isPanicking() const; const typename protocol::Panic::FieldTypes::reason_text& getReason() const; }; }