1*8a8a6801SShawn McCarney /** 2*8a8a6801SShawn McCarney * Copyright © 2025 IBM Corporation 3*8a8a6801SShawn McCarney * 4*8a8a6801SShawn McCarney * Licensed under the Apache License, Version 2.0 (the "License"); 5*8a8a6801SShawn McCarney * you may not use this file except in compliance with the License. 6*8a8a6801SShawn McCarney * You may obtain a copy of the License at 7*8a8a6801SShawn McCarney * 8*8a8a6801SShawn McCarney * http://www.apache.org/licenses/LICENSE-2.0 9*8a8a6801SShawn McCarney * 10*8a8a6801SShawn McCarney * Unless required by applicable law or agreed to in writing, software 11*8a8a6801SShawn McCarney * distributed under the License is distributed on an "AS IS" BASIS, 12*8a8a6801SShawn McCarney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*8a8a6801SShawn McCarney * See the License for the specific language governing permissions and 14*8a8a6801SShawn McCarney * limitations under the License. 15*8a8a6801SShawn McCarney */ 16*8a8a6801SShawn McCarney #pragma once 17*8a8a6801SShawn McCarney 18*8a8a6801SShawn McCarney #include "power_sequencer_device.hpp" 19*8a8a6801SShawn McCarney 20*8a8a6801SShawn McCarney #include <stddef.h> // for size_t 21*8a8a6801SShawn McCarney 22*8a8a6801SShawn McCarney #include <memory> 23*8a8a6801SShawn McCarney #include <string> 24*8a8a6801SShawn McCarney #include <utility> 25*8a8a6801SShawn McCarney #include <vector> 26*8a8a6801SShawn McCarney 27*8a8a6801SShawn McCarney namespace phosphor::power::sequencer 28*8a8a6801SShawn McCarney { 29*8a8a6801SShawn McCarney 30*8a8a6801SShawn McCarney /** 31*8a8a6801SShawn McCarney * @class Chassis 32*8a8a6801SShawn McCarney * 33*8a8a6801SShawn McCarney * A chassis within the system. 34*8a8a6801SShawn McCarney * 35*8a8a6801SShawn McCarney * Chassis are typically a physical enclosure that contains system components 36*8a8a6801SShawn McCarney * such as CPUs, fans, power supplies, and PCIe cards. A chassis can be 37*8a8a6801SShawn McCarney * stand-alone, such as a tower or desktop. A chassis can also be designed to be 38*8a8a6801SShawn McCarney * mounted in an equipment rack. 39*8a8a6801SShawn McCarney */ 40*8a8a6801SShawn McCarney class Chassis 41*8a8a6801SShawn McCarney { 42*8a8a6801SShawn McCarney public: 43*8a8a6801SShawn McCarney // Specify which compiler-generated methods we want 44*8a8a6801SShawn McCarney Chassis() = delete; 45*8a8a6801SShawn McCarney Chassis(const Chassis&) = delete; 46*8a8a6801SShawn McCarney Chassis(Chassis&&) = delete; 47*8a8a6801SShawn McCarney Chassis& operator=(const Chassis&) = delete; 48*8a8a6801SShawn McCarney Chassis& operator=(Chassis&&) = delete; 49*8a8a6801SShawn McCarney ~Chassis() = default; 50*8a8a6801SShawn McCarney 51*8a8a6801SShawn McCarney /** 52*8a8a6801SShawn McCarney * Constructor. 53*8a8a6801SShawn McCarney * 54*8a8a6801SShawn McCarney * @param number Chassis number within the system. Must be >= 1. 55*8a8a6801SShawn McCarney * @param inventoryPath D-Bus inventory path of the chassis 56*8a8a6801SShawn McCarney * @param powerSequencers Power sequencer devices within the chassis 57*8a8a6801SShawn McCarney */ 58*8a8a6801SShawn McCarney explicit Chassis( 59*8a8a6801SShawn McCarney size_t number, const std::string& inventoryPath, 60*8a8a6801SShawn McCarney std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers) : 61*8a8a6801SShawn McCarney number{number}, inventoryPath{inventoryPath}, 62*8a8a6801SShawn McCarney powerSequencers{std::move(powerSequencers)} 63*8a8a6801SShawn McCarney {} 64*8a8a6801SShawn McCarney 65*8a8a6801SShawn McCarney /** 66*8a8a6801SShawn McCarney * Returns the chassis number within the system. 67*8a8a6801SShawn McCarney * 68*8a8a6801SShawn McCarney * @return chassis number 69*8a8a6801SShawn McCarney */ 70*8a8a6801SShawn McCarney size_t getNumber() const 71*8a8a6801SShawn McCarney { 72*8a8a6801SShawn McCarney return number; 73*8a8a6801SShawn McCarney } 74*8a8a6801SShawn McCarney 75*8a8a6801SShawn McCarney /** 76*8a8a6801SShawn McCarney * Returns the D-Bus inventory path of the chassis. 77*8a8a6801SShawn McCarney * 78*8a8a6801SShawn McCarney * @return inventory path 79*8a8a6801SShawn McCarney */ 80*8a8a6801SShawn McCarney const std::string& getInventoryPath() const 81*8a8a6801SShawn McCarney { 82*8a8a6801SShawn McCarney return inventoryPath; 83*8a8a6801SShawn McCarney } 84*8a8a6801SShawn McCarney 85*8a8a6801SShawn McCarney /** 86*8a8a6801SShawn McCarney * Returns the power sequencer devices within the chassis. 87*8a8a6801SShawn McCarney * 88*8a8a6801SShawn McCarney * @return power sequencer devices 89*8a8a6801SShawn McCarney */ 90*8a8a6801SShawn McCarney const std::vector<std::unique_ptr<PowerSequencerDevice>>& 91*8a8a6801SShawn McCarney getPowerSequencers() const 92*8a8a6801SShawn McCarney { 93*8a8a6801SShawn McCarney return powerSequencers; 94*8a8a6801SShawn McCarney } 95*8a8a6801SShawn McCarney 96*8a8a6801SShawn McCarney private: 97*8a8a6801SShawn McCarney /** 98*8a8a6801SShawn McCarney * Chassis number within the system. 99*8a8a6801SShawn McCarney * 100*8a8a6801SShawn McCarney * Chassis numbers start at 1 because chassis 0 represents the entire 101*8a8a6801SShawn McCarney * system. 102*8a8a6801SShawn McCarney */ 103*8a8a6801SShawn McCarney size_t number; 104*8a8a6801SShawn McCarney 105*8a8a6801SShawn McCarney /** 106*8a8a6801SShawn McCarney * D-Bus inventory path of the chassis. 107*8a8a6801SShawn McCarney */ 108*8a8a6801SShawn McCarney std::string inventoryPath{}; 109*8a8a6801SShawn McCarney 110*8a8a6801SShawn McCarney /** 111*8a8a6801SShawn McCarney * Power sequencer devices within the chassis. 112*8a8a6801SShawn McCarney */ 113*8a8a6801SShawn McCarney std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers{}; 114*8a8a6801SShawn McCarney }; 115*8a8a6801SShawn McCarney 116*8a8a6801SShawn McCarney } // namespace phosphor::power::sequencer 117