blob: df73d1aa504e1d59750e103552ffc3bfaf81c851 [file] [log] [blame]
Shawn McCarneydb0b8332020-04-06 14:13:04 -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
17#include "device.hpp"
18
Shawn McCarneyeb7bec42020-04-14 09:38:15 -050019#include "chassis.hpp"
Shawn McCarneyb4d18a42020-06-02 10:27:05 -050020#include "exception_utils.hpp"
21#include "journal.hpp"
Shawn McCarneyeb7bec42020-04-14 09:38:15 -050022#include "system.hpp"
23
Shawn McCarneyb4d18a42020-06-02 10:27:05 -050024#include <exception>
25
Shawn McCarneydb0b8332020-04-06 14:13:04 -050026namespace phosphor::power::regulators
27{
28
29void Device::addToIDMap(IDMap& idMap)
30{
31 // Add this device to the map
32 idMap.addDevice(*this);
33
34 // Add rails to the map
35 for (std::unique_ptr<Rail>& rail : rails)
36 {
37 idMap.addRail(*rail);
38 }
39}
40
Shawn McCarneyb4d18a42020-06-02 10:27:05 -050041void Device::close()
42{
43 try
44 {
45 // Close I2C interface if it is open
46 if (i2cInterface->isOpen())
47 {
48 i2cInterface->close();
49 }
50 }
51 catch (const std::exception& e)
52 {
53 // Log error messages in journal
54 exception_utils::log(e);
55 journal::logErr("Unable to close device " + id);
56
57 // TODO: Create error log entry
58 }
59}
60
Bob King23243f82020-07-29 10:38:57 +080061void Device::configure(Services& services, System& system, Chassis& chassis)
Shawn McCarneyeb7bec42020-04-14 09:38:15 -050062{
63 // If configuration changes are defined for this device, apply them
64 if (configuration)
65 {
Bob King23243f82020-07-29 10:38:57 +080066 configuration->execute(services, system, chassis, *this);
Shawn McCarneyeb7bec42020-04-14 09:38:15 -050067 }
68
69 // Configure rails
70 for (std::unique_ptr<Rail>& rail : rails)
71 {
Bob King23243f82020-07-29 10:38:57 +080072 rail->configure(services, system, chassis, *this);
Shawn McCarneyeb7bec42020-04-14 09:38:15 -050073 }
74}
75
Bob King8a552922020-08-05 17:02:31 +080076void Device::monitorSensors(Services& services, System& system,
77 Chassis& chassis)
Bob King8e1cd0b2020-07-08 13:30:27 +080078{
79
80 // Monitor sensors in each rail
81 for (std::unique_ptr<Rail>& rail : rails)
82 {
Bob King8a552922020-08-05 17:02:31 +080083 rail->monitorSensors(services, system, chassis, *this);
Bob King8e1cd0b2020-07-08 13:30:27 +080084 }
85}
86
Shawn McCarneydb0b8332020-04-06 14:13:04 -050087} // namespace phosphor::power::regulators