summaryrefslogtreecommitdiffstats
path: root/control
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2017-04-10 14:48:35 -0500
committerMatt Spinler <spinler@us.ibm.com>2017-04-27 10:04:00 -0500
commit57352a312680c62f231f9c4496b636bad10ef743 (patch)
tree2843de2314b23e7ee87510f704aed090a8766573 /control
parent7f88fe614605c79934ce041dc50c146c155d5864 (diff)
downloadphosphor-fan-presence-57352a312680c62f231f9c4496b636bad10ef743.tar.gz
phosphor-fan-presence-57352a312680c62f231f9c4496b636bad10ef743.zip
Fan control: Fill in Manager class
Create Zone objects for the fan zones defined in the definition data that meet all conditions. Change-Id: I9c29be93716cd137f1c714355a0bd2a1c93271cd Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Diffstat (limited to 'control')
-rw-r--r--control/manager.cpp36
-rw-r--r--control/manager.hpp9
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.
*/
OpenPOWER on IntegriCloud