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