13 constexpr std::int32_t channel_limit = 660;
14 const auto valid_channel = [](std::int32_t value) {
15 return value >= -channel_limit && value <= channel_limit;
17 const auto valid_switch = [](std::int32_t value) {
18 return value >=
static_cast<std::int32_t
>(switch_position::up) &&
19 value <=
static_cast<std::int32_t
>(switch_position::middle);
21 const auto valid_mouse_axis = [](std::int32_t value) {
22 return value >= std::numeric_limits<std::int16_t>::min() &&
23 value <= std::numeric_limits<std::int16_t>::max();
26 return valid_channel(state.ch0) && valid_channel(state.ch1) &&
27 valid_channel(state.ch2) && valid_channel(state.ch3) &&
28 valid_channel(state.ch4) && valid_switch(state.s1) &&
29 valid_switch(state.s2) && valid_mouse_axis(state.mouse_x) &&
30 valid_mouse_axis(state.mouse_y) && valid_mouse_axis(state.mouse_z) &&
31 (state.mouse_l == 0 || state.mouse_l == 1) &&
32 (state.mouse_r == 0 || state.mouse_r == 1) &&
33 state.key >= 0 && state.key <= std::numeric_limits<std::uint16_t>::max();
42 auto& serial = roboctrl::get<io::serial>(info.serial_name);
44 if (!valid_control_pad_state(
state)) {
45 log_warn(
"Rejected invalid control-pad frame");
control_pad(const info_type &info)
构造遥控器设备并注册串口回调。
control_pad_state state() const noexcept
获取最近一次有效报文解析出的输入快照。
void log_warn(std::format_string< Args... > fmt, Args &&...args) const
输出warn日志