xref: /openbmc/phosphor-power/phosphor-power-sequencer/src/chassis.hpp (revision f1845c0621324fc8435a8e29377f0b1306e636b7)
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