Files
MuditaOS/products/PurePhone/EinkSentinelPure.cpp
Maciej Gibowicz b74a72dc4e [EGD-7484] Increase CPU frequency for screen redraw
Increasing CPU frequency for screen redraw when screen is locked
due to DMA problems at lower frequencies.

(cherry picked from commit ddc80d3ed5)
2021-09-15 19:18:58 +02:00

47 lines
1.5 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "EinkSentinel.hpp"
#include <apps-common/locks/data/PhoneLockMessages.hpp>
#include <bsp/common.hpp>
namespace service::eink
{
namespace
{
constexpr auto RedrawLockedEinkCpuFrequency = bsp::CpuFrequencyHz::Level_4;
constexpr auto RedrawUnlockedEinkCpuFrequency = bsp::CpuFrequencyHz::Level_6;
} // namespace
EinkSentinel::EinkSentinel(std::string name, sys::Service *service) : sys::CpuSentinel(name, service)
{
owner->bus.channels.push_back(sys::BusChannel::PhoneLockChanges);
owner->connect(typeid(locks::UnlockedPhone),
[this](sys::Message *msg) -> sys::MessagePointer { return handleUnlockedPhone(); });
owner->connect(typeid(locks::LockedPhone),
[this](sys::Message *msg) -> sys::MessagePointer { return handleLockedPhone(); });
}
void EinkSentinel::HoldMinimumFrequency()
{
CpuSentinel::HoldMinimumFrequency(isScreenLocked ? RedrawLockedEinkCpuFrequency
: RedrawUnlockedEinkCpuFrequency);
}
sys::MessagePointer EinkSentinel::handleLockedPhone()
{
isScreenLocked = true;
return sys::MessageNone{};
}
sys::MessagePointer EinkSentinel::handleUnlockedPhone()
{
isScreenLocked = false;
return sys::MessageNone{};
}
} // namespace service::eink