Motion Master 6.0.0-alpha.50
Next-generation motion control software
Loading...
Searching...
No Matches
parameter_refresher.h
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <condition_variable>
5#include <cstddef>
6#include <cstdint>
7#include <map>
8#include <mutex>
9#include <thread>
10
11namespace mm::node {
12
13class DeviceManager;
14
32 public:
34 explicit ParameterRefresher(DeviceManager& deviceManager);
35
38
41
52 void acquire(uint16_t devicePosition, uint16_t index, uint8_t subindex,
53 std::chrono::milliseconds period);
54
57 void release(uint16_t devicePosition, uint16_t index, uint8_t subindex);
58
60 void start();
61
63 void stop();
64
66 std::size_t trackedCount() const;
67
71 void pollDue();
72
73 private:
76 struct Entry {
77 uint16_t devicePosition = 0;
78 uint16_t index = 0;
79 uint8_t subindex = 0;
80 int refCount = 0;
81 std::chrono::milliseconds period{};
82 std::chrono::steady_clock::time_point nextDue{}; // default (epoch) => due immediately
83 std::chrono::milliseconds backoff{}; // 0 until a poll fails
84 };
85
87 static uint64_t makeKey(uint16_t devicePosition, uint16_t index, uint8_t subindex);
88
91 void run();
92
93 DeviceManager& deviceManager_;
94 mutable std::mutex mutex_;
95 std::condition_variable cv_;
96 std::map<uint64_t, Entry> entries_;
97 bool running_ = false;
98 std::thread thread_;
99};
100
101} // namespace mm::node
Owns the fieldbus driver and node collection, and drives PDO exchange.
Definition device_manager.h:183
Keeps a reference-counted set of SDO parameters fresh by polling them off-thread.
Definition parameter_refresher.h:31
ParameterRefresher & operator=(const ParameterRefresher &)=delete
ParameterRefresher(const ParameterRefresher &)=delete
void stop()
Stops and joins the background polling thread. Idempotent.
Definition parameter_refresher.cc:90
void pollDue()
Polls every tracked object whose schedule is due as of now, advancing each one's next-due time (and a...
Definition parameter_refresher.cc:109
std::size_t trackedCount() const
Number of distinct objects currently tracked (reference count > 0). For tests/UI.
Definition parameter_refresher.cc:104
void start()
Starts the background polling thread. Idempotent.
Definition parameter_refresher.cc:80
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:66
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:41
~ParameterRefresher()
Stops the thread (if running) and joins it.
Definition parameter_refresher.cc:34
Definition http_server.h:16