Inventory:- Make changes in the mako and the C++ structure

This change lies in the Write Fru Data command processing.
As fru yaml would be having extra properties like
entityID,entityInstance,So changes were needed to make the change
in the corresponding c++ structure.

Change-Id: If23bb12563cdef34438746e2d6a8be7f54b7486d
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/frup.hpp b/frup.hpp
index 15b5eaf..3f68acd 100644
--- a/frup.hpp
+++ b/frup.hpp
@@ -84,16 +84,25 @@
 };
 
 using DbusProperty = std::string;
-using DbusPropertyVec = std::vector<std::pair<DbusProperty,IPMIFruData>>;
+using DbusPropertyVec = std::vector<std::pair<DbusProperty, IPMIFruData>>;
 
 using DbusInterface = std::string;
-using DbusInterfaceVec = std::vector<std::pair<DbusInterface,DbusPropertyVec>>;
+using DbusInterfaceVec = std::vector<std::pair<DbusInterface, DbusPropertyVec>>;
 
 using FruInstancePath = std::string;
-using FruInstanceVec = std::vector<std::pair<FruInstancePath,DbusInterfaceVec>>;
+
+struct FruInstance
+{
+    uint8_t entityID;
+    uint8_t entityInstance;
+    FruInstancePath path;
+    DbusInterfaceVec interfaces;
+};
+
+using FruInstanceVec = std::vector<FruInstance>;
 
 using FruId = uint32_t;
-using FruMap = std::map<FruId,FruInstanceVec>;
+using FruMap = std::map<FruId, FruInstanceVec>;
 
 /* Parse an IPMI write fru data message into a dictionary containing name value pair of VPD entries.*/
 int parse_fru (const void* msgbuf, sd_bus_message* vpdtbl);
diff --git a/scripts/example.yaml b/scripts/example.yaml
index 69d7ebd..d257d42 100644
--- a/scripts/example.yaml
+++ b/scripts/example.yaml
@@ -7,118 +7,133 @@
 # Format of the YAML:
 # Fruid:
 #   Associated Fru paths
-#     d-bus Interafaces
+#     d-bus Interfaces
 #       d-bus Properties
 #         IPMI Fru mapping
 0:
   /system:
-    xyz.openbmc_project.Inventory.Item:
-      PrettyName:
-        IPMIFruProperty: Product Name
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Decorator.Asset:
-      Manufacturer:
-        IPMIFruProperty: Manufacturer
-        IPMIFruSection: Product
-      PartNumber:
-        IPMIFruProperty: Part Number
-        IPMIFruSection: Product
-      SerialNumber:
-        IPMIFruProperty: Serial Number
-        IPMIFruSection: Product
-      BuildDate:
-        IPMIFruProperty: Mfg Date
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Revision:
-      Version:
-        IPMIFruProperty: Version
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Item.System:
+    entityID: 200
+    entityInstance: 1
+    interfaces:
+      xyz.openbmc_project.Inventory.Item:
+        PrettyName:
+          IPMIFruProperty: Product Name
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Decorator.Asset:
+        Manufacturer:
+          IPMIFruProperty: Manufacturer
+          IPMIFruSection: Product
+        PartNumber:
+          IPMIFruProperty: Part Number
+          IPMIFruSection: Product
+        SerialNumber:
+          IPMIFruProperty: Serial Number
+          IPMIFruSection: Product
+        BuildDate:
+          IPMIFruProperty: Mfg Date
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Decorator.Revision:
+        Version:
+          IPMIFruProperty: Version
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Item.System:
 1:
   /system/chassis/motherboard/dimm0:
