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      * @return std::optional<std::string> - Failing MTMS section in JSON
87      */
88     std::optional<std::string> getJSON() const override;
89 
90   private:
91     /**
92      * @brief Validates the section contents
93      *
94      * Updates _valid (in Section) with the results.
95      */
96     void validate() override;
97 
98     /**
99      * @brief Fills in the object from the stream data
100      *
101      * @param[in] stream - The stream to read from
102      */
103     void unflatten(Stream& stream);
104 
105     /**
106      * @brief The structure that holds the TM and SN fields.
107      *        This is also used in other places in the PEL.
108      */
109     MTMS _mtms;
110 };
111 
112 } // namespace pels
113 
114 } // namespace openpower
115