diff options
-rw-r--r-- | frup.hpp | 11 | ||||
-rw-r--r-- | scripts/writefru.mako.cpp | 13 | ||||
-rw-r--r-- | writefrudata.cpp | 34 |
3 files changed, 22 insertions, 36 deletions
@@ -75,12 +75,15 @@ enum openbmc_vpd_key_id using IPMIFruInfo = std::array<std::pair<std::string,std::string>, OPENBMC_VPD_KEY_MAX>; -using IPMIFruMetadata = std::string; -using IPMIFruMetadataValue = std::string; -using IPMIFruMap = std::map<IPMIFruMetadata,IPMIFruMetadataValue>; +struct IPMIFruData +{ + std::string section; + std::string property; + std::string delimiter; +}; using DbusProperty = std::string; -using DbusPropertyMap = std::map<DbusProperty,IPMIFruMap>; +using DbusPropertyMap = std::map<DbusProperty,IPMIFruData>; using DbusInterface = std::string; using DbusInterfaceMap = std::map<DbusInterface,DbusPropertyMap>; diff --git a/scripts/writefru.mako.cpp b/scripts/writefru.mako.cpp index 6180e13..82941a4 100644 --- a/scripts/writefru.mako.cpp +++ b/scripts/writefru.mako.cpp @@ -14,9 +14,16 @@ extern const FruMap frus = { {"${interface}",{ % for dbus_property,property_value in properties.items(): {"${dbus_property}",{ - % for name,value in property_value.items(): - {"${name}","${value}"}, - % endfor + "${property_value.get("IPMIFruSection", "")}", + "${property_value.get("IPMIFruProperty", "")}", \ +<% + delimiter = property_value.get("IPMIFruValueDelimiter") + if not delimiter: + delimiter = "" + else: + delimiter = '\\' + hex(delimiter)[1:] +%> + "${delimiter}" }}, % endfor }}, diff --git a/writefrudata.cpp b/writefrudata.cpp index 27ea6e2..97282ea 100644 --- a/writefrudata.cpp +++ b/writefrudata.cpp @@ -360,37 +360,13 @@ int ipmi_update_inventory(fru_area_vec_t& area_vec, sd_bus* bus_sd) PropertyMap props;//store all the properties for (auto& properties : interfaceList.second) { - std::string section, property, delimiter, value; - for (auto& info : properties.second) - { - if (info.first == "IPMIFruSection") - { - section = std::move(info.second); - } - if (info.first == "IPMIFruProperty") - { - property = std::move(info.second); - } - if (info.first == "IPMIFruValueDelimiter") - { - //Read the delimeter as ascii value - //convert it into char - if( info.second.length() > 0 ) - { - char dlm = ' '; - rc = sscanf(info.second.c_str(),"%hhd",&dlm); - if (rc > 0) - { - delimiter = std::string(1,dlm); - } - } - } - - } + std::string value; + decltype(auto) pdata = properties.second; - if (!section.empty() && !property.empty()) + if (!pdata.section.empty() && !pdata.property.empty()) { - value = getFRUValue(section, property, delimiter, fruData); + value = getFRUValue(pdata.section, pdata.property, + pdata.delimiter, fruData); } props.emplace(std::move(properties.first), std::move(value)); } |