xref: /openbmc/phosphor-fan-presence/control/manager.hpp (revision cb356d48f0ab00c4f5f774c68760d2c2afd14cd8)
1e10416ecSMatt Spinler #pragma once
2e10416ecSMatt Spinler 
3e10416ecSMatt Spinler #include "types.hpp"
457352a31SMatt Spinler #include "zone.hpp"
5e10416ecSMatt Spinler 
63e1bb274SMatthew Barth #include <sdbusplus/bus.hpp>
73e1bb274SMatthew Barth #include <sdeventplus/event.hpp>
83e1bb274SMatthew Barth 
93e1bb274SMatthew Barth #include <memory>
103e1bb274SMatthew Barth #include <vector>
113e1bb274SMatthew Barth 
12e10416ecSMatt Spinler namespace phosphor
13e10416ecSMatt Spinler {
14e10416ecSMatt Spinler namespace fan
15e10416ecSMatt Spinler {
16e10416ecSMatt Spinler namespace control
17e10416ecSMatt Spinler {
18e10416ecSMatt Spinler 
193e1bb274SMatthew Barth using ZoneMap = std::map<unsigned int, std::unique_ptr<Zone>>;
2057352a31SMatt Spinler 
21e10416ecSMatt Spinler /**
22e10416ecSMatt Spinler  * @class Fan control manager
23e10416ecSMatt Spinler  */
24e10416ecSMatt Spinler class Manager
25e10416ecSMatt Spinler {
26e10416ecSMatt Spinler   public:
27e10416ecSMatt Spinler     Manager() = delete;
28e10416ecSMatt Spinler     Manager(const Manager&) = delete;
29e10416ecSMatt Spinler     Manager(Manager&&) = default;
30e10416ecSMatt Spinler     Manager& operator=(const Manager&) = delete;
31e10416ecSMatt Spinler     Manager& operator=(Manager&&) = delete;
32e10416ecSMatt Spinler     ~Manager() = default;
33e10416ecSMatt Spinler 
34e10416ecSMatt Spinler     /**
35e10416ecSMatt Spinler      * Constructor
36e10416ecSMatt Spinler      * Creates the Zone objects based on the
37e10416ecSMatt Spinler      * _zoneLayouts data.
38e10416ecSMatt Spinler      *
39e10416ecSMatt Spinler      * @param[in] bus - The dbus object
401cfc2f11SWilliam A. Kennington III      * @param[in] event - The event loop
41ee7f6428SMatt Spinler      * @param[in] mode - The control mode
42e10416ecSMatt Spinler      */
43*cb356d48SPatrick Williams     Manager(sdbusplus::bus_t& bus, const sdeventplus::Event& event, Mode mode);
44ee7f6428SMatt Spinler 
45ee7f6428SMatt Spinler     /**
46ee7f6428SMatt Spinler      * Does the fan control inititialization, which is
47ee7f6428SMatt Spinler      * setting fans to full, delaying so they
48ee7f6428SMatt Spinler      * can get there, and starting a target.
49ee7f6428SMatt Spinler      */
5006764946SMatthew Barth     void doInit(const sdeventplus::Event& event);
51e10416ecSMatt Spinler 
52e10416ecSMatt Spinler   private:
53e10416ecSMatt Spinler     /**
54e10416ecSMatt Spinler      * The dbus object
55e10416ecSMatt Spinler      */
56*cb356d48SPatrick Williams     sdbusplus::bus_t& _bus;
57e10416ecSMatt Spinler 
58e10416ecSMatt Spinler     /**
5993af4194SMatthew Barth      * The sdbusplus object manager
6093af4194SMatthew Barth      */
61*cb356d48SPatrick Williams     sdbusplus::server::manager_t _objMgr;
6293af4194SMatthew Barth 
6393af4194SMatthew Barth     /**
6457352a31SMatt Spinler      * The fan zones in the system
6557352a31SMatt Spinler      */
6657352a31SMatt Spinler     ZoneMap _zones;
67f8ae7a5eSMatthew Barth 
6857352a31SMatt Spinler     /**
69e10416ecSMatt Spinler      * The fan zone layout for the system.
70e10416ecSMatt Spinler      * This is generated data.
71e10416ecSMatt Spinler      */
72e10416ecSMatt Spinler     static const std::vector<ZoneGroup> _zoneLayouts;
73ee7f6428SMatt Spinler 
74ee7f6428SMatt Spinler     /**
75ee7f6428SMatt Spinler      * The number of seconds to delay after
76ee7f6428SMatt Spinler      * fans get set to high speed on a power on
77ee7f6428SMatt Spinler      * to give them a chance to get there.
78ee7f6428SMatt Spinler      */
79ee7f6428SMatt Spinler     static const unsigned int _powerOnDelay;
80e10416ecSMatt Spinler };
81e10416ecSMatt Spinler 
823e1bb274SMatthew Barth } // namespace control
833e1bb274SMatthew Barth } // namespace fan
843e1bb274SMatthew Barth } // namespace phosphor
85