blob: 0fdf12444d482f2b6f203404027c098242022c06 [file] [log] [blame]
Matt Spinler6852d722019-09-30 15:35:53 -05001#pragma once
2
3#include "registry.hpp"
4#include "stream.hpp"
5
6#include <string>
7
8namespace openpower
9{
10namespace pels
11{
12namespace src
13{
14
15const size_t asciiStringSize = 32;
16
17/**
18 * @class AsciiString
19 *
20 * This represents the ASCII string field in the SRC PEL section.
21 * This 32 character string shows up on the panel on a function 11.
22 *
23 * The first 2 characters are the SRC type, like 'BD' or '11'.
24 * Next is the subsystem, like '8D', if a BD SRC, otherwise '00'.
25 * Next is the reason code, like 'AAAA'.
26 * The rest is filled in with spaces.
27 */
28class AsciiString
29{
30 public:
31 AsciiString() = delete;
32 ~AsciiString() = default;
33 AsciiString(const AsciiString&) = default;
34 AsciiString& operator=(const AsciiString&) = default;
35 AsciiString(AsciiString&&) = default;
36 AsciiString& operator=(AsciiString&&) = default;
37
38 /**
39 * @brief Constructor
40 *
41 * Fills in this class's data fields from the stream.
42 *
43 * @param[in] pel - the PEL data stream
44 */
45 explicit AsciiString(Stream& stream);
46
47 /**
48 * @brief Constructor
49 *
50 * Fills in the class from the registry entry
51 */
52 explicit AsciiString(const message::Entry& entry);
53
54 /**
55 * @brief Flatten the object into the stream
56 *
57 * @param[in] stream - The stream to write to
58 */
Matt Spinler724d0d82019-11-06 10:05:36 -060059 void flatten(Stream& stream) const;
Matt Spinler6852d722019-09-30 15:35:53 -050060
61 /**
62 * @brief Fills in the object from the stream data
63 *
64 * @param[in] stream - The stream to read from
65 */
66 void unflatten(Stream& stream);
67
68 /**
69 * @brief Return the 32 character ASCII string data
70 *
71 * @return std::string - The data
72 */
73 std::string get() const;
74
Matt Spinler6852d722019-09-30 15:35:53 -050075 /**
76 * @brief Converts a byte of raw data to 2 characters
77 * and writes it to the offset.
78 *
79 * For example, if string is: "AABBCCDD"
80 *
81 * setByte(0, 0x11);
82 * setByte(1, 0x22);
83 * setByte(2, 0x33);
84 * setByte(3, 0x44);
85 *
86 * results in "11223344"
87 *
88 * @param[in] offset - The offset into the ascii string
89 * @param[in] value - The value to write (0x55 -> "55")
90 */
91 void setByte(size_t offset, uint8_t value);
92
Sumit Kumar50bfa692022-01-06 06:48:26 -060093 private:
Matt Spinler6852d722019-09-30 15:35:53 -050094 /**
95 * @brief The ASCII string itself
96 */
97 std::array<char, asciiStringSize> _string;
98};
99
100} // namespace src
101
102} // namespace pels
103} // namespace openpower