blob: ff364ec46ed5b32596df36c617054b06de5149ea [file] [log] [blame]
John Wang29683b52020-02-27 16:41:44 +08001#pragma once
2#include "bios_attribute.hpp"
3
4#include <string>
5
6class TestBIOSStringAttribute;
7
8namespace pldm
9{
10namespace responder
11{
12namespace bios
13{
14
15/** @class BIOSStringAttribute
16 * @brief Associate string entry(attr table and attribute value table) and dbus
17 * attribute
18 */
19class BIOSStringAttribute : public BIOSAttribute
20{
21 public:
22 friend class ::TestBIOSStringAttribute;
23
24 /** @brief BIOS string types */
25 enum class Encoding : uint8_t
26 {
27 UNKNOWN = 0x00,
28 ASCII = 0x01,
29 HEX = 0x02,
30 UTF_8 = 0x03,
31 UTF_16LE = 0x04,
32 UTF_16BE = 0x05,
33 VENDOR_SPECIFIC = 0xFF
34 };
35
36 /** brief Mapping of string to enum for string type */
37 inline static const std::map<std::string, Encoding> strTypeMap{
38 {"Unknown", Encoding::UNKNOWN},
39 {"ASCII", Encoding::ASCII},
40 {"Hex", Encoding::HEX},
41 {"UTF-8", Encoding::UTF_8},
42 {"UTF-16LE", Encoding::UTF_16LE},
43 {"UTF-16LE", Encoding::UTF_16LE},
44 {"Vendor Specific", Encoding::VENDOR_SPECIFIC}};
45
46 /** @brief Construct a bios string attribute
47 * @param[in] entry - Json Object
48 * @param[in] dbusHandler - Dbus Handler
49 */
50 BIOSStringAttribute(const Json& entry, DBusHandler* const dbusHandler);
51
52 /** @brief Set Attribute value On Dbus according to the attribute value
53 * entry
54 * @param[in] attrValueEntry - The attribute value entry
55 * @param[in] attrEntry - The attribute entry corresponding to the
56 * attribute value entry
57 * @param[in] stringTable - The string table
58 */
59 void
60 setAttrValueOnDbus(const pldm_bios_attr_val_table_entry* attrValueEntry,
61 const pldm_bios_attr_table_entry* attrEntry,
62 const BIOSStringTable& stringTable) override;
63
64 /** @brief Construct corresponding entries at the end of the attribute table
65 * and attribute value tables
66 * @param[in] stringTable - The string Table
67 * @param[in,out] attrTable - The attribute table
68 * @param[in,out] attrValueTable - The attribute value table
Tom Josephca7b2522020-11-18 12:27:11 +053069 * @param[in,out] optAttributeValue - init value of the attribute
John Wang29683b52020-02-27 16:41:44 +080070 */
71 void constructEntry(const BIOSStringTable& stringTable, Table& attrTable,
Tom Josephca7b2522020-11-18 12:27:11 +053072 Table& attrValueTable,
73 std::optional<std::variant<int64_t, std::string>>
74 optAttributeValue = std::nullopt) override;
John Wang29683b52020-02-27 16:41:44 +080075
George Liu1244acf2020-08-14 09:11:11 +080076 /** @brief Generate attribute entry by the spec DSP0247_1.0.0 Table 14
77 * @param[in] attributevalue - attribute value(Enumeration, String and
78 * Integer)
79 * @param[in,out] attrValueEntry - attribute entry
80 */
81 void generateAttributeEntry(
82 const std::variant<int64_t, std::string>& attributevalue,
83 Table& attrValueEntry) override;
84
Sampa Misra46ece062020-03-18 07:17:44 -050085 int updateAttrVal(Table& newValue, uint16_t attrHdl, uint8_t attrType,
86 const PropertyValue& newPropVal);
87
John Wang29683b52020-02-27 16:41:44 +080088 private:
89 /** @brief string field from json */
90 table::attribute::StringField stringInfo;
91
92 /** @brief Get attribute value on dbus */
93 std::string getAttrValue();
94};
95
96} // namespace bios
97} // namespace responder
98} // namespace pldm