aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Babushkin <anton.babushkin@me.com>2015-04-29 15:54:21 +0200
committerAnton Babushkin <anton.babushkin@me.com>2015-04-29 15:54:21 +0200
commit08dc7d1fbaa59c4a32a7e116d82959d977fb890e (patch)
tree5ecba9c226748f44a663c075d160eeb65f4a438f
parent2a46e0f0b6a9521015e05b87209de7f9604b9205 (diff)
downloadpx4-firmware-mavlink_manual_switches.tar.gz
px4-firmware-mavlink_manual_switches.tar.bz2
px4-firmware-mavlink_manual_switches.zip
mavlink: use 'buttons' field of MANUAL_CONTROL message as mode switchesmavlink_manual_switches
-rw-r--r--src/modules/mavlink/mavlink_receiver.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp
index c4e332bf1..03443d545 100644
--- a/src/modules/mavlink/mavlink_receiver.cpp
+++ b/src/modules/mavlink/mavlink_receiver.cpp
@@ -897,12 +897,21 @@ MavlinkReceiver::handle_message_radio_status(mavlink_message_t *msg)
}
}
+static switch_pos_t decode_switch_pos(uint16_t buttons, int sw) {
+ return (buttons >> (sw * 2)) & 3;
+}
+
void
MavlinkReceiver::handle_message_manual_control(mavlink_message_t *msg)
{
mavlink_manual_control_t man;
mavlink_msg_manual_control_decode(msg, &man);
+ // Check target
+ if (man.target != 0 && man.target != _mavlink->get_system_id()) {
+ return;
+ }
+
struct manual_control_setpoint_s manual;
memset(&manual, 0, sizeof(manual));
@@ -912,6 +921,13 @@ MavlinkReceiver::handle_message_manual_control(mavlink_message_t *msg)
manual.r = man.r / 1000.0f;
manual.z = man.z / 1000.0f;
+ manual.mode_switch = decode_switch_pos(man.buttons, 0);
+ manual.return_switch = decode_switch_pos(man.buttons, 1);
+ manual.posctl_switch = decode_switch_pos(man.buttons, 2);
+ manual.loiter_switch = decode_switch_pos(man.buttons, 3);
+ manual.acro_switch = decode_switch_pos(man.buttons, 4);
+ manual.offboard_switch = decode_switch_pos(man.buttons, 5);
+
// warnx("pitch: %.2f, roll: %.2f, yaw: %.2f, throttle: %.2f", (double)manual.x, (double)manual.y, (double)manual.r, (double)manual.z);
if (_manual_pub < 0) {