// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md
#pragma once
#include "AlgorithmID.hpp"
#include "AlgorithmChange.hpp"
#include "SystemManager/SentinelView.hpp"
#include "common.hpp"
namespace sys::cpu
{
struct AlgorithmData
{
unsigned int CPUload = 0;
bsp::CpuFrequencyMHz curentFrequency = bsp::CpuFrequencyMHz::Level_6;
sentinel::View sentinel;
};
struct AlgorithmResult
{
/// is change required by algorithm
algorithm::Change change;
// value requested by algorithm
bsp::CpuFrequencyMHz value;
};
class Algorithm
{
private:
[[nodiscard]] virtual AlgorithmResult calculateImplementation(const AlgorithmData &) = 0;
virtual void resetImplementation()
{}
public:
[[nodiscard]] virtual AlgorithmResult calculate(const AlgorithmData &) final;
virtual void reset() final;
virtual ~Algorithm() = default;
};
} // namespace sys::cpu