mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-22 03:03:33 +08:00
new manual_control_switches msg (split out of manual_control_setpoint) (#16270)
- split out switches from manual_control_setpoint into new message manual_control_switches
- manual_control_switches published at minimal rate (~ 1 Hz) or immediately on change
- simple switch debounce in rc_update (2 consecutive identical decodes required)
- manual_control_switches logged at full rate rather than sampled at (5-10% of messages logged)
- manual_control_setpoint publish at minimal rate unless changing
- commander handle landing gear switch for manual modes
- processing of mode_slot and mode_switch is now split so we only do one or the other (not both)
- a future step will be to finally drop mode_switch and accompanying switches entirely
Co-authored-by: Matthias Grob <maetugr@gmail.com>
This commit is contained in:
co-authored by
Matthias Grob
parent
25ef76b3b8
commit
ef6209ba03
@@ -72,6 +72,7 @@
|
||||
#include <uORB/topics/home_position.h>
|
||||
#include <uORB/topics/input_rc.h>
|
||||
#include <uORB/topics/manual_control_setpoint.h>
|
||||
#include <uORB/topics/manual_control_switches.h>
|
||||
#include <uORB/topics/position_controller_status.h>
|
||||
#include <uORB/topics/position_setpoint_triplet.h>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
@@ -3602,6 +3603,7 @@ public:
|
||||
|
||||
private:
|
||||
uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)};
|
||||
uORB::Subscription _manual_control_switches_sub{ORB_ID(manual_control_switches)};
|
||||
|
||||
/* do not allow top copying this class */
|
||||
MavlinkStreamManualControl(MavlinkStreamManualControl &) = delete;
|
||||
@@ -3623,15 +3625,20 @@ protected:
|
||||
msg.y = manual_control_setpoint.y * 1000;
|
||||
msg.z = manual_control_setpoint.z * 1000;
|
||||
msg.r = manual_control_setpoint.r * 1000;
|
||||
unsigned shift = 2;
|
||||
msg.buttons = 0;
|
||||
msg.buttons |= (manual_control_setpoint.mode_switch << (shift * 0));
|
||||
msg.buttons |= (manual_control_setpoint.return_switch << (shift * 1));
|
||||
msg.buttons |= (manual_control_setpoint.posctl_switch << (shift * 2));
|
||||
msg.buttons |= (manual_control_setpoint.loiter_switch << (shift * 3));
|
||||
msg.buttons |= (manual_control_setpoint.acro_switch << (shift * 4));
|
||||
msg.buttons |= (manual_control_setpoint.offboard_switch << (shift * 5));
|
||||
msg.buttons |= (manual_control_setpoint.kill_switch << (shift * 6));
|
||||
|
||||
manual_control_switches_s manual_control_switches{};
|
||||
|
||||
if (_manual_control_switches_sub.copy(&manual_control_switches)) {
|
||||
unsigned shift = 2;
|
||||
msg.buttons = 0;
|
||||
msg.buttons |= (manual_control_switches.mode_switch << (shift * 0));
|
||||
msg.buttons |= (manual_control_switches.return_switch << (shift * 1));
|
||||
msg.buttons |= (manual_control_switches.posctl_switch << (shift * 2));
|
||||
msg.buttons |= (manual_control_switches.loiter_switch << (shift * 3));
|
||||
msg.buttons |= (manual_control_switches.acro_switch << (shift * 4));
|
||||
msg.buttons |= (manual_control_switches.offboard_switch << (shift * 5));
|
||||
msg.buttons |= (manual_control_switches.kill_switch << (shift * 6));
|
||||
}
|
||||
|
||||
mavlink_msg_manual_control_send_struct(_mavlink->get_channel(), &msg);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user