diff options
-rw-r--r-- | control/manager.cpp | 36 | ||||
-rw-r--r-- | control/manager.hpp | 9 |
2 files changed, 44 insertions, 1 deletions
diff --git a/control/manager.cpp b/control/manager.cpp index 5fe0781..9359a6b 100644 --- a/control/manager.cpp +++ b/control/manager.cpp @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include <algorithm> #include "manager.hpp" namespace phosphor @@ -25,7 +26,40 @@ namespace control Manager::Manager(sdbusplus::bus::bus& bus) : _bus(bus) { - //TODO + //Create the appropriate Zone objects based on the + //actual system configuration. + + //Find the 1 ZoneGroup that meets all of its conditions + for (auto& group : _zoneLayouts) + { + auto& conditions = std::get<conditionListPos>(group); + + if (std::all_of(conditions.begin(), conditions.end(), + [](const auto& c) + { + //TODO: openbmc/openbmc#1500 + //Still need to actually evaluate the conditions + return true; + })) + { + //Create a Zone object for each zone in this group + auto& zones = std::get<zoneListPos>(group); + + for (auto& z : zones) + { + _zones.emplace(std::get<zoneNumPos>(z), + std::make_unique<Zone>(_bus, z)); + } + + break; + } + } + + //Set to full since we don't know state of system yet. + for (auto& z: _zones) + { + z.second->setFullSpeed(); + } } diff --git a/control/manager.hpp b/control/manager.hpp index 44f445e..7f8baa3 100644 --- a/control/manager.hpp +++ b/control/manager.hpp @@ -4,6 +4,7 @@ #include <vector> #include <sdbusplus/bus.hpp> #include "types.hpp" +#include "zone.hpp" namespace phosphor { @@ -12,6 +13,9 @@ namespace fan namespace control { +using ZoneMap = std::map<unsigned int, + std::unique_ptr<Zone>>; + /** * @class Fan control manager */ @@ -43,6 +47,11 @@ class Manager sdbusplus::bus::bus& _bus; /** + * The fan zones in the system + */ + ZoneMap _zones; + + /** * The fan zone layout for the system. * This is generated data. */ |