From 148b40f30f8d0ba8a4c626ceb3fc58ca14c3544e Mon Sep 17 00:00:00 2001 From: Wojtek Rzepecki Date: Wed, 17 Nov 2021 11:25:27 +0100 Subject: [PATCH] [BH-1198] Fix critical battery level behavior Fix of critcal battery behavior for Bell --- .../hal/battery_charger/BatteryCharger.cpp | 4 ---- .../battery-level-check/BatteryLevelCheck.cpp | 6 ++++-- .../ApplicationBellMain.cpp | 2 +- .../services/appmgr/ApplicationManager.cpp | 17 +++++++++++++++++ .../include/appmgr/ApplicationManager.hpp | 1 + products/BellHybrid/sys/SystemManager.cpp | 7 +++++++ .../sys/include/sys/SystemManager.hpp | 2 ++ 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp b/module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp index ccacb57c298646df0761e5377bf4e148ca40c54f..8c31d07749ebe096a3cdfe31c0ed75480dd1d460 100644 --- a/module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp +++ b/module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp @@ -19,7 +19,6 @@ namespace hal::battery bsp::fuel_gauge::init(queueBatteryHandle); bsp::battery_charger::init(queueBatteryHandle); - Store::Battery::modify().state = Store::Battery::State::Discharging; Store::Battery::modify().level = static_cast(bsp::fuel_gauge::getBatteryLevel()); } @@ -36,9 +35,6 @@ namespace hal::battery { bsp::battery_charger::getChargeStatus(); - if (notification == bsp::fuel_gauge::FuelGaugeAlert) { - Store::Battery::modify().levelState = Store::Battery::LevelState::CriticalNotCharging; - } if (notification == bsp::fuel_gauge::FuelGaugeUpdate) { Store::Battery::modify().level = bsp::fuel_gauge::getBatteryLevel(); diff --git a/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp b/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp index 5d20f22ea6d228fb4e38e61b36e5376c7b9f2bda..eaebf7c0093b1ef7736b8671db339faa1e2b4950 100644 --- a/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp +++ b/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp @@ -44,7 +44,8 @@ namespace battery_level_check bool operator()() const { return Store::Battery::get().level < batteryLevelCritical && - Store::Battery::get().state != Store::Battery::State::Charging; + Store::Battery::get().state != Store::Battery::State::Charging && + Store::Battery::get().state != Store::Battery::State::ChargingDone; } } isCriticalNotCharging; struct isCriticalCharging @@ -52,7 +53,8 @@ namespace battery_level_check bool operator()() const { return Store::Battery::get().level < batteryLevelCritical && - Store::Battery::get().state == Store::Battery::State::Charging; + (Store::Battery::get().state == Store::Battery::State::Charging || + Store::Battery::get().state == Store::Battery::State::ChargingDone); } } isCriticalCharging; struct isShutdown diff --git a/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp b/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp index 4347bd7f679282d7df58380a43aa2cbf1e057f86..5858707169405cfffc31f219bb8a19194b997037 100644 --- a/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +++ b/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp @@ -179,7 +179,7 @@ namespace app data->ignoreCurrentWindowOnStack = true; } - if (lowBatteryState->isActive()) { + if (lowBatteryState->isActive() && !lowBatteryState->isCharging()) { blockAllPopups = true; switchWindow(gui::window::name::bell_battery_shutdown, std::move(data)); } diff --git a/products/BellHybrid/services/appmgr/ApplicationManager.cpp b/products/BellHybrid/services/appmgr/ApplicationManager.cpp index 7471a4af2dff84ef56863ab9b1bbccce99e5333f..8e1fc7e783980d29a7a86e2afd392f47d220627b 100644 --- a/products/BellHybrid/services/appmgr/ApplicationManager.cpp +++ b/products/BellHybrid/services/appmgr/ApplicationManager.cpp @@ -66,4 +66,21 @@ namespace app::manager connect(typeid(BatteryShutdown), convertibleToActionHandler); connect(typeid(BedtimeNotification), convertibleToActionHandler); } + + void ApplicationManager::handleStart(StartAllowedMessage *msg) + { + switch (msg->getStartupType()) { + case StartupType::Regular: + [[fallthrough]]; + case StartupType::LowBatteryCharging: + ApplicationManagerCommon::handleStart(msg); + break; + case StartupType::LowBattery: + handleSwitchApplication( + std::make_unique( + service::name::appmgr, app::applicationBellName, gui::window::name::bell_battery_shutdown, nullptr) + .get()); + break; + } + } } // namespace app::manager diff --git a/products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp b/products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp index e23ff739dc5fd5e6a31d747f10cf162bdcf55c28..1fbd24b9ff9850d22edcc0093612cac93cbc65c4 100644 --- a/products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp +++ b/products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp @@ -24,5 +24,6 @@ namespace app::manager auto startApplication(ApplicationHandle &app) -> bool override; auto resolveHomeApplication() -> std::string override; auto registerMessageHandlers() -> void override; + void handleStart(StartAllowedMessage *msg) override; }; } // namespace app::manager diff --git a/products/BellHybrid/sys/SystemManager.cpp b/products/BellHybrid/sys/SystemManager.cpp index cddb11d62b758f0da3499d54cf70830f1ce245bf..51768b48d0ec494177d2752748b9f324de1f42f6 100644 --- a/products/BellHybrid/sys/SystemManager.cpp +++ b/products/BellHybrid/sys/SystemManager.cpp @@ -51,6 +51,13 @@ namespace sys SystemManagerCommon::batteryShutdownLevelAction(); } + void SystemManager::batteryNormalLevelAction() + { + SystemManagerCommon::batteryNormalLevelAction(); + auto battNormalMsg = std::make_shared(false); + bus.sendUnicast(std::move(battNormalMsg), service::name::appmgr); + } + void SystemManager::batteryCriticalLevelAction(bool charging) { SystemManagerCommon::batteryCriticalLevelAction(charging); diff --git a/products/BellHybrid/sys/include/sys/SystemManager.hpp b/products/BellHybrid/sys/include/sys/SystemManager.hpp index 9bc563178ce3f68d5a505ee202e81cb61c3725d8..74df5afa6ade324ae8527346be1b30c254f37192 100644 --- a/products/BellHybrid/sys/include/sys/SystemManager.hpp +++ b/products/BellHybrid/sys/include/sys/SystemManager.hpp @@ -21,6 +21,8 @@ namespace sys void batteryShutdownLevelAction() override; + void batteryNormalLevelAction() override; + void batteryCriticalLevelAction(bool charging) override; }; } // namespace sys