summaryrefslogtreecommitdiffstats
path: root/extensions/openpower-pels/ascii_string.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/openpower-pels/ascii_string.hpp')
-rw-r--r--extensions/openpower-pels/ascii_string.hpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/extensions/openpower-pels/ascii_string.hpp b/extensions/openpower-pels/ascii_string.hpp
new file mode 100644
index 0000000..0970df9
--- /dev/null
+++ b/extensions/openpower-pels/ascii_string.hpp
@@ -0,0 +1,103 @@
+#pragma once
+
+#include "registry.hpp"
+#include "stream.hpp"
+
+#include <string>
+
+namespace openpower
+{
+namespace pels
+{
+namespace src
+{
+
+const size_t asciiStringSize = 32;
+
+/**
+ * @class AsciiString
+ *
+ * This represents the ASCII string field in the SRC PEL section.
+ * This 32 character string shows up on the panel on a function 11.
+ *
+ * The first 2 characters are the SRC type, like 'BD' or '11'.
+ * Next is the subsystem, like '8D', if a BD SRC, otherwise '00'.
+ * Next is the reason code, like 'AAAA'.
+ * The rest is filled in with spaces.
+ */
+class AsciiString
+{
+ public:
+ AsciiString() = delete;
+ ~AsciiString() = default;
+ AsciiString(const AsciiString&) = default;
+ AsciiString& operator=(const AsciiString&) = default;
+ AsciiString(AsciiString&&) = default;
+ AsciiString& operator=(AsciiString&&) = default;
+
+ /**
+ * @brief Constructor
+ *
+ * Fills in this class's data fields from the stream.
+ *
+ * @param[in] pel - the PEL data stream
+ */
+ explicit AsciiString(Stream& stream);
+
+ /**
+ * @brief Constructor
+ *
+ * Fills in the class from the registry entry
+ */
+ explicit AsciiString(const message::Entry& entry);
+
+ /**
+ * @brief Flatten the object into the stream
+ *
+ * @param[in] stream - The stream to write to
+ */
+ void flatten(Stream& stream) const;
+
+ /**
+ * @brief Fills in the object from the stream data
+ *
+ * @param[in] stream - The stream to read from
+ */
+ void unflatten(Stream& stream);
+
+ /**
+ * @brief Return the 32 character ASCII string data
+ *
+ * @return std::string - The data
+ */
+ std::string get() const;
+
+ private:
+ /**
+ * @brief Converts a byte of raw data to 2 characters
+ * and writes it to the offset.
+ *
+ * For example, if string is: "AABBCCDD"
+ *
+ * setByte(0, 0x11);
+ * setByte(1, 0x22);
+ * setByte(2, 0x33);
+ * setByte(3, 0x44);
+ *
+ * results in "11223344"
+ *
+ * @param[in] offset - The offset into the ascii string
+ * @param[in] value - The value to write (0x55 -> "55")
+ */
+ void setByte(size_t offset, uint8_t value);
+
+ /**
+ * @brief The ASCII string itself
+ */
+ std::array<char, asciiStringSize> _string;
+};
+
+} // namespace src
+
+} // namespace pels
+} // namespace openpower
OpenPOWER on IntegriCloud