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