132e84e98SVishwanatha Subbanna #include "occ_device.hpp" 294df8c90SGunnar Mills 3cbad219eSEddie James #include "occ_manager.hpp" 4482e31ffSEddie James #include "occ_status.hpp" 532e84e98SVishwanatha Subbanna 6*e2d0a43cSChris Cain #include <phosphor-logging/log.hpp> 7*e2d0a43cSChris Cain 8*e2d0a43cSChris Cain #include <filesystem> 994df8c90SGunnar Mills #include <iostream> 1094df8c90SGunnar Mills 1132e84e98SVishwanatha Subbanna namespace open_power 1232e84e98SVishwanatha Subbanna { 1332e84e98SVishwanatha Subbanna namespace occ 1432e84e98SVishwanatha Subbanna { 1532e84e98SVishwanatha Subbanna 16*e2d0a43cSChris Cain using namespace phosphor::logging; 17*e2d0a43cSChris Cain 1832e84e98SVishwanatha Subbanna fs::path Device::bindPath = fs::path(OCC_HWMON_PATH) / "bind"; 1932e84e98SVishwanatha Subbanna fs::path Device::unBindPath = fs::path(OCC_HWMON_PATH) / "unbind"; 2032e84e98SVishwanatha Subbanna 21774f9af9SEddie James std::string Device::getPathBack(const fs::path& path) 22774f9af9SEddie James { 23774f9af9SEddie James if (path.empty()) 24bcef3b48SGeorge Liu { 25774f9af9SEddie James return std::string(); 26bcef3b48SGeorge Liu } 27774f9af9SEddie James 28774f9af9SEddie James // Points to the last element in the path 29774f9af9SEddie James auto conf = --path.end(); 30774f9af9SEddie James 31bcef3b48SGeorge Liu if (conf->empty() && conf != path.begin()) 32774f9af9SEddie James { 33774f9af9SEddie James return *(--conf); 34774f9af9SEddie James } 35774f9af9SEddie James else 36774f9af9SEddie James { 37774f9af9SEddie James return *conf; 38774f9af9SEddie James } 39774f9af9SEddie James } 40774f9af9SEddie James 41636577f4SEdward A. James bool Device::master() const 42636577f4SEdward A. James { 43636577f4SEdward A. James int master; 44774f9af9SEddie James auto masterFile = devPath / "occ_master"; 45636577f4SEdward A. James std::ifstream file(masterFile, std::ios::in); 46636577f4SEdward A. James 47636577f4SEdward A. James if (!file) 48636577f4SEdward A. James { 49636577f4SEdward A. James return false; 50636577f4SEdward A. James } 51636577f4SEdward A. James 52636577f4SEdward A. James file >> master; 53636577f4SEdward A. James file.close(); 54636577f4SEdward A. James return (master != 0); 55636577f4SEdward A. James } 56636577f4SEdward A. James 57cbad219eSEddie James void Device::errorCallback(bool error) 58cbad219eSEddie James { 59cbad219eSEddie James if (error) 60cbad219eSEddie James { 61cbad219eSEddie James statusObject.deviceError(); 62cbad219eSEddie James } 63cbad219eSEddie James } 64cbad219eSEddie James 65cbad219eSEddie James #ifdef PLDM 66cbad219eSEddie James void Device::timeoutCallback(bool error) 67cbad219eSEddie James { 68cbad219eSEddie James if (error) 69cbad219eSEddie James { 70cbad219eSEddie James managerObject.sbeTimeout(instance); 71cbad219eSEddie James } 72cbad219eSEddie James } 73cbad219eSEddie James #endif 74cbad219eSEddie James 75482e31ffSEddie James void Device::throttleProcTempCallback(bool error) 76482e31ffSEddie James { 77482e31ffSEddie James statusObject.throttleProcTemp(error); 78482e31ffSEddie James } 79482e31ffSEddie James 80482e31ffSEddie James void Device::throttleProcPowerCallback(bool error) 81482e31ffSEddie James { 82482e31ffSEddie James statusObject.throttleProcPower(error); 83482e31ffSEddie James } 84482e31ffSEddie James 85482e31ffSEddie James void Device::throttleMemTempCallback(bool error) 86482e31ffSEddie James { 87482e31ffSEddie James statusObject.throttleMemTemp(error); 88482e31ffSEddie James } 89482e31ffSEddie James 90*e2d0a43cSChris Cain fs::path Device::getFilenameByRegex(fs::path basePath, 91*e2d0a43cSChris Cain const std::regex& expr) const 92*e2d0a43cSChris Cain { 93*e2d0a43cSChris Cain try 94*e2d0a43cSChris Cain { 95*e2d0a43cSChris Cain for (auto& file : fs::directory_iterator(basePath)) 96*e2d0a43cSChris Cain { 97*e2d0a43cSChris Cain if (std::regex_search(file.path().string(), expr)) 98*e2d0a43cSChris Cain { 99*e2d0a43cSChris Cain // Found match 100*e2d0a43cSChris Cain return file; 101*e2d0a43cSChris Cain } 102*e2d0a43cSChris Cain } 103*e2d0a43cSChris Cain } 104*e2d0a43cSChris Cain catch (const fs::filesystem_error& e) 105*e2d0a43cSChris Cain { 106*e2d0a43cSChris Cain log<level::ERR>( 107*e2d0a43cSChris Cain fmt::format("getFilenameByRegex: Failed to get filename: {}", 108*e2d0a43cSChris Cain e.what()) 109*e2d0a43cSChris Cain .c_str()); 110*e2d0a43cSChris Cain } 111*e2d0a43cSChris Cain 112*e2d0a43cSChris Cain // Return empty path 113*e2d0a43cSChris Cain return fs::path{}; 114*e2d0a43cSChris Cain } 115*e2d0a43cSChris Cain 11632e84e98SVishwanatha Subbanna } // namespace occ 11732e84e98SVishwanatha Subbanna } // namespace open_power 118