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 /control/zone.hpp | |
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>
Diffstat (limited to 'control/zone.hpp')
-rw-r--r-- | control/zone.hpp | 84 |
1 files changed, 84 insertions, 0 deletions
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; +}; + +} +} +} |