blob: 891273842ee8a6677cd922af6f7d69753fddeee6 [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 Kodihalli8457f822016-11-29 06:05:39 -060044
45 // Inventory manager needs object path, list of interface names to be
46 // implemented, and property:value pairs contained in said interfaces
47
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060048 % for interface, properties in fru.iteritems():
Deepak Kodihalli8457f822016-11-29 06:05:39 -060049<%
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060050 names = interface.split(".")
51 intfName = names[0] + names[-1]
Deepak Kodihalli8457f822016-11-29 06:05:39 -060052%>\
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060053 PropertyMap ${intfName}Props;
Deepak Kodihalli8457f822016-11-29 06:05:39 -060054 % for name, value in properties.iteritems():
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060055 % if fru and interface and name and value:
Deepak Kodihalli8457f822016-11-29 06:05:39 -060056<%
57 record, keyword = value.split(",")
58%>\
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060059 ${intfName}Props["${name}"] =
Deepak Kodihalli8457f822016-11-29 06:05:39 -060060 vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
61 % endif
62 % endfor
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060063 interfaces.emplace("${interface}",
64 std::move(${intfName}Props));
Deepak Kodihalli8457f822016-11-29 06:05:39 -060065 % endfor
66
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060067 sdbusplus::message::object_path object(path);
Deepak Kodihalli128512b2017-02-17 03:12:08 -060068 // Check and update extra properties
69 if(extra::objects.end() != extra::objects.find(path))
70 {
71 for(const auto& entry : extra::objects.at(path))
72 {
73 interfaces.emplace(entry.first, entry.second);
74 }
75 }
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060076 objects.emplace(std::move(object), std::move(interfaces));
77
78 callPIM(std::move(objects));
Deepak Kodihalli8457f822016-11-29 06:05:39 -060079}
80
81% endfor
82} // namespace inventory
83} // namespace vpd
84} // namespace openpower