diff --git a/ArduCopter/Copter.h b/ArduCopter/Copter.h index 6fd6ed4c18..f54d4ec363 100644 --- a/ArduCopter/Copter.h +++ b/ArduCopter/Copter.h @@ -972,7 +972,6 @@ private: void fence_send_mavlink_status(mavlink_channel_t chan); void update_sensor_status_flags(void); bool set_mode(control_mode_t mode, mode_reason_t reason); - bool gcs_set_mode(uint8_t mode) { return set_mode((control_mode_t)mode, MODE_REASON_GCS_COMMAND); } void update_flight_mode(); void exit_mode(control_mode_t old_control_mode, control_mode_t new_control_mode); bool mode_requires_GPS(control_mode_t mode); diff --git a/ArduCopter/GCS_Mavlink.cpp b/ArduCopter/GCS_Mavlink.cpp index 121f4f375b..70d2b19e2d 100644 --- a/ArduCopter/GCS_Mavlink.cpp +++ b/ArduCopter/GCS_Mavlink.cpp @@ -714,21 +714,6 @@ void GCS_MAVLINK_Copter::handleMessage(mavlink_message_t* msg) break; } - case MAVLINK_MSG_ID_SET_MODE: // MAV ID: 11 - { -#ifdef DISALLOW_GCS_MODE_CHANGE_DURING_RC_FAILSAFE - if (!copter.failsafe.radio) { - handle_set_mode(msg, FUNCTOR_BIND(&copter, &Copter::gcs_set_mode, bool, uint8_t)); - } else { - // don't allow mode changes while in radio failsafe - mavlink_msg_command_ack_send_buf(msg, chan, MAVLINK_MSG_ID_SET_MODE, MAV_RESULT_FAILED); - } -#else - handle_set_mode(msg, FUNCTOR_BIND(&copter, &Copter::gcs_set_mode, bool, uint8_t)); -#endif - break; - } - case MAVLINK_MSG_ID_PARAM_REQUEST_LIST: // MAV ID: 21 { // if we have not yet initialised (including allocating the motors @@ -1798,3 +1783,14 @@ AP_Rally *GCS_MAVLINK_Copter::get_rally() const return nullptr; #endif } + +bool GCS_MAVLINK_Copter::set_mode(const uint8_t mode) +{ +#ifdef DISALLOW_GCS_MODE_CHANGE_DURING_RC_FAILSAFE + if (copter.failsafe.radio) { + // don't allow mode changes while in radio failsafe + return false; + } +#endif + return copter.set_mode((control_mode_t)mode, MODE_REASON_GCS_COMMAND); +} diff --git a/ArduCopter/GCS_Mavlink.h b/ArduCopter/GCS_Mavlink.h index 46df9fe480..1d264342e6 100644 --- a/ArduCopter/GCS_Mavlink.h +++ b/ArduCopter/GCS_Mavlink.h @@ -29,6 +29,8 @@ protected: uint8_t sysid_my_gcs() const override; + bool set_mode(uint8_t mode) override; + private: void handleMessage(mavlink_message_t * msg) override;