M module-sys/SystemManager/CpuGovernor.cpp => module-sys/SystemManager/CpuGovernor.cpp +6 -0
@@ 81,15 81,21 @@ namespace sys
void CpuGovernor::SetCpuFrequencyRequest(const std::string &sentinelName, bsp::CpuFrequencyMHz request)
{
+ auto isSentinelRecognized = false;
for (auto &sentinel : sentinels) {
auto sentinelWeakPointer = sentinel->GetSentinel();
if (!sentinelWeakPointer.expired()) {
std::shared_ptr<CpuSentinel> sharedResource = sentinelWeakPointer.lock();
if (sharedResource->GetName() == sentinelName) {
sentinel->SetRequestedFrequency(request);
+ isSentinelRecognized = true;
+ break;
}
}
}
+ if (!isSentinelRecognized) {
+ LOG_WARN("Sentinel %s is not recognized!", sentinelName.c_str());
+ }
}
void CpuGovernor::ResetCpuFrequencyRequest(const std::string &sentinelName)
M products/PurePhone/services/evtmgr/CMakeLists.txt => products/PurePhone/services/evtmgr/CMakeLists.txt +1 -0
@@ 7,6 7,7 @@ target_sources(evtmgr
WorkerEvent.hpp
screen-light-control/ScreenLightControl.cpp
backlight-handler/BacklightHandler.cpp
+ user-activity-handler/UserActivityHandler.cpp
PUBLIC
include/evtmgr/EVMessages.hpp
include/evtmgr/EventManager.hpp
M products/PurePhone/services/evtmgr/EventManager.cpp => products/PurePhone/services/evtmgr/EventManager.cpp +1 -0
@@ 177,6 177,7 @@ void EventManager::handleKeyEvent(sys::Message *msg)
}
if (kbdMessage->key.state == RawKey::State::Pressed) {
+ userActivityHandler.handleUserInput();
backlightHandler.handleKeyPressed(kbdMessage->key.keyCode);
}
else if (kbdMessage->key.state == RawKey::State::Moved) {
M products/PurePhone/services/evtmgr/include/evtmgr/EventManager.hpp => products/PurePhone/services/evtmgr/include/evtmgr/EventManager.hpp +4 -2
@@ 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
@@ 6,6 6,7 @@
#include <service-evtmgr/EventManagerCommon.hpp>
#include "BacklightHandler.hpp"
+#include "UserActivityHandler.hpp"
#include <bsp/vibrator/vibrator.hpp>
#include <vibra/Vibra.hpp>
@@ 15,7 16,7 @@ class EventManager : public EventManagerCommon
explicit EventManager(LogDumpFunction logDumpFunction = nullptr,
const std::string &name = service::name::evt_manager)
: EventManagerCommon(logDumpFunction, name), vibrator(std::make_unique<vibra_handle::Vibra>(this)),
- backlightHandler(settings, this)
+ backlightHandler(settings, this), userActivityHandler(std::make_shared<sys::CpuSentinel>(name, this), this)
{}
private:
@@ 36,6 37,7 @@ class EventManager : public EventManagerCommon
std::unique_ptr<vibra_handle::Vibra> vibrator;
backlight::Handler backlightHandler;
+ evm::UserActivityHandler userActivityHandler;
};
namespace sys
A products/PurePhone/services/evtmgr/include/evtmgr/UserActivityHandler.hpp => products/PurePhone/services/evtmgr/include/evtmgr/UserActivityHandler.hpp +25 -0
@@ 0,0 1,25 @@
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <Timers/TimerHandle.hpp>
+#include <SystemManager/CpuSentinel.hpp>
+#include <Service/Service.hpp>
+
+namespace evm
+{
+ class UserActivityHandler
+ {
+ public:
+ UserActivityHandler(std::shared_ptr<sys::CpuSentinel> cpuSentinel, sys::Service *parent);
+
+ void handleUserInput();
+
+ private:
+ void onUserActivityTimeout();
+
+ std::shared_ptr<sys::CpuSentinel> cpuSentinel;
+ sys::TimerHandle activityTimer;
+ };
+} // namespace evm
A products/PurePhone/services/evtmgr/user-activity-handler/UserActivityHandler.cpp => products/PurePhone/services/evtmgr/user-activity-handler/UserActivityHandler.cpp +36 -0
@@ 0,0 1,36 @@
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include <evtmgr/UserActivityHandler.hpp>
+#include <Timers/TimerFactory.hpp>
+
+namespace evm
+{
+ namespace
+ {
+ constexpr auto userActivityTimerTime = std::chrono::seconds(2);
+ constexpr auto userActivityCPULevel = bsp::CpuFrequencyMHz::Level_4;
+ } // namespace
+
+ UserActivityHandler::UserActivityHandler(std::shared_ptr<sys::CpuSentinel> cpuSentinel, sys::Service *parent)
+ : cpuSentinel{std::move(cpuSentinel)},
+ activityTimer{sys::TimerFactory::createSingleShotTimer(
+ parent, "UserActivityTimer", userActivityTimerTime, [this]([[maybe_unused]] sys::Timer &timer) {
+ onUserActivityTimeout();
+ })}
+ {}
+
+ void UserActivityHandler::handleUserInput()
+ {
+ if (!activityTimer.isActive()) {
+ cpuSentinel->HoldMinimumFrequency(userActivityCPULevel);
+ }
+ activityTimer.restart(userActivityTimerTime);
+ }
+
+ void UserActivityHandler::onUserActivityTimeout()
+ {
+ cpuSentinel->ReleaseMinimumFrequency();
+ }
+
+} // namespace evm