-    xyz.openbmc_project.Inventory.Item:
-      PrettyName:
-        IPMIFruProperty: Product Name
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Decorator.Asset:
-      Manufacturer:
-        IPMIFruProperty: Manufacturer
-        IPMIFruSection: Product
-      BuildDate:
-        IPMIFruProperty: Mfg Date
-        IPMIFruSection: Product
-      SerialNumber:
-        IPMIFruProperty: Serial Number
-        IPMIFruSection: Product
-      PartNumber:
-        IPMIFruProperty: Part Number
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Revision:
-      Version:
-        IPMIFruProperty: Version
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Item.Dimm:
+    entityID: 8
+    entityInstance: 1
+    interfaces:
+      xyz.openbmc_project.Inventory.Item:
+        PrettyName:
+          IPMIFruProperty: Product Name
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Decorator.Asset:
+        Manufacturer:
+          IPMIFruProperty: Manufacturer
+          IPMIFruSection: Product
+        BuildDate:
+          IPMIFruProperty: Mfg Date
+          IPMIFruSection: Product
+        SerialNumber:
+          IPMIFruProperty: Serial Number
+          IPMIFruSection: Product
+        PartNumber:
+          IPMIFruProperty: Part Number
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Decorator.Revision:
+        Version:
+          IPMIFruProperty: Version
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Item.Dimm:
 2:
   /system/chassis/motherboard/dimm1:
-    xyz.openbmc_project.Inventory.Item:
-      PrettyName:
-        IPMIFruProperty: Product Name
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Decorator.Asset:
-      Manufacturer:
-        IPMIFruProperty: Manufacturer
-        IPMIFruSection: Product
-      BuildDate:
-        IPMIFruProperty: Mfg Date
-        IPMIFruSection: Product
-      SerialNumber:
-        IPMIFruProperty: Serial Number
-        IPMIFruSection: Product
-      PartNumber:
-        IPMIFruProperty: Part Number
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Revision:
-      Version:
-        IPMIFruProperty: Version
-        IPMIFruSection: Product
-    xyz.openbmc_project.Inventory.Item.Dimm:
+    entityID: 8
+    entityInstance: 2
+    interfaces:
+      xyz.openbmc_project.Inventory.Item:
+        PrettyName:
+          IPMIFruProperty: Product Name
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Decorator.Asset:
+        Manufacturer:
+          IPMIFruProperty: Manufacturer
+          IPMIFruSection: Product
+        BuildDate:
+          IPMIFruProperty: Mfg Date
+          IPMIFruSection: Product
+        SerialNumber:
+          IPMIFruProperty: Serial Number
+          IPMIFruSection: Product
+        PartNumber:
+          IPMIFruProperty: Part Number
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Decorator.Revision:
+        Version:
+          IPMIFruProperty: Version
+          IPMIFruSection: Product
+      xyz.openbmc_project.Inventory.Item.Dimm:
 3:
   /system/chassis/motherboard/cpu0:
-    xyz.openbmc_project.Inventory.Item:
-      PrettyName:
-        IPMIFruProperty: Product Name
-        IPMIFruSection: Board
-    xyz.openbmc_project.Inventory.Decorator.Asset:
-      BuildDate:
-        IPMIFruProperty: Mfg Date
-        IPMIFruSection: Board
-      SerialNumber:
-        IPMIFruProperty: Serial Number
-        IPMIFruSection: Board
-      PartNumber:
-        IPMIFruProperty: Part Number
-        IPMIFruSection: Board
-      Manufacturer:
-        IPMIFruProperty: Manufacturer
-        IPMIFruSection: Board
-    xyz.openbmc_project.Inventory.Item.Cpu:
+    entityID: 3
+    entityInstance: 1
+    interfaces:
+      xyz.openbmc_project.Inventory.Item:
+        PrettyName:
+          IPMIFruProperty: Product Name
+          IPMIFruSection: Board
+      xyz.openbmc_project.Inventory.Decorator.Asset:
+        BuildDate:
+          IPMIFruProperty: Mfg Date
+          IPMIFruSection: Board
+        SerialNumber:
+          IPMIFruProperty: Serial Number
+          IPMIFruSection: Board
+        PartNumber:
+          IPMIFruProperty: Part Number
+          IPMIFruSection: Board
+        Manufacturer:
+          IPMIFruProperty: Manufacturer
+          IPMIFruSection: Board
+      xyz.openbmc_project.Inventory.Item.Cpu:
 4:
   /system/chassis/motherboard/cpu1:
