diff options
author | Aatir Manzur <aatrapps@gmail.com> | 2019-09-06 13:30:48 -0500 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2019-10-09 08:13:30 -0500 |
commit | 51c9263f080fe794d62724a35e44dc1cfff75415 (patch) | |
tree | a238eb121bb90102f2ef2e7756d70280e152a51a /extensions/openpower-pels/user_data.hpp | |
parent | 07eefc543b36f9fdb7d7b7ff2a64018d0770bc31 (diff) | |
download | phosphor-logging-51c9263f080fe794d62724a35e44dc1cfff75415.tar.gz phosphor-logging-51c9263f080fe794d62724a35e44dc1cfff75415.zip |
PEL: User Data class
This class is used for accessing the UserData section of a PEL.
This section contains free format data that can be identified by the
component ID, subtype, and version fields in the section header.
Signed-off-by: Aatir Manzur <aatrapps@gmail.com>
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I1223f84353e81202d1ff63c00f3d926cda4994e5
Diffstat (limited to 'extensions/openpower-pels/user_data.hpp')
-rw-r--r-- | extensions/openpower-pels/user_data.hpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/extensions/openpower-pels/user_data.hpp b/extensions/openpower-pels/user_data.hpp new file mode 100644 index 0000000..98bf0a8 --- /dev/null +++ b/extensions/openpower-pels/user_data.hpp @@ -0,0 +1,105 @@ +#pragma once + +#include "section.hpp" +#include "stream.hpp" + +namespace openpower +{ +namespace pels +{ + +/** + * @class UserData + * + * This represents the User Data section in a PEL. It is free form data + * that the creator knows the contents of. The component ID, version, + * and sub-type fields in the section header are used to identify the + * format. + * + * The Section base class handles the section header structure that every + * PEL section has at offset zero. + */ +class UserData : public Section +{ + public: + UserData() = delete; + ~UserData() = default; + UserData(const UserData&) = default; + UserData& operator=(const UserData&) = default; + UserData(UserData&&) = default; + UserData& operator=(UserData&&) = default; + + /** + * @brief Constructor + * + * Fills in this class's data fields from the stream. + * + * @param[in] pel - the PEL data stream + */ + explicit UserData(Stream& pel); + + /** + * @brief Constructor + * + * Create a valid UserData object with the passed in data. + * + * The component ID, subtype, and version are used to identify + * the data to know which parser to call. + * + * @param[in] componentID - Component ID of the creator + * @param[in] subType - The type of user data + * @param[in] version - The version of the data + */ + UserData(uint16_t componentID, uint8_t subType, uint8_t version, + const std::vector<uint8_t>& data); + + /** + * @brief Flatten the section into the stream + * + * @param[in] stream - The stream to write to + */ + void flatten(Stream& stream) override; + + /** + * @brief Returns the size of this section when flattened into a PEL + * + * @return size_t - the size of the section + */ + size_t flattenedSize() + { + return Section::flattenedSize() + _data.size(); + } + + /** + * @brief Returns the raw section data + * + * @return std::vector<uint8_t>& + */ + const std::vector<uint8_t>& data() const + { + return _data; + } + + private: + /** + * @brief Fills in the object from the stream data + * + * @param[in] stream - The stream to read from + */ + void unflatten(Stream& stream); + + /** + * @brief Validates the section contents + * + * Updates _valid (in Section) with the results. + */ + void validate() override; + + /** + * @brief The section data + */ + std::vector<uint8_t> _data; +}; + +} // namespace pels +} // namespace openpower |