~aleteoryx/muditaos

2a53becd2524fc0dba7260632d3ec409eb3a61fd — Maciej Janicki 4 years ago 8a61e57
[BH-1136] Fix bootloop after low power

Fix few issues:
BH-1136
BH-1137
M module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp => module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp +1 -1
@@ 16,8 16,8 @@ namespace hal::battery

    void BatteryCharger::init(xQueueHandle queueBatteryHandle, xQueueHandle)
    {
        bsp::battery_charger::init(queueBatteryHandle);
        bsp::fuel_gauge::init(queueBatteryHandle);
        bsp::battery_charger::init(queueBatteryHandle);

        Store::Battery::modify().state = Store::Battery::State::Discharging;
        Store::Battery::modify().level = static_cast<unsigned int>(bsp::fuel_gauge::getBatteryLevel());

M products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp => products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +43 -0
@@ 19,6 19,8 @@
#include <common/windows/BellFactoryReset.hpp>
#include <service-db/DBNotificationMessage.hpp>
#include <windows/Dialog.hpp>
#include <service-appmgr/Controller.hpp>
#include <system/messages/SystemManagerMessage.hpp>
#include <common/popups/BedtimeNotificationWindow.hpp>

namespace app


@@ 41,6 43,17 @@ namespace app
            switchWindow(gui::BellWelcomeWindow::defaultName);
            return actionHandled();
        });

        addActionReceiver(app::manager::actions::SystemBrownout, [this](auto &&data) {
            setSystemCloseInProgress();
            switchWindow(gui::window::name::bell_battery_shutdown, std::move(data));
            return actionHandled();
        });

        addActionReceiver(app::manager::actions::DisplayLowBatteryScreen, [this](auto &&data) {
            handleLowBatteryNotification(std::move(data));
            return actionHandled();
        });
    }

    sys::ReturnCodes ApplicationBellMain::InitHandler()


@@ 70,10 83,12 @@ namespace app
        windowsFactory.attach(gui::window::name::bell_main_menu, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::BellMainMenuWindow>(app);
        });

        windowsFactory.attach(gui::window::name::bell_battery_shutdown,
                              [](ApplicationCommon *app, const std::string &name) {
                                  return std::make_unique<gui::BellBatteryShutdownWindow>(app);
                              });

        windowsFactory.attach(gui::BellFactoryReset::name, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::BellFactoryReset>(app, std::make_unique<gui::BellPowerOffPresenter>(app));
        });


@@ 147,4 162,32 @@ namespace app
        }
        return ApplicationCommon::handleSwitchWindow(msgl);
    }

    bool ApplicationBellMain::isPopupPermitted([[maybe_unused]] gui::popup::ID popupId) const
    {
        if (blockAllPopups) {
            return false;
        }
        return true;
    }

    void ApplicationBellMain::handleLowBatteryNotification(manager::actions::ActionParamsPtr &&data)
    {
        auto lowBatteryState = static_cast<manager::actions::LowBatteryNotificationParams *>(data.get());
        auto currentWindow   = getCurrentWindow();
        if (currentWindow->getName() == gui::window::name::bell_battery_shutdown) {
            data->ignoreCurrentWindowOnStack = true;
        }

        if (lowBatteryState->isActive()) {
            blockAllPopups = true;
            switchWindow(gui::window::name::bell_battery_shutdown, std::move(data));
        }
        else {
            blockAllPopups = false;
            if (currentWindow->getName() == gui::window::name::bell_battery_shutdown) {
                app::manager::Controller::sendAction(this, app::manager::actions::Home, std::move(data));
            }
        }
    }
} // namespace app

M products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp => products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp +9 -2
@@ 11,7 11,6 @@ namespace gui::window::name
    inline constexpr auto bell_main_menu        = "BellMainMenu";
    inline constexpr auto bell_main_menu_dialog = "BellMainMenuDialog";
    inline constexpr auto bell_battery_shutdown = "BellBatteryShutdown";

} // namespace gui::window::name

namespace app


@@ 41,17 40,25 @@ namespace app
        }

      private:
        bool blockAllPopups = false;

        bool isPopupPermitted([[maybe_unused]] gui::popup::ID popupId) const;
        void showPopup(gui::popup::ID id, const gui::PopupRequestParams *params) override;
        auto isHomeScreenFocused() -> bool;
        void onStart() override;
        sys::MessagePointer handleSwitchWindow(sys::Message *msgl) override;
        void handleLowBatteryNotification(manager::actions::ActionParamsPtr &&data);
    };

    template <> struct ManifestTraits<ApplicationBellMain>
    {
        static auto GetManifest() -> manager::ApplicationManifest
        {
            return {{manager::actions::Launch, manager::actions::ShowAlarm, manager::actions::DisplayLogoAtExit}};
            return {{manager::actions::Launch,
                     manager::actions::ShowAlarm,
                     manager::actions::DisplayLogoAtExit,
                     manager::actions::DisplayLowBatteryScreen,
                     manager::actions::SystemBrownout}};
        }
    };
} // namespace app

