blob: 61ee5eb4e8b17b075bfe4130f01844774cd66f8a [file] [log] [blame]
Patrick Venture00887592018-12-11 10:57:06 -08001#pragma once
2
Patrick Venture0533d0b2018-12-13 08:48:24 -08003#include "firmware_handler.hpp"
4
Patrick Venture7871b452018-12-13 08:53:14 -08005#include <cstdint>
Patrick Venture00887592018-12-11 10:57:06 -08006#include <string>
7#include <vector>
8
Patrick Venture9b534f02018-12-13 16:10:02 -08009namespace host_tool
10{
11
Patrick Venture0bf8bf02018-12-12 20:43:25 -080012struct StatResponse
13{
14 std::uint16_t blob_state;
15 std::uint32_t size;
16 std::vector<std::uint8_t> metadata;
17};
18
Patrick Venture00887592018-12-11 10:57:06 -080019class BlobInterface
20{
Patrick Venture00887592018-12-11 10:57:06 -080021 public:
22 virtual ~BlobInterface() = default;
23
24 /**
Patrick Venture77c59182019-01-17 14:53:31 -080025 * Write metadata to a blob.
26 *
27 * @param[in] session - the session id.
28 * @param[in] offset - the offset for the metadata to write.
29 * @param[in] bytes - the bytes to send.
30 * @throws BlobException on failure.
31 */
32 virtual void writeMeta(std::uint16_t session, std::uint32_t offset,
33 const std::vector<std::uint8_t>& bytes) = 0;
34
35 /**
Patrick Venture0309f102019-01-15 13:41:05 -080036 * Write bytes to a blob.
37 *
38 * @param[in] session - the session id.
39 * @param[in] offset - the offset to which to write the bytes.
40 * @param[in] bytes - the bytes to send.
41 * @throws BlobException on failure.
42 */
43 virtual void writeBytes(std::uint16_t session, std::uint32_t offset,
44 const std::vector<std::uint8_t>& bytes) = 0;
45
46 /**
Patrick Venture00887592018-12-11 10:57:06 -080047 * Get a list of the blob_ids provided by the BMC.
48 *
49 * @return list of strings, each representing a blob_id returned.
50 */
51 virtual std::vector<std::string> getBlobList() = 0;
Patrick Venture0bf8bf02018-12-12 20:43:25 -080052
53 /**
54 * Get the stat() on the blob_id.
55 *
56 * @param[in] id - the blob_id.
57 * @return metadata structure.
58 */
59 virtual StatResponse getStat(const std::string& id) = 0;
Patrick Venture0533d0b2018-12-13 08:48:24 -080060
61 /**
62 * Attempt to open the file using the specific data interface flag.
63 *
64 * @param[in] blob - the blob_id to open.
65 * @param[in] handlerFlags - the data interface flag, if relevant.
66 * @return the session id on success.
67 * @throws BlobException on failure.
68 */
69 virtual std::uint16_t
70 openBlob(const std::string& id,
71 blobs::FirmwareBlobHandler::UpdateFlags handlerFlags) = 0;
Patrick Venture9a5ce562018-12-14 18:56:04 -080072
73 /**
74 * Attempt to close the open session.
75 *
76 * @param[in] session - the session to close.
77 */
78 virtual void closeBlob(std::uint16_t session) = 0;
Patrick Venture957f0862019-02-01 14:40:06 -080079
80 /**
81 * Read bytes from a blob.
82 *
83 * @param[in] session - the session id.
84 * @param[in] offset - the offset to which to write the bytes.
85 * @param[in] length - the number of bytes to read.
86 * @return the bytes read
87 * @throws BlobException on failure.
88 */
89 virtual std::vector<std::uint8_t> readBytes(std::uint16_t session,
90 std::uint32_t offset,
91 std::uint32_t length) = 0;
Patrick Venture00887592018-12-11 10:57:06 -080092};
Patrick Venture9b534f02018-12-13 16:10:02 -080093
94} // namespace host_tool