diff --git a/msg/versioned/VehicleStatus.msg b/msg/versioned/VehicleStatus.msg index 0dffdc2c92de..185076a5d673 100644 --- a/msg/versioned/VehicleStatus.msg +++ b/msg/versioned/VehicleStatus.msg @@ -13,20 +13,16 @@ uint8 ARMING_STATE_ARMED = 2 uint8 latest_arming_reason uint8 latest_disarming_reason -uint8 ARM_DISARM_REASON_TRANSITION_TO_STANDBY = 0 uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 uint8 ARM_DISARM_REASON_RC_SWITCH = 2 uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 uint8 ARM_DISARM_REASON_MISSION_START = 5 -uint8 ARM_DISARM_REASON_SAFETY_BUTTON = 6 -uint8 ARM_DISARM_REASON_AUTO_DISARM_LAND = 7 -uint8 ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT = 8 -uint8 ARM_DISARM_REASON_KILL_SWITCH = 9 -uint8 ARM_DISARM_REASON_LOCKDOWN = 10 -uint8 ARM_DISARM_REASON_FAILURE_DETECTOR = 11 -uint8 ARM_DISARM_REASON_SHUTDOWN = 12 -uint8 ARM_DISARM_REASON_UNIT_TEST = 13 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 uint64 nav_state_timestamp # time when current nav_state activated diff --git a/src/lib/events/enums.json b/src/lib/events/enums.json index c3cbc2578a7c..acd73c144708 100644 --- a/src/lib/events/enums.json +++ b/src/lib/events/enums.json @@ -442,13 +442,9 @@ "type": "uint8_t", "description": "Reason for arming/disarming", "entries": { - "0": { - "name": "transition_to_standby", - "description": "Transition to standby" - }, "1": { "name": "stick_gesture", - "description": "Stick gesture" + "description": "stick gesture" }, "2": { "name": "rc_switch", @@ -467,36 +463,20 @@ "description": "mission start" }, "6": { - "name": "auto_disarm_land", + "name": "landing", "description": "landing" }, "7": { - "name": "auto_disarm_preflight", - "description": "auto preflight disarming" + "name": "preflight_inaction", + "description": "preflight inaction" }, "8": { "name": "kill_switch", "description": "kill switch" }, - "9": { - "name": "lockdown", - "description": "lockdown" - }, - "10": { - "name": "failure_detector", - "description": "failure detector" - }, - "11": { - "name": "shutdown", - "description": "shutdown request" - }, - "12": { - "name": "unit_test", - "description": "unit tests" - }, "13": { "name": "rc_button", - "description": "RC (button)" + "description": "RC button" }, "14": { "name": "failsafe", diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 663223c9bf79..6f6ae4050e77 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -511,10 +511,30 @@ extern "C" __EXPORT int commander_main(int argc, char *argv[]) static constexpr const char *arm_disarm_reason_str(arm_disarm_reason_t calling_reason) { - switch (calling_reason) { - case arm_disarm_reason_t::transition_to_standby: return ""; + static_assert((uint8_t)arm_disarm_reason_t::stick_gesture == vehicle_status_s::ARM_DISARM_REASON_STICK_GESTURE, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::rc_switch == vehicle_status_s::ARM_DISARM_REASON_RC_SWITCH, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::command_internal == vehicle_status_s::ARM_DISARM_REASON_COMMAND_INTERNAL, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::command_external == vehicle_status_s::ARM_DISARM_REASON_COMMAND_EXTERNAL, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::mission_start == vehicle_status_s::ARM_DISARM_REASON_MISSION_START, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::landing == vehicle_status_s::ARM_DISARM_REASON_LANDING, + "(dis)arm enum mismatch"); + static_assert( + (uint8_t)arm_disarm_reason_t::preflight_inaction == vehicle_status_s::ARM_DISARM_REASON_PREFLIGHT_INACTION, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::kill_switch == vehicle_status_s::ARM_DISARM_REASON_KILL_SWITCH, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::rc_button == vehicle_status_s::ARM_DISARM_REASON_RC_BUTTON, + "(dis)arm enum mismatch"); + static_assert((uint8_t)arm_disarm_reason_t::failsafe == vehicle_status_s::ARM_DISARM_REASON_FAILSAFE, + "(dis)arm enum mismatch"); - case arm_disarm_reason_t::stick_gesture: return "Stick gesture"; + switch (calling_reason) { + case arm_disarm_reason_t::stick_gesture: return "stick gesture"; case arm_disarm_reason_t::rc_switch: return "RC switch"; @@ -524,21 +544,13 @@ static constexpr const char *arm_disarm_reason_str(arm_disarm_reason_t calling_r case arm_disarm_reason_t::mission_start: return "mission start"; - case arm_disarm_reason_t::auto_disarm_land: return "landing"; + case arm_disarm_reason_t::landing: return "landing"; - case arm_disarm_reason_t::auto_disarm_preflight: return "auto preflight disarming"; + case arm_disarm_reason_t::preflight_inaction: return "auto preflight disarming"; case arm_disarm_reason_t::kill_switch: return "kill-switch"; - case arm_disarm_reason_t::lockdown: return "lockdown"; - - case arm_disarm_reason_t::failure_detector: return "failure detector"; - - case arm_disarm_reason_t::shutdown: return "shutdown request"; - - case arm_disarm_reason_t::unit_test: return "unit tests"; - - case arm_disarm_reason_t::rc_button: return "RC (button)"; + case arm_disarm_reason_t::rc_button: return "RC button"; case arm_disarm_reason_t::failsafe: return "failsafe"; } @@ -2299,35 +2311,19 @@ void Commander::handleAutoDisarm() if (_auto_disarm_landed.get_state() && !_multicopter_throw_launch.isThrowLaunchInProgress()) { if (_have_taken_off_since_arming) { - disarm(arm_disarm_reason_t::auto_disarm_land); + disarm(arm_disarm_reason_t::landing); } else { - disarm(arm_disarm_reason_t::auto_disarm_preflight); + disarm(arm_disarm_reason_t::preflight_inaction); } } } // Auto disarm after 5 seconds if kill switch is engaged - bool auto_disarm = _actuator_armed.kill; - - // auto disarm if locked down to avoid user confusion - // skipped in HITL where lockdown is enabled for safety - if (_vehicle_status.hil_state != vehicle_status_s::HIL_STATE_ON) { - auto_disarm |= _actuator_armed.lockdown; - } - - //don't disarm if throw launch is in progress - auto_disarm &= !_multicopter_throw_launch.isThrowLaunchInProgress(); - - _auto_disarm_killed.set_state_and_update(auto_disarm, hrt_absolute_time()); + _auto_disarm_killed.set_state_and_update(_actuator_armed.kill, hrt_absolute_time()); if (_auto_disarm_killed.get_state()) { - if (_actuator_armed.kill) { - disarm(arm_disarm_reason_t::kill_switch, true); - - } else { - disarm(arm_disarm_reason_t::lockdown, true); - } + disarm(arm_disarm_reason_t::kill_switch, true); } } else {