18457f821SDeepak Kodihalli ## This file is a template.  The comment below is emitted
28457f821SDeepak Kodihalli ## into the rendered file; feel free to edit this file.
38457f821SDeepak Kodihalli // WARNING: Generated header. Do not edit!
48457f821SDeepak Kodihalli 
58457f821SDeepak Kodihalli 
68457f821SDeepak Kodihalli #pragma once
78457f821SDeepak Kodihalli 
88457f821SDeepak Kodihalli #include <map>
98457f821SDeepak Kodihalli #include <iostream>
108457f821SDeepak Kodihalli #include "defines.hpp"
118457f821SDeepak Kodihalli #include "store.hpp"
1276794495SDeepak Kodihalli #include "types.hpp"
13*6c71c9dcSSunny Srivastava #include "common_utility.hpp"
14128512b2SDeepak Kodihalli #include "extra-properties-gen.hpp"
158457f821SDeepak Kodihalli 
168457f821SDeepak Kodihalli namespace openpower
178457f821SDeepak Kodihalli {
188457f821SDeepak Kodihalli namespace vpd
198457f821SDeepak Kodihalli {
208457f821SDeepak Kodihalli namespace inventory
218457f821SDeepak Kodihalli {
22*6c71c9dcSSunny Srivastava using namespace openpower::vpd::common::utility;
238457f821SDeepak Kodihalli 
248457f821SDeepak Kodihalli /** @brief API to write parsed VPD to inventory,
25b29fb688SGunnar Mills  *      for a specific FRU
268457f821SDeepak Kodihalli  *
278457f821SDeepak Kodihalli  *  @param [in] vpdStore - Store object containing
288457f821SDeepak Kodihalli  *      parsed VPD
298457f821SDeepak Kodihalli  *  @param [in] path - FRU object path
308457f821SDeepak Kodihalli  */
318457f821SDeepak Kodihalli template<Fru F>
writeFru(const Store &,const std::string &)32640004f1SAlexander Filippov void writeFru(const Store& /*vpdStore*/, const std::string& /*path*/) {
33675ee7e4SArtem Senichev     throw std::runtime_error("Not implemented");
34675ee7e4SArtem Senichev }
358457f821SDeepak Kodihalli 
363d7b4fe1SSantosh Puranik % for key in fruDict.keys():
378457f821SDeepak Kodihalli <%
388457f821SDeepak Kodihalli     fru = fruDict[key]
398457f821SDeepak Kodihalli %>\
408457f821SDeepak Kodihalli // Specialization of ${key}
418457f821SDeepak Kodihalli template<>
428457f821SDeepak Kodihalli void writeFru<Fru::${key}>(const Store& vpdStore,
438457f821SDeepak Kodihalli                            const std::string& path)
448457f821SDeepak Kodihalli {
454cf89a10SDeepak Kodihalli     ObjectMap objects;
464cf89a10SDeepak Kodihalli     InterfaceMap interfaces;
470cc20121SDeepak Kodihalli     auto iter = extra::objects.find(path);
488457f821SDeepak Kodihalli 
498457f821SDeepak Kodihalli     // Inventory manager needs object path, list of interface names to be
508457f821SDeepak Kodihalli     // implemented, and property:value pairs contained in said interfaces
518457f821SDeepak Kodihalli 
523d7b4fe1SSantosh Puranik     % for interface, properties in fru.items():
538457f821SDeepak Kodihalli <%
544cf89a10SDeepak Kodihalli         names = interface.split(".")
554cf89a10SDeepak Kodihalli         intfName = names[0] + names[-1]
568457f821SDeepak Kodihalli %>\
574cf89a10SDeepak Kodihalli     PropertyMap ${intfName}Props;
58c74ca6c9SMarri Devender Rao         % if properties:
593d7b4fe1SSantosh Puranik             % for name, value in properties.items():
604cf89a10SDeepak Kodihalli                 % if fru and interface and name and value:
618457f821SDeepak Kodihalli <%
62db12d763SDeepak Kodihalli                 record, keyword = name.split(",")
638457f821SDeepak Kodihalli %>\
64db12d763SDeepak Kodihalli     if (vpdStore.exists<Record::${record}, record::Keyword::${keyword}>())
65db12d763SDeepak Kodihalli     {
66db12d763SDeepak Kodihalli         ${intfName}Props["${value}"] =
678457f821SDeepak Kodihalli             vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
68db12d763SDeepak Kodihalli     }
698457f821SDeepak Kodihalli                 % endif
708457f821SDeepak Kodihalli             % endfor
71c74ca6c9SMarri Devender Rao         % endif
720cc20121SDeepak Kodihalli     // Check and update extra properties
730cc20121SDeepak Kodihalli     if(extra::objects.end() != iter)
740cc20121SDeepak Kodihalli     {
750cc20121SDeepak Kodihalli         auto propIter = (iter->second).find("${interface}");
760cc20121SDeepak Kodihalli         if((iter->second).end() != propIter)
770cc20121SDeepak Kodihalli         {
780cc20121SDeepak Kodihalli             for(const auto& map : propIter->second)
790cc20121SDeepak Kodihalli             {
800cc20121SDeepak Kodihalli                 ${intfName}Props[map.first] = map.second;
810cc20121SDeepak Kodihalli             }
820cc20121SDeepak Kodihalli         }
830cc20121SDeepak Kodihalli     }
844cf89a10SDeepak Kodihalli     interfaces.emplace("${interface}",
854cf89a10SDeepak Kodihalli                        std::move(${intfName}Props));
868457f821SDeepak Kodihalli     % endfor
878457f821SDeepak Kodihalli 
884cf89a10SDeepak Kodihalli     sdbusplus::message::object_path object(path);
89128512b2SDeepak Kodihalli     // Check and update extra properties
900cc20121SDeepak Kodihalli     if(extra::objects.end() != iter)
91128512b2SDeepak Kodihalli     {
920cc20121SDeepak Kodihalli         for(const auto& entry : iter->second)
930cc20121SDeepak Kodihalli         {
940cc20121SDeepak Kodihalli             if(interfaces.end() == interfaces.find(entry.first))
95128512b2SDeepak Kodihalli             {
96128512b2SDeepak Kodihalli                 interfaces.emplace(entry.first, entry.second);
97128512b2SDeepak Kodihalli             }
98128512b2SDeepak Kodihalli         }
990cc20121SDeepak Kodihalli     }
1004cf89a10SDeepak Kodihalli     objects.emplace(std::move(object), std::move(interfaces));
1014cf89a10SDeepak Kodihalli 
1024cf89a10SDeepak Kodihalli     callPIM(std::move(objects));
1038457f821SDeepak Kodihalli }
1048457f821SDeepak Kodihalli 
1058457f821SDeepak Kodihalli % endfor
1068457f821SDeepak Kodihalli } // namespace inventory
1078457f821SDeepak Kodihalli } // namespace vpd
1088457f821SDeepak Kodihalli } // namespace openpower
109