-    xyz.openbmc_project.Inventory.Item:
-      PrettyName:
-        IPMIFruProperty: Product Name
-        IPMIFruSection: Board
-    xyz.openbmc_project.Inventory.Decorator.Asset:
-      BuildDate:
-        IPMIFruProperty: Mfg Date
-        IPMIFruSection: Board
-      SerialNumber:
-        IPMIFruProperty: Serial Number
-        IPMIFruSection: Board
-      PartNumber:
-        IPMIFruProperty: Part Number
-        IPMIFruSection: Board
-      Manufacturer:
-        IPMIFruProperty: Manufacturer
-        IPMIFruSection: Board
-    xyz.openbmc_project.Inventory.Item.Cpu:
+    entityID: 3
+    entityInstance: 2
+    interfaces:
+      xyz.openbmc_project.Inventory.Item:
+        PrettyName:
+          IPMIFruProperty: Product Name
+          IPMIFruSection: Board
+      xyz.openbmc_project.Inventory.Decorator.Asset:
+        BuildDate:
+          IPMIFruProperty: Mfg Date
+          IPMIFruSection: Board
+        SerialNumber:
+          IPMIFruProperty: Serial Number
+          IPMIFruSection: Board
+        PartNumber:
+          IPMIFruProperty: Part Number
+          IPMIFruSection: Board
+        Manufacturer:
+          IPMIFruProperty: Manufacturer
+          IPMIFruSection: Board
+      xyz.openbmc_project.Inventory.Item.Cpu:
diff --git a/scripts/writefru.mako.cpp b/scripts/writefru.mako.cpp
index 0a0a14f..a3de4b5 100644
--- a/scripts/writefru.mako.cpp
+++ b/scripts/writefru.mako.cpp
@@ -6,17 +6,22 @@
 % for key in fruDict.keys():
    {${key},{
 <%
-    fru = fruDict[key]
+    instanceList = fruDict[key]
 %>
-    % for object,interfaces in fru.items():
-         {"${object}",{
+    % for instancePath,instanceInfo in instanceList.items():
+<%
+        entityID = instanceInfo["entityID"]
+        entityInstance = instanceInfo["entityInstance"]
+        interfaces = instanceInfo["interfaces"]
+%>
+         {${entityID}, ${entityInstance}, "${instancePath}",{
          % for interface,properties in interfaces.items():
              {"${interface}",{
             % if properties:
                 % for dbus_property,property_value in properties.items():
                     {"${dbus_property}",{
                         "${property_value.get("IPMIFruSection", "")}",
-                        "${property_value.get("IPMIFruProperty", "")}", \
+                        "${property_value.get("IPMIFruProperty", "")}",\
 <%
     delimiter = property_value.get("IPMIFruValueDelimiter")
     if not delimiter:
diff --git a/writefrudata.cpp b/writefrudata.cpp
index 97282ea..6e1fbec 100644
--- a/writefrudata.cpp
+++ b/writefrudata.cpp
@@ -353,9 +353,9 @@
     for (auto& instance : instanceList)
     {
         InterfaceMap interfaces;
-        const auto& extrasIter = extras.find(instance.first);
+        const auto& extrasIter = extras.find(instance.path);
 
-        for (auto& interfaceList : instance.second)
+        for (auto& interfaceList : instance.interfaces)
         {
             PropertyMap props;//store all the properties
             for (auto& properties : interfaceList.second)
@@ -388,7 +388,7 @@
         }
 
         // Call the inventory manager
-        sdbusplus::message::object_path path = instance.first;
+        sdbusplus::message::object_path path = instance.path;
         // Check and update extra properties
         if(extras.end() != extrasIter)
         {