From 4d982856b445a7e1ba0ba2a349a7dbb3ed19e9aa Mon Sep 17 00:00:00 2001 From: Matthew Barth Date: Fri, 17 Nov 2017 09:37:13 -0600 Subject: Add functional property for each tach sensor Each fan's tach sensor creates a child inventory object under the fan's inventory path containing the sensor's functional state. This child inventory object path is the fan's path plus the tach sensor's defined id. i.e.) /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_0 Change-Id: I0fe5000eadbe55d60b475ccad700b0264ed0ac75 Signed-off-by: Matthew Barth --- monitor/Makefile.am | 3 ++- monitor/fan.hpp | 10 ++++++++++ monitor/tach_sensor.cpp | 23 ++++++++++++++++++++++- monitor/tach_sensor.hpp | 13 +++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) (limited to 'monitor') diff --git a/monitor/Makefile.am b/monitor/Makefile.am index 4e2d599..8eda1e0 100644 --- a/monitor/Makefile.am +++ b/monitor/Makefile.am @@ -19,7 +19,8 @@ phosphor_fan_monitor_LDADD = \ $(top_builddir)/libfan.la \ $(SDBUSPLUS_LIBS) \ $(PHOSPHOR_LOGGING_LIBS) \ - ${PHOSPHOR_DBUS_INTERFACES_LIBS} + ${PHOSPHOR_DBUS_INTERFACES_LIBS} \ + -lstdc++fs phosphor_fan_monitor_CXXFLAGS = \ $(SDBUSPLUS_CFLAGS) \ diff --git a/monitor/fan.hpp b/monitor/fan.hpp index 5a21e31..f22bd9f 100644 --- a/monitor/fan.hpp +++ b/monitor/fan.hpp @@ -124,6 +124,16 @@ class Fan */ void timerExpired(TachSensor& sensor); + /** + * @brief Get the name of the fan + * + * @return - The fan name + */ + inline const std::string& getName() const + { + return _name; + } + private: /** diff --git a/monitor/tach_sensor.cpp b/monitor/tach_sensor.cpp index 040e8f9..a272681 100644 --- a/monitor/tach_sensor.cpp +++ b/monitor/tach_sensor.cpp @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include #include #include "fan.hpp" #include "sdbusplus.hpp" #include "tach_sensor.hpp" -#include "../utility.hpp" +#include "utility.hpp" namespace phosphor { @@ -31,6 +32,7 @@ constexpr auto FAN_SENSOR_VALUE_INTF = "xyz.openbmc_project.Sensor.Value"; constexpr auto FAN_TARGET_PROPERTY = "Target"; constexpr auto FAN_VALUE_PROPERTY = "Value"; +using namespace std::experimental::filesystem; /** * @brief Helper function to read a property @@ -71,6 +73,7 @@ TachSensor::TachSensor(sdbusplus::bus::bus& bus, _bus(bus), _fan(fan), _name(FAN_SENSOR_PATH + id), + _invName(path(fan.getName()) / id), _hasTarget(hasTarget), _timeout(timeout), _timer(events, [this, &fan](){ fan.timerExpired(*this); }) @@ -192,6 +195,24 @@ std::chrono::microseconds TachSensor::getTimeout() return duration_cast(seconds(_timeout)); } +void TachSensor::updateInventory(bool functional) +{ + auto objectMap = util::getObjMap( + _invName, + util::OPERATIONAL_STATUS_INTF, + util::FUNCTIONAL_PROPERTY, + functional); + auto response = util::SDBusPlus::lookupAndCallMethod( + _bus, + util::INVENTORY_PATH, + util::INVENTORY_INTF, + "Notify", + objectMap); + if (response.is_method_error()) + { + log("Error in notify update of tach sensor inventory"); + } +} } } diff --git a/monitor/tach_sensor.hpp b/monitor/tach_sensor.hpp index 9b10110..59b99d2 100644 --- a/monitor/tach_sensor.hpp +++ b/monitor/tach_sensor.hpp @@ -167,6 +167,14 @@ class TachSensor */ void handleTachChange(sdbusplus::message::message& msg); + /** + * @brief Updates the Functional property in the inventory + * for this tach sensor based on the value passed in. + * + * @param[in] functional - If the Functional property should + * be set to true or false. + */ + void updateInventory(bool functional); /** * @brief the dbus object @@ -185,6 +193,11 @@ class TachSensor */ const std::string _name; + /** + * @brief The inventory name of the sensor, including the full path + */ + const std::string _invName; + /** * @brief If functional (not too slow). The parent * fan object sets this. -- cgit v1.2.1