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 Chassis() = delete; 44*8a8a6801SShawn McCarney Chassis(const Chassis&) = delete; 45*8a8a6801SShawn McCarney Chassis(Chassis&&) = delete; 46*8a8a6801SShawn McCarney Chassis& operator=(const Chassis&) = delete; 47*8a8a6801SShawn McCarney Chassis& operator=(Chassis&&) = delete; 48*8a8a6801SShawn McCarney ~Chassis() = default; 49*8a8a6801SShawn McCarney 50*8a8a6801SShawn McCarney /** 51*8a8a6801SShawn McCarney * Constructor. 52*8a8a6801SShawn McCarney * 53*8a8a6801SShawn McCarney * @param number Chassis number within the system. Must be >= 1. 54*8a8a6801SShawn McCarney * @param inventoryPath D-Bus inventory path of the chassis 55*8a8a6801SShawn McCarney * @param powerSequencers Power sequencer devices within the chassis 56*8a8a6801SShawn McCarney */ Chassis(size_t number,const std::string & inventoryPath,std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers)57*8a8a6801SShawn McCarney explicit Chassis( 58*8a8a6801SShawn McCarney size_t number, const std::string& inventoryPath, 59*8a8a6801SShawn McCarney std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers) : 60*8a8a6801SShawn McCarney number{number}, inventoryPath{inventoryPath}, 61*8a8a6801SShawn McCarney powerSequencers{std::move(powerSequencers)} 62*8a8a6801SShawn McCarney {} 63*8a8a6801SShawn McCarney 64*8a8a6801SShawn McCarney /** 65*8a8a6801SShawn McCarney * Returns the chassis number within the system. 66*8a8a6801SShawn McCarney * 67*8a8a6801SShawn McCarney * @return chassis number 68*8a8a6801SShawn McCarney */ getNumber() const69*8a8a6801SShawn McCarney size_t getNumber() const 70*8a8a6801SShawn McCarney { 71*8a8a6801SShawn McCarney return number; 72*8a8a6801SShawn McCarney } 73*8a8a6801SShawn McCarney 74*8a8a6801SShawn McCarney /** 75*8a8a6801SShawn McCarney * Returns the D-Bus inventory path of the chassis. 76*8a8a6801SShawn McCarney * 77*8a8a6801SShawn McCarney * @return inventory path 78*8a8a6801SShawn McCarney */ getInventoryPath() const79*8a8a6801SShawn McCarney const std::string& getInventoryPath() const 80*8a8a6801SShawn McCarney { 81*8a8a6801SShawn McCarney return inventoryPath; 82*8a8a6801SShawn McCarney } 83*8a8a6801SShawn McCarney 84*8a8a6801SShawn McCarney /** 85*8a8a6801SShawn McCarney * Returns the power sequencer devices within the chassis. 86*8a8a6801SShawn McCarney * 87*8a8a6801SShawn McCarney * @return power sequencer devices 88*8a8a6801SShawn McCarney */ 89*8a8a6801SShawn McCarney const std::vector<std::unique_ptr<PowerSequencerDevice>>& getPowerSequencers() const90*8a8a6801SShawn McCarney getPowerSequencers() const 91*8a8a6801SShawn McCarney { 92*8a8a6801SShawn McCarney return powerSequencers; 93*8a8a6801SShawn McCarney } 94*8a8a6801SShawn McCarney 95*8a8a6801SShawn McCarney private: 96*8a8a6801SShawn McCarney /** 97*8a8a6801SShawn McCarney * Chassis number within the system. 98*8a8a6801SShawn McCarney * 99*8a8a6801SShawn McCarney * Chassis numbers start at 1 because chassis 0 represents the entire 100*8a8a6801SShawn McCarney * system. 101*8a8a6801SShawn McCarney */ 102*8a8a6801SShawn McCarney size_t number; 103*8a8a6801SShawn McCarney 104*8a8a6801SShawn McCarney /** 105*8a8a6801SShawn McCarney * D-Bus inventory path of the chassis. 106*8a8a6801SShawn McCarney */ 107*8a8a6801SShawn McCarney std::string inventoryPath{}; 108*8a8a6801SShawn McCarney 109*8a8a6801SShawn McCarney /** 110*8a8a6801SShawn McCarney * Power sequencer devices within the chassis. 111*8a8a6801SShawn McCarney */ 112*8a8a6801SShawn McCarney std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers{}; 113*8a8a6801SShawn McCarney }; 114*8a8a6801SShawn McCarney 115*8a8a6801SShawn McCarney } // namespace phosphor::power::sequencer 116