1 #pragma once
2 
3 #include "data_interface.hpp"
4 #include "mtms.hpp"
5 #include "section.hpp"
6 #include "stream.hpp"
7 
8 namespace openpower
9 {
10 namespace pels
11 {
12 
13 /**
14  * @class FailingMTMS
15  *
16  * This represents the Failing Enclosure MTMS section in a PEL.
17  * It is a required section.  In the BMC case, the enclosure is
18  * the system enclosure.
19  */
20 class FailingMTMS : public Section
21 {
22   public:
23     FailingMTMS() = delete;
24     ~FailingMTMS() = default;
25     FailingMTMS(const FailingMTMS&) = default;
26     FailingMTMS& operator=(const FailingMTMS&) = default;
27     FailingMTMS(FailingMTMS&&) = default;
28     FailingMTMS& operator=(FailingMTMS&&) = default;
29 
30     /**
31      * @brief Constructor
32      *
33      * @param[in] dataIface - The object to use to obtain
34      *                        the MTM and SN.
35      */
36     explicit FailingMTMS(const DataInterfaceBase& dataIface);
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 FailingMTMS(Stream& pel);
46 
47     /**
48      * @brief Flatten the section into the stream
49      *
50      * @param[in] stream - The stream to write to
51      */
52     void flatten(Stream& stream) const override;
53 
54     /**
55      * @brief Returns the size of this section when flattened into a PEL
56      *
57      * @return size_t - the size of the section
58      */
59     static constexpr size_t flattenedSize()
60     {
61         return Section::flattenedSize() + MTMS::flattenedSize();
62     }
63 
64     /**
65      * @brief Returns the machine type+model as a string
66      *
67      * @return std::string the MTM
68      */
69     std::string getMachineTypeModel() const
70     {
71         return _mtms.machineTypeAndModel();
72     }
73 
74     /**
75      * @brief Returns the machine serial number as a string
76      *
77      * @return std::string the serial number
78      */
79     std::string getMachineSerialNumber() const
80     {
81         return _mtms.machineSerialNumber();
82     }
83 
84     /**
85      * @brief Get section in JSON.
86      *
87      * @param[in] creatorID - The creator ID for the PEL
88      *
89      * @return std::optional<std::string> - Failing MTMS section in JSON
90      */
91     std::optional<std::string> getJSON(uint8_t creatorID) const override;
92 
93   private:
94     /**
95      * @brief Validates the section contents
96      *
97      * Updates _valid (in Section) with the results.
98      */
99     void validate() override;
100 
101     /**
102      * @brief Fills in the object from the stream data
103      *
104      * @param[in] stream - The stream to read from
105      */
106     void unflatten(Stream& stream);
107 
108     /**
109      * @brief The structure that holds the TM and SN fields.
110      *        This is also used in other places in the PEL.
111      */
112     MTMS _mtms;
113 };
114 
115 } // namespace pels
116 
117 } // namespace openpower
118