blob: 1596628bdb2b92a6788e228a9d45e454129c09f5 [file] [log] [blame]
#include "util.hpp"
#include <cmath>
#include <iostream>
#include <set>
#include <variant>
using Property = std::string;
using Value = std::variant<int64_t, double, std::string, bool>;
using PropertyMap = std::map<Property, Value>;
namespace pid_control
{
std::string getSensorPath(const std::string& type, const std::string& id)
{
std::string layer = type;
if (type == "fan")
{
layer = "fan_tach";
}
else if (type == "temp")
{
layer = "temperature";
}
else if (type == "margin")
{
layer = "temperature";
}
else
{
layer = "unknown"; // TODO(venture): Need to handle.
}
return std::string("/xyz/openbmc_project/sensors/" + layer + "/" + id);
}
std::string getMatch(const std::string& type, const std::string& id)
{
return std::string("type='signal',"
"interface='org.freedesktop.DBus.Properties',"
"member='PropertiesChanged',"
"path='" +
getSensorPath(type, id) + "'");
}
bool validType(const std::string& type)
{
static std::set<std::string> valid = {"fan", "temp", "margin"};
return (valid.find(type) != valid.end());
}
void scaleSensorReading(const double min, const double max, double& value)
{
if (max <= 0 || max <= min)
{
return;
}
value -= min;
value /= (max - min);
}
} // namespace pid_control