/* // Copyright (c) 2019 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #include #include #include /** * @class ColdRedundancy * */ class ColdRedundancy { public: /** * Constructor * * @param[in] io - boost asio context * @param[in] objectServer - D-Bus object * @param[in] dbusConnection - D-Bus connection */ ColdRedundancy( boost::asio::io_service& io, sdbusplus::asio::object_server& objectServer, std::shared_ptr& dbusConnection); /** * Checking PSU information, adding matches, starting rotation * and creating PSU objects * * @param[in] dbusConnection - D-Bus connection */ void createPSU(std::shared_ptr& dbusConnection); private: /** * @brief Indicates the count of PSUs * * @details Indicates how many PSUs are there on the system. */ uint8_t numberOfPSU = 0; /** * @brief Indicates the delay timer * * @details Each time this daemon start, need a delay to avoid * different PSUs calling createPSU function for * several times at same time */ boost::asio::steady_timer filterTimer; /** * @brief Indicates the dbus connction */ std::shared_ptr& systemBus; /** * @brief Indicates the D-Bus matches * * @details This matches contain all matches in this daemon such * as PSU event match, PSU information match. The target * D-Bus properties change will trigger callback function * by these matches */ std::vector> matches; }; /** * @class PowerSupply * Represents a power supply device. */ class PowerSupply { public: /** * Constructor * * @param[in] name - the device name * @param[in] bus - smbus number * @param[in] address - device address on smbus * @param[in] order - ranking order of redundancy * @param[in] dbusConnection - D-Bus connection */ PowerSupply( std::string& name, uint8_t bus, uint8_t address, uint8_t order, const std::shared_ptr& dbusConnection); ~PowerSupply() = default; /** * @brief Indicates the name of the device * * @details The PSU name such as PSU1 */ std::string name; /** * @brief Indicates the smbus number * * @details The smbus number on the system */ uint8_t bus; /** * @brief Indicates the smbus address of the device * * @details The 7-bit smbus address of the PSU on smbus */ uint8_t address; /** * @brief Indicates the ranking order * * @details The order indicates the sequence entering standby mode. * the PSU with lower order will enter standby mode first. */ uint8_t order = 0; /** * @brief Indicates the status of the PSU * * @details If the PSU has no any problem, the status of it will be * normal otherwise acLost. */ CR::PSUState state = CR::PSUState::normal; };