blob: aa44bf9704f954e8fc3724cd5bebfe7252117371 [file]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_THERMAL_CONTROLLER_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_THERMAL_CONTROLLER_H_
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
namespace milotic_tlbmc {
namespace thermal {
/*
* `ThermalController` is the base class for all thermal controllers.
* It is responsible for processing the input, the thermal algorithm, and the
* output of the thermal loop.
*
* This class is created based on:
* https://source.corp.google.com/piper///depot/google3/third_party/openbmc_phosphor_pid_control/pid/controller.hpp
*/
class ThermalController {
public:
virtual ~ThermalController() = default;
/*
* `ProcessThermalLoop` is the main end-point function for the zone manager to
* perform a thermal loop to update the fan speed with all the sensor
* readings. It will be called once for each thermal controller in every
* thermal control iteration managed by the zone manager.
*/
virtual void ProcessThermalLoop() = 0;
/*
* `ProcessInput` is the function to pre-process the input sensor readings for
* the thermal controller before feeding the input into the thermal algorithm.
*
* Returns:
* The processed input value for the thermal controller.
*/
virtual double ProcessInput() = 0;
/*
* `ProcessOutput` is the function to update the output value of the thermal
* loop into its owner zone manager.
*
* Parameters:
* output: The output value from the thermal loop.
*/
virtual void ProcessOutput(double output) = 0;
virtual std::string GetId() const = 0;
virtual bool IsFanController() const = 0;
// `IsSupportiveController` returns true if the controller is a supportive
// controller, which means the controller's setpoint will contribute to the
// output from another controller, before being used to calculate the final
// setpoint.
virtual bool IsSupportiveController() const = 0;
virtual const std::vector<std::string>& GetAffectedControllerIds() const = 0;
virtual void AdjustSetpoint(double offset) = 0;
private:
const std::string id_;
};
} // namespace thermal
} // namespace milotic_tlbmc
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_THERMAL_CONTROLLER_H_