54 using DriverPair = std::pair<std::string, ExitFrameData>;
67 const std::vector<DriverPair>& driver_set);
68 MotorGuard(MotorGuard&) =
delete;
69 MotorGuard& operator=(
const MotorGuard&) =
delete;
77 std::atomic<std::chrono::steady_clock::time_point> last_fed_time_;
78 std::atomic<bool> triggered_;
82 std::vector<std::shared_ptr<Can::CanDriver>> drivers;
84 std::unordered_map<std::shared_ptr<Can::CanDriver>, std::unique_ptr<WatchdogState>> watchdog_states_;
86 std::unordered_map<std::shared_ptr<Can::CanDriver>, std::array<uint8_t, 16>> driver_exit_data_;
87 std::mutex state_mutex_;
88 std::chrono::milliseconds check_timeout_{50};
89 std::jthread watchdog_monitor_;
96 void feed_watchdog(
const std::shared_ptr<Can::CanDriver>& driver);
102 void watchdog_monitor_func_(
const std::stop_token& stop_token);
108 void circuit_breaker_action_(
const std::shared_ptr<Can::CanDriver>& driver);