52#include "pw_bytes/span.h"
53#include "pw_chrono/system_clock.h"
54#include "pw_containers/intrusive_list.h"
55#include "pw_function/function.h"
56#include "pw_status/status.h"
57#include "pw_status/status_with_size.h"
58#include "pw_stream/stream.h"
59#include "pw_sync/lock_annotations.h"
60#include "pw_sync/mutex.h"
61#include "pw_sync/timed_thread_notification.h"
104 using duration = std::optional<chrono::SystemClock::duration>;
197 mutable sync::Mutex mutex_;
220 using duration = std::optional<chrono::SystemClock::duration>;
325 void RequestWrite(
MpscWriter::Request& write_request)
354 void CompleteWrite(
MpscWriter::Request& write_request)
356 void CompleteWriteLocked(
MpscWriter::Request& write_request)
365 mutable sync::Mutex mutex_;
375 sync::TimedThreadNotification readable_;
376 sync::ThreadNotification closeable_;
392template <
size_t kCapacity>
398 std::array<std::byte, kCapacity> buffer_;
Definition: status_with_size.h:49
Definition: intrusive_list.h:88
Definition: mpsc_stream.h:393
Definition: mpsc_stream.h:218
bool connected() const
Returns whether this object has any connected writers.
Definition: mpsc_stream.h:102
size_t ConservativeLimit(LimitType type) const override
void SetLimit(size_t limit)
size_t last_write() const
Indicates how much data was sent in the last call to Write().
void SetTimeout(const duration &timeout)
const duration & timeout() const
Returns the optional maximum time elapsed before a Write() fails.
bool connected() const
Returns whether this object is connected to a reader.
friend void CreateMpscStream(MpscReader &, MpscWriter &)
Status DoWrite(ConstByteSpan data) override
Virtual Write() function implemented by derived classes.
static constexpr size_t kUnlimited
Value returned from read/write limit if unlimited.
Definition: stream.h:66
StatusWithSize DoRead(ByteSpan) final
Virtual Read() function implemented by derived classes.
Definition: stream.h:450
Definition: timed_thread_notification.h:40
fit::function_impl< function_internal::config::kInlineCallableSize, !function_internal::config::kEnableDynamicAllocation, FunctionType, PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE > Function
Definition: function.h:73
void CreateMpscStream(MpscReader &reader, MpscWriter &writer)
#define PW_GUARDED_BY(x)
Definition: lock_annotations.h:60
#define PW_EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: lock_annotations.h:146
#define PW_LOCKS_EXCLUDED(...)
Definition: lock_annotations.h:176
Definition: mpsc_stream.h:111