blob: 8d6fc0d534d2f8cfeb933347eb508b5fa052dd2a [file] [log] [blame]
Shawn McCarney81095022020-07-16 14:22:26 -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 "error_logging.hpp"
19#include "journal.hpp"
Shawn McCarneyd58858c2020-11-04 18:28:01 -060020#include "presence_service.hpp"
Shawn McCarney81095022020-07-16 14:22:26 -050021
22#include <sdbusplus/bus.hpp>
23
24namespace phosphor::power::regulators
25{
26
27/**
28 * @class Services
29 *
30 * Abstract base class that provides an interface to system services like error
31 * logging and the journal.
32 *
33 * This interface is a container for a set of system services. It can be passed
34 * as a single parameter to the rest of the application.
35 */
36class Services
37{
38 public:
39 // Specify which compiler-generated methods we want
40 Services() = default;
41 Services(const Services&) = delete;
42 Services(Services&&) = delete;
43 Services& operator=(const Services&) = delete;
44 Services& operator=(Services&&) = delete;
45 virtual ~Services() = default;
46
47 /**
48 * Returns the D-Bus bus object.
49 *
50 * @return D-Bus bus
51 */
52 virtual sdbusplus::bus::bus& getBus() = 0;
53
54 /**
55 * Returns the error logging interface.
56 *
57 * @return error logging interface
58 */
59 virtual ErrorLogging& getErrorLogging() = 0;
60
61 /**
62 * Returns the journal interface.
63 *
64 * @return journal interface
65 */
66 virtual Journal& getJournal() = 0;
Shawn McCarneyd58858c2020-11-04 18:28:01 -060067
68 /**
69 * Returns the interface to hardware presence data.
70 *
71 * @return hardware presence interface
72 */
73 virtual PresenceService& getPresenceService() = 0;
Shawn McCarney81095022020-07-16 14:22:26 -050074};
75
76/**
77 * @class BMCServices
78 *
79 * Implementation of the Services interface using standard BMC system services.
80 */
81class BMCServices : public Services
82{
83 public:
84 // Specify which compiler-generated methods we want
85 BMCServices() = delete;
86 BMCServices(const BMCServices&) = delete;
87 BMCServices(BMCServices&&) = delete;
88 BMCServices& operator=(const BMCServices&) = delete;
89 BMCServices& operator=(BMCServices&&) = delete;
90 virtual ~BMCServices() = default;
91
92 /**
93 * Constructor.
94 *
95 * @param bus D-Bus bus object
96 */
Shawn McCarneyd58858c2020-11-04 18:28:01 -060097 explicit BMCServices(sdbusplus::bus::bus& bus) :
98 bus{bus}, errorLogging{bus}, presenceService{bus}
Shawn McCarney81095022020-07-16 14:22:26 -050099 {
100 }
101
102 /** @copydoc Services::getBus() */
103 virtual sdbusplus::bus::bus& getBus() override
104 {
105 return bus;
106 }
107
108 /** @copydoc Services::getErrorLogging() */
109 virtual ErrorLogging& getErrorLogging() override
110 {
111 return errorLogging;
112 }
113
114 /** @copydoc Services::getJournal() */
115 virtual Journal& getJournal() override
116 {
117 return journal;
118 }
119
Shawn McCarneyd58858c2020-11-04 18:28:01 -0600120 /** @copydoc Services::getPresenceService() */
121 virtual PresenceService& getPresenceService() override
122 {
123 return presenceService;
124 }
125
Shawn McCarney81095022020-07-16 14:22:26 -0500126 private:
127 /**
128 * D-Bus bus object.
129 */
130 sdbusplus::bus::bus& bus;
131
132 /**
133 * Implementation of the ErrorLogging interface using D-Bus method calls.
134 */
135 DBusErrorLogging errorLogging;
136
137 /**
138 * Implementation of the Journal interface that writes to the systemd
139 * journal.
140 */
141 SystemdJournal journal{};
Shawn McCarneyd58858c2020-11-04 18:28:01 -0600142
143 /**
144 * Implementation of the PresenceService interface using D-Bus method calls.
145 */
146 DBusPresenceService presenceService;
Shawn McCarney81095022020-07-16 14:22:26 -0500147};
148
149} // namespace phosphor::power::regulators