xref: /openbmc/openpower-vpd-parser/ibm_vpd_utils.hpp (revision 6c71c9dcbf9e56a6ae44525b11ca4e4a92b5ab5e)
1 #pragma once
2 
3 #include "const.hpp"
4 #include "types.hpp"
5 
6 #include <iostream>
7 
8 using namespace std;
9 
10 namespace openpower
11 {
12 namespace vpd
13 {
14 
15 /** @brief Return the hex representation of the incoming byte
16  *
17  * @param [in] c - The input byte
18  * @returns The hex representation of the byte as a character.
19  */
20 constexpr auto toHex(size_t c)
21 {
22     constexpr auto map = "0123456789abcdef";
23     return map[c];
24 }
25 
26 namespace inventory
27 {
28 /** @brief Api to obtain a dictionary of path -> services
29  * where path is in subtree and services is of the type
30  * returned by the GetObject method.
31  *
32  * @param [in] root - Root path for object subtree
33  * @param [in] depth - Maximum subtree depth required
34  * @param [in] interfaces - Array to interfaces for which
35  * result is required.
36  * @return A dictionary of Path -> services
37  */
38 MapperResponse
39     getObjectSubtreeForInterfaces(const std::string& root, const int32_t depth,
40                                   const std::vector<std::string>& interfaces);
41 
42 } // namespace inventory
43 
44 /**@brief This API reads 2 Bytes of data and swap the read data
45  * @param[in] iterator- Pointer pointing to the data to be read
46  * @return returns 2 Byte data read at the given pointer
47  */
48 openpower::vpd::constants::LE2ByteData
49     readUInt16LE(Binary::const_iterator iterator);
50 
51 /** @brief Encodes a keyword for D-Bus.
52  *  @param[in] kw - kwd data in string format
53  *  @param[in] encoding - required for kwd data
54  */
55 string encodeKeyword(const string& kw, const string& encoding);
56 
57 /** @brief Reads a property from the inventory manager given object path,
58  *         intreface and property.
59  *  @param[in] obj - object path
60  *  @param[in] inf - interface
61  *  @param[in] prop - property whose value is fetched
62  *  @return [out] - value of the property
63  */
64 string readBusProperty(const string& obj, const string& inf,
65                        const string& prop);
66 
67 /**
68  * @brief API to create PEL entry
69  * @param[in] Map holding the additional data
70  * @param[in] error interface
71  */
72 void createPEL(const std::map<std::string, std::string>& additionalData,
73                const std::string& errIntf);
74 
75 /**
76  * @brief getVpdFilePath
77  * Get vpd file path corresponding to the given object path.
78  * @param[in] - json file path
79  * @param[in] - Object path
80  * @return - Vpd file path
81  */
82 inventory::VPDfilepath getVpdFilePath(const string& jsonFile,
83                                       const std::string& ObjPath);
84 
85 /**
86  * @brief isPathInJson
87  * API which checks for the presence of the given eeprom path in the given json.
88  * @param[in] - eepromPath
89  * @return - true if the eeprom is present in the json; false otherwise
90  */
91 bool isPathInJson(const std::string& eepromPath);
92 
93 /**
94  * @brief isRecKwInDbusJson
95  * API which checks whether the given keyword under the given record is to be
96  * published on dbus or not. Checks against the keywords present in
97  * dbus_property.json.
98  * @param[in] - record name
99  * @param[in] - keyword name
100  * @return - true if the record-keyword pair is present in dbus_property.json;
101  * false otherwise.
102  */
103 bool isRecKwInDbusJson(const std::string& record, const std::string& keyword);
104 
105 /**
106  * @brief Check the type of VPD.
107  *
108  * Checks the type of vpd based on the start tag.
109  * @param[in] vector - Vpd data in vector format
110  *
111  * @return enum of type vpdType
112  */
113 constants::vpdType vpdTypeCheck(const Binary& vector);
114 
115 } // namespace vpd
116 } // namespace openpower
117