From 9df0e16e00338ea267c71a2bf3c314d39e8961be Mon Sep 17 00:00:00 2001 From: Brad Bishop Date: Sat, 22 Apr 2017 14:19:45 -0400 Subject: build: Move presence to a subdirectory Change-Id: I33b28922107b9b041de3699e4a6eebd3d05ebdef Signed-off-by: Brad Bishop --- presence/fan_enclosure.hpp | 114 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 presence/fan_enclosure.hpp (limited to 'presence/fan_enclosure.hpp') diff --git a/presence/fan_enclosure.hpp b/presence/fan_enclosure.hpp new file mode 100644 index 0000000..8f5cfdf --- /dev/null +++ b/presence/fan_enclosure.hpp @@ -0,0 +1,114 @@ +#pragma once + +#include +#include "fan_properties.hpp" +#include "sensor_base.hpp" + + +namespace phosphor +{ +namespace fan +{ +namespace presence +{ + +/** + * @brief Specifies the defined presence states of a fan enclosure + */ +typedef enum presenceState +{ + NOT_PRESENT, + PRESENT, + UNKNOWN +} presenceState; + +/** + * @class FanEnclosure + * @brief OpenBMC fan enclosure inventory presence implementation + * @details Inventory is based on the fan enclosure being present or not. This + * class represents that fan enclosure and updates its presences status within + * its inventory object based on the status of all its sensors. + */ +class FanEnclosure +{ + using Property = std::string; + using Value = sdbusplus::message::variant; + // Association between property and its value + using PropertyMap = std::map; + using Interface = std::string; + // Association between interface and the dbus property + using InterfaceMap = std::map; + using Object = sdbusplus::message::object_path; + // Association between object and the interface + using ObjectMap = std::map; + + public: + FanEnclosure() = delete; + FanEnclosure(const FanEnclosure&) = delete; + FanEnclosure(FanEnclosure&&) = default; + FanEnclosure& operator=(const FanEnclosure&) = delete; + FanEnclosure& operator=(FanEnclosure&&) = delete; + ~FanEnclosure() = default; + + /** + * @brief Constructs Fan Enclosure Object + * + * @param[in] bus - Dbus bus object + * @param[in] fanProp - Fan enclosure properties + */ + FanEnclosure(sdbusplus::bus::bus& bus, + const phosphor::fan::Properties& fanProp) : + bus(bus), + invPath(std::get<0>(fanProp)), + fanDesc(std::get<1>(fanProp)) + { + //Add this fan to inventory + updInventory(); + } + + /** + * @brief Update inventory when the determined presence of this fan + * enclosure has changed + */ + void updInventory(); + /** + * @brief Add a sensor association to this fan enclosure + * + * @param[in] sensor - Sensor associated to this fan enclosure + */ + void addSensor( + std::unique_ptr&& sensor); + + private: + /** @brief Connection for sdbusplus bus */ + sdbusplus::bus::bus& bus; + /** @brief Inventory path for this fan enclosure */ + const std::string invPath; + /** @brief Description used as 'PrettyName' on inventory object */ + const std::string fanDesc; + /** @brief List of sensors associated with this fan enclosure */ + std::vector> sensors; + /** @brief Last known presence state of this fan enclosure */ + presenceState presState = UNKNOWN; + + /** + * @brief Get the current presence state based on all sensors + * + * @return Current presence state determined from all sensors + */ + presenceState getCurPresState(); + + /** + * @brief Construct the inventory object map + * + * @param[in] Current presence state + * + * @return The inventory object map to update inventory + */ + ObjectMap getObjectMap(bool curPresState); + +}; + +} // namespace presence +} // namespace fan +} // namespace phosphor -- cgit v1.2.1