diff --git a/ArduCopter/GCS_Mavlink.cpp b/ArduCopter/GCS_Mavlink.cpp index c5692e729c..7ee9bc34aa 100644 --- a/ArduCopter/GCS_Mavlink.cpp +++ b/ArduCopter/GCS_Mavlink.cpp @@ -559,6 +559,13 @@ MAV_RESULT GCS_MAVLINK_Copter::handle_command_do_set_roi(const Location &roi_loc return MAV_RESULT_ACCEPTED; } +bool GCS_MAVLINK_Copter::set_home_to_current_location(bool lock) { + return copter.set_home_to_current_location(lock); +} +bool GCS_MAVLINK_Copter::set_home(const Location& loc, bool lock) { + return copter.set_home(loc, lock); +} + MAV_RESULT GCS_MAVLINK_Copter::handle_command_int_packet(const mavlink_command_int_t &packet) { switch(packet.command) { @@ -572,48 +579,6 @@ MAV_RESULT GCS_MAVLINK_Copter::handle_command_int_packet(const mavlink_command_i #endif return MAV_RESULT_UNSUPPORTED; - case MAV_CMD_DO_SET_HOME: { - // assume failure - if (is_equal(packet.param1, 1.0f)) { - // if param1 is 1, use current location - if (!copter.set_home_to_current_location(true)) { - return MAV_RESULT_FAILED; - } - return MAV_RESULT_ACCEPTED; - } - // ensure param1 is zero - if (!is_zero(packet.param1)) { - return MAV_RESULT_FAILED; - } - // check frame type is supported - if (packet.frame != MAV_FRAME_GLOBAL && - packet.frame != MAV_FRAME_GLOBAL_INT && - packet.frame != MAV_FRAME_GLOBAL_RELATIVE_ALT && - packet.frame != MAV_FRAME_GLOBAL_RELATIVE_ALT_INT) { - return MAV_RESULT_UNSUPPORTED; - } - // sanity check location - if (!check_latlng(packet.x, packet.y)) { - return MAV_RESULT_FAILED; - } - Location new_home_loc {}; - new_home_loc.lat = packet.x; - new_home_loc.lng = packet.y; - new_home_loc.alt = packet.z * 100; - // handle relative altitude - if (packet.frame == MAV_FRAME_GLOBAL_RELATIVE_ALT || packet.frame == MAV_FRAME_GLOBAL_RELATIVE_ALT_INT) { - if (!AP::ahrs().home_is_set()) { - // cannot use relative altitude if home is not set - return MAV_RESULT_FAILED; - } - new_home_loc.alt += copter.ahrs.get_home().alt; - } - if (!copter.set_home(new_home_loc, true)) { - return MAV_RESULT_FAILED; - } - return MAV_RESULT_ACCEPTED; - } - default: return GCS_MAVLINK::handle_command_int_packet(packet); } diff --git a/ArduCopter/GCS_Mavlink.h b/ArduCopter/GCS_Mavlink.h index c4afc604fa..53961c8d5d 100644 --- a/ArduCopter/GCS_Mavlink.h +++ b/ArduCopter/GCS_Mavlink.h @@ -38,6 +38,9 @@ protected: void handle_mount_message(const mavlink_message_t* msg) override; + bool set_home_to_current_location(bool lock) override; + bool set_home(const Location& loc, bool lock) override; + private: void handleMessage(mavlink_message_t * msg) override;