GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
base.hpp
浏览该文件的文档.
1
6#pragma once
7#include <chrono>
8#include <concepts>
9#include <type_traits>
10#include <vector>
11
12#include "core/logger.h"
13#include "core/multiton.hpp"
14#include "core/async.hpp"
15#include "utils/concepts.hpp"
16#include "utils/singleton.hpp"
17#include "utils/utils.hpp"
18
19using namespace std::chrono_literals;
20
25namespace roboctrl::device{
26
39protected:
40 const std::chrono::nanoseconds offline_timeout_;
41 std::chrono::nanoseconds tick_time_ {
42 utils::now() - (offline_timeout_ == std::chrono::nanoseconds::max() ? 0ns : offline_timeout_)
43 };
44
45 bool terminated_ = false;
46
47public:
48 device_base(const std::chrono::nanoseconds offline_timeout);
49 virtual ~device_base() = default;
50
56 bool offline() const { return offline_timeout_ == 0ms?false:utils::now() - tick_time_ > offline_timeout_; }
57
61 void tick() { tick_time_ = utils::now(); }
62
69 awaitable<void> task(){co_return ;}
70};
71
75template<typename T>
76concept device = std::is_base_of_v<device_base, T> && roboctrl::owner<T> && requires (T dev) {
77 {dev.task()} -> std::same_as<awaitable<void>>;
78};
79
86bool is_offline(auto&... devs)
87 requires (requires(decltype(devs) d) {
88 { d.offline() } -> std::same_as<bool>;
89 } and ...) {
90 return (devs.offline() or ...);
91}
92}
异步任务上下文组件。
设备概念,约束 task() 等接口。
Definition base.hpp:76
公共Concept与元类型工具。
用于日志输出的组件。
用于实现多例模式的通用组件。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:46
bool is_offline(auto &... devs)
判断多个设备是否离线
Definition base.hpp:86
auto now()
记录程序启动后的纳秒级时间戳。
Definition utils.hpp:158
设备基础类,提供判断设备离线的基础功能
Definition base.hpp:38
const std::chrono::nanoseconds offline_timeout_
设备离线超时时间
Definition base.hpp:40
std::chrono::nanoseconds tick_time_
上次心跳时间
Definition base.hpp:41
void tick()
更新心跳时间
Definition base.hpp:61
awaitable< void > task()
默认的task
Definition base.hpp:69
bool offline() const
判断设备是否离线
Definition base.hpp:56
快速继承获得“不可移动”约束的基类。
Definition concepts.hpp:59
快速继承获得“不可复制”约束的基类。
Definition concepts.hpp:68
常用数值与字节工具集合。