PEL: Create UserHeader from parameters

Add a constructor to the UserHeader section class so it can be built
from the message registry entry for that error along with the event log
severity.

This will be used when creating PELs from OpenBMC event logs.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I7e432f59de7b3f0ba77c3e5887ed5ec3f442ed44
diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index e5e8abb..6dfbc09 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -1,6 +1,7 @@
 #include "user_header.hpp"
 
 #include "pel_types.hpp"
+#include "severity.hpp"
 
 #include <phosphor-logging/log.hpp>
 
@@ -25,6 +26,43 @@
            << _actionFlags << _reserved4Byte2;
 }
 
+UserHeader::UserHeader(const message::Entry& entry,
+                       phosphor::logging::Entry::Level severity)
+{
+    _header.id = static_cast<uint16_t>(SectionID::userHeader);
+    _header.size = UserHeader::flattenedSize();
+    _header.version = userHeaderVersion;
+    _header.subType = 0;
+    _header.componentID = static_cast<uint16_t>(ComponentID::phosphorLogging);
+
+    _eventSubsystem = entry.subsystem;
+
+    _eventScope = entry.eventScope.value_or(
+        static_cast<uint8_t>(EventScope::entirePlatform));
+
+    // Get the severity from the registry if it's there, otherwise get it
+    // from the OpenBMC event log severity value.
+    _eventSeverity =
+        entry.severity.value_or(convertOBMCSeverityToPEL(severity));
+
+    // TODO: ibm-dev/dev/#1144 Handle manufacturing sev & action flags
+
+    _eventType = entry.eventType.value_or(
+        static_cast<uint8_t>(EventType::notApplicable));
+
+    _reserved4Byte1 = 0;
+
+    // No uses for problem domain or vector
+    _problemDomain = 0;
+    _problemVector = 0;
+
+    _actionFlags = entry.actionFlags;
+
+    _reserved4Byte2 = 0;
+
+    _valid = true;
+}
+
 UserHeader::UserHeader(Stream& pel)
 {
     try