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