diff options
author | Matt Spinler <spinler@us.ibm.com> | 2017-04-10 14:39:02 -0500 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2017-04-27 10:04:00 -0500 |
commit | 7f88fe614605c79934ce041dc50c146c155d5864 (patch) | |
tree | a94809262cd5df1c9b895e765cf6ad4b4de18eac | |
parent | e2b25cb25702490e1bd8b31ce055249f0158a944 (diff) | |
download | phosphor-fan-presence-7f88fe614605c79934ce041dc50c146c155d5864.tar.gz phosphor-fan-presence-7f88fe614605c79934ce041dc50c146c155d5864.zip |
Fan control: Create Zone class
This class represents a fan zone, which is a collection
of fans that are always set to a speed together.
Change-Id: I5646f07b7b136aad216dabded3b5da3e9da0a531
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
-rw-r--r-- | control/Makefile.am | 3 | ||||
-rw-r--r-- | control/zone.cpp | 51 | ||||
-rw-r--r-- | control/zone.hpp | 84 |
3 files changed, 137 insertions, 1 deletions
diff --git a/control/Makefile.am b/control/Makefile.am index 56ba948..fc2a2dc 100644 --- a/control/Makefile.am +++ b/control/Makefile.am @@ -8,7 +8,8 @@ phosphor_fan_control_SOURCES = \ generated.cpp \ fan.cpp \ main.cpp \ - manager.cpp + manager.cpp \ + zone.cpp phosphor_fan_control_LDADD = \ $(top_builddir)/libfan.la \ diff --git a/control/zone.cpp b/control/zone.cpp new file mode 100644 index 0000000..1e50060 --- /dev/null +++ b/control/zone.cpp @@ -0,0 +1,51 @@ +/** + * Copyright © 2017 IBM Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "zone.hpp" + +namespace phosphor +{ +namespace fan +{ +namespace control +{ + + +Zone::Zone(sdbusplus::bus::bus& bus, + const ZoneDefinition& def) : + _bus(bus), + _fullSpeed(std::get<fullSpeedPos>(def)), + _zoneNum(std::get<zoneNumPos>(def)) +{ + auto& fanDefs = std::get<fanListPos>(def); + + for (auto& def : fanDefs) + { + _fans.emplace_back(std::make_unique<Fan>(bus, def)); + } +} + + +void Zone::setSpeed(uint64_t speed) +{ + for (auto& fan : _fans) + { + fan->setSpeed(speed); + } +} + +} +} +} diff --git a/control/zone.hpp b/control/zone.hpp new file mode 100644 index 0000000..985a46d --- /dev/null +++ b/control/zone.hpp @@ -0,0 +1,84 @@ +#pragma once +#include <vector> +#include <sdbusplus/bus.hpp> +#include "fan.hpp" +#include "types.hpp" + +namespace phosphor +{ +namespace fan +{ +namespace control +{ + +/** + * @class Represents a fan control zone, which is a group of fans + * that behave the same. + */ +class Zone +{ + public: + + Zone() = delete; + Zone(const Zone&) = delete; + Zone(Zone&&) = default; + Zone& operator=(const Zone&) = delete; + Zone& operator=(Zone&&) = delete; + ~Zone() = default; + + /** + * Constructor + * Creates the appropriate fan objects based on + * the zone definition data passed in. + * + * @param[in] bus - the dbus object + * @param[in] def - the fan zone definition data + */ + Zone(sdbusplus::bus::bus& bus, + const ZoneDefinition& def); + + /** + * Sets all fans in the zone to the speed + * passed in + * + * @param[in] speed - the fan speed + */ + void setSpeed(uint64_t speed); + + /** + * Sets the zone to full speed + */ + inline void setFullSpeed() + { + if (_fullSpeed != 0) + { + setSpeed(_fullSpeed); + } + } + + private: + + /** + * The dbus object + */ + sdbusplus::bus::bus& _bus; + + /** + * Full speed for the zone + */ + const uint64_t _fullSpeed; + + /** + * The zone number + */ + const size_t _zoneNum; + + /** + * The vector of fans in this zone + */ + std::vector<std::unique_ptr<Fan>> _fans; +}; + +} +} +} |