1 ## This file is a template. The comment below is emitted 2 ## into the rendered file; feel free to edit this file. 3 // WARNING: Generated header. Do not edit! 4 5 6 #pragma once 7 8 #include <map> 9 #include <iostream> 10 #include "defines.hpp" 11 #include "store.hpp" 12 #include "types.hpp" 13 #include "utils.hpp" 14 #include "extra-properties-gen.hpp" 15 16 namespace openpower 17 { 18 namespace vpd 19 { 20 namespace inventory 21 { 22 23 /** @brief API to write parsed VPD to inventory, 24 * for a specifc FRU 25 * 26 * @param [in] vpdStore - Store object containing 27 * parsed VPD 28 * @param [in] path - FRU object path 29 */ 30 template<Fru F> 31 void writeFru(const Store& vpdStore, const std::string& path); 32 33 % for key in fruDict.iterkeys(): 34 <% 35 fru = fruDict[key] 36 %>\ 37 // Specialization of ${key} 38 template<> 39 void writeFru<Fru::${key}>(const Store& vpdStore, 40 const std::string& path) 41 { 42 ObjectMap objects; 43 InterfaceMap interfaces; 44 auto iter = extra::objects.find(path); 45 46 // Inventory manager needs object path, list of interface names to be 47 // implemented, and property:value pairs contained in said interfaces 48 49 % for interface, properties in fru.iteritems(): 50 <% 51 names = interface.split(".") 52 intfName = names[0] + names[-1] 53 %>\ 54 PropertyMap ${intfName}Props; 55 % for name, value in properties.iteritems(): 56 % if fru and interface and name and value: 57 <% 58 record, keyword = value.split(",") 59 %>\ 60 ${intfName}Props["${name}"] = 61 vpdStore.get<Record::${record}, record::Keyword::${keyword}>(); 62 % endif 63 % endfor 64 // Check and update extra properties 65 if(extra::objects.end() != iter) 66 { 67 auto propIter = (iter->second).find("${interface}"); 68 if((iter->second).end() != propIter) 69 { 70 for(const auto& map : propIter->second) 71 { 72 ${intfName}Props[map.first] = map.second; 73 } 74 } 75 } 76 interfaces.emplace("${interface}", 77 std::move(${intfName}Props)); 78 % endfor 79 80 sdbusplus::message::object_path object(path); 81 // Check and update extra properties 82 if(extra::objects.end() != iter) 83 { 84 for(const auto& entry : iter->second) 85 { 86 if(interfaces.end() == interfaces.find(entry.first)) 87 { 88 interfaces.emplace(entry.first, entry.second); 89 } 90 } 91 } 92 objects.emplace(std::move(object), std::move(interfaces)); 93 94 callPIM(std::move(objects)); 95 } 96 97 % endfor 98 } // namespace inventory 99 } // namespace vpd 100 } // namespace openpower 101