/* // Copyright (c) 2018 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 "system.hpp" #include "mdrv2.hpp" #include #include #include #include namespace phosphor { namespace smbios { std::string System::uuid(std::string value) { uint8_t* dataIn = storage; dataIn = getSMBIOSTypePtr(dataIn, systemType); if (dataIn != nullptr) { auto systemInfo = reinterpret_cast(dataIn); std::stringstream stream; stream << std::setfill('0') << std::hex; stream << std::setw(8) << systemInfo->uuid.timeLow; stream << "-"; stream << std::setw(4) << systemInfo->uuid.timeMid; stream << "-"; stream << std::setw(4) << systemInfo->uuid.timeHiAndVer; stream << "-"; stream << std::setw(2) << static_cast(systemInfo->uuid.clockSeqHi); stream << std::setw(2) << static_cast(systemInfo->uuid.clockSeqLow); stream << "-"; static_assert(sizeof(systemInfo->uuid.node) == 6); stream << std::setw(2) << static_cast(systemInfo->uuid.node[0]); stream << std::setw(2) << static_cast(systemInfo->uuid.node[1]); stream << std::setw(2) << static_cast(systemInfo->uuid.node[2]); stream << std::setw(2) << static_cast(systemInfo->uuid.node[3]); stream << std::setw(2) << static_cast(systemInfo->uuid.node[4]); stream << std::setw(2) << static_cast(systemInfo->uuid.node[5]); return sdbusplus::xyz::openbmc_project::Common::server::UUID::uuid( stream.str()); } return sdbusplus::xyz::openbmc_project::Common::server::UUID::uuid( "00000000-0000-0000-0000-000000000000"); } std::string System::version(std::string value) { std::string result = "No BIOS Version"; uint8_t* dataIn = storage; dataIn = getSMBIOSTypePtr(dataIn, biosType); if (dataIn != nullptr) { auto biosInfo = reinterpret_cast(dataIn); uint8_t biosVerByte = biosInfo->biosVersion; std::string tempS = positionToString(biosInfo->biosVersion, biosInfo->length, dataIn); if (std::find_if(tempS.begin(), tempS.end(), [](char ch) { return !isprint(ch); }) != tempS.end()) { std::ofstream smbiosFile(mdrType2File, std::ios_base::trunc); if (!smbiosFile.good()) { phosphor::logging::log( "Open MDRV2 table file failure"); return result; } smbiosFile.clear(); smbiosFile.close(); phosphor::logging::log( "Find non-print char, delete the broken MDRV2 table file!"); return sdbusplus::xyz::openbmc_project::Inventory::Decorator:: server::Revision::version(result); } result = tempS; } return sdbusplus::xyz::openbmc_project::Inventory::Decorator::server:: Revision::version(result); } } // namespace smbios } // namespace phosphor