diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index 08b24f339d..c333ba7cc4 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -990,8 +990,8 @@ MavlinkReceiver::handle_message_radio_status(mavlink_message_t *msg) switch_pos_t MavlinkReceiver::decode_switch_pos(uint16_t buttons, unsigned sw) { - // XXX non-standard 3 pos switch decoding - return (buttons >> (sw * 2)) & 3; + // This 2-bit method should be used in the future: (buttons >> (sw * 2)) & 3; + return (buttons & (1 << sw)); } int @@ -1101,26 +1101,10 @@ MavlinkReceiver::handle_message_manual_control(mavlink_message_t *msg) rc.values[0] = man.x / 2 + 1500; /* pitch */ rc.values[1] = man.y / 2 + 1500; - - /* - * yaw needs special handling as some joysticks have a circular mechanical mask, - * which makes the corner positions unreachable. - * scale yaw up and clip it to overcome this. - */ - rc.values[2] = man.r / 1.1f + 1500; - if (rc.values[2] > 2000) { - rc.values[2] = 2000; - } else if (rc.values[2] < 1000) { - rc.values[2] = 1000; - } - + /* yaw */ + rc.values[2] = man.r / 2 + 1500; /* throttle */ - rc.values[3] = man.z / 0.9f + 1000; - if (rc.values[3] > 2000) { - rc.values[3] = 2000; - } else if (rc.values[3] < 1000) { - rc.values[3] = 1000; - } + rc.values[3] = man.z / 2 + 1000; /* decode all switches which fit into the channel mask */ unsigned max_switch = (sizeof(man.buttons) * 8);