18#ifndef EASYNAV_SYSTEM__SAFETY__SAFETYCHANNELMONITOR_HPP_
19#define EASYNAV_SYSTEM__SAFETY__SAFETYCHANNELMONITOR_HPP_
27#include "easynav_interfaces/msg/safety_status.hpp"
29#include "easynav_core/SafetyChannel.hpp"
45 using Clock = std::chrono::steady_clock;
46 using Status = easynav_interfaces::msg::SafetyStatus;
49 enum class Condition : uint8_t {VALID, NO_STATUS, STALE, INVALID};
68 Evaluation
evaluate(Clock::time_point now)
const;
77 Clock::duration timeout_ {};
79 std::optional<Status> last_;
80 Clock::time_point last_time_ {};
81 bool last_valid_ {
false};
Turns the safety channel's SafetyStatus messages into what EasyNav applies.
Definition SafetyChannelMonitor.hpp:43
static std::string invalid_reason(const Status &msg)
Why msg is invalid, or "".
Definition SafetyChannelMonitor.cpp:83
std::chrono::steady_clock Clock
Definition SafetyChannelMonitor.hpp:45
Evaluation evaluate(Clock::time_point now) const
The state to apply at now.
Definition SafetyChannelMonitor.cpp:47
void received(const Status &msg, Clock::time_point now)
A status msg was received at now.
Definition SafetyChannelMonitor.cpp:37
Condition
Why the state is what it is.
Definition SafetyChannelMonitor.hpp:49
std::optional< Status > last_status() const
The last status received, if any.
Definition SafetyChannelMonitor.cpp:76
easynav_interfaces::msg::SafetyStatus Status
Definition SafetyChannelMonitor.hpp:46
void configure(double timeout)
Sets the timeout (s, > 0) and forgets any status.
Definition SafetyChannelMonitor.cpp:28
Definition CommandGuard.hpp:36
std::mutex Singleton< C >::mutex_
Definition Singleton.hpp:80
RtMonitor::Status Status
Definition rt_monitor_tests.cpp:25
Definition SafetyChannelMonitor.hpp:52
SafetyChannelState state
Definition SafetyChannelMonitor.hpp:53
bool operator==(const Evaluation &other) const
Definition SafetyChannelMonitor.hpp:55
Condition condition
Definition SafetyChannelMonitor.hpp:54