blob: b07940186772de8b9eba7c48702a5e1c5024b0f4 [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
69 */
70 void constructEntry(const BIOSStringTable& stringTable, Table& attrTable,
71 Table& attrValueTable) override;
72
George Liu1244acf2020-08-14 09:11:11 +080073 /** @brief Generate attribute entry by the spec DSP0247_1.0.0 Table 14
74 * @param[in] attributevalue - attribute value(Enumeration, String and
75 * Integer)
76 * @param[in,out] attrValueEntry - attribute entry
77 */
78 void generateAttributeEntry(
79 const std::variant<int64_t, std::string>& attributevalue,
80 Table& attrValueEntry) override;
81
Sampa Misra46ece062020-03-18 07:17:44 -050082 int updateAttrVal(Table& newValue, uint16_t attrHdl, uint8_t attrType,
83 const PropertyValue& newPropVal);
84
John Wang29683b52020-02-27 16:41:44 +080085 private:
86 /** @brief string field from json */
87 table::attribute::StringField stringInfo;
88
89 /** @brief Get attribute value on dbus */
90 std::string getAttrValue();
91};
92
93} // namespace bios
94} // namespace responder
95} // namespace pldm