Add tach sensors to each fan enclosure
Create a tach sensor instance for each sensor listed within a fan
enclosure that uses 'tach' based presence detection. Each tach sensor
has a pointer to the fan it's associated with and is added to the list
of sensors for that fan enclosure.
Change-Id: I9a83ec52d1a5d01e39702e185336a09edeb4d158
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/fan_enclosure.cpp b/fan_enclosure.cpp
index 346911d..46efeb5 100644
--- a/fan_enclosure.cpp
+++ b/fan_enclosure.cpp
@@ -13,6 +13,12 @@
//TODO Add this fan to inventory
}
+void FanEnclosure::addSensor(
+ std::unique_ptr<Sensor>&& sensor)
+{
+ FanEnclosure::sensors.push_back(std::move(sensor));
+}
+
} // namespace presence
} // namespace fan
} // namespace phosphor
diff --git a/fan_enclosure.hpp b/fan_enclosure.hpp
index f214f18..0b96bfc 100644
--- a/fan_enclosure.hpp
+++ b/fan_enclosure.hpp
@@ -2,6 +2,7 @@
#include <sdbusplus/bus.hpp>
#include "fan_properties.hpp"
+#include "sensor_base.hpp"
namespace phosphor
@@ -31,10 +32,14 @@
addInventory();
}
+ void addSensor(
+ std::unique_ptr<Sensor>&& sensor);
+
private:
sdbusplus::bus::bus& bus;
const std::string invPath;
const std::string fanDesc;
+ std::vector<std::unique_ptr<Sensor>> sensors;
void addInventory();
diff --git a/sensor_base.hpp b/sensor_base.hpp
index 92f53a7..2dc2b8d 100644
--- a/sensor_base.hpp
+++ b/sensor_base.hpp
@@ -19,9 +19,19 @@
Sensor& operator=(Sensor&&) = delete;
virtual ~Sensor() = default;
+ Sensor(const std::string& id,
+ FanEnclosure& fanEnc) :
+ id(id),
+ fanEnc(fanEnc)
+ {
+ //Nothing to do here
+ }
+
virtual bool isPresent() = 0;
protected:
+ const std::string id;
+ FanEnclosure& fanEnc;
};
diff --git a/tach_detect.cpp b/tach_detect.cpp
index e3d2389..5da1b48 100644
--- a/tach_detect.cpp
+++ b/tach_detect.cpp
@@ -2,6 +2,7 @@
#include <sdbusplus/bus.hpp>
#include "fan_enclosure.hpp"
#include "fan_detect_defs.hpp"
+#include "tach_sensor.hpp"
int main(void)
@@ -19,7 +20,14 @@
auto fan = std::make_unique<
phosphor::fan::presence::FanEnclosure>(bus,
fanProp);
- // TODO Add sensors to fan object
+ for (auto const &fanSensor: std::get<2>(fanProp))
+ {
+ auto sensor = std::make_unique<
+ phosphor::fan::presence::TachSensor>(bus,
+ fanSensor,
+ *fan);
+ fan->addSensor(std::move(sensor));
+ }
fans.push_back(std::move(fan));
}
}
diff --git a/tach_sensor.cpp b/tach_sensor.cpp
index 1325365..987e390 100644
--- a/tach_sensor.cpp
+++ b/tach_sensor.cpp
@@ -10,7 +10,7 @@
bool TachSensor::isPresent()
{
- return false;
+ return (tach != 0);
}
} // namespace presence
diff --git a/tach_sensor.hpp b/tach_sensor.hpp
index 0ef2b0a..24ee453 100644
--- a/tach_sensor.hpp
+++ b/tach_sensor.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include <sdbusplus/bus.hpp>
#include "sensor_base.hpp"
@@ -20,9 +21,19 @@
TachSensor& operator=(TachSensor&&) = delete;
~TachSensor() = default;
+ TachSensor(sdbusplus::bus::bus& bus,
+ const std::string& id,
+ FanEnclosure& fanEnc) : Sensor(id, fanEnc),
+ bus(bus)
+ {
+ // Nothing to do here
+ }
+
bool isPresent();
private:
+ sdbusplus::bus::bus& bus;
+ int64_t tach = 0;
};