1 #pragma once
2 
3 #include <memory>
4 #include <vector>
5 #include <sdbusplus/bus.hpp>
6 #include "types.hpp"
7 #include "zone.hpp"
8 
9 namespace phosphor
10 {
11 namespace fan
12 {
13 namespace control
14 {
15 
16 using ZoneMap = std::map<unsigned int,
17                          std::unique_ptr<Zone>>;
18 
19 /**
20  * @class Fan control manager
21  */
22 class 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
39          * @param[in] events - The sd_event pointer
40          * @param[in] mode - The control mode
41          */
42         Manager(sdbusplus::bus::bus& bus,
43                 phosphor::fan::event::EventPtr& events,
44                 Mode mode);
45 
46         /**
47          * Does the fan control inititialization, which is
48          * setting fans to full, delaying so they
49          * can get there, and starting a target.
50          */
51         void doInit();
52 
53     private:
54 
55         /**
56          * Starts the obmc-fan-control-ready dbus target
57          */
58         void startFanControlReadyTarget();
59 
60         /**
61          * The dbus object
62          */
63         sdbusplus::bus::bus& _bus;
64 
65         /**
66          * The fan zones in the system
67          */
68         ZoneMap _zones;
69 
70         /**
71          * The fan zone layout for the system.
72          * This is generated data.
73          */
74         static const std::vector<ZoneGroup> _zoneLayouts;
75 
76         /**
77          * The number of seconds to delay after
78          * fans get set to high speed on a power on
79          * to give them a chance to get there.
80          */
81         static const unsigned int _powerOnDelay;
82 };
83 
84 
85 }
86 }
87 }
88