Remove duplicate functions
There are many duplicate functions in the sensors,
collapse them into base class.
Change-Id: Ic0e4a1c396c221ea637cea5b8f429a751fc31f99
Signed-off-by: James Feist <james.feist@linux.intel.com>
diff --git a/src/TachSensor.cpp b/src/TachSensor.cpp
index d125d0b..63ced19 100644
--- a/src/TachSensor.cpp
+++ b/src/TachSensor.cpp
@@ -31,7 +31,10 @@
static constexpr unsigned int pwmPollMs = 500;
static constexpr size_t warnAfterErrorCount = 10;
-TachSensor::TachSensor(const std::string &path,
+static constexpr double maxReading = 25000;
+static constexpr double minReading = 0;
+
+TachSensor::TachSensor(const std::string &path, const std::string &objectType,
sdbusplus::asio::object_server &objectServer,
std::shared_ptr<sdbusplus::asio::connection> &conn,
std::unique_ptr<PresenceSensor> &&presence,
@@ -40,13 +43,11 @@
std::vector<thresholds::Threshold> &&_thresholds,
const std::string &sensorConfiguration) :
Sensor(boost::replace_all_copy(fanName, " ", "_"), path,
- std::move(_thresholds)),
+ std::move(_thresholds), sensorConfiguration, objectType, maxReading,
+ minReading),
objServer(objectServer), dbusConnection(conn),
presence(std::move(presence)), redundancy(redundancy),
- configuration(sensorConfiguration),
- inputDev(io, open(path.c_str(), O_RDONLY)), waitTimer(io), errCount(0),
- // todo, get these from config
- maxValue(25000), minValue(0)
+ inputDev(io, open(path.c_str(), O_RDONLY)), waitTimer(io), errCount(0)
{
sensorInterface = objectServer.add_interface(
"/xyz/openbmc_project/sensors/fan_tach/" + name,
@@ -183,98 +184,6 @@
}
}
-void TachSensor::updateValue(const double &newValue)
-{
- // Indicate that it is internal set call
- internalSet = true;
- sensorInterface->set_property("Value", newValue);
- internalSet = false;
- value = newValue;
- checkThresholds();
-}
-
-void TachSensor::setInitialProperties(
- std::shared_ptr<sdbusplus::asio::connection> &conn)
-{
- // todo, get max and min from configuration
- sensorInterface->register_property("MaxValue", maxValue);
- sensorInterface->register_property("MinValue", minValue);
- sensorInterface->register_property(
- "Value", value, [&](const double &newValue, double &oldValue) {
- return setSensorValue(newValue, oldValue);
- });
-
- for (auto &threshold : thresholds)
- {
- std::shared_ptr<sdbusplus::asio::dbus_interface> iface;
- std::string level;
- std::string alarm;
- if (threshold.level == thresholds::Level::CRITICAL)
- {
- iface = thresholdInterfaceCritical;
- if (threshold.direction == thresholds::Direction::HIGH)
- {
- level = "CriticalHigh";
- alarm = "CriticalAlarmHigh";
- }
- else
- {
- level = "CriticalLow";
- alarm = "CriticalAlarmLow";
- }
- }
- else if (threshold.level == thresholds::Level::WARNING)
- {
- iface = thresholdInterfaceWarning;
- if (threshold.direction == thresholds::Direction::HIGH)
- {
- level = "WarningHigh";
- alarm = "WarningAlarmHigh";
- }
- else
- {
- level = "WarningLow";
- alarm = "WarningAlarmLow";
- }
- }
- else
- {
- std::cerr << "Unknown threshold level" << threshold.level << "\n";
- continue;
- }
- if (!iface)
- {
- std::cout << "trying to set uninitialized interface\n";
- continue;
- }
- iface->register_property(
- level, threshold.value,
- [&](const double &request, double &oldValue) {
- oldValue = request; // todo, just let the config do this?
- threshold.value = request;
- thresholds::persistThreshold(
- configuration,
- "xyz.openbmc_project.Configuration.AspeedFan", threshold,
- conn);
- return 1;
- });
- iface->register_property(alarm, false);
- }
- if (!sensorInterface->initialize())
- {
- std::cerr << "error initializing value interface\n";
- }
- if (thresholdInterfaceWarning && !thresholdInterfaceWarning->initialize())
- {
- std::cerr << "error initializing warning threshold interface\n";
- }
-
- if (thresholdInterfaceCritical && !thresholdInterfaceCritical->initialize())
- {
- std::cerr << "error initializing critical threshold interface\n";
- }
-}
-
PresenceSensor::PresenceSensor(const size_t index, bool inverted,
boost::asio::io_service &io) :
inverted(inverted),