oem-ibm: Hex value support for the PCIe config space data
This commit sets the PCIE config space data sent from
host with a prefix '0x' and the hex value. This change
was needed as the Redfish validator [1] expects the fields
to be in a particular Regex form otherwise it fails to
validate.
Tested: Ran a Redfish Validator against the changes.
Result:
Before this change:
ERROR - VendorId: String '5348' does not match
pattern ''^0[xX](([a-fA-F]|[0-9]){2}){2}$''
ERROR - DeviceId: String '5719' does not match
pattern ''^0[xX](([a-fA-F]|[0-9]){2}){2}$''
.....
After this change : Successfully passed
[1] https://www.dmtf.org/sites/default/files/standards/documents/
DSP0268_2022.2.pdf
Change-Id: I2b1d34532e94b84b34577cb2d1d7f5b955633bf6
Signed-off-by: Pavithra Barithaya <pavithrabarithaya07@gmail.com>
diff --git a/oem/ibm/libpldmresponder/fru_oem_ibm.cpp b/oem/ibm/libpldmresponder/fru_oem_ibm.cpp
index 2ff9a5a..c9360df 100644
--- a/oem/ibm/libpldmresponder/fru_oem_ibm.cpp
+++ b/oem/ibm/libpldmresponder/fru_oem_ibm.cpp
@@ -3,6 +3,7 @@
#include <com/ibm/VPD/Manager/client.hpp>
#include <phosphor-logging/lg2.hpp>
+#include <format>
#include <ranges>
PHOSPHOR_LOG2_USING;
@@ -60,22 +61,24 @@
{
return PLDM_ERROR_INVALID_DATA;
}
- auto vendorId = std::to_string(htole16(pcieData->vendorId));
- auto deviceId = std::to_string(htole16(pcieData->deviceId));
- auto revisionId = std::to_string(pcieData->revisionId);
- std::stringstream ss;
+ auto vendorId = std::format("0x{:04x}",
+ htole16(pcieData->vendorId));
+ auto deviceId = std::format("0x{:04x}",
+ htole16(pcieData->deviceId));
+ auto revisionId = std::format("0x{:02x}",
+ htole16(pcieData->revisionId));
+ std::string classCode = "0x";
for (const auto& ele : pcieData->classCode)
{
- ss << std::setfill('0') << std::setw(2) << std::hex << ele;
+ classCode += std::format("{:02x}", ele);
}
- std::string classCode = ss.str();
- auto subSystemVendorId =
- std::to_string(htole16(pcieData->subSystemVendorId));
- auto subSystemId =
- std::to_string(htole16(pcieData->subSystemId));
+ auto subSystemVendorId = std::format(
+ "0x{:04x}", htole16(pcieData->subSystemVendorId));
+ auto subSystemId = std::format("0x{:04x}",
+ htole16(pcieData->subSystemId));
updateDBusProperty(fruRSI, entityAssociationMap, vendorId,
deviceId, revisionId, classCode,