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