xref: /openbmc/openpower-vpd-parser/wait-vpd-parser/src/prime_inventory.cpp (revision 445819fc74795c53cb3061468c24310d352e327c)
1*445819fcSAnupama B R #include "prime_inventory.hpp"
2*445819fcSAnupama B R 
3*445819fcSAnupama B R #include "event_logger.hpp"
4*445819fcSAnupama B R #include "exceptions.hpp"
5*445819fcSAnupama B R #include "utility/dbus_utility.hpp"
6*445819fcSAnupama B R #include "utility/json_utility.hpp"
7*445819fcSAnupama B R #include "utility/vpd_specific_utility.hpp"
8*445819fcSAnupama B R 
9*445819fcSAnupama B R #include <string>
10*445819fcSAnupama B R 
PrimeInventory()11*445819fcSAnupama B R PrimeInventory::PrimeInventory()
12*445819fcSAnupama B R {
13*445819fcSAnupama B R     try
14*445819fcSAnupama B R     {
15*445819fcSAnupama B R         uint16_t l_errCode = 0;
16*445819fcSAnupama B R         m_sysCfgJsonObj =
17*445819fcSAnupama B R             vpd::jsonUtility::getParsedJson(INVENTORY_JSON_SYM_LINK, l_errCode);
18*445819fcSAnupama B R 
19*445819fcSAnupama B R         if (l_errCode)
20*445819fcSAnupama B R         {
21*445819fcSAnupama B R             throw std::runtime_error(
22*445819fcSAnupama B R                 "JSON parsing failed for file [ " +
23*445819fcSAnupama B R                 std::string(INVENTORY_JSON_SYM_LINK) + " ], error : " +
24*445819fcSAnupama B R                 vpd::vpdSpecificUtility::getErrCodeMsg(l_errCode));
25*445819fcSAnupama B R         }
26*445819fcSAnupama B R 
27*445819fcSAnupama B R         // check for mandatory fields at this point itself.
28*445819fcSAnupama B R         if (!m_sysCfgJsonObj.contains("frus"))
29*445819fcSAnupama B R         {
30*445819fcSAnupama B R             throw std::runtime_error(
31*445819fcSAnupama B R                 "Mandatory tag(s) missing from JSON file [" +
32*445819fcSAnupama B R                 std::string(INVENTORY_JSON_SYM_LINK) + "]");
33*445819fcSAnupama B R         }
34*445819fcSAnupama B R     }
35*445819fcSAnupama B R     catch (const std::exception& l_ex)
36*445819fcSAnupama B R     {
37*445819fcSAnupama B R         vpd::EventLogger::createSyncPel(
38*445819fcSAnupama B R             vpd::types::ErrorType::JsonFailure,
39*445819fcSAnupama B R             vpd::types::SeverityType::Critical, __FILE__, __FUNCTION__, 0,
40*445819fcSAnupama B R             "Prime inventory failed, reason: " + std::string(l_ex.what()),
41*445819fcSAnupama B R             std::nullopt, std::nullopt, std::nullopt, std::nullopt);
42*445819fcSAnupama B R 
43*445819fcSAnupama B R         throw;
44*445819fcSAnupama B R     }
45*445819fcSAnupama B R }
46*445819fcSAnupama B R 
isPrimingRequired() const47*445819fcSAnupama B R bool PrimeInventory::isPrimingRequired() const noexcept
48*445819fcSAnupama B R {
49*445819fcSAnupama B R     // ToDo: Check if priming is required.
50*445819fcSAnupama B R     return true;
51*445819fcSAnupama B R }
52*445819fcSAnupama B R 
primeSystemBlueprint() const53*445819fcSAnupama B R void PrimeInventory::primeSystemBlueprint() const noexcept
54*445819fcSAnupama B R {
55*445819fcSAnupama B R     try
56*445819fcSAnupama B R     {
57*445819fcSAnupama B R         /*ToDo:
58*445819fcSAnupama B R       * Check if priming is required.
59*445819fcSAnupama B R       * Traverse the system config JSON &
60*445819fcSAnupama B R       prime all the FRU paths which qualifies for priming.
61*445819fcSAnupama B R       */
62*445819fcSAnupama B R     }
63*445819fcSAnupama B R     catch (const std::exception& l_ex)
64*445819fcSAnupama B R     {
65*445819fcSAnupama B R         // ToDo: log an error
66*445819fcSAnupama B R     }
67*445819fcSAnupama B R }
68*445819fcSAnupama B R 
primeInventory(const std::string & i_vpdFilePath) const69*445819fcSAnupama B R bool PrimeInventory::primeInventory(
70*445819fcSAnupama B R     [[maybe_unused]] const std::string& i_vpdFilePath) const noexcept
71*445819fcSAnupama B R {
72*445819fcSAnupama B R     // ToDo: Travers system config JSON & prime inventory objects found under
73*445819fcSAnupama B R     // the EEPROM.
74*445819fcSAnupama B R     return true;
75*445819fcSAnupama B R }
76*445819fcSAnupama B R 
populateInterfaces(const nlohmann::json & i_interfaceJson,vpd::types::InterfaceMap & io_interfaceMap,const vpd::types::VPDMapVariant & i_parsedVpdMap) const77*445819fcSAnupama B R void PrimeInventory::populateInterfaces(
78*445819fcSAnupama B R     [[maybe_unused]] const nlohmann::json& i_interfaceJson,
79*445819fcSAnupama B R     [[maybe_unused]] vpd::types::InterfaceMap& io_interfaceMap,
80*445819fcSAnupama B R     [[maybe_unused]] const vpd::types::VPDMapVariant& i_parsedVpdMap)
81*445819fcSAnupama B R     const noexcept
82*445819fcSAnupama B R {
83*445819fcSAnupama B R     // ToDo: Populate interfaces needs to be published on Dbus.
84*445819fcSAnupama B R }
85*445819fcSAnupama B R 
processFunctionalProperty(const std::string & i_inventoryObjPath,vpd::types::InterfaceMap & io_interfaces) const86*445819fcSAnupama B R void PrimeInventory::processFunctionalProperty(
87*445819fcSAnupama B R     [[maybe_unused]] const std::string& i_inventoryObjPath,
88*445819fcSAnupama B R     [[maybe_unused]] vpd::types::InterfaceMap& io_interfaces) const noexcept
89*445819fcSAnupama B R {
90*445819fcSAnupama B R     // ToDo: Populate interface to publish Functional property on Dbus.
91*445819fcSAnupama B R }
92*445819fcSAnupama B R 
processEnabledProperty(const std::string & i_inventoryObjPath,vpd::types::InterfaceMap & io_interfaces) const93*445819fcSAnupama B R void PrimeInventory::processEnabledProperty(
94*445819fcSAnupama B R     [[maybe_unused]] const std::string& i_inventoryObjPath,
95*445819fcSAnupama B R     [[maybe_unused]] vpd::types::InterfaceMap& io_interfaces) const noexcept
96*445819fcSAnupama B R {
97*445819fcSAnupama B R     // ToDo: Populate interface to publish Enabled property on Dbus.
98*445819fcSAnupama B R }
99