1 #pragma once 2 3 #include "libpldm/bios_table.h" 4 5 #include "bios_table.hpp" 6 #include "common/utils.hpp" 7 8 #include <nlohmann/json.hpp> 9 10 #include <cstdint> 11 #include <filesystem> 12 #include <memory> 13 #include <optional> 14 #include <string> 15 #include <vector> 16 17 namespace pldm 18 { 19 namespace responder 20 { 21 namespace bios 22 { 23 24 using Json = nlohmann::json; 25 26 /** @class BIOSAttribute 27 * @brief Provide interfaces to implement specific types of attributes 28 */ 29 class BIOSAttribute 30 { 31 public: 32 /** @brief Construct a bios attribute 33 * @param[in] entry - Json Object 34 * @param[in] dbusHandler - Dbus Handler 35 */ 36 BIOSAttribute(const Json& entry, 37 pldm::utils::DBusHandler* const dbusHandler); 38 39 /** Virtual destructor 40 */ 41 virtual ~BIOSAttribute() = default; 42 43 /** @brief Set Attribute value On Dbus according to the attribute value 44 * entry 45 * @param[in] attrValueEntry - The attribute value entry 46 * @param[in] attrEntry - The attribute entry corresponding to the 47 * attribute value entry 48 * @param[in] stringTable - The string table 49 */ 50 virtual void 51 setAttrValueOnDbus(const pldm_bios_attr_val_table_entry* attrValueEntry, 52 const pldm_bios_attr_table_entry* attrEntry, 53 const BIOSStringTable& stringTable) = 0; 54 55 /** @brief Construct corresponding entries at the end of the attribute table 56 * and attribute value tables 57 * @param[in] stringTable - The string Table 58 * @param[in,out] attrTable - The attribute table 59 * @param[in,out] attrValueTable - The attribute value table 60 * @param[in,out] optAttributeValue - init value of the attribute 61 */ 62 virtual void constructEntry( 63 const BIOSStringTable& stringTable, Table& attrTable, 64 Table& attrValueTable, 65 std::optional<std::variant<int64_t, std::string>> optAttributeValue = 66 std::nullopt) = 0; 67 68 /** @brief Method to update the value for an attribute 69 * @param[in,out] newValue - An attribute value table row with the new 70 * value for the attribute 71 * @param[in] attrHdl - attribute handle 72 * @param[in] attrType - attribute type 73 * @param[in] newPropVal - The new value 74 * @return PLDM Success or failure status 75 */ 76 virtual int updateAttrVal(Table& newValue, uint16_t attrHdl, 77 uint8_t attrType, 78 const pldm::utils::PropertyValue& newPropVal) = 0; 79 80 /** @brief Generate attribute entry by the spec DSP0247_1.0.0 Table 14 81 * @param[in] attributevalue - attribute value(Enumeration, String and 82 * Integer) 83 * @param[in,out] attrValueEntry - attribute entry 84 */ 85 virtual void generateAttributeEntry( 86 const std::variant<int64_t, std::string>& attributevalue, 87 Table& attrValueEntry) = 0; 88 89 /** @brief Method to return the D-Bus map */ 90 std::optional<pldm::utils::DBusMapping> getDBusMap(); 91 92 /** @brief Name of this attribute */ 93 const std::string name; 94 95 /** Weather this attribute is read-only */ 96 bool readOnly; 97 98 const std::string displayName; 99 100 const std::string helpText; 101 102 protected: 103 /** @brief dbus backend, nullopt if this attribute is read-only*/ 104 std::optional<pldm::utils::DBusMapping> dBusMap; 105 106 /** @brief dbus handler */ 107 pldm::utils::DBusHandler* const dbusHandler; 108 }; 109 110 } // namespace bios 111 } // namespace responder 112 } // namespace pldm 113