blob: e27005f14503e5532b01de1fa3f68c0523357b0b [file] [log] [blame]
Deepak Kodihalli8457f822016-11-29 06:05:39 -06001## 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"
Deepak Kodihalli76794492017-02-16 23:48:18 -060012#include "types.hpp"
13#include "utils.hpp"
Deepak Kodihalli128512b2017-02-17 03:12:08 -060014#include "extra-properties-gen.hpp"
Deepak Kodihalli8457f822016-11-29 06:05:39 -060015
16namespace openpower
17{
18namespace vpd
19{
20namespace inventory
21{
22
Deepak Kodihalli8457f822016-11-29 06:05:39 -060023/** @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 */
30template<Fru F>
31void 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}
38template<>
39void writeFru<Fru::${key}>(const Store& vpdStore,
40 const std::string& path)
41{
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060042 ObjectMap objects;
43 InterfaceMap interfaces;
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060044 auto iter = extra::objects.find(path);
Deepak Kodihalli8457f822016-11-29 06:05:39 -060045
46 // Inventory manager needs object path, list of interface names to be
47 // implemented, and property:value pairs contained in said interfaces
48
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060049 % for interface, properties in fru.iteritems():
Deepak Kodihalli8457f822016-11-29 06:05:39 -060050<%
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060051 names = interface.split(".")
52 intfName = names[0] + names[-1]
Deepak Kodihalli8457f822016-11-29 06:05:39 -060053%>\
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060054 PropertyMap ${intfName}Props;
Deepak Kodihalli8457f822016-11-29 06:05:39 -060055 % for name, value in properties.iteritems():
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060056 % if fru and interface and name and value:
Deepak Kodihalli8457f822016-11-29 06:05:39 -060057<%
Deepak Kodihallidb12d762017-09-11 23:04:33 -050058 record, keyword = name.split(",")
Deepak Kodihalli8457f822016-11-29 06:05:39 -060059%>\
Deepak Kodihallidb12d762017-09-11 23:04:33 -050060 if (vpdStore.exists<Record::${record}, record::Keyword::${keyword}>())
61 {
62 ${intfName}Props["${value}"] =
63 vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
64 }
Deepak Kodihalli8457f822016-11-29 06:05:39 -060065 % endif
66 % endfor
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060067 // Check and update extra properties
68 if(extra::objects.end() != iter)
69 {
70 auto propIter = (iter->second).find("${interface}");
71 if((iter->second).end() != propIter)
72 {
73 for(const auto& map : propIter->second)
74 {
75 ${intfName}Props[map.first] = map.second;
76 }
77 }
78 }
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060079 interfaces.emplace("${interface}",
80 std::move(${intfName}Props));
Deepak Kodihalli8457f822016-11-29 06:05:39 -060081 % endfor
82
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060083 sdbusplus::message::object_path object(path);
Deepak Kodihalli128512b2017-02-17 03:12:08 -060084 // Check and update extra properties
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060085 if(extra::objects.end() != iter)
Deepak Kodihalli128512b2017-02-17 03:12:08 -060086 {
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060087 for(const auto& entry : iter->second)
Deepak Kodihalli128512b2017-02-17 03:12:08 -060088 {
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060089 if(interfaces.end() == interfaces.find(entry.first))
90 {
91 interfaces.emplace(entry.first, entry.second);
92 }
Deepak Kodihalli128512b2017-02-17 03:12:08 -060093 }
94 }
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060095 objects.emplace(std::move(object), std::move(interfaces));
96
97 callPIM(std::move(objects));
Deepak Kodihalli8457f822016-11-29 06:05:39 -060098}
99
100% endfor
101} // namespace inventory
102} // namespace vpd
103} // namespace openpower