1 /* 2 // Copyright (c) 2019 Intel 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 <boost/asio.hpp> 18 #include <sdbusplus/asio/object_server.hpp> 19 #include <util.hpp> 20 21 /** 22 * @class ColdRedundancy 23 * 24 */ 25 class ColdRedundancy 26 { 27 public: 28 /** 29 * Constructor 30 * 31 * @param[in] io - boost asio context 32 * @param[in] objectServer - D-Bus object 33 * @param[in] dbusConnection - D-Bus connection 34 */ 35 ColdRedundancy( 36 boost::asio::io_service& io, 37 sdbusplus::asio::object_server& objectServer, 38 std::shared_ptr<sdbusplus::asio::connection>& dbusConnection); 39 40 /** 41 * Checking PSU information, adding matches, starting rotation 42 * and creating PSU objects 43 * 44 * @param[in] dbusConnection - D-Bus connection 45 */ 46 void 47 createPSU(std::shared_ptr<sdbusplus::asio::connection>& dbusConnection); 48 49 private: 50 /** 51 * @brief Indicates the count of PSUs 52 * 53 * @details Indicates how many PSUs are there on the system. 54 */ 55 uint8_t numberOfPSU = 0; 56 57 /** 58 * @brief Indicates the delay timer 59 * 60 * @details Each time this daemon start, need a delay to avoid 61 * different PSUs calling createPSU function for 62 * several times at same time 63 */ 64 boost::asio::steady_timer filterTimer; 65 66 /** 67 * @brief Indicates the dbus connction 68 */ 69 std::shared_ptr<sdbusplus::asio::connection>& systemBus; 70 71 /** 72 * @brief Indicates the D-Bus matches 73 * 74 * @details This matches contain all matches in this daemon such 75 * as PSU event match, PSU information match. The target 76 * D-Bus properties change will trigger callback function 77 * by these matches 78 */ 79 std::vector<std::unique_ptr<sdbusplus::bus::match_t>> matches; 80 }; 81 82 /** 83 * @class PowerSupply 84 * Represents a power supply device. 85 */ 86 class PowerSupply 87 { 88 public: 89 /** 90 * Constructor 91 * 92 * @param[in] name - the device name 93 * @param[in] bus - smbus number 94 * @param[in] address - device address on smbus 95 * @param[in] order - ranking order of redundancy 96 * @param[in] dbusConnection - D-Bus connection 97 */ 98 PowerSupply( 99 std::string& name, uint8_t bus, uint8_t address, uint8_t order, 100 const std::shared_ptr<sdbusplus::asio::connection>& dbusConnection); 101 ~PowerSupply() = default; 102 103 /** 104 * @brief Indicates the name of the device 105 * 106 * @details The PSU name such as PSU1 107 */ 108 std::string name; 109 110 /** 111 * @brief Indicates the smbus number 112 * 113 * @details The smbus number on the system 114 */ 115 uint8_t bus; 116 117 /** 118 * @brief Indicates the smbus address of the device 119 * 120 * @details The 7-bit smbus address of the PSU on smbus 121 */ 122 uint8_t address; 123 124 /** 125 * @brief Indicates the ranking order 126 * 127 * @details The order indicates the sequence entering standby mode. 128 * the PSU with lower order will enter standby mode first. 129 */ 130 uint8_t order = 0; 131 132 /** 133 * @brief Indicates the status of the PSU 134 * 135 * @details If the PSU has no any problem, the status of it will be 136 * normal otherwise acLost. 137 */ 138 CR::PSUState state = CR::PSUState::normal; 139 }; 140