blob: 521b4cd26f83ddfcfff21c117a90a6c8a83e828c [file] [log] [blame]
Matt Spinlere10416e2017-04-10 14:15:53 -05001#pragma once
2
3#include <memory>
4#include <vector>
5#include <sdbusplus/bus.hpp>
6#include "types.hpp"
Matt Spinler57352a32017-04-10 14:48:35 -05007#include "zone.hpp"
Matt Spinlere10416e2017-04-10 14:15:53 -05008
9namespace phosphor
10{
11namespace fan
12{
13namespace control
14{
15
Matt Spinler57352a32017-04-10 14:48:35 -050016using ZoneMap = std::map<unsigned int,
17 std::unique_ptr<Zone>>;
18
Matt Spinlere10416e2017-04-10 14:15:53 -050019/**
20 * @class Fan control manager
21 */
22class Manager
23{
24 public:
25
26 Manager() = delete;
27 Manager(const Manager&) = delete;
28 Manager(Manager&&) = default;
29 Manager& operator=(const Manager&) = delete;
30 Manager& operator=(Manager&&) = delete;
31 ~Manager() = default;
32
33 /**
34 * Constructor
35 * Creates the Zone objects based on the
36 * _zoneLayouts data.
37 *
38 * @param[in] bus - The dbus object
Matt Spinleree7f6422017-05-09 11:03:14 -050039 * @param[in] mode - The control mode
Matt Spinlere10416e2017-04-10 14:15:53 -050040 */
Matt Spinleree7f6422017-05-09 11:03:14 -050041 Manager(sdbusplus::bus::bus& bus,
42 Mode mode);
43
44 /**
45 * Does the fan control inititialization, which is
46 * setting fans to full, delaying so they
47 * can get there, and starting a target.
48 */
49 void doInit();
Matt Spinlere10416e2017-04-10 14:15:53 -050050
51 private:
52
53 /**
Matt Spinleree7f6422017-05-09 11:03:14 -050054 * Starts the obmc-fan-control-ready dbus target
55 */
56 void startFanControlReadyTarget();
57
58 /**
Matt Spinlere10416e2017-04-10 14:15:53 -050059 * The dbus object
60 */
61 sdbusplus::bus::bus& _bus;
62
63 /**
Matt Spinler57352a32017-04-10 14:48:35 -050064 * The fan zones in the system
65 */
66 ZoneMap _zones;
67
68 /**
Matt Spinlere10416e2017-04-10 14:15:53 -050069 * The fan zone layout for the system.
70 * This is generated data.
71 */
72 static const std::vector<ZoneGroup> _zoneLayouts;
Matt Spinleree7f6422017-05-09 11:03:14 -050073
74 /**
75 * The number of seconds to delay after
76 * fans get set to high speed on a power on
77 * to give them a chance to get there.
78 */
79 static const unsigned int _powerOnDelay;
Matt Spinlere10416e2017-04-10 14:15:53 -050080};
81
82
83}
84}
85}