1 #pragma once 2 #include "utility.hpp" 3 4 #include <libevdev/libevdev.h> 5 6 namespace phosphor 7 { 8 namespace cooling 9 { 10 namespace type 11 { 12 13 struct FreeEvDev 14 { operator ()phosphor::cooling::type::FreeEvDev15 void operator()(struct libevdev* device) const 16 { 17 libevdev_free(device); 18 } 19 }; 20 21 class CoolingType 22 { 23 using Property = std::string; 24 using Value = std::variant<bool>; 25 // Association between property and its value 26 using PropertyMap = std::map<Property, Value>; 27 using Interface = std::string; 28 // Association between interface and the dbus property 29 using InterfaceMap = std::map<Interface, PropertyMap>; 30 using Object = sdbusplus::message::object_path; 31 // Association between object and the interface 32 using ObjectMap = std::map<Object, InterfaceMap>; 33 34 public: 35 CoolingType() = delete; 36 ~CoolingType() = default; 37 CoolingType(const CoolingType&) = delete; 38 CoolingType(CoolingType&&) = default; 39 CoolingType& operator=(const CoolingType&) = delete; 40 CoolingType& operator=(CoolingType&&) = default; 41 42 /** 43 * @brief Constructs Cooling Type Object 44 * 45 * @param[in] bus - Dbus bus object 46 */ CoolingType(sdbusplus::bus_t & bus)47 explicit CoolingType(sdbusplus::bus_t& bus) : bus(bus), gpioFd(-1) 48 { 49 // TODO: Issue openbmc/openbmc#1531 - means to default properties. 50 } 51 52 /** 53 * @brief Sets airCooled to true. 54 */ 55 void setAirCooled(); 56 /** 57 * @brief Sets waterCooled to true. 58 */ 59 void setWaterCooled(); 60 /** 61 * @brief Updates the inventory properties for CoolingType. 62 * 63 * @param[in] path - Path to object to update 64 */ 65 void updateInventory(const std::string& path); 66 /** 67 * @brief Setup and read the GPIO device for reading cooling type. 68 * 69 * @param[in] path - Path to the GPIO device file to read 70 * @param[in] pin - Event/key code to read (pin) 71 */ 72 void readGpio(const std::string& path, unsigned int pin); 73 74 private: 75 /** @brief Connection for sdbusplus bus */ 76 sdbusplus::bus_t& bus; 77 // File descriptor for the GPIO file we are going to read. 78 phosphor::fan::util::FileDescriptor gpioFd; 79 bool airCooled = false; 80 bool waterCooled = false; 81 82 /** 83 * @brief Construct the inventory object map for CoolingType. 84 * 85 * @param[in] objpath - Path to object to update 86 * 87 * @return The inventory object map to update inventory 88 */ 89 ObjectMap getObjectMap(const std::string& objpath); 90 }; 91 92 } // namespace type 93 } // namespace cooling 94 } // namespace phosphor 95 96 // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 97