xref: /openbmc/openpower-vpd-parser/vpd-manager/include/parser_interface.hpp (revision 43fedabc032ba7c209b58111b6c35c7d95a9f14e)
1fa5e4d32SSunny Srivastava #pragma once
2fa5e4d32SSunny Srivastava 
3fa5e4d32SSunny Srivastava #include "types.hpp"
4fa5e4d32SSunny Srivastava 
5fa5e4d32SSunny Srivastava #include <variant>
6fa5e4d32SSunny Srivastava 
7fa5e4d32SSunny Srivastava namespace vpd
8fa5e4d32SSunny Srivastava {
9fa5e4d32SSunny Srivastava /**
10fa5e4d32SSunny Srivastava  * @brief Interface class for parsers.
11fa5e4d32SSunny Srivastava  *
12fa5e4d32SSunny Srivastava  * Any concrete parser class, implementing parsing logic need to derive from
13fa5e4d32SSunny Srivastava  * this interface class and override the parse method declared in this class.
14fa5e4d32SSunny Srivastava  */
15fa5e4d32SSunny Srivastava class ParserInterface
16fa5e4d32SSunny Srivastava {
17fa5e4d32SSunny Srivastava   public:
18fa5e4d32SSunny Srivastava     /**
19fa5e4d32SSunny Srivastava      * @brief Pure virtual function for parsing VPD file.
20fa5e4d32SSunny Srivastava      *
21fa5e4d32SSunny Srivastava      * The API needs to be overridden by all the classes deriving from parser
22fa5e4d32SSunny Srivastava      * inerface class to implement respective VPD parsing logic.
23fa5e4d32SSunny Srivastava      *
24fa5e4d32SSunny Srivastava      * @return parsed format for VPD data, depending upon the
25fa5e4d32SSunny Srivastava      * parsing logic.
26fa5e4d32SSunny Srivastava      */
27fa5e4d32SSunny Srivastava     virtual types::VPDMapVariant parse() = 0;
28fa5e4d32SSunny Srivastava 
29fa5e4d32SSunny Srivastava     /**
30fa5e4d32SSunny Srivastava      * @brief Read keyword's value from hardware
31fa5e4d32SSunny Srivastava      *
32fa5e4d32SSunny Srivastava      * @param[in] types::ReadVpdParams - Parameters required to perform read.
33fa5e4d32SSunny Srivastava      *
34fa5e4d32SSunny Srivastava      * @return keyword's value on successful read. Exception on failure.
35fa5e4d32SSunny Srivastava      */
readKeywordFromHardware(const types::ReadVpdParams)36*43fedabcSPatrick Williams     virtual types::DbusVariantType readKeywordFromHardware(
37*43fedabcSPatrick Williams         const types::ReadVpdParams)
38fa5e4d32SSunny Srivastava     {
39fa5e4d32SSunny Srivastava         return types::DbusVariantType();
40fa5e4d32SSunny Srivastava     }
41fa5e4d32SSunny Srivastava 
42fa5e4d32SSunny Srivastava     /**
43fa5e4d32SSunny Srivastava      * @brief API to write keyword's value on hardware.
44fa5e4d32SSunny Srivastava      *
45fa5e4d32SSunny Srivastava      * This virtual method is created to achieve runtime polymorphism for
46fa5e4d32SSunny Srivastava      * hardware writes on VPD of different types. This virtual method can be
47fa5e4d32SSunny Srivastava      * redefined at derived classess to implement write according to the type of
48fa5e4d32SSunny Srivastava      * VPD.
49fa5e4d32SSunny Srivastava      *
50fa5e4d32SSunny Srivastava      * @param[in] i_paramsToWriteData - Data required to perform write.
51fa5e4d32SSunny Srivastava      *
52fa5e4d32SSunny Srivastava      * @throw May throw exception depending on the implementation of derived
53fa5e4d32SSunny Srivastava      * methods.
54fa5e4d32SSunny Srivastava      * @return On success returns number of bytes written on hardware, On
55fa5e4d32SSunny Srivastava      * failure returns -1.
56fa5e4d32SSunny Srivastava      */
writeKeywordOnHardware(const types::WriteVpdParams i_paramsToWriteData)57*43fedabcSPatrick Williams     virtual int writeKeywordOnHardware(
58*43fedabcSPatrick Williams         const types::WriteVpdParams i_paramsToWriteData)
59fa5e4d32SSunny Srivastava     {
60fa5e4d32SSunny Srivastava         (void)i_paramsToWriteData;
61fa5e4d32SSunny Srivastava         return -1;
62fa5e4d32SSunny Srivastava     }
63fa5e4d32SSunny Srivastava 
64fa5e4d32SSunny Srivastava     /**
65fa5e4d32SSunny Srivastava      * @brief Virtual destructor.
66fa5e4d32SSunny Srivastava      */
~ParserInterface()67fa5e4d32SSunny Srivastava     virtual ~ParserInterface() {}
68fa5e4d32SSunny Srivastava };
69fa5e4d32SSunny Srivastava } // namespace vpd
70