M module-sys/SystemManager/SystemManagerCommon.cpp => module-sys/SystemManager/SystemManagerCommon.cpp +37 -33
@@ 45,17 45,6 @@ namespace sys
namespace state
{
- namespace update
- {
- static constexpr std::array whitelist = {service::name::service_desktop,
- service::name::evt_manager,
- service::name::gui,
- service::name::db,
- service::name::eink,
- service::name::appmgr,
- service::name::cellular};
- }
-
namespace restore
{
static constexpr std::array whitelist = {service::name::service_desktop,
@@ 71,6 60,14 @@ namespace sys
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,
+ service::name::eink,
+ service::name::service_desktop};
+ }
+
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);
@@ 393,6 390,7 @@ namespace sys
++service;
}
else {
+ LOG_DEBUG("RequestServiceClose %s", (*service)->GetName().c_str());
if (!RequestServiceClose((*service)->GetName(), this)) {
LOG_ERROR("Service %s did not respond -> to kill", (*service)->GetName().c_str());
kill(*service);
@@ 475,6 473,9 @@ namespace sys
readyForCloseRegister.push_back(service->GetName());
}
+ // stored to be used later in CloseServices
+ this->closeReason = closeReason;
+
servicesPreShutdownRoutineTimeout = sys::TimerFactory::createPeriodicTimer(
this, "servicesPreShutdownRoutine", preShutdownRoutineTimeout, [this](sys::Timer &) { CloseServices(); });
servicesPreShutdownRoutineTimeout.start();
@@ 556,17 557,14 @@ namespace sys
case Code::CloseSystem:
CloseSystemHandler(data->closeReason);
break;
- case Code::Update:
- UpdateSystemHandler();
- break;
case Code::Restore:
RestoreSystemHandler();
break;
case Code::Reboot:
- RebootHandler(State::Reboot);
+ RebootHandler();
break;
case Code::RebootToUpdate:
- RebootHandler(State::RebootToUpdate, data->updateReason);
+ RebootToUpdateHandler(data->updateReason);
break;
case Code::RebootToUsbMscMode:
RebootToUsbMscModeHandler(State::RebootToUsbMscMode);
@@ 727,8 725,24 @@ namespace sys
// All delayed messages will be ignored
readyForCloseRegister.clear();
- DestroyServices(sys::state::regularClose::whitelist);
- set(State::Shutdown);
+ switch (closeReason) {
+ case CloseReason::RegularPowerDown:
+ case CloseReason::FactoryReset:
+ case CloseReason::SystemBrownout:
+ case CloseReason::LowBattery:
+ case CloseReason::RebootToUsbMscMode:
+ DestroyServices(sys::state::regularClose::whitelist);
+ set(State::Shutdown);
+ break;
+ case CloseReason::Reboot:
+ DestroyServices(sys::state::regularClose::whitelist);
+ set(State::Reboot);
+ break;
+ case CloseReason::RebootToUpdate:
+ DestroyServices(sys::state::update::whitelist);
+ set(State::RebootToUpdate);
+ break;
+ }
}
void SystemManagerCommon::RestoreSystemHandler()
@@ 745,25 759,15 @@ namespace sys
LOG_INFO("entered restore state");
}
- void SystemManagerCommon::UpdateSystemHandler()
+ void SystemManagerCommon::RebootHandler()
{
- LOG_DEBUG("Starting system update procedure...");
-
- // We are going to remove services in reversed order of creation
- CriticalSection::Enter();
- std::reverse(servicesList.begin(), servicesList.end());
- CriticalSection::Exit();
-
- DestroyServices(sys::state::update::whitelist);
+ CloseSystemHandler(CloseReason::Reboot);
}
- void SystemManagerCommon::RebootHandler(State state, std::optional<UpdateReason> updateReason)
+ void SystemManagerCommon::RebootToUpdateHandler(UpdateReason updateReason)
{
- CloseSystemHandler(CloseReason::Reboot);
- set(state);
- if (updateReason) {
- this->updateReason = updateReason.value();
- }
+ CloseSystemHandler(CloseReason::RebootToUpdate);
+ this->updateReason = updateReason;
}
void SystemManagerCommon::RebootToUsbMscModeHandler(State newState)
M module-sys/SystemManager/include/SystemManager/SystemManagerCommon.hpp => module-sys/SystemManager/include/SystemManager/SystemManagerCommon.hpp +4 -4
@@ 39,7 39,6 @@ namespace sys
enum class Code
{
CloseSystem,
- Update,
Restore,
Reboot,
RebootToUpdate,
@@ 179,11 178,11 @@ namespace sys
void readyToCloseHandler(Message *msg);
- void UpdateSystemHandler();
-
void RestoreSystemHandler();
- void RebootHandler(State state, std::optional<UpdateReason> updateReason = std::nullopt);
+ void RebootHandler();
+
+ void RebootToUpdateHandler(UpdateReason updateReason);
void RebootToUsbMscModeHandler(State newState);
@@ 194,6 193,7 @@ namespace sys
bool cpuStatisticsTimerInit{false};
+ CloseReason closeReason{CloseReason::RegularPowerDown};
UpdateReason updateReason{UpdateReason::Update};
std::vector<std::unique_ptr<BaseServiceCreator>> systemServiceCreators;
sys::TimerHandle freqTimer;
M module-sys/common/include/system/Common.hpp => module-sys/common/include/system/Common.hpp +1 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once