blob: effc733ecfa8cfd72a7ac235bb4c0486fe11a563 [file] [log] [blame]
John Wange2efdcc2020-02-12 17:02:06 +08001#pragma once
2
George Liu6492f522020-06-16 10:34:05 +08003#include "bios_table.h"
4
John Wange2efdcc2020-02-12 17:02:06 +08005#include "bios_table.hpp"
6#include "utils.hpp"
7
George Liu6492f522020-06-16 10:34:05 +08008#include <nlohmann/json.hpp>
9
John Wange2efdcc2020-02-12 17:02:06 +080010#include <cstdint>
11#include <filesystem>
12#include <memory>
John Wange2efdcc2020-02-12 17:02:06 +080013#include <optional>
14#include <string>
15#include <vector>
16
John Wange2efdcc2020-02-12 17:02:06 +080017namespace pldm
18{
19namespace responder
20{
21namespace bios
22{
23
24using Json = nlohmann::json;
25using namespace pldm::utils;
26
27/** @class BIOSAttribute
28 * @brief Provide interfaces to implement specific types of attributes
29 */
30class BIOSAttribute
31{
32 public:
33 /** @brief Construct a bios attribute
34 * @param[in] entry - Json Object
35 * @param[in] dbusHandler - Dbus Handler
36 */
37 BIOSAttribute(const Json& entry, 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 */
61 virtual void constructEntry(const BIOSStringTable& stringTable,
62 Table& attrTable, Table& attrValueTable) = 0;
63
Sampa Misra46ece062020-03-18 07:17:44 -050064 /** @brief Method to update the value for an attribute
65 * @param[in,out] newValue - An attribute value table row with the new
66 * value for the attribute
67 * @param[in] attrHdl - attribute handle
68 * @param[in] attrType - attribute type
69 * @param[in] newPropVal - The new value
70 * @return PLDM Success or failure status
71 */
72 virtual int updateAttrVal(Table& newValue, uint16_t attrHdl,
73 uint8_t attrType,
74 const PropertyValue& newPropVal) = 0;
75
76 /** @brief Method to return the D-Bus map */
77 std::optional<DBusMapping> getDBusMap();
78
John Wange2efdcc2020-02-12 17:02:06 +080079 /** @brief Name of this attribute */
80 const std::string name;
81
82 /** Weather this attribute is read-only */
83 const bool readOnly;
84
85 protected:
86 /** @brief dbus backend, nullopt if this attribute is read-only*/
87 std::optional<DBusMapping> dBusMap;
88
89 /** @brief dbus handler */
90 DBusHandler* const dbusHandler;
91};
92
93} // namespace bios
94} // namespace responder
Sampa Misra46ece062020-03-18 07:17:44 -050095} // namespace pldm