blob: 23f416cc0a422d0a925b4ba335e2dc8a41505dca [file] [log] [blame]
Shawn McCarneybfe2c252020-03-10 14:05:19 -05001/**
2 * Copyright © 2020 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 "action.hpp"
19
20#include <memory>
21#include <utility>
22#include <vector>
23
24namespace phosphor::power::regulators
25{
26
27/**
28 * @class PresenceDetection
29 *
30 * Specifies how to detect whether a device is present.
31 *
32 * Some devices are only present in certain system configurations. For example:
33 * - A regulator is only present when a related processor or memory module is
34 * present.
35 * - A system supports multiple storage backplane types, and the device only
36 * exists on one of the backplanes.
37 *
38 * Device presence is detected by executing actions, such as
39 * ComparePresenceAction and CompareVPDAction.
40 *
41 * Device operations like configuration and sensor monitoring will only be
42 * performed if the actions indicate the device is present.
43 *
44 * Device presence will only be detected once per boot of the system. Presence
45 * will be determined prior to the first device operation (such as
46 * configuration). When the system is re-booted, presence will be re-detected.
47 * As a result, presence detection is not supported for devices that can be
48 * removed or added (hot-plugged) while the system is booted and running.
49 */
50class PresenceDetection
51{
52 public:
53 // Specify which compiler-generated methods we want
54 PresenceDetection() = delete;
55 PresenceDetection(const PresenceDetection&) = delete;
56 PresenceDetection(PresenceDetection&&) = delete;
57 PresenceDetection& operator=(const PresenceDetection&) = delete;
58 PresenceDetection& operator=(PresenceDetection&&) = delete;
59 ~PresenceDetection() = default;
60
61 /**
62 * Constructor.
63 *
64 * @param actions actions that detect whether the device is present
65 */
66 explicit PresenceDetection(std::vector<std::unique_ptr<Action>> actions) :
67 actions{std::move(actions)}
68 {
69 }
70
71 /**
72 * Executes the actions to detect whether the device is present.
73 *
74 * The return value of the last action indicates whether the device is
75 * present. A return value of true means the device is present; false means
76 * the device is missing.
77 *
78 * @return true if device is present, false otherwise
79 */
80 bool execute()
81 {
82 // TODO: Create ActionEnvironment, execute actions, catch and handle any
83 // exceptions
84 return true;
85 }
86
87 /**
88 * Returns the actions that detect whether the device is present.
89 *
90 * @return actions
91 */
92 const std::vector<std::unique_ptr<Action>>& getActions() const
93 {
94 return actions;
95 }
96
97 private:
98 /**
99 * Actions that detect whether the device is present.
100 */
101 std::vector<std::unique_ptr<Action>> actions{};
102};
103
104} // namespace phosphor::power::regulators