pldmtool: Add completion code to GetPLDMTypes & GetPLDMVersion

Add human readable completion code strings to GetPLDMTypes
and GetPLDMVersion command response.
Test Results:
```
./pldmtool base GetPLDMTypes -m 13
{
    "CompletionCode": "SUCCESS",
    "PLDMTypes": [
        {
            "PLDM Type": "base",
            "PLDM Type Code": 0
        },
        {
            "PLDM Type": "platform",
            "PLDM Type Code": 2
        }
    ]
}

./pldmtool base GetPLDMVersion -t base -m 13
{
    "CompletionCode": "SUCCESS",
    "Response": "1.0.0"
}
```
Change-Id: Ic6441812a1958016345516527ff10f4cf2b72379
Signed-off-by: Rajeev Ranjan <ranjan.rajeev1609@gmail.com>
diff --git a/pldmtool/pldm_base_cmd.cpp b/pldmtool/pldm_base_cmd.cpp
index de856d2..2e037cc 100644
--- a/pldmtool/pldm_base_cmd.cpp
+++ b/pldmtool/pldm_base_cmd.cpp
@@ -143,20 +143,27 @@
         std::vector<bitfield8_t> types(8);
         auto rc = decode_get_types_resp(responsePtr, payloadLength, &cc,
                                         types.data());
-        if (rc != PLDM_SUCCESS || cc != PLDM_SUCCESS)
+        if (rc != PLDM_SUCCESS)
         {
             std::cerr << "Response Message Error: "
                       << "rc=" << rc << ",cc=" << (int)cc << "\n";
             return;
         }
 
-        printPldmTypes(types);
+        ordered_json data;
+        fillCompletionCode(cc, data, PLDM_BASE);
+        if (cc == PLDM_SUCCESS)
+        {
+            printPLDMTypes(types, data);
+        }
+
+        pldmtool::helper::DisplayInJson(data);
     }
 
   private:
-    void printPldmTypes(std::vector<bitfield8_t>& types)
+    void printPLDMTypes(std::vector<bitfield8_t>& types, ordered_json& data)
     {
-        ordered_json data;
+        ordered_json jPldmTypes;
         ordered_json jarray;
         for (int i = 0; i < PLDM_MAX_TYPES; i++)
         {
@@ -170,11 +177,11 @@
                 {
                     jarray["PLDM Type"] = it->first;
                     jarray["PLDM Type Code"] = i;
-                    data.emplace_back(jarray);
+                    jPldmTypes.emplace_back(jarray);
                 }
             }
         }
-        pldmtool::helper::DisplayInJson(data);
+        data["PLDMTypes"] = jPldmTypes;
     }
 };
 
@@ -214,23 +221,29 @@
         auto rc =
             decode_get_version_resp(responsePtr, payloadLength, &cc,
                                     &transferHandle, &transferFlag, &version);
-        if (rc != PLDM_SUCCESS || cc != PLDM_SUCCESS)
+        if (rc != PLDM_SUCCESS)
         {
             std::cerr << "Response Message Error: "
                       << "rc=" << rc << ",cc=" << (int)cc << "\n";
             return;
         }
-        char buffer[16] = {0};
-        ver2str(&version, buffer, sizeof(buffer));
         ordered_json data;
-        auto it = std::find_if(
-            pldmTypes.begin(), pldmTypes.end(),
-            [&](const auto& typePair) { return typePair.second == pldmType; });
-
-        if (it != pldmTypes.end())
+        fillCompletionCode(cc, data, PLDM_BASE);
+        if (cc == PLDM_SUCCESS)
         {
-            data["Response"] = buffer;
+            char buffer[16] = {0};
+            ver2str(&version, buffer, sizeof(buffer));
+            auto it = std::find_if(pldmTypes.begin(), pldmTypes.end(),
+                                   [&](const auto& typePair) {
+                                       return typePair.second == pldmType;
+                                   });
+
+            if (it != pldmTypes.end())
+            {
+                data["Response"] = buffer;
+            }
         }
+
         pldmtool::helper::DisplayInJson(data);
     }