mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-13 19:30:36 +08:00
Fix (dis)arm reason enumeration (#25766)
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user