| #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; | 
 |  | 
 |     /** | 
 |      * @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); | 
 |  | 
 |   private: | 
 |     /** | 
 |      * @brief The ASCII string itself | 
 |      */ | 
 |     std::array<char, asciiStringSize> _string; | 
 | }; | 
 |  | 
 | } // namespace src | 
 |  | 
 | } // namespace pels | 
 | } // namespace openpower |