/** * Copyright © 2021 IBM 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. */ #pragma once #include "error_history.hpp" #include namespace phosphor::power::regulators { /** * Redundant phase fault type. * * A voltage regulator is sometimes called a "phase controller" because it * controls one or more phases that perform the actual voltage regulation. * * A regulator may have redundant phases. If a redundant phase fails, the * regulator will continue to provide the desired output voltage. However, a * phase fault error should be logged warning the user that the regulator has * lost redundancy. */ enum class PhaseFaultType : unsigned char { /** * N phase fault type. * * Regulator has lost all redundant phases. The regulator is now at * redundancy level N. */ n, /** * N+1 phase fault type. * * An "N+2" regulator has lost one redundant phase. The regulator is now at * redundancy level "N+1". */ n_plus_1 }; /** * Returns the ErrorType that corresponds to the specified PhaseFaultType. * * The ErrorType enum is used with the ErrorHistory class. * * @param type phase fault type * @return error type */ inline ErrorType toErrorType(PhaseFaultType type) { ErrorType errorType{ErrorType::phaseFaultN}; switch (type) { case PhaseFaultType::n: errorType = ErrorType::phaseFaultN; break; case PhaseFaultType::n_plus_1: errorType = ErrorType::phaseFaultNPlus1; break; } return errorType; } /** * Returns the name of the specified PhaseFaultType. * * @param type phase fault type * @return phase fault type name */ inline std::string toString(PhaseFaultType type) { std::string name{}; switch (type) { case PhaseFaultType::n: name = "n"; break; case PhaseFaultType::n_plus_1: name = "n+1"; break; } return name; } } // namespace phosphor::power::regulators