blob: 2b4077cd3bc791f32dda332e862147332a199b16 [file] [log] [blame]
Deepak Kodihallicb7f2d42019-06-19 13:25:31 +05301#pragma once
2
3#include <stdint.h>
4
5#include <filesystem>
6#include <vector>
7
8#include "libpldm/bios.h"
9
10namespace pldm
11{
12
13namespace responder
14{
15
16namespace bios
17{
18
19using Table = std::vector<uint8_t>;
20using Response = std::vector<uint8_t>;
21namespace fs = std::filesystem;
22
23/** @class BIOSTable
24 *
25 * @brief Provides APIs for storing and loading BIOS tables
26 *
27 * Typical usage is as follows:
28 * BIOSTable table(BIOS_STRING_TABLE_FILE_PATH);
29 * if (table.isEmpty()) { // no persisted table
30 * // construct BIOSTable 't'
31 * // prepare Response 'r'
32 * // send response to GetBIOSTable
33 * table.store(t); // persisted
34 * }
35 * else { // persisted table exists
36 * // create Response 'r' which has response fields (except
37 * // the table itself) to a GetBIOSTable command
38 * table.load(r); // actual table will be pushed back to the vector
39 * }
40 */
41class BIOSTable
42{
43 public:
44 /** @brief Ctor - set file path to persist BIOS table
45 *
46 * @param[in] filePath - file where BIOS table should be persisted
47 */
48 BIOSTable(const char* filePath);
49
50 /** @brief Checks if there's a persisted BIOS table
51 *
52 * @return bool - true if table exists, false otherwise
53 */
54 bool isEmpty() const noexcept;
55
56 /** @brief Persist a BIOS table(string/attribute/attribute value)
57 *
58 * @param[in] table - BIOS table
59 */
60 void store(const Table& table);
61
62 /** @brief Load BIOS table from persistent store to memory
63 *
64 * @param[in,out] response - PLDM response message to GetBIOSTable
65 * (excluding table), table will be pushed back to this.
66 */
67 void load(Response& response) const;
68
69 private:
70 // file storing PLDM BIOS table
71 fs::path filePath;
72};
73
74} // namespace bios
75} // namespace responder
76} // namespace pldm