summaryrefslogtreecommitdiff
path: root/src/audio/include/stream_message.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/include/stream_message.hpp')
-rw-r--r--src/audio/include/stream_message.hpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/audio/include/stream_message.hpp b/src/audio/include/stream_message.hpp
index cbd7c733..043f9dc3 100644
--- a/src/audio/include/stream_message.hpp
+++ b/src/audio/include/stream_message.hpp
@@ -1,12 +1,12 @@
#pragma once
-#include <stdint.h>
-
+#include <cstdint>
#include <functional>
#include <optional>
#include "cbor.h"
#include "result.hpp"
+#include "span.hpp"
namespace audio {
@@ -20,14 +20,13 @@ enum MessageType {
};
template <typename Writer>
-auto WriteMessage(MessageType type,
- Writer&& writer,
- uint8_t* buffer,
- size_t length) -> cpp::result<size_t, CborError> {
+auto WriteMessage(MessageType type, Writer&& writer, cpp::span<std::byte> data)
+ -> cpp::result<size_t, CborError> {
CborEncoder root;
CborEncoder container;
+ uint8_t* cast_data = reinterpret_cast<uint8_t*>(data.data());
- cbor_encoder_init(&root, buffer, length, kEncoderFlags);
+ cbor_encoder_init(&root, cast_data, data.size(), kEncoderFlags);
cbor_encoder_create_array(&root, &container, 2);
cbor_encode_uint(&container, type);
@@ -37,17 +36,18 @@ auto WriteMessage(MessageType type,
}
cbor_encoder_close_container(&root, &container);
- return cbor_encoder_get_buffer_size(&root, buffer);
+ return cbor_encoder_get_buffer_size(&root, cast_data);
}
template <typename Result, typename Reader>
-auto ReadMessage(Reader&& reader, uint8_t* buffer, size_t length)
+auto ReadMessage(Reader&& reader, cpp::span<std::byte> data)
-> cpp::result<Result, CborError> {
CborParser parser;
CborValue root;
CborValue container;
- cbor_parser_init(buffer, length, kDecoderFlags, &parser, &root);
+ cbor_parser_init(reinterpret_cast<uint8_t*>(data.data()), data.size(),
+ kDecoderFlags, &parser, &root);
cbor_value_enter_container(&root, &container);
// Skip the type header
cbor_value_advance_fixed(&container);
@@ -55,6 +55,9 @@ auto ReadMessage(Reader&& reader, uint8_t* buffer, size_t length)
return std::invoke(reader, container);
}
-auto ReadMessageType(uint8_t* buffer, size_t length) -> MessageType;
+auto WriteTypeOnlyMessage(MessageType type, cpp::span<std::byte> data)
+ -> cpp::result<size_t, CborError>;
+auto ReadMessageType(cpp::span<std::byte> msg) -> MessageType;
+auto GetAdditionalData(cpp::span<std::byte> msg) -> cpp::span<std::byte>;
} // namespace audio