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