summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-02-17 17:10:19 -0600
committerMatthew Barth <msbarth@us.ibm.com>2017-03-15 12:17:38 -0500
commitd64038262e4c8743ae774efde7a8e91544ed359b (patch)
treef72a9030e4fcf15bfe5641f1bedd255c3cce2c74
parentb803445f7095c9b1e2ab40dc37526b15e7006393 (diff)
downloadphosphor-fan-presence-d64038262e4c8743ae774efde7a8e91544ed359b.tar.gz
phosphor-fan-presence-d64038262e4c8743ae774efde7a8e91544ed359b.zip
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>
-rw-r--r--fan_enclosure.cpp6
-rw-r--r--fan_enclosure.hpp5
-rw-r--r--sensor_base.hpp10
-rw-r--r--tach_detect.cpp10
-rw-r--r--tach_sensor.cpp2
-rw-r--r--tach_sensor.hpp11
6 files changed, 42 insertions, 2 deletions
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 @@ void FanEnclosure::addInventory()
//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 @@ class FanEnclosure
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 @@ class Sensor
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 @@ int main(void)
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 @@ namespace presence
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 @@ class TachSensor : public Sensor
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;
};
OpenPOWER on IntegriCloud