From ca00eceb98b8e858ccd90555294df3f19c3d34a7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 25 Oct 2021 14:59:11 +1100 Subject: [PATCH] AP_Mission: support NAV_SCRIPT_TIME --- libraries/AP_Mission/AP_Mission.cpp | 22 ++++++++++++++++++++-- libraries/AP_Mission/AP_Mission.h | 11 +++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/libraries/AP_Mission/AP_Mission.cpp b/libraries/AP_Mission/AP_Mission.cpp index e24e997b80..0a24d06786 100644 --- a/libraries/AP_Mission/AP_Mission.cpp +++ b/libraries/AP_Mission/AP_Mission.cpp @@ -406,8 +406,10 @@ bool AP_Mission::replace_cmd(uint16_t index, const Mission_Command& cmd) /// is_nav_cmd - returns true if the command's id is a "navigation" command, false if "do" or "conditional" command bool AP_Mission::is_nav_cmd(const Mission_Command& cmd) { - // NAV commands all have ids below MAV_CMD_NAV_LAST except NAV_SET_YAW_SPEED - return (cmd.id <= MAV_CMD_NAV_LAST || cmd.id == MAV_CMD_NAV_SET_YAW_SPEED); + // NAV commands all have ids below MAV_CMD_NAV_LAST, plus some exceptions + return (cmd.id <= MAV_CMD_NAV_LAST || + cmd.id == MAV_CMD_NAV_SET_YAW_SPEED || + cmd.id == MAV_CMD_NAV_SCRIPT_TIME); } /// get_next_nav_cmd - gets next "navigation" command found at or after start_index @@ -1158,6 +1160,13 @@ MAV_MISSION_RESULT AP_Mission::mavlink_int_to_mission_cmd(const mavlink_mission_ cmd.content.scripting.p3 = packet.param4; break; + case MAV_CMD_NAV_SCRIPT_TIME: + cmd.content.nav_script_time.command = packet.param1; + cmd.content.nav_script_time.timeout_s = packet.param2; + cmd.content.nav_script_time.arg1 = packet.param3; + cmd.content.nav_script_time.arg2 = packet.param4; + break; + default: // unrecognised command return MAV_MISSION_UNSUPPORTED; @@ -1610,6 +1619,13 @@ bool AP_Mission::mission_cmd_to_mavlink_int(const AP_Mission::Mission_Command& c packet.param4 = cmd.content.scripting.p3; break; + case MAV_CMD_NAV_SCRIPT_TIME: + packet.param1 = cmd.content.nav_script_time.command; + packet.param2 = cmd.content.nav_script_time.timeout_s; + packet.param3 = cmd.content.nav_script_time.arg1; + packet.param4 = cmd.content.nav_script_time.arg2; + break; + default: // unrecognised command return false; @@ -2328,6 +2344,8 @@ const char *AP_Mission::Mission_Command::type() const return "Jump"; case MAV_CMD_DO_GO_AROUND: return "Go Around"; + case MAV_CMD_NAV_SCRIPT_TIME: + return "NavScriptTime"; default: #if CONFIG_HAL_BOARD == HAL_BOARD_SITL diff --git a/libraries/AP_Mission/AP_Mission.h b/libraries/AP_Mission/AP_Mission.h index 2575b5e11b..04f2bf16aa 100644 --- a/libraries/AP_Mission/AP_Mission.h +++ b/libraries/AP_Mission/AP_Mission.h @@ -221,6 +221,14 @@ public: float p3; }; + // Scripting NAV command (with verify) + struct PACKED nav_script_time_Command { + uint8_t command; + uint8_t timeout_s; + float arg1; + float arg2; + }; + union Content { // jump structure Jump_Command jump; @@ -291,6 +299,9 @@ public: // do scripting scripting_Command scripting; + // nav scripting + nav_script_time_Command nav_script_time; + // location Location location{}; // Waypoint location };