GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
super_cap.h
1#pragma once
2
3#include <cstdint>
4#include "core/async.hpp"
5#include "device/base.hpp"
6#include "utils/singleton.hpp"
7
8namespace roboctrl::device {
9
10class super_cap : public device_base, public utils::singleton_base<super_cap>, public logable<super_cap> {
11public:
12 struct info_type {
13 using owner_type = super_cap;
14 std::string can_name;
15 uint16_t receive_id {0x51};
16 uint16_t command_id {0x61};
17 uint16_t max_power_limit {150};
18 uint16_t buffer_target {50};
19 std::chrono::steady_clock::duration resend_time {std::chrono::milliseconds{50}};
20 std::chrono::steady_clock::duration command_timeout {std::chrono::milliseconds{100}};
21 };
22
23 super_cap() : device_base{std::chrono::milliseconds{500}} {}
24 static bool valid_configuration(const info_type& info) {
25 return !info.can_name.empty() && info.receive_id <= 0x7ff && info.command_id <= 0x7ff
26 && info.receive_id != info.command_id && info.max_power_limit > 0
27 && info.resend_time > std::chrono::steady_clock::duration::zero()
28 && info.command_timeout >= info.resend_time;
29 }
30 std::string desc() const { return "super cap"; }
31 bool init(const info_type& info);
32 void connect();
33 void start();
34 awaitable<void> task();
35 awaitable<void> stop_output();
36 awaitable<void> set(bool enable, uint16_t power_limit);
37 bool configured() const { return configured_; }
38 float chassis_power() const { return chassis_power_; }
39 uint16_t chassis_power_limit() const { return chassis_power_limit_; }
40 uint8_t energy() const { return energy_; }
41 uint8_t error_code() const { return error_code_; }
42 uint64_t sample_sequence() const { return sample_sequence_; }
43
44private:
45 info_type info_;
46 float chassis_power_ {0.f};
47 uint16_t chassis_power_limit_ {0};
48 uint8_t energy_ {0};
49 uint8_t error_code_ {0};
50 uint64_t sample_sequence_ {0};
51 uint16_t requested_power_limit_ {0};
52 bool requested_enabled_ {false};
53 bool configured_ {false};
54 bool connected_ {false};
55 bool started_ {false};
56 std::chrono::steady_clock::time_point last_command_ {};
57};
58
59static_assert(utils::singleton<super_cap>);
60
61} // namespace roboctrl::device
异步任务上下文组件。
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
Definition logger.h:178
提供单例模式的单例基类
Definition singleton.hpp:19
设备抽象基类与通用概念。
设备基础类,提供判断设备离线的基础功能
Definition base.hpp:38