GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
controlpad.h
浏览该文件的文档.
1
5#pragma once
6#include <cstdint>
7#include <cstddef>
8#include <string>
9
10#include "base.hpp"
11#include "core/logger.h"
12#include "utils/callback.hpp"
13
14namespace roboctrl::device{
15
17enum class control_channel : std::size_t { ch0 = 0, ch1, ch2, ch3, gimbal_pitch_wheel };
19enum class switch_position : std::int32_t { unknown = 0, up = 1, down = 2, middle = 3 };
20
23 std::int32_t ch0 {};
24 std::int32_t ch1 {};
25 std::int32_t ch2 {};
26 std::int32_t ch3 {};
27 std::int32_t ch4 {};
28 std::int32_t s1 {};
29 std::int32_t s2 {};
30 std::int32_t mouse_x {};
31 std::int32_t mouse_y {};
32 std::int32_t mouse_z {};
33 std::int32_t mouse_l {};
34 std::int32_t mouse_r {};
35 std::int32_t key {};
36
38 std::int32_t channel(control_channel c) const noexcept {
39 switch (c) {
40 case control_channel::ch0: return ch0;
41 case control_channel::ch1: return ch1;
42 case control_channel::ch2: return ch2;
43 case control_channel::ch3: return ch3;
44 case control_channel::gimbal_pitch_wheel: return ch4;
45 }
46 return 0;
47 }
49 std::int32_t gimbal_pitch_wheel() const noexcept { return ch4; }
50};
51
52static_assert(sizeof(control_pad_state) == 52);
53
58class control_pad:public device_base,public logable<control_pad>{
59public:
61 struct info_type{
62 std::string name;
63 std::string serial_name;
64
65 using key_type = std::string;
66 using owner_type = control_pad;
67
68 inline const std::string& key()const{return name;}
69 };
70
72 inline std::string desc()const{
73 return std::format("Control pad {} on serial:{}", info_.name, info_.serial_name);
74 }
75
77 control_pad(const info_type& info);
78
80 control_pad_state state() const noexcept { return state_; }
81
83 fp32 pitch_wheel() const noexcept { return static_cast<fp32>(state_.ch4); }
84
86 template<callback_fn<control_pad_state> F>
87 void on_update(F&& callback) {
88 on_update_.add(std::forward<F>(callback));
89 }
90private:
91 info_type info_;
92 control_pad_state state_ {};
94};
95
96static_assert(device<control_pad>);
97
98}
协程回调收集器。
管理一组协程回调的容器。
Definition callback.hpp:36
遥控器设备,负责解析上报报文并发布输入状态
Definition controlpad.h:58
std::string desc() const
返回遥控器及其串口名称。
Definition controlpad.h:72
void on_update(F &&callback)
注册输入更新回调。
Definition controlpad.h:87
control_pad_state state() const noexcept
获取最近一次有效报文解析出的输入快照。
Definition controlpad.h:80
fp32 pitch_wheel() const noexcept
获取云台俯仰拨轮原始值。
Definition controlpad.h:83
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
Definition logger.h:178
IO的基础组件。
用于日志输出的组件。
switch_position
遥控器三段开关位置。
Definition controlpad.h:19
control_channel
遥控器模拟通道的统一索引。
Definition controlpad.h:17
遥控器实例化参数。
Definition controlpad.h:61
串口遥控输入的稳定内存表示。
Definition controlpad.h:22
std::int32_t channel(control_channel c) const noexcept
按抽象通道枚举读取通道值。
Definition controlpad.h:38
std::int32_t gimbal_pitch_wheel() const noexcept
获取云台俯仰拨轮原始值。
Definition controlpad.h:49
设备基础类,提供判断设备离线的基础功能
Definition base.hpp:38
float fp32
单精度浮点别名。
Definition utils.hpp:22