~aleteoryx/muditaos

9752788304eae313b3e4deef08a951a3c6455e31 — Lukasz Mastalerz 2 years ago 462a739
[BH-1412] Whitelist update

Whitelist removed for Harmony
Changed the way whitelist is obtained
Added missing logs for Eink Dispaly
M module-bsp/board/rt1051/bsp/eink/EinkDisplay.cpp => module-bsp/board/rt1051/bsp/eink/EinkDisplay.cpp +10 -0
@@ 407,6 407,14 @@ namespace hal::eink
        }
        while (status != EinkStatus::EinkOK && errorCounter++ < EinkDisplayMaxInitRetries) {
            status = tryReinitAndPowerOn();
            if (status != EinkStatus::EinkOK) {
                if (errorCounter < EinkDisplayMaxInitRetries) {
                    LOG_WARN("Failed to initialize and power on Eink, trying once more...");
                }
                else {
                    LOG_ERROR("Permanently failed to initialize and power on Eink");
                }
            }
        }

        return status;


@@ 415,9 423,11 @@ namespace hal::eink
    EinkStatus EinkDisplay::tryReinitAndPowerOn()
    {
        if (const auto status = resetAndInit(); status != EinkStatus::EinkOK) {
            LOG_WARN("Eink initialization failed (%s)", magic_enum::enum_name(status).data());
            return status;
        }
        if (const auto status = powerOn(); status != EinkStatus::EinkOK) {
            LOG_WARN("Eink power on failed (%s)", magic_enum::enum_name(status).data());
            return status;
        }
        return EinkStatus::EinkOK;

M module-sys/SystemManager/SystemManagerCommon.cpp => module-sys/SystemManager/SystemManagerCommon.cpp +5 -31
@@ 18,7 18,6 @@
#include <service-evtmgr/EVMessages.hpp>
#include <service-appmgr/messages/OnboardingPowerDownRequest.hpp>
#include <service-appmgr/messages/UserPowerDownRequest.hpp>
#include <service-desktop/ServiceDesktopName.hpp>
#include <service-appmgr/ServiceApplicationManagerName.hpp>
#include <service-appmgr/Controller.hpp>
#include <system/messages/DeviceRegistrationMessage.hpp>


@@ 29,10 28,8 @@
#include "Timers/TimerFactory.hpp"
#include <service-appmgr/StartupType.hpp>
#include <purefs/vfs_subsystem.hpp>
#include <service-gui/ServiceGUIName.hpp>
#include <service-db/DBServiceName.hpp>

#include <module-gui/gui/Common.hpp>
#include <service-eink/ServiceEinkName.hpp>
#include <hal/boot_control.h>
#include <algorithm>



@@ 64,35 61,13 @@ namespace sys
        }

    } // namespace

    namespace state
    {
        namespace restore
        {
            static constexpr std::array whitelist = {
                service::name::service_desktop, // Handle restore procedure
                service::name::evt_manager, // Workaround for charging battery after shutting down and turn on the phone
                service::name::appmgr,
                service::name::cellular,
            };
        }

        namespace regularClose
        {
            static constexpr std::array whitelist = {service::name::evt_manager, service::name::cellular};
        }

        namespace update
        {
            static constexpr std::array whitelist = {service::name::evt_manager, service::name::cellular};
        }

        template <typename T>
        static bool isOnWhitelist(const T &list, const std::string &serviceName)
        {
            return std::find(std::begin(list), std::end(list), serviceName) != std::end(list);
        }

    } // namespace state

    using namespace cpp_freertos;


@@ 177,7 152,6 @@ namespace sys
            handleShutdown();
        }

        DestroySystemService(service::name::evt_manager, this);
        CloseService();

        // it should be called before systemDeinit to make sure this log is dumped to the file


@@ 725,16 699,16 @@ namespace sys
        case CloseReason::OnboardingPowerDown:
        case CloseReason::SystemBrownout:
        case CloseReason::LowBattery:
            DestroyServices(sys::state::regularClose::whitelist);
            DestroyServices(getWhiteListFor(WhiteListType::RegularClose));
            set(State::Shutdown);
            break;
        case CloseReason::Reboot:
            DestroyServices(sys::state::regularClose::whitelist);
            DestroyServices(getWhiteListFor(WhiteListType::RegularClose));
            set(State::Reboot);
            break;
        case CloseReason::RebootToRecovery:
        case CloseReason::FactoryReset:
            DestroyServices(sys::state::update::whitelist);
            DestroyServices(getWhiteListFor(WhiteListType::Update));
            set(State::RebootToRecovery);
            break;
        }


@@ 751,7 725,7 @@ namespace sys
        }
        CriticalSection::Exit();

        DestroyServices(sys::state::restore::whitelist);
        DestroyServices(getWhiteListFor(WhiteListType::Restore));

        LOG_INFO("entered restore state");
    }

M module-sys/SystemManager/include/SystemManager/SystemManagerCommon.hpp => module-sys/SystemManager/include/SystemManager/SystemManagerCommon.hpp +9 -1
@@ 20,6 20,7 @@
#include "DeviceManager.hpp"
#include <chrono>
#include <vector>
#include <algorithm>

