1 #pragma once
2 
3 #include "bios_attribute.hpp"
4 
5 class TestBIOSIntegerAttribute;
6 
7 namespace pldm
8 {
9 namespace responder
10 {
11 namespace bios
12 {
13 
14 /** @class BIOSIntegerAttribute
15  *  @brief Associate integer entry(attr table and attribute value table) and
16  *         dbus attribute
17  */
18 class BIOSIntegerAttribute : public BIOSAttribute
19 {
20   public:
21     friend class ::TestBIOSIntegerAttribute;
22 
23     /** @brief Construct a bios integer attribute
24      *  @param[in] entry - Json Object
25      *  @param[in] dbusHandler - Dbus Handler
26      */
27     BIOSIntegerAttribute(const Json& entry,
28                          pldm::utils::DBusHandler* const dbusHandler);
29 
30     /** @brief Set Attribute value On Dbus according to the attribute value
31      *         entry
32      *  @param[in] attrValueEntry - The attribute value entry
33      *  @param[in] attrEntry - The attribute entry corresponding to the
34      *                         attribute value entry
35      *  @param[in] stringTable - The string table
36      */
37     void
38         setAttrValueOnDbus(const pldm_bios_attr_val_table_entry* attrValueEntry,
39                            const pldm_bios_attr_table_entry* attrEntry,
40                            const BIOSStringTable& stringTable) override;
41 
42     /** @brief Construct corresponding entries at the end of the attribute table
43      *         and attribute value tables
44      *  @param[in] stringTable - The string Table
45      *  @param[in,out] attrTable - The attribute table
46      *  @param[in,out] attrValueTable - The attribute value table
47      *  @param[in,out] optAttributeValue - init value of the attribute
48      */
49     void constructEntry(const BIOSStringTable& stringTable, Table& attrTable,
50                         Table& attrValueTable,
51                         std::optional<std::variant<int64_t, std::string>>
52                             optAttributeValue = std::nullopt) override;
53 
54     /** @brief Generate attribute entry by the spec DSP0247_1.0.0 Table 14
55      *  @param[in] attributevalue - attribute value(Enumeration, String and
56      *             Integer)
57      *  @param[in,out] attrValueEntry - attribute entry
58      */
59     void generateAttributeEntry(
60         const std::variant<int64_t, std::string>& attributevalue,
61         Table& attrValueEntry) override;
62 
63     int updateAttrVal(Table& newValue, uint16_t attrHdl, uint8_t attrType,
64                       const pldm::utils::PropertyValue& newPropVal);
65 
66   private:
67     /** @brief Integer field from json */
68     table::attribute::IntegerField integerInfo;
69 
70     /** @brief Get pldm value from dbus propertyValue */
71     uint64_t getAttrValue(const pldm::utils::PropertyValue& value);
72 
73     /** @brief Get value on dbus */
74     uint64_t getAttrValue();
75 };
76 
77 } // namespace bios
78 } // namespace responder
79 } // namespace pldm
80