blob: b2890ea7323daade295156b5cad23e7a16372238 [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,
Gunnar Millsb29fb682017-10-25 16:23:31 -050024 * for a specific FRU
Deepak Kodihalli8457f822016-11-29 06:05:39 -060025 *
26 * @param [in] vpdStore - Store object containing
27 * parsed VPD
28 * @param [in] path - FRU object path
29 */
30template<Fru F>
Artem Senichev675ee7e2020-02-19 18:19:51 +030031void writeFru(const Store& vpdStore, const std::string& path) {
32 throw std::runtime_error("Not implemented");
33}
Deepak Kodihalli8457f822016-11-29 06:05:39 -060034
Santosh Puranik3d7b4fe2020-04-02 23:27:22 +053035% for key in fruDict.keys():
Deepak Kodihalli8457f822016-11-29 06:05:39 -060036<%
37 fru = fruDict[key]
38%>\
39// Specialization of ${key}
40template<>
41void writeFru<Fru::${key}>(const Store& vpdStore,
42 const std::string& path)
43{
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060044 ObjectMap objects;
45 InterfaceMap interfaces;
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060046 auto iter = extra::objects.find(path);
Deepak Kodihalli8457f822016-11-29 06:05:39 -060047
48 // Inventory manager needs object path, list of interface names to be
49 // implemented, and property:value pairs contained in said interfaces
50
Santosh Puranik3d7b4fe2020-04-02 23:27:22 +053051 % for interface, properties in fru.items():
Deepak Kodihalli8457f822016-11-29 06:05:39 -060052<%
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060053 names = interface.split(".")
54 intfName = names[0] + names[-1]
Deepak Kodihalli8457f822016-11-29 06:05:39 -060055%>\
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060056 PropertyMap ${intfName}Props;
Marri Devender Raoc74ca6c2017-08-20 01:22:34 -050057 % if properties:
Santosh Puranik3d7b4fe2020-04-02 23:27:22 +053058 % for name, value in properties.items():
Marri Devender Raoc74ca6c2017-08-20 01:22:34 -050059 % if fru and interface and name and value:
Deepak Kodihalli8457f822016-11-29 06:05:39 -060060<%
Deepak Kodihallidb12d762017-09-11 23:04:33 -050061 record, keyword = name.split(",")
Deepak Kodihalli8457f822016-11-29 06:05:39 -060062%>\
Deepak Kodihallidb12d762017-09-11 23:04:33 -050063 if (vpdStore.exists<Record::${record}, record::Keyword::${keyword}>())
64 {
65 ${intfName}Props["${value}"] =
66 vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
67 }
Marri Devender Raoc74ca6c2017-08-20 01:22:34 -050068 % endif
69 % endfor
70 % endif
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060071 // Check and update extra properties
72 if(extra::objects.end() != iter)
73 {
74 auto propIter = (iter->second).find("${interface}");
75 if((iter->second).end() != propIter)
76 {
77 for(const auto& map : propIter->second)
78 {
79 ${intfName}Props[map.first] = map.second;
80 }
81 }
82 }
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060083 interfaces.emplace("${interface}",
84 std::move(${intfName}Props));
Deepak Kodihalli8457f822016-11-29 06:05:39 -060085 % endfor
86
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060087 sdbusplus::message::object_path object(path);
Deepak Kodihalli128512b2017-02-17 03:12:08 -060088 // Check and update extra properties
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060089 if(extra::objects.end() != iter)
Deepak Kodihalli128512b2017-02-17 03:12:08 -060090 {
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060091 for(const auto& entry : iter->second)
Deepak Kodihalli128512b2017-02-17 03:12:08 -060092 {
Deepak Kodihalli0cc20122017-02-21 03:35:20 -060093 if(interfaces.end() == interfaces.find(entry.first))
94 {
95 interfaces.emplace(entry.first, entry.second);
96 }
Deepak Kodihalli128512b2017-02-17 03:12:08 -060097 }
98 }
Deepak Kodihalli4cf89a12017-02-06 05:06:48 -060099 objects.emplace(std::move(object), std::move(interfaces));
100
101 callPIM(std::move(objects));
Deepak Kodihalli8457f822016-11-29 06:05:39 -0600102}
103
104% endfor
105} // namespace inventory
106} // namespace vpd
107} // namespace openpower