blob: 4ffa70bdea4677203cf30ec3a09ce9d17cd739a8 [file] [log] [blame]
Shawn McCarney03a25f12021-04-24 17:02:04 -05001/**
2 * Copyright © 2021 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 "dbus_sensor.hpp"
19#include "sensors.hpp"
20#include "services.hpp"
21
22#include <sdbusplus/bus.hpp>
23#include <sdbusplus/server/manager.hpp>
24
25#include <chrono>
26#include <map>
27#include <memory>
28#include <string>
29
30namespace phosphor::power::regulators
31{
32
33/**
34 * @class DBusSensors
35 *
36 * Implementation of the Sensors interface using D-Bus.
37 */
38class DBusSensors : public Sensors
39{
40 public:
41 // Specify which compiler-generated methods we want
42 DBusSensors() = delete;
43 DBusSensors(const DBusSensors&) = delete;
44 DBusSensors(DBusSensors&&) = delete;
45 DBusSensors& operator=(const DBusSensors&) = delete;
46 DBusSensors& operator=(DBusSensors&&) = delete;
47 virtual ~DBusSensors() = default;
48
49 /**
50 * Constructor.
51 *
52 * @param bus D-Bus bus object
53 */
54 explicit DBusSensors(sdbusplus::bus::bus& bus) :
55 bus{bus}, manager{bus, sensorsObjectPath}
56 {
57 }
58
59 /** @copydoc Sensors::enable() */
60 virtual void enable(Services& services) override;
61
62 /** @copydoc Sensors::endCycle() */
63 virtual void endCycle(Services& services) override;
64
65 /** @copydoc Sensors::endRail() */
66 virtual void endRail(bool errorOccurred, Services& services) override;
67
68 /** @copydoc Sensors::disable() */
69 virtual void disable(Services& services) override;
70
71 /** @copydoc Sensors::setValue() */
72 virtual void setValue(SensorType type, double value,
73 Services& services) override;
74
75 /** @copydoc Sensors::startCycle() */
76 virtual void startCycle(Services& services) override;
77
78 /** @copydoc Sensors::startRail() */
79 virtual void startRail(const std::string& rail,
80 const std::string& deviceInventoryPath,
81 const std::string& chassisInventoryPath,
82 Services& services) override;
83
84 private:
85 /**
86 * D-Bus bus object.
87 */
88 sdbusplus::bus::bus& bus;
89
90 /**
91 * D-Bus object manager.
92 *
93 * Causes this application to implement the
94 * org.freedesktop.DBus.ObjectManager interface.
95 */
96 sdbusplus::server::manager_t manager;
97
98 /**
99 * Map from sensor names to DBusSensor objects.
100 */
101 std::map<std::string, std::unique_ptr<DBusSensor>> sensors{};
102
103 /**
104 * Time that current monitoring cycle started.
105 */
106 std::chrono::system_clock::time_point cycleStartTime{};
107
108 /**
109 * Current voltage rail.
110 *
111 * This is set by startRail().
112 */
113 std::string rail{};
114
115 /**
116 * Current device inventory path.
117 *
118 * This is set by startRail().
119 */
120 std::string deviceInventoryPath{};
121
122 /**
123 * Current chassis inventory path.
124 *
125 * This is set by startRail().
126 */
127 std::string chassisInventoryPath{};
128};
129
130} // namespace phosphor::power::regulators