M products/BellHybrid/apps/application-bell-main/widgets/BellBattery.cpp => products/BellHybrid/apps/application-bell-main/widgets/BellBattery.cpp +2 -1
@@ 8,7 8,8 @@
namespace
{
    constexpr auto entries =
        std::array<battery_utils::BatteryLevelEntry, 6>{{{{5, 10}, {1, 5}, "bell_battery_empty"},
        std::array<battery_utils::BatteryLevelEntry, 7>{{{{0, 5}, {1, 1}, "bell_battery_empty"},
                                                         {{5, 10}, {1, 5}, "bell_battery_empty"},
                                                         {{11, 30}, {6, 29}, "bell_battery_lvl1"},
                                                         {{31, 50}, {30, 53}, "bell_battery_lvl2"},
                                                         {{51, 70}, {54, 77}, "bell_battery_lvl3"},

M products/BellHybrid/apps/application-bell-main/windows/BellBatteryStatusWindow.cpp => products/BellHybrid/apps/application-bell-main/windows/BellBatteryStatusWindow.cpp +2 -1
@@ 15,7 15,8 @@ namespace
{
    constexpr auto imageType = gui::ImageTypeSpecifier::W_G;
    constexpr auto batteryEntries =
        std::array<battery_utils::BatteryLevelEntry, 6>{{{{5, 10}, {1, 5}, "bell_status_battery_lvl0"},
        std::array<battery_utils::BatteryLevelEntry, 7>{{{{0, 5}, {1, 1}, "bell_status_battery_lvl0"},
                                                         {{5, 10}, {1, 5}, "bell_status_battery_lvl0"},
                                                         {{11, 30}, {6, 29}, "bell_status_battery_lvl1"},
                                                         {{31, 50}, {30, 53}, "bell_status_battery_lvl2"},
                                                         {{51, 70}, {54, 77}, "bell_status_battery_lvl3"},

M products/BellHybrid/services/appmgr/ApplicationManager.cpp => products/BellHybrid/services/appmgr/ApplicationManager.cpp +0 -9
@@ 36,18 36,9 @@ namespace app::manager
        return rootApplicationName;
    }

    auto ApplicationManager::handleDisplayLowBatteryScreen(ActionEntry &action) -> ActionProcessStatus
    {
        SwitchRequest switchRequest(
            service::name::appmgr, resolveHomeApplication(), gui::window::name::bell_battery_shutdown, nullptr);
        return handleSwitchApplication(&switchRequest) ? ActionProcessStatus::Accepted : ActionProcessStatus::Dropped;
    }

    ActionProcessStatus ApplicationManager::handleAction(ActionEntry &action)
    {
        switch (action.actionId) {
        case actions::DisplayLowBatteryScreen:
            return handleDisplayLowBatteryScreen(action);
        default:
            return ApplicationManagerCommon::handleAction(action);
        }

M products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp => products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp +0 -2
@@ 24,7 24,5 @@ namespace app::manager
        auto startApplication(ApplicationHandle &app) -> bool override;
        auto resolveHomeApplication() -> std::string override;
        auto registerMessageHandlers() -> void override;

        auto handleDisplayLowBatteryScreen(ActionEntry &action) -> ActionProcessStatus;
    };
} // namespace app::manager

M products/BellHybrid/sys/SystemManager.cpp => products/BellHybrid/sys/SystemManager.cpp +9 -0
@@ 4,6 4,8 @@
#include <sys/SystemManager.hpp>
#include <sys/messages/AlarmActivationStatusChangeRequest.hpp>

#include <system/messages/SystemManagerMessage.hpp>

#include <appmgr/messages/AlarmMessage.hpp>
#include <appmgr/messages/BatteryShutdown.hpp>
#include <service-appmgr/messages/SwitchRequest.hpp>


@@ 48,4 50,11 @@ namespace sys
        bus.sendUnicast(msg, service::name::appmgr);
        SystemManagerCommon::batteryShutdownLevelAction();
    }

    void SystemManager::batteryCriticalLevelAction(bool charging)
    {
        SystemManagerCommon::batteryCriticalLevelAction(charging);
        auto msg = std::make_shared<CriticalBatteryLevelNotification>(true, charging);
        bus.sendUnicast(std::move(msg), service::name::appmgr);
    }
} // namespace sys

M products/BellHybrid/sys/include/sys/SystemManager.hpp => products/BellHybrid/sys/include/sys/SystemManager.hpp +2 -0
@@ 20,5 20,7 @@ namespace sys
        auto handleAlarmActivationStatusChangeRequest(AlarmActivationStatusChangeRequest *request) -> MessagePointer;

        void batteryShutdownLevelAction() override;

        void batteryCriticalLevelAction(bool charging) override;
    };
} // namespace sys