From 693af897b3b6a44aa9cb438843c6e6432dd33592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Tue, 6 Sep 2022 12:00:38 +0200 Subject: [PATCH] commander: check if battery was already disconnected on arming If so, don't report. Happens e.g. with USB powered pixhawk. --- .../HealthAndArmingChecks/checks/batteryCheck.cpp | 7 ++++++- .../HealthAndArmingChecks/checks/batteryCheck.hpp | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp index 2e9678fd21..6f617f2728 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp @@ -113,9 +113,13 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) battery_required_count++; } + if (!_last_armed && context.isArmed()) { + _battery_connected_at_arming[index] = battery.connected; + } + if (context.isArmed()) { - if (!battery.connected) { + if (!battery.connected && _battery_connected_at_arming[index]) { // If disconnected after arming /* EVENT */ reporter.healthFailure(NavModes::All, health_component_t::battery, events::ID("check_battery_disconnected"), @@ -243,6 +247,7 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) reporter.setIsPresent(health_component_t::battery); } + _last_armed = context.isArmed(); } void BatteryChecks::rtlEstimateCheck(const Context &context, Report &reporter, float worst_battery_time_s) diff --git a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.hpp index c144f8f3b8..2d5330f5ae 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.hpp @@ -53,5 +53,7 @@ private: uORB::SubscriptionMultiArray _battery_status_subs{ORB_ID::battery_status}; uORB::Subscription _rtl_time_estimate_sub{ORB_ID(rtl_time_estimate)}; + bool _last_armed{false}; + bool _battery_connected_at_arming[battery_status_s::MAX_INSTANCES] {}; };