| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 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" | 
| Deepak Kodihalli | 7679449 | 2017-02-16 23:48:18 -0600 | [diff] [blame] | 12 | #include "types.hpp" | 
 | 13 | #include "utils.hpp" | 
| Deepak Kodihalli | 128512b | 2017-02-17 03:12:08 -0600 | [diff] [blame] | 14 | #include "extra-properties-gen.hpp" | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 15 |  | 
 | 16 | namespace openpower | 
 | 17 | { | 
 | 18 | namespace vpd | 
 | 19 | { | 
 | 20 | namespace inventory | 
 | 21 | { | 
 | 22 |  | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 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 | { | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 42 |     ObjectMap objects; | 
 | 43 |     InterfaceMap interfaces; | 
| Deepak Kodihalli | 0cc2012 | 2017-02-21 03:35:20 -0600 | [diff] [blame] | 44 |     auto iter = extra::objects.find(path); | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 45 |  | 
 | 46 |     // Inventory manager needs object path, list of interface names to be | 
 | 47 |     // implemented, and property:value pairs contained in said interfaces | 
 | 48 |  | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 49 |     % for interface, properties in fru.iteritems(): | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 50 | <% | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 51 |         names = interface.split(".") | 
 | 52 |         intfName = names[0] + names[-1] | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 53 | %>\ | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 54 |     PropertyMap ${intfName}Props; | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 55 |         % for name, value in properties.iteritems(): | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 56 |             % if fru and interface and name and value: | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 57 | <% | 
| Deepak Kodihalli | db12d76 | 2017-09-11 23:04:33 -0500 | [diff] [blame^] | 58 |                 record, keyword = name.split(",") | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 59 | %>\ | 
| Deepak Kodihalli | db12d76 | 2017-09-11 23:04:33 -0500 | [diff] [blame^] | 60 |     if (vpdStore.exists<Record::${record}, record::Keyword::${keyword}>()) | 
 | 61 |     { | 
 | 62 |         ${intfName}Props["${value}"] = | 
 | 63 |             vpdStore.get<Record::${record}, record::Keyword::${keyword}>(); | 
 | 64 |     } | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 65 |             % endif | 
 | 66 |         % endfor | 
| Deepak Kodihalli | 0cc2012 | 2017-02-21 03:35:20 -0600 | [diff] [blame] | 67 |     // 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 Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 79 |     interfaces.emplace("${interface}", | 
 | 80 |                        std::move(${intfName}Props)); | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 81 |     % endfor | 
 | 82 |  | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 83 |     sdbusplus::message::object_path object(path); | 
| Deepak Kodihalli | 128512b | 2017-02-17 03:12:08 -0600 | [diff] [blame] | 84 |     // Check and update extra properties | 
| Deepak Kodihalli | 0cc2012 | 2017-02-21 03:35:20 -0600 | [diff] [blame] | 85 |     if(extra::objects.end() != iter) | 
| Deepak Kodihalli | 128512b | 2017-02-17 03:12:08 -0600 | [diff] [blame] | 86 |     { | 
| Deepak Kodihalli | 0cc2012 | 2017-02-21 03:35:20 -0600 | [diff] [blame] | 87 |         for(const auto& entry : iter->second) | 
| Deepak Kodihalli | 128512b | 2017-02-17 03:12:08 -0600 | [diff] [blame] | 88 |         { | 
| Deepak Kodihalli | 0cc2012 | 2017-02-21 03:35:20 -0600 | [diff] [blame] | 89 |             if(interfaces.end() == interfaces.find(entry.first)) | 
 | 90 |             { | 
 | 91 |                 interfaces.emplace(entry.first, entry.second); | 
 | 92 |             } | 
| Deepak Kodihalli | 128512b | 2017-02-17 03:12:08 -0600 | [diff] [blame] | 93 |         } | 
 | 94 |     } | 
| Deepak Kodihalli | 4cf89a1 | 2017-02-06 05:06:48 -0600 | [diff] [blame] | 95 |     objects.emplace(std::move(object), std::move(interfaces)); | 
 | 96 |  | 
 | 97 |     callPIM(std::move(objects)); | 
| Deepak Kodihalli | 8457f82 | 2016-11-29 06:05:39 -0600 | [diff] [blame] | 98 | } | 
 | 99 |  | 
 | 100 | % endfor | 
 | 101 | } // namespace inventory | 
 | 102 | } // namespace vpd | 
 | 103 | } // namespace openpower |