pldm: Move the updateDbusProperty method to the common utils
The updateDbusProperty method defined in libpldmresponder/bios_parse.cpp
and need to moved pldm/utils.hpp.
Add the updateDbusProperty method to Mock test class and remove the
setDbusProperty method in Mock test class.
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: Ib1c339af41df7f625d6976c192a3b72ce06b04a2
diff --git a/libpldmresponder/bios.cpp b/libpldmresponder/bios.cpp
index a246bb7..f9f3a55 100644
--- a/libpldmresponder/bios.cpp
+++ b/libpldmresponder/bios.cpp
@@ -21,6 +21,7 @@
namespace fs = std::filesystem;
using namespace pldm::responder::bios;
using namespace bios_parser;
+using namespace pldm::utils;
constexpr auto stringTableFile = "stringTable";
constexpr auto attrTableFile = "attributeTable";
@@ -208,11 +209,12 @@
uint64_t timeUsec = std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::seconds(timeSec))
.count();
- std::variant<uint64_t> value{timeUsec};
+ PropertyValue value{timeUsec};
try
{
- pldm::utils::DBusHandler().setDbusProperty(setTimePath, timeSetPro,
- setTimeInterface, value);
+ DBusMapping dbusMapping{setTimePath, setTimeInterface, timeSetPro,
+ "uint64_t"};
+ pldm::utils::DBusHandler().setDbusProperty(dbusMapping, value);
}
catch (std::exception& e)
{
diff --git a/libpldmresponder/bios_parser.cpp b/libpldmresponder/bios_parser.cpp
index 2dc2e57..0b74059 100644
--- a/libpldmresponder/bios_parser.cpp
+++ b/libpldmresponder/bios_parser.cpp
@@ -17,6 +17,7 @@
namespace bios_parser
{
+using namespace pldm::utils;
using Json = nlohmann::json;
namespace fs = std::filesystem;
using namespace pldm::responder::bios;
@@ -24,21 +25,11 @@
const std::vector<Json> emptyJsonList{};
const Json emptyJson{};
-struct DBusMapping
-{
- std::string objectPath; //!< D-Bus object path
- std::string interface; //!< D-Bus interface
- std::string propertyName; //!< D-Bus property name
- std::string propertyType; //!< D-Bus property type
-};
-
using AttrType = uint8_t;
using Table = std::vector<uint8_t>;
using BIOSJsonName = std::string;
using AttrLookup = std::map<AttrName, std::optional<DBusMapping>>;
-using PropertyValue =
- std::variant<bool, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t,
- uint64_t, double, std::string>;
+
const std::set<std::string> SupportedDbusPropertyTypes = {
"bool", "uint8_t", "int16_t", "uint16_t", "int32_t",
"uint32_t", "int64_t", "uint64_t", "double", "string"};
@@ -173,66 +164,6 @@
return valueMap;
}
-
-void updateDbusProperty(const DBusMapping& dBusMap, const PropertyValue& value)
-{
- auto setDbusProperty = [&dBusMap](const auto& variant) {
- pldm::utils::DBusHandler().setDbusProperty(
- dBusMap.objectPath.c_str(), dBusMap.propertyName.c_str(),
- dBusMap.interface.c_str(), variant);
- };
-
- if (dBusMap.propertyType == "uint8_t")
- {
- std::variant<uint8_t> v = std::get<uint8_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "int16_t")
- {
- std::variant<int16_t> v = std::get<int16_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "uint16_t")
- {
- std::variant<uint16_t> v = std::get<uint16_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "int32_t")
- {
- std::variant<int32_t> v = std::get<int32_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "uint32_t")
- {
- std::variant<uint32_t> v = std::get<uint32_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "int64_t")
- {
- std::variant<int64_t> v = std::get<int64_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "uint64_t")
- {
- std::variant<uint64_t> v = std::get<uint64_t>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "double")
- {
- std::variant<double> v = std::get<double>(value);
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "string")
- {
- std::variant<std::string> v = std::get<std::string>(value);
- setDbusProperty(v);
- }
- else
- {
- assert(false && "UnSpported Dbus Type");
- }
-}
-
} // namespace internal
int setupBIOSStrings(const Json& entry, Strings& strings)
@@ -352,7 +283,7 @@
return PLDM_ERROR;
}
- internal::updateDbusProperty(dBusMap.value(), it->first);
+ pldm::utils::DBusHandler().setDbusProperty(dBusMap.value(), it->first);
return PLDM_SUCCESS;
}
@@ -503,12 +434,9 @@
std::vector<uint8_t> data(currentString.ptr,
currentString.ptr + currentString.length);
- std::variant<std::string> value =
+ PropertyValue value =
stringToUtf8(static_cast<BIOSStringEncoding>(stringType), data);
-
- pldm::utils::DBusHandler().setDbusProperty(
- dBusMap->objectPath.c_str(), dBusMap->propertyName.c_str(),
- dBusMap->interface.c_str(), value);
+ pldm::utils::DBusHandler().setDbusProperty(dBusMap.value(), value);
return PLDM_SUCCESS;
}
@@ -556,55 +484,6 @@
return 0;
}
-void updateDbusProperty(const DBusMapping& dBusMap, uint64_t value)
-{
- auto setDbusProperty = [&dBusMap](const auto& variant) {
- pldm::utils::DBusHandler().setDbusProperty(
- dBusMap.objectPath.c_str(), dBusMap.propertyName.c_str(),
- dBusMap.interface.c_str(), variant);
- };
-
- if (dBusMap.propertyType == "uint8_t")
- {
- std::variant<uint8_t> v = value;
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "int16_t")
- {
- std::variant<int16_t> v = value;
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "uint16_t")
- {
- std::variant<uint16_t> v = value;
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "int32_t")
- {
- std::variant<int32_t> v = value;
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "uint32_t")
- {
- std::variant<uint32_t> v = value;
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "int64_t")
- {
- std::variant<int64_t> v = value;
- setDbusProperty(v);
- }
- else if (dBusMap.propertyType == "uint64_t")
- {
- std::variant<uint64_t> v = value;
- setDbusProperty(v);
- }
- else
- {
- assert(false && "Unsupported Dbus Type");
- }
-}
-
const AttrValuesMap& getValues()
{
return valueMap;
@@ -639,7 +518,8 @@
uint64_t currentValue =
pldm_bios_table_attr_value_entry_integer_decode_cv(attrValueEntry);
- updateDbusProperty(dBusMap.value(), currentValue);
+ PropertyValue value = static_cast<uint64_t>(currentValue);
+ pldm::utils::DBusHandler().setDbusProperty(dBusMap.value(), value);
return PLDM_SUCCESS;
}
diff --git a/libpldmresponder/platform.hpp b/libpldmresponder/platform.hpp
index 8bcc596..8c9e45c 100644
--- a/libpldmresponder/platform.hpp
+++ b/libpldmresponder/platform.hpp
@@ -102,6 +102,7 @@
const std::vector<set_effecter_state_field>& stateField)
{
using namespace pldm::responder::pdr;
+ using namespace pldm::utils;
using namespace std::string_literals;
using DBusProperty = std::variant<std::string, bool>;
using StateSetId = uint16_t;
@@ -181,23 +182,23 @@
<< "\n";
return PLDM_ERROR_INVALID_DATA;
}
- auto dbusProp = "OperatingSystemState";
- std::variant<std::string> value{
- std::get<std::string>(iter->second)};
- auto dbusInterface =
- "xyz.openbmc_project.State.OperatingSystem.Status";
+ PropertyValue value{std::get<std::string>(iter->second)};
+ DBusMapping dbusMapping{
+ objPath,
+ "xyz.openbmc_project.State.OperatingSystem.Status",
+ "OperatingSystemState", "string"};
try
{
- dBusIntf.setDbusProperty(objPath.c_str(), dbusProp,
- dbusInterface, value);
+ dBusIntf.setDbusProperty(dbusMapping, value);
}
catch (const std::exception& e)
{
std::cerr
<< "Error setting property, ERROR=" << e.what()
- << " PROPERTY=" << dbusProp
- << " INTERFACE=" << dbusInterface
- << " PATH=" << objPath.c_str() << "\n";
+ << " PROPERTY=" << dbusMapping.propertyName
+ << " INTERFACE="
+ << dbusMapping.interface << " PATH="
+ << dbusMapping.objectPath << "\n";
return PLDM_ERROR;
}
return PLDM_SUCCESS;
@@ -226,22 +227,22 @@
<< "\n";
return PLDM_ERROR_INVALID_DATA;
}
- auto dbusProp = "RequestedPowerTransition";
- std::variant<std::string> value{
- std::get<std::string>(iter->second)};
- auto dbusInterface = "xyz.openbmc_project.State.Chassis";
+ PropertyValue value{std::get<std::string>(iter->second)};
+ DBusMapping dbusMapping{
+ objPath, "xyz.openbmc_project.State.Chassis",
+ "RequestedPowerTransition", "string"};
try
{
- dBusIntf.setDbusProperty(objPath.c_str(), dbusProp,
- dbusInterface, value);
+ dBusIntf.setDbusProperty(dbusMapping, value);
}
catch (const std::exception& e)
{
std::cerr
<< "Error setting property, ERROR=" << e.what()
- << " PROPERTY=" << dbusProp
- << " INTERFACE=" << dbusInterface
- << " PATH=" << objPath.c_str() << "\n";
+ << " PROPERTY=" << dbusMapping.propertyName
+ << " INTERFACE="
+ << dbusMapping.interface << " PATH="
+ << dbusMapping.objectPath << "\n";
return PLDM_ERROR;
}
return PLDM_SUCCESS;