| #pragma once |
| |
| #include "CLI/CLI.hpp" |
| #include "include/common_utility.hpp" |
| #include "include/power_rail/pmbus_lib.hpp" |
| |
| #include <nlohmann/json.hpp> |
| |
| #include <fstream> |
| #include <optional> |
| #include <string> |
| #include <vector> |
| |
| namespace max34451 |
| { |
| |
| constexpr uint8_t kVoutUvWarn = 0x20; // 00010000 |
| constexpr uint8_t kVoutUvFault = 0x10; // 00001000 |
| |
| constexpr std::string_view kBus = "Bus"; |
| constexpr std::string_view kAddress = "Address"; |
| constexpr std::string_view kSource = "Source"; |
| constexpr std::string_view kIncludeWarnings = "IncludeWarnings"; |
| constexpr std::string_view kRegisters = "Registers"; |
| constexpr std::string_view kFaultLogConfig = "FaultLogConfig"; |
| constexpr std::string_view kEnableBits = "EnableBits"; |
| constexpr std::string_view kCommand = "Command"; |
| constexpr std::string_view kOffset = "Offset"; |
| constexpr std::string_view kForceLog = "ForceLog"; |
| constexpr std::string_view kClearLog = "ClearLog"; |
| constexpr std::string_view kSequencerRegisters = "SequencerRegisters"; |
| constexpr std::string_view kPageToPowerRailMap = "PageToPowerRailMap"; |
| constexpr std::string_view kRailPriority = "RailPriority"; |
| |
| constexpr std::string_view kMfrChannelConfigReg = "MfrChannelConfigReg"; |
| constexpr std::string_view kMfrPsenConfigReg = "MfrPsenConfigReg"; |
| constexpr std::string_view kMfrPwmConfigReg = "MfrPwmConfigReg"; |
| constexpr std::string_view kMfrNvFaultLogReg = "MfrNvFaultLogReg"; |
| constexpr std::string_view kMfrNvLogConfigReg = "MfrNvLogConfigReg"; |
| constexpr std::string_view kStatusWordReg = "StatusWordReg"; |
| constexpr std::string_view kStatusCmlReg = "StatusCmlReg"; |
| constexpr std::string_view kStatusMfrSpecificReg = "StatusMfrSpecificReg"; |
| |
| constexpr std::string_view kStatusVout = "STATUS_VOUT"; |
| constexpr std::string_view kStatusIout = "STATUS_IOUT"; |
| constexpr std::string_view kStatusCml = "STATUS_CML"; |
| constexpr std::string_view kMfrChannelConfig = "MFR_CHANNEL_CONFIG"; |
| constexpr std::string_view kMfrPsenConfig = "MFR_PSEN_CONFIG"; |
| constexpr std::string_view kMfrPwmConfig = "MFR_PWM_CONFIG"; |
| |
| struct Max34451Logger |
| { |
| uint8_t bus{}; |
| uint8_t address{}; |
| std::string source; |
| bool includeWarnings = false; |
| uint8_t faultLogCommand{}; |
| uint8_t faultLogOffset{}; |
| uint8_t forceLogBit{}; |
| std::vector<uint8_t> clearLogBits; |
| |
| uint8_t mfrChannelConfigReg{}; |
| uint8_t mfrPsenConfigReg{}; |
| uint8_t mfrPwmConfigReg{}; |
| uint8_t mfrNvFaultLogReg{}; |
| uint8_t mfrNvLogConfigReg{}; |
| uint8_t statusWordReg{}; |
| uint8_t statusCmlReg{}; |
| uint8_t statusMfrSpecificReg{}; |
| |
| std::vector<json> sequencerRegisters; |
| std::vector<std::string> railPriority; |
| |
| void loadConfig(std::string_view configFilePath); |
| }; |
| |
| /** |
| * @brief Retrieves the Max34451 BB (burst buffer) data. |
| * |
| * @param logger The Max34451Logger object to retrieve the BB data from. |
| */ |
| std::vector<uint8_t> getMax34451BB(const Max34451Logger& logger); |
| |
| /** |
| * @brief Get the power rail fault logs. |
| * |
| * This function takes a Max34451Logger object and a vector of uint8_t as |
| * parameters and returns the power rail fault logs as a string. |
| * |
| * @param logger The Max34451Logger object to retrieve the power rail fault logs |
| * from. |
| * @param faultLog The vector of uint8_t to retrieve the power rail fault logs |
| * from. |
| * @param logFile The log file to write to. |
| * @return The power rail fault logs as a string. |
| */ |
| void max34451PowerRailParser(const Max34451Logger& logger, |
| const std::vector<uint8_t>& faultLog, |
| std::ostream& logFile); |
| |
| /** |
| * @brief Set the MFR channel configuration. |
| * |
| * @param logger The Max34451Logger object to set the MFR channel |
| * configuration in. |
| * @param value The value to set as the MFR channel configuration. |
| */ |
| void setMfrNvLogConfig(const Max34451Logger& logger, uint8_t enableBit); |
| |
| /** |
| * @brief Force the Max34451 to log. |
| * |
| * @param logger The Max34451Logger object to force the Max34451 to log. |
| */ |
| void forceMax34451Log(const Max34451Logger& logger); |
| |
| /** |
| * @brief Clear the Max34451 log. |
| * |
| * @param logger The Max34451Logger object to clear the Max34451 log. |
| */ |
| void clearMax34451BB(const Max34451Logger& logger); |
| |
| /** |
| * @brief Get the word at the specified indices and log it. |
| * |
| * @param logFile The log file to write to. |
| * @param data The vector of uint8_t to retrieve the word from. |
| * @param highIndex The index of the high byte. |
| * @param lowIndex The index of the low byte. |
| * @param label The label to write before the word. |
| * @return The word at the specified indices. |
| */ |
| uint16_t getWordAndLog(std::ostream& logFile, const std::vector<uint8_t>& data, |
| uint8_t highIndex, uint8_t lowIndex, |
| const std::string& label); |
| /** |
| * @brief Check if the power rail has a fault. |
| * |
| * @param data The data to check. |
| * @param includeWarnings True if warnings should be included, false otherwise. |
| * @return True if the power rail has a fault, false otherwise. |
| */ |
| inline bool checkPowerRailFault(const uint8_t data, const bool includeWarnings) |
| { |
| return includeWarnings |
| ? static_cast<int>(data & (kVoutUvWarn | kVoutUvFault)) != 0 |
| : static_cast<int>(data & kVoutUvFault) != 0; |
| } |
| } // namespace max34451 |