namespace app
{


@@ 46,6 47,12 @@ namespace sys
        FactoryReset,
        None,
    };
    enum class WhiteListType
    {
        RegularClose,
        Update,
        Restore
    };

    class SystemInitialisationError : public std::runtime_error
    {


@@ 134,7 141,8 @@ namespace sys
        virtual void batteryNormalLevelAction();
        virtual void batteryCriticalLevelAction(bool charging);
        virtual void batteryShutdownLevelAction();
        virtual void handleShutdown() = 0;
        virtual void handleShutdown()                                               = 0;
        virtual const std::vector<std::string> &getWhiteListFor(WhiteListType type) = 0;

      private:
        MessagePointer DataReceivedHandler(DataMessage *msg, ResponseMessage *resp) override;

M products/BellHybrid/sys/SystemManager.cpp => products/BellHybrid/sys/SystemManager.cpp +13 -0
@@ 11,6 11,14 @@

namespace sys
{
    namespace
    {
        namespace RegularClose
        {
            const std::vector<std::string> whitelist{};
        } // namespace RegularClose
    }     // namespace

    SystemManager::SystemManager(std::vector<std::unique_ptr<BaseServiceCreator>> &&creators)
        : SystemManagerCommon(std::move(creators))
    {}


@@ 45,4 53,9 @@ namespace sys
    {
        set(State::ShutdownReady);
    }

    const std::vector<std::string> &SystemManager::getWhiteListFor(WhiteListType /*type*/)
    {
        return RegularClose::whitelist;
    }
} // namespace sys

M products/BellHybrid/sys/include/sys/SystemManager.hpp => products/BellHybrid/sys/include/sys/SystemManager.hpp +3 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 20,5 20,7 @@ namespace sys
        auto handleAlarmActivationStatusChangeRequest(AlarmActivationStatusChangeRequest *request) -> MessagePointer;

        void handleShutdown() override;

        const std::vector<std::string> &getWhiteListFor(WhiteListType type) override;
    };
} // namespace sys

M products/PurePhone/sys/CMakeLists.txt => products/PurePhone/sys/CMakeLists.txt +1 -0
@@ 21,4 21,5 @@ target_link_libraries(sys
        module-utils
        module-sys
        service-appmgr
        service-desktop
)

M products/PurePhone/sys/SystemManager.cpp => products/PurePhone/sys/SystemManager.cpp +36 -1
@@ 13,6 13,7 @@
#include <service-cellular/CellularServiceAPI.hpp>
#include <service-evtmgr/ServiceEventManagerName.hpp>
#include <service-evtmgr/EventManagerServiceAPI.hpp>
#include <service-desktop/ServiceDesktopName.hpp>

namespace sys
{


@@ 22,7 23,24 @@ namespace sys
            {bsp::KeyCodes::SSwitchUp, phone_modes::PhoneMode::Connected},
            {bsp::KeyCodes::SSwitchMid, phone_modes::PhoneMode::DoNotDisturb},
            {bsp::KeyCodes::SSwitchDown, phone_modes::PhoneMode::Offline}};
    } // namespace

        namespace RegularClose
        {
            const std::vector<std::string> whitelist{service::name::evt_manager, service::name::cellular};
        } // namespace RegularClose
        namespace Update
        {
            const std::vector<std::string> whitelist{service::name::evt_manager, service::name::cellular};
        } // namespace Update
        namespace Restore
        {
            const std::vector<std::string> whitelist{
                service::name::service_desktop, // Handle restore procedure
                service::name::evt_manager, // Workaround for charging battery after shutting down and turn on the phone
                service::name::appmgr,
                service::name::cellular};
        } // namespace Restore
    }     // namespace

    SystemManager::SystemManager(std::vector<std::unique_ptr<BaseServiceCreator>> &&creators)
        : SystemManagerCommon(std::move(creators))


@@ 165,6 183,7 @@ namespace sys
        // check if we are discharging - if so -> shutdown
        if (Store::Battery::get().state == Store::Battery::State::Discharging) {
            set(State::ShutdownReady);
            DestroySystemService(service::name::evt_manager, this);
        }
        else {
            // await from EvtManager for info that red key was pressed / timeout


@@ 179,4 198,20 @@ namespace sys
            msg->Execute(this);
        }
    }

    const std::vector<std::string> &SystemManager::getWhiteListFor(WhiteListType type)
    {
        switch (type) {
        case WhiteListType::RegularClose: {
            return RegularClose::whitelist;
        }
        case WhiteListType::Update: {
            return Update::whitelist;
        }
        case WhiteListType::Restore: {
            return Restore::whitelist;
        }
        }
        return RegularClose::whitelist;
    }
} // namespace sys

M products/PurePhone/sys/include/sys/SystemManager.hpp => products/PurePhone/sys/include/sys/SystemManager.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 33,6 33,7 @@ namespace sys
        void batteryNormalLevelAction() override;
        void batteryCriticalLevelAction(bool charging) override;
        void handleShutdown() override;
        const std::vector<std::string> &getWhiteListFor(WhiteListType type) override;

        std::unique_ptr<phone_modes::Subject> phoneModeSubject;
    };