4#include <condition_variable>
67 std::chrono::milliseconds period);
71 void release(uint16_t devicePosition, uint16_t index, uint8_t
subindex);
92 uint16_t devicePosition = 0;
96 std::chrono::milliseconds period{};
97 std::chrono::steady_clock::time_point nextDue{};
98 std::chrono::milliseconds backoff{};
105 std::chrono::steady_clock::time_point openAt{};
111 uint16_t devicePosition = 0;
117 static uint64_t makeKey(uint16_t devicePosition, uint16_t index, uint8_t
subindex);
125 std::optional<Job> takeDue(std::chrono::steady_clock::time_point now,
126 std::chrono::steady_clock::time_point& wakeAt);
130 void poll(
const Job& job);
134 void work(
const std::stop_token& stopToken);
136 DeviceManager& deviceManager_;
137 mutable std::mutex mutex_;
138 std::condition_variable cv_;
139 std::map<uint64_t, Entry> entries_;
142 std::map<uint16_t, Drive> drives_;
143 std::vector<std::jthread> workers_;
Owns the fieldbus driver and node collection, and drives PDO exchange.
Definition device_manager.h:339
Keeps a reference-counted set of SDO parameters fresh by polling them off-thread.
Definition parameter_refresher.h:44
ParameterRefresher & operator=(const ParameterRefresher &)=delete
ParameterRefresher(const ParameterRefresher &)=delete
void stop()
Stops and joins the worker threads. Idempotent.
Definition parameter_refresher.cc:104
void pollDue()
Polls the due objects on the calling thread, one pass, with no worker running.
Definition parameter_refresher.cc:193
std::size_t trackedCount() const
Number of distinct objects currently tracked (reference count > 0). For tests/UI.
Definition parameter_refresher.cc:122
void start()
Starts the worker threads. Idempotent.
Definition parameter_refresher.cc:90
void release(uint16_t devicePosition, uint16_t index, uint8_t subindex)
Drops a reference previously taken with acquire. The object stops being polled when its last referenc...
Definition parameter_refresher.cc:76
void acquire(uint16_t devicePosition, uint16_t index, uint8_t subindex, std::chrono::milliseconds period)
Adds a reference to keeping (devicePosition, index, subindex) fresh.
Definition parameter_refresher.cc:51
~ParameterRefresher()
Stops the workers (if running) and joins them.
Definition parameter_refresher.cc:44
uint8_t subindex
Definition esi_entry.cc:283
Definition bus_health_source.h:7