Attn: Add support for raw pel symptom-id
Update raw pel symptom-id based on TI info data.
Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
Change-Id: I501938e0fc9dba189999ab1491d23acd15628068
diff --git a/attn/pel/extended_user_header.cpp b/attn/pel/extended_user_header.cpp
new file mode 100644
index 0000000..117ca62
--- /dev/null
+++ b/attn/pel/extended_user_header.cpp
@@ -0,0 +1,59 @@
+#include "extended_user_header.hpp"
+
+namespace attn
+{
+namespace pel
+{
+
+ExtendedUserHeader::ExtendedUserHeader(Stream& pel)
+{
+ unflatten(pel);
+}
+
+void ExtendedUserHeader::flatten(Stream& pel) const
+{
+ pel << _header;
+ pel.write(_mtms, mtmsSize);
+ pel.write(_serverFWVersion.data(), _serverFWVersion.size());
+ pel.write(_subsystemFWVersion.data(), _subsystemFWVersion.size());
+ pel << _reserved4B << _refTime << _reserved1B1 << _reserved1B2
+ << _reserved1B3 << _symptomIdSize << _symptomId;
+}
+
+void ExtendedUserHeader::unflatten(Stream& pel)
+{
+ pel >> _header;
+ pel.read(_mtms, mtmsSize);
+ pel.read(_serverFWVersion.data(), _serverFWVersion.size());
+ pel.read(_subsystemFWVersion.data(), _subsystemFWVersion.size());
+ pel >> _reserved4B >> _refTime >> _reserved1B1 >> _reserved1B2 >>
+ _reserved1B3 >> _symptomIdSize >> _symptomId;
+
+ //_symptomId.resize(_symptomIdSize);
+ pel >> _symptomId;
+}
+
+void ExtendedUserHeader::setSymptomId(const std::string& symptomId)
+{
+ // set symptomId to new symptomId
+ std::copy(symptomId.begin(), symptomId.end(),
+ std::back_inserter(_symptomId));
+
+ // new symptom Id cannot be larger than existing symptom Id
+ if (_symptomId.size() > size_t((_symptomIdSize - 1)))
+ {
+ _symptomId.resize(_symptomIdSize - 1);
+ }
+
+ // null terminate new symptom Id (it may have been smaller)
+ _symptomId.push_back(0);
+
+ // pad if new symptom ID (it may have been smaller)
+ while ((_symptomId.size() != _symptomIdSize))
+ {
+ _symptomId.push_back(0);
+ }
+}
+
+} // namespace pel
+} // namespace attn