inventory : implement VPD write
Define and implement API to write parsed OpenPOWER VPD for a FRU to the
inventory.
The API needs as input the FRU type, FRU object path and
parsed VPD. It makes use of the inventory manager to then create the
desired FRU object, populated with the VPD.
Change-Id: I97ec7e1f0cd7b28b5ccb5d8e7dbeb2cad2a7093e
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/write.cpp b/write.cpp
new file mode 100644
index 0000000..e4f3e59
--- /dev/null
+++ b/write.cpp
@@ -0,0 +1,59 @@
+#include <exception>
+#include <algorithm>
+#include "defines.hpp"
+#include "write.hpp"
+#include "writefru.hpp"
+
+namespace openpower
+{
+namespace vpd
+{
+namespace inventory
+{
+
+static const std::unordered_map<std::string, Fru> supportedFrus =
+{
+ {"BMC", Fru::BMC},
+ {"ETHERNET", Fru::ETHERNET}
+};
+
+void write(const std::string& type,
+ const Store& vpdStore,
+ const std::string& path)
+{
+ // Get the enum corresponding to type, and call
+ // appropriate write FRU method.
+
+ std::string fru = type;
+ std::transform(fru.begin(), fru.end(), fru.begin(),
+ [](unsigned char c) { return std::toupper(c); });
+ auto iterator = supportedFrus.find(fru);
+ if (supportedFrus.end() == iterator)
+ {
+ throw std::runtime_error("Unsupported FRU: " + std::move(fru));
+ }
+ else
+ {
+ switch (iterator->second)
+ {
+ case Fru::BMC:
+ {
+ writeFru<Fru::BMC>(vpdStore, path);
+ break;
+ }
+
+ case Fru::ETHERNET:
+ {
+ writeFru<Fru::ETHERNET>(vpdStore, path);
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+}
+
+} // inventory
+} // namespace vpd
+} // namespace openpower