#include "occ_presence.hpp" #include "elog-errors.hpp" #include "occ_manager.hpp" #include #include #include #include #include #include #include #include namespace open_power { namespace occ { // Reads the occs_present file and analyzes the data void Presence::analyzeEvent() { using namespace phosphor::logging; using namespace sdbusplus::org::open_power::OCC::Device::Error; // Get the number of bytes to read int len = -1; auto r = ioctl(fd, FIONREAD, &len); if (r < 0) { elog( phosphor::logging::org::open_power::OCC::Device::ConfigFailure:: CALLOUT_ERRNO(errno), phosphor::logging::org::open_power::OCC::Device::ConfigFailure:: CALLOUT_DEVICE_PATH(file.c_str())); } auto data = readFile(len); if (data.empty()) { return; } // Let stoi determine the base auto occsPresent = std::stoi(data, nullptr, 0); if (manager.getNumOCCs() != occsPresent) { log(fmt::format("OCC presence mismatch - BMC: {}, OCC: {}", manager.getNumOCCs(), occsPresent) .c_str()); if (callBack) { callBack(occsPresent); } } } } // namespace occ } // namespace open_power