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) 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();
70 
71     /**
72      * @brief Returns the machine serial number as a string
73      *
74      * @return std::string the serial number
75      */
76     std::string getMachineSerialNumber();
77 
78   private:
79     /**
80      * @brief Validates the section contents
81      *
82      * Updates _valid (in Section) with the results.
83      */
84     void validate() override;
85 
86     /**
87      * @brief Fills in the object from the stream data
88      *
89      * @param[in] stream - The stream to read from
90      */
91     void unflatten(Stream& stream);
92 
93     /**
94      * @brief The structure that holds the TM and SN fields.
95      *        This is also used in other places in the PEL.
96      */
97     MTMS _mtms;
98 };
99 
100 } // namespace pels
101 
102 } // namespace openpower
103