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